Kusintha makonda a pulogalamu ndikusunga magawo anu

prehistory

Bungwe lina lachipatala lidakhazikitsa mayankho kutengera ma seva a Orthanc PACS ndi kasitomala wa Radiant DICOM. Pakukhazikitsa, tidapeza kuti kasitomala aliyense wa DICOM ayenera kufotokozedwa mu ma seva a PACS motere:

  • Dzina la kasitomala
  • Dzina la AE (liyenera kukhala lapadera)
  • Doko la TCP lomwe limangotseguka pambali ya kasitomala ndikulandila kafukufuku wa DICOM kuchokera pa seva ya PACS (mwachitsanzo, seva imakankhira kwa kasitomala - kuyambitsa kulumikizana koyamba)
  • Adilesi ya IP

Pambuyo kukhazikitsa Radiant, makasitomala adalandira chakudya chotsatirachi: kwa kasitomala aliyense, kukhazikitsa pulogalamuyo ndi magawo omwe ali pamwambawa kumapangitsa kuti fayiloyo idzaze. pacs.xml, yomwe inali mu mbiri ya ogwiritsa ntchito (njira: %APPDATA%RadiantViewerpacs.xml). Nthawi yomweyo, kasinthidwe ka kasitomala m'modzi amasiyana ndi wina m'magawo awiri (dzina la AE ndi losiyana kwa aliyense, ndipo doko ndilofanana, kupatula makasitomala omwe akuyenda pa seva yomweyo - pamenepo madoko nawonso anali nawo. kupatsidwa zosiyana).

Chitsanzo pacs.xml wapamwamba ndi kugwirizana:

Pafupifupi miyezi isanu ndi umodzi zonse zinali bwino, dongosololi linayamba kugwira ntchito ...pansi pa madzi miyalaΒ»:

  • Tiyenera kukhazikitsa maseva angapo atsopano a PACS omwe adzalowe m'malo akale (pomwe malo a disk ayamba kutha). Ma seva a PACS mu makina enieni, koma sizomwe tikukamba;
  • Tiyenera mwanjira ina kusintha masinthidwe apadera (ndi magawo awiri osiyana) pamakina 200 (chiwerengero chawo chikuwonjezeka nthawi zonse);
  • Poganizira kuchuluka kwa kuchuluka kwa kafukufukuyu, yankho limafunikira osati kamodzi kokha, koma kubwerezabwereza komanso pafupipafupi (mwachitsanzo, kamodzi pa miyezi 1-3).

Yankho lili pansipa.

Kusankha zida zothetsera vuto

Poyamba, panali kuyesa kupeza yankho lomwe lingasinthe fayilo ya pacs.xml kumbali ya kasitomala ndikusintha mndandanda wa maseva a PACS popanda kukhudza dzina la AE ndi zoikamo za doko la TCP. Makasitomala a Windows panthawiyo anali okhazikika pa Windows XP ndi Windows 7 - kotero panali kuyesa kulemba chonga ichi kutengera VBScript. Koma tsoka, sikunali kotheka kudziwa bwino ntchito yotereyi, chifukwa chosowa chidziwitso cholemba chilichonse chovuta komanso chovuta m'chinenerochi. Kuyesera kuti ndipeze ndi kulembanso sikunapambane (ziyenera kuzindikirika kuti ndinali ndi dongosolo losiyana m'mutu mwanga, kotero sindinagwirizane ndi VBScript kwa maola oposa 3-4).

Pamapeto pake ndinakhazikika pa yankho ili:

  • Pogwiritsa ntchito mfundo zamagulu, sonkhanitsani mafayilo onse a pacs.xml pamalo amodzi pa seva iliyonse pamanetiweki;
  • Sinthani mafayilo ambiri (ndinali ndi chidziwitso kale pakuthana ndi mavutowa pogwiritsa ntchito Perl);
  • Gwiritsaninso ntchito mfundo zamagulu kuti musinthe makonda a kasitomala.

Kusonkhanitsa mafayilo pogwiritsa ntchito Group Policy

Chosavuta kwambiri ndi chakuti kasitomala akalowa mu mbiri yake, iye, ndi ufulu wake, amatulutsa fayilo inayake ya .bat, yomwe imati:

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

Chifukwa chake, mafayilo a pacs.xml adziunjikira pa seva muzinthu zobisika, dzina lomwe lili ndi chidziwitso kuchokera pakompyuta komanso kwa yemwe adakopera kasinthidwe kameneka.

Chinthu chovuta kwambiri chinali kudikirira mpaka ndondomekoyi igwire ntchito kwa onse ogwiritsa ntchito.

Kusintha masinthidwe pogwiritsa ntchito Perl script

Tidzafunika Active Perl kwa Windows kuchokera ku ActiveState, komanso XML ::Writer module, yomwe ikhoza kukhazikitsidwa pogwiritsa ntchito lamulo. ppm kukhazikitsa XML-Writer.

Script yokha idakhala yosavuta:

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

Mfundo ya ntchito yake:

  • Timatsegula chikwatu momwe tasonkhanitsira zosintha za pacs.xml kuchokera kwa makasitomala ndikuyika mndandanda wamafayilo mumagulu a scalar (@report_files);
  • Mu lupu, timakonza fayilo imodzi panthawi ndikuwerenga mzere ndi mzere;
  • Pogwiritsa ntchito kugawanika, timagawa mzere uliwonse kukhala magawo 5, pogwiritsa ntchito mawu ngati olekanitsa;
  • Timapeza mzere wokhala ndi mawu omvera ndikuyika deta yapadera pa fayilo iliyonse (dzina la kasitomala wa AE ndi nambala ya doko la TCP) mumitundu iwiri;
  • Pambuyo pake, timangopanga fayilo yatsopano ya XML, kulowetsamo magawo apadera ndikuyika nambala yofunikira ya ma seva a PACS ndi magawo awo - izo. zomwe zidayambira)
  • Timalembanso fayilo yatsopano ya XML pamwamba pa yakaleyo.

Zindikirani kuti kwenikweni, sindimagwiritsa ntchito script izi zokha - kwenikweni, ndimakopera ma configs omwe anasonkhanitsidwa mu bukhu lapadera ndikuyendetsa script ndikusintha zonse. Kenako, cheke mwachisawawa - ndi ma configs akhoza kugawidwa m'makina.

Kugawa mafayilo osinthidwa a pacs.xml kwa makasitomala

Chinthu chosavuta chomwe chinabwera m'maganizo chinali kusintha fayilo ya .bat yomwe ikugwira ntchito kale yomwe imasonkhanitsa zosintha kuchokera kwa makasitomala ndikuwonjezera mzere:

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

Fayilo yomaliza ya .bat ikuwoneka motere:

@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

Pomaliza

Zili ngati izi"bondo"yankho. Tayesera kale kawiri (mu Seputembala 2018 ndi February 2019), mpaka pano ndegeyo ndiyabwinobwino. Zachidziwikire, osati 100% yamakasitomala osintha, koma ili pafupi ndi mtengo uwu - timamaliza zina zonse patali. Script ndi kugwirizana.

Source: www.habr.com

Kuwonjezera ndemanga