aws-sdk-cloudwatch 0.0.6 → 1.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,424 @@
1
+ # WARNING ABOUT GENERATED CODE
2
+ #
3
+ # This file is generated. See the contributing for info on making contributions:
4
+ # https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md
5
+ #
6
+ # WARNING ABOUT GENERATED CODE
7
+
8
+ module Aws
9
+ module CloudWatch
10
+ class Metric
11
+
12
+ extend Aws::Deprecations
13
+
14
+ # @overload def initialize(namespace, name, options = {})
15
+ # @param [String] namespace
16
+ # @param [String] name
17
+ # @option options [Client] :client
18
+ # @overload def initialize(options = {})
19
+ # @option options [required, String] :namespace
20
+ # @option options [required, String] :name
21
+ # @option options [Client] :client
22
+ def initialize(*args)
23
+ options = Hash === args.last ? args.pop.dup : {}
24
+ @namespace = extract_namespace(args, options)
25
+ @name = extract_name(args, options)
26
+ @data = options.delete(:data)
27
+ @client = options.delete(:client) || Client.new(options)
28
+ end
29
+
30
+ # @!group Read-Only Attributes
31
+
32
+ # @return [String]
33
+ def namespace
34
+ @namespace
35
+ end
36
+
37
+ # @return [String]
38
+ def name
39
+ @name
40
+ end
41
+ alias :metric_name :name
42
+
43
+ # The dimensions for the metric.
44
+ # @return [Array<Types::Dimension>]
45
+ def dimensions
46
+ data.dimensions
47
+ end
48
+
49
+ # @!endgroup
50
+
51
+ # @return [Client]
52
+ def client
53
+ @client
54
+ end
55
+
56
+ # Loads, or reloads {#data} for the current {Metric}.
57
+ # Returns `self` making it possible to chain methods.
58
+ #
59
+ # metric.reload.data
60
+ #
61
+ # @return [self]
62
+ def load
63
+ resp = @client.list_metrics(
64
+ metric_name: @name,
65
+ namespace: @namespace
66
+ )
67
+ @data = resp.metrics[0]
68
+ self
69
+ end
70
+ alias :reload :load
71
+
72
+ # @return [Types::Metric]
73
+ # Returns the data for this {Metric}. Calls
74
+ # {Client#list_metrics} if {#data_loaded?} is `false`.
75
+ def data
76
+ load unless @data
77
+ @data
78
+ end
79
+
80
+ # @return [Boolean]
81
+ # Returns `true` if this resource is loaded. Accessing attributes or
82
+ # {#data} on an unloaded resource will trigger a call to {#load}.
83
+ def data_loaded?
84
+ !!@data
85
+ end
86
+
87
+ # @!group Actions
88
+
89
+ # @example Request syntax with placeholder values
90
+ #
91
+ # metric.get_statistics({
92
+ # dimensions: [
93
+ # {
94
+ # name: "DimensionName", # required
95
+ # value: "DimensionValue", # required
96
+ # },
97
+ # ],
98
+ # start_time: Time.now, # required
99
+ # end_time: Time.now, # required
100
+ # period: 1, # required
101
+ # statistics: ["SampleCount"], # accepts SampleCount, Average, Sum, Minimum, Maximum
102
+ # extended_statistics: ["ExtendedStatistic"],
103
+ # unit: "Seconds", # accepts Seconds, Microseconds, Milliseconds, Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes, Bits, Kilobits, Megabits, Gigabits, Terabits, Percent, Count, Bytes/Second, Kilobytes/Second, Megabytes/Second, Gigabytes/Second, Terabytes/Second, Bits/Second, Kilobits/Second, Megabits/Second, Gigabits/Second, Terabits/Second, Count/Second, None
104
+ # })
105
+ # @param [Hash] options ({})
106
+ # @option options [Array<Types::Dimension>] :dimensions
107
+ # The dimensions. CloudWatch treats each unique combination of
108
+ # dimensions as a separate metric. You can't retrieve statistics using
109
+ # combinations of dimensions that were not specially published. You must
110
+ # specify the same dimensions that were used when the metrics were
111
+ # created. For an example, see [Dimension Combinations][1] in the
112
+ # *Amazon CloudWatch User Guide*.
113
+ #
114
+ #
115
+ #
116
+ # [1]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#dimension-combinations
117
+ # @option options [required, Time,DateTime,Date,Integer,String] :start_time
118
+ # The time stamp that determines the first data point to return. Note
119
+ # that start times are evaluated relative to the time that CloudWatch
120
+ # receives the request.
121
+ #
122
+ # The value specified is inclusive; results include data points with the
123
+ # specified time stamp. The time stamp must be in ISO 8601 UTC format
124
+ # (for example, 2016-10-03T23:00:00Z).
125
+ #
126
+ # CloudWatch rounds the specified time stamp as follows:
127
+ #
128
+ # * Start time less than 15 days ago - Round down to the nearest whole
129
+ # minute. For example, 12:32:34 is rounded down to 12:32:00.
130
+ #
131
+ # * Start time between 15 and 63 days ago - Round down to the nearest
132
+ # 5-minute clock interval. For example, 12:32:34 is rounded down to
133
+ # 12:30:00.
134
+ #
135
+ # * Start time greater than 63 days ago - Round down to the nearest
136
+ # 1-hour clock interval. For example, 12:32:34 is rounded down to
137
+ # 12:00:00.
138
+ # @option options [required, Time,DateTime,Date,Integer,String] :end_time
139
+ # The time stamp that determines the last data point to return.
140
+ #
141
+ # The value specified is exclusive; results will include data points up
142
+ # to the specified time stamp. The time stamp must be in ISO 8601 UTC
143
+ # format (for example, 2016-10-10T23:00:00Z).
144
+ # @option options [required, Integer] :period
145
+ # The granularity, in seconds, of the returned data points. A period can
146
+ # be as short as one minute (60 seconds) and must be a multiple of 60.
147
+ # The default value is 60.
148
+ #
149
+ # If the `StartTime` parameter specifies a time stamp that is greater
150
+ # than 15 days ago, you must specify the period as follows or no data
151
+ # points in that time range is returned:
152
+ #
153
+ # * Start time between 15 and 63 days ago - Use a multiple of 300
154
+ # seconds (5 minutes).
155
+ #
156
+ # * Start time greater than 63 days ago - Use a multiple of 3600 seconds
157
+ # (1 hour).
158
+ # @option options [Array<String>] :statistics
159
+ # The metric statistics, other than percentile. For percentile
160
+ # statistics, use `ExtendedStatistic`.
161
+ # @option options [Array<String>] :extended_statistics
162
+ # The percentile statistics. Specify values between p0.0 and p100.
163
+ # @option options [String] :unit
164
+ # The unit for a given metric. Metrics may be reported in multiple
165
+ # units. Not supplying a unit results in all units being returned. If
166
+ # the metric only ever reports one unit, specifying a unit has no
167
+ # effect.
168
+ # @return [Types::GetMetricStatisticsOutput]
169
+ def get_statistics(options = {})
170
+ options = options.merge(
171
+ namespace: @namespace,
172
+ metric_name: @name
173
+ )
174
+ resp = @client.get_metric_statistics(options)
175
+ resp.data
176
+ end
177
+
178
+ # @example Request syntax with placeholder values
179
+ #
180
+ # alarm = metric.put_alarm({
181
+ # alarm_name: "AlarmName", # required
182
+ # alarm_description: "AlarmDescription",
183
+ # actions_enabled: false,
184
+ # ok_actions: ["ResourceName"],
185
+ # alarm_actions: ["ResourceName"],
186
+ # insufficient_data_actions: ["ResourceName"],
187
+ # statistic: "SampleCount", # accepts SampleCount, Average, Sum, Minimum, Maximum
188
+ # extended_statistic: "ExtendedStatistic",
189
+ # dimensions: [
190
+ # {
191
+ # name: "DimensionName", # required
192
+ # value: "DimensionValue", # required
193
+ # },
194
+ # ],
195
+ # period: 1, # required
196
+ # unit: "Seconds", # accepts Seconds, Microseconds, Milliseconds, Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes, Bits, Kilobits, Megabits, Gigabits, Terabits, Percent, Count, Bytes/Second, Kilobytes/Second, Megabytes/Second, Gigabytes/Second, Terabytes/Second, Bits/Second, Kilobits/Second, Megabits/Second, Gigabits/Second, Terabits/Second, Count/Second, None
197
+ # evaluation_periods: 1, # required
198
+ # threshold: 1.0, # required
199
+ # comparison_operator: "GreaterThanOrEqualToThreshold", # required, accepts GreaterThanOrEqualToThreshold, GreaterThanThreshold, LessThanThreshold, LessThanOrEqualToThreshold
200
+ # })
201
+ # @param [Hash] options ({})
202
+ # @option options [required, String] :alarm_name
203
+ # The name for the alarm. This name must be unique within the AWS
204
+ # account.
205
+ # @option options [String] :alarm_description
206
+ # The description for the alarm.
207
+ # @option options [Boolean] :actions_enabled
208
+ # Indicates whether actions should be executed during any changes to the
209
+ # alarm state.
210
+ # @option options [Array<String>] :ok_actions
211
+ # The actions to execute when this alarm transitions to an `OK` state
212
+ # from any other state. Each action is specified as an Amazon Resource
213
+ # Name (ARN).
214
+ #
215
+ # Valid Values: arn:aws:automate:*region*\:ec2:stop \|
216
+ # arn:aws:automate:*region*\:ec2:terminate \|
217
+ # arn:aws:automate:*region*\:ec2:recover
218
+ #
219
+ # Valid Values (for use with IAM roles):
220
+ # arn:aws:swf:us-east-1:\\\{*customer-account*\\}:action/actions/AWS\_EC2.InstanceId.Stop/1.0
221
+ # \|
222
+ # arn:aws:swf:us-east-1:\\\{*customer-account*\\}:action/actions/AWS\_EC2.InstanceId.Terminate/1.0
223
+ # \|
224
+ # arn:aws:swf:us-east-1:\\\{*customer-account*\\}:action/actions/AWS\_EC2.InstanceId.Reboot/1.0
225
+ # @option options [Array<String>] :alarm_actions
226
+ # The actions to execute when this alarm transitions to the `ALARM`
227
+ # state from any other state. Each action is specified as an Amazon
228
+ # Resource Name (ARN).
229
+ #
230
+ # Valid Values: arn:aws:automate:*region*\:ec2:stop \|
231
+ # arn:aws:automate:*region*\:ec2:terminate \|
232
+ # arn:aws:automate:*region*\:ec2:recover
233
+ #
234
+ # Valid Values (for use with IAM roles):
235
+ # arn:aws:swf:us-east-1:\\\{*customer-account*\\}:action/actions/AWS\_EC2.InstanceId.Stop/1.0
236
+ # \|
237
+ # arn:aws:swf:us-east-1:\\\{*customer-account*\\}:action/actions/AWS\_EC2.InstanceId.Terminate/1.0
238
+ # \|
239
+ # arn:aws:swf:us-east-1:\\\{*customer-account*\\}:action/actions/AWS\_EC2.InstanceId.Reboot/1.0
240
+ # @option options [Array<String>] :insufficient_data_actions
241
+ # The actions to execute when this alarm transitions to the
242
+ # `INSUFFICIENT_DATA` state from any other state. Each action is
243
+ # specified as an Amazon Resource Name (ARN).
244
+ #
245
+ # Valid Values: arn:aws:automate:*region*\:ec2:stop \|
246
+ # arn:aws:automate:*region*\:ec2:terminate \|
247
+ # arn:aws:automate:*region*\:ec2:recover
248
+ #
249
+ # Valid Values (for use with IAM roles):
250
+ # arn:aws:swf:us-east-1:\\\{*customer-account*\\}:action/actions/AWS\_EC2.InstanceId.Stop/1.0
251
+ # \|
252
+ # arn:aws:swf:us-east-1:\\\{*customer-account*\\}:action/actions/AWS\_EC2.InstanceId.Terminate/1.0
253
+ # \|
254
+ # arn:aws:swf:us-east-1:\\\{*customer-account*\\}:action/actions/AWS\_EC2.InstanceId.Reboot/1.0
255
+ # @option options [String] :statistic
256
+ # The statistic for the metric associated with the alarm, other than
257
+ # percentile. For percentile statistics, use `ExtendedStatistic`.
258
+ # @option options [String] :extended_statistic
259
+ # The percentile statistic for the metric associated with the alarm.
260
+ # Specify a value between p0.0 and p100.
261
+ # @option options [Array<Types::Dimension>] :dimensions
262
+ # The dimensions for the metric associated with the alarm.
263
+ # @option options [required, Integer] :period
264
+ # The period, in seconds, over which the specified statistic is applied.
265
+ # @option options [String] :unit
266
+ # The unit of measure for the statistic. For example, the units for the
267
+ # Amazon EC2 NetworkIn metric are Bytes because NetworkIn tracks the
268
+ # number of bytes that an instance receives on all network interfaces.
269
+ # You can also specify a unit when you create a custom metric. Units
270
+ # help provide conceptual meaning to your data. Metric data points that
271
+ # specify a unit of measure, such as Percent, are aggregated separately.
272
+ #
273
+ # If you specify a unit, you must use a unit that is appropriate for the
274
+ # metric. Otherwise, the Amazon CloudWatch alarm can get stuck in the
275
+ # `INSUFFICIENT DATA` state.
276
+ # @option options [required, Integer] :evaluation_periods
277
+ # The number of periods over which data is compared to the specified
278
+ # threshold.
279
+ # @option options [required, Float] :threshold
280
+ # The value against which the specified statistic is compared.
281
+ # @option options [required, String] :comparison_operator
282
+ # The arithmetic operation to use when comparing the specified statistic
283
+ # and threshold. The specified statistic value is used as the first
284
+ # operand.
285
+ # @return [Alarm]
286
+ def put_alarm(options = {})
287
+ options = options.merge(
288
+ namespace: @namespace,
289
+ metric_name: @name
290
+ )
291
+ resp = @client.put_metric_alarm(options)
292
+ Alarm.new(
293
+ name: options[:alarm_name],
294
+ client: @client
295
+ )
296
+ end
297
+
298
+ # @example Request syntax with placeholder values
299
+ #
300
+ # metric.put_data({
301
+ # metric_data: [ # required
302
+ # {
303
+ # metric_name: "MetricName", # required
304
+ # dimensions: [
305
+ # {
306
+ # name: "DimensionName", # required
307
+ # value: "DimensionValue", # required
308
+ # },
309
+ # ],
310
+ # timestamp: Time.now,
311
+ # value: 1.0,
312
+ # statistic_values: {
313
+ # sample_count: 1.0, # required
314
+ # sum: 1.0, # required
315
+ # minimum: 1.0, # required
316
+ # maximum: 1.0, # required
317
+ # },
318
+ # unit: "Seconds", # accepts Seconds, Microseconds, Milliseconds, Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes, Bits, Kilobits, Megabits, Gigabits, Terabits, Percent, Count, Bytes/Second, Kilobytes/Second, Megabytes/Second, Gigabytes/Second, Terabytes/Second, Bits/Second, Kilobits/Second, Megabits/Second, Gigabits/Second, Terabits/Second, Count/Second, None
319
+ # },
320
+ # ],
321
+ # })
322
+ # @param [Hash] options ({})
323
+ # @option options [required, Array<Types::MetricDatum>] :metric_data
324
+ # The data for the metric.
325
+ # @return [EmptyStructure]
326
+ def put_data(options = {})
327
+ options = Aws::Util.deep_merge(options,
328
+ namespace: @namespace,
329
+ metric_data: [{ metric_name: @name }]
330
+ )
331
+ resp = @client.put_metric_data(options)
332
+ resp.data
333
+ end
334
+
335
+ # @!group Associations
336
+
337
+ # @example Request syntax with placeholder values
338
+ #
339
+ # alarms = metric.alarms({
340
+ # statistic: "SampleCount", # accepts SampleCount, Average, Sum, Minimum, Maximum
341
+ # extended_statistic: "ExtendedStatistic",
342
+ # dimensions: [
343
+ # {
344
+ # name: "DimensionName", # required
345
+ # value: "DimensionValue", # required
346
+ # },
347
+ # ],
348
+ # period: 1,
349
+ # unit: "Seconds", # accepts Seconds, Microseconds, Milliseconds, Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes, Bits, Kilobits, Megabits, Gigabits, Terabits, Percent, Count, Bytes/Second, Kilobytes/Second, Megabytes/Second, Gigabytes/Second, Terabytes/Second, Bits/Second, Kilobits/Second, Megabits/Second, Gigabits/Second, Terabits/Second, Count/Second, None
350
+ # })
351
+ # @param [Hash] options ({})
352
+ # @option options [String] :statistic
353
+ # The statistic for the metric, other than percentiles. For percentile
354
+ # statistics, use `ExtendedStatistics`.
355
+ # @option options [String] :extended_statistic
356
+ # The percentile statistic for the metric. Specify a value between p0.0
357
+ # and p100.
358
+ # @option options [Array<Types::Dimension>] :dimensions
359
+ # The dimensions associated with the metric. If the metric has any
360
+ # associated dimensions, you must specify them in order for the call to
361
+ # succeed.
362
+ # @option options [Integer] :period
363
+ # The period, in seconds, over which the statistic is applied.
364
+ # @option options [String] :unit
365
+ # The unit for the metric.
366
+ # @return [Alarm::Collection]
367
+ def alarms(options = {})
368
+ batches = Enumerator.new do |y|
369
+ batch = []
370
+ options = options.merge(
371
+ namespace: @namespace,
372
+ metric_name: @name
373
+ )
374
+ resp = @client.describe_alarms_for_metric(options)
375
+ resp.data.metric_alarms.each do |m|
376
+ batch << Alarm.new(
377
+ name: m.alarm_name,
378
+ data: m,
379
+ client: @client
380
+ )
381
+ end
382
+ y.yield(batch)
383
+ end
384
+ Alarm::Collection.new(batches)
385
+ end
386
+
387
+ # @deprecated
388
+ # @api private
389
+ def identifiers
390
+ {
391
+ namespace: @namespace,
392
+ name: @name
393
+ }
394
+ end
395
+ deprecated(:identifiers)
396
+
397
+ private
398
+
399
+ def extract_namespace(args, options)
400
+ value = args[0] || options.delete(:namespace)
401
+ case value
402
+ when String then value
403
+ when nil then raise ArgumentError, "missing required option :namespace"
404
+ else
405
+ msg = "expected :namespace to be a String, got #{value.class}"
406
+ raise ArgumentError, msg
407
+ end
408
+ end
409
+
410
+ def extract_name(args, options)
411
+ value = args[1] || options.delete(:name)
412
+ case value
413
+ when String then value
414
+ when nil then raise ArgumentError, "missing required option :name"
415
+ else
416
+ msg = "expected :name to be a String, got #{value.class}"
417
+ raise ArgumentError, msg
418
+ end
419
+ end
420
+
421
+ class Collection < Aws::Resources::Collection; end
422
+ end
423
+ end
424
+ end
@@ -0,0 +1,123 @@
1
+ # WARNING ABOUT GENERATED CODE
2
+ #
3
+ # This file is generated. See the contributing for info on making contributions:
4
+ # https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md
5
+ #
6
+ # WARNING ABOUT GENERATED CODE
7
+
8
+ module Aws
9
+ module CloudWatch
10
+ class Resource
11
+
12
+ # @param options ({})
13
+ # @option options [Client] :client
14
+ def initialize(options = {})
15
+ @client = options[:client] || Client.new(options)
16
+ end
17
+
18
+ # @return [Client]
19
+ def client
20
+ @client
21
+ end
22
+
23
+ # @!group Associations
24
+
25
+ # @param [String] name
26
+ # @return [Alarm]
27
+ def alarm(name)
28
+ Alarm.new(
29
+ name: name,
30
+ client: @client
31
+ )
32
+ end
33
+
34
+ # @example Request syntax with placeholder values
35
+ #
36
+ # alarms = cloud_watch.alarms({
37
+ # alarm_names: ["AlarmName"],
38
+ # alarm_name_prefix: "AlarmNamePrefix",
39
+ # state_value: "OK", # accepts OK, ALARM, INSUFFICIENT_DATA
40
+ # action_prefix: "ActionPrefix",
41
+ # })
42
+ # @param [Hash] options ({})
43
+ # @option options [Array<String>] :alarm_names
44
+ # The names of the alarms.
45
+ # @option options [String] :alarm_name_prefix
46
+ # The alarm name prefix. You cannot specify `AlarmNames` if this
47
+ # parameter is specified.
48
+ # @option options [String] :state_value
49
+ # The state value to be used in matching alarms.
50
+ # @option options [String] :action_prefix
51
+ # The action name prefix.
52
+ # @return [Alarm::Collection]
53
+ def alarms(options = {})
54
+ batches = Enumerator.new do |y|
55
+ resp = @client.describe_alarms(options)
56
+ resp.each_page do |page|
57
+ batch = []
58
+ page.data.metric_alarms.each do |m|
59
+ batch << Alarm.new(
60
+ name: m.alarm_name,
61
+ data: m,
62
+ client: @client
63
+ )
64
+ end
65
+ y.yield(batch)
66
+ end
67
+ end
68
+ Alarm::Collection.new(batches)
69
+ end
70
+
71
+ # @param [String] namespace
72
+ # @param [String] name
73
+ # @return [Metric]
74
+ def metric(namespace, name)
75
+ Metric.new(
76
+ namespace: namespace,
77
+ name: name,
78
+ client: @client
79
+ )
80
+ end
81
+
82
+ # @example Request syntax with placeholder values
83
+ #
84
+ # metrics = cloud_watch.metrics({
85
+ # namespace: "Namespace",
86
+ # metric_name: "MetricName",
87
+ # dimensions: [
88
+ # {
89
+ # name: "DimensionName", # required
90
+ # value: "DimensionValue",
91
+ # },
92
+ # ],
93
+ # })
94
+ # @param [Hash] options ({})
95
+ # @option options [String] :namespace
96
+ # The namespace to filter against.
97
+ # @option options [String] :metric_name
98
+ # The name of the metric to filter against.
99
+ # @option options [Array<Types::DimensionFilter>] :dimensions
100
+ # The dimensions to filter against.
101
+ # @return [Metric::Collection]
102
+ def metrics(options = {})
103
+ batches = Enumerator.new do |y|
104
+ resp = @client.list_metrics(options)
105
+ resp.each_page do |page|
106
+ batch = []
107
+ page.data.metrics.each do |m|
108
+ batch << Metric.new(
109
+ namespace: m.namespace,
110
+ name: m.metric_name,
111
+ data: m,
112
+ client: @client
113
+ )
114
+ end
115
+ y.yield(batch)
116
+ end
117
+ end
118
+ Metric::Collection.new(batches)
119
+ end
120
+
121
+ end
122
+ end
123
+ end