preistorja
Organizzazzjoni medika waħda implimentat soluzzjonijiet ibbażati fuq servers Orthanc PACS u klijent Radiant DICOM. Waqt is-setup, sirna nafu li kull klijent DICOM għandu jiġi deskritt fis-servers PACS kif ġej:
- Isem il-klijent
- Isem AE (għandu jkun uniku)
- Port TCP li jinfetaħ awtomatikament min-naħa tal-klijent u jirċievi stħarriġ DICOM mis-server PACS (jiġifieri, is-server jimbottahom lejn il-klijent - l-ewwel jibda l-konnessjoni)
- Indirizz IP
Wara li waqqfu Radiant, il-klijenti rċevew l-ikel li ġej għal ħsieb: għal kull klijent, it-twaqqif tas-softwer bil-parametri ta 'hawn fuq irriżulta li l-fajl jimtela pacs.xml, li kien jinsab fil-profil tal-utent (mogħdija: %APPDATA%RadiantViewerpacs.xml). Fl-istess ħin, il-konfigurazzjoni ta 'klijent wieħed kienet differenti minn oħra f'mill-inqas żewġ parametri (l-isem AE huwa differenti għal kulħadd, u l-port huwa bażikament l-istess, ħlief għal klijenti terminali li jaħdmu fuq l-istess server - hemm il-portijiet kellhom ukoll jiġu assenjati differenti).
Eżempju ta' fajl pacs.xml minn
Għal madwar sitt xhur kollox kien tajjeb, is-sistema bdiet taħdem... u mbagħad waslet għandna "taħt l-ilma ġebel"
- Irridu nħaddmu diversi servers PACS ġodda li se jieħdu post dawk qodma (fejn l-ispazju tad-disk beda jispiċċa). Servers PACS f'magni virtwali, iżda mhux dak li qed nitkellmu;
- Irridu nbiddlu b'xi mod ċentrali konfigurazzjonijiet uniċi (b'żewġ parametri differenti) fuq 200 magna (in-numru tagħhom kien qed jiżdied regolarment);
- Meta wieħed iqis ir-rata tat-tkabbir tal-volumi tal-istħarriġ, hija meħtieġa soluzzjoni mhux darba biss, iżda replikata u regolarment (per eżempju, darba kull 1-3 xhur).
Tagħżel għodda biex issolvi problema
Għall-ewwel, kien hemm tentattivi biex tinstab xi soluzzjoni li timmodifika l-fajl pacs.xml fuq in-naħa tal-klijent u tagħmel bidliet fil-lista ta 'servers PACS mingħajr ma taffettwa l-isem AE u l-issettjar tal-port TCP. Il-klijenti tal-Windows dak iż-żmien kienu bbażati kemm fuq Windows XP kif ukoll fuq Windows 7 - għalhekk kien hemm tentattivi biex tikteb xi ħaġa bħal din ibbażata fuq VBScript. Imma sfortunatament, ma kienx possibbli li tikkontrolla kompitu bħal dan, minħabba n-nuqqas sħiħ ta 'esperjenza fil-kitba ta' xi ħaġa kumplessa u kumplessa f'din il-lingwa. Tentattivi biex issib u nikteb mill-ġdid ukoll ma rnexxewx (għandu jiġi nnutat li diġà kelli pjan differenti f'rasi, għalhekk ma kontx fiddle ma' VBScript għal aktar minn 3-4 sigħat).
Fl-aħħar iddeċidejt fuq is-soluzzjoni li ġejja:
- Bl-użu tal-politika tal-grupp, iġbor il-fajls pacs.xml kollha f'post wieħed fuq kwalunkwe server f'riżorsa tan-netwerk;
- Ibdel il-fajls en masse (diġà kelli esperjenza fis-soluzzjoni ta' problemi bħal dawn bl-użu ta' Perl);
- Uża wkoll politiki tal-grupp biex taġġorna s-settings tal-klijenti.
Il-ġbir ta' fajls bl-użu tal-Politika tal-Grupp
L-aktar parti sempliċi hija li meta klijent jidħol fil-profil tiegħu, hu, bid-drittijiet tiegħu, jesegwixxi ċertu fajl .bat, li jgħid:
echo off
If exist %APPDATA%RadiantViewerpacs.xml copy %APPDATA%RadiantViewerpacs.xml srv.test.localpconfigs$pacs-%COMPUTERNAME%-%USERNAME%.xml
Għalhekk, il-fajls pacs.xml se jakkumulaw fuq is-server f'riżors moħbi, li l-isem tiegħu fih informazzjoni minn liema kompjuter u minn liema utent ġiet ikkupjata din il-konfigurazzjoni.
L-iktar ħaġa diffiċli kienet li tistenna sakemm din il-politika ħadmet għall-utenti kollha.
Nibdlu konfigurazzjonijiet bl-użu ta 'skript Perl
Se jkollna bżonn
L-iskript innifsu rriżulta li kien pjuttost sempliċi:
use XML::Writer;
# Открываем папку с отчетами, обрабатываем ссписок (удаляем лишнее):
$report_dir = "C:Perl64WORKPACS-xml3";
opendir(DIR, "$report_dir") or die "Не могу открыть папку с отчетами!";
@report_files = readdir DIR;
shift (@report_files); # удаляем точку из элементов массива (.)
shift (@report_files); # удаляем две точки из элементов массива (..)
# print "@report_files";
closedir(DIR);
# Начинаем обрабатывать файлы - по одному за раз. Нужно считать параметр AET и номер порта в переменные.
foreach $analiz_file (@report_files)
{
$full_path_to_file="C:Perl64WORKPACS-xml3".$analiz_file;
open (INFO, $full_path_to_file);
while ($line = <INFO>)
{
# Переменные $aet и $port содержат уникальные данные для каждого XML файла:
my ($other1, $aet, $other2, $port, $other3) = split /"/, $line, 5;
# Если встречается строка listener - то мы дошли до нужной строчки и можно формировать новый XML:
if ($other1 =~ 'listener')
{
# Формируем новый XML c нужными полями и данными:
my $writer = XML::Writer->new(OUTPUT => 'self', DATA_MODE => 1, DATA_INDENT => 2, );
$writer->xmlDecl('utf-8');
$writer->startTag('pacs');
$writer->startTag('listener', ae => $aet, port => $port);
$writer->endTag();
$writer->startTag('hosts');
$writer->startTag('host', name => 'MRT', ae => 'ORTHANC', ip => 'XX.YY.214.17', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
$writer->endTag();
$writer->startTag('host', name => 'KT', ae => 'ORTHANC2', ip => 'XX.YY.215.253', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
$writer->endTag();
$writer->startTag('host', name => 'R', ae => 'ORTHANC3', ip => 'XX.YY.215.252', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
$writer->endTag();
$writer->startTag('host', name => 'KT-20180501-20180831', ae => 'ORTHANC4', ip => 'XX.YY.215.251', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
$writer->endTag();
$writer->startTag('host', name => 'KT-20180901-20181130', ae => 'ORTHANC5', ip => 'XX.YY.215.250', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
$writer->endTag();
$writer->endTag('hosts');
$writer->startTag('presets');
$writer->endTag();
$writer->startTag('lastsearch', dt => '4', mfid => '1048592');
$writer->endTag();
$writer->endTag('pacs');
# Помещаем готовый XML в переменную:
my $xml = $writer->end();
# Подготавливаем файл для перезаписи:
$rewritexml = $full_path_to_file;
# Переписываем XML файлы новыми данными:
open (NEWXML, ">$rewritexml");
print NEWXML $xml;
close (NEWXML);
}
}
}
Il-prinċipju tat-tħaddim tiegħu:
- Aħna niftħu d-direttorju li fih ġabarna l-konfigurazzjonijiet pacs.xml mill-klijenti u poġġi l-lista ta 'fajls f'firxa ta' scalars (@report_files);
- F'linja, nipproċessaw fajl wieħed kull darba u naqrawha linja b'linja;
- Bl-użu ta 'qasma, aħna naqsmu kull linja f'5 partijiet, billi nużaw kwotazzjonijiet bħala separatur;
- Insibu linja bil-kelma semmiegħa u poġġi d-dejta unika għal kull fajl (isem tal-klijent AE u numru tal-port TCP) f'żewġ varjabbli;
- Wara dan, aħna sempliċement niġġeneraw fajl XML ġdid, nidħlu fih parametri uniċi u mbagħad daħħal in-numru meħtieġ ta 'servers PACS bil-parametri tagħhom - dawk. għalxiex beda kollox)
- Aħna nerġgħu niktbu l-fajl XML ġdid fuq dak antik.
Għandu jiġi nnutat li fil-fatt, jien ma nużax dan l-iskript kompletament awtomatikament - fil-fatt, nikkopja l-konfigurazzjonijiet miġbura f'direttorju separat u mbagħad imexxi l-iskript u nibdilhom kollha b'mod massiv. Sussegwentement, kontroll każwali - u l-konfigurazzjonijiet jistgħu jitqassmu lura lill-magni.
Tqassam fajls pacs.xml modifikati lill-klijenti
L-iktar ħaġa sempliċi li ġiet f'moħħna kienet li tagħmel bidliet fil-fajl .bat li diġà qed jaħdem li jiġbor konfigurazzjonijiet mill-klijenti u żid il-linja:
If exist %APPDATA%RadiantViewerpacs.xml copy /Y srv.test.localpconfigsnew$pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%RadiantViewerpacs.xml
Il-fajl .bat finali jidher bħal dan:
@echo off
If exist %APPDATA%RadiantViewerpacs.xml copy %APPDATA%RadiantViewerpacs.xml srv.test.localpconfigs$pacs-%COMPUTERNAME%-%USERNAME%.xml
If exist %APPDATA%RadiantViewerpacs.xml copy /Y srv.test.localpconfigsnew$pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%RadiantViewerpacs.xml
Konklużjoni
Huwa bħal dan "irkoppa"soluzzjoni. Diġà ppruvajnaha darbtejn (f'Settembru 2018 u Frar 2019), s'issa t-titjira hija normali. Naturalment, mhux 100% tal-klijenti jaġġornaw, iżda huwa qrib dan il-valur - aħna tlesti l-bqija mill-bogħod. Skript minn
Sors: www.habr.com