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
}