in controller/ad/ad.go [533:576]
func (c controller) UpdateDetector(ctx context.Context, input entity.UpdateDetectorUserInput, force bool, start bool) error {
if len(input.ID) < 1 {
return fmt.Errorf("detector Id cannot be empty")
}
if !force {
latestDetector, err := c.GetDetector(ctx, input.ID)
if err != nil {
return err
}
if latestDetector.LastUpdatedAt > input.LastUpdatedAt {
return fmt.Errorf(
"new version for detector is available. Please fetch latest version and then merge your changes")
}
}
proceed := c.askForConfirmation(
mapper.StringToStringPtr(
fmt.Sprintf(
"opensearch-cli will update detector: %s . Do you want to proceed? Y/N ",
input.ID,
),
),
)
if !proceed {
return nil
}
if force { // stop detector implicit since force is true
err := c.StopDetector(ctx, input.ID)
if err != nil {
return err
}
}
payload, err := admapper.MapToUpdateDetector(input)
if err != nil {
return err
}
err = c.gateway.UpdateDetector(ctx, input.ID, payload)
if err != nil {
return err
}
if !start {
return nil
}
return c.StartDetector(ctx, input.ID) // Start Detector if successfully updated it
}