create_secure_http

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