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

INHRPC.m

Go to the documentation of this file.
INHRPC ;cmi/anch/maw - INH RPC Utilities  4/11/2006 12:24:38 PM
 ;;3.01;BHL IHS Interfaces with GIS;**14,15**;JUL 01, 2001
 ;
 ;
 ;
 ;this routine will contain utilities needed to talk with the Visual GIS Monitor
 Q
 ;
DEBUG(INHRET,INHSTR) ;-- run the serenji debugger
 ;D DEBUG^%Serenji("TAG^ROUTINE(INHRET,.INHSTR)")
 Q
 ;
BACK(INHRET) ;-- get the background processes
 S X="MERR^INHRPC",@^%ZOSF("TRAP") ; m error trap
 N INHDA,INHI
 S INHI=0
 K ^INHTMP($J)
 S INHRET="^INHTMP("_$J_")"
 S ^INHTMP($J,INHI)="T00007BMXIEN^T00057Background Process^T00001Status^T00006Job^T00030Last Started^T00080StatusText"_$C(30)
 S INHDA=0 F  S INHDA=$O(^INTHPC("ACT",INHDA)) Q:'INHDA  D
 . N INHIEN
 . S INHIEN=0 F  S INHIEN=$O(^INTHPC("ACT",INHDA,INHIEN)) Q:'INHIEN  D
 .. S INHI=INHI+1
 .. N INHSTAT,INHTXTI,INHJOB,INHSTRT,INHNM
 .. S INHNM=$P($G(^INTHPC(INHIEN,0)),U)
 .. S INHSTAT=0
 .. S INHJOB=$P($G(^INTHPC(INHIEN,0)),U,4)
 .. S INHSTRT=$P($G(^INTHPC(INHIEN,0)),U,5)
 .. I INHSTRT S INHSTRT=$$FMTE^XLFDT(INHSTRT)
 .. I INHJOB,$D(^$JOB(INHJOB)),$D(^INRHB("RUN",INHIEN)) S INHSTAT=1
 .. I INHJOB,'$D(^$JOB(INHJOB)) S INHSTAT=0,INHJOB=""
 .. I '$D(^INRHB("RUN",INHIEN)) S INHSTAT=0,INHJOB=""
 .. S INHTXT=$P($G(^INRHB("RUN",INHIEN)),U,2)
 .. I INHTXT="" S INHTXT="Not Running"
 .. S ^INHTMP($J,INHI)=INHIEN_U_INHIEN_"-"_INHNM_U_INHSTAT_U_INHJOB_U_INHSTRT_U_INHTXT_$C(30)
 S ^INHTMP($J,INHI+1)=$C(31)
 Q
 ;
STRT(INHRET,INHSTR) ;-- start the background process
 S X="MERR^INHRPC",@^%ZOSF("TRAP") ; m error trap
 N P,INDA,INHI
 S P="|"
 K ^INHTMP($J)
 S INHRET="^INHTMP("_$J_")"
 S INHI=0
 S ^INHTMP($J,INHI)="T00080Error"_$C(30)
 S INDA=$P(INHSTR,P)
 I $$VER(INDA) D  Q
 . S INHI=INHI+1
 . S ^INHTMP($J,INHI)="Process is Already Running, Shutdown First"_$C(30)
 . S ^INHTMP($J,INHI+1)=$C(31)
 N INERR
 S INERR=$$OKTR(INDA)
 I 'INERR D  Q
 . S INHI=INHI+1
 . S ^INHTMP($J,INHI)=$G(INERR)_$C(30)
 . S ^INHTMP($J,INHI+1)=$C(31)
 N INHYN
 S INHYN=$$A(INDA)
 I 'INHYN D  Q
 . S INHI=INHI+1
 . S ^INHTMP($J,INHI)="Process did not Start"_$C(30)
 . S ^INHTMP($J,INHI+1)=$C(31)
 S INHI=INHI+1
 S ^INHTMP($J,INHI)=0_$C(30)
 S ^INHTMP($J,INHI+1)=$C(31)
 Q
 ;
STOP(INHRET,INHSTR) ;-- stop the background process
 S X="MERR^INHRPC",@^%ZOSF("TRAP") ; m error trap
 N P,INDA,INHI
 S P="|"
 K ^INHTMP($J)
 S INHRET="^INHTMP("_$J_")"
 S INHI=0
 S ^INHTMP($J,INHI)="T00080Error"_$C(30)
 S INDA=$P(INHSTR,P)
 S INSRVR=+$P(^INTHPC(INDA,0),U,8) ; opened as client=0 or server=1
 N INHX
 F INHXX=1:1:100 K ^INRHB("RUN",INDA)
 S:$$VER(INDA)&INSRVR INHX=$$SRVRHNG^INHB(INDA) ; shut down "hung" active server
 H 2
 S INHI=INHI+1
 S ^INHTMP($J,INHI)=0_$C(30)
 S ^INHTMP($J,INHI+1)=$C(31)
 Q
 ;
REF(INHRET,INHSTR) ;-- refresh the background process
 S X="MERR^INHRPC",@^%ZOSF("TRAP") ; m error trap
 N P,INDA,INHI
 S P="|"
 K ^INHTMP($J)
 S INHRET="^INHTMP("_$J_")"
 S INHI=0
 S INDA=$P(INHSTR,P)
 S ^INHTMP($J,INHI)="T00001Status^T00006Job^T00030Last Started^T00080Status Text^I00007Job Queue"_$C(30)
 S INHI=INHI+1
 N INHSTAT,INHTXTI,INHJOB,INHSTRT,INHNM,INHJQ
 S INHNM=$P($G(^INTHPC(INDA,0)),U)
 S INHSTAT=0
 S INHJOB=$P($G(^INTHPC(INDA,0)),U,4)
 S INHSTRT=$P($G(^INTHPC(INDA,0)),U,5)
 I INHSTRT S INHSTRT=$$FMTE^XLFDT(INHSTRT)
 I INHJOB,$D(^$JOB(INHJOB)),$D(^INRHB("RUN",INDA)) S INHSTAT=1
 I INHJOB,'$D(^$JOB(INHJOB)) S INHSTAT=0,INHJOB=""
 I '$D(^INRHB("RUN",INDA)) S INHSTAT=0,INHJOB=""
 S INHTXT=$P($G(^INRHB("RUN",INDA)),U,2)
 I INHTXT="" S INHTXT="Not Running"
 S INHJQ=0
 I INDA>2 S INHJQ=$$JOBCNT(INDA)
 S ^INHTMP($J,INHI)=INHSTAT_U_INHJOB_U_INHSTRT_U_INHTXT_U_INHJQ_$C(30)
 S ^INHTMP($J,INHI+1)=$C(31)
 Q
 ;
JOBCNT(INHINDA) ;-- return the number of records
 N INHDST
 S INHDST=$P($G(^INTHPC(INHINDA,0)),U,7)
 I 'INHDST Q 0
 I '$D(^INLHDEST(INHDST)) Q 0
 N CNT,INHDA
 S CNT=0
 S INHDA="" F  S INHDA=$O(^INLHDEST(INHDST,INHDA)) Q:INHDA=""  D
 . N INHP
 . S INHP=0 F  S INHP=$O(^INLHDEST(INHDST,INHDA,INHP)) Q:INHP=""  D
 .. N INHH
 .. S INHH=0 F  S INHH=$O(^INLHDEST(INHDST,INHDA,INHP,INHH)) Q:INHH=""  D
 ... S CNT=CNT+1
 Q CNT
 ;
MERR ; MUMPS ERROR TRAP
 N INHX
 X ("S INHX=$"_"ZE")
 S INHX="MUMPS error: """_INHX_""""
 D ERR(INHX)
 Q
 ;
ERR(ERR) ; BMX ADO SCHEMA ERROR PROCESSOR
 N INHXX
 S INHXX="ERROR|"_ERR_$C(30)
 S @INHRET@(1)=INHXX
 S @INHRET@(2)=$C(31)
 Q
 ;
A(DA) ;Startup a process
 ;DA = entry # in file 4004
 ;Returns 1 if started, 0 otherwise
 ;
 N INERR
 S INERR=$$OKTR(DA) I 'INERR Q INERR
 N JOB S JOB=$$REPLACE^UTIL(^INTHOS(1,1),"*","^INHB1("_DA_")")
 K ^INRHB("RUN",DA) X JOB F I=1:1:15 L +^INRHB("RUN",DA):0,-^INRHB("RUN",DA) Q:$D(^INRHB("RUN",DA))
 H 1 Q ''$D(^INRHB("RUN",DA))
 ;
OKTR(X) ;See if OK to run process #X
 ;Returns 1 if OK, 0 otherwise
 Q:'$G(^INRHSITE(1,"ACT")) "Interface system not active - NO ACTION TAKEN."
 Q:'$P($G(^INTHPC(X,0)),"^",2) "Process not active - NO ACTION TAKEN."
 Q:+$G(^INTHPC(X,7)) "Process cannot be started manually - NO ACTION TAKEN."
 Q 1
 ;
VER(DA) ;Verify entry DA is running
 ;Return 1 if running, 0 if not running, -1 if running but signaled to quit
 G:$G(^INTHOS(1,4))]"" VER1
 L +^INRHB("RUN",DA):1 I  L -^INRHB("RUN",DA) Q 0
 Q:'$D(^INRHB("RUN",DA)) -1
 Q 1
 ;
VER1 ;Come here when OS file has code to do the checking
 N X S X=$P(^INTHPC(DA,0),"^",4) Q:'X 0
 X "N DA "_^INTHOS(1,4) Q:'X 0
 Q:'$D(^INRHB("RUN",DA)) -1
 Q 1
 ;