Ndryshimi i cilësimeve të programeve me ruajtjen e parametrave personalë

Historia e mëparshme

Në një organizatë mjekësore, janë zbatuar zgjidhje të bazuara në serverat PACS Orthanc dhe klientin DICOM Radiant. Gjatë konfigurimit u përcaktua se çdo klient DICOM duhet të përshkruhet në serverat PACS në këtë mënyrë:

  • Emri i klientit
  • Emri AE (duhet tĂ« jetĂ« unik)
  • Porti TCP, i cili hapet automatikisht nĂ« anĂ«n e klientit dhe merr ekzaminimet DICOM nga serveri PACS (dmth, serveri i 'dĂ«rgon' ato nĂ« drejtim tĂ« klientit – duke iniciuar lidhjen i pari)
  • Adresa IP

Pas konfigurimit tĂ« klientĂ«ve Radiant, morĂ«m informacionin e mĂ«poshtĂ«m pĂ«r reflektim – çdo klient, kur konfigurohej me parametrat e pĂ«rmendur mĂ« sipĂ«r, çonte nĂ« plotĂ«simin e skedarit pacs.xml, i cili ndodhej nĂ« profilin e pĂ«rdoruesit (rruga: %APPDATA%RadiantViewerpacs.xml). MegjithatĂ«, konfigurimi i njĂ« klienti ishte ndryshe nga tjetri me tĂ« paktĂ«n dy parametra (Emri AE ishte ndryshe pĂ«r tĂ« gjithĂ«, ndĂ«rsa porta kryesisht ishte e njĂ«jtĂ«, pĂ«rveç klientĂ«ve terminalĂ« qĂ« punonin nĂ« tĂ« njĂ«jtin server – atje portat gjithashtu duhej tĂ« caktuheshin ndryshe).

Shembulli i skedarit pacs.xml sipas linkun:

Pas rreth gjashtĂ« muajve, gjithçka shkoi mirĂ«, sistemi funksionoi
 dhe papritmas e kuptuam se kishte "pengesa tĂ« fshehura»:

  • Duhet tĂ« prezantojmĂ« disa servera tĂ« rinj PACS, tĂ« cilĂ«t do tĂ« zĂ«vendĂ«sojnĂ« tĂ« vjetrin (ku vendi nĂ« disqe po mbaronte). Serverat PACS nĂ« makina virtuale, por kjo nuk Ă«shtĂ« tema;
  • Na nevojitet tĂ« ndryshojmĂ« ndryshe konfigurimet unike (me dy parametra tĂ« ndryshĂ«m) nĂ« 200 makina (numri i tĂ« cilave rregullisht po rritej);
  • Duke marrĂ« parasysh ritmin e rritjes sĂ« volumeve tĂ« ekzaminimeve, zgjidhja duhet tĂ« jetĂ« jo njĂ« herĂ«, por e ripĂ«rsĂ«ritur dhe e rregullt (p.sh., 1 herĂ« nĂ« 3-5 muaj).

Zgjidhja më poshtë.

Zgjedhja e veglave për zgjidhjen e problemit

NĂ« fillim, ishin pĂ«rpjekje pĂ«r tĂ« gjetur ndonjĂ« zgjidhje qĂ« nĂ« anĂ«n e klientit do tĂ« ndryshonte skedarin pacs.xml dhe do tĂ« bĂ«nte ndryshime nĂ« listĂ«n e serverĂ«ve PACS, pa prekur konfigurimet e emrit AE dhe portit TCP. KlientĂ«t e Windows nĂ« atĂ« kohĂ« ishin nĂ« bazĂ« tĂ« Windows XP si dhe Windows 7 – prandaj ishin pĂ«rpjekje pĂ«r tĂ« shkruar diçka tĂ« tillĂ« nĂ« bazĂ« tĂ« VBScript. Por fatkeqĂ«sisht – nuk arritĂ«m tĂ« pĂ«rballonim njĂ« detyrĂ« tĂ« tillĂ«, pĂ«r shkak tĂ« mungesĂ«s totale tĂ« eksperiencĂ«s nĂ« shkruarjen e ndonjĂ« gjĂ«je komplekse dhe tĂ« sofistikuar nĂ« kĂ«tĂ« gjuhĂ«. PĂ«rpjekjet pĂ«r tĂ« gjetur dhe riprogramuar gjithashtu nuk kishin sukses (duhet tĂ« theksohet se nĂ« mendje kishte njĂ« plan tjetĂ«r, pĂ«r kĂ«tĂ« arsye nuk vazhdova mĂ« shumĂ« se 3-4 orĂ« me VBScript).

Si përfundim, u ndala në zgjidhjen e mëposhtme:

  • Mbledhni tĂ« gjitha skedarĂ«t pacs.xml nĂ« njĂ« vend tĂ« caktuar nĂ« ndonjĂ« server nĂ« burimin e rrjetit;
  • Ndryshoni skedarĂ«t masivisht (ka pasur pĂ«rvojĂ« nĂ« zgjidhjen e kĂ«tij problemi - duke pĂ«rdorur Perl);
  • Gjithashtu me ndihmĂ«n e politikave grupore pĂ«rmirĂ«soni cilĂ«simet e klientĂ«ve.

Koleksionimi i skedarëve me anë të politikës grupore

Pjesa më e thjeshtë - kur klienti hyn në profilin e tij me të drejtat e tij ai ekzekuton një skedar .bat, në të cilin është shkruar:

echo off
Nëse ekziston %APPDATA%RadiantViewerpacs.xml kopjoni %APPDATA%RadiantViewerpacs.xml srv.test.localpconfigs$pacs-%COMPUTERNAME%-%USERNAME%.xml

Kështu, në serverin në burimin e fshehtë do të grumbullohen skedarët pacs.xml, në emrin e të cilëve do të ketë informacion se nga cili kompjuter dhe nga cili përdorues është kopjuar ky konfig.

Pjesa më e vështirë ishte - të prisni që kjo politikë të zbatohet për të gjithë përdoruesit.

Ndryshimi i konfigurations me anë të skriptit Perl

Na nevojitet Active Perl për Windows nga kompania ActiveState, si dhe moduli XML::Writer, i cili mund të instalohet me komandën ppm install XML-Writer.

Skripti vetë doli mjaft i thjeshtë:

use XML::Writer;
 
# Hapni dosjen me raportet, procesoni listën (hiqni të tepërt):
	$report_dir = "C:Perl64WORKPACS-xml3";
	opendir(DIR, "$report_dir") or die "Nuk mund të hap dosjen me raportet!";
	@report_files = readdir DIR;
	shift (@report_files); # hiqni pikën nga elementet e masës (.)
	shift (@report_files); # hiqni dy pikat nga elementet e masës (..)
#	print "@report_files";
	closedir(DIR);
 
# Filloni të përpunoni skedarët - një nga një. Duhet të lexoni parametrin AET dhe numrin e portit në variablat.
foreach $analiz_file (@report_files) 
{
	$full_path_to_file="C:Perl64WORKPACS-xml3".$analiz_file;
	open (INFO, $full_path_to_file);
 
	while ($line = )
	{
		# Variablat $aet dhe $port përmbajnë të dhëna unike për çdo skedar XML:
		my ($other1, $aet, $other2, $port, $other3) = split /"/, $line, 5;
		# Nëse hasim rreshtin listener - atëherë kemi arritur në rreshtin e duhur dhe mund të formojmë një XML të ri:
		if ($other1 =~ 'listener')
			{
				# Formojmë XML të ri me fushat dhe të dhënat e nevojshme:
				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');
 
				# Vendosim XML të përfunduar në variablen:
				my $xml = $writer->end();
				# Përgatitim skedarin për rishkrim:
				$rewritexml = $full_path_to_file;
				# Rishkruajmë skedarët XML me të dhëna të reja:
				open (NEWXML, "> $rewritexml");
				print NEWXML $xml;
				close (NEWXML);				
			}
	}
 
}

Parimi i funksionimit të tij:

  • Hapim katalogun nĂ« tĂ« cilin kemi mbledhur konfigurimet pacs.xml nga klientĂ«t dhe e vendosim listĂ«n e skedarĂ«ve nĂ« njĂ« varg skalar (@report_files);
  • NĂ« njĂ« cikĂ«l procesojmĂ« njĂ« skedar tĂ« vetĂ«m dhe e lexojmĂ« atĂ« rresht pas rreshti;
  • Me ndihmĂ«n e split e ndajmĂ« çdo rresht nĂ« 5 pjesĂ«, duke pĂ«rdorur thonjĂ«za si ndarĂ«s;
  • GjejmĂ« rreshtin me fjalĂ«n listener dhe e vendosim nĂ« dy variabla tĂ« veçantĂ« pĂ«r çdo skedar tĂ« dhĂ«nat unike (emri i klientit AE dhe numri i portĂ«s TCP);
  • Pas kĂ«saj thjesht formojmĂ« njĂ« skedar tĂ« ri XML, e shkruajmĂ« nĂ« tĂ« parametrat unike dhe mĂ« pas vendosim numrin e nevojshĂ«m tĂ« serverĂ«ve PACS me parametrat e tyre - dmth, ajo pĂ«r tĂ« cilĂ«n u bĂ« krejt kjo)
  • RishkruajmĂ« skedarin e ri XML mbi atĂ« tĂ« vjetĂ«r.

Duhet theksuar se në të vërtetë unë e përdor këtë skenar jo plotësisht automatikisht - në thelb unë kopjoj konfigurimet e mbledhura në një katalog të veçantë dhe pastaj, duke e nisur skenarin, i ndryshoj ato të gjithë së bashku. Më tej kontrolli selektiv - dhe konfigurimet mund të shpërndahen përsëri në makina.

Shpërndarja e skedarëve të ndryshuar pacs.xml te klientët

Më e thjeshta që më erdhi në mendje - të bëj ndryshime në skedarin ekzistues .bat, i cili mbledh konfigurimet nga klientët dhe të shtoj këtë rresht:

Nëse ekziston %APPDATA%RadiantViewerpacs.xml kopjo /Y srv.test.localpconfigsnew$pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%RadiantViewerpacs.xml

Skedari përfundimtar .bat duket kështu:

@echo off
Nëse ekziston %APPDATA%RadiantViewerpacs.xml kopjo %APPDATA%RadiantViewerpacs.xml srv.test.localpconfigs$pacs-%COMPUTERNAME%-%USERNAME%.xml
Nëse ekziston %APPDATA%RadiantViewerpacs.xml kopjo /Y srv.test.localpconfigsnew$pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%RadiantViewerpacs.xml

Përfundim

Kjo Ă«shtĂ« „zgjidhja e ‘ndĂ«rmjetme’MĂ« shumĂ« se dy herĂ« (nĂ« shtator 2018 dhe nĂ« shkurt 2019), deri tani funksionon normalisht. Sigurisht qĂ« nuk pĂ«rditĂ«son tĂ« gjithĂ« klientĂ«t 100%, por afĂ«r kĂ«saj vlerĂ«s - tĂ« tjerĂ«t i pĂ«rfundojmĂ« nĂ« distancĂ«. Skripti nga linkun.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster