func()

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
}