Class: SumologicConnection

Inherits:
Object
  • Object
show all
Defined in:
lib/fluent/plugin/out_sumologic.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(endpoint, verify_ssl, connect_timeout, proxy_uri) ⇒ SumologicConnection

Returns a new instance of SumologicConnection.



10
11
12
13
# File 'lib/fluent/plugin/out_sumologic.rb', line 10

def initialize(endpoint, verify_ssl, connect_timeout, proxy_uri)
  @endpoint = endpoint
  create_http_client(verify_ssl, connect_timeout, proxy_uri)
end

Instance Attribute Details

#httpObject (readonly)

Returns the value of attribute http.



8
9
10
# File 'lib/fluent/plugin/out_sumologic.rb', line 8

def http
  @http
end

Instance Method Details

#create_http_client(verify_ssl, connect_timeout, proxy_uri) ⇒ Object



46
47
48
49
50
# File 'lib/fluent/plugin/out_sumologic.rb', line 46

def create_http_client(verify_ssl, connect_timeout, proxy_uri)
  @http                        = HTTPClient.new(proxy_uri)
  @http.ssl_config.verify_mode = ssl_options(verify_ssl)
  @http.connect_timeout        = connect_timeout
end

#publish(raw_data, source_host = nil, source_category = nil, source_name = nil, data_type, metric_data_type) ⇒ Object



15
16
17
18
19
20
# File 'lib/fluent/plugin/out_sumologic.rb', line 15

def publish(raw_data, source_host=nil, source_category=nil, source_name=nil, data_type, metric_data_type)
  response = http.post(@endpoint, raw_data, request_headers(source_host, source_category, source_name, data_type, metric_data_type))
  unless response.ok?
    raise RuntimeError, "Failed to send data to HTTP Source. #{response.code} - #{response.body}"
  end
end

#request_headers(source_host, source_category, source_name, data_type, metric_data_format) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/fluent/plugin/out_sumologic.rb', line 22

def request_headers(source_host, source_category, source_name, data_type, metric_data_format)
  headers = {
      'X-Sumo-Name'     => source_name,
      'X-Sumo-Category' => source_category,
      'X-Sumo-Host'     => source_host,
      'X-Sumo-Client'   => 'fluentd-output'
  }
  if data_type == 'metrics'
    case metric_data_format
    when 'graphite'
      headers['Content-Type'] = 'application/vnd.sumologic.graphite'
    when 'carbon2'
      headers['Content-Type'] = 'application/vnd.sumologic.carbon2'
    else
      raise RuntimeError, "Invalid #{metric_data_format}, must be graphite or carbon2"
    end
  end
  return headers
end

#ssl_options(verify_ssl) ⇒ Object



42
43
44
# File 'lib/fluent/plugin/out_sumologic.rb', line 42

def ssl_options(verify_ssl)
  verify_ssl ? OpenSSL::SSL::VERIFY_PEER : OpenSSL::SSL::VERIFY_NONE
end