Форум сайта python.su
Всем привет
Есть задача:
Нужно парсить логи клиента, забирать результат себе, хранить его и анализировать.
Подробности задачи:
1) Парсить нужно чем-то простым, чтобы не требовало предустановки доп. ПО. (у клиентов Windows)
2) Инфы придётся парсить немало, возможно за один раз от 2 до 10 Гбайт(она хранится в обычных текстовых файлах, правда там есть данные в бинарном виде :) на выходе инфы получается не много, с 25Мб всего 53Кб )
3) Полученную информацию после парсинга, нужно забрать у клиента и положить в своё хранилище(чтобы потом им можно было воспользоваться не один раз)
4) Из хранящейся информации нужно брать срезы и анализировать(выборка информации по определённым объектам, за определённое время, постоение графиков и подобное)
3-4 пункты будут делать люди неимеющие отношения к программированию, т.е. это тоже должно быть достаточно просто и с дружественным интерфейсом.
Как я вижу решение и как я могу его реализовать:
1) Напишу скрипт для парсинга и скомпилирую его с помощью cx-freeze
2) Инфу скрипт будет собирать в sqlite3
т.е. клиенту нужно просто положить скрипт рядом с логами, запустить его, а потом отдать файл с БД
3-4 пункты я думаю реализовать на Django, так как, не вижу более простого способа предоставить простой и дружественный интерфейс. Использовать думаю встроенный dev-сервер, чтобы пользователи не мучались, а одной командой запускали его(пользоваться инфой будут только внутри компании).
Например в админке можно указывать путь к файлу БД sqlite3, нажимать Ок, и инфа будет переливаться в нашу MySQL. А на главной страничке можно разместить интерфейс для возможности задавать параметры срезов инфы, графиков и прочее.
3-4) Забираем у клиента файл БД полный инфы.
Аналитик запускает dev-сервер Django, переливает инфу от клиента в общую БД MySQL. Переходит на главную страницу для работы с инфой из БД.
Покритикуйте, подскажите, как оптимальнее решить такую задачу.
Отредактировано Budulianin (Ноя. 13, 2013 21:50:59)
Офлайн
Budulianinможно еще bottle.py если ничего сложного
dev-сервер Django
Офлайн
SingularityПривет. Да, что-то забыл про существование микро веб-фрейморков, заюзать подобный будет интересно, наверно буду что-то из подобного использовать вместо Django.
можно еще bottle.py если ничего сложного
Отредактировано Budulianin (Ноя. 13, 2013 23:11:57)
Офлайн
Я бы с cx-freeze не парился, питон поставить не сложно, а при парсинге отправлял бы данные сразу на сервер.
Для отчетов заюзал бы svg-либу (http://raphaeljs.com/ или аналоги). Хранил бы все в MongoDB (тут кому какая БД нравится).
Bottle.py - норм. Джанго тут наверно излишен.
Офлайн
o7412369815963
Привет, спасибо за ответ.
o7412369815963Надобность сборки на cx-freeze есть, чтобы исключить такой случай, когда клиенту нельзя ставить на сервер какое-то доп ПО. Понимаю, что глупо звучит, но так мне ответили, когда я предложил использовать БД на стороне клиента, вместо файлов :) менеджер не бум-бум. Из-за этого и sqlite3. Видимо такие случаи есть. Ну вот чтобы не беспокоить клиента лишний раз, собираю cx-freeze и sqlite3 использовать собираюсь.
Я бы с cx-freeze не парился
o7412369815963Дело в том, что под это дело никто ничего разворачивать не собирается, так как, сбор данных будет происходить нечасто, но объём за раз будет обрабатываться немалый. Исходя из этого и принимать некуда, если по сети передавать, поэтому, как вариант - таскать файл БД от клиента.
при парсинге отправлял бы данные сразу на сервер.
o7412369815963Я думаю хранить всё в sqlite3, с учётом её возможностей, она вполне пригодна + проста. Некому следить за mongo, а sqlite3 валяется на диске и трудностей не создаёт.
Хранил бы все в MongoDB
o7412369815963Согласен
Джанго тут наверно излишен.
o7412369815963спасибо за подсказку, возьму на вооружение
Для отчетов заюзал бы svg-либу (http://raphaeljs.com/ или аналоги)
Отредактировано Budulianin (Ноя. 14, 2013 17:32:40)
Офлайн
Budulianin1. Помоему ему и не надо ничего на сервер ставить, он ведь у себя на машине питон запускает.
клиенту нельзя ставить на сервер
Офлайн
doza_and
Привет, спасибо за ответ
doza_and
1. Помоему ему и не надо ничего на сервер ставить, он ведь у себя на машине питон запускает.
doza_and:) знаю я
2. Запустить питон можно и без его установки.
doza_andПочему вы так против cx_freeze? Я использую его, только из-за того, что работа будет под виндой и Python там нет, а его предустановка вызовет дополнительные проблемы для клиента.
Я также считаю что возня с cx_freeze абсолютно излишняя.
doza_andТам написано:
Из описания непонятно что происходит с логами после парсинга.
doza_andХороший вопрос. Такое мало вероятно, но всё же возможно и хотелось бы от этого защититься.
Надо помечать какая часть прочитана ? или вы все заботы о повторениях свалите на центральную базу и не обращаете внимания на повторный парсинг логов?
doza_andСпасибо, не знал. Хранимые данные достаточно простые. Никакой нагрузки на неё не будет
По поводу базы - то сильно зависит от того какие запросы будут. Для хранения логов и базы есть специальные.
[ modul_name, func_name, start_time, stop_time, incoming_time, fio_user ]
Отредактировано Budulianin (Ноя. 15, 2013 00:25:38)
Офлайн
BudulianinЕсли логи мелко нашинкованы, то это лишнее, вы ведь легко можете запросить дату последних обновлений и построить имя файла лога. Просто иногда логи это просто огромные 1-2 файла, и повторный разбор создаст излишнюю нагрузку.
Может быть имена пропарсенных файлов в бд хранить
BudulianinНу это не означает что пользователи не могут их читать. Фильтр ведь они со своей машины будут запускать?
Логи на сервере лежат.
Budulianin
по этим данным нужно вычисления делать: min max avr delta amount
Офлайн
Budulianin
Я думаю хранить всё в sqlite3, с учётом её возможностей, она вполне пригодна + проста. Некому следить за mongo, а sqlite3 валяется на диске и трудностей не создаёт.
BudulianinЯ имел ввиду БД сервера (“своё хранилище”), а не “клиентскую” БД.
3) Полученную информацию после парсинга, нужно забрать у клиента и положить в своё хранилище
BudulianinКак некуда? А сервер отчетов на bottle.py где будет лежать итоговая БД, туда и отправлять сразу.
Исходя из этого и принимать некуда
Офлайн
doza_andУ этого скрипта не будет связи с общей базой во время работы - запросить не у кого. Либо он должен сам понимать, что брать, а что нет(тогда в его БД нужно что-то класть), либо брать всё, что дают, а общая БД уже будет думать. Можно брать из БД данные последних обновлений, формировать значение и сравнивать его с именем файла логов, таким образом отсеивать ненужные логи.
Если логи мелко нашинкованы, то это лишнее, вы ведь легко можете запросить дату последних обновлений и построить имя файла лога. Просто иногда логи это просто огромные 1-2 файла, и повторный разбор создаст излишнюю нагрузку.
doza_and
Ну это не означает что пользователи не могут их читать. Фильтр ведь они со своей машины будут запускать?
doza_and
Выбор базы вопрос удобства (с оставлением лазеек для развития). Базы для временных рядов как раз и содержат встроенные функции для эффективного вычисления min max avr delta, интерполяции прореживания … :) Но они могут оказаться неудобны для построения других запросов.
doza_andОн собирает за пару секунд, а преимущества я описал - клиенту меньше проблем
2 Теряете время на работу с cx_freeze не получая по сути никаких преимуществ.
doza_and
3 Я считаю что пользователю будет сложнее. Большинство приложений он ставит при помощи setup.exe, а тут вы пришли и говорите, надо скопировать в директорию с логами.. и еще не забудьте и… ну и так далее. Не теряйте лицо - сделали программу делайте setup и пускай администраторы решают как его запускать, они за это и получают зарплату.
Отредактировано Budulianin (Ноя. 15, 2013 13:29:43)
Офлайн