export function buildMonitorFromYaml()

in src/push/monitor.ts [271:311]


export function buildMonitorFromYaml(
  config: MonitorConfig,
  options: PushOptions
) {
  // Validate required fields
  for (const field of REQUIRED_MONITOR_FIELDS) {
    if (!config[field]) {
      throw `Monitor ${field} is required`;
    }
  }
  const schedule = config.schedule && parseSchedule(String(config.schedule));
  const privateLocations =
    config['private_locations'] ||
    config.privateLocations ||
    options.privateLocations;
  const retestOnFailure =
    config['retest_on_failure'] ?? options.retestOnFailure;
  const alertConfig = parseAlertConfig(config, options.alert);

  const mon = new Monitor({
    enabled: config.enabled ?? options.enabled,
    locations: options.locations,
    tags: options.tags,
    fields: parseFields(config, options.fields),
    ...normalizeConfig(config),
    retestOnFailure,
    privateLocations,
    schedule:
      (schedule as typeof ALLOWED_SCHEDULES[number]) || options.schedule,
    alert: alertConfig,
  });

  /**
   * Params support is only available for lightweight monitors
   * post 8.7.2 stack
   */
  if (isParamOptionSupported(options.kibanaVersion)) {
    mon.config.params = options.params;
  }
  return mon;
}