Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: HLCSLM

HLCSLM.m

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