@@ -40,7 +40,7 @@ CREATE TABLE `Jobs` (
40
40
` JobName` VARCHAR (128 ) NOT NULL DEFAULT ' Unknown' ,
41
41
` Owner` VARCHAR (64 ) NOT NULL DEFAULT ' Unknown' ,
42
42
` OwnerGroup` VARCHAR (128 ) NOT NULL DEFAULT ' Unknown' ,
43
- ` VO` VARCHAR (32 ) NOT NULL DEFAULT ' Unknown' ,
43
+ ` VO` VARCHAR (128 ) NOT NULL DEFAULT ' Unknown' ,
44
44
` SubmissionTime` DATETIME DEFAULT NULL ,
45
45
` RescheduleTime` DATETIME DEFAULT NULL ,
46
46
` LastUpdateTime` DATETIME DEFAULT NULL ,
@@ -126,9 +126,110 @@ CREATE TABLE `JobCommands` (
126
126
` JobID` INT (11 ) UNSIGNED NOT NULL ,
127
127
` Command` VARCHAR (100 ) NOT NULL ,
128
128
` Arguments` VARCHAR (100 ) NOT NULL ,
129
- ` Status` VARCHAR (64 ) NOT NULL DEFAULT ' Received' ,
129
+ ` Status` VARCHAR (32 ) NOT NULL DEFAULT ' Received' ,
130
130
` ReceptionTime` DATETIME NOT NULL ,
131
131
` ExecutionTime` DATETIME DEFAULT NULL ,
132
132
PRIMARY KEY (` JobID` ,` Arguments` ,` ReceptionTime` ),
133
133
FOREIGN KEY (` JobID` ) REFERENCES ` Jobs` (` JobID` )
134
134
) ENGINE= InnoDB DEFAULT CHARSET= utf8mb4;
135
+
136
+
137
+ -- ------------------------------------------------------------------------------
138
+ -- summary table and triggers
139
+ -- ------------------------------------------------------------------------------
140
+
141
+ -- summary for JobsHistory
142
+
143
+ DROP TABLE IF EXISTS ` JobsHistorySummary` ;
144
+ CREATE TABLE `JobsHistorySummary ` (
145
+ ` ID` INT AUTO_INCREMENT PRIMARY KEY ,
146
+ ` Status` VARCHAR (32 ),
147
+ ` Site` VARCHAR (100 ),
148
+ ` Owner` VARCHAR (32 ),
149
+ ` OwnerGroup` VARCHAR (128 ),
150
+ ` VO` VARCHAR (128 ),
151
+ ` JobGroup` VARCHAR (32 ),
152
+ ` JobType` VARCHAR (32 ),
153
+ ` ApplicationStatus` VARCHAR (255 ),
154
+ ` MinorStatus` VARCHAR (128 ),
155
+ ` JobCount` INT ,
156
+ RescheduleSum INT ,
157
+ UNIQUE KEY uq_summary (
158
+ ` Status` ,
159
+ ` Site` ,
160
+ ` Owner` ,
161
+ ` OwnerGroup` (32 ),
162
+ ` VO` ,
163
+ ` JobGroup` ,
164
+ ` JobType` ,
165
+ ` ApplicationStatus` (128 ),
166
+ ` MinorStatus`
167
+ )
168
+ ) ENGINE= InnoDB DEFAULT CHARSET= utf8mb4;
169
+
170
+
171
+ -- now the triggers
172
+
173
+ DELIMITER //
174
+
175
+ CREATE TRIGGER trg_Jobs_insert
176
+ AFTER INSERT ON Jobs
177
+ FOR EACH ROW
178
+ BEGIN
179
+ INSERT INTO JobsHistorySummary (Status, Site, Owner, OwnerGroup, VO, JobGroup, JobType, ApplicationStatus, MinorStatus, JobCount, RescheduleSum)
180
+ VALUES (NEW .Status , NEW .Site , NEW .Owner , NEW .OwnerGroup , NEW .VO , NEW .JobGroup , NEW .JobType , NEW .ApplicationStatus , NEW .MinorStatus , 1 , NEW .RescheduleCounter )
181
+ ON DUPLICATE KEY UPDATE JobCount = JobCount + 1 , RescheduleSum = RescheduleSum + NEW .RescheduleCounter ;
182
+ END;
183
+ //
184
+
185
+ CREATE TRIGGER trg_Jobs_delete
186
+ AFTER DELETE ON Jobs
187
+ FOR EACH ROW
188
+ BEGIN
189
+ UPDATE JobsHistorySummary
190
+ SET JobCount = JobCount - 1 , RescheduleSum = RescheduleSum - OLD .RescheduleCounter
191
+ WHERE Status = OLD .Status
192
+ AND Site = OLD .Site
193
+ AND Owner = OLD .Owner
194
+ AND OwnerGroup = OLD .OwnerGroup
195
+ AND VO = OLD .VO
196
+ AND JobGroup = OLD .JobGroup
197
+ AND JobType = OLD .JobType
198
+ AND ApplicationStatus = OLD .ApplicationStatus
199
+ AND MinorStatus = OLD .MinorStatus ;
200
+
201
+ -- Optional cleanup (remove zero rows)
202
+ DELETE FROM JobsHistorySummary WHERE JobCount = 0 ;
203
+ END;
204
+ //
205
+
206
+ CREATE TRIGGER trg_Jobs_update_status
207
+ AFTER UPDATE ON Jobs
208
+ FOR EACH ROW
209
+ BEGIN
210
+ IF OLD .Status != NEW .Status THEN
211
+
212
+ -- Decrease count from old status
213
+ UPDATE JobsHistorySummary
214
+ SET JobCount = JobCount - 1 , RescheduleSum = RescheduleSum - OLD .RescheduleCounter
215
+ WHERE Status = OLD .Status
216
+ AND Site = OLD .Site
217
+ AND Owner = OLD .Owner
218
+ AND OwnerGroup = OLD .OwnerGroup
219
+ AND VO = OLD .VO
220
+ AND JobGroup = OLD .JobGroup
221
+ AND JobType = OLD .JobType
222
+ AND ApplicationStatus = OLD .ApplicationStatus
223
+ AND MinorStatus = OLD .MinorStatus ;
224
+
225
+ -- Delete row if count drops to zero
226
+ DELETE FROM JobsHistorySummary WHERE JobCount = 0 ;
227
+
228
+ -- Increase count for new status
229
+ INSERT INTO JobsHistorySummary (Status, Site, Owner, OwnerGroup, JobGroup, VO, JobType, ApplicationStatus, MinorStatus, JobCount, RescheduleSum)
230
+ VALUES (NEW .Status , NEW .Site , NEW .Owner , NEW .OwnerGroup , NEW .JobGroup , NEW .VO , NEW .JobType , NEW .ApplicationStatus , NEW .MinorStatus , 1 , NEW .RescheduleCounter )
231
+ ON DUPLICATE KEY UPDATE JobCount = JobCount + 1 , RescheduleSum = RescheduleSum + NEW .RescheduleCounter ;
232
+
233
+ END IF;
234
+ END;
235
+ //
0 commit comments