diff --git a/pkg/workloads/cortex/lib/type/api.py b/pkg/workloads/cortex/lib/type/api.py index 01d283531d..b8812f06e5 100644 --- a/pkg/workloads/cortex/lib/type/api.py +++ b/pkg/workloads/cortex/lib/type/api.py @@ -64,20 +64,21 @@ def upload_class(self, class_name): def metric_dimensions(self): return [{"Name": "APIName", "Value": self.name}, {"Name": "APIID", "Value": self.id}] - def post_request_metrics(self, status_code, start_time, prediction_value=None): - metrics_list = [] - metrics_list.append(self.status_code_metric(status_code)) + def post_latency_metrics(self, status_code, start_time): + metrics = [self.status_code_metric(status_code), self.latency_metric(start_time)] + self.post_metrics(metrics) + def post_tracker_metrics(self, prediction_value=None): if prediction_value is not None: - metrics_list.append(self.prediction_metrics(prediction_value)) - - metrics_list.append(self.latency_metric(start_time)) + metrics = [self.prediction_metrics(prediction_value)] + self.post_metrics(metrics) + def post_metrics(self, metrics): try: if self.statsd is None: raise CortexException("statsd client not initialized") # unexpected - for metric in metrics_list: + for metric in metrics: tags = ["{}:{}".format(dim["Name"], dim["Value"]) for dim in metric["Dimensions"]] if metric.get("Unit") == "Count": self.statsd.increment(metric["MetricName"], value=metric["Value"], tags=tags) diff --git a/pkg/workloads/cortex/serve/serve.py b/pkg/workloads/cortex/serve/serve.py index 977d019489..af2a548d2e 100644 --- a/pkg/workloads/cortex/serve/serve.py +++ b/pkg/workloads/cortex/serve/serve.py @@ -120,9 +120,11 @@ def after_request(response): prediction = g.prediction try: + api.post_latency_metrics(response.status_code, g.start_time) + if api.tracker is not None: predicted_value = api.tracker.extract_predicted_value(prediction) - api.post_request_metrics(response.status_code, g.start_time, predicted_value) + api.post_tracker_metrics(predicted_value) if predicted_value is not None and predicted_value not in local_cache["class_set"]: api.upload_class(predicted_value) local_cache["class_set"].add(predicted_value)