cloudwatch-sender 0.2.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ff1a63e62d0660b2cf330f15aa145c9012f69750
4
- data.tar.gz: 987bd2e9c50204530cab7e1d5d211aeae9d011f3
3
+ metadata.gz: db3623e303865b8a0f9a3cc6de29d4bab86744ab
4
+ data.tar.gz: 71a77cee896132748aad7ed8cd5e1582a844c444
5
5
  SHA512:
6
- metadata.gz: c4210d48cd37b9390a139193a1e24a86b7dd20705de7399159c8140cb56cc37ee7218b14b517075bf253c3c57b2ebda18c9573b2c9abd79c29fff58358e54416
7
- data.tar.gz: ace96313d3ed532c539166bc83d88fa7ccdb2403e047a96f9448e8336af695bf6618a958fb49834c5b4fe29fdba716d1cda20d2b3a410683f986d31043a67507
6
+ metadata.gz: 527103a349e4e7ac3a02beadb61749b79999e32e7fd12f12da539baeddb486d763f89a0646a8d2724b00fd15bb56a791882fca19ce0227af5b568b5412862f2d
7
+ data.tar.gz: 6e336af7696e74afc34260921d41425d0615aa9e5ff291e163349590f4ecc603acae69041e5ab00bd4d83ddefbc7dfca1576d9cec19985443c00b025634ff4d9
@@ -1 +1 @@
1
- 2.1.3
1
+ 2.2.0
@@ -23,4 +23,5 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.add_runtime_dependency "aws-sdk"
25
25
  spec.add_runtime_dependency "thor"
26
+ spec.add_runtime_dependency "influxdb"
26
27
  end
@@ -1,7 +1,13 @@
1
1
  ---
2
2
  metric_prefix: "cloudwatch"
3
- influx_host: "influxdb.domain.com"
4
- influx_port: 2003
3
+ influx_options:
4
+ influx_host: "influxdb.domain.com"
5
+ influx_database: cloudwatch
6
+ influx_ssl: true
7
+ influx_verify_ssl: true
8
+ influx_ssl_ca_cert: "/path/to/certs"
9
+ influx_username: "username"
10
+ influx_password: "password"
5
11
 
6
12
  metric_types:
7
13
  ## EC2 Metrics
@@ -1,27 +1,22 @@
1
- require "json"
2
- require "yaml"
3
-
4
1
  module Cloudwatch
5
2
  module Sender
6
3
  class Base
7
- def initialize(server, port)
8
- @influx_server = server
9
- @influx_port = port
10
- end
4
+ attr_reader :influxdb, :metric_prefix
11
5
 
12
- def send_tcp(contents)
13
- puts "#{influx_server}:#{influx_port} - #{contents}" if ENV['DEBUG']
14
- sock = TCPSocket.open(influx_server, influx_port)
15
- sock.print contents
16
- rescue StandardError => e
17
- logger.debug "Error: #{e}"
18
- ensure
19
- sock.close
6
+ def initialize(options, metric_prefix)
7
+ @metric_prefix = metric_prefix
8
+ @influxdb = InfluxDB::Client.new "graphite",
9
+ :username => options["influx_username"],
10
+ :password => options["influx_password"],
11
+ :use_ssl => options["influx_ssl"] || false,
12
+ :verify_ssl => options["influx_verify_ssl"] || false,
13
+ :ssl_ca_cert => options["influx_ssl_ca_cert"] || false,
14
+ :host => options["influx_host"] || false
20
15
  end
21
16
 
22
- protected
23
-
24
- attr_reader :influx_server, :influx_port
17
+ def write_data(data)
18
+ influxdb.write_point(metric_prefix, data)
19
+ end
25
20
  end
26
21
  end
27
22
  end
@@ -1,5 +1,10 @@
1
1
  require "thor"
2
+ require "json"
3
+ require "yaml"
2
4
  require "logger"
5
+ require "openssl"
6
+ require "influxdb"
7
+ require "cloudwatch/sender/base"
3
8
  require "cloudwatch/sender/ec2"
4
9
  require "cloudwatch/sender/credentials"
5
10
  require "cloudwatch/sender/metric_definition"
@@ -13,7 +18,7 @@ module Cloudwatch
13
18
  class CLI < Thor
14
19
  include Thor::Actions
15
20
 
16
- class_option :provider, :desc => "AWS security provider", :required => false, :enum => ["iam", "instance_profile"]
21
+ class_option :provider, :desc => "AWS security provider", :required => false, :enum => %w(iam instance_profile)
17
22
  class_option :access_key_id, :desc => "AWS access_key_id", :required => false
18
23
  class_option :secret_access_key, :desc => "AWS secret_key_id", :required => false
19
24
  class_option :region, :desc => "AWS region", :required => false
@@ -44,7 +49,6 @@ module Cloudwatch
44
49
  end
45
50
  end
46
51
 
47
-
48
52
  no_commands do
49
53
  def load_metrics(metrics_file)
50
54
  YAML.load(File.open(metrics_file))
@@ -1,5 +1,3 @@
1
- require "cloudwatch/sender/base"
2
-
3
1
  module Cloudwatch
4
2
  module Sender
5
3
  module Fetcher
@@ -28,8 +26,7 @@ module Cloudwatch
28
26
  end
29
27
 
30
28
  def fetcher(component_meta)
31
- namespace.start_with?("AWS/") ? Object.const_get(class_namespace component_meta)
32
- : Cloudwatch::Sender::Fetcher::Custom
29
+ namespace.start_with?("AWS/") ? Object.const_get(class_namespace component_meta) : Cloudwatch::Sender::Fetcher::Custom
33
30
  end
34
31
 
35
32
  def class_namespace(component_meta)
@@ -42,13 +39,13 @@ module Cloudwatch
42
39
 
43
40
  def metric_type(component_meta, metric)
44
41
  fetcher(component_meta).new(
45
- cloudwatch, sender, metric_prefix
42
+ cloudwatch, sender
46
43
  ).metrics(component_meta, metric)
47
44
  end
48
45
 
49
46
  def sender
50
47
  Cloudwatch::Sender::Base.new(
51
- components["influx_host"], components["influx_port"]
48
+ components["influx_options"], metric_prefix
52
49
  )
53
50
  end
54
51
  end
@@ -2,12 +2,11 @@ module Cloudwatch
2
2
  module Sender
3
3
  module Fetcher
4
4
  class Custom
5
- attr_reader :metric_prefix, :cloudwatch, :sender
5
+ attr_reader :cloudwatch, :sender, :database
6
6
 
7
- def initialize(cloudwatch, sender, metric_prefix)
7
+ def initialize(cloudwatch, sender)
8
8
  @cloudwatch = cloudwatch
9
9
  @sender = sender
10
- @metric_prefix = metric_prefix
11
10
  end
12
11
 
13
12
  START_TIME = 180
@@ -37,7 +36,15 @@ module Cloudwatch
37
36
 
38
37
  def check_statistics(name, label, statistics, time, data)
39
38
  statistics.each do |stat|
40
- sender.send_tcp("#{metric_prefix}.#{name}.#{label.downcase}.#{stat.downcase}" " " "#{data[stat.downcase]}" " " "#{time}")
39
+ data = {
40
+ :tags => {
41
+ name.tr("^A-Za-z0-9", "") => label.downcase
42
+ },
43
+ :timestamp => time,
44
+ :values => { :value => data[stat.downcase] }
45
+ }
46
+
47
+ sender.write_data(data)
41
48
  end
42
49
  end
43
50
  end
@@ -2,10 +2,9 @@ module Cloudwatch
2
2
  module Sender
3
3
  module Fetcher
4
4
  class EC2
5
- def initialize(cloudwatch, sender, metric_prefix)
5
+ def initialize(cloudwatch, sender)
6
6
  @cloudwatch = cloudwatch
7
7
  @sender = sender
8
- @metric_prefix = metric_prefix
9
8
  end
10
9
 
11
10
  def metrics(component_meta, metric)
@@ -14,7 +13,7 @@ module Cloudwatch
14
13
 
15
14
  private
16
15
 
17
- attr_reader :metric_prefix, :cloudwatch, :sender
16
+ attr_reader :cloudwatch, :sender
18
17
 
19
18
  START_TIME = 180
20
19
 
@@ -61,7 +60,13 @@ module Cloudwatch
61
60
 
62
61
  def check_statistics(instanceid, name, label, statistics, time, data)
63
62
  statistics.each do |stat|
64
- sender.send_tcp("#{metric_prefix}.#{name}.#{instanceid}.#{label.downcase}.#{stat}" " " "#{data[stat.downcase]}" " " "#{time}")
63
+ data = {
64
+ :tags => { name.tr("^A-Za-z0-9", "") => label.downcase, "instance" => instanceid.tr("-", "") },
65
+ :timestamp => time,
66
+ :values => { :value => data[stat.downcase] }
67
+ }
68
+
69
+ sender.write_data(data)
65
70
  end
66
71
  end
67
72
  end
@@ -2,12 +2,11 @@ module Cloudwatch
2
2
  module Sender
3
3
  module Fetcher
4
4
  class SQS
5
- attr_reader :metric_prefix, :cloudwatch, :sender
5
+ attr_reader :cloudwatch, :sender
6
6
 
7
- def initialize(cloudwatch, sender, metric_prefix)
7
+ def initialize(cloudwatch, sender)
8
8
  @cloudwatch = cloudwatch
9
9
  @sender = sender
10
- @metric_prefix = metric_prefix
11
10
  end
12
11
 
13
12
  START_TIME = 1200
@@ -39,7 +38,13 @@ module Cloudwatch
39
38
 
40
39
  def check_statistics(name, label, statistics, time, data, queue_name)
41
40
  statistics.each do |stat|
42
- sender.send_tcp("#{metric_prefix}.#{name}.#{queue_name}.#{label.downcase}.#{stat.downcase}" " " "#{data[stat.downcase]}" " " "#{time}")
41
+ data = {
42
+ :tags => { name => label.downcase, "queue_name" => queue_name },
43
+ :timestamp => time,
44
+ :values => { :value => data[stat.downcase] }
45
+ }
46
+
47
+ sender.write_data(data)
43
48
  end
44
49
  end
45
50
  end
@@ -1,5 +1,5 @@
1
1
  module Cloudwatch
2
2
  module Sender
3
- VERSION = "0.2.0"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudwatch-sender
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - DaveBlooman
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-07-22 00:00:00.000000000 Z
12
+ date: 2015-08-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -67,6 +67,20 @@ dependencies:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: influxdb
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
70
84
  description: Get metrics from Cloudwatch and send to Graphite/InfluxDB
71
85
  email:
72
86
  - david.blooman@gmail.com
@@ -116,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
130
  version: '0'
117
131
  requirements: []
118
132
  rubyforge_project:
119
- rubygems_version: 2.2.2
133
+ rubygems_version: 2.4.5
120
134
  signing_key:
121
135
  specification_version: 4
122
136
  summary: Cloudwatch Metrics Sender