func()

in controller/ad/ad.go [294:356]


func (c controller) CreateMultiEntityAnomalyDetector(ctx context.Context, request entity.CreateDetectorRequest, interactive bool, display bool) ([]string, error) {
	if request.PartitionField == nil || len(*request.PartitionField) < 1 {
		result, err := c.CreateAnomalyDetector(ctx, request)
		if err != nil {
			return nil, err
		}
		return []string{*result}, err
	}
	filterValues, err := getFilterValues(ctx, request, c)
	if err != nil {
		return nil, err
	}
	if len(filterValues) < 1 {
		return nil, fmt.Errorf(
			"failed to get values for partition field: %s, check whether any data is available in index %s",
			*request.PartitionField,
			request.Index,
		)
	}
	proceed := true
	if interactive {
		proceed = c.askForConfirmation(
			mapper.StringToStringPtr(
				fmt.Sprintf(
					"opensearch-cli will create %d detector(s). Do you want to proceed? please type (y)es or (n)o and then press enter:",
					len(filterValues),
				),
			),
		)
	}
	if !proceed {
		return nil, nil
	}
	var bar *pb.ProgressBar
	if display {
		bar = createProgressBar(len(filterValues))
	}
	var detectors []string
	name := request.Name
	filter := request.Filter
	var createdDetectors []entity.Detector
	for _, value := range filterValues {
		request.Filter = buildCompoundQuery(*request.PartitionField, value, filter)
		request.Name = fmt.Sprintf("%s-%s", name, value)
		result, err := c.CreateAnomalyDetector(ctx, request)
		if err != nil {
			c.cleanupCreatedDetectors(ctx, createdDetectors)
			return nil, err
		}
		createdDetectors = append(createdDetectors, entity.Detector{
			ID:   *result,
			Name: request.Name,
		})
		detectors = append(detectors, request.Name)
		if bar != nil {
			bar.Increment()
		}
	}
	if bar != nil {
		bar.Finish()
	}
	return detectors, nil
}