aws_instance_list 1.2.6 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3a88a496e99edde8c7d285a465cfe304c38fbf82
4
- data.tar.gz: c5db25fd4d65f23a849fd817636f180e5e65f676
3
+ metadata.gz: d05c98e5aae6d7a2860094f1838a61d2a2529271
4
+ data.tar.gz: 4a5047d23b616bc8366c704dfa691bfe6e8eaa77
5
5
  SHA512:
6
- metadata.gz: 9f2bff084b04f818baafcddd07bd24ed8635bcb48d43b473da90e2e8c26cf7acb063a1d532e85a8af6298dc372c36de1e621a9562e75bd8ccd6890926e20c52d
7
- data.tar.gz: '02487fda68e8e17d02758a7e384f586d8f42e9b7be6c90d783facff877f3d11d855ec0173e2a5dd8133efbe82ddbd0a68eacce935ed708ebb7e41b926a5b726b'
6
+ metadata.gz: 18a92fcc6d8aad273103f4c5f6f28edd8921551af149cbbb4bac206062e62cb3aa7f4d44f4b17ef33b2bb27485cdea07221a6b43107911d715998f9f8caa87c3
7
+ data.tar.gz: 3e904bfcc67dbfa6ce0ca2c44745a17eda886cce7039ada66ad2bfcbb941d98f6b1975fd5c4c8eca0106cd4a97346ff09574187e9cb43e92e4b0c650a625296d
data/Gemfile.lock CHANGED
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- aws_instance_list (1.2.6)
4
+ aws_instance_list (1.3.1)
5
5
  aws-sdk-cloudwatch (~> 1.6)
6
6
  aws-sdk-ec2 (~> 1.37)
7
+ aws-sdk-elasticache (~> 1.7)
7
8
  aws-sdk-rds (~> 1.23)
8
9
  dotenv (~> 2.5)
9
10
 
@@ -11,20 +12,23 @@ GEM
11
12
  remote: https://rubygems.org/
12
13
  specs:
13
14
  aws-eventstream (1.0.1)
14
- aws-partitions (1.95.0)
15
- aws-sdk-cloudwatch (1.6.0)
16
- aws-sdk-core (~> 3)
15
+ aws-partitions (1.105.0)
16
+ aws-sdk-cloudwatch (1.10.0)
17
+ aws-sdk-core (~> 3, >= 3.26.0)
17
18
  aws-sigv4 (~> 1.0)
18
- aws-sdk-core (3.22.1)
19
+ aws-sdk-core (3.32.0)
19
20
  aws-eventstream (~> 1.0)
20
21
  aws-partitions (~> 1.0)
21
22
  aws-sigv4 (~> 1.0)
22
23
  jmespath (~> 1.0)
23
- aws-sdk-ec2 (1.38.0)
24
- aws-sdk-core (~> 3)
24
+ aws-sdk-ec2 (1.51.0)
25
+ aws-sdk-core (~> 3, >= 3.26.0)
25
26
  aws-sigv4 (~> 1.0)
26
- aws-sdk-rds (1.23.0)
27
- aws-sdk-core (~> 3)
27
+ aws-sdk-elasticache (1.7.0)
28
+ aws-sdk-core (~> 3, >= 3.26.0)
29
+ aws-sigv4 (~> 1.0)
30
+ aws-sdk-rds (1.33.0)
31
+ aws-sdk-core (~> 3, >= 3.26.0)
28
32
  aws-sigv4 (~> 1.0)
29
33
  aws-sigv4 (1.0.3)
30
34
  byebug (10.0.2)
@@ -39,5 +39,6 @@ Gem::Specification.new do |spec|
39
39
  spec.add_dependency "aws-sdk-rds", "~> 1.23"
40
40
  spec.add_dependency "aws-sdk-ec2", "~> 1.37"
41
41
  spec.add_dependency "aws-sdk-cloudwatch", "~> 1.6"
42
+ spec.add_dependency "aws-sdk-elasticache", "~> 1.7"
42
43
  spec.add_dependency "dotenv", "~> 2.5"
43
44
  end
@@ -0,0 +1,48 @@
1
+ require 'yaml'
2
+
3
+ module AwsInstanceList
4
+
5
+ class Base
6
+
7
+ attr_accessor :client, :region, :metric
8
+
9
+ def initialize region: 'eu-west-1'
10
+
11
+ @region=region
12
+
13
+ @metric = AwsInstanceList::Metric.new region: region
14
+
15
+ @instances = []
16
+
17
+ end
18
+
19
+ def instances options={}
20
+ ds=descriptions(options)
21
+ @instances+=ds.send( list_method )
22
+ if ds.marker
23
+ options[:marker]=ds.marker
24
+ instances(options)
25
+ else
26
+ @instances
27
+ end
28
+ end
29
+
30
+ def yaml
31
+ @yaml||=yaml_default.merge(yaml_file)[demodulize]
32
+ end
33
+
34
+ def yaml_default
35
+ YAML.load_file AwsInstanceList::DEFAULT_SETTINGS
36
+ end
37
+
38
+ def yaml_file
39
+ ENV.has_key?('AWS_INSTANCE_LIST_YAML') ? YAML.load_file(ENV['AWS_INSTANCE_LIST_YAML']) : {}
40
+ end
41
+
42
+ def demodulize
43
+ self.class.name.split('::').last
44
+ end
45
+
46
+ end
47
+
48
+ end
@@ -0,0 +1,61 @@
1
+ require 'aws-sdk-elasticache'
2
+
3
+ module AwsInstanceList
4
+
5
+ class ElastiCache < AwsInstanceList::Base
6
+
7
+ def initialize region: 'eu-west-1'
8
+
9
+ super region: region
10
+
11
+ @client=Aws::ElastiCache::Client.new region: region
12
+
13
+ end
14
+
15
+ def list_method
16
+ :cache_clusters
17
+ end
18
+
19
+ def descriptions options={}
20
+ client.describe_cache_clusters(options)
21
+ end
22
+
23
+ def bytes_used_for_cache cache_cluster_id
24
+ metric.bytes_used_for_cache cache_cluster_id
25
+ end
26
+
27
+ def freeable_memory cache_cluster_id
28
+ metric.freeable_memory cache_cluster_id
29
+ end
30
+
31
+ def cache_list options: {}, fields: nil
32
+
33
+ fields||=load_cache_fields
34
+
35
+ instances(options).map do |i|
36
+ fields.map { |f| i.send(f) } + metrics(i) << region
37
+ end
38
+ end
39
+
40
+ def group_name i
41
+ i.cache_parameter_group.cache_parameter_group_name
42
+ end
43
+
44
+ def maxmemory cache_node_type
45
+ yaml['maxmemory'][cache_node_type]
46
+ end
47
+
48
+ def load_cache_fields
49
+ yaml['cache']['fields']
50
+ end
51
+
52
+ def metrics instance
53
+ used=bytes_used_for_cache(instance.cache_cluster_id)
54
+ total=maxmemory instance.cache_node_type
55
+ [used, total, used / total * 100.0]
56
+ end
57
+
58
+ end
59
+ end
60
+
61
+
@@ -6,37 +6,45 @@ module AwsInstanceList
6
6
 
7
7
  def initialize
8
8
  @regions=AwsInstanceList::Region.list
9
- @db_list={}
9
+ @list={}
10
10
  end
11
11
 
12
12
  def db_list
13
+ list
14
+ end
13
15
 
14
- if @db_list.empty?
16
+ def rds_db_list region:
17
+ rds=AwsInstanceList::RDS.new region: region
18
+ rds.db_list
19
+ end
15
20
 
16
- threads = []
21
+ def list call_to: :rds_db_list
17
22
 
18
- regions.each do |region|
23
+ threads = []
19
24
 
20
- threads << Thread.new do
21
- @db_list[region]=rds_db_list region: region
22
- end
25
+ regions.each do |region|
23
26
 
27
+ threads << Thread.new do
28
+ @list[region]=self.send( call_to, region: region)
24
29
  end
25
30
 
26
- loop do
27
- break if threads.count { |th| th.alive? } == 0
28
- end
31
+ end
29
32
 
33
+ loop do
34
+ break if threads.count { |th| th.alive? } == 0
30
35
  end
31
36
 
32
- @db_list.values.flatten(1)
37
+ @list.values.flatten(1)
33
38
 
34
39
  end
35
40
 
36
- def rds_db_list region:
37
- rds=AwsInstanceList::RDS.new region: region
38
- rds.db_instances
39
- rds.db_list
41
+ def cache_list
42
+ list call_to: :cache_instance_list
43
+ end
44
+
45
+ def cache_instance_list region:
46
+ ec=AwsInstanceList::ElastiCache.new region: region
47
+ ec.cache_list
40
48
  end
41
49
 
42
50
  end
@@ -34,7 +34,52 @@ module AwsInstanceList
34
34
  statistics: ["Minimum"]
35
35
  })
36
36
 
37
- resp.datapoints.last.minimum / ( 1024.0 ** 3)
37
+ if resp.datapoints.empty?
38
+ '-'
39
+ else
40
+ resp.datapoints.last.minimum / ( 1024.0 ** 3)
41
+ end
42
+
43
+ end
44
+
45
+ def bytes_used_for_cache cache_cluster_id
46
+ resp=statistics( {
47
+ namespace: "AWS/ElastiCache",
48
+ metric_name: "BytesUsedForCache",
49
+ dimensions: [
50
+ {
51
+ name: "CacheClusterId",
52
+ value: cache_cluster_id,
53
+ },
54
+ ],
55
+ start_time: Time.now - 600,
56
+ end_time: Time.now ,
57
+ period: 60,
58
+ statistics: ["Maximum"]
59
+ })
60
+
61
+ resp.datapoints.last.maximum
62
+
63
+ end
64
+
65
+
66
+ def freeable_memory cache_cluster_id
67
+ resp=statistics( {
68
+ namespace: "AWS/ElastiCache",
69
+ metric_name: "FreeableMemory",
70
+ dimensions: [
71
+ {
72
+ name: "CacheClusterId",
73
+ value: cache_cluster_id,
74
+ },
75
+ ],
76
+ start_time: Time.now - 600,
77
+ end_time: Time.now ,
78
+ period: 60,
79
+ statistics: ["Maximum"]
80
+ })
81
+
82
+ resp.datapoints.last.maximum
38
83
 
39
84
  end
40
85
 
@@ -1,42 +1,30 @@
1
1
  require 'aws-sdk-rds'
2
- require 'yaml'
3
2
 
4
3
  module AwsInstanceList
5
4
 
6
- class RDS
7
-
8
- attr_accessor :client, :region
5
+ class RDS < AwsInstanceList::Base
9
6
 
10
7
  def initialize region: 'eu-west-1'
11
8
 
12
- @region=region
9
+ super region: region
13
10
 
14
11
  @client=Aws::RDS::Client.new region: region
15
12
 
16
- @db_instances = []
17
-
18
13
  end
19
14
 
20
- def db_descriptions options={}
21
- client.describe_db_instances(options)
15
+ def list_method
16
+ :db_instances
22
17
  end
23
18
 
24
- def db_instances options={}
25
- descriptions=db_descriptions(options)
26
- @db_instances+=descriptions.db_instances
27
- if descriptions.marker
28
- options[:marker]=descriptions.marker
29
- db_instances(options)
30
- else
31
- @db_instances
32
- end
19
+ def descriptions options={}
20
+ client.describe_db_instances(options)
33
21
  end
34
22
 
35
23
  def db_list options: {}, fields: nil
36
24
 
37
25
  fields||=load_db_fields
38
26
 
39
- db_instances(options).map do |i|
27
+ instances(options).map do |i|
40
28
  fields.map { |f| i.send(f) } << free_storage_space(i.db_instance_identifier) << region
41
29
  end
42
30
  end
@@ -45,24 +33,7 @@ module AwsInstanceList
45
33
  yaml['db']['fields']
46
34
  end
47
35
 
48
- def yaml
49
- @yaml||=yaml_default.merge(yaml_file)[demodulize]
50
- end
51
-
52
- def yaml_default
53
- YAML.load_file AwsInstanceList::DEFAULT_SETTINGS
54
- end
55
-
56
- def yaml_file
57
- ENV.has_key?('AWS_INSTANCE_LIST_YAML') ? YAML.load_file(ENV['AWS_INSTANCE_LIST_YAML']) : {}
58
- end
59
-
60
- def demodulize
61
- self.class.name.split('::').last
62
- end
63
-
64
36
  def free_storage_space db_instance_identifier
65
- metric = AwsInstanceList::Metric.new region: region
66
37
  metric.free_storage_space db_instance_identifier
67
38
  end
68
39
 
@@ -1,3 +1,3 @@
1
1
  module AwsInstanceList
2
- VERSION = "1.2.6"
2
+ VERSION = "1.3.1"
3
3
  end
@@ -1,7 +1,9 @@
1
+ require 'aws_instance_list/base'
1
2
  require 'aws_instance_list/list'
2
3
  require 'aws_instance_list/region'
3
4
  require 'aws_instance_list/metric'
4
5
  require 'aws_instance_list/rds'
6
+ require 'aws_instance_list/elasti_cache'
5
7
  require 'aws_instance_list/version'
6
8
 
7
9
  require 'dotenv/load'
@@ -6,3 +6,42 @@ RDS:
6
6
  - engine
7
7
  - allocated_storage
8
8
  - db_instance_status
9
+ ElastiCache:
10
+ cache:
11
+ fields:
12
+ - cache_cluster_id
13
+ - engine
14
+ - cache_node_type
15
+ maxmemory:
16
+ cache.t1.micro: 142606336
17
+ cache.t2.micro: 581959680
18
+ cache.t2.small: 1665138688
19
+ cache.t2.medium: 3461349376
20
+ cache.m1.small: 943718400
21
+ cache.m1.medium: 3093299200
22
+ cache.m1.large: 7025459200
23
+ cache.m1.xlarge: 14889779200
24
+ cache.m2.xlarge: 17091788800
25
+ cache.m2.2xlarge: 35022438400
26
+ cache.m2.4xlarge: 70883737600
27
+ cache.m3.medium: 2988441600
28
+ cache.m3.large: 6501171200
29
+ cache.m3.xlarge: 14260633600
30
+ cache.m3.2xlarge: 29989273600
31
+ cache.m4.large: 6892593152
32
+ cache.m4.xlarge: 15328501760
33
+ cache.m4.2xlarge: 31889126359
34
+ cache.m4.4xlarge: 65257290629
35
+ cache.m4.10xlarge: 166047614239
36
+ cache.c1.xlarge: 6501171200
37
+ cache.r3.large: 14470348800
38
+ cache.r3.xlarge: 30513561600
39
+ cache.r3.2xlarge: 62495129600
40
+ cache.r3.4xlarge: 126458265600
41
+ cache.r3.8xlarge: 254384537600
42
+ cache.r4.large: 13201781556
43
+ cache.r4.xlarge: 26898228839
44
+ cache.r4.2xlarge: 54197537997
45
+ cache.r4.4xlarge: 108858546586
46
+ cache.r4.8xlarge: 218255432090
47
+ cache.r4.16xlarge: 437021573120
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws_instance_list
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.6
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Diego PL
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-11 00:00:00.000000000 Z
11
+ date: 2018-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '1.6'
111
+ - !ruby/object:Gem::Dependency
112
+ name: aws-sdk-elasticache
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.7'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.7'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: dotenv
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -144,6 +158,8 @@ files:
144
158
  - bin/console
145
159
  - bin/setup
146
160
  - lib/aws_instance_list.rb
161
+ - lib/aws_instance_list/base.rb
162
+ - lib/aws_instance_list/elasti_cache.rb
147
163
  - lib/aws_instance_list/list.rb
148
164
  - lib/aws_instance_list/metric.rb
149
165
  - lib/aws_instance_list/rds.rb