From 1cdc3772cd84f38a3e8a2c04a232c0d8cafd2ef3 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Mon, 27 Jan 2014 19:28:32 +0100 Subject: add from -> to tracking example for @Marudor. May be merged into db-iris later --- examples/track-from-to | 234 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100755 examples/track-from-to (limited to 'examples') diff --git a/examples/track-from-to b/examples/track-from-to new file mode 100755 index 0000000..7b8dc74 --- /dev/null +++ b/examples/track-from-to @@ -0,0 +1,234 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use 5.014; +use utf8; + +no if $] >= 5.018, warnings => 'experimental::smartmatch'; + +our $VERSION = '0.01'; + +use Encode qw(decode); +use Getopt::Long qw(:config no_ignore_case bundling); +use List::Util qw(first max); +use List::MoreUtils qw(none); +use Travel::Status::DE::IRIS; +use Travel::Status::DE::IRIS::Stations; + +my ( @grep_class, @grep_type, @grep_platform ); +my ( %edata, @edata_pre ); + +my @output; + +binmode( STDOUT, ':encoding(utf-8)' ); + +@ARGV = map { decode( 'UTF-8', $_ ) } @ARGV; + +GetOptions( + 'c|class=s@' => \@grep_class, + 'h|help' => sub { show_help(0) }, + 'o|output=s@' => \@edata_pre, + 'p|platform=s@' => \@grep_platform, + 'T|type=s' => \@grep_type, + 'V|version' => \&show_version, + +) or show_help(1); + +if ( @ARGV < 2 ) { + show_help(1); +} + +# opt=foo,bar support +@edata_pre = split( qr{,}, join( q{,}, @edata_pre ) ); +@grep_class = split( qr{,}, join( q{,}, @grep_class ) ); +@grep_platform = split( qr{,}, join( q{,}, @grep_platform ) ); +@grep_type = split( qr{,}, join( q{,}, @grep_type ) ); + +my ($from, $filter_via, $to) = @ARGV; +$to //= $filter_via; +$from = get_station($from); +$to = get_station($to); + +for my $efield (@edata_pre) { + given ($efield) { + when ('d') { $edata{delay} = 1 } + when ('D') { $edata{delays} = 1 } + when ('f') { $edata{fullroute} = 1 } + when ('m') { $edata{messages} = 1 } + when ('q') { $edata{qos} = 1 } + when ('r') { $edata{route} = 1 } + when ('t') { $edata{times} = 1 } + default { $edata{$efield} = 1 } + } +} + +my $status_f = Travel::Status::DE::IRIS->new( + station => $from, +); + +my $status_t = Travel::Status::DE::IRIS->new( + station => $to, +); + +sub get_station { + my ($input_name) = @_; + + my @stations = Travel::Status::DE::IRIS::Stations::get_station($input_name); + + if ( @stations == 0 ) { + say STDERR "No station matches '$input_name'"; + exit(1); + } + elsif ( @stations == 1 ) { + return $stations[0][0]; + } + else { + say STDERR "The input '$input_name' is ambiguous. Please choose one " + . 'of the following:'; + say STDERR join( "\n", map { $_->[1] } @stations ); + exit(1); + } +} + +sub show_help { + my ($code) = @_; + + print 'Usage: db-iris [-V] [-c ] [-d ] ' + . '[-o ] [-p ] [-t