sa naunang kasaysayan
Usa ka medikal nga organisasyon ang nagpatuman ug mga solusyon base sa Orthanc PACS server ug Radiant DICOM nga kliyente. Atol sa pag-setup, among nahibal-an nga ang matag kliyente sa DICOM kinahanglan nga gihulagway sa mga server sa PACS ingon sa mosunod:
- Ngalan sa kliyente
- AE ngalan (kinahanglan nga talagsaon)
- Usa ka TCP port nga awtomatik nga nag-abli sa bahin sa kliyente ug nakadawat sa DICOM nga mga survey gikan sa PACS server (ie, ang server nagduso kanila ngadto sa kliyente - nag-una sa koneksyon)
- IP address
Human sa pag-set up sa Radiant, ang mga kliyente nakadawat sa mosunod nga pagkaon alang sa paghunahuna: alang sa matag kliyente, ang pag-set up sa software uban sa mga parameter sa ibabaw miresulta sa file nga napuno. pacs.xml, nga nahimutang sa user profile (dalan: %APPDATA%RadiantViewerpacs.xml). Sa parehas nga oras, ang config sa usa ka kliyente lahi sa lain sa labing menos duha ka mga parameter (ang ngalan sa AE lahi alang sa tanan, ug ang pantalan parehas ra, gawas sa mga kliyente sa terminal nga nagdagan sa parehas nga server - didto ang mga pantalan usab adunay nga itudlo nga lahi).
Pananglitan pacs.xml file pinaagi sa
Sulod sa mga unom ka bulan ang tanan maayo, ang sistema nagsugod sa pagtrabaho ... ug unya kini miabut kanamo "ilalom sa tubig ang mga batoΒ»:
- Kinahanglan namon nga ibutang sa operasyon ang daghang bag-ong mga server sa PACS nga mopuli sa mga daan (diin ang espasyo sa disk nagsugod na nga mahurot). Mga server sa PACS sa mga virtual machine, apan dili kana ang among gihisgutan;
- Kinahanglan namon nga usbon sa sentral nga paagi ang talagsaon nga mga pag-configure (nga adunay duha nga lainlaing mga parameter) sa 200 nga mga makina (kanunay nga nagdaghan ang ilang gidaghanon);
- Sa pagkonsiderar sa rate sa pagtubo sa mga volume sa survey, gikinahanglan ang solusyon dili lang kausa, apan gisubli ug kanunay (pananglitan, kausa matag 1-3 ka bulan).
Pagpili sa mga himan aron masulbad ang usa ka problema
Sa sinugdan, adunay mga pagsulay sa pagpangita sa pipila ka solusyon nga magbag-o sa pacs.xml file sa kilid sa kliyente ug maghimo og mga pagbag-o sa listahan sa mga PACS server nga dili makaapekto sa AE name ug TCP port settings. Ang mga kliyente sa Windows niadtong panahona gibase sa Windows XP ug Windows 7 - busa adunay mga pagsulay sa pagsulat sa usa ka butang nga sama niini base sa VBScript. Apan alaot, dili posible nga ma-master ang ingon nga buluhaton, tungod sa hingpit nga kakulang sa kasinatian sa pagsulat sa bisan unsang komplikado ug komprehensibo sa kini nga sinultian. Ang mga pagsulay sa pagpangita ug pagsulat pag-usab wala usab molampos (kini kinahanglan nga matikdan nga naa na koy laing plano sa akong ulo, mao nga wala ko magbiyot sa VBScript sulod sa kapin sa 3-4 ka oras).
Sa katapusan nakahukom ko sa mosunod nga solusyon:
- Gamit ang polisiya sa grupo, kolektaha ang tanang pacs.xml nga mga file sa usa ka dapit sa bisan unsang server sa usa ka kapanguhaan sa network;
- Pag-ilis sa mga file en masse (Naa na koy kasinatian sa pagsulbad sa maong mga problema gamit ang Perl);
- Gamita usab ang mga polisiya sa grupo aron ma-update ang mga setting sa kliyente.
Pagkolekta sa mga file gamit ang Group Policy
Ang pinakasimple nga bahin mao nga kung ang usa ka kliyente mag-log in sa iyang profile, siya, uban sa iyang mga katungod, magpatuman sa usa ka .bat file, nga nag-ingon:
echo off
If exist %APPDATA%RadiantViewerpacs.xml copy %APPDATA%RadiantViewerpacs.xml srv.test.localpconfigs$pacs-%COMPUTERNAME%-%USERNAME%.xml
Sa ingon, ang mga pacs.xml nga mga file mag-ipon sa server sa usa ka tinago nga kapanguhaan, ang ngalan nga adunay sulud nga kasayuran gikan sa kung diin nga kompyuter ug diin gikan ang tiggamit niini nga config gikopya.
Ang labing lisud nga butang mao ang paghulat hangtod nga kini nga palisiya molihok alang sa tanan nga tiggamit.
Pag-usab sa mga pag-configure gamit ang Perl script
Kinahanglan naton
Ang script mismo nahimo nga yano ra:
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);
}
}
}
Ang prinsipyo sa operasyon niini:
- Among giablihan ang direktoryo diin among gikolekta ang mga pacs.xml nga mga configuration gikan sa mga kliyente ug gibutang ang listahan sa mga file sa usa ka han-ay sa mga scalars (@report_files);
- Sa usa ka loop, among giproseso ang usa ka file sa usa ka higayon ug gibasa kini linya sa linya;
- Gamit ang split, gibahin namo ang matag linya sa 5 ka bahin, gamit ang mga kinutlo isip separator;
- Nakakita mi og linya nga adunay pulong tigpaminaw ug nagbutang og data nga talagsaon alang sa matag file (AE client name ug TCP port number) ngadto sa duha ka variables;
- Pagkahuman niini, maghimo lang kami usa ka bag-ong XML file, isulud ang talagsaon nga mga parameter niini ug dayon isulud ang gikinahanglan nga gidaghanon sa mga server sa PACS sa ilang mga parameter - mga. kung unsa nagsugod ang tanan)
- Gisulat namo pag-usab ang bag-ong XML file sa ibabaw sa daan.
Kinahanglan nga matikdan nga sa tinuud, wala nako gigamit kini nga script sa hingpit nga awtomatiko - sa tinuud, gikopya nako ang mga nakolekta nga configs sa usa ka lahi nga direktoryo ug dayon gipadagan ang script ug gibag-o silang tanan. Sunod, usa ka random nga pagsusi - ug ang mga config mahimong ipanghatag balik sa mga makina.
Pag-apod-apod sa giusab nga pacs.xml nga mga file ngadto sa mga kliyente
Ang pinakasimple nga butang nga naa sa hunahuna mao ang paghimo og mga pagbag-o sa nagtrabaho na nga .bat file nga nagkolekta sa mga configuration gikan sa mga kliyente ug nagdugang sa linya:
If exist %APPDATA%RadiantViewerpacs.xml copy /Y srv.test.localpconfigsnew$pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%RadiantViewerpacs.xml
Ang kataposang .bat nga payl sama niini:
@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
konklusyon
Parang ganito na nga"tuhod"solusyon. Kaduha na namo gisulayan (sa September 2018 ug February 2019), so far normal ra ang flight. Siyempre, dili 100% sa mga kliyente ang nag-update, apan kini duol sa kini nga kantidad - gikompleto namon ang nahabilin sa layo. Iskrip ni
Source: www.habr.com