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
|
---|