72 lines
2.2 KiB
Python
Executable File
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()
|