1
0
Fork 0
myping/myping-client.py

72 lines
2.2 KiB
Python
Executable File

#!/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()