HLCSLM ;SFCIOFO/AC - HL7 LINK MANAGER ;06/14/2005 10:29 ;;1.6;HEALTH LEVEL SEVEN;**49,57,109,123**;Oct 13, 1995 ; EN ;Entry point for start up task N %,HLEVLCHK,HLTSKCNT F %=1:1:10 L +^HLCS("HLCSLM"):2 Q:$T E Q I $G(ZTQUEUED) S Y=$$PSET^%ZTLOAD(ZTQUEUED) D INIT,SAVDOLRH D SETNM^%ZOSV($E("HLmgr:"_$G(ZTQUEUED),1,15)) ; LOOP ; D CHKQUE I $$CKLMSTOP G EXIT D SAVDOLRH D CHECKMST^HLEVMST ;HL*1.6*109 - Make sure event monitor current H 10 G LOOP ; EXIT N HLJ,X S X=1 F L +^HLCS(869.3,X,5):2 Q:$T ;52=Link Manager task number S HLJ(869.3,X_",",52)="@" D FILE^HLDIE("","HLJ","","EXIT","HLCSLM") ;HL*1.6*109 L -^HLCS(869.3,X,5) L -^HLCS("HLCSLM") Q ; SAVDOLRH ;Save Last Known $H N HLJ,X S X=1 F L +^HLCS(869.3,X,5):2 Q:$T ;54=LM LAST KNOWN $H S HLJ(869.3,X_",",54)=$H D FILE^HLDIE("","HLJ","","SAVDOLRH","HLCSLM") ;HL*1.6*109 L -^HLCS(869.3,X,5) Q ; CHKQUE ;Check queues for messages to send ;HLTSKCNT(logical link)=task #^$H N HLDA,HLDP,HLMSG,HLTSK,Y S (HLDA,HLMSG)="" F HLDP=0:0 S HLDP=+$O(^HLMA("AC","O",HLDP)) Q:HLDP'>0 S HLMSG=+$O(^(HLDP,0)) I HLMSG D L -^HLCS("HLCSLSM",HLDP) .;quit if persistent link .Q:$P($G(^HLCS(870,HLDP,400)),U,4)="Y" .L +^HLCS("HLCSLSM",HLDP):0 E K HLTSKCNT(HLDP) Q .Q:'$$LLOK(+HLDP) .;get tasknumber from file 870 and HLTSKCNT array .S Y=$$TASKNUM(HLDP),HLTSK=$G(HLTSKCNT(HLDP)) . ; . ;patch HL*1.6*123 start . S HLDP("TASK-ACTIVE")=0 . ; . I Y D .. N ZTSK .. S ZTSK=Y .. ; Check status of task .. D STAT^%ZTLOAD .. I "12"[ZTSK(1) S HLDP("TASK-ACTIVE")=1 . Q:HLDP("TASK-ACTIVE") . ; . I HLTSK D .. N ZTSK .. S ZTSK=+HLTSK .. ; Check status of task .. D STAT^%ZTLOAD .. I "12"[ZTSK(1) S HLDP("TASK-ACTIVE")=1 . Q:HLDP("TASK-ACTIVE") . ; . ;no tasknumber, link not running nor queued, task it . I 'HLTSK!'Y D TASKLSUB(HLDP),SAVTSK(HLDP) Q ; comment out the following lines ; .;link was tasked, check time ; .S Y=$P(HLTSK,U,2) ; .;check that time task is less than 30 minutes ; .Q:$$HDIFF^XLFDT($H,Y,2)<1800 ; .;shutdown and send alert ; .D SDFLD^HLCSTCP,EXITS^HLCSTCP("Shutdown"),SNDALERT ; loop through links that have been tasked ; F HLDP=0:0 S HLDP=$O(HLTSKCNT(HLDP)) Q:HLDP'>0 K:'$D(^HLMA("AC","O",HLDP)) HLTSKCNT(HLDP) F HLDP=0:0 S HLDP=$O(HLTSKCNT(HLDP)) Q:HLDP'>0 D . N ZTSK . S ZTSK=+HLTSKCNT(HLDP) . ; Check status of task . D STAT^%ZTLOAD . ; kill HLTSKCNT(HLDP) if process is not active . I "12"'[ZTSK(1) K HLTSKCNT(HLDP) ; patch HL*1.6*123 end Q ; INIT ;Create Task number and clear Stop flag. N HLJ,X S X=1 F L +^HLCS(869.3,X,5):2 Q:$T ;52=Link Manager task number,53=Stop Link Manager S HLJ(869.3,X_",",52)=$G(ZTQUEUED) S HLJ(869.3,X_",",53)="@" D FILE^HLDIE("","HLJ","","INIT","HLCSLM") ;HL*1.6*109 L -^HLCS(869.3,X,5) Q TASKNUM(X) ;Look-up task number N %,DA,Y S DA=X ; ;**109** ;F L +^HLCS(870,+DA,0):2 Q:$T ; S Y=$$GET1^DIQ(870,DA_",",11) ; ;**109 ;L -^HLCS(870,+DA,0) ; Q Y STATUS(X) ;Status of task N Y,ZTSK S ZTSK=X D STAT^%ZTLOAD S Y=ZTSK(1) Q Y ; LLOK(X) ;Function to check whether LL ok. ;return value 1 = ok, 0 = not ok. Q:'$G(X) N HLDP,HLDP0,HLPARM4,HLTYPTR S HLDP=+X,HLDP0=$G(^HLCS(870,HLDP,0)),HLPARM4=$G(^(400)) Q:HLDP0="" 0 ;must be a client Q:$P(HLPARM4,U,3)'="C" 0 ; ; patch HL*1.6*123 ;shutdown LLP must be 0 ; Q:$P(HLDP0,U,15)'=0 0 ; change to 1, in case the data is empty Q:$P(HLDP0,U,15)=1 0 ; ;must have LLP Type of TCP S HLTYPTR=+$P(HLDP0,U,3) Q:$P($G(^HLCS(869.1,HLTYPTR,0)),U)'="TCP" 0 Q 1 ; SAVTSK(X) ; N HLDP,HLJ S HLDP=X ; ;**109** F L +^HLCS(870,HLDP,0):2 Q:$T ; ;4=status,10=Time Stopped,9=Time Started,11=Task Number,3=Online ? S X=$NA(HLJ(870,HLDP_",")),@X@(11)=$G(ZTSK) ;S HLJ(870,HLDP_",",11)=$G(ZTSK) D FILE^HLDIE("","HLJ","","SAVTSK","HLCSLM") ; HL*1.6*109 S HLTSKCNT(HLDP)=$G(ZTSK)_"^"_$H ; ;**109** L -^HLCS(870,HLDP,0) ; Q ; STRTSTOP ;ENTRY POINT TO START/STOP TCP LINK MANAGER N DIR,DIRUT,Y L +^HLCS("HLCSLM"):3 E D Q .W !,*7,"Link Manager already running!" .W ! S DIR(0)="YO",DIR("A")="Would you like to stop the Link Manager now",DIR("B")="NO" D ^DIR K DIR .I $D(DIRUT)!'Y Q .D STOPLM W !,*7,"Link Manager is NOT currently running!" W ! S DIR(0)="YO",DIR("A")="Would you like to start the Link Manager now",DIR("B")="YES" D ^DIR K DIR I '$D(DIRUT)&Y D TASKLM L -^HLCS("HLCSLM") Q ; STOPLM ;ENTRY POINT TO STOP LINK MANAGER N DIC,X,Y,DTOUT,DUOUT,DLAYGO,DIE,DA,DR S DIC="^HLCS(869.3," S X=1 D ^DIC S DA=+Y,DIE=DIC S DR="53////1" D ^DIE W !,"Link Manager has been asked to stop" Q STAT() ;Status of LINK MANAGER--up, down or unable to determine. N %,DA,X,Y S DA=1 S X=$$GET1^DIQ(869.3,DA_",",52) Q:X']"" 0 S X=$$GET1^DIQ(869.3,DA_",",54) Q:X']"" 0 I $$HDIFF^XLFDT($H,X,2)>500 Q 0 Q 1 ; TASKLSUB(X) ;Task LINK SUB-MANAGER. ;This may be a place to log the time which the LINK SUBMANAGER is tasked. N HLDP,HLDP0,HLDAPP,HLTYPTR,HLBGR,HLENV,HLPARM,HLPARM4,HLQUIT,ZTRTN,ZTDESC,ZTCPU,ZTSAVE ;ZTSK is not Newed here because it will be needed by SAVTSK. S HLDP=X,HLDP0=$G(^HLCS(870,HLDP,0)),HLPARM4=$G(^(400)) ; Q:"N"'[$P(HLPARM4,U,4) ; patch HL*1.6*123: comment out ;quit if no LLP TYPE S HLDAPP=$P(HLDP0,U),HLTYPTR=$P(HLDP0,U,3) Q:'HLTYPTR S HLBGR=$G(^HLCS(869.1,HLTYPTR,100)),HLENV=$G(^(200)) I HLENV'="" K HLQUIT X HLENV Q:$D(HLQUIT) S ZTRTN="^HLCSLSM",HLBGR=$P(HLBGR," ",2) S ZTDESC=HLDAPP_" Low Level Protocol",ZTSAVE("HLDP")="",ZTSAVE("HLBGR")="" S ZTIO="",ZTDTH=$H ;get startup node I $P(HLPARM4,U,6),$D(^%ZIS(14.7,+$P(HLPARM4,U,6),0)) S ZTCPU=$P(^(0),U) D ^%ZTLOAD D MON^HLCSTCP("Tasked") ;HL*1.6*123 Q ; TASKLM ;Task Link Manager ;Declare variables N ZTRTN,ZTDESC,ZTIO,ZTDTH,ZTSK,TMP S ZTIO="" S ZTDTH=$H ;Task Link Manager S ZTRTN="EN^HLCSLM" S ZTDESC="HL7 Link Manager" ;Call TaskMan D ^%ZTLOAD I $G(ZTSK) W !,"Link Manager queued as task number ",ZTSK E W $C(7),!!,"Unable to start/restart Link Manager" Q ; CKLMSTOP() ;Check whether Link Manager should stop N PTRMAIN,NODE5,STOP S PTRMAIN=+$O(^HLCS(869.3,0)) L +^HLCS(869.3,PTRMAIN,5):1 I $T L -^HLCS(869.3,PTRMAIN,5) S NODE5=$G(^HLCS(869.3,PTRMAIN,5)) S STOP=+$P(NODE5,"^",3) Q:STOP STOP S STOP=$$S^%ZTLOAD Q STOP ; SNDALERT ;Send Alert N XQA,XQAMSG,XQAOPT,XQAROU,XQAID,Z S Z=$P($$PARAM^HLCS2,U,8) Q:Z="" S XQA("G."_Z)="",XQAMSG="HL7 Logical Link "_$P(^HLCS(870,HLDP,0),U)_" shutdown due to TaskMan unable to process task request" D SETUP^XQALERT Q