11"""Implementation of the REST API for the backbone service."""
22
3- import os
4- import logging
53import flask
4+ import logging
5+ import os
66import time
7+
78from f8a_worker .setup_celery import init_selinon
89from flask import Flask , request
910from flask_cors import CORS
1011from raven .contrib .flask import Sentry
1112
1213from src .recommender import RecommendationTask as RecommendationTaskV1
1314from src .stack_aggregator import StackAggregator as StackAggregatorV1
15+ from src .utils import push_data , total_time_elapsed
1416from src .v2 .recommender import RecommendationTask as RecommendationTaskV2
1517from src .v2 .stack_aggregator import StackAggregator as StackAggregatorV2
16- from src .utils import push_data , total_time_elapsed , get_time_delta
17-
18-
19- def setup_logging (flask_app ):
20- """Perform the setup of logging (file, log level) for this application."""
21- if not flask_app .debug :
22- handler = logging .StreamHandler ()
23- handler .setFormatter (logging .Formatter (
24- '[%(asctime)s] %(levelname)s in %(pathname)s:%(lineno)d: %(message)s' ))
25- log_level = os .environ .get ('FLASK_LOGGING_LEVEL' , logging .getLevelName (logging .WARNING ))
26- handler .setLevel (log_level )
27-
28- flask_app .logger .addHandler (handler )
29- flask_app .config ['LOGGER_HANDLER_POLICY' ] = 'never'
30- flask_app .logger .setLevel (logging .DEBUG )
3118
19+ logger = logging .getLogger (__name__ )
3220
3321app = Flask (__name__ )
34- setup_logging (app )
3522CORS (app )
3623SENTRY_DSN = os .environ .get ("SENTRY_DSN" , "" )
3724sentry = Sentry (app , dsn = SENTRY_DSN , logging = True , level = logging .ERROR )
3825
39- logger = logging .getLogger (__name__ )
40-
4126init_selinon ()
4227
4328
@@ -68,29 +53,25 @@ def _recommender(handler):
6853 }
6954
7055 input_json = request .get_json ()
71- if input_json and 'external_request_id' in input_json and input_json ['external_request_id' ]:
72- external_request_id = input_json ['external_request_id' ]
73- logger .info ('%s recommender/ request with payload: %s' , external_request_id , input_json )
74-
75- try :
76- check_license = request .args .get ('check_license' , 'false' ) == 'true'
77- persist = request .args .get ('persist' , 'true' ) == 'true'
78- r = handler .execute (input_json , persist = persist ,
79- check_license = check_license )
80- except Exception as e :
81- r = {
82- 'recommendation' : 'unexpected error' ,
83- 'external_request_id' : input_json .get ('external_request_id' ),
84- 'message' : '%s' % e
85- }
86- metrics_payload ['status_code' ] = 400
87- logger .error ('%s failed %s' , external_request_id , r )
56+ external_request_id = input_json ['external_request_id' ]
57+ logger .info ('%s recommender/ request with payload: %s' , external_request_id , input_json )
8858
8959 try :
90- metrics_payload ['value' ] = get_time_delta (audit_data = r ['result' ]['_audit' ])
60+ check_license = request .args .get ('check_license' , 'false' ) == 'true'
61+ persist = request .args .get ('persist' , 'true' ) == 'true'
62+ r = handler .execute (input_json , persist = persist ,
63+ check_license = check_license )
64+ except Exception as e :
65+ r = {
66+ 'recommendation' : 'unexpected error' ,
67+ 'external_request_id' : input_json .get ('external_request_id' ),
68+ 'message' : '%s' % e
69+ }
70+ metrics_payload ['status_code' ] = 400
71+ metrics_payload ['value' ] = 0
9172 push_data (metrics_payload )
92- except KeyError :
93- pass
73+ logger . error ( '%s failed %s' , external_request_id , r )
74+ raise e
9475
9576 logger .info ('%s took %0.2f seconds for _recommender' ,
9677 external_request_id , time .time () - recommender_started_at )
@@ -114,38 +95,31 @@ def _stack_aggregator(handler):
11495 'status_code' : 200
11596 }
11697
117- if input_json and 'external_request_id' in input_json \
118- and input_json ['external_request_id' ]:
119- external_request_id = input_json ['external_request_id' ]
120- logger .info ('%s stack_aggregator/ request with payload: %s' ,
121- external_request_id , input_json )
122-
123- try :
124- persist = request .args .get ('persist' , 'true' ) == 'true'
125- s = handler .execute (input_json , persist = persist )
126- if s is not None and s .get ('result' ) and s .get ('result' ).get ('_audit' ):
127- # Creating and Pushing Total Metrics Data to Accumulator
128- metrics_payload ['value' ] = total_time_elapsed (
129- sa_audit_data = s ['result' ]['_audit' ],
130- external_request_id = input_json ['external_request_id' ])
131- push_data (metrics_payload )
132-
133- except Exception as e :
134- s = {
135- 'stack_aggregator' : 'unexpected error' ,
136- 'external_request_id' : input_json .get ('external_request_id' ),
137- 'message' : '%s' % e
138- }
139- metrics_payload ['status_code' ] = 400
140- logger .error ('%s failed %s' , external_request_id , s )
141-
142- try :
143- # Pushing Individual Metrics Data to Accumulator
144- metrics_payload ['value' ] = get_time_delta (audit_data = s ['result' ]['_audit' ])
145- metrics_payload ['endpoint' ] = request .endpoint
98+ external_request_id = input_json ['external_request_id' ]
99+ logger .info ('%s stack_aggregator/ request with payload: %s' ,
100+ external_request_id , input_json )
101+
102+ try :
103+ persist = request .args .get ('persist' , 'true' ) == 'true'
104+ s = handler .execute (input_json , persist = persist )
105+ if s .get ('result' , {}).get ('_audit' ):
106+ # Creating and Pushing Total Metrics Data to Accumulator
107+ metrics_payload ['value' ] = total_time_elapsed (
108+ sa_audit_data = s ['result' ]['_audit' ],
109+ external_request_id = input_json ['external_request_id' ])
146110 push_data (metrics_payload )
147- except KeyError :
148- pass
111+ except Exception as e :
112+ s = {
113+ 'stack_aggregator' : 'unexpected error' ,
114+ 'external_request_id' : input_json .get ('external_request_id' ),
115+ 'message' : '%s' % e
116+ }
117+ metrics_payload ['status_code' ] = 400
118+ # Pushing Individual Metrics Data to Accumulator
119+ metrics_payload ['value' ] = 0
120+ push_data (metrics_payload )
121+ logger .error ('%s failed %s' , external_request_id , s )
122+ raise e
149123
150124 logger .info ('%s took %0.2f seconds for _stack_aggregators' ,
151125 external_request_id , time .time () - stack_aggregator_started_at )
0 commit comments