raylu 11 жил өмнө
parent
commit
8728cddf32
3 өөрчлөгдсөн 48 нэмэгдсэн , 10 устгасан
  1. 1 0
      .gitignore
  2. 28 0
      api/reloader.py
  3. 19 10
      api/server.py

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
+*.pyc

+ 28 - 0
api/reloader.py

@@ -0,0 +1,28 @@
+import os
+from os import path
+import sys
+import thread
+import time
+
+def init(server):
+	thread.start_new_thread(_reload, (server,))
+
+def _reload(server):
+	import inotifyx
+
+	fd = inotifyx.init()
+	rootdir = path.dirname(path.abspath(__file__))
+	for dirpath, _, _ in os.walk(rootdir):
+		inotifyx.add_watch(fd, dirpath, inotifyx.IN_CLOSE_WRITE)
+
+	while True:
+		events = inotifyx.get_events(fd)
+		for event in events:
+			if event.name == '4913': # https://code.google.com/p/vim/source/browse/src/fileio.c?spec=svn94df797ed6b03d5387b5ed7526f8c65024112822&r=29eb4c2a33ac701bfcd4d2e2bed7864eba876e0e#3767
+				continue
+			elif event.name.endswith('.py'):
+				print event.name, 'changed, reloading...'
+				os.close(fd)
+				server.stop()
+				os.execv(sys.argv[0], sys.argv)
+				return

+ 19 - 10
api/server.py

@@ -5,10 +5,25 @@ import json
 import os
 from os import path
 import struct
+import warnings
 
+warnings.filterwarnings('ignore', 'libevent')
 import gevent.pywsgi
 
+import reloader
+
 DATA_DIR = path.expanduser('~/sysvitals_data')
+handlers = None
+
+def main():
+	global handlers
+	handlers = {
+		'data': get_data,
+		'datum': post_datum,
+	}
+	server = gevent.pywsgi.WSGIServer(('0.0.0.0', 8892), application)
+	reloader.init(server)
+	server.serve_forever()
 
 def application(environ, start_response):
 	split = environ['PATH_INFO'][1:].split('/')
@@ -24,9 +39,9 @@ def application(environ, start_response):
 
 formats = {
 	'cpu': 'f',
-	'mem': 'l',
-	'net': 'l',
-	'disk': 'l',
+	'mem': 'q',
+	'net': 'q',
+	'disk': 'q',
 }
 
 def get_data(split, environ):
@@ -90,10 +105,4 @@ def write_stat(f, key, format_code, data):
 	array[0] = data
 	f.write(struct.pack(fmt, key, *array))
 
-handlers = {
-	'data': get_data,
-	'datum': post_datum,
-}
-
-server = gevent.pywsgi.WSGIServer(('0.0.0.0', 8892), application)
-server.serve_forever()
+main()