Class: Fluent::Plugin::JfrogMetricsInput

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

Instance Method Summary collapse

Instance Method Details

#configure(conf) ⇒ Object

‘configure` is called before `start`. ’conf’ is a ‘Hash` that includes the configuration parameters. If the configuration is invalid, raise `Fluent::ConfigError`.

Raises:

  • (Fluent::ConfigError)


51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/fluent/plugin/in_jfrog_metrics.rb', line 51

def configure(conf)
  super
  raise Fluent::ConfigError, 'Must define the tag for metrics data.' if @tag == ''

  raise Fluent::ConfigError, 'Must define the jpd_url to scrape metrics.' if @jpd_url == ''

  raise Fluent::ConfigError, 'Must define the username for authentication.' if @username == ''

  raise Fluent::ConfigError, 'Must define the apikey or token for authentication.' if @token == '' &&  @apikey == ''

  raise Fluent::ConfigError, 'Must define the metric_prefix to use for getting the metrics.' if @metric_prefix == ''

  raise Fluent::ConfigError, 'Must define the target_platform to use for getting the metrics.' if @target_platform == ''

  raise Fluent::ConfigError, 'Must define the target_platform to be fone of the following (DATADOG, NEWRELIC, SPLUNK).' if !(['DATADOG', 'NEWRELIC', 'SPLUNK'].include?(@target_platform))
end

#do_executeObject



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/fluent/plugin/in_jfrog_metrics.rb', line 91

def do_execute
  begin
    puts "#{Utility.get_time} Metrics collection started"
    metrics_helper = MetricsHelper.new(@metric_prefix, @jpd_url, @username, @apikey, @token, @common_jpd, @verify_ssl, @request_timeout)
    platform_metrics = metrics_helper.get_metrics

    additional_metrics = metrics_helper.get_additional_metrics
    if !additional_metrics.nil? && additional_metrics != ''
      platform_metrics += additional_metrics.to_s
    end
    puts "#{Utility.get_time} Metrics collection finished"

    if @target_platform == 'SPLUNK'
      parser = SplunkMetricsParser.new(@metric_prefix, router, @tag)
    elsif @target_platform == 'NEWRELIC'
      parser = NewRelicMetricsParser.new(@metric_prefix, router, @tag)
    elsif @target_platform == 'DATADOG'
      parser = DatadogMetricsParser.new(@metric_prefix, router, @tag)
    else
      raise 'Parser Type is not valid. target_platform Should be SPLUNK or NEWRELIC or DATADOG'
    end
    parser.emit_parsed_metrics(platform_metrics)

  rescue RestClient::Exceptions::OpenTimeout
    puts "#{Utility.get_time} The request timed out while trying to open a connection. The configured request timeout is: #{@request_timeout}"
  rescue RestClient::Exceptions::ReadTimeout
    puts "#{Utility.get_time} The request timed out while waiting for a response. The configured request timeout is: #{@request_timeout}"
  rescue  RestClient::Exceptions::RequestTimeout
    puts "#{Utility.get_time} The request timed out. The configured request timeout is: #{@request_timeout}"
  rescue RestClient::ExceptionWithResponse => e
    puts "#{Utility.get_time} HTTP request failed: #{e.response}"
  rescue StandardError => e
    puts "#{Utility.get_time} An unexpected error occurred: #{e.message}"
  end  
end

#runObject



81
82
83
84
85
86
87
88
89
# File 'lib/fluent/plugin/in_jfrog_metrics.rb', line 81

def run
  puts "#{Utility.get_time} Preparing metrics collection, creating timer task"
  timer_task = Concurrent::TimerTask.new(execution_interval: @execution_interval, timeout_interval: @timeout_interval, run_now: true) do
    puts "#{Utility.get_time} Timer task execution"
    do_execute
  end
  timer_task.execute
  sleep 100
end

#shutdownObject



75
76
77
78
79
# File 'lib/fluent/plugin/in_jfrog_metrics.rb', line 75

def shutdown
  @running = false
  @thread.join
  super
end

#startObject

‘start` is called when starting and after `configure` is successfully completed.



69
70
71
72
73
# File 'lib/fluent/plugin/in_jfrog_metrics.rb', line 69

def start
  super
  @running = true
  @thread = Thread.new(&method(:run))
end