aws-sdk 1.5.6 → 1.5.7
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.
- data/lib/aws.rb +2 -0
- data/lib/aws/api_config/CloudWatch-2010-08-01.yml +424 -0
- data/lib/aws/api_config/STS-2011-06-15.yml +4 -0
- data/lib/aws/auto_scaling/activity.rb +2 -2
- data/lib/aws/auto_scaling/activity_collection.rb +1 -1
- data/lib/aws/auto_scaling/group_collection.rb +1 -1
- data/lib/aws/auto_scaling/instance_collection.rb +1 -1
- data/lib/aws/auto_scaling/launch_configuration_collection.rb +1 -1
- data/lib/aws/auto_scaling/notification_configuration_collection.rb +1 -1
- data/lib/aws/auto_scaling/scaling_policy_collection.rb +1 -1
- data/lib/aws/auto_scaling/scheduled_action_collection.rb +1 -1
- data/lib/aws/auto_scaling/tag_collection.rb +1 -1
- data/lib/aws/cloud_watch.rb +75 -0
- data/lib/aws/cloud_watch/alarm.rb +272 -0
- data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
- data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
- data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
- data/lib/aws/cloud_watch/client.rb +333 -0
- data/lib/aws/cloud_watch/config.rb +18 -0
- data/lib/aws/cloud_watch/errors.rb +22 -0
- data/lib/aws/cloud_watch/metric.rb +135 -0
- data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
- data/lib/aws/cloud_watch/metric_collection.rb +131 -0
- data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
- data/lib/aws/cloud_watch/request.rb +23 -0
- data/lib/aws/core.rb +1 -1
- data/lib/aws/core/client.rb +2 -2
- data/lib/aws/core/client/query_json.rb +2 -0
- data/lib/aws/core/collection.rb +58 -25
- data/lib/aws/core/collection/simple.rb +18 -26
- data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
- data/lib/aws/core/collection/with_next_token.rb +97 -0
- data/lib/aws/core/credential_providers.rb +36 -0
- data/lib/aws/core/option_grammar.rb +19 -0
- data/lib/aws/core/page_result.rb +5 -3
- data/lib/aws/dynamo_db/client.rb +0 -16
- data/lib/aws/dynamo_db/item_collection.rb +1 -1
- data/lib/aws/dynamo_db/request.rb +5 -1
- data/lib/aws/dynamo_db/table_collection.rb +1 -1
- data/lib/aws/iam/collection.rb +1 -1
- data/lib/aws/s3/client.rb +1 -1
- data/lib/aws/s3/paginated_collection.rb +1 -1
- data/lib/aws/simple_db/domain_collection.rb +14 -41
- data/lib/aws/simple_db/item_collection.rb +2 -2
- data/lib/aws/simple_email_service/identity_collection.rb +1 -1
- data/lib/aws/simple_workflow/domain_collection.rb +1 -1
- data/lib/aws/simple_workflow/history_event_collection.rb +1 -1
- data/lib/aws/simple_workflow/type_collection.rb +1 -1
- data/lib/aws/simple_workflow/workflow_execution_collection.rb +1 -1
- data/lib/aws/sns/topic.rb +1 -1
- data/lib/aws/sts.rb +9 -1
- data/lib/aws/sts/client.rb +31 -14
- data/lib/net/http/connection_pool.rb +11 -5
- metadata +19 -4
- data/lib/aws/core/collection/limitable.rb +0 -99
@@ -0,0 +1,18 @@
|
|
1
|
+
# Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
AWS::Core::Configuration.module_eval do
|
15
|
+
|
16
|
+
add_service 'CloudWatch', 'cloud_watch', 'monitoring.us-east-1.amazonaws.com'
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
module AWS
|
15
|
+
class CloudWatch
|
16
|
+
module Errors
|
17
|
+
|
18
|
+
extend Core::LazyErrorClasses
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
# Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
require 'date'
|
15
|
+
require 'time'
|
16
|
+
|
17
|
+
module AWS
|
18
|
+
class CloudWatch
|
19
|
+
|
20
|
+
# = Metric
|
21
|
+
#
|
22
|
+
# Represents a single metric.
|
23
|
+
#
|
24
|
+
class Metric < Core::Resource
|
25
|
+
|
26
|
+
# @param [String] namespace The metric namespace.
|
27
|
+
# @param [String] metric_name The metric name.
|
28
|
+
# @param [Hash] options
|
29
|
+
# @option options [Array<Hash>] :dimensions An array of dimensions.
|
30
|
+
# Each hash must have a +:name+ and a +value+ key (with string values).
|
31
|
+
def initialize namespace, metric_name, options = {}
|
32
|
+
@namespace = namespace
|
33
|
+
@metric_name = metric_name
|
34
|
+
@dimensions = options[:dimensions] || []
|
35
|
+
super
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return [String]
|
39
|
+
attr_reader :namespace
|
40
|
+
|
41
|
+
# @return [String]
|
42
|
+
attr_reader :metric_name
|
43
|
+
|
44
|
+
alias_method :name, :metric_name
|
45
|
+
|
46
|
+
# @return [Array<Hash>]
|
47
|
+
attr_reader :dimensions
|
48
|
+
|
49
|
+
# @return [MetricAlarmCollection]
|
50
|
+
def alarms
|
51
|
+
MetricAlarmCollection.new(self, :config => config)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Publishes metric data points to Amazon CloudWatch.
|
55
|
+
# @param [Array<Hash>] metric_data An array of hashes. Each hash
|
56
|
+
# must pass +:value+ (number) or +:statistic_values+ (hash).
|
57
|
+
# @return [nil]
|
58
|
+
def put_data *metric_data
|
59
|
+
|
60
|
+
metric_opts = {}
|
61
|
+
metric_opts[:metric_name] = metric_name
|
62
|
+
metric_opts[:dimensions] = dimensions unless dimensions.empty?
|
63
|
+
|
64
|
+
options = {}
|
65
|
+
options[:namespace] = namespace
|
66
|
+
options[:metric_data] = metric_data.flatten.map do |data|
|
67
|
+
data.merge(metric_opts)
|
68
|
+
end
|
69
|
+
|
70
|
+
client.put_metric_data(options)
|
71
|
+
nil
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
# Gets statistics for this metric.
|
76
|
+
#
|
77
|
+
# metric = CloudWatch::Metric.new('my/namepace', 'metric-name')
|
78
|
+
#
|
79
|
+
# stats = metric.statistics(
|
80
|
+
# :start_time => Time.now - 3600,
|
81
|
+
# :end_time => Time.now,
|
82
|
+
# :statistics => ['Average'])
|
83
|
+
#
|
84
|
+
# stats.label #=> 'some-label'
|
85
|
+
# stats.each do |datapoint|
|
86
|
+
# # datapoint is a hash
|
87
|
+
# end
|
88
|
+
#
|
89
|
+
# @param [Hash] options
|
90
|
+
# @option options [Time,required] :start_time
|
91
|
+
# @option options [Time,required] :end_time
|
92
|
+
# @option options [Array<String>,required] :statistics
|
93
|
+
# @option options [String] :unit
|
94
|
+
# @option options [Integer] :period (60)
|
95
|
+
# @return [MetricStatistics]
|
96
|
+
def statistics options = {}
|
97
|
+
|
98
|
+
start = options.delete(:start_time)
|
99
|
+
stop = options.delete(:end_time)
|
100
|
+
|
101
|
+
options[:namespace] = namespace
|
102
|
+
options[:metric_name] = metric_name
|
103
|
+
options[:dimensions] = dimensions unless dimensions.empty?
|
104
|
+
options[:start_time] = start.respond_to?(:iso8601) ? start.iso8601 : start
|
105
|
+
options[:end_time] = stop.respond_to?(:iso8601) ? stop.iso8601 : stop
|
106
|
+
options[:period] ||= 60
|
107
|
+
|
108
|
+
resp = client.get_metric_statistics(options)
|
109
|
+
|
110
|
+
MetricStatistics.new(self, resp[:label], resp[:datapoints])
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
# @return [Boolean] Returns +true+ if this metric exists.
|
115
|
+
def exists?
|
116
|
+
!get_resource.data[:metrics].empty?
|
117
|
+
end
|
118
|
+
|
119
|
+
protected
|
120
|
+
|
121
|
+
def resource_identifiers
|
122
|
+
[
|
123
|
+
[:namespace, namespace],
|
124
|
+
[:metric_item, metric_name],
|
125
|
+
[:dimensions, dimensions],
|
126
|
+
]
|
127
|
+
end
|
128
|
+
|
129
|
+
def get_resource attr_name = nil
|
130
|
+
client.list_metrics(resource_options)
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,160 @@
|
|
1
|
+
# Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
module AWS
|
15
|
+
class CloudWatch
|
16
|
+
|
17
|
+
# = MetricAlarmCollection
|
18
|
+
#
|
19
|
+
# Represents all alarms for a single metric.
|
20
|
+
#
|
21
|
+
# == Getting an alarm by name
|
22
|
+
#
|
23
|
+
# If you know the name of the alarm, you can get a reference using
|
24
|
+
# the {#[]} method.
|
25
|
+
#
|
26
|
+
# metric.alarms['alarm-name']
|
27
|
+
#
|
28
|
+
# == Enumerating Alarms
|
29
|
+
#
|
30
|
+
# You can enumerate all alarms for a metric using each (or any of the
|
31
|
+
# methods defined in {Core::Collection}).
|
32
|
+
#
|
33
|
+
# metric.alarms.each do |alarm|
|
34
|
+
# puts alarm.name
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
# == Filtering Alarms
|
38
|
+
#
|
39
|
+
# Use one of the filtering methods to reduce the number of alarms
|
40
|
+
# returned.
|
41
|
+
#
|
42
|
+
# metric.alarms.with_unit('Seconds').each {|alarm| ... }
|
43
|
+
#
|
44
|
+
class MetricAlarmCollection < AlarmCollection
|
45
|
+
|
46
|
+
include Core::Collection::Simple
|
47
|
+
|
48
|
+
# @private
|
49
|
+
def initialize metric, options = {}
|
50
|
+
@metric = metric
|
51
|
+
super(options.merge(:config => metric.config))
|
52
|
+
end
|
53
|
+
|
54
|
+
# @return [Metric]
|
55
|
+
attr_reader :metric
|
56
|
+
|
57
|
+
# @param [String] alarm_name
|
58
|
+
# @return [Alarm]
|
59
|
+
def [] alarm_name
|
60
|
+
options = {}
|
61
|
+
options[:namespace] = metric.namespace
|
62
|
+
options[:metric_name] = metric.name
|
63
|
+
options[:dimensions] = metric.dimensions unless metric.dimensions.empty?
|
64
|
+
options[:config] = config
|
65
|
+
Alarm.new(alarm_name, options)
|
66
|
+
end
|
67
|
+
|
68
|
+
# Creates an alarm for this metric.
|
69
|
+
# @param (see AlarmCollection#create)
|
70
|
+
# @option (see MetricAlarm#update)
|
71
|
+
# @return (see AlarmCollection#create)
|
72
|
+
def create alarm_name, options = {}
|
73
|
+
options[:namespace] = metric.namespace
|
74
|
+
options[:metric_name] = metric.metric_name
|
75
|
+
options[:dimensions] = metric.dimensions unless metric.dimensions.empty?
|
76
|
+
super(alarm_name, options)
|
77
|
+
end
|
78
|
+
|
79
|
+
# Returns a new collection that will filter results when enumerated.
|
80
|
+
#
|
81
|
+
# @example Filtering by a 1 hour period
|
82
|
+
#
|
83
|
+
# metric.alarms.filter('period', 3600)
|
84
|
+
#
|
85
|
+
# @example Filtering by statistic
|
86
|
+
#
|
87
|
+
# my_metric = metrics.filter('statistic', 'maximum')
|
88
|
+
#
|
89
|
+
# @example Filtering by a unit
|
90
|
+
#
|
91
|
+
# metrics = metrics.filter('unit', 'Megabits')
|
92
|
+
#
|
93
|
+
# @param [String,Symbol] name
|
94
|
+
# @param [String,Integer] value
|
95
|
+
# @return [MetricAlarmCollection]
|
96
|
+
def filter name, value
|
97
|
+
filters = @filters.merge(name.to_s.to_sym => value)
|
98
|
+
MetricAlarmCollection.new(metric, :filters => filters)
|
99
|
+
end
|
100
|
+
|
101
|
+
# Returns a new collection that filters alarms by a period.
|
102
|
+
#
|
103
|
+
# metric.alarms.with_period(3600).each {|alarm| ... }
|
104
|
+
#
|
105
|
+
# @param [Integer] period
|
106
|
+
# @return [MetricAlarmCollection]
|
107
|
+
def with_period period
|
108
|
+
filter(:period, period)
|
109
|
+
end
|
110
|
+
|
111
|
+
# Returns a new collection that filters alarms by a statistic.
|
112
|
+
#
|
113
|
+
# metric.alarms.with_statistic('Average').each {|alarm| ... }
|
114
|
+
#
|
115
|
+
# @param [String] statistic
|
116
|
+
# @return [MetricAlarmCollection]
|
117
|
+
def with_statistic statistic
|
118
|
+
filter(:statistic, statistic)
|
119
|
+
end
|
120
|
+
|
121
|
+
# Returns a new collection that filters alarms by a unit.
|
122
|
+
#
|
123
|
+
# metric.alarms.with_unit('Percent').each {|alarm| ... }
|
124
|
+
#
|
125
|
+
# @param [String] unit
|
126
|
+
# @return [MetricAlarmCollection]
|
127
|
+
def with_unit unit
|
128
|
+
filter(:unit, unit)
|
129
|
+
end
|
130
|
+
|
131
|
+
protected
|
132
|
+
|
133
|
+
def _each_item options = {}, &block
|
134
|
+
|
135
|
+
options = @filters.merge(options)
|
136
|
+
|
137
|
+
options[:namespace] = metric.namespace
|
138
|
+
options[:metric_name] = metric.metric_name
|
139
|
+
options[:dimensions] = metric.dimensions unless metric.dimensions.empty?
|
140
|
+
|
141
|
+
resp = client.describe_alarms_for_metric(options)
|
142
|
+
resp.data[:metric_alarms].each do |details|
|
143
|
+
|
144
|
+
alarm = Alarm.new_from(
|
145
|
+
:describe_alarms_for_metric,
|
146
|
+
details,
|
147
|
+
details[:alarm_name],
|
148
|
+
:config => config)
|
149
|
+
|
150
|
+
yield(alarm)
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
resp.data[:next_token]
|
155
|
+
|
156
|
+
end
|
157
|
+
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
# Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
module AWS
|
15
|
+
class CloudWatch
|
16
|
+
class MetricCollection
|
17
|
+
|
18
|
+
include Core::Collection::WithNextToken
|
19
|
+
|
20
|
+
# @private
|
21
|
+
def initialize options = {}
|
22
|
+
@filters = options[:filters] || {}
|
23
|
+
super
|
24
|
+
end
|
25
|
+
|
26
|
+
# Returns a new collection that will filter results when enumerated.
|
27
|
+
#
|
28
|
+
# @example Filtering by a namespace
|
29
|
+
#
|
30
|
+
# trafic_metrics = metrics.filter('namespace', 'traffic')
|
31
|
+
#
|
32
|
+
# @example Filtering by a metric name
|
33
|
+
#
|
34
|
+
# my_metric = metrics.filter('metric_name', 'my-metric').first
|
35
|
+
#
|
36
|
+
# @example Filtering by one or more dimensions
|
37
|
+
#
|
38
|
+
# metrics = metrics.filter('dimensions', [
|
39
|
+
# { :name => 'n1', :value => 'v1' },
|
40
|
+
# { :name => 'n2', :value => 'v2' },
|
41
|
+
# { :name => 'n3', :value => 'v3' },
|
42
|
+
# ])
|
43
|
+
#
|
44
|
+
# @param [String,Symbol] name
|
45
|
+
# @param [String,Array<String>] value
|
46
|
+
# @return [MetricCollection]
|
47
|
+
def filter name, value
|
48
|
+
filters = @filters.merge(name.to_s.to_sym => value)
|
49
|
+
MetricCollection.new(:filters => filters, :config => config)
|
50
|
+
end
|
51
|
+
|
52
|
+
# @param [String] namespace
|
53
|
+
# @return [MetricCollection]
|
54
|
+
def with_namespace namespace
|
55
|
+
filter(:namespace, namespace)
|
56
|
+
end
|
57
|
+
|
58
|
+
# @param [String] name
|
59
|
+
# @return [MetricCollection]
|
60
|
+
def with_metric_name name
|
61
|
+
filter(:metric_name, name)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Returns a collection filtered by the given dimension:
|
65
|
+
#
|
66
|
+
# metric = metrics.with_dimension('name', 'value').first
|
67
|
+
#
|
68
|
+
# You can chain calls to #with_dimension. Additional dimensions are
|
69
|
+
# added.
|
70
|
+
#
|
71
|
+
# metrics = metrics.
|
72
|
+
# with_dimension('d1', 'v1').
|
73
|
+
# with_dimension('d2', 'v2').
|
74
|
+
# with_dimension('d3', 'v3')
|
75
|
+
#
|
76
|
+
# metrics.each{|metric|} # filtered by all three dimensions
|
77
|
+
#
|
78
|
+
# @param [String] name
|
79
|
+
# @param [String] value
|
80
|
+
# @return [MetricCollection]
|
81
|
+
def with_dimension name, value
|
82
|
+
with_dimensions([{ :name => name, :value => value }])
|
83
|
+
end
|
84
|
+
|
85
|
+
# Returns a collection filtered by the given dimensions.
|
86
|
+
#
|
87
|
+
# metrics.with_dimensions([
|
88
|
+
# { :name => 'd1', :value => 'v1' },
|
89
|
+
# { :name => 'd2', :value => 'v2' },
|
90
|
+
# { :name => 'd3', :value => 'v3' },
|
91
|
+
# ]).each do |metric|
|
92
|
+
# # ...
|
93
|
+
# end
|
94
|
+
#
|
95
|
+
# Multiple calls to #with_dimensions will add to previous dimensions.
|
96
|
+
# @param [Array<Hash>] dimensions An array of dimensions. Each dimension
|
97
|
+
# should be a Hash with a +:name+ and +:value+.
|
98
|
+
# @return [MetricCollection]
|
99
|
+
def with_dimensions *dimensions
|
100
|
+
dimensions = @filters[:dimensions] || []
|
101
|
+
dimensions += dimensions.flatten
|
102
|
+
filter(:dimensions, dimensions)
|
103
|
+
end
|
104
|
+
|
105
|
+
protected
|
106
|
+
|
107
|
+
def _each_item next_token, options = {}, &block
|
108
|
+
|
109
|
+
options = @filters.merge(options)
|
110
|
+
options[:next_token] = next_token if next_token
|
111
|
+
|
112
|
+
resp = client.list_metrics(options)
|
113
|
+
resp.data[:metrics].each do |details|
|
114
|
+
|
115
|
+
metric = Metric.new_from(
|
116
|
+
:list_metrics, details,
|
117
|
+
details[:namespace],
|
118
|
+
details[:metric_name],
|
119
|
+
details.merge(:config => config))
|
120
|
+
|
121
|
+
yield(metric)
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
resp.data[:next_token]
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|