in source/code/plugins/oms_common.rb [691:800]
def create_secure_http(uri, proxy={})
if proxy.empty?
http = Net::HTTP.new( uri.host, uri.port )
else
http = Net::HTTP.new( uri.host, uri.port,
proxy[:addr], proxy[:port], proxy[:user], proxy[:pass])
end
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.open_timeout = 30
return http
end
def create_ods_http(ods_uri, proxy={})
http = create_secure_http(ods_uri, proxy)
http.cert = Configuration.cert
http.key = Configuration.key
return http
end
def create_ods_request(path, record, compress, extra_headers=nil, serializer=method(:parse_json_record_encoding))
headers = extra_headers.nil? ? {} : extra_headers
azure_resource_id = OMS::Configuration.azure_resource_id
if !azure_resource_id.to_s.empty?
headers[OMS::CaseSensitiveString.new("x-ms-AzureResourceId")] = azure_resource_id
end
azure_region = OMS::Configuration.azure_region if defined?(OMS::Configuration.azure_region)
if !azure_region.to_s.empty?
headers[OMS::CaseSensitiveString.new("x-ms-AzureRegion")] = azure_region
end
omscloud_id = OMS::Configuration.omscloud_id
if !omscloud_id.to_s.empty?
headers[OMS::CaseSensitiveString.new("x-ms-OMSCloudId")] = omscloud_id
end
uuid = OMS::Configuration.uuid
if !uuid.to_s.empty?
headers[OMS::CaseSensitiveString.new("x-ms-UUID")] = uuid
end
headers[OMS::CaseSensitiveString.new("X-Request-ID")] = SecureRandom.uuid
headers["Content-Type"] = "application/json"
if compress == true
headers["Content-Encoding"] = "deflate"
end
headers["User-Agent"] = "LinuxMonitoringAgent/#{OMS::Common.get_agent_version}"
headers[OMS::CaseSensitiveString.new("x-ms-app")] = "LinuxMonitoringAgent"
headers[OMS::CaseSensitiveString.new("x-ms-client-version")] = OMS::Common.get_agent_version
headers[OMS::CaseSensitiveString.new("x-ms-client-platform")] = "Linux"
req = Net::HTTP::Post.new(path, headers)
json_msg = serializer.call(record)
if json_msg.nil?
return nil
else
if compress == true
req.body = Zlib::Deflate.deflate(json_msg)
else
req.body = json_msg
end
end
return req
end
def parse_json_record_encoding(record)
msg = nil
begin
msg = Yajl.dump(record)
rescue => error
begin
OMS::Log.warn_once("Yajl.dump() failed due to encoding, will try iso-8859-1 for #{record}: #{error}")
if !record["DataItems"].nil?
record["DataItems"].each do |item|
item["Message"] = item["Message"].encode('utf-8', 'iso-8859-1')
end
end
msg = Yajl.dump(record)
rescue => error
OMS::Log.warn_once("Skipping due to failed encoding for #{record}: #{error}")
end
end
return msg
end