From 8a89c59b0c6194afdd6ed1c9bbd949b2cc62aeb0 Mon Sep 17 00:00:00 2001 From: algorithmofdish Date: Tue, 29 Nov 2022 17:07:12 +0800 Subject: [PATCH] refactor(infer): adaptation for abnormal event output change --- cause_inference/__main__.py | 25 +++++++++++++++++++++---- cause_inference/cause_infer.py | 21 --------------------- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/cause_inference/__main__.py b/cause_inference/__main__.py index 093f7ac..d586b1f 100644 --- a/cause_inference/__main__.py +++ b/cause_inference/__main__.py @@ -14,7 +14,6 @@ from cause_inference.config import infer_config from cause_inference.config import init_infer_config from cause_inference.model import AbnormalEvent from cause_inference.cause_infer import cause_locating -from cause_inference.cause_infer import parse_abn_evt from cause_inference.cause_infer import preprocess_abn_score from cause_inference.rule_parser import rule_engine from cause_inference.exceptions import InferenceException @@ -164,16 +163,34 @@ def init_obsv_meta_coll_thd(): return obsv_meta_coll_thread +def parse_abn_evt(data) -> AbnormalEvent: + resource = data.get('Resource', {}) + attrs = data.get('Attributes', {}) + if not resource.get('metric'): + raise DataParseException('Attribute "Resource.metric" required in abnormal event') + if not attrs.get('entity_id') and not resource.get('labels'): + raise DataParseException('metric_label or entity_id info need in abnormal event') + abn_evt = AbnormalEvent( + timestamp=data.get('Timestamp'), + abnormal_metric_id=resource.get('metric'), + abnormal_score=preprocess_abn_score(resource.get('score', 0.0)), + metric_labels=resource.get('labels'), + abnormal_entity_id=attrs.get('entity_id'), + desc=resource.get('description', '') or data.get('Body', '') + ) + return abn_evt + + def get_recommend_metric_evts(abn_kpi_data: dict) -> List[AbnormalEvent]: metric_evts = [] obsv_meta_mgt = ObserveMetaMgt() - recommend_metrics = abn_kpi_data.get('Resource', {}).get('recommend_metrics', {}) + recommend_metrics = abn_kpi_data.get('Resource', {}).get('cause_metrics', {}) for metric_data in recommend_metrics: metric_evt = AbnormalEvent( timestamp=abn_kpi_data.get('Timestamp'), abnormal_metric_id=metric_data.get('metric', ''), - abnormal_score=preprocess_abn_score(metric_data.get('score')), - metric_labels=metric_data.get('label', {}), + abnormal_score=preprocess_abn_score(metric_data.get('score', 0.0)), + metric_labels=metric_data.get('labels', {}), desc=metric_data.get('description', '') ) if not metric_evt.update_entity_id(obsv_meta_mgt): diff --git a/cause_inference/cause_infer.py b/cause_inference/cause_infer.py index dff26d0..6873c1e 100644 --- a/cause_inference/cause_infer.py +++ b/cause_inference/cause_infer.py @@ -1,7 +1,5 @@ from typing import List -from scipy.special import expit - from cause_inference.model import Cause from cause_inference.model import CausalGraph from cause_inference.model import AbnormalEvent @@ -12,7 +10,6 @@ from spider.collector.data_collector import DataCollector from spider.collector.prometheus_collector import PrometheusCollector from cause_inference.exceptions import InferenceException from cause_inference.exceptions import DBException -from cause_inference.exceptions import DataParseException from cause_inference.config import infer_config from cause_inference.rule_parser import rule_engine from cause_inference.arangodb import connect_to_arangodb @@ -68,24 +65,6 @@ def query_abnormal_topo_subgraph(abnormal_event: AbnormalEvent): return subgraph -def parse_abn_evt(data) -> AbnormalEvent: - resource = data.get('Resource', {}) - attrs = data.get('Attributes', {}) - if not resource.get('metrics'): - raise DataParseException('Atribute "Resource.metrics" required in abnormal event') - if not attrs.get('entity_id') and not resource.get('metric_label'): - raise DataParseException('metric_label or entity_id info need in abnormal event') - abn_evt = AbnormalEvent( - timestamp=data.get('Timestamp'), - abnormal_metric_id=resource.get('metrics'), - abnormal_score=1.0, - metric_labels=resource.get('metric_label'), - abnormal_entity_id=attrs.get('entity_id'), - desc=resource.get('description', '') or data.get('Body', '') - ) - return abn_evt - - def parse_entity_id(orig_entity_id: str) -> str: fs_idx = orig_entity_id.index('/') return orig_entity_id[fs_idx+1:] -- 2.21.0.windows.1