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

KMPUTLW2.m

Go to the documentation of this file.
KMPUTLW2 ;SP/JML - Manage REST interfaces for VSM Monitors ;7/1/2025
 ;;4.0;CAPACITY MANAGEMENT;**1,4,5**;3/1/2018;Build 9
 ;
 ;
 ;
EVTPKG(KMPOPT) ;
 ; calculate eventname, parenteventname, eventtype, eventsource
 N KMPENAME,KMPESTR,KMPPSTR
 S KMPESTR="|||",KMPPSTR="|"
 S KMPESTR=$$CALCEVT(KMPOPT)
 S KMPENAME=$P(KMPESTR,"|")
 ;
 S KMPPSTR=$G(^KMPVPKG(KMPENAME))
 I KMPPSTR="" D
 .S KMPPSTR=$$CALCPKG(KMPENAME)
 Q KMPESTR_"|"_KMPPSTR
 ;
CALCEVT(KMPOPT) ;
 N KMPENAM,KMPETYP,KMPP1,KMPP2,KMPPENAM,KMPRUMD
 S (KMPENAM,KMPPENAM,KMPETYP,KMPRUMD)=""
 S KMPP1=$P(KMPOPT,"***"),KMPP2=$P(KMPOPT,"***",2)
 ; Event Type - RPC, Protocol, Option
 S KMPETYP=$S($E(KMPP1)="`":"RPC",KMPP2'="":"PROTOCOL",1:"OPTION")
 ; RUM Designation -> EventSource - 1:TaskMan, 2: Menu, 3:RPC Broker, 4:Users, 5:Unknown
 I $E(KMPP1)="!"!(KMPP1="$AFTR ZTMS$")!(KMPP1="$STRT ZTMS$") S KMPRUMD="TASKMAN"
 I KMPRUMD="" S KMPRUMD=$S($E(KMPP1)="`":"RPC BROKER",$E(KMPP1)="#":"USERS",1:"MENU")
 I KMPRUMD="" S KMPRUMD="UNKNOWN"
  ; EventName
 I $$RESERVED(KMPP1) S KMPENAM=KMPP1 ; handle system events
 I KMPENAM="","`!#"[$E(KMPP1) S KMPENAM=$E(KMPP1,2,$L(KMPP1)) ; handle non menu events
 I KMPENAM="" S KMPENAM=KMPP1 ; remaining need no editing
 I KMPP2'="" S KMPPENAM=KMPENAM,KMPENAM=KMPP2 ; IF PROTOCOL SET OPTION AS PARENT EVENT
 I (KMPENAM'="")&($E(KMPENAM,1)="`") S KMPENAM=$E(KMPENAM,2,$L(KMPENAM))
 S KMPRET=KMPENAM_"|"_KMPPENAM_"|"_KMPETYP_"|"_KMPRUMD
 S ^KMPVEVT(KMPOPT)=KMPRET
 Q KMPRET
 ;
CALCPKG(KMPENAME) ;
 N KMPIEN,KMPPKGID,KMPPNAM,KMPPRE,KMPRET
 ; CODE FROM SERVER TO SET KMPPKGID
 I $$RESERVED(KMPENAME) Q $$RESPACK(KMPENAME)
 S KMPPKGID="",KMPRET="UNKNOWN^UNKNOWN"
 S KMPPRE=$E(KMPENAME,1,4) D
 .I $D(^DIC(9.4,"C",KMPPRE)) S KMPPKGID=$O(^DIC(9.4,"C",KMPPRE,""))
 I KMPPKGID="" S KMPPRE=$E(KMPENAME,1,3) D
 .I $D(^DIC(9.4,"C",KMPPRE)) S KMPPKGID=$O(^DIC(9.4,"C",KMPPRE,""))
 I KMPPKGID="" S KMPPRE=$E(KMPENAME,1,2) D
 .I $D(^DIC(9.4,"C",KMPPRE)) S KMPPKGID=$O(^DIC(9.4,"C",KMPPRE,""))
 I KMPPKGID="" Q KMPRET
 S KMPIEN=""
 ; IF 2 ENTRIES NO WAY TO DECIDE WHICH IS CORRECT SO TAKE FIRST - DON'T LOOP - RARE OCCURRENCE
 S KMPIEN=$O(^DIC(9.4,"C",KMPPRE,KMPIEN)) Q:KMPIEN=""  D
 .S KMPPNAM=$P($G(^DIC(9.4,KMPIEN,0)),"^")
 .S KMPRET=KMPPRE_"|"_KMPPNAM
 .S ^KMPVPKG(KMPENAME)=KMPRET
 Q KMPRET
 ;
RESERVED(KMPENAME) ; Return 1 if system event
 I "#USER#^$AFTR ZTMS$^$STRT ZTMS$^$BROKER HANDLER$^$LOGIN$^$VISTALINK HANDLER$^$XQ MENU DRIVER$^EVE^"[KMPENAME Q 1
 I "#USER#^$AFTR ZTMS$^$STRT ZTMS$^$BROKER HANDLER$^$LOGIN$^$VISTALINK HANDLER$^$XQ MENU DRIVER$"[$E(KMPENAME,2,$L(KMPENAME)) Q 1
 Q 0
 ;
RESPACK(KMPENAME) ; Return PREFIX^PACKAGE
 I "^$AFTR ZTMS$^$STRT ZTMS$^$XQ MENU DRIVER$^$LOGIN$^#USER#^EVE^"[KMPENAME Q "XU|KERNEL"
 I "^$BROKER HANDLER$^"[KMPENAME Q "XWB|RPC BROKER"
 I "^$VISTALINK HANDLER$^"[KMPENAME Q "XOBV|VISTALINK"
 ; The following code is to fix null vsmpackage in KMPVBusinessEvent 2-14-2018 SCL
 I "^$BROKER HANDLER$^"[$E(KMPENAME,2,$L(KMPENAME)) Q "XWB|RPC BROKER"
 I "^$AFTR ZTMS$^$STRT ZTMS$^$XQ MENU DRIVER$^$LOGIN$^#USER#^EVE^"[$E(KMPENAME,2,$L(KMPENAME)) Q "XU|KERNEL"
 I "^$VISTALINK HANDLER$^"[$E(KMPENAME,2,$L(KMPENAME)) Q "XOBV|VISTALINK"
 Q ""
 ;
SETCFG(KMPCFG) ; Change VSM configuration via national server change request
 N KMPDATA,KMPEARR,KMPENUM,KMPFNAM,KMPFNUM,KMPFUNC,KMPFVAL,KMPI,KMPIEN,KMPMKEY,KMPMSG,KMPMSG2,KMPON,KMPRESP,KMPRT
 N KMPRTN,KMPRTO,KMPTEXT,KMPTNUM,KMPVER,FDA
 ;
 S KMPFUNC="SETCFG"
 S KMPMKEY=KMPCFG.Monitor
 S (KMPMSG,KMPMSG2)=""
 ;
 D STOPMON^KMPVCBG(KMPMKEY,1,1)
 ;
 S KMPVER=$$GETVAL^KMPVCCFG(KMPMKEY,"VERSION",8969)
 I KMPCFG.Function'="SetConfig" Q "Incorrect Function Type"
 S KMPFVAL("ALLOW TEST SYSTEM")=KMPCFG.AllowTestSystem
 S KMPFVAL("APIKEY")=KMPCFG.ApiKey
 S KMPFVAL("COLLECTION INTERVAL")=KMPCFG.CollectionInterval
 S KMPFVAL("DAYS TO KEEP DATA")=KMPCFG.DaysToKeepData
 S KMPFVAL("ENCRYPT")=KMPCFG.Encrypt
 S KMPFVAL("HTTP REQUEST MAX LENGTH")=KMPCFG.HttpRequestMaxLength
 S KMPFVAL("MONITOR START DELAY")=KMPCFG.MonitorStartDelay
 S KMPFVAL("NATIONAL FQDN")=KMPCFG.NationalFqdn
 S KMPFVAL("NATIONAL IP ADDRESS")=KMPCFG.NationalIpAddress
 S KMPFVAL("NATIONAL PORT")=KMPCFG.NationalPort
 S KMPFVAL("NATIONAL SUPPORT EMAIL ADDRESS")=KMPCFG.NationalSupportEmailAddress
 S KMPFVAL("ONOFF")=KMPCFG.OnOff
 S KMPFVAL("COVER SHEET EXPIRATION")=KMPCFG.CoverSheetExpiration
 S KMPFVAL("FUTURE TASK CHECK")=KMPCFG.FutureTaskCheck
 ;
 ; verify Monitor Type is valid
 I $D(^KMPV(8969,"B",KMPMKEY)) S KMPIEN=$O(^KMPV(8969,"B",KMPMKEY,""))
 I $G(KMPIEN)="" Q "Monitor "_KMPMKEY_" not defined. No changes made."
 ;  get field numbers and set FDA array
 S KMPFNAM=""
 F  S KMPFNAM=$O(KMPFVAL(KMPFNAM)) Q:KMPFNAM=""  D
 .S KMPFNUM=$$FLDNUM^DILFD(8969,KMPFNAM)
 .I KMPFNUM>0 S FDA($J,8969,KMPIEN_",",KMPFNUM)=KMPFVAL(KMPFNAM)
 .E  S KMPEARR(KMPFNAM)=""
 ;
 ; If field name does not exist send message and quit
 I $D(KMPEARR) D  Q "Configuration Update field(s) do not exist in the VSM CONFIGURATION file"
 .S KMPTEXT("SUBJECT")="VSM ALERT:  Configuration Update field(s) do not exist in the VSM CONFIGURATION file "
 .S KMPI=1
 .S KMPFNAM="",KMPTEXT(KMPI)=KMPMKEY_" Missing Fields",KMPI=KMPI+1
 .F  S KMPFNAM=$O(KMPEARR(KMPFNAM)) Q:KMPFNAM=""  D
 ..S KMPTEXT(KMPI)=KMPFNAM,KMPI=KMPI+1
 ;
 ; If still good get old values for logging changes
 S KMPFNAM=""
 F  S KMPFNAM=$O(KMPFVAL(KMPFNAM)) Q:KMPFNAM=""  D
 .S $P(KMPFVAL(KMPFNAM),"^",2)=$$GETVAL^KMPVCCFG(KMPMKEY,KMPFNAM,8969,"I")
 ; ATTEMPT TO MAKE CHANGES
 K KMPEARR
 D FILE^DIE("ET","FDA($J)","KMPEARR")
 ; IF ERRORS SEND MESSAGE WITH ERRORS
 S KMPRESP="OK"
 S KMPI=1
 I $D(KMPEARR) D  ; Add filing errors to support message
 .S KMPRESP="UPDATE FAILED"
 .S KMPTEXT("SUBJECT")="VSM ALERT:"_KMPMKEY_" Configuration Update: WITH ERRORS. "
 .S KMPTEXT(KMPI)="Changes NOT applied to VSM CONFIGURATION file. ",KMPI=KMPI+1
 .S KMPTEXT(KMPI)="Number of errors: "_+KMPEARR("DIERR"),KMPI=KMPI+1
 .S KMPENUM=""
 .F  S KMPENUM=$O(KMPEARR("DIERR",KMPENUM)) Q:+KMPENUM=0  D
 ..S KMPTNUM=""
 ..F  S KMPTNUM=$O(KMPEARR("DIERR",KMPENUM,"TEXT",KMPTNUM)) Q:+KMPTNUM=0  D
 ...S KMPTEXT(KMPI)=KMPEARR("DIERR",KMPENUM,"TEXT",KMPTNUM),KMPI=KMPI+1
 .D INFOMSG^KMPUTLW(.KMPTEXT)
 ; If no FILING errors then list changes in Support Message and Log Changes
 I '$D(KMPEARR) D
 .S KMPI=1
 .S KMPTEXT("SUBJECT")="VSM CONFIGURATION: "_KMPMKEY_" Configuration Update: No Errors. "
 .S KMPTEXT(KMPI)="Changes applied to VSM CONFIGURATION file. ",KMPI=KMPI+1
 .; list changes in Support Message
 .S KMPFNAM="",KMPTEXT(KMPI)="Changed Fields",KMPI=KMPI+1
 .F  S KMPFNAM=$O(KMPFVAL(KMPFNAM)) Q:KMPFNAM=""  D
 ..S KMPDATA=KMPFVAL(KMPFNAM)
 ..S KMPTEXT(KMPI)=KMPFNAM_"-"_$P(KMPDATA,"^",2)_" TO "_$P(KMPDATA,"^"),KMPI=KMPI+1
 .D INFOMSG^KMPUTLW(.KMPTEXT)
 ; if end state is 'ON' then start monitor
 I $$GETVAL^KMPVCCFG(KMPMKEY,"ONOFF",8969)="ON" D STARTMON^KMPVCBG(KMPMKEY,1,1)
 Q KMPRESP