Разработка системы анализа Log-файлов

Web content, usage mining. Современные средства анализа лог-файлов. Требования к создаваемой системе, выбор инструментов реализации, описание общей архитектуры. Конвенции программирования, разработки Firebird. Кроссплатформленость, работа с Еxсel.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 09.10.2013
Размер файла 1,5 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

[Введите текст]

РЕФЕРАТ

СИСТЕМЫ АНАЛИЗА, СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ, WEB-СЕРВЕР, LOG-ФАЙЛЫ.

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

Целью работы является разработка системы, способной хранить и обрабатывать большие объемы статистических данных результатов работы web-сервера.

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

ОБОЗНАЧЕНИЯ И СОКРАЩЕНИЯ

CLF

Common Log Format

URL

Единый указатель ресурсов

NCSA

National Center for Supercomputing Application (Национальный центр суперкомпьютерных приложений

URI

Uniform Resource Identifie

БД

База данных

SQL

Structured Query Language

PSQL

Procedural Structured Query Language

ВВЕДЕНИЕ

файл программирование конвенция кроссплатформленость

Современное общество невозможно представить без интернета. Число пользователей интернета растёт темпами, опережающими любые возможности ручного анализа. В России, за период с 2011 по 2013, число пользователей возросло с 52 процентов до 62 процентов. Для эксперта оказывается невозможным охватить такое количество данных, а так же применение классических методов анализа, требующие от него формулирования гипотез или создания обучающих данных. При этом корректное получение данных о поведении пользователей на сайте необходимо для улучшения структуры сайта, его наполняемости, устранение ошибок в структуре, созданию криптостойкой защите и качественное обеспечение пользователей той информации, которая необходима именно ему.

Современная интеграция интернета прослеживается во всех сферах деятельности человека. Основной причиной роста интеграции интернета послужила простота и скорость, с которой можно осуществлять операции через интернет. В результате текущей динамике произошли серьезные изменения в общении с конечными пользователями, а так же появилась возможность персонифицировать предложения для каждого посетителя.

Целью моей дипломной работы ознакомиться с современными средствами анализа log-файлов, структурой и правилами ведения логов, а так же разработать систему для анализа этих файлов.

Основные этапы анализа. Анализ существующих решений.

Основные этапы анализа.

Процесс автоматического изучения характеристик доступа пользователей к серверам может включать изучение наиболее популярных путей решения, нахождении ассоциативных правил, созданию кластеризации. Для решения данных задач можно использовать существующие технические документы, в частности собираются огромные объемы информации, автоматически создаваемой серверами и оседающих в журналах регистрации. Источником информации может также являться ссылочный журнал, в котором хранится информация для каждой страницы, на которую осуществляется ссылка, журналы браузеров и регистрационные данные пользователей, собранные CGI-сценариями. Извлечение знаний и последовательный анализ принято разделять на две части:

РАЗРАБОТКА СИСТЕМЫ АНАЛИЗА LOG-ФАЙЛОВ

Web content mining описывает автоматический поиск информационных ресурсов в интернете и включает в себя добычу содержимого из веб-данных. Аналогом content mining является метод интеллектуального анализа данных для реляционных баз данных( Data mining), так как существует возможность найти похожие типы знаний из неструктурированных данных, находящихся в веб-документах. Веб-документ в себе может содержать несколько типов данных:

Текст.

Мультимедийные данные (изображение, аудио, видео).

Метаданные.

Гиперссылки.

Существуют различные методы поиска информации в интернете. Наиболее распространенным методом является поиск на основе ключевых слов. Традиционные поисковые системы имеют сканеры для поиска и сбора полезной информации, методы индексирования для хранения информации и обработки запросов, чтобы пользователь мог получить более точную информацию. Технология web content mining выходит за рамки традиции технологии Information Retrieval или сокращенно IR. Под IR понимается процесс неструктурированной документальной информации, удовлетворяющей информационным потребностям и так же наука об этом поиске.

В web content mining существует два подхода: агентный и ориентированный на базу.

Первый подход включает такие системы:

Интеллектуальные поисковые агенты.

Фильтрация информации / классификация.

Персонифицированные агенты сети.

Второй подход включает систмы:

Многоуровневые базы данных.

Систему веб-запросов ( Web Query Systems).

Web usage mining.

Web usage mining - это процесс добычи полезной информации из пользовательских журналов доступа, прокси-сервера, браузерных журналов и пользовательских сессионных данных. Целью такого анализа является выявлений предпочтений пользователей при использовании ресурсов сети интернет. В данном методе производится анализ следующей информации:

История просмотра страниц пользователем.

Последовательность просмотра.

Web usage mining включает в себя следующие составляющие:

Предварительная обработка

Операционная идентификация.

Инструменты обнаружение шаблонов.

Инструменты анализа шаблонов.

Статистика фиксирует идентификационные данные веб-пользователей вместе с их поведением на сайте. В зависимости от вида данных, результатом работы могут являться:

Данные веб-сервера.

Данные серверных приложений.

Данные прикладного уровня.

Сбор информации.

В дипломной работе применяется метод анализа, основанный на web usage mining. В частности сбор информации происходит на уровне сервера и представляет собой отбор информации из журналов web-сервера. Данный способ используется наиболее часто, поскольку без лишних накладных ресурсов можно получить достаточно полную картину работы пользователя с сервером, к тому же, для этого метода уже существуют заранее накопленные данные. Все современные серверы автоматически ведут логирование или журнализацию; при этом данные журналы занимают достаточно мало места и могут храниться годами. Для дальнейшего рассмотрения необходимо понять, что представляет из себя журнал сервера, принцип заполнения его сервером и какую именно информацию он хранит.

Журнал сервера должен отвечать требованиям стандарта Common Log Format (CLF). В переводе дословно с английского CLF - общий формат регистрации, также известный как NCSA Common Log Format. Под аббревиатурой NCSA имеется ввиду National Center for Supercomputing Application или в переводе на русский язык Национальный центр суперкомпьютерных приложений.

Рассмотрим типовую конфигурацию лог файла веб-сервера apache:

"%h %l %u %t \"%r\" %>s %b"

Строка формата состоит процентных директив, каждый из которых указывает веб-серверу на необходимость вывод конкретной информации.

Рассмотри на примере, что же обозначают наши директивы.

Пример лога, записанный в формате CLF:

192.168.1.1 - - [28/Apr/2013:20:58:02 +0400] "GET / HTTP/1.1" 200 44

«192.168.1.1» выводится параметром «%h».

Это IP-адрес клиента (удалённый хост), который сделал запрос на сервер. Стандартная конфигурация использует журналирование постпроцесса, в частности такие как logresolve, дословно означает «журнал решения», для определения хостов. IP-адрес представленный здесь, не обязательно будет являться адресом компьютера, на котором пользователь сидит. Если между пользователем и сервером используется прокси-сервер, то это будет адрес прокси-сервера, а не исходной машины.

« - »выводится параметром «%L»

«Дефис» на выходе указывает, что запрашиваемая информация недоступна. Данный параметр указывает на имя пользователя (Identd). Эта информация ненадежна и практически никогда не может быть использована, кроме как на жестко контролируемых внутренними сетями. По умолчанию в настройках веб-сервера Apache данный параметр не определяет.

« - »выводится параметром «%U»

Это идентификатор лица, запрашивающий документ при помощи аутентификации HTTP. Если код состояния запроса имеет значение 401, то этому значению не следует доверять, так как пользователь не аутентифицирован. Так же, если документ не защищен паролем, то вместо имени пользователя будет выводится « - ».

[28/Apr/2013:20:58:02 +0400] выводит директива «%Т»

Время сервера, когда был получен запрос. Формат выводимой даты: [День/ месяц / год / часы:минуты:секунды зону].

"GET / HTTP/1.1" выводится параметром «\"%r\"»

Данный параметр указывает на строку запроса от клиента. Данная строка содержит много полезной информации. Первое- метод, используемый клиентом получать информации, а так же используемый протокол. Второе - это ресурс, который клиент запросил. В веб-серверах существует возможность редактирование списка выводимых данных данным параметром.

«200» выводит параметр «%>s»

Это код состояния, который сервер посылает обратно клиенту. Эта информация очень ценна, потому что он показывает, состояние ответа на запрос:

Успешно выполнены - коды, начинающиеся с 2.

Перенаправления - коды, начинающиеся с 3.

Ошибки, вызванные клиентом -коды, начинающиеся с 4

Ошибки в сервере -коды, начинающиеся с 5

Большинство современных веб-серверов, в том числе apache и ngnix, позволяют администраторам какие поля должны включаться в журнал, а какие - нет. Самые распространенные из дополнительных полей:

Обратившиеся приложение

Единый указатель ресурсов (URL) документа

Значение cookies.

При добавлении дополнительных полей к Common Log Format (CLF) образуется Combined Log Format, или комбинированный формат журнала. Данный формат является точно таким же, как и Common Log Format, с добавлением двух полей. Каждое дополнительное поле использует процент директивы - %{заголовок}i. В заголовке может использоваться любой HTTP заголовок запроса

Рассмотрим типовую настройку конфигурации комбинированного лога:

"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""

Пример комбинированного лога:

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"

Дополнительные поля в данном примере:

http://www.example.com/start.html выводится директивой «\"%{Referer}i\"»

В директиве был использован заголовок HTTP запроса Referer. Данный заголовок показывает полный или относительный URI ресурса, с которого клиента сделал текущий запрос. URI (английского Uniform Resource Identifier) -- унифицированный (единообразный) идентификатор ресурса. Если указан относительный, то полный определяется по запрашиваемому URI.

"Mozilla/4.08 [en] (Win98; I ;Nav)" выводится директивой «\"%{User-agent}i\"»

В данной директиве был использован заголовок HTTP запроса User-agent. Данный заголовок указывает программное обеспечение клиента и его характеристики.

Современные веб-сервера предоставляют достаточно полную картину поведения пользователей на веб-ресурсе, записывая действия пользователей в свои логи. Достаточно лишь правильно выбрать метрику измерения этой статистики, чтобы можно было получить полную картину действий пользователей на веб-ресурсе.

Современные средства анализа лог-файлов.

Современные средства анализа лог-файлов в современном обществе называют анализатором логов. Под анализаторами логов имеются ввиду программы, которые сами не занимаются сбором статистики, но умеют анализировать серверные логи (то есть данные обо всех обращениях к серверу, записанные им в лог-файлы). Лог-файлы можно просматривать и вручную через текстовый редактор, но это достаточно трудоемко, а при большом (в сотни и тысячи) числе посетителей и вообще невозможно. Гораздо удобнее использовать анализаторы логов, преобразующие данные в понятные отчеты. Поскольку web-сервер фиксирует все обращения к сайту, то формируемые на их основе отчеты обеспечивают самую полную статистику о посетителях и могут рассказать очень много.

Рассмотрим современные программы для анализа логов.

Webalizer.

Разработчик: Братфордом Л. Барретом

Сайт программы: http://www.webalizer.org/

Последняя версия программы: 2.23 -05 от 15 апреля 2011

Операционная система: кроссплатформенное программное обеспечение

Способ распространения: GNU General Public License

Цена: бесплатно

Webalizer -- популярный анализатор логов Apache, работающий с журналами сервера на серверной стороне и генерирующий довольно информативные статистические отчеты в формате HTML, сопровождая их гистограммами (рисунок 1). При необходимости пакет может быть настроен на поддержку русского языка. Формируемые в Webalizer отчеты позволяют не только выявить данные о количестве запросов и посещений, но и определить, с каких серверов заходят на сайт посетители и на какие страницы сайта чаще попадают, с каких страниц чаще уходят, и выявить самые популярные страницы сайта. Кроме того, из отчетов можно ориентировочно установить географию посетителей и определить эффективность разных поисковых систем, правда следует учитывать, что каждая из систем имеет разные точки входа для поиска, а следовательно, занимает в таблицах несколько строк.

Рисунок 1 - Пример отчёта в Webalizer

Analog

Разработчик: Стивен Тернер.

Сайт программы http://www.analog.cx/

Последняя версия программы: 6.0 от 19 декабря 2004.

Операционная система: кроссплатформенное программное обеспечение.

Способ распространения: GNU General Public License.

Цена: бесплатно.

Analog -- один из самых простых (в плане представления информации) анализаторов логов, анализирующий данные на стороне сервера. Этот анализатор обеспечивает получение лишь минимума статистической информации в формате HTML. Так, он позволяет узнать сводные данные по количеству хитов и хостов за день/месяц/год, установить часы максимальной нагрузки на сайт, отследить роботов (что, правда, очень неудобно), а также определить, какие ОС и браузеры установлены на компьютерах пользователей.

Рисунок 2 - Пример отчета Analog

AWStats

Разработчик: Laurent Destailleur.

Сайт программы http://awstats.sourceforge.net/

Последняя версия программы: 7.1 от 10 декабря 2012.

Операционная система: кроссплатформенное программное обеспечение.

Способ распространения: GNU General Public License.

Цена: бесплатно

AWStats -- достаточно мощная и удобная система генерации статистики сайта на основе серверных логов (Apache, WebStar, IIS и др.), имеющая поддержку русского языка. Она анализирует данные со стороны сервера и обеспечивает получение очень информативных отчетов в HTML-формате. С ее помощью можно оценить общее число хитов и количество уникальных посетителей по дням/неделям/месяцам, выявить ссылающиеся поисковые машины и ссылающиеся сайты и отследить роботов. Можно также получить некоторое представление о посетителях: оценить продолжительность их визитов, узнать, какие конкретно данные пользуются у них наибольшей популярностью, через какие страницы они попадают на сайт и с каких обычно выходят, какие ОС и браузеры установлены на компьютерах пользователей, а кроме того, возможно примерно (так как это производится по домену первого уровня, а регистрировать домены можно в любых зонах независимо от страны проживания) определить географию посетителей.

AlterWind Log Analyzer

Разработчик: AlterWind Software

Сайт программы http://www.alterwind.ru/

Последняя версия программы: 4.0 от 31 октября 2008

Операционная система:Microsoft Windows

Способ распространения: shareware (30-дневная демо-версия)

Цена:

Lite -- бесплатно,

Standard -- 89 долларов,

Professional -- 125 долларов.

Рисунок 3 - Пример отчета AWStat

AlterWind Log Analyzer представляет собой профессиональное решение для анализа серверных лог-файлов. Данное решение исследует логи на стороне клиента и поддерживает работу с лог-файлами не только в форматах IIS и Apache, но и в нестандартных форматах. Пакет поставляется в трех редакциях: бесплатной Lite и платных Standard и Professional.

Возможности бесплатной версии ограничены получением основных данных о посещаемости сайта, представляемых в виде 23 базовых отчетов. С их помощью можно узнать, с каких поисковых систем (имеется поддержка свыше 430 поисковых систем и каталогов, включая национальные системы самых разных стран) и по каким фразам приходят посетители (рис. 5), а также проанализировать трафик со ссылающихся сайтов и выявить ошибки в работе исследуемого сайта.

Версия Standard обеспечивает генерацию уже 33 отчетов, которые могут быть дополнительно настроены путем внедрения фильтров. Информация в данных отчетах позволяет не только представить общую картину посещаемости сайта, но и подробно изучить приходящих на него посетителей, а также проанализировать работу роботов. В частности, можно узнать, откуда они приходят, выявить интересы (на какие страницы чаще всего приходят, что загружают, по каким ссылкам щелкают), сколько времени находятся на сайте, с каких страниц чаще всего уходят и т.д. Кроме того, AlterWind Log Analyzer Standard позволяет подробно анализировать результаты рекламных кампаний и выявлять наиболее предпочтительные в плане прихода рефереров ресурсы.

Количество базовых отчетов в версии Professional -- 52, и их также можно перестраивать посредством применения фильтрации. Помимо этого данная версия содержит неограниченное число шаблонов отчетов (для сравнения в версии Standard шаблон всего один) -- это позволяет для каждой из повторяющихся задач создать свой собственный шаблон с определенными настройками и фильтрами, что в дальнейшем существенно упростит и ускорит процесс получения требуемых статистических данных. Кроме того, версия Professional позволяет дополнительно генерировать отчеты, требуемые для оптимизации сайта под поисковые системы, его продвижения и анализа pay-per click-программ. В частности, с ее помощью можно не только увидеть историю переходов по сайту, глубину поиска и время пребывания на нем, но и проследить названные данные с учетом поисковых фраз, сайтов-рефереров и URLs.

Рисунок 4 - Пример отчета AlterWind Log Analyzer

Semonitor

Разработчик: Semonitor

Сайт программы http://www.semonitor.ru/

Последняя версия программы: 5 от15 января 2012

Операционная система:Microsoft Windows

Способ распространения: shareware (60-дневная демо-версия )

Цена:

Standard -- 1500 рублей,

Pro -- 2000 рублей,

Expert -- 3000 рублей

Основное назначение Semonitor -- аудит и оптимизация сайта. Однако в версиях Pro и Expert также имеются возможности для анализа статистики сайта, реализованные посредством лог-анализатора, работающего на стороне клиента и умеющего обрабатывать файлы в форматах IIS и Apache. Это позволяет вести учет числа посетителей сайта и анализировать их поведение. В частности, можно провести анализ числа уникальных посетителей сайта и узнать не только их количество, но и IP-адреса, страну проживания, посещенные страницы и т.п. Столь же несложно вывести информацию о заходах с поисковых систем и узнать, с каких поисковиков посетители заходили на сайт и по каким ключевым фразам, а кроме того, можно отследить статистику рефереров, пути по сайту, точки входа-выхода и проанализировать визиты поисковых роботов.

Рисунок 5 - Пример отчета Semonitor

Требования к создаваемой системе. Выбор инструментов реализации. Описание общей архитектуры.

Требования к создаваемой системе

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

Кроссплатформленость. Система должна работать под различными ОС, так как веб-сервера работают под управлением операционных систем Windows и Unix.

Гибкость. Данное свойство позволит системе при создании дополнительных модулей легко добавлять в существующую систему.

Обеспечение быстрого доступа к статистическим данным.

Обеспечение безопасности доступа к данным

Выбор инструментов реализации.

Рассмотрим подробнее способы достижения требований изложенных в прошлой главе. Кроссплатформенность и гибкость можно выполнить, написав программное обеспечение на C++, Delphi и Python. Клиентское приложение было принято решение писать на Python.

Python- высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.[6]

Основные характеристики:

Свободное распространение. Python распространяется совершенно свободно в соответствии с открытой либеральной лицензией. Исходные коды могут использоваться любым образом, даже встраиваться в проприетарные продукты и продаваться.

Многофункциональность языка. Python является многоцелевым языком программирования, поэтому на нем могут разрабатываться игры, сайты, локальные приложения, программы управления оборудованием и многое другое.

Высокая скорость разработки проектов. Объем кода на Python в три и более раз меньше, чем для аналогичных проектов на C, C++ и Java, поэтому разработка проектов на Python гораздо интенсивнее. Кроме того, код на Python выполняется, минуя компиляцию и линковку.

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

Переносимость кода. Python реализован на стандартизованном ANSI C, поэтому он может быть скомпилирован и запущен под всеми основными операционными системами. Скрипты, написанные на Python, исполняются на самых разных устройствах, включая карманные компьютеры. Большая часть кода на Python исполняется в исходном виде под любой из поддерживаемых операционных систем: MS DOS, MS Windows, Linux, FreeBSD, Solaris, Mac OS, OS/2, QNX, VMS, BeOS, VxWorks, Windows Mobile, Symbian, iPod и других.

Библиотеки. В Python имеется обширная коллекция стандартных библиотек, которые могут быть использованы в скрипте, включая библиотеки по работе с сетью и регулярными выражениями. Кроме того, скрипт на Python может выполняться с использованием ваших собственных и любых сторонних библиотек, включая NumPy (аналог MathLab), PyGame (игры и анимация), PIL (графика), PyRo (робот), NLTK (анализ фраз естественных языков).

Гибкость и интеграция. Python позволяет вызывать функции из библиотек, написанных на C или C++, а также вызывать функции, написанные на Python, из программ на C и C++. Есть возможность интеграции и с Java-компонентами. В Python имеется прикладной интерфейс C API, который позволяет организовать указанные вызовы.[7]

Для обеспечение быстрого доступа к статистическим данным необходимо выбрать СУБД. Среди некоммерческих стоит выделить две: PostgreSQL и Firebird. Для создаваемой системы была выбрана СУБД Firebird.

Firebird - реляционная СУДБ, обладает многоверсионной архитектурой, обеспечивающей параллельную обработку оперативных и аналитических запросов (это возможно потому, что читающие пользователи не блокируют пишущих), компактность (дистрибутив 5Mb), высокую эффективность и мощную языковую поддержку для хранимых процедур и триггеров. [4][5] СУДБ легко работает с большими базами данных. Среди минусов можно отметить отсутствие кеша результатов запросов и отсутствие полнотекстовых индексов.

Основные характеристики Firebird

Полная поодержка хранимых процедур и триггеров.

Транзакции, полностью совместимые с концепцией ACID.

Ссылочная целостность.

Версионная архитектура.

Очень небольшой размер.

Мощный внутренний язык для написания хранимых процедур и триггеров (PSQL).

Поддержка внешних пользовательских функций (UDF).

Firebird практически не требует работы системного администратора или позволяет свести ее к минимуму.

Почти не требует настройки - использовать СУБД можно сразу же после ее установки!

Огромное интернет-сообщество пользователей и разработчиков, множество мест, где вы можете получить быструю и бесплатную помощь.

Возможность распространения встроенной в приложение (embedded) версии - замечательно подходит для создания каталогов на CD-ROM, однопользовательских и пробных версий программ.

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

Безопасная запись данных (careful write) - быстрое восстановление после сбоев, отсутствие необходимости в журналировании транзакций!

Большое количество средств доступа к базе данных: native/API, драйверы dbExpress, ODBC, OLEDB, .Net provider, JDBC-драйвер, модули для Python, PHP, Perl, и так далее.

Поддержка большинства распространенных операционных систем, включая Windows, Linux, Solaris, MacOS.

Инкрементные бэкапы.

Билды для 32- и 64-разрядных ОС.

Полная реализация курсоров в PSQL.

Таблицы мониторинга.

Триггеры на коннект и транзакции.

Временные таблицы [8]

Описание общей архитектуры.

Общая архитектура создаваемой системы состоит из 4 блоков:

Система анализа.

СУБД.

Показ статистических данных.

Log-файл сервера.

На следующем рисунке показано схематическое взаимодействие компонентов внутри системы:

Рисунок 6 - Общая архитектура системы

Взаимодействие компонентов внутри системы:

В системе анализа указывается путь хранении log-файла сервера. Подгружается файл.

Осуществляется парсинг подгружаемого файла, с заполнением данных в СУБД.

Для отображение статистических данных, пользователей выбирает необходимый отчет. После вызова отчета, система анализа обращается в базу за необходимыми данными.

После того, как были выбраны необходимые данные, пользователю показывается конечный результат выполнения отчета или в виде HTML- страницы или в exel-формате.

Описание инструментов и метода реализации.

Конвенции программирования.

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

При разработке сложной программы архитектурные принципы вносят в программу структурный баланс, а принципы конструирования - низкоуровневую гармонию, при наличии которой каждый класс определяется как неотъемлемая часть общего плана. Любая крупная программа требует применения контролирующей структуры, унифицирующей аспекты языка программирования. Красота крупной структуры частично заключается в том, как в её отдельных компонентах выражены особенности архитектуры. Без унификации программа будет смесью небрежных вариаций стиля, заставляющих прилагать дополнительные усилия только для того, чтобы различия в стиле кодирования, которые вполне можно было избежать. Одно из условий успешного программирования - устранение ненужных вариаций, позволяющее сосредоточиться на действительно необходимых вариациях. [9]

Конвенции разработки Firebird.

Имена всех объектов должны отражать способ их использования.

Имена генераторов состоят из буквы «G» нижнего подчеркивания и наименования первичного ключа для генерации чьего значения используется генератор. Имена генераторов используемых для других целей начинаются с «GEN_» далее используется любое имя отражающее назначение генератора.

Имена триггеров имею формат «TR_<ИМЯ_ТАБЛИЦЫ>_<Время срабатывания>_<Доплнительная_информация>». Где Время срабатывания буквы BI (перед вставкой), AI (после вставки), BU(до обновления), AU(после обновления), BD(до удалени), AD(после удаления).

Имена таблиц, используемых для хранения данных, начинаются с префикса «S_», тем самым обозначая, что таблицы используются для статического хранения данных. Таблицы, используемые для хранения справочников, маркируются префиксом «L_». Таблицы, хранящие часто изменяемые данные, обозначаются префиксом «D_».

Имена хранимых процедур начинаются с префиксов «REP_» и «W_».

Префикс «REP_» обозначает, что процедура производит лишь чтение данных. Префиксом «W_» маркируются процедуры производящие изменения в БД.

Типы данных в таблицах описываются строго прописанными доменами.

Записи из таблиц не удаляются, для пометки записи как удаленная используется поле статус, которое заполняется подходящим значением из таблицы статусов записей.

В каждой таблице в качестве первичного ключа используется целочисленное поле.

В каждой таблице существуют два поля, хранящие информацию о дате последнего изменения записи и о пользователе, который последним производил изменение, поля имеют фиксированные имена LASTDATE и USRNAME.

Всем триггерам, работающим с одной таблицей и имеющим одинаковое время срабатывания, присваивается уникальный приоритет кратный 100.

Наименования входных переменных должно начинаться с префикса «IN_» выходных - «OUT_». Внутренние переменные начинаются с префикса «V_».

Описание архитектуры БД.

База состоит из 5 основных таблиц.

Таблица IP адресов L_IP в которой хранится информация об IP адресах, с которых осуществлялся заход на сайт. Таблица состоит из следующих полей: целочисленного идентификатора записи (первичный ключ), IP адрес, дата захода на web-ресурс, внешний ключ, связывающий с таблицей L_USERS, внешний ключ, связывающий с таблицей L_METOD

Таблица пользователей, заходивших на веб-ресурс, L_USERS состоит из целочисленного идентификатора записи (первичный ключ), имя пользователя (может быть null), ссылку, откуда совершен данный заход, внешний ключ, связывающий с таблицей L_USER_AGENT.

Таблица L_METOD состоит из целочисленного идентификатора записи (первичный ключ), метод, используемый пользователем получать информацию; ресурс, к которому пользователь обратился; внешний ключ, связывающий с таблицей S_HTTP_CODE

Таблица S_HTTP_CODE состоит из целочисленного идентификатора записи (первичный ключ), кодов состояния, имени состояния.

Таблица L_USER_AGENT состоит из целочисленного идентификатора записи (первичный ключ), используемый браузер, операционная система пользователя.

Рисунок 7 - Схематическая связь в таблице

Создание хранимых процедур.

Для написание процедур в СУБД Firebird используется PSQL - расширение языка SQL. Основными элементами в расширение PSQL являются циклы и логические операторы.

Объявление действия совершаемого над процедурой, в скобках перечисляются входные параметры процедуры.

CREATE OR ALTER PROCEDURE PROCEDURE_NAME ()

В конструкции в скобках RETURNS () перечисляются выходные параметры которые будут выведены процедурой после вызова команды SUSPEND. Команды BEGIN и END обозначают конец и начало блока с текстом процедуры.

OUT_NUMBER = 0;

Объявляем массив, который будем обрабатывать.

FOR

SELECT la.ID_ANSWER, la.IS_CORRECT, la.TEXT, la.SCORE

FROM L_ANSWER la

WHERE la.ID_QUERY = :IN_QUESTION_NUMBER

Переменные, которым будут присваиваться значения из массива.

INTO :OUt_ID_ANSWER, :OUT_IS_CORRECT, :OUT_TEXT, :OUT_SCORE

DO BEGIN

Тело цикла с инкрементом счетчика и выводом информации.

OUT_NUMBER = OUT_NUMBER +1;

SUSPEND;

END

Тонкости разработки на Python.

Кроссплатформленость

Не у каждого рядового пользователя на компьютере будет установлен интерпретатор Python с нужными библиотеками. Для решение данной проблемы существует приложение под названием py2exe.

Для конвертирования необходимо создать файл setup.py в директории, где находится программа написанная на Python.

from distutils.core import setup

import py2exe

setup(

windows=[{"script":"analiz.py"}],

options={"py2exe": {"includes":["sip"]}}

)

После этого запускаем упаковку командой: setup.py py2exe

После выполнения команды, в каталоге где находилась наша программа создается 2 папки: build и dist. Основная проблема при выполнении данной процедуры - это увеличение объема программы.

Уменьшить объем приложения можно 4 способами:

Самое действенное. Сжать библиотеки upx. Консольное приложение. Работает элементарно. На вход передается файл, оно его сжимает.

Удалить unicodedata.pyd, bz2.pyd, select.pyd, w9xpopen.exe. Веса немного, но, как минимум, в проекте станет меньше файлов

Если в setup.py указать опцию optimize:2, то модули будут компилироваться в .pyo (python optimized code), а не в .pyc (python compiler script). Это не дает большого эффекта, но кто знает, может Вам повезет)

И наконец, можно подчистить library.zip от неиспользованных модулей и кодировок. Только аккуратно.[11]

Работа с exсel

В своей дипломной работе стояла задача выводить данные как в виде html страниц, так и в формату exсel. Для реализации данного условия стандартных библиотек, входящих в интерпретатор python было недостаточно. Существует 3 дополнительные библиотеки для работ с exсel:

xlrd - дает возможность читать файлы Excel.

xlwt - создание и заполнение файлов Excel.

xlutils - набор утилит для расширения возможности предыдущих 2 библиотек.

Для задачи дипломной работы использовал библиотеку xlwt. Пример кода для создания excel файла:

import xlwt from

datetime import

datetime font0 = xlwt.

Font() font0.name = 'Times New Roman'

font0.colour_index = 2

font0.bold = True style0 = xlwt.XFStyle() style0.

font = font0 style1 = xlwt.

XFStyle() style1.num_format_str = 'D-MMM-YY' wb = xlwt.

Workbook() ws = wb.add_sheet('A Test Sheet')

ws.write(0, 0, 'Test', style0)

ws.write(1, 0, datetime.now(),style1)

ws.write(2, 0, 1) ws.write(2, 1, 1)

ws.write(2, 2, xlwt.Formula("A3+B3")) wb.save('example.xls')

ЗАКЛЮЧЕНИЕ

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

На основе анализа существующих решений были сформулированы концепции разрабатываемой системы, на основе которой была спроектирована архитектура разрабатываемой системы.

Была спроектированы структура базы данных, используемая в системе. С учетом специфики использования системы, для хранения больших объемов данных.

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

1. Щербин А.А. Исследование и разработка метода автоматической классификации поведения пользователей Интернет / А.А. Щербин - Москва: 2007. - 87 с.

2. The Apache Software Foundation (2012). Apache HTTP server Documentation. URL: http://httpd.apache.org/docs/ [10 сентября]

3. Социологи подсчитали число пользователей интернета в России URL: http://lenta.ru/news/2013/03/16/internet/ [15 апреля]

4. Firebird: About Firebird 25 января 2013. URL:http://www.firebirdsql.org/en/about-firebird/ [4 февраля 2013]

5. iBase.ru | Firebird 18 марта 2012 URL:http://www.ibase.ru/firebird.htm [26 октября 2012]

6. Программирование на Phyton. Преимущества. 10 ноября 2010. URL:http://www.weblearn.ru/2010/11/programmirovanie-na-phyton-preimushhestva. [ 21 сентября 2012]

7. Узнайте все о Firebird за 2 минуты 23 сентября 2011. URL:http://www.firebirdnews.org/docs/fb2min_ru.html [1 октября 2012]

8. Макконелл С. Совершенный код. Мастер-класс / Пер. с англ. - М. : Издательство «Русская редакция», 2012 - 896 стр. : ил.

9. Марк Лутц Изучаем Python. / Пер. с англ. - М. : Издательство «Символ-Плюс» 2011 - 1280 стр. : ил.

10. The Webalizer. URL: http://www.webalizer.org/ [10 октября 2012]

11. Analog. URL:http://www.analog.cx/ [11 октября 2012]

12. Awstat official web site. URL:http://awstats.sourceforge.net/ [15 октября 2012]

13. AlterWind Log Analyzer URL: http://www.alterwind.ru/ [18 октября 2012]

14. Semonitor URL:http://www.semonitor.ru/ [20 октября 2012]

ПРИЛОЖЕНИЕ

Исходный код парсера

class NodeList():

def __init__(self, *args):

self.elements = []

self.add(*args)

def add(self, *args):

for arg in args:

self.elements.append(arg)

def remove(self, *args):

for arg in args:

if arg in self: self.elements.remove(arg)

def add_to(self, pos, arg):

old_list = self.elements

new_list = []

for i in range(len(old_list)+1):

if i < pos: new_list.append(old_list[i])

elif i == pos: new_list.append(arg)

else: new_list.append(old_list[i-1])

self.elements = new_list

def foreach(self, func, deep=False):

to_return = NodeList()

for node in self:

if func(node): to_return.add(node)

if node.nodeType == 1 and deep:

to_return.add(*node.foreach(func, True))

return to_return

def byName(self, name, deep=False):

return self.foreach(lambda x: x.nodeType == 1 and x.name == name, deep)

def withAttr(self, name, deep=False):

return self.foreach(lambda x: x.nodeType == 1 and name in x.attributes, deep)

def byAttr(self, name, value, deep=False):

return self.foreach(lambda x: x.nodeType == 1 and name in x.attributes and x.attributes[name] == value, deep)

def __getitem__(self, index):

return self.elements[index]

def __bool__(self):

return bool(self.elements)

def __len__(self):

return len(self.elements)

class BondedList(NodeList):

def __init__(self, parent):

NodeList.__init__(self)

self.common_parent = parent

def add(self, *args):

for arg in args:

if self:

self[-1].nextSibling = arg

arg.previousSibling = self[-1]

arg.parent = self.common_parent

NodeList.add(self, arg)

def remove(self, *args):

for arg in args:

if arg in self:

i = self.elements.index(arg)

if self[i].previousSibling is not None:

self[i].previousSibling.nextSibling = self[i].nextSibling

if self[i].nextSibling is not None:

self[i].nextSibling.previousSibling = self[i].previousSibling

NodeList.remove(self, arg)

def add_to(self, pos, arg):

arg.parent = self.common_parent

if pos == 0:

self[0].previousSibling = arg

arg.nextSibling = self[0]

elif pos < len(self):

self[pos].previousSibling = arg

arg.nextSibling = self[pos]

self[pos-1].nextSibling = arg

arg.previousSibling = self[pos-1]

elif pos == len(self):

self[pos-1].nextSibling = arg

arg.previousSibling = self[pos-1]

NodeList.add_to(self, pos, arg)

class Node():

parent = None

nextSibling = None

previousSibling = None

def remove(self):

if self.nextSibling:

self.nextSibling.previousSibling = self.previousSibling

if self.previousSibling:

self.previousSibling.nextSibling = self.nextSibling

if self.parent:

self.parent.childNodes.remove(self)

def insertBefore(self, node):

if self.parent is not None:

index = self.parent.childNodes.elements.index(self)

self.parent.childNodes.add_to(index, node)

def insertAfter(self, node):

if self.parent is not None:

index = self.parent.childNodes.elements.index(self)

self.parent.childNodes.add_to(index+1, node)

class TextNode(Node):

def __init__(self, content=''):

self.content = content

class Comment(TextNode):

nodeType = 8

nodeName = 'comment'

def __init__(self, content=''):

TextNode.__init__(self, content)

class Text(TextNode):

nodeType = 3

nodeName = 'text'

def __init__(self, content=''):

TextNode.__init__(self, content)

class Element(Node):

nodeType = 1

nodeName = 'element'

paired = True

def __init__(self, name=''):

self.name = name

self.attributes = {}

self.childNodes = BondedList(parent=self)

def squeeze(self):

if self.parent is not None:

parent = self.parent

pos = parent.childNodes.elements.index(self)

children = self.childNodes

self.remove()

for node in children:

parent.childNodes.add_to(pos, node)

pos += 1

def foreach(self, func, deep=True):

return self.childNodes.foreach(func, deep)

def byName(self, name, deep=True):

return self.childNodes.byName(name, deep)

def withAttr(self, name, deep=True):

return self.childNodes.withAttr(name, deep)

def byAttr(self, name, value, deep=True):

return self.childNodes.byAttr(name, value, deep)

Приложение Б. Исходный код GUI.

# -*- coding: utf-8 -*-

import sys

from PyQt4 import QtCore, QtGui

class AnyWidget(QtGui.QWidget):

def __init__(self,*args):

QtGui.QWidget.__init__(self,*args)

boxlay = QtGui.QHBoxLayout(self)

frame = QtGui.QFrame(self) # Фрейм

frame.setFrameShape(QtGui.QFrame.StyledPanel)

frame.setFrameShadow(QtGui.QFrame.Raised)

gridlay = QtGui.QGridLayout(frame) # Менеджер размещения элементов во фрейме

label = QtGui.QLabel(u"Метка",frame) # Текстовая метка.

gridlay.addWidget(label,0,0)

ln_edit = QtGui.QLineEdit(u"Винни Пух", frame) # Строковое поле ввода.

gridlay.addWidget(ln_edit,0,1)

radio_group = QtGui.QGroupBox(u"Выбор из двух", frame) # Рамка с надписью вокруг группы элементов.

radio_lay = QtGui.QVBoxLayout(radio_group) # Менеджер размещения элементов в рамке.

radio1 = QtGui.QRadioButton(u"Первый", radio_group) # Два зависимых

radio2 = QtGui.QRadioButton(u"Второй", radio_group) # переключателя

radio2.setChecked(True)

radio_lay.addWidget(radio1)

radio_lay.addWidget(radio2)

gridlay.addWidget(radio_group,1,0,3,1)

combo = QtGui.QComboBox(frame) # Поле ввода с раскрывающимся списком.

combo.addItem(u"Пятачок")

combo.setEditable(True)

gridlay.addWidget(combo,1,1)

spin = QtGui.QSpinBox(frame)

spin.setValue(5) .

gridlay.addWidget(spin,2,1)

check = QtGui.QCheckBox(u"Пометка", frame) # Независимый переключатель

check.setCheckState(QtCore.Qt.Checked)

gridlay.addWidget(check,3,1)

progress = QtGui.QProgressBar(frame) # индикатор прогресса

progress.setValue(70)

progress.setOrientation(QtCore.Qt.Horizontal)

gridlay.addWidget(progress,4,0,1,2)

btn_lay = QtGui.QHBoxLayout()

button1 = QtGui.QPushButton(u"Ок", frame)

button2 = QtGui.QPushButton(u"Отмена", frame)

btn_lay.addWidget(button1)

btn_lay.addWidget(button2)

gridlay.addLayout(btn_lay,5,0,1,2)

boxlay.addWidget(frame)

if __name__=="__main__":

app = QtGui.QApplication(sys.argv)

aw = AnyWidget()

aw.show()

sys.exit(app.exec_())

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.