Создание статистики на Google App Engine

Я хочу показать своим пользователям некоторую статистику, например количество просмотров в секунду на Google App Engine. Начал катать свою:

  • При каждом просмотре страницы добавляйте 1 к счетчику в кэше памяти.

Каждую минуту:

  • Прочтите и сбросьте счетчик, а также установите для переменной «с» значение «сейчас».
  • Разделите количество попаданий на количество времени, прошедшее с момента последнего подсчета.
  • Сохраните данные в объекте в хранилище данных.
  • Выбрасывание действительно старых данных.

Затем я понял, что это нетривиально и для этого должна быть библиотека, однако я не могу найти ту, которая мне подходит. Я кратко посмотрел на rrd4j и JRobin, но не уверен, что их можно использовать в Google App Engine без значительного переписывания. У кого-нибудь есть еще идеи?


person mjaggard    schedule 02.08.2012    source источник


Ответы (6)


Кажется, я помню, что у Twitter Commons есть все, что вам нужно, но я не знаю, можно ли их легко перенести в GAE: https://github.com/twitter/commons

person Nacho Coloma    schedule 13.08.2012
comment
Я бы хотел, чтобы у материалов Twitter была лучшая документация, но похоже, что он делает то, что мне нужно. К сожалению, сейчас я начал писать свой собственный и думаю, что закончить его будет быстрее, чем начинать заново с Twitter, но я могу украсть кое-что - например, реализацию BoundedQueue, которую я тоже изо всех сил пытался найти. - person mjaggard; 14.08.2012

Попробуйте новую технику, упомянутую в этом сообщении http://googleappengine.blogspot.com/2012/07/analyzing-your-google-app-engine-logs.html.

Это требует дополнительной работы, но ее стоит попробовать. Я использую Mache (java framework) для загрузки журналов appengine в BigQuery и BigQuery API для запроса результатов. Теперь выберите красивую библиотеку диаграмм javascript и произведите впечатление на своих пользователей. Очень мощное, гибкое и масштабируемое решение.

person Sasa    schedule 04.08.2012
comment
Спасибо за информацию - это потенциально может сработать для меня, но это не совсем то, что я ищу. Я предполагаю, что отправка событий в виде журналов и последующий анализ журналов для этих событий будет дороже, чем использование описанной мной комбинации Memcache / Datastore. - person mjaggard; 06.08.2012

Возможно, ProdEagle подойдет вам. Я думаю, что они делают в значительной степени именно то, что вы хотите, и я верю, что у них также есть логика для обработки данных, которые удаляются из кэша памяти, не делая большой дыры в вашем графике.

person tesdal    schedule 07.08.2012
comment
Хотя это именно то, что я ищу, я действительно хочу, чтобы с этим справлялась библиотека, а не внешняя служба. - person mjaggard; 08.08.2012
comment
Правильно, поскольку вы хотите отображать его для своих пользователей, это не агрегированная панель инструментов для операций. Если вы не найдете точного соответствия, вы все равно можете проверить библиотеки ProdEagle для вдохновения и самостоятельно добавить стойкость и уровень представления. - person tesdal; 08.08.2012

Рассмотрите возможность использования Mixpanel. Вы можете отправлять произвольные события, а затем извлекать совокупную информацию из API ... или просто использовать предоставленные диаграммы и графики.

person stickfigure    schedule 06.08.2012
comment
Я действительно надеюсь, что библиотека будет делать такие вещи внутри себя - именно такой код используется для создания такой службы, а не службы, к которой нужно подключиться. - person mjaggard; 06.08.2012

Поскольку, похоже, ни у кого нет ответа для меня, я предполагаю, что для этого нет общей библиотеки, и мне придется ее написать. Я открою его исходный код и сделаю ссылку отсюда, если это будет похоже на хороший код.

person mjaggard    schedule 07.08.2012

Вероятно, вы могли бы использовать Google Analytics. Вам просто нужно скопировать и вставить JavaScript в свои шаблоны.

person Bovard    schedule 02.08.2012
comment
Google Analytics не подходит для того, что я делаю. Удары в секунду были просто примером. - person mjaggard; 03.08.2012
comment
Какие функции вы ищете? - person Bovard; 03.08.2012
comment
Я хочу отправить в систему общее значение или событие, а затем получить обратно статистику в реальном или очень близком к реальному времени - например, как часто событие произошло в последнюю минуту. Они не являются обращениями к страницам как таковые, и мне нужно вернуть данные в свое приложение, а не просматривать их в отдельной системе. - person mjaggard; 06.08.2012
comment
@mjaggard, я не знаю, как вы, наконец, реализовали это, но разве создание новых подсчетных осколков и уничтожение старых каждую минуту не сработало бы в этом сценарии? - person Price; 24.07.2015
comment
Да, но я надеялся не изобретать колесо заново. Проект умер, но я получил эту статистику заранее, в основном работая с использованием очередей задач. - person mjaggard; 26.07.2015