1
- from flask import Flask , request , make_response , abort
2
- from flask_talisman import Talisman , DENY
3
1
import json
4
- import boto3
2
+ import logging
3
+ import sys
5
4
from datetime import datetime
5
+
6
+ from gevent import monkey
7
+
8
+ # This need to be before boto3
9
+ monkey .patch_all () # NOQA
10
+
11
+ import boto3
12
+ import time
13
+
14
+ from flask import Flask , request , make_response , abort
15
+ from flask_talisman import Talisman , DENY
16
+ from gevent .pywsgi import WSGIServer , LoggingLogAdapter
6
17
from prometheus_client import generate_latest , CONTENT_TYPE_LATEST , Histogram
7
18
19
+ LOG = logging .getLogger (__name__ )
20
+
8
21
app = Flask (__name__ )
9
22
# TODO: These options are like this because we haven't set up TLS
10
23
Talisman (app , frame_options = DENY , force_https = False , strict_transport_security = False )
@@ -39,6 +52,12 @@ def _verify(data):
39
52
abort (400 , '%s must be specified' % k )
40
53
41
54
55
+ @app .route ('/_/slow' )
56
+ def slow ():
57
+ time .sleep (1 )
58
+ return make_response ('' , 200 )
59
+
60
+
42
61
@app .route ('/_/health' )
43
62
@health_histogram .time ()
44
63
def health ():
@@ -53,8 +72,20 @@ def metrics():
53
72
return resp
54
73
55
74
75
+ def _init_logging ():
76
+ root = logging .getLogger ()
77
+ root .setLevel (logging .INFO )
78
+ handler = logging .StreamHandler (sys .stdout )
79
+ handler .setFormatter (logging .Formatter ("[%(asctime)s|%(levelname)7s] %(message)s [%(name)s|%(threadName)s]" ))
80
+ root .addHandler (handler )
81
+
82
+
56
83
def main ():
57
- app .run (host = '0.0.0.0' )
84
+ _init_logging ()
85
+ log = LoggingLogAdapter (LOG , logging .DEBUG )
86
+ error_log = LoggingLogAdapter (LOG , logging .ERROR )
87
+ http_server = WSGIServer (("" , 5000 ), app , log = log , error_log = error_log )
88
+ http_server .serve_forever ()
58
89
59
90
60
91
if __name__ == '__main__' :
0 commit comments