Сервис сбора статистики

  1. Демон написан на go ( golang.org )

    запуск демона: ./statdaemon.sh --port=7001 [--logs=statdaemon.log] [--debug] $PWD/statdaemon []

    Слушаем порт http, goroutine: читаем запрос, пишем в канал goroutine: читаем из канала, пишем в БД по достижении объема

    Запущено это под nginx как прокси

  2. Фронтенд

    главная справка либы рега пользователей

  3. ЛК просмотр статистики google charts https://google-developers.appspot.com/chart/interactive/docs/gallery/annotatedtimeline?hl=en https://code.google.com/apis/ajax/playground/?type=visualization#annotated_time_line

    пользователь может задать выборку по дате указать срез по набору мета данных ( напр. user_id )

  4. Протокол

    http запрос на адрес

    http://statstat.com/stat

    параметры запроса (get или post):

    • ?project_id=12 ID проекта

    • ?type=wins Название статистики

    • &value=42 установить значение

    • &count=1 увеличить счетчик

    мета данные (все другие переданные параметры)

    • &user_id=1452
    • &bot_id=81

    подпись

    • &sig=32df3acb3442
  5. Коллбеки

    коллбек работает только для count

    для статистики можно установить коллбек, который будет вызван тогда, когда для определенного слайса будет достигнуто некое пороговое значение условия можно объединять в И или ИЛИ

    настройки коллбека

    1. статистика - wins
    2. значение статистики - 1000
    3. слайс - user_id

    коллбек будет вызван в тот момент, когда значение статы wins с параметром user_id станет равным или больше 1000

    url http://game.com/stat_callback.php параметры вызова: ?project_id=12&name=wins&sig=32df3acb3442&user_id=1452&value=1001&callback_id=84

    вызов ожидает ответ {result:ok} в случае, если такой ответ получен, стата по данному слайсу помечается как отправленная, и больше не отправляется если же происходит ошибка, то сервис пытается еще раз запросить этот коллбек ведется лог вызовов коллбеков

  6. хранение

    сохраняем денормализованные meta в самой stat шардим по created_at

Запросы на выборку попадают на демон приложения, он выбирает из БД, обсчитывает и отвечает.