6 PROCESS logic_header.ttk;
9 templates = DBI.tie('reporter.stage2', 'id')
10 reports = DBI.tie('reporter.stage3', 'id')
11 output = DBI.tie('reporter.output', 'id')
16 IF CGI.param('output');
17 oid = CGI.param('output');
24 tmpl = templates.$tid;
28 rid = CGI.param('id');
31 tmpl = templates.$tid;
36 INCLUDE header.ttk + navbar.ttk title="Reports";
38 IF CGI.param('action') == 'Schedule';
39 PROCESS schedule_stage3;
40 ELSIF CGI.param('action') == 'Save';
42 ELSIF CGI.param('action') == 'delete_stage3';
43 PROCESS delete_stage3;
44 ELSIF CGI.param('action') == 'delete_output';
45 PROCESS delete_output;
46 ELSIF CGI.param('action') == 'rerun';
48 ELSIF CGI.param('action') == 'Run Now';
50 ELSIF CGI.param('id');
60 BLOCK schedule_stage3;
61 WRAPPER form method='POST';
63 INCLUDE text name='runtime' value='yyyy-mm-dd';
66 'Optional Recurrence:';
67 INCLUDE text name='recurrence-count' value='0';
68 WRAPPER select name='recurrence-interval';
69 INCLUDE option value='minutes' content='Minutes(s)'; # for testing
70 INCLUDE option value='hours' content='Hours(s)'; # for testing
71 INCLUDE option value='days' content='Day(s)';
72 INCLUDE option value='weeks' content='Week(s)';
73 INCLUDE option value='months' content='Month(s)';
77 NEXT IF p == 'action';
78 NEXT IF p == 'runtime';
79 FOR pval = CGI.param(p);
80 INCLUDE hidden name=p value=pval;
84 INCLUDE submit name='action' value='Save';
93 stage2 = CGI.param('stage2');
94 runtime = CGI.param('runtime') OR 'now';
95 pub = CGI.param('publicreport') OR 'f';
101 logme([p,CGI.param(p)]);
103 parts = p.split(':');
113 IF p_obj.$p1.$p2.$p3.$p4.$p5.$p6.defined;
114 IF p_obj.$p1.$p2.$p3.$p4.$p5.$p6.size > 1;
115 p_obj.$p1.$p2.$p3.$p4.$p5.$p6.push(CGI.param(p));
117 tmp = [ p_obj.$p1.$p2.$p3.$p4.$p5.$p6, CGI.param(p) ];
118 p_obj.$p1.$p2.$p3.$p4.$p5.$p6 = tmp;
121 p_obj.$p1.$p2.$p3.$p4.$p5.$p6 = CGI.param(p);
126 IF p_obj.$p1.$p2.$p3.$p4.$p5.defined;
127 IF p_obj.$p1.$p2.$p3.$p4.$p5.size > 1;
128 p_obj.$p1.$p2.$p3.$p4.$p5.push(CGI.param(p));
130 tmp = [ p_obj.$p1.$p2.$p3.$p4.$p5, CGI.param(p) ];
131 p_obj.$p1.$p2.$p3.$p4.$p5 = tmp;
134 p_obj.$p1.$p2.$p3.$p4.$p5 = CGI.param(p);
139 IF p_obj.$p1.$p2.$p3.$p4.defined;
140 IF p_obj.$p1.$p2.$p3.$p4.size > 1;
141 p_obj.$p1.$p2.$p3.$p4.push(CGI.param(p));
143 tmp = [ p_obj.$p1.$p2.$p3.$p4, CGI.param(p) ];
144 p_obj.$p1.$p2.$p3.$p4 = tmp;
147 p_obj.$p1.$p2.$p3.$p4 = CGI.param(p);
152 IF p_obj.$p1.$p2.$p3.defined;
153 IF p_obj.$p1.$p2.$p3.size > 1;
154 p_obj.$p1.$p2.$p3.push(CGI.param(p));
156 tmp = [ p_obj.$p1.$p2.$p3, CGI.param(p) ];
157 p_obj.$p1.$p2.$p3 = tmp;
160 p_obj.$p1.$p2.$p3 = CGI.param(p);
165 IF p_obj.$p1.$p2.defined;
166 IF p_obj.$p1.$p2.size > 1;
167 p_obj.$p1.$p2.push(CGI.param(p));
169 tmp = [ p_obj.$p1.$p2, CGI.param(p) ];
173 p_obj.$p1.$p2 = CGI.param(p);
178 p_obj.$p = CGI.param(p);
183 params = utils.perl2JSON( p_obj );
185 recurrence = '0 sec';
186 IF CGI.param('recurrence-count') > 0;
187 recurrence = CGI.param('recurrence-count') _ ' ' _ CGI.param('recurrence-interval');
190 logme([stage2, params, owner, pub]);
192 q = DBI.prepare( stage3_insert );
193 CALL q.execute(stage2, params, owner, pub, runtime, recurrence);
195 FOR new_s3 = DBI.query("SELECT * FROM reporter.stage3_id_seq;");
196 rid = new_s3.last_value;
199 tmpl = templates.$tid;
205 q = DBI.prepare( 'DELETE FROM reporter.stage3 WHERE id = ?' );
206 CALL q.execute(rpt.id);
210 q = DBI.prepare( 'DELETE FROM reporter.output WHERE id = ?' );
211 CALL q.execute(out.id);
216 q = DBI.prepare( 'UPDATE reporter.stage3 SET rerun = TRUE WHERE id = ?' );
217 CALL q.execute(rpt.id);
223 params = utils.JSON2perl( rpt.params );
224 s2_params = utils.JSON2perl( tmpl.params );
228 WRAPPER html/table style="border-collapse:collapse";
230 INCLUDE html/cell content="<b>Report Name</b>" style="border:solid gray 1px;";
231 INCLUDE html/cell content=params.reportname style="border:solid gray 1px;";
234 INCLUDE html/cell content="<b>Based on Template</b>" style="border:solid gray 1px;";
235 INCLUDE html/cell content=s2_params.templatename style="border:solid gray 1px;";
238 INCLUDE html/cell content="<b>Creation Time</b>" style="border:solid gray 1px;";
239 INCLUDE html/cell content=rpt.create_date style="border:solid gray 1px;";
242 INCLUDE html/cell content="<b>Scheduled Run Time</b>" style="border:solid gray 1px;";
243 INCLUDE html/cell content=rpt.runtime style="border:solid gray 1px;";
246 INCLUDE html/cell content="<b>Recurrence Interval</b>" style="border:solid gray 1px;";
247 INCLUDE html/cell content=rpt.recurrence style="border:solid gray 1px;";
250 INCLUDE html/cell content="<b>Actions</b>" style="border:solid gray 1px;";
251 WRAPPER html/cell style="border:solid gray 1px;";
252 INCLUDE anchor content='Refresh' href=CGI.url('-path', 1) _ '?id=' _ rpt.id;
253 ' ';
254 IF user.id == rpt.owner;
255 INCLUDE anchor content='Run again' href=CGI.url('-path', 1) _ '?action=rerun&id=' _ rpt.id;
256 ' ';
257 INCLUDE anchor content='Delete' href=CGI.url('-path', 1) _ '?action=delete_stage3&id=' _ rpt.id;
258 ' ';
267 type_map = { 'csv' => 'csv', 'excel' => 'xls', 'html' => 'html' };
270 '<b>Report Runs:</b>';
271 run_q = DBI.prepare("SELECT * FROM reporter.output WHERE stage3 = ? ORDER BY queue_time DESC");
272 FOR run = run_q.execute(rpt.id);
273 WRAPPER html/table style="border-collapse:collapse";
275 INCLUDE html/cell content="<b>Current State</b>" style="border:solid gray 1px;" width="20%";
276 WRAPPER html/cell style="border:solid gray 1px;";
278 IF run.state == 'complete';
280 FOR f = params.output_format.list;
281 h = tmpl.stage1 _ '/' _ tmpl.id _
282 '/' _ rpt.id _ '/' _ run.id _
283 '/report-data.' _ type_map.$f;
284 link(content=f, href=h);
293 INCLUDE html/cell content="<b>Queue Time</b>" style="border:solid gray 1px;";
294 INCLUDE html/cell content=run.queue_time style="border:solid gray 1px;";
298 INCLUDE html/cell content="<b>Run Time</b>" style="border:solid gray 1px;";
299 INCLUDE html/cell content=run.run_time style="border:solid gray 1px;";
302 IF run.complete_time;
304 INCLUDE html/cell content="<b>Complete Time</b>" style="border:solid gray 1px;";
305 INCLUDE html/cell content=run.complete_time style="border:solid gray 1px;";
310 INCLUDE html/cell content="<b>Query</b>" style="border:solid gray 1px;";
311 INCLUDE html/cell content=run.query style="border:solid gray 1px;";
316 INCLUDE html/cell content="<b>Error</b>" style="border:solid gray 1px;";
317 INCLUDE html/cell content=run.error style="border:solid gray 1px;";
322 INCLUDE html/cell content="<b>Error Time</b>" style="border:solid gray 1px;";
323 INCLUDE html/cell content=run.error_time style="border:solid gray 1px;";
326 IF run.complete_time || run.error_time;
328 INCLUDE html/cell content="<b>Actions</b>" style="border:solid gray 1px;";
329 WRAPPER html/cell style="border:solid gray 1px;";
330 IF user.id == rpt.owner;
331 INCLUDE anchor content='Delete' href=CGI.url('-path', 1) _ '?action=delete_output&output=' _ run.id;
332 ' ';