12
12
from platform import uname
13
13
import os
14
14
import contextlib
15
+ from http import HTTPStatus
15
16
from concurrent .futures import ThreadPoolExecutor
16
17
from tornado import web , ioloop , httpserver , gen , options
17
18
from tornado .log import enable_pretty_logging
@@ -98,17 +99,31 @@ def get(self):
98
99
self .write (resp )
99
100
100
101
101
- class PingHandler (BaseHandler ):
102
+ class MetricsHandler (BaseHandler ):
102
103
executor = ThreadPoolExecutor (50 )
103
104
104
105
@run_on_executor ()
105
- def ping (self ):
106
- os .system ('ping z.cn -n 10' )
107
- return 'Ping complete'
106
+ def set_metrics (self ):
107
+ metrics_name = self .get_query_argument ("type" , "access" )
108
+ db ['metrics' ].find_one_and_update (
109
+ {'type' : metrics_name }, {'$inc' : {'count' : 1 }}
110
+ )
111
+ self .set_status (HTTPStatus .CREATED )
112
+ return {}
113
+
114
+ @run_on_executor ()
115
+ def get_metrics (self ):
116
+ metrics_name = self .get_query_argument ("type" , "access" )
117
+ return db ['metrics' ].find_one ({'type' : metrics_name }, {'_id' : False })
108
118
109
119
@gen .coroutine
110
120
def get (self ):
111
- resp = yield self .ping ()
121
+ resp = yield self .get_metrics ()
122
+ self .write (resp )
123
+
124
+ @gen .coroutine
125
+ def post (self ):
126
+ resp = yield self .set_metrics ()
112
127
self .write (resp )
113
128
114
129
@@ -118,6 +133,7 @@ class RunServer:
118
133
handlers = [
119
134
(r'/api/resource' , ResourceHandler ),
120
135
(r'/api/top' , TopHandler ),
136
+ (r'/api/metrics' , MetricsHandler ),
121
137
(r'/' , IndexHandler ),
122
138
(r'/(.*\.html|.*\.js|.*\.css|.*\.png|.*\.jpg|.*\.ico|.*\.gif|.*\.woff2)' , web .StaticFileHandler ,
123
139
{'path' : static_path }),
0 commit comments