#!/usr/bin/env python2 # -*- coding: utf-8 -*- import pymongo import cherrypy import simplejson as json import datetime import os.path import time current_dir = os.path.dirname(os.path.abspath(__file__)) client = pymongo.MongoClient("localhost", 27017) db = client.myping class Values: def index(self, **params): return cherrypy.lib.static.serve_file(os.path.join(current_dir, 'public/index.html')) def values(self, items, host, **params): values = { 'ranges': [], 'values': [] } for record in db.my_collection.find({"host": host}).sort('$natural', pymongo.DESCENDING).limit(int(items)): dt = time.mktime(record['date'].timetuple()) * 1000 values['ranges'].append([dt, record['min'], record['max']]) values['values'].append([dt, record['avg']]) values['ranges'].reverse() values['values'].reverse() cherrypy.response.headers['Content-Type']= 'application/json' return json.dumps(values) def update(self, timestamp, host, **params): values = { 'ranges': [], 'values': [] } date = datetime.datetime.fromtimestamp(int(timestamp)) for record in db.my_collection.find({"host": host, 'date': {'$gt': date}}).sort('$natural', pymongo.DESCENDING).limit(100): dt = time.mktime(record['date'].timetuple()) * 1000 values['ranges'].append([dt, record['min'], record['max']]) values['values'].append([dt, record['avg']]) values['ranges'].reverse() values['values'].reverse() cherrypy.response.headers['Content-Type']= 'application/json' return json.dumps(values) if __name__ == '__main__': mapper = cherrypy.dispatch.RoutesDispatcher() mapper.connect('home',"/",controller=Values(), action='index') mapper.connect('values',"/api/values/:items/:host", controller=Values(), action='values') mapper.connect('update',"/api/update/:timestamp/:host", controller=Values(), action='update') cherrypy.tree.mount(None,config= { "/": { "request.dispatch": mapper, }, } ) cherrypy.server.socket_host = '0.0.0.0' cherrypy.engine.start() cherrypy.engine.block()