Mercurial > templog
comparison web/templog.py @ 69:a8ff20f15734
a bunch of web fiddli
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Wed, 27 Jun 2012 23:41:50 +0800 |
parents | 62112fc2af21 |
children | 959e88c0bdfa |
comparison
equal
deleted
inserted
replaced
67:46c43e13a759 | 69:a8ff20f15734 |
---|---|
1 #!/usr/bin/env python2.7 | 1 #!/usr/bin/env python2.7 |
2 | 2 |
3 import binascii | 3 import binascii |
4 import hmac | 4 import hmac |
5 import zlib | 5 import zlib |
6 import datetime | 6 from datetime import datetime, timedelta |
7 import time | 7 import time |
8 import urllib | |
9 import sys | |
8 | 10 |
9 import bottle | 11 import bottle |
10 from bottle import route, request, response | 12 from bottle import route, request, response |
11 | 13 |
12 import config | 14 import config |
13 import log | 15 import log |
16 | |
17 DATE_FORMAT = '%Y%m%d-%H.%M' | |
18 ZOOM_SCALE = 2.0 | |
14 | 19 |
15 @route('/update', method='post') | 20 @route('/update', method='post') |
16 def update(): | 21 def update(): |
17 enc_lines = request.forms.lines | 22 enc_lines = request.forms.lines |
18 mac = request.forms.hmac | 23 mac = request.forms.hmac |
26 | 31 |
27 return "OK" | 32 return "OK" |
28 | 33 |
29 @route('/graph.png') | 34 @route('/graph.png') |
30 def graph(): | 35 def graph(): |
31 # url takes time in hours or days | 36 length_minutes = int(request.query.length) |
32 if 'day' in request.query: | 37 end = datetime.strptime(request.query.end, DATE_FORMAT) |
33 start_day = datetime.datetime.strptime(request.query.day, '%Y%m%d') | 38 start = end - timedelta(minutes=length_minutes) |
34 start = time.mktime(start_day.timetuple()) | |
35 length = int(request.query.get('length', 5)) * 3600 * 24 | |
36 else: | |
37 if 'hour' in request.query: | |
38 start_hour = datetime.datetime.strptime(request.query.hour, '%Y%m%d%H') | |
39 else: | |
40 start_hour = datetime.datetime.now() - datetime.timedelta(days=1) | |
41 | |
42 start = time.mktime(start_hour.timetuple()) | |
43 length = int(request.query.get('length', 26)) * 3600 | |
44 | 39 |
45 response.set_header('Content-Type', 'image/png') | 40 response.set_header('Content-Type', 'image/png') |
46 return log.graph_png(start, length) | 41 start_epoch = time.mktime(start.timetuple()) |
42 return log.graph_png(start_epoch, length_minutes * 60) | |
47 | 43 |
48 @route('/') | 44 @route('/') |
49 def top(): | 45 def top(): |
50 return bottle.template('top', urlparams=request.query_string) | 46 |
47 minutes = int(request.query.get('length', 26*60)) | |
48 | |
49 if 'end' in request.query: | |
50 end = datetime.strptime(request.query.end, DATE_FORMAT) | |
51 else: | |
52 end = datetime.now() | |
53 | |
54 if 'zoom' in request.query: | |
55 orig_start = end - timedelta(minutes=minutes) | |
56 orig_end = end | |
57 xpos = int(request.query.x) | |
58 xpos -= config.GRAPH_LEFT_MARGIN | |
59 | |
60 if xpos >= 0 and xpos < config.GRAPH_WIDTH: | |
61 click_time = orig_start \ | |
62 + timedelta(minutes=(float(xpos) / config.GRAPH_WIDTH) * minutes) | |
63 minutes = int(minutes / ZOOM_SCALE) | |
64 | |
65 end = click_time + timedelta(minutes=minutes/2) | |
66 else: | |
67 # zoom out | |
68 minutes = int(minutes*ZOOM_SCALE) | |
69 end += timedelta(minutes=minutes/2) | |
70 | |
71 if end > datetime.now(): | |
72 end = datetime.now() | |
73 | |
74 request.query.replace('length', minutes) | |
75 request.query.replace('end', end.strftime(DATE_FORMAT)) | |
76 | |
77 urlparams = urllib.urlencode(request.query) | |
78 return bottle.template('top', urlparams=urlparams, | |
79 end = end.strftime(DATE_FORMAT), | |
80 length = minutes) | |
51 | 81 |
52 @route('/test') | 82 @route('/test') |
53 def test(): | 83 def test(): |
54 import config | 84 import config |
55 import os | 85 import os |