def _stack_aggregator(handler): external_request_id = 'None' stack_aggregator_started_at = time.time() assert handler s = {'stack_aggregator': 'failure', 'external_request_id': None} input_json = request.get_json() # (fixme) Create decorator for metrics handling. metrics_payload = { 'pid': os.getpid(), 'hostname': os.environ.get("HOSTNAME"), 'endpoint': request.endpoint, 'request_method': request.method, 'status_code': 200 } if input_json and 'external_request_id' in input_json \ and input_json['external_request_id']: external_request_id = input_json['external_request_id'] logger.info('%s stack_aggregator/ request with payload: %s', external_request_id, input_json) try: persist = request.args.get('persist', 'true') == 'true' s = handler.execute(input_json, persist=persist) if s is not None and s.get('result') and s.get('result').get( '_audit'): # Creating and Pushing Total Metrics Data to Accumulator metrics_payload['value'] = total_time_elapsed( sa_audit_data=s['result']['_audit'], external_request_id=input_json['external_request_id']) push_data(metrics_payload) except Exception as e: s = { 'stack_aggregator': 'unexpected error', 'external_request_id': input_json.get('external_request_id'), 'message': '%s' % e } metrics_payload['status_code'] = 400 logger.error('%s failed %s', external_request_id, s) try: # Pushing Individual Metrics Data to Accumulator metrics_payload['value'] = get_time_delta( audit_data=s['result']['_audit']) metrics_payload['endpoint'] = request.endpoint push_data(metrics_payload) except KeyError: pass logger.info('%s took %0.2f seconds for _stack_aggregators', external_request_id, time.time() - stack_aggregator_started_at) return flask.jsonify(s)
def _recommender(handler): external_request_id = 'None' recommender_started_at = time.time() r = {'recommendation': 'failure', 'external_request_id': None} # (fixme) Create decorator for metrics handling. metrics_payload = { 'pid': os.getpid(), 'hostname': os.environ.get("HOSTNAME"), 'endpoint': request.endpoint, 'request_method': request.method, 'status_code': 200 } input_json = request.get_json() if input_json and 'external_request_id' in input_json and input_json[ 'external_request_id']: external_request_id = input_json['external_request_id'] logger.info('%s recommender/ request with payload: %s', external_request_id, input_json) try: check_license = request.args.get('check_license', 'false') == 'true' persist = request.args.get('persist', 'true') == 'true' r = handler.execute(input_json, persist=persist, check_license=check_license) except Exception as e: r = { 'recommendation': 'unexpected error', 'external_request_id': input_json.get('external_request_id'), 'message': '%s' % e } metrics_payload['status_code'] = 400 logger.error('%s failed %s', external_request_id, r) try: metrics_payload['value'] = get_time_delta( audit_data=r['result']['_audit']) push_data(metrics_payload) except KeyError: pass logger.info('%s took %0.2f seconds for _recommender', external_request_id, time.time() - recommender_started_at) return flask.jsonify(r), metrics_payload['status_code']
def stack_aggregator(payload: ServiceInput, request: Request, persist: bool = True): """Handle POST requests that are sent to /api/v1/stack_aggregator REST API endpoint.""" s = {'stack_aggregator': 'failure', 'external_request_id': None} request_dict = dict(request) metrics_payload = { 'pid': os.getpid(), 'hostname': os.environ.get("HOSTNAME"), 'endpoint': request_dict['path'], 'request_method': request_dict['method'], 'status_code': 200 } input_json = json.loads(payload.json()) if input_json and 'external_request_id' in input_json \ and input_json['external_request_id']: try: s = StackAggregator().execute(input_json, persist=persist) if s is not None and s.get('result') and s.get('result').get( '_audit'): # Creating and Pushing Total Metrics Data to Accumulator metrics_payload['value'] = total_time_elapsed( sa_audit_data=s['result']['_audit'], external_request_id=input_json['external_request_id']) push_data(metrics_payload) except Exception as e: s = { 'stack_aggregator': 'unexpected error', 'external_request_id': input_json.get('external_request_id'), 'message': '%s' % e } metrics_payload['status_code'] = 400 try: # Pushing Individual Metrics Data to Accumulator metrics_payload['value'] = get_time_delta( audit_data=s['result']['_audit']) metrics_payload['endpoint'] = request_dict['path'] if os.getenv('ACCUMULATE_MATRICS', False): push_data(metrics_payload) except KeyError: pass return s
def stack_aggregator(): """Handle POST requests that are sent to /api/v1/stack_aggregator REST API endpoint.""" s = {'stack_aggregator': 'failure', 'external_request_id': None} input_json = request.get_json() metrics_payload = { 'pid': os.getpid(), 'hostname': os.environ.get("HOSTNAME"), 'endpoint': 'api_v1.get_stack_analyses', 'request_method': request.method, 'status_code': 200 } if input_json and 'external_request_id' in input_json \ and input_json['external_request_id']: try: persist = request.args.get('persist', 'true') == 'true' s = StackAggregator().execute(input_json, persist=persist) if s is not None and s.get('result') and s.get('result').get( '_audit'): # Creating and Pushing Total Metrics Data to Accumulator metrics_payload['value'] = total_time_elapsed( sa_audit_data=s['result']['_audit'], external_request_id=input_json['external_request_id']) push_data(metrics_payload) except Exception as e: s = { 'stack_aggregator': 'unexpected error', 'external_request_id': input_json.get('external_request_id'), 'message': '%s' % e } metrics_payload['status_code'] = 400 try: # Pushing Individual Metrics Data to Accumulator metrics_payload['value'] = get_time_delta( audit_data=s['result']['_audit']) metrics_payload['endpoint'] = request.endpoint push_data(metrics_payload) except KeyError: pass return flask.jsonify(s)
def recommender(payload: ServiceInput, request: Request, check_license: bool = True, persist: bool = True): """Handle POST requests that are sent to /api/v1/recommender REST API endpoint.""" r = {'recommendation': 'failure', 'external_request_id': None} request_dict = dict(request) metrics_payload = { 'pid': os.getpid(), 'hostname': os.environ.get("HOSTNAME"), 'endpoint': request_dict['path'], 'request_method': request_dict['method'], 'status_code': 200 } input_json = json.loads(payload.json()) logger.info('recommender/ request with payload: {p}'.format(p=input_json)) if input_json and 'external_request_id' in input_json and input_json[ 'external_request_id']: try: logger.info('### {} - {}'.format(check_license, persist)) r = RecommendationTask().execute(input_json, persist=persist, check_license=check_license) except Exception as e: r = { 'recommendation': 'unexpected error', 'external_request_id': input_json.get('external_request_id'), 'message': '%s' % e } metrics_payload['status_code'] = 400 try: metrics_payload['value'] = get_time_delta( audit_data=r['result']['_audit']) push_data(metrics_payload) except KeyError: pass return r, metrics_payload['status_code']
def recommender(): """Handle POST requests that are sent to /api/v1/recommender REST API endpoint.""" r = {'recommendation': 'failure', 'external_request_id': None} metrics_payload = { 'pid': os.getpid(), 'hostname': os.environ.get("HOSTNAME"), 'endpoint': request.endpoint, 'request_method': request.method, 'status_code': 200 } input_json = request.get_json() current_app.logger.debug( 'recommender/ request with payload: {p}'.format(p=input_json)) if input_json and 'external_request_id' in input_json and input_json[ 'external_request_id']: try: check_license = request.args.get('check_license', 'false') == 'true' persist = request.args.get('persist', 'true') == 'true' r = RecommendationTask().execute(input_json, persist=persist, check_license=check_license) except Exception as e: r = { 'recommendation': 'unexpected error', 'external_request_id': input_json.get('external_request_id'), 'message': '%s' % e } metrics_payload['status_code'] = 400 try: metrics_payload['value'] = get_time_delta( audit_data=r['result']['_audit']) push_data(metrics_payload) except KeyError: pass return flask.jsonify(r), metrics_payload['status_code']
def test_get_time_delta_with_no_param(): """Check the Push Data Method.""" assert get_time_delta({}) is None
def test_get_time_delta(): """Check the Push Data Method.""" timedelta = get_time_delta(audit_data=response['result']['_audit']) assert timedelta == 0.001102