--- /dev/null
+#!/usr/bin/perl
+use warnings;
+use strict;
+use autodie;
+use Data::Dump qw(dump);
+
+my $filter = join(' ',@ARGV);
+
+my $offsets;
+
+open(my $o, '<', 'gnuplot/offset.txt');
+while(<$o>) {
+ chomp;
+ my ( $pn, $o_x, $o_y ) = split(/ /,$_);
+ $offsets->{$pn} = [ $o_x, $o_y ];
+}
+close($o);
+
+my $time_limit;
+
+open(my $o, '<', 'gnuplot/time.txt');
+while(<$o>) {
+ chomp;
+ my ( $pn, $time ) = split(/ /,$_, 2);
+ $time_limit->{$pn} = $time;
+}
+close($o);
+
+my $sql;
+my $view2number;
+
+open(my $n, '<', 'subvision-numbers.txt');
+while(<$n>) {
+ chomp;
+ my ( $number, $pn, $imei, $name ) = split(/ /,$_);
+
+ if ( $filter && $name !~ m/$filter/i ) {
+ warn "SKIP $number $pn\n";
+ next;
+ }
+
+ my $view = 'sub_' . $number;
+ $view =~ s/\W+/_/g;
+
+ $view2number->{$view} = $number;
+
+ my $offset_x = $offsets->{$pn}->[0] // 0;
+ my $offset_y = $offsets->{$pn}->[1] // 0;
+
+ my $time = $time_limit->{$pn} // '';
+
+ if ( ! defined( $sql->{$view} ) ) {
+ $sql->{$view} = qq{
+create or replace view $view as
+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
+from zc
+where pn = $pn $time
+};
+ } else {
+ $sql->{$view} .= qq{
+union
+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
+from zc
+where pn = $pn $time
+};
+ }
+
+}
+close($n);
+
+open(my $sql_fh, '>', "/tmp/$filter.sql");
+open(my $shell_fh, '>', "/tmp/$filter.sh");
+open(my $html_fh, '>', "/tmp/$filter.html");
+
+print $html_fh qq{<html>
+<head>
+ <meta charset=utf-8 />
+ <title>$filter</title>
+</head>
+<body>
+
+ <p>
+ <img src=logo-color.png>
+
+};
+
+foreach my $view ( sort keys %$sql ) {
+ print $sql_fh "drop view $view ;\n";
+ print $sql_fh $sql->{$view} . ";\n";
+ print $sql_fh "grant select on $view to grafana ;\n\n";
+
+ print $shell_fh "ln -s sub.cgi $view.cgi\n";
+
+ print $html_fh qq{
+ <h1>$view2number->{$view}</h1>
+ <img src="cgi-bin/$view.cgi" width="100%">
+};
+}
+
+print $html_fh qq{
+ </p>
+
+</body>
+};
+
--- /dev/null
+#!/bin/sh
+
+dir=/home/dpavlin/zc/gnuplot/
+
+echo "Content-type: image/svg+xml"
+echo
+
+name=$( basename $0 | sed 's/.cgi//' )
+
+test -z "$QUERY_STRING" && QUERY_STRING='.'
+gnuplot_sed='';
+
+yrange=$( echo $QUERY_STRING | grep '^yrange=[0-9]*\.[0-9]*$' | cut -d= -f2 )
+test -z "$yrange" && yrange=0.2
+
+voltage=0
+echo $HTTP_REFERER | grep -q voltage && voltage=1
+echo $QUERY_STRING | grep -q voltage && voltage=1
+
+cat $dir/sub.sql | sed -e "s/from sub_[^ ]*/from $name/" | psql --username=dpavlin -A -F "," -t zc > /dev/shm/$name.txt
+if [ -s /dev/shm/$name.txt ] ; then
+cat $dir/template.gnuplot | sed -e "s,axes.txt,/dev/shm/$name.txt," -e "s,^set terminal.*$,set terminal svg," -e "s,^set output.*$,set output," -e "s,-0.3 : 0.3,-$yrange : $yrange," -e "s,< 0.3,< $yrange," > /dev/shm/$name.gnuplot
+gnuplot -e "voltage=$voltage" /dev/shm/$name.gnuplot
+else
+cat << __SVG__
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<svg
+ width="600" height="1"
+ viewBox="0 0 600 480"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+>
+</svg>
+__SVG__
+fi
+
+#rm /dev/shm/axes.txt.$$ /dev/shm/axes.gnuplot.$$