cloudwatch-sender 0.1.1 → 0.2.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: 0de3762390f886fad8a077d0cecd0e2f1e1ad48f
4
- data.tar.gz: cde93ef7efa2f1286dffb59c3139aad87cd222a8
3
+ metadata.gz: ff1a63e62d0660b2cf330f15aa145c9012f69750
4
+ data.tar.gz: 987bd2e9c50204530cab7e1d5d211aeae9d011f3
5
5
  SHA512:
6
- metadata.gz: 8c6c836c2c5051ddd48438b930279041ac8c5da3a5f48495e866018e58f0d8f81274de1133a1f5582c83ee4b5ff07028a33b9847fdc0309669ab1c4eac59bc1e
7
- data.tar.gz: e7b8c961bb55cfdcc3b12f579e145217bddb24ca46de1f8351062ac959de3006c2b48a223e0b746b24ef192658d682d28bb8a81593f53ecd82cb5a0d45ecc276
6
+ metadata.gz: c4210d48cd37b9390a139193a1e24a86b7dd20705de7399159c8140cb56cc37ee7218b14b517075bf253c3c57b2ebda18c9573b2c9abd79c29fff58358e54416
7
+ data.tar.gz: ace96313d3ed532c539166bc83d88fa7ccdb2403e047a96f9448e8336af695bf6618a958fb49834c5b4fe29fdba716d1cda20d2b3a410683f986d31043a67507
data/README.md CHANGED
@@ -37,24 +37,28 @@ gem install cloudwatch-sender
37
37
  ### Command Line
38
38
 
39
39
  ```sh
40
- cloudwatch-sender send_metrics /path/to/config.yaml $AWS_ACCESS_KEY $AWS_SECRET_KEY $AWS_REGION
40
+ cloudwatch-sender send_metrics /path/to/config.yaml --region=eu-west-1 --access-key-id=$AWS_ACCESS_KEY --secret-access-key= $AWS_SECRET_KEY
41
41
  ```
42
42
 
43
43
  If you would like to stream metrics to your endpoint at a set interval, use `continuous`:
44
44
 
45
45
  ```sh
46
- cloudwatch-sender continuous /path/to/config.yaml $AWS_ACCESS_KEY $AWS_SECRET_KEY $AWS_REGION $INTERVAL
46
+ cloudwatch-sender continuous /path/to/config.yaml --region=eu-west-1 $INTERVAL --access-key-id=$AWS_ACCESS_KEY --secret-access-key= $AWS_SECRET_KEY
47
47
  ```
48
48
 
49
49
  **Note** - the default `$INTERVAL` is 60 seconds.
50
50
 
51
+ ```sh
52
+ cloudwatch-sender continuous /path/to/config.yaml --region=eu-west-1 $INTERVAL --provider=iam
53
+ ```
54
+
51
55
  ### Programmatically
52
56
 
53
57
  ```ruby
54
58
  require "cloudwatch/sender/cli"
55
59
 
56
60
  loop do
57
- Cloudwatch::Sender::CLI.new.send_metrics(config_path, key_id, access_key, region)
61
+ Cloudwatch::Sender::CLI.new.send_metrics(config_path = './configs/default.yml', { 'region' => 'eu-west-1', 'provider' => 'iam'})
58
62
  sleep 120
59
63
  end
60
64
  ```
@@ -62,7 +66,7 @@ end
62
66
  ```ruby
63
67
  require "cloudwatch/sender/cli"
64
68
 
65
- Cloudwatch::Sender::CLI.new.continuous(config_path, key_id, access_key, region, sleep_time)
69
+ Cloudwatch::Sender::CLI.new.continuous(config_path = './configs/default.yml', 60, { 'region' => 'eu-west-1', 'provider' => 'iam'})
66
70
  ```
67
71
 
68
72
  ## Configs
@@ -10,6 +10,7 @@ module Cloudwatch
10
10
  end
11
11
 
12
12
  def send_tcp(contents)
13
+ puts "#{influx_server}:#{influx_port} - #{contents}" if ENV['DEBUG']
13
14
  sock = TCPSocket.open(influx_server, influx_port)
14
15
  sock.print contents
15
16
  rescue StandardError => e
@@ -1,6 +1,7 @@
1
1
  require "thor"
2
2
  require "logger"
3
3
  require "cloudwatch/sender/ec2"
4
+ require "cloudwatch/sender/credentials"
4
5
  require "cloudwatch/sender/metric_definition"
5
6
  require "cloudwatch/sender/fetcher/base"
6
7
  require "cloudwatch/sender/fetcher/ec2"
@@ -12,34 +13,54 @@ module Cloudwatch
12
13
  class CLI < Thor
13
14
  include Thor::Actions
14
15
 
15
- desc "send_metrics [metrics_file] [key_id] [access_key] [region]", "Gets metrics from Cloudwatch and sends them to influx"
16
- def send_metrics(metrics_file, key_id, access_key, region)
17
- setup_aws(key_id, access_key, region)
16
+ class_option :provider, :desc => "AWS security provider", :required => false, :enum => ["iam", "instance_profile"]
17
+ class_option :access_key_id, :desc => "AWS access_key_id", :required => false
18
+ class_option :secret_access_key, :desc => "AWS secret_key_id", :required => false
19
+ class_option :region, :desc => "AWS region", :required => false
20
+
21
+ desc "send_metrics [metrics_file]", "Gets metrics from Cloudwatch and sends them to influx"
22
+ def send_metrics(metrics_file, opts = {})
23
+ setup_aws(options.merge(opts), opts["provider"])
18
24
  MetricDefinition.metric_type load_metrics(metrics_file)
19
25
  end
20
26
 
21
- desc "continuous [metrics_file] [key_id] [access_key] [region] [sleep time]", "Continuously sends metrics to Influx/Cloudwatch"
22
- def continuous(metrics_file, key_id, access_key, region, sleep_time = 60)
27
+ desc "continuous [metrics_file] [sleep time]", "Continuously sends metrics to Influx/Cloudwatch"
28
+ def continuous(metrics_file, sleep_time = 60, opts = {})
23
29
  logger = Logger.new(STDOUT)
24
30
 
25
31
  loop do
26
32
  begin
27
- send_metrics(metrics_file, key_id, access_key, region)
33
+ send_metrics(metrics_file, options.merge(opts))
28
34
  sleep sleep_time.to_i
35
+ rescue RequiredArgumentMissingError, ArgumentError => e
36
+ logger.error("Required argument invalid or missing '#{e}'")
37
+ exit(1)
38
+ rescue Aws::Errors::MissingCredentialsError => e
39
+ logger.error("#{e}")
40
+ exit(1)
29
41
  rescue => e
30
42
  logger.debug("Unable to complete operation #{e}")
31
43
  end
32
44
  end
33
45
  end
34
46
 
47
+
35
48
  no_commands do
36
49
  def load_metrics(metrics_file)
37
50
  YAML.load(File.open(metrics_file))
38
51
  end
39
52
 
40
- def setup_aws(key_id, access_key, region)
41
- Aws.config.update(:region => region,
42
- :credentials => Aws::Credentials.new(key_id, access_key))
53
+ def setup_aws(options, provider)
54
+ SetupAwsCredentials.send("#{validate_provider(provider)}".to_sym, options)
55
+ end
56
+
57
+ def validate_provider(provider)
58
+ return "access_key_id" if provider.nil?
59
+ if %w(iam instance_profile).include? provider.downcase
60
+ provider.downcase
61
+ else
62
+ fail ArgumentError.new("'--provider' invalid argument '#{options['provider']}'")
63
+ end
43
64
  end
44
65
  end
45
66
  end
@@ -0,0 +1,30 @@
1
+ module Cloudwatch
2
+ module Sender
3
+ class SetupAwsCredentials
4
+ def self.iam(options)
5
+ provider(options)
6
+ end
7
+
8
+ def self.instance_profile(options)
9
+ provider(options)
10
+ end
11
+
12
+ def self.access_key_id(options)
13
+ credentials = Aws::Credentials.new(options["access_key_id"], options["secret_access_key"])
14
+ Aws.config.update(:region => (options["region"] || ENV["AWS_REGION"]), :credentials => credentials)
15
+ rescue
16
+ RequiredArgumentMissingError.new("'--access_key_id' and '--secret_access_key' required")
17
+ end
18
+
19
+ private
20
+
21
+ def self.credentials
22
+ Aws::InstanceProfileCredentials.new
23
+ end
24
+
25
+ def self.provider(options)
26
+ Aws.config.update(:region => (options["region"] || ENV["AWS_REGION"]), :credentials => credentials)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,5 +1,5 @@
1
1
  module Cloudwatch
2
2
  module Sender
3
- VERSION = "0.1.1"
3
+ VERSION = "0.2.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.1.1
4
+ version: 0.2.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-06-16 00:00:00.000000000 Z
12
+ date: 2015-07-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -87,6 +87,7 @@ files:
87
87
  - configs/example.yaml
88
88
  - lib/cloudwatch/sender/base.rb
89
89
  - lib/cloudwatch/sender/cli.rb
90
+ - lib/cloudwatch/sender/credentials.rb
90
91
  - lib/cloudwatch/sender/ec2.rb
91
92
  - lib/cloudwatch/sender/fetcher/base.rb
92
93
  - lib/cloudwatch/sender/fetcher/custom.rb