aws-sdk 1.5.6 → 1.5.7

Sign up to get free protection for your applications and to get access to all the features.
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