Утилита логирования и уведомлений (постановка)
SYSDBA (обсуждение | вклад) |
SYSDBA (обсуждение | вклад) (→Хранение лога) |
||
| (не показаны 5 промежуточных версий 1 участника) | |||
| Строка 14: | Строка 14: | ||
Предлагается: | Предлагается: | ||
| − | * Создаем отдельное приложение ''' | + | * Создаем отдельное приложение '''gedemin_cc.exe''' для хранения/отображения/записи в БД лога, уведомлений, информации о ходе выполнения длительных процессов. |
| − | * Функциональность | + | * Функциональность gedemin_cc.exe: |
** Регистрация подключения/отключения gedemin.exe | ** Регистрация подключения/отключения gedemin.exe | ||
** Прием событий от gedemin.exe. Размещение их в буфере в оперативной памяти и запись в файл лога на диске. Для связи между приложениями используются TCP/IP Sockets. | ** Прием событий от gedemin.exe. Размещение их в буфере в оперативной памяти и запись в файл лога на диске. Для связи между приложениями используются TCP/IP Sockets. | ||
| Строка 21: | Строка 21: | ||
** Запись событий в базу данных (включая отложенную, пакетную запись). | ** Запись событий в базу данных (включая отложенную, пакетную запись). | ||
** Считывание ранее сохраненного лога и отображение его. | ** Считывание ранее сохраненного лога и отображение его. | ||
| + | ** Импорт/экспорт событий в текстовый файл. | ||
** Автоматическую очистку лога. | ** Автоматическую очистку лога. | ||
** Отсылку управляющих событий на gedemin.exe. | ** Отсылку управляющих событий на gedemin.exe. | ||
| Строка 27: | Строка 28: | ||
** Отображение иконки в System Tray. Приложение может работать как с выводом окна на экран, так и без него. | ** Отображение иконки в System Tray. Приложение может работать как с выводом окна на экран, так и без него. | ||
** Динамическое отображение информации о ходе процессов (когда известен общий и выполненный объем и, когда он не известен). | ** Динамическое отображение информации о ходе процессов (когда известен общий и выполненный объем и, когда он не известен). | ||
| − | * Создаем глобальный объект gdLog -- нить с низким приоритетом, наследованная от [[TgdMessagedThread]], для взаимодействия с | + | * Создаем глобальный объект gdLog -- нить с низким приоритетом, наследованная от [[TgdMessagedThread]], для взаимодействия с gedemin_сс.exe. |
* Функциональность gdLog: | * Функциональность gdLog: | ||
| − | ** Запуск и/или установление соединения с | + | ** Запуск и/или установление соединения с gedemin_сс.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.