| 1 | KMPRBD02 ;OAK/RAK - RUM Data Compression ;5/28/03  08:36 | 
|---|
| 2 | ;;2.0;CAPACITY MANAGEMENT - RUM;;May 28, 2003 | 
|---|
| 3 | ; | 
|---|
| 4 | ; Background Driver (cont.) | 
|---|
| 5 | ; | 
|---|
| 6 | DAILY(KMPRTDAY) ;-- daily data compression and storage | 
|---|
| 7 | ;---------------------------------------------------------------------- | 
|---|
| 8 | ; KMPRTDAY.. Day in $H format (+$H).  This represents the | 
|---|
| 9 | ;            ending point for compression.  Only dates LESS than | 
|---|
| 10 | ;            KMPRTDAY will be compressed. | 
|---|
| 11 | ; | 
|---|
| 12 | ; At midnight compress hourly info into daily stats. Daily stats are | 
|---|
| 13 | ; stored in file #8971.1.  Hourly data is killed. | 
|---|
| 14 | ;---------------------------------------------------------------------- | 
|---|
| 15 | ; | 
|---|
| 16 | Q:'$G(KMPRTDAY) | 
|---|
| 17 | ; | 
|---|
| 18 | N COUNT,CNT,CNT1,CNT2,DATA,FMHDATE,HDATE,HTIME,I,JOB,MESSAGE | 
|---|
| 19 | N NODE,NW,OKAY,OPTION,NP,PT,PTM,X,VAR,USERS,USRDATA,WD,WORKDAY,YSTRDAY | 
|---|
| 20 | ; | 
|---|
| 21 | K ^TMP($J) | 
|---|
| 22 | ; | 
|---|
| 23 | ; make sure DT is defined. | 
|---|
| 24 | S:'$G(DT) DT=$$DT^XLFDT | 
|---|
| 25 | ; | 
|---|
| 26 | ; yesterday - this will be the data that is compiled and stored | 
|---|
| 27 | S YSTRDAY=$$HADD^XLFDT(KMPRTDAY,-1) | 
|---|
| 28 | ; | 
|---|
| 29 | S NODE="" | 
|---|
| 30 | F  S NODE=$O(^KMPTMP("KMPR","DLY",NODE)) Q:NODE=""  D | 
|---|
| 31 | .S HDATE="" | 
|---|
| 32 | .F  S HDATE=$O(^KMPTMP("KMPR","DLY",NODE,HDATE)) Q:HDATE=""!(HDATE'<KMPRTDAY)  D | 
|---|
| 33 | ..; if less than 'yesterday' kill - old data | 
|---|
| 34 | ..I HDATE<YSTRDAY K ^KMPTMP("KMPR","DLY",NODE,HDATE) Q | 
|---|
| 35 | ..; | 
|---|
| 36 | ..S FMHDATE=+$$HTFM^XLFDT(HDATE,1) | 
|---|
| 37 | ..; | 
|---|
| 38 | ..; WORKDAY = 0 : weekend or holiday (non-workday) | 
|---|
| 39 | ..;         = 1 : workday | 
|---|
| 40 | ..; | 
|---|
| 41 | ..S WORKDAY=$$WORKDAY^XUWORKDY(FMHDATE) | 
|---|
| 42 | ..; | 
|---|
| 43 | ..S OPTION="" | 
|---|
| 44 | ..F  S OPTION=$O(^KMPTMP("KMPR","DLY",NODE,HDATE,OPTION)) Q:OPTION=""  D | 
|---|
| 45 | ...K NP,PT | 
|---|
| 46 | ...S JOB=0,COUNT="" | 
|---|
| 47 | ...F  S JOB=$O(^KMPTMP("KMPR","DLY",NODE,HDATE,OPTION,JOB)) Q:'JOB  D | 
|---|
| 48 | ....S PTM="" | 
|---|
| 49 | ....F  S PTM=$O(^KMPTMP("KMPR","DLY",NODE,HDATE,OPTION,JOB,PTM)) Q:PTM=""  D | 
|---|
| 50 | .....; PTM:  non-prime time = 0   prime time = 1 | 
|---|
| 51 | .....S DATA=^KMPTMP("KMPR","DLY",NODE,HDATE,OPTION,JOB,PTM) | 
|---|
| 52 | .....; | 
|---|
| 53 | .....; prime time or non-prime time | 
|---|
| 54 | .....S VAR=$S((WORKDAY&PTM):"PT",1:"NP") Q:VAR="" | 
|---|
| 55 | .....; | 
|---|
| 56 | .....; if current data is negative | 
|---|
| 57 | .....I $P($G(@VAR@(0)),U,5)<0 D | 
|---|
| 58 | ......S $P(^KMPTMP("KMPR","NEG","DLY",OPTION,"C"),U,5)=$P(@VAR,U,5) | 
|---|
| 59 | .....; | 
|---|
| 60 | .....; if new data is negative | 
|---|
| 61 | .....I ($P(DATA,U,5)<0) D | 
|---|
| 62 | ......S $P(^KMPTMP("KMPR","NEG","DLY",OPTION,"N"),U,5)=$P(DATA,U,5) | 
|---|
| 63 | .....; | 
|---|
| 64 | .....; if sum of pieces are negative | 
|---|
| 65 | .....I ($P($G(@VAR@(0)),U,5)+$P(DATA,U,5))<0 D | 
|---|
| 66 | ......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)) | 
|---|
| 67 | .....; | 
|---|
| 68 | .....; accumulate totals | 
|---|
| 69 | .....; data elements - pieces 1 - 8 | 
|---|
| 70 | .....F I=1:1:8 S $P(@VAR@(1),U,I)=$P($G(@VAR@(1)),U,I)+$P(DATA,U,I) | 
|---|
| 71 | .....; | 
|---|
| 72 | .....S USERS=$G(^TMP($J,HDATE,NODE,JOB)),USRDATA=0 | 
|---|
| 73 | .....; | 
|---|
| 74 | .....; hour counts - pieces 10 - 33 - offset by -9 | 
|---|
| 75 | .....; hour 0 = piece 10 | 
|---|
| 76 | .....; hour 1 = piece 11 | 
|---|
| 77 | .....; hour 2 = piece 12 ... | 
|---|
| 78 | .....F I=10:1:33 S CNT=$P(DATA,U,I) I +CNT D | 
|---|
| 79 | ......S CNT1=$P(CNT,"~"),CNT2=$P(CNT,"~",2) | 
|---|
| 80 | ......; | 
|---|
| 81 | ......; set for every hour that this particular $job ran | 
|---|
| 82 | ......I +CNT2 S $P(USERS,U,(I-9))=$P(USERS,U,(I-9))+1,USRDATA=1 | 
|---|
| 83 | ......; | 
|---|
| 84 | ......; if workday capture workday counts | 
|---|
| 85 | ......I WORKDAY D | 
|---|
| 86 | .......; number of occurrences per hour | 
|---|
| 87 | .......S $P(PT(1.1),U,(I-9))=$P($G(PT(1.1)),U,(I-9))+CNT1 | 
|---|
| 88 | .......; number of users for this particular option/protocol/rpc | 
|---|
| 89 | .......S $P(PT(1.2),U,(I-9))=$P($G(PT(1.2)),U,(I-9))+1 | 
|---|
| 90 | ......; | 
|---|
| 91 | ......; else capture non-workday (weekend/holiday) counts | 
|---|
| 92 | ......E  D | 
|---|
| 93 | .......; number of occurrences per hour | 
|---|
| 94 | .......S $P(NP(1.1),U,(I-9))=$P($G(NP(1.1)),U,(I-9))+CNT1 | 
|---|
| 95 | .......; number of users for this particular option/protocol/rpc | 
|---|
| 96 | .......S $P(NP(1.2),U,(I-9))=$P($G(NP(1.2)),U,(I-9))+1 | 
|---|
| 97 | .....; | 
|---|
| 98 | .....; will have every hour that this particular $job ran | 
|---|
| 99 | .....I USRDATA S ^TMP($J,HDATE,NODE,JOB)=USERS | 
|---|
| 100 | .....; | 
|---|
| 101 | .....; piece 1 non-prime time - piece 2 prime time | 
|---|
| 102 | .....S $P(COUNT,U,(PTM+1))=$P(COUNT,U,(PTM+1))+1 | 
|---|
| 103 | .....; | 
|---|
| 104 | .....; remove data from array | 
|---|
| 105 | .....K ^KMPTMP("KMPR","DLY",NODE,HDATE,OPTION,JOB,PTM) | 
|---|
| 106 | ...; | 
|---|
| 107 | ...; back to OPTION level | 
|---|
| 108 | ...; file data into file #8971.1 | 
|---|
| 109 | ...D FILE^KMPRBD03(HDATE,NODE,OPTION,.PT,.NP,$P(COUNT,U,2),$P(COUNT,U),.OKAY,.MESSAGE) | 
|---|
| 110 | ...; | 
|---|
| 111 | ...; if not filed successfully set into 'ERR' node. | 
|---|
| 112 | ...I 'OKAY D | 
|---|
| 113 | ....S ^KMPTMP("KMPR","ERR",HDATE,NODE,OPTION,0)=NP_$P(COUNT,U) | 
|---|
| 114 | ....S ^KMPTMP("KMPR","ERR",HDATE,NODE,OPTION,1)=PT_$P(COUNT,U,2) | 
|---|
| 115 | ....F I=0:0 S I=$O(MESSAGE(I)) Q:'I  D | 
|---|
| 116 | .....S ^KMPTMP("KMPR","ERR",HDATE,NODE,OPTION,"MSG",I)=MESSAGE(I) | 
|---|
| 117 | ; | 
|---|
| 118 | ; find the total number of jobs that ran first minute of every hour | 
|---|
| 119 | S HDATE="" | 
|---|
| 120 | F  S HDATE=$O(^TMP($J,HDATE)) Q:HDATE=""!(HDATE'<KMPRTDAY)  D | 
|---|
| 121 | .; | 
|---|
| 122 | .S FMHDATE=+$$HTFM^XLFDT(HDATE,1) | 
|---|
| 123 | .S WORKDAY=$$WORKDAY^XUWORKDY(FMHDATE) | 
|---|
| 124 | .; | 
|---|
| 125 | .;        WD: workday     NW: non-workday | 
|---|
| 126 | .S VAR=$S(WORKDAY:"WD",1:"NW") | 
|---|
| 127 | .S NODE="" | 
|---|
| 128 | .F  S NODE=$O(^TMP($J,HDATE,NODE)) Q:NODE=""  D | 
|---|
| 129 | ..K NW,WD | 
|---|
| 130 | ..S JOB="" | 
|---|
| 131 | ..F  S JOB=$O(^TMP($J,HDATE,NODE,JOB)) Q:'JOB  D | 
|---|
| 132 | ...S DATA=^TMP($J,HDATE,NODE,JOB) | 
|---|
| 133 | ...F I=1:1:24 S CNT=$P(DATA,U,I) I +CNT D | 
|---|
| 134 | ....S $P(@VAR@(1.1),U,I)=$P($G(@VAR@(1.1)),U,I)+CNT | 
|---|
| 135 | ....S $P(@VAR@(1.2),U,I)=$P($G(@VAR@(1.2)),U,I)+1 | 
|---|
| 136 | ..; | 
|---|
| 137 | ..; file number of users information | 
|---|
| 138 | ..D FILE^KMPRBD03(HDATE,NODE,"#USERS#",.WD,.NW) | 
|---|
| 139 | ; | 
|---|
| 140 | K ^TMP($J) | 
|---|
| 141 | ; | 
|---|
| 142 | Q | 
|---|