diff options
| author | Daniel Friesel <derf@finalrewind.org> | 2015-02-22 22:32:59 +0100 | 
|---|---|---|
| committer | Daniel Friesel <derf@finalrewind.org> | 2015-02-22 22:32:59 +0100 | 
| commit | 93b908f503359232a57c309c1d33d1462cf23849 (patch) | |
| tree | 9abf9f97c94e8b63c3f803d22a81816d6a9018ee | |
| parent | caf02e60ae73ea48a3fc18bd30078247509a8d4b (diff) | |
by_time -> generic 2ddata
| -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> | 
