historiaurrea
Erakunde mediko batek Orthanc PACS zerbitzarietan eta Radiant DICOM bezeroetan oinarritutako soluzioak ezarri zituen. Konfigurazioan, DICOM bezero bakoitza PACS zerbitzarietan deskribatu behar dela jakin dugu:
- Bezeroaren izena
- AE izena (bakarra izan behar du)
- Bezeroaren aldean automatikoki irekitzen den TCP ataka eta PACS zerbitzaritik DICOM inkestak jasotzen dituena (hau da, zerbitzariak bezeroarengana bultzatzen ditu - konexioa hasiz lehenik)
- IP helbidea
Radiant konfiguratu ondoren, bezeroek hausnarketa hau jaso zuten: bezero bakoitzarentzat, goiko parametroekin softwarea konfiguratuz fitxategia bete zen. pacs.xml, erabiltzailearen profilean kokatuta zegoen (bidea: %APPDATA%RadiantViewerpacs.xml). Aldi berean, bezero baten konfigurazioa bestearengandik desberdina zen gutxienez bi parametrotan (AEren izena desberdina da guztiontzat, eta portua, funtsean, berdina da, zerbitzari berean exekutatzen diren terminaleko bezeroak izan ezik - hor portuek ere bazeuden. desberdinak esleitzeko).
Pacs.xml fitxategiaren adibidea by
Sei hilabete inguru dena ondo egon zen, sistema funtzionatzen hasi zen... eta gero etorri zitzaigunβurpeko harriak'
- Zenbait PACS zerbitzari berri martxan jarri behar ditugu, zaharrak ordezkatuko dituztenak (non diskoko lekua agortzen hasi den). PACS zerbitzariak makina birtualetan, baina ez da horretaz ari gara;
- Nolabait zentralki aldatu behar ditugu konfigurazio bakarrak (bi parametro ezberdinekin) 200 makinetan (haien kopurua aldizka handitzen ari zen);
- Inkesta-bolumenen hazkunde-tasa kontuan hartuta, irtenbide bat behar da behin bakarrik ez, baizik eta errepikatu eta aldizka (adibidez, 1-3 hilabetean behin).
Arazo bat konpontzeko tresnak hautatzea
Hasieran, bezeroaren aldetik pacs.xml fitxategia aldatu eta PACS zerbitzarien zerrendan aldaketak egiteko AE izena eta TCP ataka ezarpenak eragin gabe irtenbideren bat aurkitzeko saiakerak izan ziren. Garai hartan Windows-eko bezeroak Windows XP eta Windows 7-n oinarritzen ziren; beraz, VBScript-en oinarritutako horrelako zerbait idazteko saiakerak egon ziren. Baina, ai, ezin izan zen horrelako zeregin bat menperatzea, hizkuntza honetan ezer konplexu eta konplexua idazteko esperientzia falta osoa zelako. Aurkitu eta berridazteko saiakerek ere ez zuten arrakastarik izan (kontuan izan behar da dagoeneko beste plan bat neukala buruan, beraz, ez nuen VBScript-ekin 3-4 ordu baino gehiagotan ibili).
Azkenean, honako irtenbide hau erabaki nuen:
- Talde-politika erabiliz, bildu pacs.xml fitxategi guztiak toki bakarrean sareko baliabide bateko edozein zerbitzaritan;
- Aldatu fitxategiak masiboki (lehendik ere esperientzia nuen Perl erabiliz horrelako arazoak konpontzen);
- Erabili talde-politikak bezeroaren ezarpenak eguneratzeko.
Fitxategiak biltzea Talde-politika erabiliz
Zatirik errazena da bezero bat bere profilean saioa hasten denean, bere eskubideekin, .bat fitxategi jakin bat exekutatzen duela, hau dio:
echo off
If exist %APPDATA%RadiantViewerpacs.xml copy %APPDATA%RadiantViewerpacs.xml srv.test.localpconfigs$pacs-%COMPUTERNAME%-%USERNAME%.xml
Horrela, pacs.xml fitxategiak zerbitzarian pilatuko dira ezkutuko baliabide batean, zeinaren izenak konfigurazio hau zein ordenagailutatik eta zein erabiltzailetatik kopiatu den informazioa dauka.
Zailena politika honek erabiltzaile guztientzat funtzionatu arte itxarotea izan zen.
Konfigurazioak aldatzea Perl script bat erabiliz
beharko dugu
Gidoia bera nahiko sinplea izan zen:
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);
}
}
}
Bere funtzionamenduaren printzipioa:
- Bezeroetatik pacs.xml konfigurazioak bildu ditugun direktorioa irekitzen dugu eta fitxategien zerrenda eskalar multzo batean jartzen dugu (@report_files);
- Begizta batean, fitxategi bat prozesatu eta lerroz lerro irakurtzen dugu;
- Split erabiliz, lerro bakoitza 5 zatitan banatu dugu, komatxoak bereizle gisa erabiliz;
- Entzule hitza duen lerro bat aurkitzen dugu eta fitxategi bakoitzerako datuak (AE bezeroaren izena eta TCP ataka zenbakia) bi aldagaitan jartzen ditugu;
- Honen ondoren, XML fitxategi berri bat sortu besterik ez dugu, parametro bakarrak sartu eta gero PACS zerbitzari kopurua behar den parametroekin txertatuko dugu - horiek. zertarako hasi zen dena)
- XML fitxategi berria zaharraren gainean berridazten dugu.
Kontuan izan behar da, hain zuzen ere, ez dudala script hau guztiz automatikoki erabiltzen; izan ere, bildutako konfigurazioak beste direktorio batean kopiatzen ditut eta gero scripta exekutatu eta denak masiboki aldatzen ditut. Ondoren, ausazko egiaztapena eta konfigurazioak makinetara banatu daitezke.
Aldatutako pacs.xml fitxategiak bezeroei banatzea
Burura etorri zitzaidan gauzarik errazena jada lanean ari den .bat fitxategian aldaketak egitea izan zen, bezeroen konfigurazioak biltzen dituena eta lerroa gehitzea:
If exist %APPDATA%RadiantViewerpacs.xml copy /Y srv.test.localpconfigsnew$pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%RadiantViewerpacs.xml
Azken .bat fitxategiak itxura hau du:
@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
Ondorioa
Horrelakoa da "belauna"konponbidea. Dagoeneko bi aldiz probatu dugu (2018ko irailean eta 2019ko otsailean), orain arte hegaldia normala da. Jakina, bezeroen % 100 ez da eguneratzen, baina balio horretatik gertu dago - gainerakoa urrunetik osatzen dugu. Egilearen gidoia
Iturria: www.habr.com