comparison web/templog.py @ 251:b6079cb0c665

merge
author Matt Johnston <matt@ucc.asn.au>
date Wed, 27 May 2015 23:46:06 +0800
parents 141948a400a6
children 3e6f82347eab 0a1b642e3086
comparison
equal deleted inserted replaced
246:c9b20d3d393a 251:b6079cb0c665
64 64
65 65
66 @route('/graph.png') 66 @route('/graph.png')
67 def graph(): 67 def graph():
68 response.set_header('Content-Type', 'image/png') 68 response.set_header('Content-Type', 'image/png')
69 return make_graph(request.query.length, request.query.end) 69 minutes, endstr = get_request_zoom()
70 return make_graph(minutes, endstr)
70 71
71 @route('/set/update', method='post') 72 @route('/set/update', method='post')
72 def set_update(): 73 def set_update():
73 post_json = json.loads(request.forms.data) 74 post_json = json.loads(request.forms.data)
74 75
92 return bottle.template('set', 93 return bottle.template('set',
93 inline_data = log.get_params(), 94 inline_data = log.get_params(),
94 csrf_blob = secure.get_csrf_blob(), 95 csrf_blob = secure.get_csrf_blob(),
95 allowed = allowed) 96 allowed = allowed)
96 97
97 @route('/') 98 def get_request_zoom():
98 def top(): 99 """ returns (length, end) tuple.
99 100 length is in minutes, end is a DATE_FORMAT string """
100 minutes = int(request.query.get('length', 26*60)) 101 minutes = int(request.query.get('length', 26*60))
101 102
102 if 'end' in request.query: 103 if 'end' in request.query:
103 end = datetime.strptime(request.query.end, DATE_FORMAT) 104 end = datetime.strptime(request.query.end, DATE_FORMAT)
104 else: 105 else:
105 end = datetime.now() 106 end = datetime.now()
106 107
107 if 'zoom' in request.query: 108 if 'zoom' in request.query:
108 orig_start = end - timedelta(minutes=minutes) 109 orig_start = end - timedelta(minutes=minutes)
109 orig_end = end 110 orig_end = end
110 xpos = int(request.query.x) 111 scale = float(request.query.scaledwidth) / config.GRAPH_WIDTH
112 xpos = int(request.query.x) / scale
111 xpos -= config.GRAPH_LEFT_MARGIN * config.ZOOM 113 xpos -= config.GRAPH_LEFT_MARGIN * config.ZOOM
112 114
113 if xpos >= 0 and xpos < config.GRAPH_WIDTH * config.ZOOM: 115 if xpos >= 0 and xpos < config.GRAPH_WIDTH * config.ZOOM:
114 click_time = orig_start \ 116 click_time = orig_start \
115 + timedelta(minutes=(float(xpos) / (config.GRAPH_WIDTH * config.ZOOM)) * minutes) 117 + timedelta(minutes=(float(xpos) / (config.GRAPH_WIDTH * config.ZOOM)) * minutes)
121 minutes = int(minutes*ZOOM_SCALE) 123 minutes = int(minutes*ZOOM_SCALE)
122 end += timedelta(minutes=minutes/2) 124 end += timedelta(minutes=minutes/2)
123 125
124 if end > datetime.now(): 126 if end > datetime.now():
125 end = datetime.now() 127 end = datetime.now()
126 128
129 endstr = end.strftime(DATE_FORMAT)
130 return (minutes, endstr)
131
132 @route('/')
133 def top():
134 minutes, endstr = get_request_zoom()
135
127 request.query.replace('length', minutes) 136 request.query.replace('length', minutes)
128 request.query.replace('end', end.strftime(DATE_FORMAT)) 137 request.query.replace('end', endstr)
129 138
130 urlparams = urllib.urlencode(request.query) 139 urlparams = urllib.urlencode(request.query)
131 graphdata = encode_data(make_graph(request.query.length, request.query.end), 'image/png') 140 graphdata = encode_data(make_graph(minutes, endstr), 'image/png')
132 return bottle.template('top', urlparams=urlparams, 141 return bottle.template('top', urlparams=urlparams,
133 end = end.strftime(DATE_FORMAT), 142 end = endstr,
134 length = minutes, 143 length = minutes,
135 graphwidth = config.GRAPH_WIDTH, 144 graphwidth = config.GRAPH_WIDTH,
136 graphdata = graphdata) 145 graphdata = graphdata)
137 146
138 @route('/debug') 147 @route('/debug')