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='days' content='Day(s)';
70 INCLUDE option value='weeks' content='Week(s)';
71 INCLUDE option value='months' content='Month(s)';
75 NEXT IF p == 'action';
76 NEXT IF p == 'runtime';
77 INCLUDE hidden name=p value=CGI.param(p);
80 INCLUDE submit name='action' value='Save';
89 stage2 = CGI.param('stage2');
90 runtime = CGI.param('runtime') OR 'now';
91 pub = CGI.param('publicreport') OR 'f';
97 logme([p,CGI.param(p)]);
109 IF p_obj.$p1.$p2.$p3.$p4.$p5.$p6.defined;
110 IF p_obj.$p1.$p2.$p3.$p4.$p5.$p6.size > 1;
111 p_obj.$p1.$p2.$p3.$p4.$p5.$p6.push(CGI.param(p));
113 tmp = [ p_obj.$p1.$p2.$p3.$p4.$p5.$p6, CGI.param(p) ];
114 p_obj.$p1.$p2.$p3.$p4.$p5.$p6 = tmp;
117 p_obj.$p1.$p2.$p3.$p4.$p5.$p6 = CGI.param(p);
122 IF p_obj.$p1.$p2.$p3.$p4.$p5.defined;
123 IF p_obj.$p1.$p2.$p3.$p4.$p5.size > 1;
124 p_obj.$p1.$p2.$p3.$p4.$p5.push(CGI.param(p));
126 tmp = [ p_obj.$p1.$p2.$p3.$p4.$p5, CGI.param(p) ];
127 p_obj.$p1.$p2.$p3.$p4.$p5 = tmp;
130 p_obj.$p1.$p2.$p3.$p4.$p5 = CGI.param(p);
135 IF p_obj.$p1.$p2.$p3.$p4.defined;
136 IF p_obj.$p1.$p2.$p3.$p4.size > 1;
137 p_obj.$p1.$p2.$p3.$p4.push(CGI.param(p));
139 tmp = [ p_obj.$p1.$p2.$p3.$p4, CGI.param(p) ];
140 p_obj.$p1.$p2.$p3.$p4 = tmp;
143 p_obj.$p1.$p2.$p3.$p4 = CGI.param(p);
148 IF p_obj.$p1.$p2.$p3.defined;
149 IF p_obj.$p1.$p2.$p3.size > 1;
150 p_obj.$p1.$p2.$p3.push(CGI.param(p));
152 tmp = [ p_obj.$p1.$p2.$p3, CGI.param(p) ];
153 p_obj.$p1.$p2.$p3 = tmp;
156 p_obj.$p1.$p2.$p3 = CGI.param(p);
161 IF p_obj.$p1.$p2.defined;
162 IF p_obj.$p1.$p2.size > 1;
163 p_obj.$p1.$p2.push(CGI.param(p));
165 tmp = [ p_obj.$p1.$p2, CGI.param(p) ];
169 p_obj.$p1.$p2 = CGI.param(p);
174 p_obj.$p = CGI.param(p);
179 params = utils.perl2JSON( p_obj );
181 recurrence = '0 sec';
182 IF CGI.param('recurrence-count') > 0;
183 recurrence = CGI.param('recurrence-count') _ ' ' _ CGI.param('recurrence-interval');
186 logme([stage2, params, owner, pub]);
188 q = DBI.prepare( stage3_insert );
189 CALL q.execute(stage2, params, owner, pub, runtime, recurrence);
191 FOR new_s3 = DBI.query("SELECT * FROM reporter.stage3_id_seq;");
192 rid = new_s3.last_value;
195 tmpl = templates.$tid;
201 q = DBI.prepare( 'DELETE FROM reporter.stage3 WHERE id = ?' );
202 CALL q.execute(rpt.id);
206 q = DBI.prepare( 'DELETE FROM reporter.output WHERE id = ?' );
207 CALL q.execute(out.id);
212 q = DBI.prepare( 'UPDATE reporter.stage3 SET rerun = TRUE WHERE id = ?' );
213 CALL q.execute(rpt.id);
219 params = utils.JSON2perl( rpt.params );
220 s2_params = utils.JSON2perl( tmpl.params );
224 WRAPPER html/table style="border-collapse:collapse";
226 INCLUDE html/cell content="<b>Report Name</b>" style="border:solid gray 1px;";
227 INCLUDE html/cell content=params.reportname style="border:solid gray 1px;";
230 INCLUDE html/cell content="<b>Based on Template</b>" style="border:solid gray 1px;";
231 INCLUDE html/cell content=s2_params.templatename style="border:solid gray 1px;";
234 INCLUDE html/cell content="<b>Creation Time</b>" style="border:solid gray 1px;";
235 INCLUDE html/cell content=rpt.create_date style="border:solid gray 1px;";
238 INCLUDE html/cell content="<b>Scheduled Run Time</b>" style="border:solid gray 1px;";
239 INCLUDE html/cell content=rpt.runtime style="border:solid gray 1px;";
242 INCLUDE html/cell content="<b>Recurrence Interval</b>" style="border:solid gray 1px;";
243 INCLUDE html/cell content=rpt.recurrence style="border:solid gray 1px;";
246 INCLUDE html/cell content="<b>Actions</b>" style="border:solid gray 1px;";
247 WRAPPER html/cell style="border:solid gray 1px;";
248 INCLUDE anchor content='Refresh' href=CGI.url('-path', 1) _ '?id=' _ rpt.id;
249 ' ';
250 IF user.id == rpt.owner;
251 INCLUDE anchor content='Run again' href=CGI.url('-path', 1) _ '?action=rerun&id=' _ rpt.id;
252 ' ';
253 INCLUDE anchor content='Delete' href=CGI.url('-path', 1) _ '?action=delete_stage3&id=' _ rpt.id;
254 ' ';
263 type_map = { 'csv' => 'csv', 'excel' => 'xls', 'html' => 'html' };
266 '<b>Report Runs:</b>';
267 run_q = DBI.prepare("SELECT * FROM reporter.output WHERE stage3 = ? ORDER BY queue_time DESC");
268 FOR run = run_q.execute(rpt.id);
269 WRAPPER html/table style="border-collapse:collapse";
271 INCLUDE html/cell content="<b>Current State</b>" style="border:solid gray 1px;" width="20%";
272 WRAPPER html/cell style="border:solid gray 1px;";
274 IF run.state == 'complete';
276 FOR f = params.output_format.list;
277 h = tmpl.stage1 _ '/' _ tmpl.id _
278 '/' _ rpt.id _ '/' _ run.id _
279 '/report-data.' _ type_map.$f;
280 link(content=f, href=h);
289 INCLUDE html/cell content="<b>Queue Time</b>" style="border:solid gray 1px;";
290 INCLUDE html/cell content=run.queue_time style="border:solid gray 1px;";
294 INCLUDE html/cell content="<b>Run Time</b>" style="border:solid gray 1px;";
295 INCLUDE html/cell content=run.run_time style="border:solid gray 1px;";
298 IF run.complete_time;
300 INCLUDE html/cell content="<b>Complete Time</b>" style="border:solid gray 1px;";
301 INCLUDE html/cell content=run.complete_time style="border:solid gray 1px;";
306 INCLUDE html/cell content="<b>Query</b>" style="border:solid gray 1px;";
307 INCLUDE html/cell content=run.query style="border:solid gray 1px;";
312 INCLUDE html/cell content="<b>Error</b>" style="border:solid gray 1px;";
313 INCLUDE html/cell content=run.error style="border:solid gray 1px;";
318 INCLUDE html/cell content="<b>Error Time</b>" style="border:solid gray 1px;";
319 INCLUDE html/cell content=run.error_time style="border:solid gray 1px;";
322 IF run.complete_time || run.error_time;
324 INCLUDE html/cell content="<b>Actions</b>" style="border:solid gray 1px;";
325 WRAPPER html/cell style="border:solid gray 1px;";
326 IF user.id == rpt.owner;
327 INCLUDE anchor content='Delete' href=CGI.url('-path', 1) _ '?action=delete_output&output=' _ run.id;
328 ' ';