fluent-plugin-datadog_event 0.1.0

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: f1be93df028a1db692b3bab8ed0a15d943b644b5
4
+ data.tar.gz: 119ea48ccc95fa9f8784d65592b59ed7302c8458
5
+ SHA512:
6
+ metadata.gz: 5126768e862217fe8eb1d868b365464d951d942c801bd287d9a69072840e91bb02f6c6da1e9c25a974ee90b66320dca4432b567cd2321581548d63c88d5fa9e0
7
+ data.tar.gz: 0831c45abf8f40a6c12188b2cea5efb0aa923dd8189ff108fc3177027d9ee892101e1249328148f6ebfea3147b2820c39ec3bcad35201dd6675b3ce46c47f11c
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.gem
11
+ .bundle
12
+ Gemfile.lock
13
+ pkg/*
14
+ *.tmproj
15
+ tmtags
16
+ *~
17
+ \#*
18
+ .\#*
19
+ *.swp
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in fluent-plugin-datadog_event.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # Fluent::Plugin::DatadogEvent
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/fluent/plugin/datadog_event`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'fluent-plugin-datadog_event'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install fluent-plugin-datadog_event
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ 1. Fork it ( https://github.com/[my-github-username]/fluent-plugin-datadog_event/fork )
36
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
37
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
38
+ 4. Push to the branch (`git push origin my-new-feature`)
39
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+
4
+ require 'rake/testtask'
5
+ Rake::TestTask.new(:test) do |test|
6
+ test.libs << 'lib' << 'test'
7
+ test.pattern = 'test/**/test_*.rb'
8
+ test.verbose = true
9
+ end
10
+
11
+ 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
+ require 'fluent/plugin/datadog_event/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "fluent-plugin-datadog_event"
8
+ spec.version = Fluent::Plugin::DatadogEvent::VERSION
9
+ spec.authors = ["Yohei Kawahara(inokappa)"]
10
+ spec.email = [""]
11
+
12
+ spec.summary = %q{fluentd plugin for datadog event}
13
+ spec.description = %q{fluentd plugin for datadog event}
14
+ spec.homepage = ""
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.9"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "dogapi"
24
+ spec.add_runtime_dependency "fluentd"
25
+ end
@@ -0,0 +1,7 @@
1
+ module Fluent
2
+ module Plugin
3
+ module DatadogEvent
4
+ VERSION = "0.1.0"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,87 @@
1
+ module Fluent
2
+ class InDatadogEvent < Fluent::Input
3
+ Fluent::Plugin.register_input('datadog_event', self)
4
+
5
+ unless method_defined?(:log)
6
+ define_method("log") { $log }
7
+ end
8
+
9
+ unless method_defined?(:router)
10
+ define_method("router") { Fluent::Engine }
11
+ end
12
+
13
+ config_param :api_key, :string
14
+ config_param :app_key, :string, :default => nil
15
+ config_param :priority, :string, :default => nil
16
+ config_param :interval, :integer, :default => 60
17
+ config_param :period, :integer, :default => 60
18
+ config_param :tag, :string, :default => nil
19
+ config_param :state_file, :string
20
+
21
+ def initialize
22
+ super
23
+ #
24
+ require "dogapi"
25
+ end
26
+
27
+ def start
28
+ @dog = Dogapi::Client.new(@api_key, @app_key)
29
+ @finished = false
30
+ @thread = Thread.new(&method(:run))
31
+ end
32
+
33
+ def shutdown
34
+ @finished = true
35
+ @thread.join
36
+ end
37
+
38
+ private
39
+
40
+ def read_id(event_id)
41
+ return nil unless File.exist?(@state_file)
42
+ ids = File.read(@state_file).chomp
43
+ ids.include?(event_id.to_s)
44
+ end
45
+
46
+ def store_read_id(event_id)
47
+ open(@state_file, 'a') do |f|
48
+ f.write event_id
49
+ end
50
+ end
51
+
52
+ def reset_state_file
53
+ open(@state_file, 'w').close()
54
+ end
55
+
56
+ def run
57
+ loop do
58
+ sleep @interval
59
+ #
60
+ response = get_stream_events[1]["events"]
61
+ #
62
+ response.reverse_each do |e|
63
+ event_id = e["id"]
64
+ unless read_id(event_id) then
65
+ time = e["date_happened"]
66
+ router.emit(@tag, time, e)
67
+ store_read_id(event_id)
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ def get_stream_events
74
+ reset_state_file
75
+ options = {}
76
+ options[:priority] = @priority
77
+ options[:tags] = @tags
78
+
79
+ start_time = Time.now.to_i - @period
80
+ end_time = Time.now.to_i
81
+
82
+ res = @dog.stream(start_time, end_time, options)
83
+ # for debug
84
+ #puts "debug_out: #{res}\n"
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,62 @@
1
+ module Fluent
2
+ class OutDatadogEvent < Fluent::Output
3
+ Fluent::Plugin.register_output('datadog_event', self)
4
+
5
+ unless method_defined?(:log)
6
+ define_method("log") { $log }
7
+ end
8
+
9
+ config_param :api_key, :string
10
+ config_param :app_key, :string, :default => nil
11
+ config_param :date_happend, :string, :default => nil
12
+ config_param :priority, :string, :default => nil
13
+ # config_param :host, :string, :default => nil
14
+ config_param :tags, :string, :default => nil
15
+ config_param :alert_type, :string, :default => nil
16
+ config_param :aggregation_key, :string, :default => nil
17
+ config_param :source_type_name, :string, :default => 'fluentd'
18
+
19
+ def initialize
20
+ super
21
+ #
22
+ require "dogapi"
23
+ end
24
+
25
+ def start
26
+ @dog = Dogapi::Client.new(@api_key, @app_key)
27
+ @finished = false
28
+ end
29
+
30
+ def shutdown
31
+ @finished = true
32
+ @thread.join
33
+ end
34
+
35
+ def emit(tag, es, chain)
36
+ chain.next
37
+ es.each do |time,record|
38
+ record.select do |k,v|
39
+ event_msg = record[k]
40
+ post_event(k, event_msg)
41
+ end
42
+ end
43
+ end
44
+
45
+ def post_event(event_key, event_msg)
46
+ res = @dog.emit_event(Dogapi::Event.new(
47
+ "#{event_msg}",
48
+ :msg_title => "#{event_key}",
49
+ :date_happend => @date_happend,
50
+ :priority => @priority,
51
+ # :host => @host,
52
+ :tags => @tags,
53
+ :alert_type => @alert_type,
54
+ :aggregation_key => @aggregation_key,
55
+ :source_type_name => @source_type_name
56
+ ))
57
+ # for debug
58
+ #puts "debug_out: #{res}\n"
59
+ end
60
+
61
+ end
62
+ end
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-datadog_event
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Yohei Kawahara(inokappa)
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-06-10 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.9'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.9'
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: dogapi
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: fluentd plugin for datadog event
70
+ email:
71
+ - ''
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - .gitignore
77
+ - .travis.yml
78
+ - Gemfile
79
+ - README.md
80
+ - Rakefile
81
+ - fluent-plugin-datadog_event.gemspec
82
+ - lib/fluent/plugin/datadog_event/version.rb
83
+ - lib/fluent/plugin/in_datadog_event.rb
84
+ - lib/fluent/plugin/out_datadog_event.rb
85
+ homepage: ''
86
+ licenses: []
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.0.3
105
+ signing_key:
106
+ specification_version: 4
107
+ summary: fluentd plugin for datadog event
108
+ test_files: []
109
+ has_rdoc: