diff options
-rw-r--r-- | index.pl | 42 | ||||
-rw-r--r-- | templates/main.html.ep | 76 |
2 files changed, 107 insertions, 11 deletions
@@ -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> |