From b1fb3c42654267c4cb5ca0c2aba5e7a10c8f4526 Mon Sep 17 00:00:00 2001 From: Joe Talerico aka rook Date: Tue, 17 Dec 2024 12:28:40 -0500 Subject: [PATCH] Addressing Nits Updating README Took Vishnu's feedback. Updated README Adding `reason` to example ack file Signed-off-by: Joe Talerico aka rook --- README.md | 7 +++++-- ack/{ack.yaml => 418ack.yaml} | 4 ++++ pkg/algorithms/edivisive/edivisive.py | 19 ++++--------------- 3 files changed, 13 insertions(+), 17 deletions(-) rename ack/{ack.yaml => 418ack.yaml} (67%) diff --git a/README.md b/README.md index 8580682..57ffcd1 100644 --- a/README.md +++ b/README.md @@ -164,17 +164,20 @@ You can open the match requirement by using the ```--node-count``` option to fin **_NOTE:_** The ```cmr```, ```--hunter-analyze``` and ```--anomaly-detection``` flags are mutually exclusive. They cannot be used together because they represent different algorithms designed for distinct use cases. #### Ack known bugs -To ack known regressions, you must provide a yaml file with the timestamp which the regression was identified at. +To ack known regressions, you must provide a yaml file with the uuid and metric which the regression was identified at. Example below ``` --- ack : - - timestamp: 1733490603, + - uuid: "af24e294-93da-4729-a9cc-14acf38454e1", metric: "etcdCPU_avg" + reason: "started thread with etcd team" ``` ack'ing regressions will ensure Orion doesn't continue to notify users of the same issues. +Engineers should add a `reason` that could link to a JIRA or Slack thread. Or the `reason` could be the changepoint % diff is too low to alert component teams. + ### Daemon mode The core purpose of Daemon mode is to operate Orion as a self-contained server, dedicated to handling incoming requests. By sending a POST request accompanied by a test name of predefined tests, users can trigger change point detection on the provided metadata and metrics. Following the processing, the response is formatted in JSON, providing a structured output for seamless integration and analysis. To trigger daemon mode just use the following commands diff --git a/ack/ack.yaml b/ack/418ack.yaml similarity index 67% rename from ack/ack.yaml rename to ack/418ack.yaml index 08aa73c..ae06766 100644 --- a/ack/ack.yaml +++ b/ack/418ack.yaml @@ -2,9 +2,13 @@ ack : - uuid: "7f7337aa-cee3-4a36-b154-a7c48ed1fb75" metric: "etcdCPU_avg" + reason: "Under our 10% target" - uuid: "22e90f4e-1c79-4d9d-b2f6-b95a7072738c" metric: "kubelet_avg" + reason: "Opened Dialog with node team" - uuid: "22e90f4e-1c79-4d9d-b2f6-b95a7072738c" metric: "ovnCPU_avg" + reason: "OCPBUGS111111" - uuid: "93201652-b496-4594-b1ac-7eb9a32cd609" metric: "apiserverCPU_avg" + reason: "opened discussion with api team" diff --git a/pkg/algorithms/edivisive/edivisive.py b/pkg/algorithms/edivisive/edivisive.py index 33e7537..ea2a6aa 100644 --- a/pkg/algorithms/edivisive/edivisive.py +++ b/pkg/algorithms/edivisive/edivisive.py @@ -21,29 +21,18 @@ def _analyze(self): # Process if we have ack'ed regression - ackList = [] + ackSet = set() if len(self.options["ack"]) > 1 : for ack in self.options["ackMap"]["ack"]: pos = series.find_by_attribute("uuid",ack["uuid"]) - ackList.append( - {"pos" : pos[0], - "metric" : ack["metric"]}) + ackSet.add(str(pos[0]) + "_" + ack["metric"]) - # filter by direction + # filter by direction and ack'ed issues for metric, changepoint_list in change_points_by_metric.items(): for i in range(len(changepoint_list)-1, -1, -1): - if ((self.metrics_config[metric]["direction"] == 1 and changepoint_list[i].stats.mean_1 > changepoint_list[i].stats.mean_2) or - (self.metrics_config[metric]["direction"] == -1 and changepoint_list[i].stats.mean_1 < changepoint_list[i].stats.mean_2) ): + if ((self.metrics_config[metric]["direction"] == 1 and changepoint_list[i].stats.mean_1 > changepoint_list[i].stats.mean_2) or (self.metrics_config[metric]["direction"] == -1 and changepoint_list[i].stats.mean_1 < changepoint_list[i].stats.mean_2) or (str(changepoint_list[i].index) + "_" + changepoint_list[i].metric in ackSet)): del changepoint_list[i] - # Filter ack'ed changes - for metric, changepoint_list in change_points_by_metric.items(): - for i in range(len(changepoint_list)-1, -1, -1): - for acked in ackList: - if len(changepoint_list) > 0 : - if (changepoint_list[i].index == acked["pos"] and changepoint_list[i].metric == acked["metric"]): - del changepoint_list[i] - if [val for li in change_points_by_metric.values() for val in li]: self.regression_flag=True return series, change_points_by_metric