Skip to content

Commit f4399a5

Browse files
author
kim
committed
moves aws subquery metric logging to subquery level, adds status code as dimension
1 parent c9dfc11 commit f4399a5

File tree

2 files changed

+32
-41
lines changed

2 files changed

+32
-41
lines changed

SearchAPI/CMR/Query.py

-37
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
from SearchAPI.CMR.SubQuery import CMRSubQuery
99
from flask import request
1010

11-
import boto3
12-
1311

1412
class CMRQuery:
1513
def __init__(self, req_fields, params=None, max_results=None):
@@ -70,12 +68,10 @@ def get_results(self):
7068
if self.is_out_of_time():
7169
logging.warning('Query ran too long, terminating')
7270
logging.warning(self.params)
73-
self.log_subquery_time()
7471
return
7572

7673
if self.max_results_reached():
7774
logging.debug('Max results reached, terminating')
78-
self.log_subquery_time()
7975
return
8076

8177
if result is None:
@@ -87,11 +83,9 @@ def get_results(self):
8783
# it's a little silly but run this check again here so we don't accidentally fetch an extra page
8884
if self.max_results_reached():
8985
logging.debug('Max results reached, terminating')
90-
self.log_subquery_time()
9186
return
9287

9388
logging.debug('End of available results reached')
94-
self.log_subquery_time()
9589

9690
def is_out_of_time(self):
9791
return time.time() > self.cutoff_time
@@ -101,37 +95,6 @@ def max_results_reached(self):
10195
self.max_results is not None and
10296
self.result_counter >= self.max_results
10397
)
104-
105-
106-
107-
def log_subquery_time(self):
108-
subquery_times = []
109-
for subquery in self.sub_queries:
110-
subquery_times.extend(subquery.query_times)
111-
try:
112-
if request.asf_config['cloudwatch_metrics']:
113-
logging.debug('Logging subquery run time to cloudwatch metrics')
114-
cloudwatch = boto3.client('cloudwatch')
115-
cloudwatch.put_metric_data(
116-
MetricData = [
117-
{
118-
'MetricName': 'SubqueryRuntime',
119-
'Dimensions': [
120-
{
121-
'Name': 'maturity',
122-
'Value': request.asf_base_maturity
123-
}
124-
],
125-
'Unit': 'None',
126-
'Values': subquery_times
127-
}
128-
],
129-
Namespace = 'SearchAPI'
130-
)
131-
except Exception as e:
132-
logging.exception(f'Failure during subquery run time logging: {e}')
133-
134-
13598

13699
def subquery_list_from(params):
137100
"""

SearchAPI/CMR/SubQuery.py

+32-4
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@
1010
from SearchAPI.CMR.Translate import parse_cmr_response
1111
from SearchAPI.CMR.Exceptions import CMRError
1212

13+
import boto3
14+
1315
class CMRSubQuery:
1416
def __init__(self, req_fields, params, extra_params):
1517
self.params = params
1618
self.extra_params = extra_params
1719
self.req_fields = req_fields
1820
self.hits = 0
1921
self.results = []
20-
self.query_times = []
2122

2223
self.params = self.combine_params(self.params, self.extra_params)
2324

@@ -166,11 +167,10 @@ def get_page(self, session):
166167
query_duration = perf_counter() - q_start
167168
logging.debug(f'CMR query time: {query_duration}')
168169

170+
self.log_subquery_time({'time': query_duration, 'status': response.status_code})
171+
169172
if query_duration > 10:
170173
self.log_slow_cmr_response(session, response, query_duration)
171-
172-
self.query_times.append(query_duration)
173-
174174
if response.status_code != 200:
175175
self.log_bad_cmr_response(
176176
attempt, max_retry, response, session
@@ -224,3 +224,31 @@ def log_bad_cmr_response(self, attempt, max_retry, response, session):
224224
logging.error('Headers sent to CMR:')
225225
logging.error(session.headers)
226226
logging.error(f'Error body: {response.text}')
227+
228+
229+
def log_subquery_time(self, query_metric):
230+
try:
231+
if request.asf_config['cloudwatch_metrics']:
232+
logging.debug('Logging subquery run time to cloudwatch metrics')
233+
cloudwatch = boto3.client('cloudwatch')
234+
cloudwatch.put_metric_data(
235+
MetricData = [
236+
{
237+
'MetricName': 'SubqueryRuntime',
238+
'Dimensions': [
239+
{
240+
'Name': 'maturity',
241+
'Value': request.asf_base_maturity
242+
}, {
243+
'Name': 'status',
244+
'Value': query_metric['status']
245+
}
246+
],
247+
'Unit': 'None',
248+
'Value': query_metric['time']
249+
}
250+
],
251+
Namespace = 'SearchAPI'
252+
)
253+
except Exception as e:
254+
logging.exception(f'Failure during subquery run time logging: {e}')

0 commit comments

Comments
 (0)