prasejarah
Siji organisasi medis ngetrapake solusi adhedhasar server Orthanc PACS lan klien Radiant DICOM. Sajrone persiyapan, kita nemokake manawa saben klien DICOM kudu diterangake ing server PACS kaya ing ngisor iki:
- Jeneng klien
- Jeneng AE (kudu unik)
- Port TCP sing otomatis mbukak ing sisih klien lan nampa survey DICOM saka server PACS (yaiku, server nyurung menyang klien - miwiti sambungan dhisik)
- Alamat IP
Sawise nyiyapake Radiant, klien nampa panganan ing ngisor iki kanggo dipikirake: kanggo saben klien, nyetel piranti lunak kanthi paramèter ing ndhuwur nyebabake file diisi. pacs.xml, sing ana ing profil pangguna (path: %APPDATA%RadiantViewerpacs.xml). Ing wektu sing padha, konfigurasi saka siji klien beda-beda saka liyane ing paling ora rong paramèter (jeneng AE beda kanggo saben wong, lan port iku Sejatine padha, kajaba kanggo klien terminal mlaku ing server padha - ana uga port. ditugasake beda).
Conto file pacs.xml dening
Kira-kira nem sasi kabeh apik, sistem kasebut wiwit kerja ...jero banyu watu"
- We kudu sijine menyang operasi sawetara PACS server anyar sing bakal ngganti lawas (ngendi papan disk wis wiwit entek). server PACS ing mesin virtual, nanging ora apa kita ngomong bab;
- We kudu piye wae tengah ngganti konfigurasi unik (karo loro paramèter beda) ing 200 mesin (jumlah sing ajeg nambah);
- Ngelingi tingkat pertumbuhan volume survey, solusi dibutuhake ora mung sepisan, nanging ditiru lan rutin (contone, saben 1-3 wulan).
Milih alat kanggo ngatasi masalah
Kaping pisanan, ana upaya kanggo nemokake sawetara solusi sing bakal ngowahi file pacs.xml ing sisih klien lan nggawe owahan ing dhaptar server PACS tanpa mengaruhi jeneng AE lan setelan port TCP. Klien Windows nalika iku adhedhasar Windows XP lan Windows 7 - mula ana upaya kanggo nulis kaya iki adhedhasar VBScript. Nanging sayangΓ©, ora bisa nguwasani tugas kasebut, amarga kurang pengalaman nulis apa wae sing rumit lan rumit ing basa iki. Nyoba kanggo nemokake lan nulis ulang uga ora kasil (kudu dicathet yen aku wis duwe rencana sing beda ing sirahku, mula aku ora main VBScript luwih saka 3-4 jam).
Ing pungkasan, aku mutusake solusi ing ngisor iki:
- Nggunakake kabijakan grup, kumpulake kabeh file pacs.xml ing sak panggonan ing server apa wae ing sumber jaringan;
- Ngganti file kanthi massal (Aku wis duwe pengalaman kanggo ngrampungake masalah kasebut nggunakake Perl);
- Uga gunakake kabijakan grup kanggo nganyari setelan klien.
Nglumpukake file nggunakake Kebijakan Grup
Sisih paling gampang yaiku nalika klien mlebu ing profil, dheweke, kanthi hak-hak, nglakokake file .bat tartamtu, sing ujar:
echo off
If exist %APPDATA%RadiantViewerpacs.xml copy %APPDATA%RadiantViewerpacs.xml srv.test.localpconfigs$pacs-%COMPUTERNAME%-%USERNAME%.xml
Mangkono, file pacs.xml bakal nglumpukake ing server ing sumber sing didhelikake, jeneng sing ngemot informasi saka komputer lan saka pangguna sing disalin konfigurasi iki.
Sing paling angel yaiku ngenteni nganti kabijakan iki bisa digunakake kanggo kabeh pangguna.
Ngganti konfigurasi nggunakake skrip Perl
Kita butuh
Skrip dhewe ternyata cukup prasaja:
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);
}
}
}
Prinsip operasi sawijining:
- Kita mbukak direktori sing wis diklumpukake konfigurasi pacs.xml saka klien lan nyelehake dhaptar file ing array skalar (@report_files);
- Ing daur ulang, kita ngolah file siji-sijine lan maca baris kanthi baris;
- Nggunakake pamisah, kita dibagi saben baris dadi 5 bagean, nggunakake kuotasi minangka pamisah;
- Kita nemokake baris karo tembung pamireng lan panggonan data unik kanggo saben file (AE jeneng klien lan nomer port TCP) dadi rong variabel;
- Sawise iki, kita mung nggawe file XML anyar, ketik paramèter unik banjur lebokake nomer server PACS sing dibutuhake karo paramèter - sing. apa iku kabeh diwiwiti kanggo)
- Kita nulis ulang file XML anyar ing ndhuwur sing lawas.
Sampeyan kudu nyatet sing ing kasunyatan, aku ora nggunakake script iki rampung kanthi otomatis - nyatane, Aku nyalin configs diklumpukake menyang direktori kapisah lan banjur mbukak script lan ngganti kabeh en masse. Sabanjure, mriksa acak - lan configs bisa mbagekke bali menyang mesin.
Nyebarake file pacs.xml sing diowahi menyang klien
Wangsulan: Bab ingkang paling gampang teka ing atine iku kanggo nggawe owah-owahan ing file .bat wis digunakake sing ngumpulake konfigurasi saka klien lan nambah baris:
If exist %APPDATA%RadiantViewerpacs.xml copy /Y srv.test.localpconfigsnew$pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%RadiantViewerpacs.xml
File .bat pungkasan katon kaya iki:
@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
kesimpulan
Kayane iki"dhengkul" solusi. Kita wis nyoba kaping pindho (ing September 2018 lan Februari 2019), nganti saiki penerbangan kasebut normal. Mesthine, ora 100% nganyari klien, nanging cedhak karo nilai iki - kita ngrampungake liyane saka jarak jauh. Skrip dening
Source: www.habr.com