예제 #1
0
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
예제 #2
0
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