Mercurial > repos > guerler > springsuite
comparison planemo/lib/python3.7/site-packages/boto/logs/layer1.py @ 0:d30785e31577 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author | guerler |
---|---|
date | Fri, 31 Jul 2020 00:18:57 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:d30785e31577 |
---|---|
1 # Copyright (c) 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved | |
2 # | |
3 # Permission is hereby granted, free of charge, to any person obtaining a | |
4 # copy of this software and associated documentation files (the | |
5 # "Software"), to deal in the Software without restriction, including | |
6 # without limitation the rights to use, copy, modify, merge, publish, dis- | |
7 # tribute, sublicense, and/or sell copies of the Software, and to permit | |
8 # persons to whom the Software is furnished to do so, subject to the fol- | |
9 # lowing conditions: | |
10 # | |
11 # The above copyright notice and this permission notice shall be included | |
12 # in all copies or substantial portions of the Software. | |
13 # | |
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | |
15 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- | |
16 # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT | |
17 # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |
18 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
19 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | |
20 # IN THE SOFTWARE. | |
21 # | |
22 | |
23 import boto | |
24 from boto.connection import AWSQueryConnection | |
25 from boto.regioninfo import RegionInfo | |
26 from boto.exception import JSONResponseError | |
27 from boto.logs import exceptions | |
28 from boto.compat import json | |
29 | |
30 | |
31 class CloudWatchLogsConnection(AWSQueryConnection): | |
32 """ | |
33 Amazon CloudWatch Logs Service API Reference | |
34 This is the Amazon CloudWatch Logs API Reference . Amazon | |
35 CloudWatch Logs is a managed service for real time monitoring and | |
36 archival of application logs. This guide provides detailed | |
37 information about Amazon CloudWatch Logs actions, data types, | |
38 parameters, and errors. For detailed information about Amazon | |
39 CloudWatch Logs features and their associated API calls, go to the | |
40 `Amazon CloudWatch Logs Developer Guide`_. | |
41 | |
42 Use the following links to get started using the Amazon CloudWatch | |
43 API Reference : | |
44 | |
45 | |
46 + `Actions`_: An alphabetical list of all Amazon CloudWatch Logs | |
47 actions. | |
48 + `Data Types`_: An alphabetical list of all Amazon CloudWatch | |
49 Logs data types. | |
50 + `Common Parameters`_: Parameters that all Query actions can use. | |
51 + `Common Errors`_: Client and server errors that all actions can | |
52 return. | |
53 + `Regions and Endpoints`_: Itemized regions and endpoints for all | |
54 AWS products. | |
55 | |
56 | |
57 In addition to using the Amazon CloudWatch Logs API, you can also | |
58 use the following SDKs and third-party libraries to access Amazon | |
59 CloudWatch Logs programmatically. | |
60 | |
61 | |
62 + `AWS SDK for Java Documentation`_ | |
63 + `AWS SDK for .NET Documentation`_ | |
64 + `AWS SDK for PHP Documentation`_ | |
65 + `AWS SDK for Ruby Documentation`_ | |
66 | |
67 | |
68 Developers in the AWS developer community also provide their own | |
69 libraries, which you can find at the following AWS developer | |
70 centers: | |
71 | |
72 | |
73 + `AWS Java Developer Center`_ | |
74 + `AWS PHP Developer Center`_ | |
75 + `AWS Python Developer Center`_ | |
76 + `AWS Ruby Developer Center`_ | |
77 + `AWS Windows and .NET Developer Center`_ | |
78 """ | |
79 APIVersion = "2014-03-28" | |
80 DefaultRegionName = "us-east-1" | |
81 DefaultRegionEndpoint = "logs.us-east-1.amazonaws.com" | |
82 ServiceName = "CloudWatchLogs" | |
83 TargetPrefix = "Logs_20140328" | |
84 ResponseError = JSONResponseError | |
85 | |
86 _faults = { | |
87 "LimitExceededException": exceptions.LimitExceededException, | |
88 "DataAlreadyAcceptedException": exceptions.DataAlreadyAcceptedException, | |
89 "ResourceInUseException": exceptions.ResourceInUseException, | |
90 "ServiceUnavailableException": exceptions.ServiceUnavailableException, | |
91 "InvalidParameterException": exceptions.InvalidParameterException, | |
92 "ResourceNotFoundException": exceptions.ResourceNotFoundException, | |
93 "ResourceAlreadyExistsException": exceptions.ResourceAlreadyExistsException, | |
94 "OperationAbortedException": exceptions.OperationAbortedException, | |
95 "InvalidSequenceTokenException": exceptions.InvalidSequenceTokenException, | |
96 } | |
97 | |
98 def __init__(self, **kwargs): | |
99 region = kwargs.pop('region', None) | |
100 if not region: | |
101 region = RegionInfo(self, self.DefaultRegionName, | |
102 self.DefaultRegionEndpoint) | |
103 | |
104 if 'host' not in kwargs or kwargs['host'] is None: | |
105 kwargs['host'] = region.endpoint | |
106 | |
107 super(CloudWatchLogsConnection, self).__init__(**kwargs) | |
108 self.region = region | |
109 | |
110 def _required_auth_capability(self): | |
111 return ['hmac-v4'] | |
112 | |
113 def create_log_group(self, log_group_name): | |
114 """ | |
115 Creates a new log group with the specified name. The name of | |
116 the log group must be unique within a region for an AWS | |
117 account. You can create up to 100 log groups per account. | |
118 | |
119 You must use the following guidelines when naming a log group: | |
120 | |
121 + Log group names can be between 1 and 512 characters long. | |
122 + Allowed characters are az, AZ, 09, '_' (underscore), '-' | |
123 (hyphen), '/' (forward slash), and '.' (period). | |
124 | |
125 | |
126 | |
127 Log groups are created with a default retention of 14 days. | |
128 The retention attribute allow you to configure the number of | |
129 days you want to retain log events in the specified log group. | |
130 See the `SetRetention` operation on how to modify the | |
131 retention of your log groups. | |
132 | |
133 :type log_group_name: string | |
134 :param log_group_name: | |
135 | |
136 """ | |
137 params = {'logGroupName': log_group_name, } | |
138 return self.make_request(action='CreateLogGroup', | |
139 body=json.dumps(params)) | |
140 | |
141 def create_log_stream(self, log_group_name, log_stream_name): | |
142 """ | |
143 Creates a new log stream in the specified log group. The name | |
144 of the log stream must be unique within the log group. There | |
145 is no limit on the number of log streams that can exist in a | |
146 log group. | |
147 | |
148 You must use the following guidelines when naming a log | |
149 stream: | |
150 | |
151 + Log stream names can be between 1 and 512 characters long. | |
152 + The ':' colon character is not allowed. | |
153 | |
154 :type log_group_name: string | |
155 :param log_group_name: | |
156 | |
157 :type log_stream_name: string | |
158 :param log_stream_name: | |
159 | |
160 """ | |
161 params = { | |
162 'logGroupName': log_group_name, | |
163 'logStreamName': log_stream_name, | |
164 } | |
165 return self.make_request(action='CreateLogStream', | |
166 body=json.dumps(params)) | |
167 | |
168 def delete_log_group(self, log_group_name): | |
169 """ | |
170 Deletes the log group with the specified name. Amazon | |
171 CloudWatch Logs will delete a log group only if there are no | |
172 log streams and no metric filters associated with the log | |
173 group. If this condition is not satisfied, the request will | |
174 fail and the log group will not be deleted. | |
175 | |
176 :type log_group_name: string | |
177 :param log_group_name: | |
178 | |
179 """ | |
180 params = {'logGroupName': log_group_name, } | |
181 return self.make_request(action='DeleteLogGroup', | |
182 body=json.dumps(params)) | |
183 | |
184 def delete_log_stream(self, log_group_name, log_stream_name): | |
185 """ | |
186 Deletes a log stream and permanently deletes all the archived | |
187 log events associated with it. | |
188 | |
189 :type log_group_name: string | |
190 :param log_group_name: | |
191 | |
192 :type log_stream_name: string | |
193 :param log_stream_name: | |
194 | |
195 """ | |
196 params = { | |
197 'logGroupName': log_group_name, | |
198 'logStreamName': log_stream_name, | |
199 } | |
200 return self.make_request(action='DeleteLogStream', | |
201 body=json.dumps(params)) | |
202 | |
203 def delete_metric_filter(self, log_group_name, filter_name): | |
204 """ | |
205 Deletes a metric filter associated with the specified log | |
206 group. | |
207 | |
208 :type log_group_name: string | |
209 :param log_group_name: | |
210 | |
211 :type filter_name: string | |
212 :param filter_name: The name of the metric filter. | |
213 | |
214 """ | |
215 params = { | |
216 'logGroupName': log_group_name, | |
217 'filterName': filter_name, | |
218 } | |
219 return self.make_request(action='DeleteMetricFilter', | |
220 body=json.dumps(params)) | |
221 | |
222 def delete_retention_policy(self, log_group_name): | |
223 """ | |
224 | |
225 | |
226 :type log_group_name: string | |
227 :param log_group_name: | |
228 | |
229 """ | |
230 params = {'logGroupName': log_group_name, } | |
231 return self.make_request(action='DeleteRetentionPolicy', | |
232 body=json.dumps(params)) | |
233 | |
234 def describe_log_groups(self, log_group_name_prefix=None, | |
235 next_token=None, limit=None): | |
236 """ | |
237 Returns all the log groups that are associated with the AWS | |
238 account making the request. The list returned in the response | |
239 is ASCII-sorted by log group name. | |
240 | |
241 By default, this operation returns up to 50 log groups. If | |
242 there are more log groups to list, the response would contain | |
243 a `nextToken` value in the response body. You can also limit | |
244 the number of log groups returned in the response by | |
245 specifying the `limit` parameter in the request. | |
246 | |
247 :type log_group_name_prefix: string | |
248 :param log_group_name_prefix: | |
249 | |
250 :type next_token: string | |
251 :param next_token: A string token used for pagination that points to | |
252 the next page of results. It must be a value obtained from the | |
253 response of the previous `DescribeLogGroups` request. | |
254 | |
255 :type limit: integer | |
256 :param limit: The maximum number of items returned in the response. If | |
257 you don't specify a value, the request would return up to 50 items. | |
258 | |
259 """ | |
260 params = {} | |
261 if log_group_name_prefix is not None: | |
262 params['logGroupNamePrefix'] = log_group_name_prefix | |
263 if next_token is not None: | |
264 params['nextToken'] = next_token | |
265 if limit is not None: | |
266 params['limit'] = limit | |
267 return self.make_request(action='DescribeLogGroups', | |
268 body=json.dumps(params)) | |
269 | |
270 def describe_log_streams(self, log_group_name, | |
271 log_stream_name_prefix=None, next_token=None, | |
272 limit=None): | |
273 """ | |
274 Returns all the log streams that are associated with the | |
275 specified log group. The list returned in the response is | |
276 ASCII-sorted by log stream name. | |
277 | |
278 By default, this operation returns up to 50 log streams. If | |
279 there are more log streams to list, the response would contain | |
280 a `nextToken` value in the response body. You can also limit | |
281 the number of log streams returned in the response by | |
282 specifying the `limit` parameter in the request. | |
283 | |
284 :type log_group_name: string | |
285 :param log_group_name: | |
286 | |
287 :type log_stream_name_prefix: string | |
288 :param log_stream_name_prefix: | |
289 | |
290 :type next_token: string | |
291 :param next_token: A string token used for pagination that points to | |
292 the next page of results. It must be a value obtained from the | |
293 response of the previous `DescribeLogStreams` request. | |
294 | |
295 :type limit: integer | |
296 :param limit: The maximum number of items returned in the response. If | |
297 you don't specify a value, the request would return up to 50 items. | |
298 | |
299 """ | |
300 params = {'logGroupName': log_group_name, } | |
301 if log_stream_name_prefix is not None: | |
302 params['logStreamNamePrefix'] = log_stream_name_prefix | |
303 if next_token is not None: | |
304 params['nextToken'] = next_token | |
305 if limit is not None: | |
306 params['limit'] = limit | |
307 return self.make_request(action='DescribeLogStreams', | |
308 body=json.dumps(params)) | |
309 | |
310 def describe_metric_filters(self, log_group_name, | |
311 filter_name_prefix=None, next_token=None, | |
312 limit=None): | |
313 """ | |
314 Returns all the metrics filters associated with the specified | |
315 log group. The list returned in the response is ASCII-sorted | |
316 by filter name. | |
317 | |
318 By default, this operation returns up to 50 metric filters. If | |
319 there are more metric filters to list, the response would | |
320 contain a `nextToken` value in the response body. You can also | |
321 limit the number of metric filters returned in the response by | |
322 specifying the `limit` parameter in the request. | |
323 | |
324 :type log_group_name: string | |
325 :param log_group_name: | |
326 | |
327 :type filter_name_prefix: string | |
328 :param filter_name_prefix: The name of the metric filter. | |
329 | |
330 :type next_token: string | |
331 :param next_token: A string token used for pagination that points to | |
332 the next page of results. It must be a value obtained from the | |
333 response of the previous `DescribeMetricFilters` request. | |
334 | |
335 :type limit: integer | |
336 :param limit: The maximum number of items returned in the response. If | |
337 you don't specify a value, the request would return up to 50 items. | |
338 | |
339 """ | |
340 params = {'logGroupName': log_group_name, } | |
341 if filter_name_prefix is not None: | |
342 params['filterNamePrefix'] = filter_name_prefix | |
343 if next_token is not None: | |
344 params['nextToken'] = next_token | |
345 if limit is not None: | |
346 params['limit'] = limit | |
347 return self.make_request(action='DescribeMetricFilters', | |
348 body=json.dumps(params)) | |
349 | |
350 def get_log_events(self, log_group_name, log_stream_name, | |
351 start_time=None, end_time=None, next_token=None, | |
352 limit=None, start_from_head=None): | |
353 """ | |
354 Retrieves log events from the specified log stream. You can | |
355 provide an optional time range to filter the results on the | |
356 event `timestamp`. | |
357 | |
358 By default, this operation returns as much log events as can | |
359 fit in a response size of 1MB, up to 10,000 log events. The | |
360 response will always include a `nextForwardToken` and a | |
361 `nextBackwardToken` in the response body. You can use any of | |
362 these tokens in subsequent `GetLogEvents` requests to paginate | |
363 through events in either forward or backward direction. You | |
364 can also limit the number of log events returned in the | |
365 response by specifying the `limit` parameter in the request. | |
366 | |
367 :type log_group_name: string | |
368 :param log_group_name: | |
369 | |
370 :type log_stream_name: string | |
371 :param log_stream_name: | |
372 | |
373 :type start_time: long | |
374 :param start_time: A point in time expressed as the number milliseconds | |
375 since Jan 1, 1970 00:00:00 UTC. | |
376 | |
377 :type end_time: long | |
378 :param end_time: A point in time expressed as the number milliseconds | |
379 since Jan 1, 1970 00:00:00 UTC. | |
380 | |
381 :type next_token: string | |
382 :param next_token: A string token used for pagination that points to | |
383 the next page of results. It must be a value obtained from the | |
384 `nextForwardToken` or `nextBackwardToken` fields in the response of | |
385 the previous `GetLogEvents` request. | |
386 | |
387 :type limit: integer | |
388 :param limit: The maximum number of log events returned in the | |
389 response. If you don't specify a value, the request would return as | |
390 much log events as can fit in a response size of 1MB, up to 10,000 | |
391 log events. | |
392 | |
393 :type start_from_head: boolean | |
394 :param start_from_head: | |
395 | |
396 """ | |
397 params = { | |
398 'logGroupName': log_group_name, | |
399 'logStreamName': log_stream_name, | |
400 } | |
401 if start_time is not None: | |
402 params['startTime'] = start_time | |
403 if end_time is not None: | |
404 params['endTime'] = end_time | |
405 if next_token is not None: | |
406 params['nextToken'] = next_token | |
407 if limit is not None: | |
408 params['limit'] = limit | |
409 if start_from_head is not None: | |
410 params['startFromHead'] = start_from_head | |
411 return self.make_request(action='GetLogEvents', | |
412 body=json.dumps(params)) | |
413 | |
414 def put_log_events(self, log_group_name, log_stream_name, log_events, | |
415 sequence_token=None): | |
416 """ | |
417 Uploads a batch of log events to the specified log stream. | |
418 | |
419 Every PutLogEvents request must include the `sequenceToken` | |
420 obtained from the response of the previous request. An upload | |
421 in a newly created log stream does not require a | |
422 `sequenceToken`. | |
423 | |
424 The batch of events must satisfy the following constraints: | |
425 | |
426 + The maximum batch size is 32,768 bytes, and this size is | |
427 calculated as the sum of all event messages in UTF-8, plus 26 | |
428 bytes for each log event. | |
429 + None of the log events in the batch can be more than 2 hours | |
430 in the future. | |
431 + None of the log events in the batch can be older than 14 | |
432 days or the retention period of the log group. | |
433 + The log events in the batch must be in chronological ordered | |
434 by their `timestamp`. | |
435 + The maximum number of log events in a batch is 1,000. | |
436 | |
437 :type log_group_name: string | |
438 :param log_group_name: | |
439 | |
440 :type log_stream_name: string | |
441 :param log_stream_name: | |
442 | |
443 :type log_events: list | |
444 :param log_events: A list of events belonging to a log stream. | |
445 | |
446 :type sequence_token: string | |
447 :param sequence_token: A string token that must be obtained from the | |
448 response of the previous `PutLogEvents` request. | |
449 | |
450 """ | |
451 params = { | |
452 'logGroupName': log_group_name, | |
453 'logStreamName': log_stream_name, | |
454 'logEvents': log_events, | |
455 } | |
456 if sequence_token is not None: | |
457 params['sequenceToken'] = sequence_token | |
458 return self.make_request(action='PutLogEvents', | |
459 body=json.dumps(params)) | |
460 | |
461 def put_metric_filter(self, log_group_name, filter_name, filter_pattern, | |
462 metric_transformations): | |
463 """ | |
464 Creates or updates a metric filter and associates it with the | |
465 specified log group. Metric filters allow you to configure | |
466 rules to extract metric data from log events ingested through | |
467 `PutLogEvents` requests. | |
468 | |
469 :type log_group_name: string | |
470 :param log_group_name: | |
471 | |
472 :type filter_name: string | |
473 :param filter_name: The name of the metric filter. | |
474 | |
475 :type filter_pattern: string | |
476 :param filter_pattern: | |
477 | |
478 :type metric_transformations: list | |
479 :param metric_transformations: | |
480 | |
481 """ | |
482 params = { | |
483 'logGroupName': log_group_name, | |
484 'filterName': filter_name, | |
485 'filterPattern': filter_pattern, | |
486 'metricTransformations': metric_transformations, | |
487 } | |
488 return self.make_request(action='PutMetricFilter', | |
489 body=json.dumps(params)) | |
490 | |
491 def put_retention_policy(self, log_group_name, retention_in_days): | |
492 """ | |
493 | |
494 | |
495 :type log_group_name: string | |
496 :param log_group_name: | |
497 | |
498 :type retention_in_days: integer | |
499 :param retention_in_days: Specifies the number of days you want to | |
500 retain log events in the specified log group. Possible values are: | |
501 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 547, 730. | |
502 | |
503 """ | |
504 params = { | |
505 'logGroupName': log_group_name, | |
506 'retentionInDays': retention_in_days, | |
507 } | |
508 return self.make_request(action='PutRetentionPolicy', | |
509 body=json.dumps(params)) | |
510 | |
511 def set_retention(self, log_group_name, retention_in_days): | |
512 """ | |
513 Sets the retention of the specified log group. Log groups are | |
514 created with a default retention of 14 days. The retention | |
515 attribute allow you to configure the number of days you want | |
516 to retain log events in the specified log group. | |
517 | |
518 :type log_group_name: string | |
519 :param log_group_name: | |
520 | |
521 :type retention_in_days: integer | |
522 :param retention_in_days: Specifies the number of days you want to | |
523 retain log events in the specified log group. Possible values are: | |
524 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 547, 730. | |
525 | |
526 """ | |
527 params = { | |
528 'logGroupName': log_group_name, | |
529 'retentionInDays': retention_in_days, | |
530 } | |
531 return self.make_request(action='SetRetention', | |
532 body=json.dumps(params)) | |
533 | |
534 def test_metric_filter(self, filter_pattern, log_event_messages): | |
535 """ | |
536 Tests the filter pattern of a metric filter against a sample | |
537 of log event messages. You can use this operation to validate | |
538 the correctness of a metric filter pattern. | |
539 | |
540 :type filter_pattern: string | |
541 :param filter_pattern: | |
542 | |
543 :type log_event_messages: list | |
544 :param log_event_messages: | |
545 | |
546 """ | |
547 params = { | |
548 'filterPattern': filter_pattern, | |
549 'logEventMessages': log_event_messages, | |
550 } | |
551 return self.make_request(action='TestMetricFilter', | |
552 body=json.dumps(params)) | |
553 | |
554 def make_request(self, action, body): | |
555 headers = { | |
556 'X-Amz-Target': '%s.%s' % (self.TargetPrefix, action), | |
557 'Host': self.region.endpoint, | |
558 'Content-Type': 'application/x-amz-json-1.1', | |
559 'Content-Length': str(len(body)), | |
560 } | |
561 http_request = self.build_base_http_request( | |
562 method='POST', path='/', auth_path='/', params={}, | |
563 headers=headers, data=body) | |
564 response = self._mexe(http_request, sender=None, | |
565 override_num_retries=10) | |
566 response_body = response.read().decode('utf-8') | |
567 boto.log.debug(response_body) | |
568 if response.status == 200: | |
569 if response_body: | |
570 return json.loads(response_body) | |
571 else: | |
572 json_body = json.loads(response_body) | |
573 fault_name = json_body.get('__type', None) | |
574 exception_class = self._faults.get(fault_name, self.ResponseError) | |
575 raise exception_class(response.status, response.reason, | |
576 body=json_body) |