def detectSignalAnomalyData( metricInfo, modelHolder, metricType): series = metricInfo.metricDF bound = modelHolder.getModelConfigByKey(BOUND) if bound == None: bound = IS_UPPER_BOUND if modelHolder.model_name == AI_MODEL.MOVING_AVERAGE.value or modelHolder.model_name == AI_MODEL.EXPONENTIAL_SMOOTHING.value or modelHolder.model_name == AI_MODEL.DOUBLE_EXPONENTIAL_SMOOTHING.value: lower_bound = modelHolder.getModelByKey(metricType,LOWER_BOUND) if lower_bound == None: pass #TODO: raise error upper_bound = modelHolder.getModelByKey(metricType,UPPER_BOUND) if upper_bound == None: pass #TODO: raise error ts,data,flags =detectLowerUpperAnomalies(series, lower_bound , upper_bound, bound) triggerAnomalyMetric(metricInfo, ts) return ts,data elif modelHolder.model_name == AI_MODEL.PROPHET.value: lower_bound = modelHolder.getModelByKey(metricType,LOWER_BOUND) if lower_bound == None: pass #TODO: raise error upper_bound = modelHolder.getModelByKey(metricType,UPPER_BOUND) if upper_bound == None: pass #TODO: raise error ts,data,flags =detectLowerUpperAnomalies(series, lower_bound , upper_bound, bound) triggerAnomalyMetric(metricInfo, ts) return ts,data elif modelHolder.model_name == AI_MODEL.HOLT_WINDER.value: upper_bound = modelHolder.getModelByKey(metricType,UPPER_BOUND) if upper_bound == None: pass #TODO raise error and also need to make upperBound as narray lower_bound = modelHolder.gettModelByKey(metricType,LOWER_BOUND) if lower_bound == None: pass ts,adata,flags = retrieveHW_Anomalies( y, upper_bound, lower_bound, bound) triggerAnomalyMetric(metricInfo, ts) return ts,data else: #default is modelHolder.model_name == AI_MODEL.MOVING_AVERAGE_ALL.value: mean = modelHolder.getModelByKey(metricType,MAE) if mean == None: pass #TODO: raise error stdev = modelHolder.getModelByKey(metricType,DEVIATION) if stdev == None: pass #TODO: raise error #threshold = modelHolder.getModelConfigByKey(THRESHOLD) threshold = globalConfig.getThresholdByKey(metricType,THRESHOLD) if threshold == None: threshold = DEFAULT_THRESHOLD #TODO: need to make sure return all df ts,data,flags = detectAnomalies(series, mean, stdev, threshold , bound) #print(metricType, "threshold -----", threshold) triggerAnomalyMetric(metricInfo, ts) return ts, data
def detectSignalAnomalyData( metricInfo, modelHolder, metricType, strategy=None): series = metricInfo.metricDF bound = modelHolder.getModelConfigByKey(BOUND) if bound == None: bound = IS_UPPER_BOUND if modelHolder.model_name == AI_MODEL.MOVING_AVERAGE.value or modelHolder.model_name == AI_MODEL.EXPONENTIAL_SMOOTHING.value or modelHolder.model_name == AI_MODEL.DOUBLE_EXPONENTIAL_SMOOTHING.value: lower_bound = modelHolder.getModelByKey(metricType,LOWER_BOUND) if lower_bound == None: pass #TODO: raise error upper_bound = modelHolder.getModelByKey(metricType,UPPER_BOUND) if upper_bound == None: pass #TODO: raise error ts,data,flags =detectLowerUpperAnomalies(series, lower_bound , upper_bound, bound) print("Anomaly data: %s" % data) triggerAnomalyMetric(metricInfo, ts, data) return ts,data elif modelHolder.model_name == AI_MODEL.PROPHET.value: lower_bound = modelHolder.getModelByKey(metricType,LOWER_BOUND) if lower_bound == None: pass #TODO: raise error upper_bound = modelHolder.getModelByKey(metricType,UPPER_BOUND) if upper_bound == None: pass #TODO: raise error ts,data,flags =detectLowerUpperAnomalies(series, lower_bound , upper_bound, bound) print("Anomaly data: %s" % data) triggerAnomalyMetric(metricInfo, ts, data) return ts,data else: #default is modelHolder.model_name == AI_MODEL.MOVING_AVERAGE_ALL.value: mean = modelHolder.getModelByKey(metricType,MAE) if mean == None: return [],[] #TODO: raise error stdev = modelHolder.getModelByKey(metricType,DEVIATION) if stdev == None: return [],[] #TODO: raise error #threshold = modelHolder.getModelConfigByKey(THRESHOLD) threshold = globalConfig.getThresholdByKey(metricType,THRESHOLD) if threshold == None: threshold = DEFAULT_THRESHOLD #TODO: need to make sure return all df if strategy== 'hpa': print("~~~~~~~~~~~~~~~~~~",metricInfo.metricName, mean,stdev, threshold) ts,data,anomalies,zscore = detectAnomalies(series, mean, stdev, threshold , bound, minvalue=0, returnAnomaliesOnly= False) print("Anomaly data: %s\n anomalies: %s\n zscore: %s\n" % (data, anomalies, zscore)) triggerAnomalyMetric(metricInfo, filterTS(ts,anomalies), data) return ts, data, anomalies, zscore,mean,stdev ts,data,_ = detectAnomalies(series, mean, stdev, threshold , bound) print("Anomaly data: %s" % data) triggerAnomalyMetric(metricInfo, ts, data) return ts, data