Search in sources :

Example 1 with EntityAnomalyResult

use of org.opensearch.ad.model.EntityAnomalyResult in project anomaly-detection by opensearch-project.

the class MultiResponsesDelegateActionListenerTests method testForceResponse.

@SuppressWarnings("unchecked")
public void testForceResponse() {
    AnomalyResult anomalyResult1 = randomHCADAnomalyDetectResult(0.25, 0.25, "error");
    AnomalyResult anomalyResult2 = randomHCADAnomalyDetectResult(0.5, 0.5, "error");
    EntityAnomalyResult entityAnomalyResult1 = new EntityAnomalyResult(new ArrayList<AnomalyResult>() {

        {
            add(anomalyResult1);
        }
    });
    EntityAnomalyResult entityAnomalyResult2 = new EntityAnomalyResult(new ArrayList<AnomalyResult>() {

        {
            add(anomalyResult2);
        }
    });
    ActionListener<EntityAnomalyResult> actualListener = mock(ActionListener.class);
    MultiResponsesDelegateActionListener<EntityAnomalyResult> multiListener = new MultiResponsesDelegateActionListener<EntityAnomalyResult>(actualListener, 3, "blah", true);
    multiListener.onResponse(entityAnomalyResult1);
    multiListener.onResponse(entityAnomalyResult2);
    multiListener.onFailure(new RuntimeException());
    entityAnomalyResult1.merge(entityAnomalyResult2);
    verify(actualListener).onResponse(entityAnomalyResult1);
}
Also used : AnomalyResult(org.opensearch.ad.model.AnomalyResult) EntityAnomalyResult(org.opensearch.ad.model.EntityAnomalyResult) EntityAnomalyResult(org.opensearch.ad.model.EntityAnomalyResult)

Example 2 with EntityAnomalyResult

use of org.opensearch.ad.model.EntityAnomalyResult in project anomaly-detection by opensearch-project.

the class AnomalyDetectorRunner method executeDetector.

/**
 * run anomaly detector and return anomaly result.
 *
 * @param detector  anomaly detector instance
 * @param startTime detection period start time
 * @param endTime   detection period end time
 * @param context   stored thread context
 * @param listener handle anomaly result
 * @throws IOException - if a user gives wrong query input when defining a detector
 */
public void executeDetector(AnomalyDetector detector, Instant startTime, Instant endTime, ThreadContext.StoredContext context, ActionListener<List<AnomalyResult>> listener) throws IOException {
    context.restore();
    List<String> categoryField = detector.getCategoryField();
    if (categoryField != null && !categoryField.isEmpty()) {
        featureManager.getPreviewEntities(detector, startTime.toEpochMilli(), endTime.toEpochMilli(), ActionListener.wrap(entities -> {
            if (entities == null || entities.isEmpty()) {
                // TODO return exception like IllegalArgumentException to explain data is not enough for preview
                // This also requires front-end change to handle error message correspondingly
                // We return empty list for now to avoid breaking front-end
                listener.onResponse(Collections.emptyList());
                return;
            }
            ActionListener<EntityAnomalyResult> entityAnomalyResultListener = ActionListener.wrap(entityAnomalyResult -> {
                listener.onResponse(entityAnomalyResult.getAnomalyResults());
            }, e -> onFailure(e, listener, detector.getDetectorId()));
            MultiResponsesDelegateActionListener<EntityAnomalyResult> multiEntitiesResponseListener = new MultiResponsesDelegateActionListener<EntityAnomalyResult>(entityAnomalyResultListener, entities.size(), String.format(Locale.ROOT, "Fail to get preview result for multi entity detector %s", detector.getDetectorId()), true);
            for (Entity entity : entities) {
                featureManager.getPreviewFeaturesForEntity(detector, entity, startTime.toEpochMilli(), endTime.toEpochMilli(), ActionListener.wrap(features -> {
                    List<ThresholdingResult> entityResults = modelManager.getPreviewResults(features.getProcessedFeatures(), detector.getShingleSize());
                    List<AnomalyResult> sampledEntityResults = sample(parsePreviewResult(detector, features, entityResults, entity), maxPreviewResults);
                    multiEntitiesResponseListener.onResponse(new EntityAnomalyResult(sampledEntityResults));
                }, e -> multiEntitiesResponseListener.onFailure(e)));
            }
        }, e -> onFailure(e, listener, detector.getDetectorId())));
    } else {
        featureManager.getPreviewFeatures(detector, startTime.toEpochMilli(), endTime.toEpochMilli(), ActionListener.wrap(features -> {
            try {
                List<ThresholdingResult> results = modelManager.getPreviewResults(features.getProcessedFeatures(), detector.getShingleSize());
                listener.onResponse(sample(parsePreviewResult(detector, features, results, null), maxPreviewResults));
            } catch (Exception e) {
                onFailure(e, listener, detector.getDetectorId());
            }
        }, e -> onFailure(e, listener, detector.getDetectorId())));
    }
}
Also used : ModelManager(org.opensearch.ad.ml.ModelManager) ThresholdingResult(org.opensearch.ad.ml.ThresholdingResult) FeatureData(org.opensearch.ad.model.FeatureData) ThreadContext(org.opensearch.common.util.concurrent.ThreadContext) ArrayList(java.util.ArrayList) Locale(java.util.Locale) Map(java.util.Map) AnomalyDetector(org.opensearch.ad.model.AnomalyDetector) ActionListener(org.opensearch.action.ActionListener) CommonValue(org.opensearch.ad.constant.CommonValue) FeatureManager(org.opensearch.ad.feature.FeatureManager) Feature(org.opensearch.ad.model.Feature) IOException(java.io.IOException) Instant(java.time.Instant) Collectors(java.util.stream.Collectors) OpenSearchSecurityException(org.opensearch.OpenSearchSecurityException) Features(org.opensearch.ad.feature.Features) MultiResponsesDelegateActionListener(org.opensearch.ad.util.MultiResponsesDelegateActionListener) List(java.util.List) Logger(org.apache.logging.log4j.Logger) AnomalyResult(org.opensearch.ad.model.AnomalyResult) Entity(org.opensearch.ad.model.Entity) EntityAnomalyResult(org.opensearch.ad.model.EntityAnomalyResult) Collections(java.util.Collections) LogManager(org.apache.logging.log4j.LogManager) Entity(org.opensearch.ad.model.Entity) MultiResponsesDelegateActionListener(org.opensearch.ad.util.MultiResponsesDelegateActionListener) IOException(java.io.IOException) OpenSearchSecurityException(org.opensearch.OpenSearchSecurityException) ThresholdingResult(org.opensearch.ad.ml.ThresholdingResult) ActionListener(org.opensearch.action.ActionListener) MultiResponsesDelegateActionListener(org.opensearch.ad.util.MultiResponsesDelegateActionListener) AnomalyResult(org.opensearch.ad.model.AnomalyResult) EntityAnomalyResult(org.opensearch.ad.model.EntityAnomalyResult) ArrayList(java.util.ArrayList) List(java.util.List) EntityAnomalyResult(org.opensearch.ad.model.EntityAnomalyResult)

Aggregations

AnomalyResult (org.opensearch.ad.model.AnomalyResult)2 EntityAnomalyResult (org.opensearch.ad.model.EntityAnomalyResult)2 IOException (java.io.IOException)1 Instant (java.time.Instant)1 ArrayList (java.util.ArrayList)1 Collections (java.util.Collections)1 List (java.util.List)1 Locale (java.util.Locale)1 Map (java.util.Map)1 Collectors (java.util.stream.Collectors)1 LogManager (org.apache.logging.log4j.LogManager)1 Logger (org.apache.logging.log4j.Logger)1 OpenSearchSecurityException (org.opensearch.OpenSearchSecurityException)1 ActionListener (org.opensearch.action.ActionListener)1 CommonValue (org.opensearch.ad.constant.CommonValue)1 FeatureManager (org.opensearch.ad.feature.FeatureManager)1 Features (org.opensearch.ad.feature.Features)1 ModelManager (org.opensearch.ad.ml.ModelManager)1 ThresholdingResult (org.opensearch.ad.ml.ThresholdingResult)1 AnomalyDetector (org.opensearch.ad.model.AnomalyDetector)1