fluent-plugin-newrelic-summary 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cb1d7b35a023071695c587d10932bebfd592c978
4
+ data.tar.gz: 54af1a983795b693f809d19538bccbae29139584
5
+ SHA512:
6
+ metadata.gz: e47d3a9bdfee83471b3abcdd95802b556c63c00574c96c105ba1ce4c99b7c5f64ddfb42ca59a0a54a6c7a2918e5c03f3fcf188e9d3ce8c9a9ea4643c290f41c5
7
+ data.tar.gz: c1062e83171a82e42cfea8c4ad8fbdeac55281b4945dbb0904ddfa951f7975e346dd87f99ca6467d0df5281a7f55148f682cc202b155c3e28b7cbd0ae157dbfe
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ .ruby-version
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in fluent-plugin-newrelic-summary.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,47 @@
1
+ # fluent-plugin-newrelic-summary
2
+
3
+ Fluentd input plugin to receive NewRelic summary data.
4
+
5
+ Please visit below link for the specification of NewRelic summary API.
6
+ https://docs.newrelic.com/docs/apis/rest-api-v2/application-examples-v2/summary-data-examples-v2
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ ```ruby
13
+ gem 'fluent-plugin-newrelic-summary'
14
+ ```
15
+
16
+ And then execute:
17
+
18
+ $ bundle
19
+
20
+ Or install it yourself as:
21
+
22
+ $ gem install fluent-plugin-newrelic-summary
23
+
24
+ ## Usage
25
+
26
+ The following is an example of configuration.
27
+
28
+ ```
29
+ <source>
30
+ type newrelic_summary
31
+ api_key xxxxxxxxx
32
+ interval 60 # sec. default is 60 sec.
33
+ summary applications|servers|key_transactions
34
+ </source>
35
+ ```
36
+
37
+ ## Contributing
38
+
39
+ 1. Fork it ( http://github.com/hiroakis/fluent-plugin-newrelic-summary/fork )
40
+ 2. Create your feature branch (git checkout -b my-new-feature)
41
+ 3. Commit your changes (git commit -am 'Add some feature')
42
+ 4. Push to the branch (git push origin my-new-feature)
43
+ 5. Create new Pull Request
44
+
45
+ ## License
46
+
47
+ MIT
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |test|
5
+ test.libs << 'lib' << 'test'
6
+ test.pattern = 'test/**/test_*.rb'
7
+ test.verbose = true
8
+ end
9
+
10
+ task :default => :test
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "fluent-plugin-newrelic-summary"
7
+ spec.version = "0.0.1"
8
+ spec.authors = ["Hiroaki Sano"]
9
+ spec.email = ["hiroaki.sano.9stories@gmail.com"]
10
+
11
+ spec.summary = %q{Fluent input plugin to get NewRelic application summary.}
12
+ spec.homepage = "https://github.com/hiroakis/fluent-plugin-newrelic-summary"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files`.split("\n")
16
+ spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.10"
21
+ spec.add_development_dependency "rake", "~> 10.0"
22
+ spec.add_development_dependency "test-unit"
23
+
24
+ spec.add_runtime_dependency "fluentd"
25
+ end
@@ -0,0 +1,75 @@
1
+ require 'net/https'
2
+
3
+ module Fluent
4
+ class NewRelicSummaryInput < Input
5
+ Plugin.register_input('newrelic_summary', self)
6
+
7
+ NEW_RELIC_API_DOMAIN = 'api.newrelic.com'
8
+ SUMMARIES = %w(applications servers key_transactions)
9
+
10
+ config_param :tag, :string, :default => nil
11
+ config_param :api_key, :string, :defaut => nil, :secret => true
12
+ config_param :summary, :string, :default => "applications"
13
+ config_param :interval, :integer, :default => 60 # sec
14
+
15
+ unless method_defined?(:log)
16
+ define_method("log") { $log }
17
+ end
18
+
19
+ def initialize
20
+ super
21
+ end
22
+
23
+ def configure(conf)
24
+ log.trace "in_newrelic_summary: configure"
25
+ super
26
+
27
+ if @tag.nil?
28
+ raise Fluent::ConfigError, "newrelic_summary: 'tag' parameter is required"
29
+ end
30
+ unless SUMMARIES.include?(@summary)
31
+ raise Fluent::ConfigError, "newrelic_summary: no such 'summary' parameter. summary should be applications, servers or key_transactions"
32
+ end
33
+ end
34
+
35
+ def start
36
+ log.trace "in_newrelic_summary: start"
37
+ super
38
+
39
+ @thread = Thread.new(&method(:run))
40
+ end
41
+
42
+ def shutdown
43
+ log.trace "in_newrelic_summary: shutdown"
44
+ super
45
+
46
+ Thread.kill(@thread)
47
+ end
48
+
49
+ def run
50
+ log.trace "in_newrelic_summary: run"
51
+
52
+ loop do
53
+ http = Net::HTTP.new(NEW_RELIC_API_DOMAIN, 443)
54
+ http.use_ssl = true
55
+ uri = "/v2/#{@summary}.json"
56
+ req = Net::HTTP::Get.new(uri)
57
+ req["NewRelic-Api-Key"] = @api_key
58
+ res = http.request(req)
59
+
60
+ case res
61
+ when Net::HTTPSuccess
62
+ emit_data(JSON.parse(res.body))
63
+ else
64
+ log.error "in_newrelic_summary: error"
65
+ end
66
+ sleep @interval
67
+ end
68
+ end # The end of run method
69
+
70
+ def emit_data(data)
71
+ log.trace "in_newrelic_summary: emit_data"
72
+ Engine.emit("#{tag}", Engine.now, data)
73
+ end
74
+ end
75
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,28 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+
12
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
13
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
14
+ require 'fluent/test'
15
+ unless ENV.has_key?('VERBOSE')
16
+ nulllogger = Object.new
17
+ nulllogger.instance_eval {|obj|
18
+ def method_missing(method, *args)
19
+ # pass
20
+ end
21
+ }
22
+ $log = nulllogger
23
+ end
24
+
25
+ require 'fluent/plugin/in_newrelic_summary'
26
+
27
+ class Test::Unit::TestCase
28
+ end
@@ -0,0 +1,52 @@
1
+ require 'helper'
2
+
3
+ class NewRelicSummaryTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ Fluent::Test.setup
7
+ end
8
+
9
+ CONFIG = %[
10
+ type newrelic_summary
11
+ api_key NEWRELIC_API_KEY
12
+ interval 5
13
+ summary applications
14
+ tag newrelic.summary
15
+ ]
16
+
17
+ def create_driver(conf=CONFIG, tag='test')
18
+ Fluent::Test::OutputTestDriver.new(Fluent::NewRelicSummaryInput, tag).configure(conf)
19
+ end
20
+
21
+ def test_configuration
22
+ d = create_driver
23
+ assert_equal 'NEWRELIC_API_KEY', d.instance.api_key
24
+ assert_equal 5, d.instance.interval
25
+ assert_equal 'applications', d.instance.summary
26
+ assert_equal 'newrelic.summary', d.instance.tag
27
+ end
28
+
29
+ def test_configuration_with_empty_tag
30
+ assert_raise(Fluent::ConfigError) {
31
+ create_driver %[
32
+ type newrelic_summary
33
+ api_key NEWRELIC_API_KEY
34
+ interval 5
35
+ summary applications
36
+ # tag newrelic.summary
37
+ ]
38
+ }
39
+ end
40
+
41
+ def test_configuration_with_unknown_summary
42
+ assert_raise(Fluent::ConfigError) {
43
+ create_driver %[
44
+ type newrelic_summary
45
+ api_key NEWRELIC_API_KEY
46
+ interval 5
47
+ summary XXXXXXX
48
+ tag newrelic.summary
49
+ ]
50
+ }
51
+ end
52
+ end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-newrelic-summary
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Hiroaki Sano
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-01-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: test-unit
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: fluentd
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description:
70
+ email:
71
+ - hiroaki.sano.9stories@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - Gemfile
78
+ - README.md
79
+ - Rakefile
80
+ - fluent-plugin-newrelic-summary.gemspec
81
+ - lib/fluent/plugin/in_newrelic_summary.rb
82
+ - test/helper.rb
83
+ - test/plugin/test_in_newrelic_summary.rb
84
+ homepage: https://github.com/hiroakis/fluent-plugin-newrelic-summary
85
+ licenses:
86
+ - MIT
87
+ metadata: {}
88
+ post_install_message:
89
+ rdoc_options: []
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ requirements: []
103
+ rubyforge_project:
104
+ rubygems_version: 2.4.5
105
+ signing_key:
106
+ specification_version: 4
107
+ summary: Fluent input plugin to get NewRelic application summary.
108
+ test_files:
109
+ - test/helper.rb
110
+ - test/plugin/test_in_newrelic_summary.rb