Guhertina mîhengên bernameyê dema ku pîvanên kesane tomar dike

pêşdîrok

Yek rêxistinek bijîjkî çareseriyên li ser bingeha serverên Orthanc PACS û xerîdar DICOM Radiant bicîh kir. Di dema sazkirinê de, me fêhm kir ku divê her xerîdar DICOM di serverên PACS de wiha were vegotin:

  • Navê xerîdar
  • Navê AE (divê yekta be)
  • Portek TCP ku bixweber li ser milê xerîdar vedibe û anketên DICOM ji servera PACS distîne (ango, server wan ber bi xerîdar ve dikişîne - pêşî pêwendiyê dide destpêkirin)
  • Navnîşana IP

Piştî sazkirina Radiant, xerîdar ji bo ramanê xwarina jêrîn wergirtin: ji bo her xerîdar, sazkirina nermalavê bi pîvanên jorîn di encamê de pel hate dagirtin. pacs.xml, ku di profîla bikarhêner de cih girtibû (rê: %APPDATA%RadiantViewerpacs.xml). Di heman demê de, veavakirina yek xerîdar bi kêmî ve di du parameteran de ji ya din cûda bû (navê AE ji bo her kesî cûda ye, û port di bingeh de yek e, ji bilî xerîdarên termînalê ku li ser heman serverê dixebitin - li wir portan jî hebûn ji bo cuda bên destnîşankirin).

Mînak pelê pacs.xml ji hêla link:

Nêzîkî şeş mehan her tişt baş bû, pergalê dest bi xebatê kir ... û dûv re ew hat ba me "binav keviran»:

  • Pêdivî ye ku em çend serverên PACS-ê yên nû bixebitînin ku dê li şûna yên kevin (li cihê ku cîhê dîskê dest pê kiriye) bixebitin. Pêşkêşkerên PACS di makîneyên virtual de, lê ya ku em li ser dipeyivin ne ev e;
  • Pêdivî ye ku em bi rengek navendî li ser 200 makîneyan mîhengên bêhempa (bi du pîvanên cihêreng) biguhezînin (hejmara wan bi rêkûpêk zêde dibû);
  • Bi berçavgirtina rêjeya mezinbûna cildên anketê, çareseriyek ne tenê carekê, lê dubare û bi rêkûpêk (mînak, her 1-3 mehan carekê) hewce ye.

Çareserî li jêr e.

Hilbijartina amûran ji bo çareserkirina pirsgirêkê

Di destpêkê de, hewildan hebûn ku hin çareseriyek bibînin ku pelê pacs.xml li milê xerîdar biguhezîne û di navnîşa pêşkêşkerên PACS de guhertinan çêbike bêyî ku bandorê li ser navê AE û mîhengên porta TCP bike. Xerîdarên Windows-ê di wê demê de hem li ser Windows XP û hem jî Windows 7-ê bûn - ji ber vê yekê hewildan hebûn ku li ser bingeha VBScript tiştek wusa binivîsin. Lê mixabin, ji ber nebûna tecrubeya tam di nivîsandina tiştekî tevlihev û tevlihev bi vî zimanî, ne mimkûn bû ku karekî weha bidest bixe. Hewldanên dîtin û ji nû ve nivîsandinê jî neserketî bûn (divê were zanîn ku min berê di serê min de plansaziyek cûda hebû, ji ber vê yekê min ji 3-4 demjimêran zêdetir bi VBScript re negot).

Di dawiyê de ez li ser çareseriya jêrîn rûniştim:

  • Bi karanîna polîtîkaya komê, hemî pelên pacs.xml li yek cîhek li ser her serverek di çavkaniyek torê de kom bikin;
  • Pelan bi girseyî biguhezînin (ez jixwe di çareserkirina pirsgirêkên weha de bi karanîna Perl re ezmûnek min hebû);
  • Di heman demê de polîtîkayên komê bikar bînin ku mîhengên xerîdar nûve bikin.

Komkirina pelan bi karanîna Polîtîkaya Komê

Beşa herî hêsan ev e ku dema ku xerîdar têkeve profîla xwe, ew bi mafên xwe, pelek .bat-ê diyar dike, ku dibêje:

echo off
If exist %APPDATA%RadiantViewerpacs.xml copy %APPDATA%RadiantViewerpacs.xml srv.test.localpconfigs$pacs-%COMPUTERNAME%-%USERNAME%.xml

Ji ber vê yekê, pelên pacs.xml dê li ser serverê di çavkaniyek veşartî de kom bibin, navê wê agahdariya ji kîjan komputerê û ji kîjan bikarhênerê ev veavakirin hatiye kopî kirin.

Ya herî dijwar ew bû ku li bendê bimîne heya ku ev siyaset ji bo hemî bikarhêneran bixebite.

Guhertina mîhengan bi karanîna tîpek Perl

Em ê hewce bikin Active Perl ji bo Windows-ê ji ActiveState, û her weha modula XML::Writer, ku dikare bi karanîna fermanê were saz kirin ppm XML-Nivîskar saz bike.

Skrîpta xwe pir hêsan derket holê:

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);				
			}
	}
 
}

Prensîba xebata wê:

  • Em pelrêça ku me veavakirinên pacs.xml ji xerîdaran tê de berhev kirine vedikin û navnîşa pelan di rêzek scalars de cîh dikin (@report_files);
  • Di pêlekê de, em yek pelê di demekê de pêvajoyê dikin û rêz bi rêz dixwînin;
  • Bi karanîna dabeşkirinê, em her rêzek li 5 beşan vediqetînin, wekî veqetandek binavkan bikar tînin;
  • Em rêzek bi peyva listener re dibînin û daneyên yekta ji bo her pelê (navê xerîdar AE û jimareya porta TCP) di du guherbaran de cîh dikin;
  • Piştî vê yekê, em tenê pelek XML-ya nû çêdikin, pîvanên yekta têxin nav wê û dûv re hejmareka hewce ya pêşkêşkerên PACS bi parametreyên wan têxin nav xwe - ewan. ji bo çi dest pê kir)
  • Em pelê XML-a nû li ser ya kevin ji nû ve dinivîsin.

Pêdivî ye ku were zanîn ku bi rastî, ez vê nivîsarê bi tevahî bixweber bikar naynim - bi rastî, ez konfigurasyonên berhevkirî li pelrêçek cûda kopî dikim û dûv re skrîptê dimeşînim û wan hemî bi girseyî diguhezim. Dûv re, kontrolek bêserûber - û vesazkirin dikarin dîsa li makîneyan bêne belav kirin.

Belavkirina pelên pacs.xml guhertî li ser xerîdaran

Tişta herî hêsan a ku hate hişê xwe ev bû ku meriv di pelê .bat-a ku berê dixebitî de ku mîhengan ji xerîdaran berhev dike û rêzê lê zêde bike, guhertin çêbike:

If exist %APPDATA%RadiantViewerpacs.xml copy /Y srv.test.localpconfigsnew$pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%RadiantViewerpacs.xml

Pelê dawîn .bat wiha xuya dike:

@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

encamê

Wisa ye"çog"çareseriyê. Me berê du caran ew ceriband (di îlona 2018 û sibata 2019 de), heya nuha firîn normal e. Bê guman, ne 100% ji xerîdaran nûve dikin, lê ew nêzî vê nirxê ye - em yên mayî ji dûr ve temam dikin. Skrîpt ji hêla link.

Source: www.habr.com

Add a comment