apply_request_intervals

in source/code/plugins/agent_maintenance_script.rb [248:365]


    def apply_request_intervals(server_resp)
      return "" if !defined?(OMS::Configuration.set_request_intervals)
      
      topology_interval = ""
      telemetry_interval = ""

      topology_interval_regex = /queryInterval=\"(?<topologyInterval>.*?)\"/
      topology_interval_regex.match(server_resp) { |match|
        topology_interval = match["topologyInterval"]
      }

      telemetry_interval_regex = /telemetryReportInterval=\"(?<telemetryInterval>.*?)\"/
      telemetry_interval_regex.match(server_resp) { |match|
        telemetry_interval = match["telemetryInterval"]
      }

      if topology_interval.empty?
        log_error("Topology request interval not found in homing service response.")
        return OMS::ERROR_EXTRACTING_ATTRIBUTES
      end

      if telemetry_interval.empty?
        log_error("Telemetry request interval not found in homing service response.")
        return OMS::ERROR_EXTRACTING_ATTRIBUTES
      end

      begin
        topology_interval = ISO8601::Duration.new(topology_interval).to_seconds
        telemetry_interval = ISO8601::Duration.new(telemetry_interval).to_seconds
      rescue => e
        OMS::Log.error_once("Error parsing request intervals. 
      end

      OMS::Configuration.set_request_intervals(topology_interval, telemetry_interval)

      return ""
    end 

    
    def heartbeat
      
      @load_config_return_code = load_config
      if @load_config_return_code != 0
        log_error("Error loading configuration from #{@omsadmin_conf_path}")
        return @load_config_return_code
      end

      
      if @WORKSPACE_ID.nil? or @AGENT_GUID.nil? or @URL_TLD.nil? or
          @WORKSPACE_ID.empty? or @AGENT_GUID.empty? or @URL_TLD.empty?
        log_error("Missing required field from configuration file: #{@omsadmin_conf_path}")
        return OMS::MISSING_CONFIG
      elsif !OMS::Common.file_exists_nonempty(@cert_path) or !OMS::Common.file_exists_nonempty(@key_path)
        log_error("Certificates for topology request do not exist")
        return OMS::MISSING_CERTS
      end

      
      begin
        body_hb_xml = AgentTopologyRequestHandler.new.handle_request(@os_info, @omsadmin_conf_path,
            @AGENT_GUID, get_cert_server(@cert_path), @pid_path, telemetry=true)
        if !xml_contains_telemetry(body_hb_xml)
          log_debug("No Telemetry data was appended to OMS agent management service topology request")
        end
      rescue => e
        log_error("Error when appending Telemetry to OMS agent management service topology request: #{e.message}")
      end

      
      headers = {}
      req_date = Time.now.utc.strftime("%Y-%m-%dT%T.%N%:z")
      headers[OMS::CaseSensitiveString.new("x-ms-Date")] = req_date
      headers["User-Agent"] = get_user_agent
      headers[OMS::CaseSensitiveString.new("Accept-Language")] = "en-US"

      
      req,http = OMS::Common.form_post_request_and_http(headers, "https://#{@WORKSPACE_ID}.oms.#{@URL_TLD}/"\
                "AgentService.svc/LinuxAgentTopologyRequest", body_hb_xml,
                OpenSSL::X509::Certificate.new(File.open(@cert_path)),
                OpenSSL::PKey::RSA.new(File.open(@key_path)), @proxy_path)

      log_info("Generated topology request:\n#{req.body}") if @verbose

      
      begin
        res = nil
        res = http.start { |http_each| http.request(req) }
      rescue => e
        log_error("Error sending the topology request to OMS agent management service: #{e.message}")
      end

      if !res.nil?
        log_info("OMS agent management service topology request response code: #{res.code}") if @verbose

        if res.code == "200"
          cert_apply_res = apply_certificate_update_endpoint(res.body)
          dsc_apply_res = apply_dsc_endpoint(res.body)
          frequency_apply_res = apply_request_intervals(res.body)
          if cert_apply_res.class != String
            return cert_apply_res
          elsif dsc_apply_res.class != String
            return dsc_apply_res
          elsif frequency_apply_res.class != String
            return frequency_apply_res
          else
            log_info("OMS agent management service topology request success")
            return 0
          end
        else
          log_error("Error sending OMS agent management service topology request . HTTP code #{res.code}")
          return OMS::HTTP_NON_200
        end
      else
        log_error("Error sending OMS agent management service topology request . No HTTP code")
        return OMS::ERROR_SENDING_HTTP
      end
    end