Mercurial > templog
changeset 69:a8ff20f15734
a bunch of web fiddli
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Wed, 27 Jun 2012 23:41:50 +0800 |
parents | 46c43e13a759 |
children | ee0ee8a6c40d 7d243ba2dd39 |
files | web/config.py web/log.py web/templog.py web/views/top.tpl |
diffstat | 4 files changed, 72 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/web/config.py Tue Jun 26 23:34:36 2012 +0800 +++ b/web/config.py Wed Jun 27 23:41:50 2012 +0800 @@ -23,3 +23,6 @@ GRAPH_FONT = "Prociono" #GRAPH_FONT = "URW Gothic L" + +# determine by zooming in an image viewer +GRAPH_LEFT_MARGIN = 95
--- a/web/log.py Tue Jun 26 23:34:36 2012 +0800 +++ b/web/log.py Wed Jun 27 23:41:50 2012 +0800 @@ -97,7 +97,6 @@ '--color', 'MGRID#aaaaaa', '--color', 'BACK#ffffff', '--disable-rrdtool-tag', - 'VRULE:%d#ee0000' % time.time(), '--watermark', watermark, '--imgformat', 'PNG'] \ + graph_args
--- a/web/templog.py Tue Jun 26 23:34:36 2012 +0800 +++ b/web/templog.py Wed Jun 27 23:41:50 2012 +0800 @@ -3,8 +3,10 @@ import binascii import hmac import zlib -import datetime +from datetime import datetime, timedelta import time +import urllib +import sys import bottle from bottle import route, request, response @@ -12,6 +14,9 @@ import config import log +DATE_FORMAT = '%Y%m%d-%H.%M' +ZOOM_SCALE = 2.0 + @route('/update', method='post') def update(): enc_lines = request.forms.lines @@ -28,26 +33,51 @@ @route('/graph.png') def graph(): - # url takes time in hours or days - if 'day' in request.query: - start_day = datetime.datetime.strptime(request.query.day, '%Y%m%d') - start = time.mktime(start_day.timetuple()) - length = int(request.query.get('length', 5)) * 3600 * 24 - else: - if 'hour' in request.query: - start_hour = datetime.datetime.strptime(request.query.hour, '%Y%m%d%H') - else: - start_hour = datetime.datetime.now() - datetime.timedelta(days=1) - - start = time.mktime(start_hour.timetuple()) - length = int(request.query.get('length', 26)) * 3600 + length_minutes = int(request.query.length) + end = datetime.strptime(request.query.end, DATE_FORMAT) + start = end - timedelta(minutes=length_minutes) response.set_header('Content-Type', 'image/png') - return log.graph_png(start, length) + start_epoch = time.mktime(start.timetuple()) + return log.graph_png(start_epoch, length_minutes * 60) @route('/') def top(): - return bottle.template('top', urlparams=request.query_string) + + minutes = int(request.query.get('length', 26*60)) + + if 'end' in request.query: + end = datetime.strptime(request.query.end, DATE_FORMAT) + else: + end = datetime.now() + + if 'zoom' in request.query: + orig_start = end - timedelta(minutes=minutes) + orig_end = end + xpos = int(request.query.x) + xpos -= config.GRAPH_LEFT_MARGIN + + if xpos >= 0 and xpos < config.GRAPH_WIDTH: + click_time = orig_start \ + + timedelta(minutes=(float(xpos) / config.GRAPH_WIDTH) * minutes) + minutes = int(minutes / ZOOM_SCALE) + + end = click_time + timedelta(minutes=minutes/2) + else: + # zoom out + minutes = int(minutes*ZOOM_SCALE) + end += timedelta(minutes=minutes/2) + + if end > datetime.now(): + end = datetime.now() + + request.query.replace('length', minutes) + request.query.replace('end', end.strftime(DATE_FORMAT)) + + urlparams = urllib.urlencode(request.query) + return bottle.template('top', urlparams=urlparams, + end = end.strftime(DATE_FORMAT), + length = minutes) @route('/test') def test():
--- a/web/views/top.tpl Tue Jun 26 23:34:36 2012 +0800 +++ b/web/views/top.tpl Wed Jun 27 23:41:50 2012 +0800 @@ -1,5 +1,26 @@ -<html> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> + +<head> + +<style type="text/css"><!-- +span.no_selection { + -webkit-user-select: none; // webkit (safari, chrome) browsers + -moz-user-select: none; // mozilla browsers + -khtml-user-select: none; // webkit (konqueror) browsers +} +//--> +</style> + + +</head> + <body> -<img src="graph.png?{{urlparams}}"/> +<form action="" method=GET> +<span class="no_selection"><input type="image" src="graph.png?{{urlparams}}"/></span> +<input type="hidden" name="length" value="{{length}}"/> +<input type="hidden" name="end" value="{{end}}"/> +<input type="hidden" name="zoom" value="yeah"/> +</form> </body> </html>