return $self->{_builder};
}
+sub relative_time {
+ my $self = shift;
+ my $t = shift;
+ $self->builder->{_relative_time} = $t if (defined $t);
+ return $self->builder->{_relative_time};
+}
+
sub resolve_param {
my $self = shift;
my $val = shift;
sub toSQL {
my $self = shift;
+ my $rtime = $self->relative_time || 'now';
+
+ $rtime =~ s/\\/\\\\/go;
+ $rtime =~ s/'/\\'/go;
+
my $val = $self->{params};
$val = $$val[0] if (ref($val));
$val =~ s/\\/\\\\/go;
$val =~ s/'/\\'/go;
- return "EXTRACT(YEAR FROM NOW() + '$val years')";
+ return "EXTRACT(YEAR FROM '$rtime'::TIMESTAMPTZ + '$val years')";
}
sub toSQL {
my $self = shift;
+ my $rtime = $self->relative_time || 'now';
+
+ $rtime =~ s/\\/\\\\/go;
+ $rtime =~ s/'/\\'/go;
+
my $val = $self->{params};
$val = $$val[0] if (ref($val));
$val =~ s/\\/\\\\/go;
$val =~ s/'/\\'/go;
- return "EXTRACT(YEAR FROM NOW() + '$val months')" .
- " || '-' || LPAD(EXTRACT(MONTH FROM NOW() + '$val months'),2,'0')";
+ return "EXTRACT(YEAR FROM '$rtime'::TIMESTAMPTZ + '$val months')" .
+ " || '-' || LPAD(EXTRACT(MONTH FROM '$rtime'::TIMESTAMPTZ + '$val months'),2,'0')";
}
sub toSQL {
my $self = shift;
+ my $rtime = $self->relative_time || 'now';
+
+ $rtime =~ s/\\/\\\\/go;
+ $rtime =~ s/'/\\'/go;
+
my $val = $self->{params};
$val = $$val[0] if (ref($val));
$val =~ s/\\/\\\\/go;
$val =~ s/'/\\'/go;
- return "DATE(NOW() + '$val days')";
+ return "DATE('$rtime'::TIMESTAMPTZ + '$val days')";
}
sub toSQL {
my $self = shift;
+ my $rtime = $self->relative_time || 'now';
+
+ $rtime =~ s/\\/\\\\/go;
+ $rtime =~ s/'/\\'/go;
+
my $val = $self->{params};
$val = $$val[0] if (ref($val));
$val =~ s/\\/\\\\/go;
$val =~ s/'/\\'/go;
- return "EXTRACT(WEEK FROM NOW() + '$val weeks')";
+ return "EXTRACT(WEEK FROM '$rtime'::TIMESTAMPTZ + '$val weeks')";
}
use Spreadsheet::WriteExcel::Big;
use OpenSRF::EX qw/:try/;
use OpenSRF::Utils qw/:daemon/;
-use OpenSRF::Utils::Logger qw/:level/;
+#use OpenSRF::Utils::Logger qw/:level/;
use OpenSRF::System;
use OpenSRF::AppSession;
use OpenSRF::Utils::SettingsClient;
die "I seem to be running already. If not remove $lockfile, try again\n";
}
-open(F, ">$lockfile");
-print F $$;
-close F;
-
OpenSRF::System->bootstrap_client( config_file => $config );
# XXX Get this stuff from the settings server
my ($dbh,$running,$sth,@reports,$run, $current_time);
-daemonize("Clark Kent, waiting for trouble") if ($daemon);
+if ($daemon) {
+ open(F, ">$lockfile");
+ print F $$;
+ close F;
+ daemonize("Clark Kent, waiting for trouble");
+}
+
DAEMON:
$b->register_params( JSON->JSON2perl( $r->{report}->{data} ) );
$r->{resultset} = $b->parse_report( JSON->JSON2perl( $r->{report}->{template}->{data} ) );
+ $r->{resultset}->relative_time($r->{run_time});
push @reports, $r;
}
try {
$dbh->do(<<' SQL',{}, $r->{id});
UPDATE reporter.schedule
- SET start_time = 'now',
+ SET start_time = now()
WHERE id = ?;
SQL
my $output_dir = "$output_base/$s2/$s3/$output";
- if ( $r->{csv_format} eq 't') {
+ if ( $r->{csv_format} ) {
build_csv("$output_dir/report-data.csv", $r);
}
- if ( $r->{excel_format} eq 't') {
+ if ( $r->{excel_format} ) {
build_excel("$output_dir/report-data.xls", $r);
}
- if ( $r->{html_format} eq 't') {
+ if ( $r->{html_format} ) {
mkdir("$output_dir/html");
build_html("$output_dir/report-data.html", $r);
}
-
$dbh->begin_work;
- if ($r->{report}->{recur} eq 't') {
+ if ($r->{report}->{recur} ) {
my $sql = <<' SQL';
- INSERT INTO reporter.schedule ( report, folder, runner, run_time, email, csv_format, excel_format, html_format)
- VALUES ( ?, ?, ?, NOW() + ?, ?, ?, ?, ? );
+ INSERT INTO reporter.schedule (
+ report,
+ folder,
+ runner,
+ run_time,
+ email,
+ csv_format,
+ excel_format,
+ html_format,
+ chart_pie,
+ chart_bar,
+ chart_line )
+ VALUES ( ?, ?, ?, ?::TIMESTAMPTZ + ?, ?, ?, ?, ?, ?, ?, ? );
SQL
$dbh->do(
$r->{report}->{id},
$r->{folder},
$r->{runner},
+ $r->{run_time},
$r->{report}->{recurance},
$r->{email},
$r->{csv_format},
$r->{excel_format},
- $r->{html_format}
+ $r->{html_format},
+ $r->{chart_pie},
+ $r->{chart_bar},
+ $r->{chart_line},
);
}
$dbh->do(<<' SQL',{}, $r->{id});
UPDATE reporter.schedule
- SET complete_time = 'now'
+ SET complete_time = now()
WHERE id = ?;
SQL
$dbh->do(<<' SQL',{}, $e, $r->{id});
UPDATE reporter.schedule
SET error_text = ?,
- complete_time = 'now',
- error_code = 1,
+ complete_time = now(),
+ error_code = 1
WHERE id = ?;
SQL
};
</style>
</head>
<body>
+ <center>
<h2><u>$$r{report}{name}</u></h2>
$$r{report}{description}<br/><br/><br/>
HEADER
# add a link to the raw output html
- print $index "<a href='report-data.html.raw.html'>Tabular Output</a><br/><br/><br/><br/>";
+ print $index "<a href='report-data.html.raw.html'>Tabular Output</a>";
+
+ # add a link to the CSV output
+ print $index " -- <a href='report-data.csv'>CSV Output</a>" if ($r->{csv_format});
+
+ # add a link to the CSV output
+ print $index " -- <a href='report-data.xls'>Excel Output</a>" if ($r->{excel_format});
+
+ print $index "<br/><br/><br/><br/></center>";
# create the raw output html file
print $raw "<html><head><title>$$r{report}{name}</title>";
$raw->close;
# Time for a pie chart
- if ($r->{chart_pie} eq 't') {
+ if ($r->{chart_pie}) {
my $pics = draw_pie($r, $file);
for my $pic (@$pics) {
print $index "<img src='report-data.html.$pic->{file}' alt='$pic->{name}'/><br/><br/><br/><br/>";
print $index '<br/><br/><br/><br/>';
# Time for a bar chart
- if ($r->{chart_bar} eq 't') {
+ if ($r->{chart_bar}) {
my $pics = draw_bars($r, $file);
for my $pic (@$pics) {
print $index "<img src='report-data.html.$pic->{file}' alt='$pic->{name}'/><br/><br/><br/><br/>";
print $index '<br/><br/><br/><br/>';
# Time for a bar chart
- if ($r->{chart_line} eq 't') {
+ if ($r->{chart_line}) {
my $pics = draw_lines($r, $file);
for my $pic (@$pics) {
print $index "<img src='report-data.html.$pic->{file}' alt='$pic->{name}'/><br/><br/><br/><br/>";