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 ;OAK/RAK - RUM Data Compression ;1/30/13 08:29
  1. ;;2.0;CAPACITY MANAGEMENT - RUM;**2**;May 28, 2003;Build 12
  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. ; if test lab
  1. I $$TESTLAB^KMPDUT1 D DAILY^KMPRBD05(KMPRTDAY) Q
  1. ;
  1. N COUNT,CNT,CNT1,CNT2,DATA,FMHDATE,HDATE,HTIME,I,JOB,MESSAGE
  1. N NODE,NW,OKAY,OPTION,NP,PT,PTM,X,VAR,USERS,USRDATA,WD,WORKDAY,YSTRDAY
  1. ;
  1. K ^TMP($J)
  1. ;
  1. ; make sure DT is defined.
  1. S:'$G(DT) DT=$$DT^XLFDT
  1. ;
  1. ; yesterday - this will be the data that is compiled and stored
  1. S YSTRDAY=$$HADD^XLFDT(KMPRTDAY,-1)
  1. ;
  1. S NODE=""
  1. F S NODE=$O(^KMPTMP("KMPR","DLY",NODE)) Q:NODE="" D
  1. .S HDATE=""
  1. .F S HDATE=$O(^KMPTMP("KMPR","DLY",NODE,HDATE)) Q:HDATE=""!(HDATE'<KMPRTDAY) D
  1. ..; if less than 'yesterday' kill - old data
  1. ..I HDATE<YSTRDAY K ^KMPTMP("KMPR","DLY",NODE,HDATE) Q
  1. ..;
  1. ..S FMHDATE=+$$HTFM^XLFDT(HDATE,1)
  1. ..;
  1. ..; WORKDAY = 0 : weekend or holiday (non-workday)
  1. ..; = 1 : workday
  1. ..;
  1. ..S WORKDAY=$$WORKDAY^XUWORKDY(FMHDATE)
  1. ..;
  1. ..S OPTION=""
  1. ..F S OPTION=$O(^KMPTMP("KMPR","DLY",NODE,HDATE,OPTION)) Q:OPTION="" D
  1. ...K NP,PT
  1. ...S JOB=0,COUNT=""
  1. ...F S JOB=$O(^KMPTMP("KMPR","DLY",NODE,HDATE,OPTION,JOB)) Q:'JOB D
  1. ....S PTM=""
  1. ....F S PTM=$O(^KMPTMP("KMPR","DLY",NODE,HDATE,OPTION,JOB,PTM)) Q:PTM="" D
  1. .....; PTM: non-prime time = 0 prime time = 1
  1. .....S DATA=^KMPTMP("KMPR","DLY",NODE,HDATE,OPTION,JOB,PTM)
  1. .....;
  1. .....; prime time or non-prime time
  1. .....S VAR=$S((WORKDAY&PTM):"PT",1:"NP") Q:VAR=""
  1. .....;
  1. .....; if current data is negative
  1. .....I $P($G(@VAR@(0)),U,5)<0 D
  1. ......S $P(^KMPTMP("KMPR","NEG","DLY",OPTION,"C"),U,5)=$P(@VAR,U,5)
  1. .....;
  1. .....; if new data is negative
  1. .....I ($P(DATA,U,5)<0) D
  1. ......S $P(^KMPTMP("KMPR","NEG","DLY",OPTION,"N"),U,5)=$P(DATA,U,5)
  1. .....;
  1. .....; if sum of pieces are negative
  1. .....I ($P($G(@VAR@(0)),U,5)+$P(DATA,U,5))<0 D
  1. ......S $P(^KMPTMP("KMPR","NEG","DLY",OPTION,"T"),U,5)=($P(@VAR,U,5))_"+"_($P(DATA,U,5))_"="_($P(@VAR,U,5)+$P(DATA,U,5))
  1. .....;
  1. .....; accumulate totals
  1. .....; data elements - pieces 1 - 8
  1. .....F I=1:1:8 S $P(@VAR@(1),U,I)=$P($G(@VAR@(1)),U,I)+$P(DATA,U,I)
  1. .....;
  1. .....S USERS=$G(^TMP($J,HDATE,NODE,JOB)),USRDATA=0
  1. .....;
  1. .....; hour counts - pieces 10 - 33 - offset by -9
  1. .....; hour 0 = piece 10
  1. .....; hour 1 = piece 11
  1. .....; hour 2 = piece 12 ...
  1. .....F I=10:1:33 S CNT=$P(DATA,U,I) I +CNT D
  1. ......S CNT1=$P(CNT,"~"),CNT2=$P(CNT,"~",2)
  1. ......;
  1. ......; set for every hour that this particular $job ran
  1. ......I +CNT2 S $P(USERS,U,(I-9))=$P(USERS,U,(I-9))+1,USRDATA=1
  1. ......;
  1. ......; if workday capture workday counts
  1. ......I WORKDAY D
  1. .......; number of occurrences per hour
  1. .......S $P(PT(1.1),U,(I-9))=$P($G(PT(1.1)),U,(I-9))+CNT1
  1. .......; number of users for this particular option/protocol/rpc
  1. .......S $P(PT(1.2),U,(I-9))=$P($G(PT(1.2)),U,(I-9))+1
  1. ......;
  1. ......; else capture non-workday (weekend/holiday) counts
  1. ......E D
  1. .......; number of occurrences per hour
  1. .......S $P(NP(1.1),U,(I-9))=$P($G(NP(1.1)),U,(I-9))+CNT1
  1. .......; number of users for this particular option/protocol/rpc
  1. .......S $P(NP(1.2),U,(I-9))=$P($G(NP(1.2)),U,(I-9))+1
  1. .....;
  1. .....; will have every hour that this particular $job ran
  1. .....I USRDATA S ^TMP($J,HDATE,NODE,JOB)=USERS
  1. .....;
  1. .....; piece 1 non-prime time - piece 2 prime time
  1. .....S $P(COUNT,U,(PTM+1))=$P(COUNT,U,(PTM+1))+1
  1. .....;
  1. .....; remove data from array
  1. .....K ^KMPTMP("KMPR","DLY",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. ...;
  1. ...; if not filed successfully set into 'ERR' node.
  1. ...I 'OKAY D
  1. ....S ^KMPTMP("KMPR","ERR",HDATE,NODE,OPTION,0)=NP_$P(COUNT,U)
  1. ....S ^KMPTMP("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 ^KMPTMP("KMPR","ERR",HDATE,NODE,OPTION,"MSG",I)=MESSAGE(I)
  1. ;
  1. ; find the total number of jobs that ran first minute of every hour
  1. S HDATE=""
  1. F S HDATE=$O(^TMP($J,HDATE)) Q:HDATE=""!(HDATE'<KMPRTDAY) D
  1. .;
  1. .S FMHDATE=+$$HTFM^XLFDT(HDATE,1)
  1. .S WORKDAY=$$WORKDAY^XUWORKDY(FMHDATE)
  1. .;
  1. .; WD: workday NW: non-workday
  1. .S VAR=$S(WORKDAY:"WD",1:"NW")
  1. .S NODE=""
  1. .F S NODE=$O(^TMP($J,HDATE,NODE)) Q:NODE="" D
  1. ..K NW,WD
  1. ..S JOB=""
  1. ..F S JOB=$O(^TMP($J,HDATE,NODE,JOB)) Q:'JOB D
  1. ...S DATA=^TMP($J,HDATE,NODE,JOB)
  1. ...F I=1:1:24 S CNT=$P(DATA,U,I) I +CNT D
  1. ....S $P(@VAR@(1.1),U,I)=$P($G(@VAR@(1.1)),U,I)+CNT
  1. ....S $P(@VAR@(1.2),U,I)=$P($G(@VAR@(1.2)),U,I)+1
  1. ..;
  1. ..; file number of users information
  1. ..D FILE^KMPRBD03(HDATE,NODE,"#USERS#",.WD,.NW)
  1. ;
  1. K ^TMP($J)
  1. ;
  1. Q