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