Утилита логирования и уведомлений (постановка)

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(Хранение лога)
 
(не показаны 6 промежуточных версий 1 участника)
Строка 14: Строка 14:
 
Предлагается:
 
Предлагается:
  
* Создаем отдельное приложение '''gedemin_log.exe''' для хранения/отображения/записи в БД лога, уведомлений, информации о ходе выполнения длительных процессов.
+
* Создаем отдельное приложение '''gedemin_cc.exe''' для хранения/отображения/записи в БД лога, уведомлений, информации о ходе выполнения длительных процессов.
* Функциональность gedemin_log.exe:
+
* Функциональность gedemin_cc.exe:
 
** Регистрация подключения/отключения gedemin.exe
 
** Регистрация подключения/отключения gedemin.exe
** Прием событий от gedemin.exe. Размещение их в буфере в оперативной памяти и запись в файл лога на диске.
+
** Прием событий от gedemin.exe. Размещение их в буфере в оперативной памяти и запись в файл лога на диске. Для связи между приложениями используются TCP/IP Sockets.
 
** Отображение/фильтрация/поиск событий на экране.
 
** Отображение/фильтрация/поиск событий на экране.
 
** Запись событий в базу данных (включая отложенную, пакетную запись).
 
** Запись событий в базу данных (включая отложенную, пакетную запись).
 
** Считывание ранее сохраненного лога и отображение его.
 
** Считывание ранее сохраненного лога и отображение его.
 +
** Импорт/экспорт событий в текстовый файл.
 
** Автоматическую очистку лога.
 
** Автоматическую очистку лога.
 
** Отсылку управляющих событий на gedemin.exe.
 
** Отсылку управляющих событий на gedemin.exe.
 
** Приложение может одновременно обслуживать несколько gedemin.exe на этом же компьютере или с подключением по сети.
 
** Приложение может одновременно обслуживать несколько gedemin.exe на этом же компьютере или с подключением по сети.
 
** Приложение взаимодействует с [https://msdn.microsoft.com/en-us/library/windows/desktop/ee330740%28v=vs.85%29.aspx Windows Notifications]
 
** Приложение взаимодействует с [https://msdn.microsoft.com/en-us/library/windows/desktop/ee330740%28v=vs.85%29.aspx Windows Notifications]
** Отображение иконки в System Tray.
+
** Отображение иконки в System Tray. Приложение может работать как с выводом окна на экран, так и без него.
 
** Динамическое отображение информации о ходе процессов (когда известен общий и выполненный объем и, когда он не известен).
 
** Динамическое отображение информации о ходе процессов (когда известен общий и выполненный объем и, когда он не известен).
* Создаем глобальный объект gdLog -- нить с низким приоритетом, для взаимодействия с gedemin_log.exe.
+
* Создаем глобальный объект gdLog -- нить с низким приоритетом, наследованная от [[TgdMessagedThread]], для взаимодействия с gedemin_сс.exe.
 
* Функциональность gdLog:
 
* Функциональность gdLog:
** Запуск и/или установление соединения с gedemin_log.exe.
+
** Запуск и/или установление соединения с gedemin_сс.exe.
 
** Накопление событий во внутренней очереди.
 
** Накопление событий во внутренней очереди.
** Передачу событий в gedemin_log.exe.
+
** Передачу событий в gedemin_сс.exe.
 
** Прием управляющих событий.
 
** Прием управляющих событий.
  
 +
==Хранение лога==
 +
 +
Для хранения лога создадим локальную базу данных Firebird с именем '''gedemin_log.fdb'''. Расположим ее в подкаталоге '''Database''', относительно выполняемого файла. Если на папку нет прав на создание/изменение файлов, то расположим ее в папке профиля, там где располагаются файлы gedemin.ini, databases.ini.
 +
 +
База данных содержит таблицы:
 +
 +
===GD_LOG_DB===
 +
 +
{| border="1" cellpadding="4" cellspacing="0" style="border-collapse:collapse;"
 +
!style="background:#ffdead;"| Поле
 +
!style="background:#ffdead;"| Тип
 +
!style="background:#ffdead;"| PK/FK/UQ
 +
!style="background:#ffdead;"| Описание
 +
|-
 +
|id
 +
|INTEGER NOT NULL
 +
|PK
 +
|Идентификатор базы данных. Заполняется генератором.
 +
|-
 +
|db
 +
|VARCHAR(256) NOT NULL
 +
|UQ
 +
|Полная строка подключения к базе данных.
 +
|}
 +
 +
===GD_LOG_SQL===
 +
 +
{| border="1" cellpadding="4" cellspacing="0" style="border-collapse:collapse;"
 +
!style="background:#ffdead;"| Поле
 +
!style="background:#ffdead;"| Тип
 +
!style="background:#ffdead;"| PK/FK/UQ
 +
!style="background:#ffdead;"| Описание
 +
|-
 +
|crc
 +
|INTEGER NOT NULL
 +
|PK
 +
|Хэш от текста запроса.
 +
|-
 +
|sql
 +
|BLOB SUB_TYPE 1
 +
|
 +
|Текст запроса.
 +
|}
 +
 +
===GD_LOG===
 +
 +
{| border="1" cellpadding="4" cellspacing="0" style="border-collapse:collapse;"
 +
!style="background:#ffdead;"| Поле
 +
!style="background:#ffdead;"| Тип
 +
!style="background:#ffdead;"| PK/FK/UQ
 +
!style="background:#ffdead;"| Описание
 +
|-
 +
|id
 +
|INTEGER NOT NULL
 +
|PK
 +
|Идентификатор записи. Заполняется генератором.
 +
|-
 +
|ts
 +
|TIMESTAMP NOT NULL
 +
|
 +
|Дата и время события.
 +
|-
 +
|user_name
 +
|VARCHAR(20)
 +
|
 +
|Имя пользователя платформы Гедымин.
 +
|-
 +
|os_name
 +
|VARCHAR(20)
 +
|
 +
|Имя пользователя операционной системы.
 +
|-
 +
|db
 +
|INTEGER NOT NULL
 +
|
 +
|Идентификатор БД. Ссылка на таблицу GD_LOG_DB.
 +
|-
 +
|host_name
 +
|VARCHAR(20)
 +
|
 +
|Имя компьютера.
 +
|-
 +
|host_ip
 +
|CHAR(15)
 +
|
 +
|IP адрес компьютера.
 +
|-
 +
|obj_class
 +
|VARCHAR(40)
 +
|
 +
|Класс объекта.
 +
|-
 +
|obj_subtype
 +
|VARCHAR(31)
 +
|
 +
|Подтип объекта.
 +
|-
 +
|obj_name
 +
|VARCHAR(40)
 +
|
 +
|Имя объекта.
 +
|-
 +
|obj_id
 +
|INTEGER
 +
|
 +
|ИД объекта.
 +
|-
 +
|op
 +
|CHAR(8) NOT NULL
 +
|
 +
|Идентификатор операции. Латинские символы в верхнем регистре.
 +
|-
 +
|sql_crc
 +
|INTEGER
 +
|
 +
|Хэш запроса. Он же ссылка на таблицу GD_LOG_SQL.
 +
|-
 +
|data
 +
|BLOB SUB_TYPE 1
 +
|
 +
|Текст сообщения и/или дополнительные данные. Например, текст SQL запроса.
 +
|}
 +
 +
===GD_SQL_PARAM===
 +
 +
{| border="1" cellpadding="4" cellspacing="0" style="border-collapse:collapse;"
 +
!style="background:#ffdead;"| Поле
 +
!style="background:#ffdead;"| Тип
 +
!style="background:#ffdead;"| PK/FK/UQ
 +
!style="background:#ffdead;"| Описание
 +
|-
 +
|logkey
 +
|INTEGER NOT NULL
 +
|PK
 +
|Ссылка на GD_LOG.
 +
|-
 +
|param
 +
|VARCHAR(31) NOT NULL
 +
|PK
 +
|Имя параметра.
 +
|-
 +
|INT
 +
|INTEGER
 +
|
 +
|
 +
|-
 +
|STR
 +
|VARCHAR(1024)
 +
|
 +
|-
 +
|DT
 +
|TIMESTAMP
 +
|
 +
|
 +
|-
 +
|CURR
 +
|NUMERIC(15, 4)
 +
|
 +
|
 +
|-
 +
|FLOAT
 +
|DOUBLE PRECISION
 +
|
 +
|
 +
|}
 +
 +
База данных содержит генератор GD_G_LOG.
 +
 +
=См. также=
 +
 +
* [https://github.com/GoldenSoftwareLtd/gedemin/labels/CC Gedemin Control Center issues]
  
 
[[Category:Постановка]]
 
[[Category:Постановка]]

Текущая версия на 11:46, 13 октября 2015

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

  • Метод глобального объекта IBLogin AddEvent для записи в таблицу GD_JOURNAL.
  • Форма TfrmSQLProcess и процедуры в модуле at_frmSQLProcess.
  • Запись событий в лог операционной системы.
  • Отсылка сообщений на электронную почту о успешной/не успешной загрузке пакетов ПИ.
  • Окно с анимацией в процессе построения длительного отчета.
  • Окно с временем выполнения длительного SQL запроса.
  • Объект gdNotifierThread для вывода сообщений в специальной области главного окна.
  • Окно Время выполнения скрипт-функций в редакторе скрипт-объектов.

Основная проблема указанных выше механизмов -- невозможно организоват вывод на экран, пока заблокирована основная нить приложения. Использование IBLogin.AddEvent приводит к дополнительной нагрузке на базу данных.

Предлагается:

  • Создаем отдельное приложение gedemin_cc.exe для хранения/отображения/записи в БД лога, уведомлений, информации о ходе выполнения длительных процессов.
  • Функциональность gedemin_cc.exe:
    • Регистрация подключения/отключения gedemin.exe
    • Прием событий от gedemin.exe. Размещение их в буфере в оперативной памяти и запись в файл лога на диске. Для связи между приложениями используются TCP/IP Sockets.
    • Отображение/фильтрация/поиск событий на экране.
    • Запись событий в базу данных (включая отложенную, пакетную запись).
    • Считывание ранее сохраненного лога и отображение его.
    • Импорт/экспорт событий в текстовый файл.
    • Автоматическую очистку лога.
    • Отсылку управляющих событий на gedemin.exe.
    • Приложение может одновременно обслуживать несколько gedemin.exe на этом же компьютере или с подключением по сети.
    • Приложение взаимодействует с Windows Notifications
    • Отображение иконки в System Tray. Приложение может работать как с выводом окна на экран, так и без него.
    • Динамическое отображение информации о ходе процессов (когда известен общий и выполненный объем и, когда он не известен).
  • Создаем глобальный объект gdLog -- нить с низким приоритетом, наследованная от TgdMessagedThread, для взаимодействия с gedemin_сс.exe.
  • Функциональность gdLog:
    • Запуск и/или установление соединения с gedemin_сс.exe.
    • Накопление событий во внутренней очереди.
    • Передачу событий в gedemin_сс.exe.
    • Прием управляющих событий.

Содержание

[править] Хранение лога

Для хранения лога создадим локальную базу данных Firebird с именем gedemin_log.fdb. Расположим ее в подкаталоге Database, относительно выполняемого файла. Если на папку нет прав на создание/изменение файлов, то расположим ее в папке профиля, там где располагаются файлы gedemin.ini, databases.ini.

База данных содержит таблицы:

[править] GD_LOG_DB

Поле Тип PK/FK/UQ Описание
id INTEGER NOT NULL PK Идентификатор базы данных. Заполняется генератором.
db VARCHAR(256) NOT NULL UQ Полная строка подключения к базе данных.

[править] GD_LOG_SQL

Поле Тип PK/FK/UQ Описание
crc INTEGER NOT NULL PK Хэш от текста запроса.
sql BLOB SUB_TYPE 1 Текст запроса.

[править] GD_LOG

Поле Тип PK/FK/UQ Описание
id INTEGER NOT NULL PK Идентификатор записи. Заполняется генератором.
ts TIMESTAMP NOT NULL Дата и время события.
user_name VARCHAR(20) Имя пользователя платформы Гедымин.
os_name VARCHAR(20) Имя пользователя операционной системы.
db INTEGER NOT NULL Идентификатор БД. Ссылка на таблицу GD_LOG_DB.
host_name VARCHAR(20) Имя компьютера.
host_ip CHAR(15) IP адрес компьютера.
obj_class VARCHAR(40) Класс объекта.
obj_subtype VARCHAR(31) Подтип объекта.
obj_name VARCHAR(40) Имя объекта.
obj_id INTEGER ИД объекта.
op CHAR(8) NOT NULL Идентификатор операции. Латинские символы в верхнем регистре.
sql_crc INTEGER Хэш запроса. Он же ссылка на таблицу GD_LOG_SQL.
data BLOB SUB_TYPE 1 Текст сообщения и/или дополнительные данные. Например, текст SQL запроса.

[править] GD_SQL_PARAM

Поле Тип PK/FK/UQ Описание
logkey INTEGER NOT NULL PK Ссылка на GD_LOG.
param VARCHAR(31) NOT NULL PK Имя параметра.
INT INTEGER
STR VARCHAR(1024)
DT TIMESTAMP
CURR NUMERIC(15, 4)
FLOAT DOUBLE PRECISION

База данных содержит генератор GD_G_LOG.

[править] См. также

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты