د شخصي پیرامیټونو خوندي کولو پرمهال د برنامې تنظیماتو بدلول

له تاریخ څخه دمخه

یو طبي سازمان د Orthanc PACS سرورونو او Radiant DICOM پیرودونکي پراساس حلونه پلي کړي. د تنظیم کولو په جریان کې، موږ وموندله چې هر DICOM مراجع باید د PACS سرورونو کې په لاندې ډول تشریح شي:

  • د پیرودونکي نوم
  • د AE نوم (باید ځانګړی وي)
  • د TCP پورټ چې په اتوماتيک ډول د پیرودونکي اړخ ته خلاصیږي او د PACS سرور څخه د DICOM سروې ترلاسه کوي (د مثال په توګه ، سرور دوی د پیرودونکي په لور فشار راوړي - لومړی اړیکه پیل کوي)
  • IP پته

د ریډینټ تنظیم کولو وروسته ، پیرودونکو د فکر لپاره لاندې خواړه ترلاسه کړل: د هر پیرودونکي لپاره ، د پورتنیو پیرامیټونو سره سافټویر تنظیم کول په پایله کې فایل ډک شو pacs.xml، کوم چې د کارن پروفایل کې موقعیت درلود (لار: %APPDATA%RadiantViewerpacs.xml). په ورته وخت کې ، د یو پیرودونکي ترتیب لږترلږه په دوه پیرامیټونو کې له بل څخه توپیر لري (د AE نوم د هرچا لپاره توپیر لري ، او پورټ اساسا ورته دی ، پرته لدې چې په ورته سرور کې د ټرمینل مراجعینو پرمخ ځي - هلته بندرونه هم درلودل. په جلا توګه وګمارل شي).

د مثال په توګه pacs.xml فایل مخونه:

د شپږو میاشتو لپاره هرڅه سم وو، سیسټم په کار پیل وکړ ... او بیا موږ ته راغلل "د اوبو لاندې کارمین»:

  • موږ اړتیا لرو څو نوي PACS سرورونه په کار واچوو چې زاړه یې ځای په ځای کړي (چیرې چې د ډیسک ځای په ختمیدو پیل شوی وي). په مجازی ماشینونو کې د PACS سرورونه، مګر دا هغه څه ندي چې موږ یې په اړه خبرې کوو؛
  • موږ اړتیا لرو چې په مرکزي توګه په 200 ماشینونو کې ځانګړي ترتیبونه (د دوه مختلف پیرامیټونو سره) بدل کړو (د دوی شمیر په منظم ډول مخ په ډیریدو و)؛
  • د سروې د حجمونو د ودې کچه په پام کې نیولو سره، یو حل ته اړتیا ده چې نه یوازې یو ځل، بلکې په منظمه توګه تکرار شي (د مثال په توګه، په هرو 1-3 میاشتو کې یو ځل).

د حل لاره لاندې ده.

د ستونزې د حل لپاره د وسایلو غوره کول

په لومړي سر کې، د ځینې حل موندلو هڅې وې چې د پیرودونکي اړخ کې د pacs.xml فایل بدل کړي او د AE نوم او TCP پورټ ترتیباتو اغیزه کولو پرته د PACS سرورونو لیست کې بدلون راولي. په هغه وخت کې د وینډوز مراجعین د وینډوز ایکس پی او وینډوز 7 په اساس وو - نو د VBScript پر بنسټ د دې په څیر یو څه لیکلو هڅې وې. خو افسوس چې په دې ژبه کې د هر څه پیچلي او پیچلي لیکلو د تجربې د نشتوالي له امله په داسې یوه دنده کې مهارت نه درلود. د موندلو او بیا لیکلو هڅې هم ناکامې وې (دا باید په یاد ولرئ چې ما دمخه په خپل سر کې یو بل پلان درلود ، نو ما د VBScript سره د 3-4 ساعتونو څخه ډیر وخت نه دی تیر کړی).

په پای کې ما په لاندې حل حل کړ:

  • د ګروپ پالیسي په کارولو سره، ټولې pacs.xml فایلونه د شبکې سرچینې کې په هر سرور کې په یو ځای کې راټول کړئ؛
  • فایلونه په ډله ایز ډول بدل کړئ (ما دمخه د پرل په کارولو سره د ورته ستونزو حل کولو کې تجربه درلوده)؛
  • د پیرودونکي تنظیماتو تازه کولو لپاره د ګروپ تګلارې هم وکاروئ.

د ګروپ پالیسي په کارولو سره د فایلونو راټولول

ترټولو ساده برخه دا ده چې کله یو پیرودونکی خپل پروفایل ته ننوځي، هغه د خپلو حقونو سره، یو ټاکلی .bat فایل اجرا کوي، کوم چې وايي:

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

په دې توګه، د pacs.xml فایلونه به په سرور کې په پټه زیرمه کې راټول شي، د کوم نوم چې دا معلومات لري د کوم کمپیوټر او کوم کاروونکي څخه دا ترتیب کاپي شوی.

ترټولو ستونزمن کار دا و چې انتظار وکړئ تر هغه چې دا پالیسي د ټولو کاروونکو لپاره کار وکړي.

د پرل سکریپټ په کارولو سره د تشکیلاتو بدلول

موږ به اړتیا ولرو فعال پرل د وینډوز لپاره د ActiveState څخه، او همدارنګه د XML:: رائټر ماډل، کوم چې د کمانډ په کارولو سره نصب کیدی شي ppm د XML-Writer نصب کړئ.

سکریپټ پخپله خورا ساده وګرځید:

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

د عملیاتو اصول:

  • موږ هغه ډایرکټر پرانیزو چې په هغه کې مو د پیرودونکو څخه pacs.xml ترتیبونه راټول کړي او د فایلونو لیست د سکالرونو په لړۍ کې ځای په ځای کوو (@report_files)؛
  • په یوه لوپ کې، موږ په یو وخت کې یوه فایل پروسس کوو او په لیکه کې یې لوستل؛
  • د ویشلو په کارولو سره، موږ هره کرښه په 5 برخو ویشو، د جلا کونکي په توګه د نرخونو په کارولو سره؛
  • موږ د اوریدونکي کلمې سره کرښه پیدا کوو او د هرې فایل لپاره ځانګړي ډیټا ځای په ځای کوو (د AE پیرودونکي نوم او د TCP پورټ شمیره) په دوه متغیرونو کې؛
  • له دې وروسته، موږ په ساده ډول یو نوی XML فایل جوړوو، ځانګړي پیرامیټونه په کې دننه کړئ او بیا د PACS سرورونو اړین شمیر د دوی پیرامیټونو سره داخل کړئ - هغه. دا ټول د څه لپاره پیل شوي)
  • موږ د نوي XML فایل د زاړه په سر کې بیا لیکو.

دا باید په یاد ولرئ چې په حقیقت کې، زه دا سکریپټ په بشپړ ډول په اتوماتيک ډول نه کاروم - په حقیقت کې، زه راټول شوي ترتیبونه په جلا لارښود کې کاپي کړم او بیا سکریپټ چلوم او ټول یې په ډله ایز ډول بدل کړم. بیا ، یو تصادفي چیک - او تشکیلات بیرته ماشینونو ته توزیع کیدی شي.

مراجعینو ته د تعدیل شوي pacs.xml فایلونو ویشل

ترټولو ساده شی چې ذهن ته راغلی دا و چې دمخه کار کولو .bat فایل کې بدلونونه رامینځته کړئ چې د پیرودونکو څخه تشکیلات راټولوي او لاین اضافه کوي:

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

وروستی .bat فایل داسې ښکاري:

@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

پایلې

دا داسې ده "زنګون"حل. موږ دمخه دا دوه ځله هڅه کړې (په سپتمبر 2018 او فبروري 2019 کې) ، تر دې دمه الوتنه نورمال ده. البته، د پیرودونکو 100٪ تازه نه دي، مګر دا دې ارزښت ته نږدې دی - موږ پاتې نور په لیرې توګه بشپړ کوو. لخوا سکریپټ مخونه.

سرچینه: www.habr.com

Add a comment