mirror of https://github.com/BOINC/boinc.git
parent
302fe06985
commit
8a0feee2fc
|
@ -0,0 +1,23 @@
|
|||
#! /bin/csh
|
||||
|
||||
# where is mysql located?
|
||||
set MYSQL = /usr/local/mysql/bin/mysql
|
||||
|
||||
# what is the name of the database?
|
||||
set DATABASE = mysql
|
||||
|
||||
# what is the name of the table you wish to count?
|
||||
set TABLE = user
|
||||
|
||||
# tmpfile for sql
|
||||
set TMPFILE = /tmp/count$$.sql
|
||||
|
||||
echo "use $DATABASE;" > $TMPFILE
|
||||
echo "select count(*) from $TABLE;" >> $TMPFILE
|
||||
|
||||
set COUNT = `cat $TMPFILE | $MYSQL | /bin/tail -1`
|
||||
|
||||
set CIVDATE = `/bin/date "+%c:%m:%d:%H:%M" | awk '{print $5}'`
|
||||
set UNIXDATE = `/usr/local/bin/perl -e 'print time()'`
|
||||
|
||||
echo $CIVDATE $UNIXDATE $COUNT
|
|
@ -0,0 +1 @@
|
|||
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/local/stripchart/samples/get_load >> /disks/matt/data/machine_load
|
|
@ -0,0 +1,11 @@
|
|||
# This is the list of data sources for stripchart, in the colon-delimited format:
|
||||
# full path to data file:title for the graph:column number in the data file:flags to stripchart
|
||||
#
|
||||
# examples:
|
||||
# /disks/matt/data_files/connections:connection drops:3
|
||||
# /disks/matt/data_files/connections:tcp rate:4:-b 100
|
||||
#
|
||||
# To put in a horizontal rule for ease of selection, use the line:
|
||||
# x:----------------------------------:x
|
||||
#
|
||||
/disks/matt/data_files/get_load:machine load:3
|
|
@ -0,0 +1,11 @@
|
|||
#! /bin/csh
|
||||
|
||||
set UPTIME = `/usr/bin/uptime | awk '{print $10}' | sed s/,//`
|
||||
if ($UPTIME == "average:") then
|
||||
set UPTIME = `/usr/bin/uptime | awk '{print $11}' | sed s/,//`
|
||||
endif
|
||||
|
||||
set CIVDATE = `/bin/date "+%c:%m:%d:%H:%M" | awk '{print $5}'`
|
||||
set UNIXDATE = `/usr/local/bin/perl -e 'print time()'`
|
||||
|
||||
echo $CIVDATE $UNIXDATE $UPTIME
|
|
@ -0,0 +1,439 @@
|
|||
#! /usr/local/bin/perl
|
||||
|
||||
# The contents of this file are subject to the Mozilla Public License
|
||||
# Version 1.0 (the "License"); you may not use this file except in
|
||||
# compliance with the License. You may obtain a copy of the License at
|
||||
# http://www.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS IS"
|
||||
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing rights and limitations
|
||||
# under the License.
|
||||
#
|
||||
# The Original Code is the Berkeley Open Infrastructure for Network Computing.
|
||||
#
|
||||
# The Initial Developer of the Original Code is the SETI@home project.
|
||||
# Portions created by the SETI@home project are Copyright (C) 2002
|
||||
# University of California at Berkeley. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
|
||||
# Stripchart - Version 2.1 by Matt Lebofsky ( started: November 11, 2002 )
|
||||
#
|
||||
# Requires: gnuplot with .gif support (which may require gd)
|
||||
# perl 5.0 or later
|
||||
# stripchart.cnf (make sure you set the path the .cnf file below)
|
||||
#
|
||||
# Stripchart is a wrapper around gnuplot which takes in time-based
|
||||
# data from a file and creates a web-friendly image. It is quite
|
||||
# useful for system diagnostic checking, especially when used with
|
||||
# stripchart.cgi
|
||||
#
|
||||
# You should only need to edit the variables in the section
|
||||
# "GLOBAL/DEFAULT VARS" below
|
||||
#
|
||||
# Type "stripchart -h" for usage
|
||||
#
|
||||
# See doc/stripchart.txt for details
|
||||
#
|
||||
|
||||
use Getopt::Std;
|
||||
use File::Basename;
|
||||
$|++;
|
||||
|
||||
################
|
||||
# READ IN .cnf
|
||||
################
|
||||
|
||||
# Where is the .cnf file?
|
||||
$cnfpath = "./stripchart.cnf";
|
||||
|
||||
# Read it in:
|
||||
open (CNFFILE,$cnfpath) or die "cannot open configuration file: $cnfpath\nmake sure this variable is set properly";
|
||||
while (<CNFFILE>) { eval }
|
||||
close (CNFFILE);
|
||||
|
||||
#############
|
||||
# SUBS
|
||||
#############
|
||||
|
||||
sub to_unix_time {
|
||||
# times should generally be in epoch seconds, but just in case they're not:
|
||||
|
||||
# no colons and no decimal point? must already be in unix time
|
||||
if ($_[0] !~ /:/ && $_[0] !~ /\./ ) { return $_[0] }
|
||||
|
||||
# colons = civil time
|
||||
if ($_[0] =~ /:/) {
|
||||
(my $year, my $month, my $day, my $hour, my $minute) = split /:/, $_[0];
|
||||
$month--;
|
||||
return timelocal(0,$minute,$hour,$day,$month,$year)
|
||||
}
|
||||
|
||||
# must be julian date
|
||||
return (($_[0] - 2440587.5) * $daysecs);
|
||||
|
||||
}
|
||||
|
||||
sub unix_to_civillabel {
|
||||
# convert epoch seconds to a pretty date string
|
||||
|
||||
(my $minute, my $hour, my $day, my $month, my $year) =
|
||||
(localtime($_[0]))[1,2,3,4,5];
|
||||
$month++;
|
||||
$year+=1900;
|
||||
$year = substr($year,2,2);
|
||||
my $label = sprintf("%02d/%02d/%02d %02d:%02d",$month,$day,$year,$hour,$minute);
|
||||
return $label
|
||||
}
|
||||
|
||||
sub time_to_monthlabel {
|
||||
# convert epoch seconds to a simple month label (for x axis)
|
||||
|
||||
(my $day, my $month) = (localtime($_[0]))[3,4];
|
||||
my $label = $monthabbs[$month] . " $day";
|
||||
return $label;
|
||||
|
||||
}
|
||||
|
||||
sub time_to_hourlabel {
|
||||
# convert epoch seconds to a simple hour label (for x axis)
|
||||
|
||||
(my $minute, my $hour) = (localtime($_[0]))[1,2];
|
||||
my $label = sprintf("%02d:%02d",$hour,$minute);
|
||||
return $label;
|
||||
|
||||
}
|
||||
|
||||
#############
|
||||
# MAIN
|
||||
#############
|
||||
|
||||
# get command line options
|
||||
|
||||
if (getopts("f:t:r:i:o:O:l:T:x:y:Y:b:Bd:D:vLc:CsjVh") == FALSE || $opt_h) {
|
||||
print STDERR << "EOF";
|
||||
stripchart: creates stripchart .gif graphic based on data in flat files
|
||||
options:
|
||||
-i: input FILE - name of input data file (mandatory)
|
||||
-o: output FILE - name of output .gif file (default: STDOUT)
|
||||
-O: output FILE - name of output .gif file and dump to STDOUT as well
|
||||
-f: from TIME - stripchart with data starting at TIME
|
||||
(default: 24 hours ago)
|
||||
-t: to TIME - stripchart with data ending at TIME (default: now)
|
||||
-r: range RANGE - stripchart data centered around "from" time the size
|
||||
of RANGE (overrides -t)
|
||||
-l: last LINES - stripchart last number of LINES in data file
|
||||
(overrides -f and -t and -r)
|
||||
-T: title TITLE - title to put on graphic (default: FILE RANGE)
|
||||
-x: column X - time or "x" column (default: 2)
|
||||
-y: column Y - value or "y" column (default: 3)
|
||||
-Y: column Y' - overplot second "y" column (default: none)
|
||||
-b: baseline VALUE - overplot baseline of arbitrary value VALUE
|
||||
-B: baseline-avg - overrides -b, it plots baseline of computed average
|
||||
-d: dump low VALUE - ignore data less than VALUE
|
||||
-D: dump high VALUE - ignore data higher than VALUE
|
||||
-v: verbose - puts verbose runtime output to STDERR
|
||||
-L: log - makes y axis log scale
|
||||
-c: colors "COLORS" - set gnuplot colors for graph/axis/fonts/data (default:
|
||||
"$colorvals"
|
||||
in order: bground, axis/fonts, grids, pointcolor1,2,3)
|
||||
-C: cgi - output CGI header to STDOUT if being called as CGI
|
||||
-s: stats - turn extra plot stats on (current, avg, min, max)
|
||||
-j: julian times - time columns is in local julian date (legacy stuff)
|
||||
-V: version - print version number and exit
|
||||
-h: help - display this help
|
||||
|
||||
notes:
|
||||
* TIME either unix date, julian date, or civil date in the form:
|
||||
YYYY:MM:DD:HH:MM (year, month, day, hour, minute)
|
||||
If you enter something with colons, it assumes it is civil date
|
||||
If you have a decimal point, it assumes it is julian date
|
||||
If it is an integer, it assumes it is unix date (epoch seconds)
|
||||
If it is a negative number, it is in decimal days from current time
|
||||
(i.e. -2.5 = two and a half days ago)
|
||||
* All times on command line are assumed to be "local" times
|
||||
* All times in the data file must be in unix date (epoch seconds)
|
||||
* RANGE is given in decimal days (i.e. 1.25 = 1 day, 6 hours)
|
||||
* if LINES == 0, (i.e. -l 0) then the whole data file is read in
|
||||
* columns (given with -x, -y, -Y flags) start at 1
|
||||
* titles given with -T can contain the following key words which will
|
||||
be converted:
|
||||
FILE - basename of input file
|
||||
RANGE - pretty civil date range (in local time zone)
|
||||
the default title is: FILE RANGE
|
||||
EOF
|
||||
exit 1
|
||||
}
|
||||
|
||||
if ($opt_V) {
|
||||
print STDERR "Stripchart version $majorversion.$minorversion by Matt Lebofsky\n";
|
||||
exit 1
|
||||
}
|
||||
|
||||
if ($opt_C && $opt_v) {
|
||||
print STDERR "you cannot have -v and -C set at the same time..\n"; exit 1 }
|
||||
|
||||
if ($opt_i) { $infile = $opt_i }
|
||||
else { print STDERR "need to set input file via -i. exiting..\n"; exit 1 }
|
||||
|
||||
if ($opt_f) {
|
||||
if ($opt_f < 0) { $fromtime = to_unix_time($rightnow) + ($daysecs * $opt_f) }
|
||||
else { $fromtime = to_unix_time($opt_f) }
|
||||
}
|
||||
else { $fromtime = to_unix_time($rightnow) - $daysecs }
|
||||
|
||||
if ($opt_t) { $totime = to_unix_time($opt_t) }
|
||||
else { $totime = to_unix_time($rightnow) }
|
||||
|
||||
if ($opt_v) { print STDERR "selected time range: $fromtime - $totime\n" }
|
||||
|
||||
if ($opt_r) {
|
||||
$totime = $fromtime + ($opt_r * $daysecs);
|
||||
$fromtime -= ($opt_r * $daysecs)
|
||||
}
|
||||
|
||||
# if -l is set, override from/to with close-to-impossible all-inclusive range
|
||||
if (defined($opt_l)) { $fromtime = 0; $totime = 2147483647 }
|
||||
|
||||
if ($opt_x) { $timecol = $opt_x } else { $timecol = 2 }
|
||||
if ($opt_y) { $datacol = $opt_y } else { $datacol = 3 }
|
||||
if ($opt_Y) { $extracol = $opt_Y }
|
||||
|
||||
if ($opt_c) { $colorvals = $opt_c }
|
||||
|
||||
# read in file
|
||||
|
||||
if ($opt_v) { print STDERR "reading in data from $infile..\n" }
|
||||
|
||||
if ($opt_l > 0) {
|
||||
$numlines = $opt_l;
|
||||
@stripdata = `$tailexe -$numlines $infile` or die "cannot open file: $infile";
|
||||
}
|
||||
else {
|
||||
@stripdata = `$catexe $infile` or die "cannot open file: $infile";
|
||||
$numlines = @stripdata;
|
||||
}
|
||||
|
||||
if ($opt_v) { print STDERR "read in $numlines lines..\n" }
|
||||
|
||||
# make gnuplot data file
|
||||
|
||||
if ($opt_v) { print STDERR "making temp data file for gnuplot..\n" }
|
||||
|
||||
open (GNUDATA,">$gnudata") or die "cannot write temp data file: $gnudata";
|
||||
|
||||
$statcurrent = 0;
|
||||
$statmax = "x";
|
||||
$statmin = "x";
|
||||
$stattotal = 0;
|
||||
|
||||
$checkfromtime = $fromtime;
|
||||
if ($opt_j) { $checkfromtime = (($fromtime + $tzdiff) / $daysecs ) + 2440587.5 }
|
||||
|
||||
$thisextra = 0;
|
||||
$thisbaseline = 0;
|
||||
if ($opt_b) { $thisbaseline = $opt_b }
|
||||
$numlines = 0;
|
||||
$firstunixdate = -1;
|
||||
foreach $dataline (@stripdata) {
|
||||
chomp $dataline;
|
||||
@dataarray = split /\s/, $dataline;
|
||||
$thistime = $dataarray[$timecol-1];
|
||||
if ($thistime < $checkfromtime) { next }
|
||||
if ($opt_j) { $thistime = int(($dataarray[$timecol-1] - 2440587.5) * $daysecs) - $tzdiff }
|
||||
$thisdata = $dataarray[$datacol-1];
|
||||
if ($thistime <= $totime) {
|
||||
if ($thistime !~ /[a-zA-Z]/ && $thisdata !~ /[a-zA-Z]/ && # ignore junky numbers
|
||||
$thisdata ne "" ) {
|
||||
if ((defined($opt_d) && ($thisdata >= $opt_d)) || !defined($opt_d)) {
|
||||
if ((defined($opt_D) && ($thisdata <= $opt_D)) || !defined($opt_D)) {
|
||||
$numlines++;
|
||||
if ($firstunixdate == -1) { $firstunixdate = $thistime }
|
||||
$lastunixdate = $thistime;
|
||||
if ($opt_Y) { $thisextra = $dataarray[$extracol-1]; }
|
||||
if ($opt_s) {
|
||||
$statcurrent = $thisdata;
|
||||
$stattotal += $thisdata;
|
||||
if ($statmax eq "x" || $thisdata > $statmax) { $statmax = $thisdata }
|
||||
if ($statmin eq "x" || $thisdata < $statmin) { $statmin = $thisdata }
|
||||
}
|
||||
print GNUDATA "$thistime $thisdata $thisextra $thisbaseline\n"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
close (GNUDATA);
|
||||
|
||||
$statavg = ($stattotal / $numlines);
|
||||
|
||||
if ($opt_B) {
|
||||
@tmpdata = `$catexe $gnudata`;
|
||||
open (GNUDATA,">$gnudata") or die "cannot write temp data file: $gnudata";
|
||||
foreach $tmpline (@tmpdata) {
|
||||
chomp $tmpline;
|
||||
($tempone,$temptwo,$tempthree,$tempfour) = (split /\s/, $tmpline);
|
||||
$tempfour = $statavg;
|
||||
print GNUDATA "$tempone $temptwo $tempthree $tempfour\n";
|
||||
}
|
||||
close (GNUDATA);
|
||||
}
|
||||
|
||||
if ($numlines == 0) {
|
||||
print STDERR "no data selected due to user constraints.\n";
|
||||
exit 1
|
||||
}
|
||||
|
||||
if ($opt_v) { print STDERR "$numlines data points within time range..\n" }
|
||||
|
||||
$begin = $firstunixdate; $end = $lastunixdate;
|
||||
if (!defined($opt_l)) { $begin = $fromtime; $end = $totime }
|
||||
|
||||
if ($opt_v) { print STDERR "actual time range being plotted: $begin - $end\n" }
|
||||
|
||||
# make gnuplot xtics file
|
||||
|
||||
$daydiff = $end - $begin;
|
||||
|
||||
if ($opt_v) { print STDERR "making xtics file..\n" }
|
||||
|
||||
# depending on the range, pick appropriate tic steps and label steps
|
||||
|
||||
# less than 10 minutes: label every minute, extra tics every 30 seconds
|
||||
if ($daydiff <= 600) { $labelstep = 60; $ticstep = 30 }
|
||||
# less than 50 minutes: label every 5 minutes, extra tics every minute
|
||||
elsif ($daydiff <= 3000) { $labelstep = 300; $ticstep = 60 }
|
||||
# less than 100 minutes: label every 10 minutes, extra tics every 5 minutes
|
||||
elsif ($daydiff <= 6000) { $labelstep = 600; $ticsstep = 300 }
|
||||
# less than 200 minutes: label every 20 minutes, extra tics every 10 minutes
|
||||
elsif ($daydiff <= 12000) { $labelstep = 1200; $ticsstep = 600 }
|
||||
|
||||
# less than 5 hours: label every 30 minutes, extra tics every 15 minutes
|
||||
elsif ($daydiff <= 18000) { $labelstep = 1800; $ticstep = 900 }
|
||||
# less than 10 hours: label every hour, extra tics every 30 minutes
|
||||
elsif ($daydiff <= 36000) { $labelstep = 3600; $ticstep = 1800 }
|
||||
# less than 20 hours: label every 2 hours, extra tics every hour
|
||||
elsif ($daydiff <= 72000) { $labelstep = 7200; $ticstep = 3600 }
|
||||
# less than 40 hours: label every 4 hours, extra tics every hour
|
||||
elsif ($daydiff <= 144000) { $labelstep = 14400 ; $ticstep = 3600 }
|
||||
# less than 60 hours: label every 6 hours, extra tics every hour
|
||||
elsif ($daydiff <= 216000) { $labelstep = 21600; $ticstep = 3600 }
|
||||
# less than 120 hours: label every 12 hours, extra tics every 6 hours
|
||||
elsif ($daydiff <= 432000) { $labelstep = 43200; $ticstep = 21600 }
|
||||
|
||||
# less than 10 days: label every day, extra tics every half day
|
||||
elsif ($daydiff <= 864000) { $labelstep = 86400; $ticstep = 43200 }
|
||||
# less than 20 days: label every 2 days, extra tics every day
|
||||
elsif ($daydiff <= 1728000) { $labelstep = 172800; $ticstep = 86400 }
|
||||
# less than 40 days: label every 4 days, extra tics every 2 days
|
||||
elsif ($daydiff <= 3456000) { $labelstep = 345600; $ticstep = 172800 }
|
||||
# less than 70 days: label every 7 days, extra tics every 7 days
|
||||
elsif ($daydiff <= 6048000) { $labelstep = 604800; $ticstep = 604800 }
|
||||
# less than 140 days: label every 14 days, extra tics every 7 days
|
||||
elsif ($daydiff <= 12096000) { $labelstep = 1209600; $ticstep = 604800 }
|
||||
# less than 280 days: label every 28 days, extra tics every 14 days
|
||||
elsif ($daydiff <= 24192000) { $labelstep = 2419200; $ticstep = 1209600 }
|
||||
# less than 600 days: label every 60 days, extra tics every 30 days
|
||||
elsif ($daydiff <= 51840000) { $labelstep = 5184000; $ticstep = 2592000 }
|
||||
# less than 1000 days: label every 100 days, extra tics every 50 days
|
||||
elsif ($daydiff <= 86400000) { $labelstep = 8640000; $ticstep = 4320000 }
|
||||
# okay, you're on your own now: every 200 days, extra tics every 100 days
|
||||
else { $labelstep = 17280000; $ticstep = 8640000 }
|
||||
|
||||
if ($opt_v) {
|
||||
print STDERR "x label resolution: $labelstep seconds..\n";
|
||||
print STDERR "x tic resolution: $ticstep seconds..\n" }
|
||||
|
||||
open (TICDATA,">$ticdata") or die "cannot write temp tic file: $ticdata";
|
||||
print TICDATA "set xtics( \\\n";
|
||||
|
||||
if ($daydiff >= 18000 && $daydiff <= 216000) {
|
||||
# round down/up to nearest hour
|
||||
$firstunixdate = int($firstunixdate/3600) * 3600;
|
||||
$lastunixdate = (int($lastunixdate/3600)+1) * 3600;
|
||||
}
|
||||
elsif ($daydiff >= 216000) {
|
||||
# round down/up to nearest day
|
||||
$firstunixdate = ((int($firstunixdate/86400)) * 86400) - $tzdiff;
|
||||
$lastunixdate = ((int($lastunixdate/86400)+1) * 86400) - $tzdiff;
|
||||
}
|
||||
|
||||
for ($thisdate = $firstunixdate; $thisdate < $lastunixdate; $thisdate += $ticstep) {
|
||||
$label = '""';
|
||||
if (($thisdate - $firstunixdate) % $labelstep == 0) {
|
||||
if ($daydiff <= 432000) {
|
||||
$label = '"' . time_to_hourlabel($thisdate) . '"'
|
||||
}
|
||||
else {
|
||||
$label = '"' . time_to_monthlabel($thisdate) . '"'
|
||||
}
|
||||
}
|
||||
print TICDATA $label . " " . $thisdate;
|
||||
if (($thisdate + $ticstep) < $lastunixdate) { print TICDATA "," }
|
||||
print TICDATA " \\\n";
|
||||
}
|
||||
print TICDATA ")\n";
|
||||
close (TICDATA);
|
||||
|
||||
# make gnuplot file and run it!
|
||||
|
||||
if ($opt_v) { print STDERR "running gnuplot to create $opt_o..\n" }
|
||||
|
||||
if (defined($opt_l)) { # fix for title
|
||||
$fromtime = $begin;
|
||||
$totime = $end;
|
||||
}
|
||||
|
||||
if ($opt_T) { $title = $opt_T } else { $title = "FILE RANGE" }
|
||||
$thisfile = basename($infile);
|
||||
$thisrange = "(" . unix_to_civillabel($fromtime) . " -> " .
|
||||
unix_to_civillabel($totime) . ")";
|
||||
$title =~ s/FILE/$thisfile/g;
|
||||
$title =~ s/RANGE/$thisrange/g;
|
||||
|
||||
if ($opt_s) {
|
||||
$plotheight += 12;
|
||||
$statlabel = sprintf("(cur: %.2f max: %.2f min: %.2f avg: %.2f)",$statcurrent,$statmax,$statmin,$statavg);
|
||||
$title .= "\\n$statlabel";
|
||||
}
|
||||
|
||||
open (GNUSCRIPT,">$gnuscript") or die "cannot open gnuscript file: $gnuscript";
|
||||
print GNUSCRIPT "set terminal gif small size $plotwidth, $plotheight \\\n";
|
||||
print GNUSCRIPT "$colorvals\n";
|
||||
print GNUSCRIPT "set nokey\nset grid\nset title \"$title\"\n";
|
||||
if ($opt_L) { print GNUSCRIPT "set logscale y\n" }
|
||||
print GNUSCRIPT "set pointsize 0.1\n";
|
||||
print GNUSCRIPT "plot \"$gnudata\" using 1:2 with impulses";
|
||||
if ($opt_Y) {
|
||||
print GNUSCRIPT ", \"$gnudata\" using 1:3 with lines"
|
||||
}
|
||||
if ($opt_b || $opt_B) {
|
||||
print GNUSCRIPT ", \"$gnudata\" using 1:4 with lines"
|
||||
}
|
||||
print GNUSCRIPT "\n";
|
||||
close (GNUSCRIPT);
|
||||
|
||||
if ($opt_C) {
|
||||
print "Content-type: image/gif\n\n";
|
||||
}
|
||||
|
||||
if ($opt_o) { `$gnuplot/gnuplot $ticdata $gnuscript > $opt_o` }
|
||||
else {
|
||||
`$gnuplot/gnuplot $ticdata $gnuscript > $outfile`;
|
||||
open (OUTFILE,"$outfile");
|
||||
while ($bytesread=read(OUTFILE,$buffer,1024)) { print $buffer }
|
||||
close (OUTFILE);
|
||||
if ($opt_O) { `$gnuplot/gnuplot $ticdata $gnuscript > $opt_O` }
|
||||
}
|
||||
|
||||
# the end. clean up.
|
||||
|
||||
if ($opt_v) { print "done. cleaning up..\n" }
|
||||
|
||||
unlink ($outfile);
|
||||
unlink ($ticdata);
|
||||
unlink ($gnudata);
|
||||
unlink ($gnuscript);
|
||||
exit 0;
|
|
@ -0,0 +1,462 @@
|
|||
#! /usr/local/bin/perl
|
||||
|
||||
# The contents of this file are subject to the Mozilla Public License
|
||||
# Version 1.0 (the "License"); you may not use this file except in
|
||||
# compliance with the License. You may obtain a copy of the License at
|
||||
# http://www.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS IS"
|
||||
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing rights and limitations
|
||||
# under the License.
|
||||
#
|
||||
# The Original Code is the Berkeley Open Infrastructure for Network Computing.
|
||||
#
|
||||
# The Initial Developer of the Original Code is the SETI@home project.
|
||||
# Portions created by the SETI@home project are Copyright (C) 2002
|
||||
# University of California at Berkeley. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
|
||||
# Stripchart.cgi - Version 2.1 by Matt Lebofsky ( started: November 11, 2002 )
|
||||
#
|
||||
# Requires: stripchart
|
||||
# stripchart.cnf (make sure you set the path the .cnf file below)
|
||||
# apache or other CGI-enabled web server
|
||||
#
|
||||
# Stripchart.cgi is a web-based GUI interface for stripchart, allowing
|
||||
# users to display multiple plots from various data sources.
|
||||
#
|
||||
# You should only need to edit the variables in the section
|
||||
# "GLOBAL/DEFAULT VARS" below
|
||||
#
|
||||
# Type "stripchart -h" for usage
|
||||
#
|
||||
# See doc/stripchart.txt for details
|
||||
|
||||
use CGI;
|
||||
$query = CGI::new();
|
||||
use File::Basename;
|
||||
|
||||
################
|
||||
# READ IN .cnf
|
||||
################
|
||||
|
||||
# Where is the .cnf file?
|
||||
$cnfpath = "./stripchart.cnf";
|
||||
|
||||
# Read it in:
|
||||
open (CNFFILE,$cnfpath) or die "cannot open configuration file: $cnfpath\nmake sure this variable is set properly";
|
||||
while (<CNFFILE>) { eval }
|
||||
close (CNFFILE);
|
||||
|
||||
###############
|
||||
# PREP ARRAYS
|
||||
###############
|
||||
|
||||
# Read in list of datafiles:
|
||||
@datafiles = `$grepexe -v '^#' $datafilelist`;
|
||||
|
||||
# Read in list of queries:
|
||||
@querylist = `$grepexe -v '^#' $queryfilelist`;
|
||||
|
||||
# Make file option list based on @datafiles
|
||||
$optionlist = "";
|
||||
foreach $element (@datafiles) {
|
||||
chomp $element;
|
||||
$thisop = (split /:/, $element)[1];
|
||||
$optionlist .= "<option>$thisop</option>\n";
|
||||
}
|
||||
|
||||
# Make query option list based on @querylist
|
||||
$queryoptionlist = "<option value=\"stripchart.cgi\">------------------------------</option>";
|
||||
foreach $element (@querylist) {
|
||||
chomp $element;
|
||||
($thisname,$thisquery) = (split /:/, $element)[0,1];
|
||||
$queryoptionlist .= "<option value=\"stripchart.cgi?$thisquery\">$thisname</option>\n";
|
||||
}
|
||||
|
||||
# Make year list based on time right now, and other lists
|
||||
$yearlist = "";
|
||||
for ($i = $year; $i> 1999; $i--) { $yearlist .= "<option>$i</option>\n" }
|
||||
$monthlist = sprintf("<option>%02d</option>\n",$month);
|
||||
foreach $i (01 .. 12) { $monthlist .= sprintf("<option>%02d</option>\n",$i) }
|
||||
$daylist = sprintf("<option>%02d</option>\n",$day);
|
||||
foreach $i (01 .. 31) { $daylist .= sprintf("<option>%02d</option>\n",$i) }
|
||||
$hourlist = sprintf("<option>%02d</option>\n",$hour);
|
||||
foreach $i (00 .. 23) { $hourlist .= sprintf("<option>%02d</option>\n",$i) }
|
||||
$minlist = sprintf("<option>%02d</option>\n",$min);
|
||||
for ($i=0; $i<59; $i+=5) { $minlist .= sprintf("<option>%02d</option>\n",$i) }
|
||||
|
||||
#############
|
||||
# SUBS
|
||||
#############
|
||||
|
||||
sub to_unix_time {
|
||||
# same routine as in stripchart
|
||||
|
||||
# no colons and no decimal point? must already be in unix time
|
||||
if ($_[0] !~ /:/ && $_[0] !~ /\./ ) { return $_[0] }
|
||||
|
||||
# colons = civil time
|
||||
if ($_[0] =~ /:/) {
|
||||
(my $year, my $month, my $day, my $hour, my $minute) = split /:/, $_[0];
|
||||
$month--;
|
||||
return timelocal(0,$minute,$hour,$day,$month,$year)
|
||||
}
|
||||
|
||||
# must be julian date
|
||||
return (($_[0] - 2440587.5) * $daysecs);
|
||||
|
||||
}
|
||||
|
||||
#############
|
||||
# MAIN
|
||||
#############
|
||||
|
||||
# ARE WE JUST PLOTTING A SINGLE GRAPH?
|
||||
#
|
||||
# stripchart.cgi calls itself via an "<IMG SRC=" tag, so we need to
|
||||
# act accordingly - if all we have to do is call stripchart to plot
|
||||
# a graph based on the user-selected flags, then do so and exit:
|
||||
|
||||
if ($query->param("flags") ne "") {
|
||||
$flags = $query->param("flags");
|
||||
$outfile = "/tmp/tempout$$" . "." . rand(100000);
|
||||
print "Content-type: image/gif\n\n";
|
||||
`$stripchartexe $flags > $outfile`;
|
||||
open (OUTFILE,"$outfile");
|
||||
while ($dummy=read(OUTFILE,$buffer,1024)) { print $buffer }
|
||||
close (OUTFILE);
|
||||
unlink ($outfile);
|
||||
exit 0
|
||||
}
|
||||
|
||||
# ARE WE SAVING/DELETING A QUERY?
|
||||
#
|
||||
# If the user chose to save or delete a query, act on that and
|
||||
# then continue on with the standard plots:
|
||||
|
||||
if ($query->param("sqname") ne "") {
|
||||
$sqname = $query->param("sqname");
|
||||
# are we deleting it?
|
||||
if ($query->param("delq") eq "y") {
|
||||
@querylist = `$grepexe -v '^$sqname:' $queryfilelist`;
|
||||
open (QUERYLIST,">$queryfilelist");
|
||||
flock (QUERYLIST,2);
|
||||
foreach $queryline (@querylist) {
|
||||
print QUERYLIST $queryline
|
||||
}
|
||||
}
|
||||
# must be saving it
|
||||
else {
|
||||
# first check to see if query already in the list
|
||||
$found = 0;
|
||||
foreach $checkline (@querylist) {
|
||||
($key,$value) = split /:/, $checkline;
|
||||
if ($key eq $sqname) { $found = 1 }
|
||||
}
|
||||
# not found - add it to the end
|
||||
if (!$found) {
|
||||
open (QUERYLIST,">>$queryfilelist");
|
||||
flock (QUERYLIST,2);
|
||||
$fullquery = $ENV{'QUERY_STRING'};
|
||||
$fullquery =~ s/sqname=$sqname//;
|
||||
print QUERYLIST "$sqname:$fullquery\n";
|
||||
close (QUERYLIST);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# PARSE INCOMING
|
||||
$datafile1 = $query->param("df1");
|
||||
|
||||
$numcharts = $query->param("numcharts");
|
||||
if ($numcharts == 0) { $numcharts = $defaultnumcharts }
|
||||
|
||||
print $query->header;
|
||||
print << "EOF";
|
||||
<html>
|
||||
<head>
|
||||
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
|
||||
<META HTTP-EQUIV="Expires" CONTENT="-1">
|
||||
<title>Stripchart</title>
|
||||
</head>
|
||||
<body>
|
||||
EOF
|
||||
|
||||
if ($datafile1 ne "") { # stripcharts were selected, so plot them
|
||||
|
||||
foreach $which (1 .. $numcharts) {
|
||||
$thisfile = $query->param("df$which");
|
||||
if ($thisfile eq "No plot" || $thisfile =~ /^-+$/ || $thisfile eq "") { next }
|
||||
if ($thisfile eq "Same as datafile 1") { $thisfile = $query->param("df1") }
|
||||
$rangetype = $query->param("dr$which");
|
||||
$trustnum = $which;
|
||||
$from = "-f ";
|
||||
$to = "";
|
||||
if ($rangetype eq "sa1") { $rangetype = $query->param("dr1"); $trustnum = 1 }
|
||||
if ($rangetype eq "lh") { $from .= "-" .($query->param("lhv$trustnum") / 24) }
|
||||
elsif ($rangetype eq "ld") { $from .= "-" . ($query->param("ldv$trustnum")) }
|
||||
else {
|
||||
$fromstring = $query->param("dfy$trustnum") . ":" .
|
||||
$query->param("dfm$trustnum") . ":" .
|
||||
$query->param("dfd$trustnum") . ":" .
|
||||
$query->param("dfh$trustnum") . ":" .
|
||||
$query->param("dfn$trustnum");
|
||||
$tostring = $query->param("dty$trustnum") . ":" .
|
||||
$query->param("dtm$trustnum") . ":" .
|
||||
$query->param("dtd$trustnum") . ":" .
|
||||
$query->param("dth$trustnum") . ":" .
|
||||
$query->param("dtn$trustnum");
|
||||
$from .= to_unix_time($fromstring);
|
||||
$to = "-t " . to_unix_time($tostring)
|
||||
}
|
||||
|
||||
foreach $element (@datafiles) {
|
||||
($maybepath,$maybefile,$maybedatacol,$maybeflags) = split /:/, $element;
|
||||
if ($maybefile eq $thisfile) {
|
||||
$fullpath = $maybepath;
|
||||
$datacol = $maybedatacol;
|
||||
$flags = $maybeflags;
|
||||
}
|
||||
}
|
||||
|
||||
$flags .= " $from $to";
|
||||
|
||||
if ($query->param("log$which")) { $flags .= " -L" }
|
||||
if ($query->param("bavg$which")) { $flags .= " -B " }
|
||||
if ($query->param("base$which")) { $flags .= " -b " . $query->param("basev$which") }
|
||||
if ($query->param("ymin$which")) { $flags .= " -d " . $query->param("yminv$which") }
|
||||
if ($query->param("ymax$which")) { $flags .= " -D " . $query->param("ymaxv$which") }
|
||||
if ($query->param("savem")) { $flags .= " -O /tmp/stripchart_plot_$which.gif" }
|
||||
|
||||
|
||||
$flags .= " -i $fullpath -y $datacol -T \"$thisfile RANGE\" $defaultflags";
|
||||
|
||||
$fixflags = $flags;
|
||||
$fixflags =~ s/ /+/g;
|
||||
$fixflags =~ s/"/%22/g;
|
||||
|
||||
if ($cgiplotwidth == 0) {
|
||||
print "<img src=\"stripchart.cgi?flags=$fixflags\"><br>\n"
|
||||
}
|
||||
else {
|
||||
print "<img src=\"stripchart.cgi?flags=$fixflags\" width=$cgiplotwidth height=$cgiplotheight><br>\n"
|
||||
}
|
||||
|
||||
}
|
||||
print "<hr>";
|
||||
|
||||
}
|
||||
|
||||
# Now display the user entry form:
|
||||
|
||||
print << "EOF";
|
||||
<form name="Saved queries">
|
||||
<font size=2>
|
||||
Select a saved query if you like:
|
||||
</font>
|
||||
<font size=1>
|
||||
<select onChange="location = this.options[selectedIndex].value">
|
||||
$queryoptionlist
|
||||
</select>
|
||||
</font>
|
||||
</form>
|
||||
<font size=2>
|
||||
|
||||
Number of stripcharts:
|
||||
EOF
|
||||
for ($i=1;$i<21;$i++) {
|
||||
$fullquery = $ENV{'QUERY_STRING'};
|
||||
$fullquery =~ s/numcharts=\d+//;
|
||||
$fullquery =~ s/&+/&/g;
|
||||
$fullquery =~ s/^&//;
|
||||
print "<a href=\"stripchart.cgi?$fullquery&numcharts=$i\">$i</a>\n"
|
||||
}
|
||||
|
||||
print << "EOF";
|
||||
<p>
|
||||
<form action=stripchart.cgi>
|
||||
<input type=submit value="click here" name=submit> to plot stripcharts -
|
||||
enter name:
|
||||
<input type=text name=sqname size=20>
|
||||
to save query (check here:
|
||||
<input type=checkbox name=delq value=y>
|
||||
to delete)
|
||||
<input type=hidden value=$numcharts name=numcharts>
|
||||
<p>
|
||||
EOF
|
||||
|
||||
foreach $which (1 .. $numcharts) {
|
||||
$thisoptionlist = $optionlist;
|
||||
if ($which > 1) {
|
||||
$thisoptionlist = "<option>No plot</option>\n" .
|
||||
"<option>Same as datafile 1</option>\n" .
|
||||
"<option>----------------------------</option>\n" . $optionlist
|
||||
}
|
||||
if ($dummy = $query->param("df$which")) {
|
||||
$dummy = "<option>$dummy</option>";
|
||||
$newoptionlist = "$dummy\n";
|
||||
foreach $thisline (split /\n/, $thisoptionlist) {
|
||||
if ($dummy ne $thisline) { $newoptionlist .= "$thisline\n" }
|
||||
}
|
||||
$thisoptionlist = $newoptionlist;
|
||||
}
|
||||
$lhc = "";
|
||||
$ldc = "";
|
||||
$ownc = "";
|
||||
$sa1c = "";
|
||||
if ($dummy = $query->param("dr$which")) {
|
||||
if ($dummy eq "lh") { $lhc = "checked" }
|
||||
elsif ($dummy eq "ld") { $ldc = "checked" }
|
||||
elsif ($dummy eq "own") { $ownc = "checked" }
|
||||
elsif ($dummy eq "sa1") { $sa1c = "checked" }
|
||||
}
|
||||
else {
|
||||
if ($which > 1) { $sa1c = "checked" }
|
||||
else { $lhc = "checked" }
|
||||
}
|
||||
$samerange = "";
|
||||
if ($which > 1) {
|
||||
$samerange = "<input type=radio name=dr$which value=sa1 $sa1c> Same range as datafile 1"
|
||||
}
|
||||
|
||||
$logcheck = "";
|
||||
if ($query->param("log$which") eq "y") { $logcheck = "checked" }
|
||||
|
||||
$bavgcheck = "";
|
||||
if ($query->param("bavg$which") eq "y") { $bavgcheck = "checked" }
|
||||
$basecheck = "";
|
||||
if ($query->param("base$which") eq "y") { $basecheck = "checked"; $baseval = $query->param("basev$which") }
|
||||
|
||||
|
||||
$ymincheck = "";
|
||||
$ymaxcheck = "";
|
||||
if ($query->param("ymin$which") eq "y") { $ymincheck = "checked"; $yminval = $query->param("yminv$which") }
|
||||
if ($query->param("ymax$which") eq "y") { $ymaxcheck = "checked"; $ymaxval = $query->param("ymaxv$which") }
|
||||
|
||||
if ($dummy = $query->param("dfy$which")) {
|
||||
$dfytop = "<option>$dummy</option>\n<option>---</option>\n" }
|
||||
else { $dfytop = "" }
|
||||
if ($dummy = $query->param("dfm$which")) {
|
||||
$dfmtop = "<option>$dummy</option>\n<option>---</option>\n" }
|
||||
else { $dfmtop = "" }
|
||||
if ($dummy = $query->param("dfd$which")) {
|
||||
$dfdtop = "<option>$dummy</option>\n<option>---</option>\n" }
|
||||
else { $dfdtop = "" }
|
||||
if ($dummy = $query->param("dfh$which")) {
|
||||
$dfhtop = "<option>$dummy</option>\n<option>---</option>\n" }
|
||||
else { $dfhtop = "" }
|
||||
if ($dummy = $query->param("dfn$which")) {
|
||||
$dfntop = "<option>$dummy</option>\n<option>---</option>\n" }
|
||||
else { $dfntop = "" }
|
||||
|
||||
if ($dummy = $query->param("dty$which")) {
|
||||
$dtytop = "<option>$dummy</option>\n<option>---</option>\n" }
|
||||
else { $dtytop = "" }
|
||||
if ($dummy = $query->param("dtm$which")) {
|
||||
$dtmtop = "<option>$dummy</option>\n<option>---</option>\n" }
|
||||
else { $dtmtop = "" }
|
||||
if ($dummy = $query->param("dtd$which")) {
|
||||
$dtdtop = "<option>$dummy</option>\n<option>---</option>\n" }
|
||||
else { $dtdtop = "" }
|
||||
if ($dummy = $query->param("dth$which")) {
|
||||
$dthtop = "<option>$dummy</option>\n<option>---</option>\n" }
|
||||
else { $dthtop = "" }
|
||||
if ($dummy = $query->param("dtn$which")) {
|
||||
$dtntop = "<option>$dummy</option>\n<option>---</option>\n" }
|
||||
else { $dtntop = "" }
|
||||
|
||||
$lhourlist = "";
|
||||
if ($query->param("lhv$which")) {
|
||||
$lhourlist = "<option>" . $query->param("lhv$which") . "</option>";
|
||||
}
|
||||
foreach $hourval (24,36,48,60,72) {
|
||||
if ($hourval != $query->param("lhv$which")) {
|
||||
$lhourlist .= "<option>$hourval</option>";
|
||||
}
|
||||
}
|
||||
|
||||
$ldaylist = "";
|
||||
if ($query->param("ldv$which")) {
|
||||
$ldaylist = "<option>" . $query->param("ldv$which") . "</option>";
|
||||
}
|
||||
foreach $dayval (2,3,4,5,6,7,10,14,21,28,30,60,90,120,240,360,720) {
|
||||
if ($dayval != $query->param("ldv$which")) {
|
||||
$ldaylist .= "<option>$dayval</option>";
|
||||
}
|
||||
}
|
||||
|
||||
print << "EOF";
|
||||
please select datafile $which:
|
||||
<select name=df$which size=1>
|
||||
$thisoptionlist
|
||||
</select>
|
||||
<br>
|
||||
<input type=radio name=dr$which value=lh $lhc> Last
|
||||
<font size=1>
|
||||
<select name=lhv$which size=1>
|
||||
$lhourlist
|
||||
</select>
|
||||
</font>
|
||||
<font size=2>
|
||||
hours
|
||||
<input type=radio name=dr$which value=ld $ldc> Last
|
||||
</font>
|
||||
<font size=1>
|
||||
<select name=ldv$which size=1>
|
||||
$ldaylist
|
||||
</select>
|
||||
</font>
|
||||
<font size=2>
|
||||
days
|
||||
$samerange
|
||||
<br>
|
||||
<input type=radio name=dr$which value=own $ownc> Enter range:
|
||||
</font>
|
||||
<font size=1>
|
||||
<select name=dfy$which size=1>$dfytop$yearlist
|
||||
</select>/<select name=dfm$which size=1>$dfmtop$monthlist
|
||||
</select>/<select name=dfd$which size=1>$dfdtop$daylist
|
||||
</select> <select name=dfh$which size=1>$dfhtop$hourlist
|
||||
</select>:<select name=dfn$which size=1>$dfntop$minlist
|
||||
</select> ->
|
||||
<select name=dty$which size=1>$dtytop$yearlist
|
||||
</select>/<select name=dtm$which size=1>$dtmtop$monthlist
|
||||
</select>/<select name=dtd$which size=1>$dtdtop$daylist
|
||||
</select> <select name=dth$which size=1>$dthtop$hourlist
|
||||
</select>:<select name=dtn$which size=1>$dtntop$minlist
|
||||
</select>
|
||||
</font>
|
||||
<font size=2>
|
||||
<br>
|
||||
<input type=checkbox name=log$which value=y $logcheck> Log y axis?
|
||||
<input type=checkbox name=bavg$which value=y $bavgcheck> Baseline average, or
|
||||
<input type=checkbox name=base$which value=y $basecheck> Baseline at:
|
||||
<input type=text name=basev$which value="$baseval" size=8>
|
||||
<input type=checkbox name=ymin$which value=y $ymincheck> Y min:
|
||||
<input type=text name=yminv$which value="$yminval" size=8>
|
||||
<input type=checkbox name=ymax$which value=y $ymaxcheck> Y max:
|
||||
<input type=text name=ymaxv$which value="$ymaxval" size=8>
|
||||
</font>
|
||||
<hr>
|
||||
EOF
|
||||
|
||||
} # end foreach $which
|
||||
|
||||
print << "EOF";
|
||||
<font size=2>
|
||||
<input type=checkbox name=savem value=y> Save images in /tmp?
|
||||
<br>
|
||||
<input type=submit value="click here" name=submit> to plot stripcharts
|
||||
</td></tr></table>
|
||||
</form><p>
|
||||
<a href=stripchart.cgi>Reset Form</a><p>
|
||||
</font>
|
||||
<font size=1>
|
||||
Stripchart version $majorversion.$minorversion by
|
||||
<a href="mailto:mattl\@ssl.berkeley.edu">Matt Lebofsky</a>.
|
||||
</body></html>
|
||||
EOF
|
|
@ -0,0 +1,69 @@
|
|||
#! /usr/local/bin/perl
|
||||
|
||||
use Time::Local;
|
||||
|
||||
# What version is this?
|
||||
$majorversion = 2; $minorversion = 1;
|
||||
|
||||
# Where is gnuplot located?
|
||||
# $gnuplot = "/usr/local/gnuplot-3.7";
|
||||
$gnuplot = "/disks/asimov/a/users/hiramc/local/src/gnuplot-3.7";
|
||||
|
||||
# Temporary files
|
||||
$suffix = rand(10000);
|
||||
$gnudata = "/tmp/XYZzyx..indata" . $suffix; # contains input data
|
||||
$ticdata = "/tmp/XYZzyx..ticdata" . $suffix; # contains xtic information
|
||||
$gnuscript = "/tmp/XYZzyx..gnuscript" .$suffix; # contains script for gnuplot
|
||||
$outfile = "/tmp/XYZzyx..outfile" . $suffix; # contains output plot
|
||||
|
||||
# Default colors for plotting (in standard RRGGBB hex format)
|
||||
# in order: 1. background color, 2. axis/font color, 3. grid color,
|
||||
# 4. point color 1, 5. point color 2, 6. point color 3
|
||||
$colorvals = "xffffff x000000 xc0c0c0 x00a000 x0000a0 x2020c0";
|
||||
|
||||
# Default size of plot in pixels
|
||||
$plotwidth = 600;
|
||||
$plotheight = 180;
|
||||
|
||||
# Abbreviations for months
|
||||
@monthabbs = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
|
||||
|
||||
# Where are these unix commands located?
|
||||
$tailexe = "/usr/ucb/tail";
|
||||
$catexe = "/usr/bin/cat";
|
||||
$grepexe = "/usr/bin/grep";
|
||||
|
||||
# How many seconds in a day?
|
||||
$daysecs = 86400;
|
||||
|
||||
# Local time difference? (Yes this is a wonky way to get current time zone difference)
|
||||
($sec,$min,$hour,$mday,$mon,$year) = gmtime($rightnow);
|
||||
$tzdiff = timegm($sec,$min,$hour,$mday,$mon,$year) - timelocal($sec,$min,$hour,$mday,$mon,$year);
|
||||
|
||||
# Where is the stripchart executable located?
|
||||
$stripchartexe = "./stripchart"
|
||||
|
||||
# What is the default number of stripcharts?
|
||||
$defaultnumcharts = 1;
|
||||
|
||||
# Any default flags to send to stripchart?
|
||||
$defaultflags = "-s";
|
||||
|
||||
# Where is the list of datafiles for stripchart.cgi?
|
||||
# Note: there is a sample copy in the samples directory:
|
||||
$datafilelist = "/disks/jill/a/inet_services/www/share/cgi-bin/lib/datafiles";
|
||||
|
||||
# Where is the list of user-definied cgi queries?
|
||||
# Note: this file gets created by the cgi - must put it somewhere that the cgi user can write to
|
||||
$queryfilelist = "/disks/jill/a/inet_services/www/share/cgi-bin/lib/querylist";
|
||||
|
||||
# What time is it right now?
|
||||
$rightnow = time;
|
||||
($sec,$min,$hour,$day,$month,$year) = localtime($rightnow);
|
||||
$sec = "";
|
||||
$month++;
|
||||
$year += 1900;
|
||||
|
||||
# CGI plot width and plot height: set only if it will always be the same
|
||||
# $cgiplotwidth = 0; $cgiplotheight = 0; # if you don't know
|
||||
$cgiplotwidth = 600; $cgiplotheight = 192; # if you do know
|
13
todo
13
todo
|
@ -45,6 +45,19 @@ Messages from core client
|
|||
MEDIUM-PRIORITY (should do before public release)
|
||||
-----------------------
|
||||
|
||||
Devise system for porting applications
|
||||
password-protected web-based interface for
|
||||
uploading app versions and adding them to DB
|
||||
|
||||
Figure out how to support people with computers at home/work
|
||||
with different preferences.
|
||||
- separate accounts, but credit funnels to 1 account?
|
||||
(can have same email?)
|
||||
- separate prefs under 1 account?
|
||||
need separate DB table for prefs?
|
||||
|
||||
Add 2-D waterfall display to Astropulse
|
||||
|
||||
protect project admin web pages (htaccess)
|
||||
get timezone working on all platforms
|
||||
|
||||
|
|
Loading…
Reference in New Issue