له تاریخ څخه دمخه
یو طبي سازمان د 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 فایلونه به په سرور کې په پټه زیرمه کې راټول شي، د کوم نوم چې دا معلومات لري د کوم کمپیوټر او کوم کاروونکي څخه دا ترتیب کاپي شوی.
ترټولو ستونزمن کار دا و چې انتظار وکړئ تر هغه چې دا پالیسي د ټولو کاروونکو لپاره کار وکړي.
د پرل سکریپټ په کارولو سره د تشکیلاتو بدلول
موږ به اړتیا ولرو
سکریپټ پخپله خورا ساده وګرځید:
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