Домашняя страничка Стефурак П.Б. Система контроля и анализа использования лицензий на программное обеспечение, использующее Macrovision LMTOOLS (AutoDESK AutoCAD, CSOFT и др.).
 
 
  
  
 
Промзона \ Контроль и анализ использования лицензий на ПО.
Система контроля и анализа использования лицензий на программное обеспечение, использующее Macrovision LMTOOLS (AutoDESK AutoCAD, CSOFT и др.).
 
 
На предприятии, где я сейчас тружусь, используется много всякого ПО (все лицензионное!) и в частности
AutoDESK AutoCAD и несколько продуктов компании Consistent Software (CSOFT).  
Сетевые лицензии на данное ПО контролируются Macrovision LMTOOLS, который установлен на сервере, к которому (к серверу)
с одной стороны привязан лицензионный файл AutoDESK для AutoCAD и с другой - ключ аппаратной защиты и лицензионной
файл продуктов компании Consistent Software. Конфигурация стандартная, кроме того факта, что таких серверов 2
(в разных городах) и списки ПО и соответственно лицензий на них не совпадают.  
С некоторого времени пользователи стали жаловаться на недоступность сетевых лицензий.  
Штатная оснастка Macrovision LMTOOLS (LMTOOLS.exe) дает необходимую информацию, но уж очень скучно и некрасиво.  
Кроме того, выяснилось, что бывает ситуация, когда лицензируемые продукты не возвращают занятые лицензии по разным
причинам и чтобы с этим бороться есть разные способы (опция установки тайм-аута возврата лицензии при неактивности или
перезапуск сервера лицензирования).  
Взвесив "за" и "против", я решил написать свое решение для:
наглядного представления информации об используемых лицензиях;
хранения истории использования лицензий;
выполнения автоматических действий по событиям, связанным с лицензированием ПО.
 
Release.
 
Система состоит из 2х частей:
ПО, опрашивающее сервера лицензирования, и сохраняющее данные в БД;
web-приложение, позволяющее визуализировать данные о лицензируемом ПО.
 
Первая часть системы - программа, осуществляющая опрос серверов лицензий:
lmtool_lic_view.zip.  
После запуска, она периодически опрашивает сервера лицензий, и (при наличии настроек):
Записывает данные о лицензиях в БД (скрипт создания таблицы находится в файле Lic_used.sql
архива);
Записывает полный ответ сервера лицензирования в БД (скрипт создания таблицы находится в файле Lic_LogFiles.sql
архива);
При определенных условиях, посылает серверу лицензирования сигнал на перезагрузку (пример, с использованием
PsService - Service information and configuration utility Copyright (C) 2001-2010 Mark Russinovich,
в файле CSOFT_nls_restart.bat
архива).  
Настройки ПО хранятся в INI файле, который должен располагаться в том же каталоге, что и exe файл: Секция [System] timerInterval= - интервал опроса, в мин; db_connection_string= - строка подключения к серверу БД, вида "Provider=SQLOLEDB.1;User ID=User;
Password=User_password;Persist Security Info=True;Initial Catalog=main_db;
Data Source=db_server_name;Use Procedure for Prepare=1;Auto Translate=True;".
Если данная переменная не заполнена, или она ссылается на несуществующий сервер БД, то никакие операции
с БД не выполняются; write_logfile_to_DB= - если 1, то в таблицу Lic_LogFiles базы данных main_db
сервера db_server_name будут сохраняться оригинальные полные отчеты сервера лицензирования.
Любое другое значение - запись отчетов не выполняется; temppath= - путь к временной папке, например c:\temp. Секции описания серверов лицензирования [ServerN] (N=номер 1..99) name= - полное имя сервера лицензирования; komment= - комментарий, в моем случае - город, где расположен сервер лицензирования; adskflex=AutoDESK, CSOFT=CSOFT - "расшифровка" имен "демонов" сервера лицензирования; CSOFT_restart_cmd=cmd.exe /c CSOFT_nls_restart.bat - команда, выполняемая для рестарта службы
"демона" лицензирования (в данном случае - CSOFT, для AutoDESC будет выглядеть например так:
adskflex_restart_cmd=cmd.exe /c AutoDESC_nls_restart.bat); 85730ACD_2012_0F=AutoCAD 2012, Spds=СПДС 7, EnergyCS_UR=EnergyCS УР, EnergyCS_TKZ=EnergyCS ТКЗ, и т.д.
- расшифровка названий программных продуктов, на сервере лицензирования;
Алгоритм работы (повторяется с периодичностью "timerInterval" для каждого сервера, описанного в "[ServerN]"):
1. Запрос к серверу лицензирования, через утилиту "lmutil";
2. Если "write_logfile_to_DB"=1 и "db_connection_string"<>"", запись ответа в таблицу "Lic_LogFiles" БД
"main_db" сервера "db_server_name";
3. Анализ ответа сервера лицензирования:
    3.1. определение "демона";
    3.2. определение лицензии и ее показателей (всего, использовано);
    3.3. запись в таблицу "Lic_used" БД "main_db" сервера "db_server_name" данных о лицензии;
    3.4. если для данного "демона" данного сервера определена команда на перезапуск, проверка
"всего"=="использовано". Если "да", выполнение команды перезапуска "демона".
 
Вторая часть системы - web приложение, позволяющее визуализировать данные о лицензируемом ПО.  
Возможности:
Сводный график и таблица использования лицензий на ПО в течении дня, на определенную дату:
   
   
Произвольная фильтрация отображаемых лицензий, серверов, "демонов", дат и т.д.:
   
Просмотр ответов серверов лицензирования в исходном виде: