summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2015-02-22 22:32:59 +0100
committerDaniel Friesel <derf@finalrewind.org>2015-02-22 22:32:59 +0100
commit93b908f503359232a57c309c1d33d1462cf23849 (patch)
tree9abf9f97c94e8b63c3f803d22a81816d6a9018ee
parentcaf02e60ae73ea48a3fc18bd30078247509a8d4b (diff)
by_time -> generic 2ddata
-rw-r--r--index.pl42
-rw-r--r--templates/main.html.ep76
2 files changed, 107 insertions, 11 deletions
diff --git a/index.pl b/index.pl
index 98011cd..ba58c9f 100644
--- a/index.pl
+++ b/index.pl
@@ -50,31 +50,55 @@ get '/by_hour.json' => sub {
return;
};
-get '/by_time.tsv' => sub {
+get '/2ddata.tsv' => sub {
my $self = shift;
- my $time = $self->param('time') // 'hour';
+ my $aggregate = $self->param('aggregate') // 'hour';
my $metric = $self->param('metric') // 'delay';
+ my $msgnum = int($self->param('msgnum') // 0);
+
+ if ($msgnum < 0 or $msgnum > 99) {
+ $msgnum = 0;
+ }
my $res = "x\ty\n";
my $query;
- my $format = '%H';
+ my $format = 'strftime("%H", scheduled_time, "unixepoch")';
- if ($time eq 'weekday') {
- $format = '%w';
+ given($aggregate) {
+ when ('weekday') {
+ $format = 'strftime("%w", scheduled_time, "unixepoch")';
+ }
+ when ('weekhour') {
+ $format = 'strftime("%w%H", scheduled_time, "unixepoch")';
+ }
}
given ($metric) {
when ('delay') {
$query = qq{
- select strftime("$format", scheduled_time, "unixepoch") as time,
- avg(delay) from $table group by time
+ select $format as aggregate,
+ avg(delay) from $table where not is_canceled group by aggregate
};
}
when ('cancel_num') {
$query = qq{
- select strftime("$format", scheduled_time, "unixepoch") as time,
- count(is_canceled) from $table group by time
+ select $format as aggregate,
+ count(is_canceled) from $table group by aggregate
+ };
+ }
+ when ('cancel_percent') {
+ $query = qq{
+ select $format as aggregate,
+ avg(is_canceled) * 100 from $table group by aggregate
+ };
+ }
+ when ('message_percent') {
+ $query = qq{
+ select $format as aggregate,
+ avg(msgtable.train_id is not null) * 100 from departures
+ left outer join msg_$msgnum as msgtable using
+ (scheduled_time, train_id) group by aggregate
};
}
}
diff --git a/templates/main.html.ep b/templates/main.html.ep
index 402b227..e0e6205 100644
--- a/templates/main.html.ep
+++ b/templates/main.html.ep
@@ -89,12 +89,84 @@ function show_bargraph(datasource, title, xlab, ylab) {
}
}
-show_bargraph('/by_time.tsv?time=hour&metric=delay', 'Durchschnittliche Verspätung nach Uhrzeit',
+show_bargraph('/2ddata.tsv?aggregate=hour&metric=delay', 'Durchschnittliche Verspätung nach Uhrzeit',
'Angebrochene Stunde', 'Minuten');
-show_bargraph('/by_time.tsv?time=weekday&metric=delay', 'Durchschnittliche Verspätung nach Wochentag',
+show_bargraph('/2ddata.tsv?aggregate=hour&metric=cancel_percent', 'Anteil Zugausfälle nach Uhrzeit',
+ 'Angebrochene Stunde', 'Ausfälle [%]');
+
+show_bargraph('/2ddata.tsv?aggregate=weekday&metric=delay', 'Durchschnittliche Verspätung nach Wochentag',
'Wochentag', 'Minuten');
+show_bargraph('/2ddata.tsv?aggregate=weekday&metric=cancel_percent', 'Anteil Zugausfälle nach Wochentag',
+ 'Wochentag', 'Ausfälle [%]');
+
+show_bargraph('/2ddata.tsv?aggregate=weekhour&metric=delay', 'Durchschnittliche Verspätung nach Wochentag und Uhrzeit',
+ 'Tag/Stunde', 'Minuten');
+
+msglist = [[2, 'Polizeiliche Ermittlung'],
+ [3, 'Feuerwehreinsatz neben der Strecke'],
+ [5, 'Aerztliche Versorgung eines Fahrgastes'],
+ [6, 'Betaetigen der Notbremse'],
+ [7, 'Personen im Gleis'],
+ [8, 'Notarzteinsatz am Gleis'],
+ [9, 'Streikauswirkungen'],
+ [10, 'Ausgebrochene Tiere im Gleis'],
+ [11, 'Unwetter'],
+ [13, 'Pass- und Zollkontrolle'],
+ [15, 'Beeintraechtigung durch Vandalismus'],
+ [16, 'Entschaerfung einer Fliegerbombe'],
+ [17, 'Beschaedigung einer Bruecke'],
+ [18, 'Umgestuerzter Baum im Gleis'],
+ [19, 'Unfall an einem Bahnuebergang'],
+ [20, 'Tiere im Gleis'],
+ [21, 'Warten auf weitere Reisende'],
+ [22, 'Witterungsbedingte Stoerung'],
+ [23, 'Feuerwehreinsatz auf Bahngelaende'],
+ [24, 'Verspaetung aus dem Ausland'],
+ [25, 'Warten auf verspaetete Zugteile'],
+ [28, 'Gegenstaende im Gleis'],
+ [31, 'Bauarbeiten'],
+ [32, 'Verzoegerung beim Ein-/Ausstieg'],
+ [33, 'Oberleitungsstoerung'],
+ [34, 'Signalstoerung'],
+ [35, 'Streckensperrung'],
+ [36, 'Technische Stoerung am Zug'],
+ [38, 'Technische Stoerung an der Strecke'],
+ [39, 'Anhaengen von zusaetzlichen Wagen'],
+ [40, 'Stellwerksstoerung/-ausfall'],
+ [41, 'Stoerung an einem Bahnuebergang'],
+ [42, 'Ausserplanmaessige Geschwindigkeitsbeschraenkung'],
+ [43, 'Verspaetung eines vorausfahrenden Zuges'],
+ [44, 'Warten auf einen entgegenkommenden Zug'],
+ [45, 'Ueberholung durch anderen Zug'],
+ [46, 'Warten auf freie Einfahrt'],
+ [47, 'Verspaetete Bereitstellung'],
+ [48, 'Verspaetung aus vorheriger Fahrt'],
+ [55, 'Technische Stoerung an einem anderen Zug'],
+ [56, 'Warten auf Fahrgaeste aus einem Bus'],
+ [57, 'Zusaetzlicher Halt'],
+ [58, 'Umleitung'],
+ [59, 'Schnee und Eis'],
+ [60, 'Reduzierte Geschwindigkeit wegen Sturm'],
+ [61, 'Tuerstoerung']];
+for (msg in msglist) {
+ show_bargraph('/2ddata.tsv?aggregate=hour&metric=message_percent&msgnum=' + msg[0],
+ 'Anteil "'+msg[1]+'"', 'Angebrochene Stunde', '%');
+ show_bargraph('/2ddata.tsv?aggregate=weekday&metric=message_percent&msgnum=' + msg[0],
+ 'Anteil "'+msg[1]+'"', 'Wochentag', '%');
+}
+
+show_bargraph('/2ddata.tsv?aggregate=hour&metric=message_percent&msgnum=80',
+ 'Anteil "Abweichende Wagenreihung"', 'Angebrochene Stunde', '%');
+show_bargraph('/2ddata.tsv?aggregate=weekday&metric=message_percent&msgnum=80',
+ 'Anteil "Abweichende Wagenreihung"', 'Wochentag', '%');
+
+show_bargraph('/2ddata.tsv?aggregate=hour&metric=message_percent&msgnum=85',
+ 'Anteil "Ein Wagen fehlt"', 'Angebrochene Stunde', '%');
+show_bargraph('/2ddata.tsv?aggregate=weekday&metric=message_percent&msgnum=85',
+ 'Anteil "Ein Wagen fehlt"', 'Wochentag', '%');
+
% end
<div>