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.
Files changed (55) hide show
  1. data/lib/aws.rb +2 -0
  2. data/lib/aws/api_config/CloudWatch-2010-08-01.yml +424 -0
  3. data/lib/aws/api_config/STS-2011-06-15.yml +4 -0
  4. data/lib/aws/auto_scaling/activity.rb +2 -2
  5. data/lib/aws/auto_scaling/activity_collection.rb +1 -1
  6. data/lib/aws/auto_scaling/group_collection.rb +1 -1
  7. data/lib/aws/auto_scaling/instance_collection.rb +1 -1
  8. data/lib/aws/auto_scaling/launch_configuration_collection.rb +1 -1
  9. data/lib/aws/auto_scaling/notification_configuration_collection.rb +1 -1
  10. data/lib/aws/auto_scaling/scaling_policy_collection.rb +1 -1
  11. data/lib/aws/auto_scaling/scheduled_action_collection.rb +1 -1
  12. data/lib/aws/auto_scaling/tag_collection.rb +1 -1
  13. data/lib/aws/cloud_watch.rb +75 -0
  14. data/lib/aws/cloud_watch/alarm.rb +272 -0
  15. data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
  16. data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
  17. data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
  18. data/lib/aws/cloud_watch/client.rb +333 -0
  19. data/lib/aws/cloud_watch/config.rb +18 -0
  20. data/lib/aws/cloud_watch/errors.rb +22 -0
  21. data/lib/aws/cloud_watch/metric.rb +135 -0
  22. data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
  23. data/lib/aws/cloud_watch/metric_collection.rb +131 -0
  24. data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
  25. data/lib/aws/cloud_watch/request.rb +23 -0
  26. data/lib/aws/core.rb +1 -1
  27. data/lib/aws/core/client.rb +2 -2
  28. data/lib/aws/core/client/query_json.rb +2 -0
  29. data/lib/aws/core/collection.rb +58 -25
  30. data/lib/aws/core/collection/simple.rb +18 -26
  31. data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
  32. data/lib/aws/core/collection/with_next_token.rb +97 -0
  33. data/lib/aws/core/credential_providers.rb +36 -0
  34. data/lib/aws/core/option_grammar.rb +19 -0
  35. data/lib/aws/core/page_result.rb +5 -3
  36. data/lib/aws/dynamo_db/client.rb +0 -16
  37. data/lib/aws/dynamo_db/item_collection.rb +1 -1
  38. data/lib/aws/dynamo_db/request.rb +5 -1
  39. data/lib/aws/dynamo_db/table_collection.rb +1 -1
  40. data/lib/aws/iam/collection.rb +1 -1
  41. data/lib/aws/s3/client.rb +1 -1
  42. data/lib/aws/s3/paginated_collection.rb +1 -1
  43. data/lib/aws/simple_db/domain_collection.rb +14 -41
  44. data/lib/aws/simple_db/item_collection.rb +2 -2
  45. data/lib/aws/simple_email_service/identity_collection.rb +1 -1
  46. data/lib/aws/simple_workflow/domain_collection.rb +1 -1
  47. data/lib/aws/simple_workflow/history_event_collection.rb +1 -1
  48. data/lib/aws/simple_workflow/type_collection.rb +1 -1
  49. data/lib/aws/simple_workflow/workflow_execution_collection.rb +1 -1
  50. data/lib/aws/sns/topic.rb +1 -1
  51. data/lib/aws/sts.rb +9 -1
  52. data/lib/aws/sts/client.rb +31 -14
  53. data/lib/net/http/connection_pool.rb +11 -5
  54. metadata +19 -4
  55. 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