level 177
[zc] / views.pl
1 #!/usr/bin/perl
2 use warnings;
3 use strict;
4 use autodie;
5 use Data::Dump qw(dump);
6
7 my $filter = join(' ',@ARGV);
8
9 my $offsets;
10
11 open(my $o, '<', 'gnuplot/offset.txt');
12 while(<$o>) {
13         chomp;
14         my ( $pn, $o_x, $o_y ) = split(/ /,$_);
15         $offsets->{$pn} = [ $o_x, $o_y ];
16 }
17 close($o);
18
19 my $time_limit;
20
21 open(my $o, '<', 'gnuplot/time.txt');
22 while(<$o>) {
23         chomp;
24         my ( $pn, $time ) = split(/ /,$_, 2);
25         $time_limit->{$pn} = $time;
26 }
27 close($o);
28
29 my $sql;
30 my @sql_location;
31 my $view2number;
32
33 open(my $n, '<', 'subvision-numbers.txt');
34 while(<$n>) {
35         chomp;
36         my ( $number, $pn, $imei, $name ) = split(/ /,$_);
37
38         if ( $filter && $name !~ m/$filter/i ) {
39                 warn "SKIP $number $pn\n";
40                 next;
41         }
42
43         my $view = 'sub_' . $number;
44         $view =~ s/\W+/_/g;
45
46         $view2number->{$view} = $number;
47
48         my $offset_x = $offsets->{$pn}->[0] // 0;
49         my $offset_y = $offsets->{$pn}->[1] // 0;
50
51         my $time = $time_limit->{$pn} // '';
52
53         if ( ! defined( $sql->{$view} ) ) {
54                 $sql->{$view} = qq{
55 create or replace view $view as
56 select time, pn, x_axis_angle + $offset_x as x_axis_angle, y_axis_angle + $offset_y as y_axis_angle, power_source_voltage, sensor_temperature, signal_strength
57 from zc
58 where pn = $pn $time
59 };
60         } else {
61                 $sql->{$view} .= qq{
62 union
63 select time, pn, x_axis_angle + $offset_x as x_axis_angle, y_axis_angle + $offset_y as y_axis_angle, power_source_voltage, sensor_temperature, signal_strength
64 from zc
65 where pn = $pn $time
66 };
67         }
68
69         push @sql_location, qq{
70 select 
71         to_char(time, 'YYYY-MM-DD HH24:MI:SS') as time, x_axis_angle + $offset_x as x_axis_angle, y_axis_angle + $offset_y as y_axis_angle, sensor_temperature, power_source_voltage, zc.pn
72 from zc
73 where pn = $pn $time
74 };
75
76 }
77 close($n);
78
79 open(my $sql_fh, '>', "/tmp/$filter.sql");
80 open(my $shell_fh, '>', "/tmp/$filter.sh");
81 open(my $html_fh, '>', "/tmp/$filter.html");
82
83 print $html_fh qq{<html>
84 <head>
85         <meta charset=utf-8 />
86         <title>$filter</title>
87 </head>
88 <body>
89
90         <p>
91         <img src=logo-color.png>
92
93 };
94
95 foreach my $view ( sort keys %$sql ) {
96         print $sql_fh "drop view $view ;\n";
97         print $sql_fh $sql->{$view} . ";\n";
98         print $sql_fh "grant select on $view to grafana ;\n\n";
99
100         print $shell_fh "ln -s sub.cgi $view.cgi\n";
101
102         print $html_fh qq{
103         <h1>$view2number->{$view}</h1>
104         <img src="cgi-bin/$view.cgi" width="100%">
105 };
106 }
107
108 print $html_fh qq{
109         </p>
110
111 </body>
112 };
113
114 print $sql_fh qq{
115 drop view sub_$filter ;
116 create or replace view sub_$filter as
117 }, join(' union ', @sql_location) . qq{
118         order by 1 asc
119 };