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

KMPRBD02.m

Go to the documentation of this file.
  1. KMPRBD02 ;SF/RAK - RUM Data Compression ;1/20/00 07:36
  1. ;;1.0;CAPACITY MANAGEMENT - RUM;**1**;Dec 09, 1998
  1. ;
  1. ; Background Driver (cont.)
  1. ;
  1. DAILY(KMPRTDAY) ;-- daily data compression and storage
  1. ;----------------------------------------------------------------------
  1. ; KMPRTDAY.. Day in $H format (+$H). This represents the
  1. ; ending point for compression. Only dates LESS than
  1. ; KMPRTDAY will be compressed.
  1. ;
  1. ; At midnight compress hourly info into daily stats. Daily stats are
  1. ; stored in file #8971.1. Hourly data is killed.
  1. ;----------------------------------------------------------------------
  1. ;
  1. Q:'$G(KMPRTDAY)
  1. ;
  1. N ARRAY,COUNT,DATA,DOW,HDATE,HTIME,I,JOB,MESSAGE,NODE,OKAY,OPTION
  1. N NP,PT,PTM,X,VAR
  1. ;
  1. ; make sure DT is defined.
  1. S:'$G(DT) DT=$$DT^XLFDT
  1. ; where daily data is located.
  1. S ARRAY=$NA(^XTMP("KMPR","DLY"))
  1. S NODE=""
  1. F S NODE=$O(@ARRAY@(NODE)) Q:NODE="" D
  1. .S HDATE=""
  1. .F S HDATE=$O(@ARRAY@(NODE,HDATE)) Q:HDATE=""!(HDATE'<KMPRTDAY) D
  1. ..S OPTION=""
  1. ..F S OPTION=$O(@ARRAY@(NODE,HDATE,OPTION)) Q:OPTION="" D
  1. ...S JOB=0,(COUNT,NP,PT)=""
  1. ...F S JOB=$O(@ARRAY@(NODE,HDATE,OPTION,JOB)) Q:'JOB D
  1. ....S PTM=""
  1. ....F S PTM=$O(@ARRAY@(NODE,HDATE,OPTION,JOB,PTM)) Q:PTM="" D
  1. .....; PTM: non-prime time = 0 prime time = 1
  1. .....S DATA=@ARRAY@(NODE,HDATE,OPTION,JOB,PTM)
  1. .....; prime time or non-prime time.
  1. .....S VAR=$S(PTM:"PT",1:"NP") Q:VAR=""
  1. .....; accumulate totals.
  1. .....F I=1:1:8 S $P(@VAR,U,I)=$P(@VAR,U,I)+$P(DATA,U,I)
  1. .....; piece 1 non-prime time - piece 2 prime time
  1. .....S $P(COUNT,U,(PTM+1))=$P(COUNT,U,(PTM+1))+1
  1. .....; remove data from array.
  1. .....K @ARRAY@(NODE,HDATE,OPTION,JOB,PTM)
  1. ...;
  1. ...; back to OPTION level.
  1. ...; file data into file #8971.1
  1. ...D FILE^KMPRBD03(HDATE,NODE,OPTION,PT,NP,$P(COUNT,U,2),$P(COUNT,U),.OKAY,.MESSAGE)
  1. ...; if not filed successfully set into 'ERR' node.
  1. ...I 'OKAY D
  1. ....S ^XTMP("KMPR","ERR",HDATE,NODE,OPTION,0)=NP_$P(COUNT,U)
  1. ....S ^XTMP("KMPR","ERR",HDATE,NODE,OPTION,1)=PT_$P(COUNT,U,2)
  1. ....F I=0:0 S I=$O(MESSAGE(I)) Q:'I D
  1. .....S ^XTMP("KMPR","ERR",HDATE,NODE,OPTION,"MSG",I)=MESSAGE(I)
  1. ;
  1. Q
  1. ;
  1. WEEKLY(KMPRDT) ;-- compress daily stats to weekly
  1. ;-----------------------------------------------------------------------
  1. ; KMPRDT... Compression date in internal fileman formt. This date
  1. ; must be a Sunday. It represents the date from which the
  1. ; previous weeks data should be compressed.
  1. ; Example: if KMPRDT = 2981011 then compression will begin
  1. ; on 2981010 (KMPRDT-1)
  1. ;
  1. ; Every Sunday compress the daily stats in file #8971.1 into weekly
  1. ; and upload the data to the CM RUM National Database
  1. ;-----------------------------------------------------------------------
  1. ;
  1. Q:'$G(KMPRDT)
  1. ;
  1. N DATA,DATE,DELDATE,END,HOURS,I,IEN,J,SITE,START,TMPARRY,TMPARRY1
  1. ;
  1. ; quit if not sunday.
  1. Q:$$DOW^XLFDT(KMPRDT,1)
  1. ; storage array.
  1. S TMPARRY=$NA(^TMP($J))
  1. ; processed entries.
  1. S TMPARRY1=$NA(^TMP("KMPR PROC",$J))
  1. K @TMPARRY,@TMPARRY1
  1. ; site info.
  1. S SITE=$$SITE^VASITE Q:SITE=""
  1. S DATE=KMPRDT
  1. S (START,END)=""
  1. ; Date to begin deletion.
  1. S DELDATE=$$FMADD^XLFDT(KMPRDT,-14)
  1. ;
  1. W:'$D(ZTQUEUED) !,"Compressing data into weekly format..."
  1. ; Reverse $order to get previous dates.
  1. F S DATE=$O(^KMPR(8971.1,"B",DATE),-1) Q:'DATE D
  1. .; If DATE is saturday set START and END dates and kill TMPARRY.
  1. .I $$DOW^XLFDT(DATE,1)=6 D
  1. ..S END=DATE,START=$$FMADD^XLFDT(DATE,-6)
  1. ..K @TMPARRY
  1. .Q:'START
  1. .S IEN=0
  1. .F S IEN=$O(^KMPR(8971.1,"B",DATE,IEN)) Q:'IEN D
  1. ..Q:'$D(^KMPR(8971.1,IEN,0))
  1. ..; data nodes into DATA() array.
  1. ..S DATA(0)=^KMPR(8971.1,IEN,0),DATA(1)=$G(^(1)),DATA(2)=$G(^(2))
  1. ..; Quit if data has already been sent to national database.
  1. ..Q:$P(DATA(0),U,2)
  1. ..; Cpu node.
  1. ..S NODE=$P(DATA(0),U,3) Q:NODE=""
  1. ..; OPTION = OptionName^ProtocolName.
  1. ..; option.
  1. ..S OPTION=$P(DATA(0),U,4)
  1. ..; rpc.
  1. ..S:OPTION="" OPTION=$P(DATA(0),U,7)
  1. ..; hl7.
  1. ..S:OPTION="" OPTION=$P(DATA(0),U,9)
  1. ..Q:OPTION=""
  1. ..S $P(OPTION,U,2)=$P(DATA(0),U,5)
  1. ..S @TMPARRY@(START,NODE,OPTION,0)=DATA(0)
  1. ..; change first piece to starting date (START)
  1. ..S $P(@TMPARRY@(START,NODE,OPTION,0),U)=START
  1. ..; second piece not applicable to national database
  1. ..S $P(@TMPARRY@(START,NODE,OPTION,0),U,2)=""
  1. ..; EndingDate^SiteName^SiteNumber.
  1. ..S @TMPARRY@(START,NODE,OPTION,99)=END_U_$P(SITE,U,2)_U_$P(SITE,U,3)
  1. ..; Nodes 1 and 2.
  1. ..F I=1,2 I DATA(I)]"" D
  1. ...; Add data to get weekly totals.
  1. ...F J=1:1:8 S $P(@TMPARRY@(START,NODE,OPTION,I),U,J)=$P($G(@TMPARRY@(START,NODE,OPTION,I)),U,J)+$P(DATA(I),U,J)
  1. ..;
  1. ..; Back to IEN level.
  1. ..; Add to processed array.
  1. ..S @TMPARRY1@(IEN)=""
  1. .;
  1. .; Back to DATE level.
  1. .; If START then transmit data.
  1. .I DATE=START I $D(@TMPARRY) D TRANSMIT K @TMPARRY
  1. ;
  1. ; Transmit data to national database.
  1. W:'$D(ZTQUEUED) !,"Transmitting data to national database..."
  1. D:$D(@TMPARRY) TRANSMIT
  1. K @TMPARRY
  1. ;
  1. ; update field .02 (SENT TO CM NATIONAL DATABASE) to 'YES' for all
  1. ; processed entries.
  1. W:'$D(ZTQUEUED) !,"Updating records to reflect transmission..."
  1. S IEN=0
  1. F S IEN=$O(@TMPARRY1@(IEN)) Q:'IEN D
  1. .K FDA,ERROR
  1. .S FDA($J,8971.1,IEN_",",.02)=1
  1. .D FILE^DIE("","FDA($J)","ERROR")
  1. K @TMPARRY1
  1. ;
  1. ; leave two complete weeks of data in file #8971.1
  1. D PURGE^KMPRUTL3(DELDATE,1)
  1. ;
  1. Q
  1. ;
  1. TRANSMIT ;-- format TMPARRY data, put into e-mail and send to cm.
  1. ;
  1. Q:$G(TMPARRY)=""
  1. ;
  1. N HRSDAYS,I,IEN,LN,N,O,S,UPLDARRY,XMSUB,X,XMTEXT,XMY,XMZ,Y,Z
  1. ;
  1. S UPLDARRY=$NA(^TMP("KMPR UPLOAD",$J))
  1. K @UPLDARRY
  1. ;
  1. S LN=0
  1. ; version and patch info.
  1. S LN=LN+1,@UPLDARRY@(LN)="VERSION="_$$VERSION^KMPRUTL
  1. ;
  1. ; get hours/days data
  1. D HRSDAYS^KMPRUTL3(START,END,1,.HRSDAYS)
  1. ; if ^XTMP("KMPR","HOURS","START") exists then this is the first time
  1. ; the "HOURS" subscript is being accessed. chances are this is only
  1. ; partial data, so it should be ignored.
  1. I $G(^XTMP("KMPR","HOURS","START"))&($D(HRSDAYS)) D
  1. .K HRSDAYS,^XTMP("KMPR","HOURS","START")
  1. ;
  1. I $D(HRSDAYS) S S=0 D
  1. .F S S=$O(HRSDAYS(S)) Q:'S S N="" D
  1. ..F S N=$O(HRSDAYS(S,N)) Q:N="" D
  1. ...S LN=LN+1
  1. ...; StartDate^Node^EndDate^PTDays^PTHours^NPTDays^NPTHours
  1. ...S @UPLDARRY@(LN)="HRSDAYS="_START_"^"_N_"^"_END_"^"_HRSDAYS(S,N)
  1. ;
  1. ; reformat so that data is in ^TMP("KMPR UPLOAD",$J,LN)= format.
  1. S IEN=0,S=""
  1. F S S=$O(@TMPARRY@(S)) Q:S="" S N="" D
  1. .F S N=$O(@TMPARRY@(S,N)) Q:N="" S O="" D
  1. ..F S O=$O(@TMPARRY@(S,N,O)) Q:O="" S I="",IEN=IEN+1 D
  1. ...F S I=$O(@TMPARRY@(S,N,O,I)) Q:I="" D
  1. ....S LN=LN+1
  1. ....S @UPLDARRY@(LN)=IEN_","_I_")="_@TMPARRY@(S,N,O,I)
  1. ;
  1. ; quit if no data to transmit.
  1. Q:'$D(@UPLDARRY)
  1. ; send packman message.
  1. S XMTEXT="^TMP(""KMPR UPLOAD"","_$J_","
  1. S XMSUB="RUM DATA - "_$P(SITE,U,2)_" ("_$P(SITE,U,3)_") - "_$$FMTE^XLFDT(START)
  1. S XMY("S.KMP2-RUM-SERVER@DOMAIN.NAME")=""
  1. S XMY("CAPACITY,MANAGEMENT@DOMAIN.NAME")=""
  1. D ^XMD
  1. W:'$D(ZTQUEUED) !,"Message #",$G(XMZ)," sent..."
  1. K @UPLDARRY
  1. ;
  1. Q