Изменение настроек программ с сохранением персональных параметров
Предыстория
В одной медицинской организации внедряли решения на базе PACS-серверов Orthanc и DICOM-клиента Radiant. В ходе настройки выяснили, что каждый DICOM-клиент должен быть описан в PACS-серверах следующим образом:
- Имя клиента
- AE-имя (должно быть уникально)
- TCP-порт, который автоматически открывается на стороне клиента и принимает DICOM-обследования от PACS-сервера (т.е. сервер как бы толкает их в сторону клиента – инициируя соединение первым)
- IP-адрес
После настройки Radiant клиентов получили следующую информацию к размышлению – у каждого клиента настройка ПО с указанными выше параметрами приводила к заполнению файла pacs.xml, который располагался в профиле пользователя (путь: %APPDATA%\RadiantViewer\pacs.xml). При этом конфиг одного клиента от другого отличался минимум двумя параметрами (AE-имя у всех разное, а порт в основном одинаковый, кроме терминальных клиентов, работающих на одном и том же сервере – там порты тоже приходилось назначать разными).
Пример файла pacs.xml по ссылке:
Примерно полгода все было хорошо, система заработала…и тут до нас дошли «подводные камни»:
- Нам нужно ввести в строй несколько новых PACS-серверов, которые подменят старые (где стало заканчиваться место на дисках). PACS сервера в виртуальных машинах, но речь не об этом;
- Нам нужно как-то централизованно изменить уникальные конфигурации (двумя отличающимися параметрами) на 200 машинах (их количество регулярно увеличивалось);
- Учитывая темпы роста объемов обследований, решение нужно не разовое, а тиражируемое и регулярное (например, 1 раз в 3-5 месяцев).
Решение ниже.
Выбор инструментария для решения задачи
Вначале были попытки найти какое-то решение, которое на стороне клиента изменяло файл pacs.xml, и вносило в него изменения в список PACS-серверов, не трогая настройки AE-имени и TCP-порта. Windows клиенты на тот момент были на базе как Windows XP, так и Windows 7 – поэтому были попытки написать что-то такое на базе VBScript. Но увы – осилить такую задачу не получилось, ввиду полного отсутствия опыта написания чего-либо сложного и комплексного на этом языке. Попытки же найти и переписать также не увенчались успехом (тут надо отметить, что в голове уже был другой план, поэтому я не долбился с VBScript больше 3-4 часов).
В итоге я остановился на следующем решении:
- Собрать групповой политикой все файлы pacs.xml в одном месте на каком ни будь сервере в сетевом ресурсе;
- Изменить файлы скопом (опыт решения таких задач уже был – с использованием Perl);
- Также с помощью групповых политик обновить настройки клиентов.
Сбор файлов с помощью групповой политики
Самая простая часть – при входе клиента в свой профиль он со своими правами выполняет некий .bat файл, в котором прописано:
Таким образом на сервере в скрытом ресурсе будут накапливаться файлы pacs.xml, в имени которых есть информация с какого компьютера и с какого пользователя был скопирован данный конфиг.
Самое сложное было – дождаться, когда у всех пользователей отработает данная политика.
Изменение конфигураций с помощью Perl скрипта
Нам потребуется Active Perl под Windows от компании ActiveState, а также модуль XML::Writer, который можно установить с помощью команды ppm install XML-Writer.
Сам же скрипт получился довольно простой:
Принцип его работы:
- Открываем каталог, в котором у нас собраны конфигурации pacs.xml от клиентов и помещаем список файлов в массив скаляров (@report_files);
- В цикле обрабатываем по одному файлу и считываем его построчно;
- С помощью split дробим каждую строку на 5 частей, используя кавычки как разделитель;
- Находим строку с словом listener и помещаем в две переменные уникальные для каждого файла данные (AE-имя клиента и номер TCP-порта);
- После этого просто формируем новый XML-файл, вписываем в него уникальные параметры и далее вставляем нужное количество PACS-серверов с их параметрами – т.е. то, ради чего все затевалось)
- Переписываем новый XML-файл поверх старого.
Надо отметить, что на самом деле я использую данный скрипт не полностью автоматически – по сути я копирую собираемые конфиги в отдельный каталог и потом запуская скрипт изменяю их всем скопом. Далее выборочная проверка – и конфиги можно разливать обратно по машинам.
Распространение измененных pacs.xml файлов по клиентам
Самое простое, что пришло в голову – внести изменения в уже работающий .bat файл, который собирает конфигурации с клиентов и добавить строку:
Conquest dicom server настройка windows
Orthanc и eFilm
AndriyLL | Дата: Вторник, 23.Янв.2018, 10:51 | Сообщение # 1 | |
| Здравствуйте, прошу помочь разобраться, установил Orthanc как сервер, снимки на него успешно идут , но почти все не читабельны яркость или контрастность на максимуме Так же не могу к Orthanc ничем подключится кроме вебинтерфейса eFilm его видит Radiant тоже сервер видит но без толку Очень прошу помочь. а то уже второй день без толку, не могу понять где я что то пропустил | Файл конфигурации Orthanc // The logical name of this instance of Orthanc. This one is // Path to the directory that holds the heavyweight files (i.e. the // Path to the directory that holds the SQLite index (if unset, the // Enable the transparent compression of the DICOM instances // Maximum size of the storage in MB (a value of «0» indicates no // Maximum number of patients that can be stored at a given time // List of paths to the custom Lua scripts that are to be loaded // List of paths to the plugins that are to be loaded into this /** // Enable the HTTP server. If this parameter is set to «false», // HTTP port for the REST services and for the GUI // When the following option is «true», if an error is encountered // Enable HTTP compression to improve network bandwidth utilization, /** // Enable the DICOM server. If this parameter is set to «false», // The DICOM Application Entity Title // Check whether the called AET corresponds to the AET of Orthanc // The DICOM port // The default encoding that is assumed for DICOM files without // The transfer syntaxes that are accepted by Orthanc C-Store SCP // Whether Orthanc accepts to act as C-Store SCP for unknown storage // Set the timeout (in seconds) after which the DICOM associations /** // Whether remote hosts can connect to the HTTP server // Whether or not SSL is enabled // Path to the SSL certificate in the PEM format (meaningful only if // Whether or not the password protection is enabled // The list of the registered users. Because Orthanc uses HTTP // The list of the known DICOM modalities /** // Whether the Orthanc SCP allows incoming C-Echo requests, even // Whether the Orthanc SCP allows incoming C-Store requests, even // Whether Orthanc checks the IP/hostname address of the remote // The timeout (in seconds) after which the DICOM associations are // The list of the known Orthanc peers /** // Parameters of the HTTP proxy to be used by Orthanc. If set to the // Set the timeout for HTTP requests issued by Orthanc (in seconds). // Enable the verification of the peers during HTTPS requests. This // Path to the CA (certification authority) certificates to validate // Dictionary of symbolic names for the user-defined metadata. Each // Dictionary of symbolic names for the user-defined types of // Number of seconds without receiving any instance before a // By default, Orthanc compares AET (Application Entity Titles) in a // When the following option is «true», the MD5 of the DICOM files // The maximum number of results for a single C-FIND request at the // The maximum number of results for a single C-FIND request at the // The maximum number of active jobs in the Orthanc scheduler. When // If this option is set to «false», Orthanc will not log the // Enable or disable HTTP Keep-Alive (deprecated). Set this option // If this option is set to «false», Orthanc will run in index-only // DICOM associations are kept open as long as new DICOM commands // Maximum number of query/retrieve DICOM requests that are // When handling a C-Find SCP request, setting this flag to «true» // Configure PKCS#11 to use hardware security modules (HSM) and // If set to «true», Orthanc will still handle «SOP Classes in |
|
Kuzma | Дата: Вторник, 23.Янв.2018, 13:41 | Сообщение # 3 | |
| По качеству снимков. На самом деле они просто такие, как есть. Программы получения и просмотра снимков могут использовать свои какие-то фильтры и алгоритмы постобработки, а также предустановки яркости/контрастности. А на сервер снимки отправляются такими, какими получены. Поэтому в штатных программах и сторонних вьюверах они выглядят по-разному. Если хотите, вышлите несколько снимков мне на почту. Я посмотрю, как они будут смотреться с dcm4chee и conquest. По просмотру. Насколько я понимаю, AeTitle вьюверов должны быть также прописаны в конфиге ортханка. | Очень ВАЖНО проверить чтобы с «обеих» сторон НЕ БЫЛИ ВКЛЮЧЕНЫ БРАНДМАУЭРЫ. Далее посмотреть установлено какое-либо антивирусное ПО. И отключить или удалить хотя бы на время тестирования! Нескольо раз видал как тот же касперский «рубит» работу Efilma, хотя теоретически каспер как-бы только антивирус. А меж тем — как его отключили — все заработало. Можете попробовать CONQUEST поставить — на нем хорошо экспериментировать и логи есть визуальные. |