Giter Club home page Giter Club logo

def-parser's Introduction

Парсер WebAdvisor

Серверная часть написана на go 1.13 Хранение и кэширование данных реализовано в памяти приложения.

Клиентская часть находится в папке web, одностраничник, написана на HTML5 + Bootstrap + Jquery, отдается сервером golang, но отделить ее небольшая проблема.

Запуск через docker-compose

git clone https://github.com/Delgus/def-parser.git
cd def-parser
docker-compose up --build

на http://localhost:8080 откроется приложение

Сбилдить и запустить локально

make build
./app

Переменные окружения

APP_HOST=                 # хост сервера
APP_PORT=8080             # порт сервера
CACHE_EXPIRATION=4h       # время хранения информации о сайте в кэше
CACHE_CLEAN_INTERVAL=2h   # интервал с которым очищать старый кэш
MIN_PARSE_INTERVAL=1s     # минимальный интервал между запросами к WebAdvisor
MAX_PARSE_INTERVAL=5s     # максимальный интервал между запросами к WebAdvisor
PARSE_CLIENT_TIMEOUT=30s  # таймаут для клиента парсера, сколько ждать ответа от WebAdvisor

API

Отправка списка url на обработку

POST /api

Params: url - обязательный

Response:

{
    "statement_id": 1
}

Получение результата по запросу

POST /result

Params: statement_id - обязательный

Response:

{
    "sites":[
        {
            "host":"delgus.com",
            "status":"complete", 
            "safe":"Безопасно",
            "categories":["Технические и деловые форумы"]
        },
        {
            "host":"github.com",
            "status":"complete",
            "safe":"Безопасно",
            "categories":["Технические и деловые форумы"]
        }
    ]
}

status: complete - если уже обработан сайт,
progress - если сайт еще в обработке

Event Stream

Для непрерывной доставки до клиента результата по обработке используются Server Side Events.
Необходимо подписаться на ресурс /events/{statement_id}

  eventSource = new EventSource(`/events/2`);
  eventSource.onmessage = function (event) {
      // update page
  }

Сообщения приходят в формате JSON

{
    "host":"delgus.com",
    "status":"complete",
    "safe":"Безопасно",
    "categories":["Технические и деловые форумы"]
},

Клиентская часть написана на Jquery и Bootstrap

SPA на jquery. Не бейте меня ногами, я больше backend, чем front)))

О производительности

Архитектурно заложена возможность горизонтально масштабироваться.
Сейчас схематично архитектура выглядит вот так

screenshot

Но она легко преобразуется в

screenshot

Всего лишь необходимо реализовать интерфейс QueueInterface для работы с RabbitMQ, StoreInterface для работы с MySQL, CacheInterface - для работы с Redis и возможно придется реализовывать свой NotifyInterface для оповещения клиентов

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.