Nibdlu l-issettjar tal-programm filwaqt li jiġu salvati l-parametri personali

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 rabta:

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).

Is-soluzzjoni hija hawn taħt.

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 Perl Attiv għall-Windows minn ActiveState, kif ukoll il-modulu XML::Writer, li jista 'jiġi installat bl-użu tal-kmand ppm jinstalla XML-Writer.

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 rabta.

Sors: www.habr.com

Żid kumment