示例#1
0
    def test_main_streams(self, mock_stdout, botoclient):
        client = Mock()
        botoclient.return_value = client
        awslogs = AWSLogs()

        groups = [
            {
                'logGroups': [{
                    'logGroupName': 'AAA'
                }, {
                    'logGroupName': 'BBB'
                }, {
                    'logGroupName': 'CCC'
                }]
            },
        ]

        streams = [{'logStreams': [self._stream('DDD'), self._stream('EEE')]}]

        def paginator(value):
            mock = Mock()
            mock.paginate.return_value = {
                'describe_log_groups': groups,
                'describe_log_streams': streams
            }.get(value)
            return mock

        client.get_paginator.side_effect = paginator

        main("awslogs streams AAA".split())
        self.assertEqual(mock_stdout.getvalue(), ("DDD\n" "EEE\n"))
示例#2
0
    def test_get_streams(self, botoclient):
        client = Mock()
        botoclient.return_value = client
        client.get_paginator.return_value.paginate.return_value = [
            {
                'logStreams':
                [self._stream('A'),
                 self._stream('B'),
                 self._stream('C')],
                'nextToken':
                1
            },
            {
                'logStreams':
                [self._stream('D'),
                 self._stream('E'),
                 self._stream('F')],
                'nextToken':
                2
            },
            {
                'logStreams': [self._stream('G')]
            },
        ]

        awslogs = AWSLogs(log_group_name='group')
        self.assertEqual([g for g in awslogs.get_streams()],
                         ['A', 'B', 'C', 'D', 'E', 'F', 'G'])
示例#3
0
    def test_get_streams(self, botoclient):
        client = Mock()
        botoclient.return_value = client
        client.get_paginator.return_value.paginate.return_value = [
            {
                'logStreams':
                [self._stream('AA'),
                 self._stream('AB'),
                 self._stream('AC')],
                'nextToken':
                1
            },
            {
                'logStreams':
                [self._stream('AD'),
                 self._stream('AE'),
                 self._stream('AF')],
                'nextToken':
                2
            },
            {
                'logStreams': [self._stream('AG')]
            },
        ]

        awslogs = AWSLogs()
        self.assertEqual([g for g in awslogs.get_streams('group_name')],
                         ['AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG'])
        self.assertEqual([g for g in awslogs.get_streams('group_name', 'A')],
                         ['AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG'
                          ])  # TODO test this properly
示例#4
0
    def test_parse_datetime(self, datetime_mock, botoclient):

        awslogs = AWSLogs()
        datetime_mock.utcnow.return_value = datetime(2015, 1, 1, 3, 0, 0, 0)
        datetime_mock.return_value = datetime(1970, 1, 1)

        def iso2epoch(iso_str):
            dt = datetime.strptime(iso_str, "%Y-%m-%d %H:%M:%S")
            return int(total_seconds(dt - datetime(1970, 1, 1)) * 1000)

        self.assertEqual(awslogs.parse_datetime(''), None)
        self.assertEqual(awslogs.parse_datetime(None), None)
        plan = (('2015-01-01 02:59:59',
                 '1s'), ('2015-01-01 02:59:59',
                         '1s ago'), ('2015-01-01 02:59:59', '1sec'),
                ('2015-01-01 02:59:59', '1sec ago'), ('2015-01-01 02:59:59',
                                                      '1second'),
                ('2015-01-01 02:59:59', '1second ago'), ('2015-01-01 02:59:59',
                                                         '1seconds'),
                ('2015-01-01 02:59:59',
                 '1seconds ago'), ('2015-01-01 02:59:00',
                                   '1m'), ('2015-01-01 02:59:00', '1m ago'),
                ('2015-01-01 02:59:00', '1minute'), ('2015-01-01 02:59:00',
                                                     '1minute ago'),
                ('2015-01-01 02:59:00',
                 '1minutes'), ('2015-01-01 02:59:00',
                               '1minutes ago'), ('2015-01-01 02:00:00', '1h'),
                ('2015-01-01 02:00:00',
                 '1h ago'), ('2015-01-01 02:00:00',
                             '1hour'), ('2015-01-01 02:00:00', '1hour ago'),
                ('2015-01-01 02:00:00',
                 '1hours'), ('2015-01-01 02:00:00',
                             '1hours ago'), ('2014-12-31 03:00:00', '1d'),
                ('2014-12-31 03:00:00',
                 '1d ago'), ('2014-12-31 03:00:00',
                             '1day'), ('2014-12-31 03:00:00', '1day ago'),
                ('2014-12-31 03:00:00',
                 '1days'), ('2014-12-31 03:00:00',
                            '1days ago'), ('2014-12-25 03:00:00',
                                           '1w'), ('2014-12-25 03:00:00',
                                                   '1w ago'),
                ('2014-12-25 03:00:00',
                 '1week'), ('2014-12-25 03:00:00',
                            '1week ago'), ('2014-12-25 03:00:00',
                                           '1weeks'), ('2014-12-25 03:00:00',
                                                       '1weeks ago'),
                ('2013-01-01 00:00:00',
                 '1/1/2013'), ('2012-01-01 12:34:00',
                               '1/1/2012 12:34'), ('2011-01-01 12:34:56',
                                                   '1/1/2011 12:34:56'),
                ('2016-08-31 02:23:25',
                 '2016-08-31T02:23:25.000Z'), ('2016-08-31 02:23:25',
                                               '2016-08-31 10:23:25 UTC-8'))

        for expected_iso, dateutil_time in plan:
            self.assertEqual(awslogs.parse_datetime(dateutil_time),
                             iso2epoch(expected_iso))

        self.assertRaises(UnknownDateError, awslogs.parse_datetime, '???')
示例#5
0
    def test_boto3_client_creation(self, mock_core_session):
        client = Mock()
        boto_session = Mock()
        mock_core_session.return_value = boto_session
        boto_session.create_client.return_value = client

        awslogs = AWSLogs()
        self.assertEqual(client, awslogs.client)
示例#6
0
    def test_boto3_client_invalid_region(self, mock_core_session):
        client = Mock()
        boto_session = Mock()
        mock_core_session.return_value = boto_session
        boto_session.create_client.return_value = client
        boto_session.aws_region.return_value = "Frankfurt"

        awslogs = AWSLogs()
        self.assertEqual(client, awslogs.client)
示例#7
0
    def test_get_groups_with_log_group_prefix(self, botoclient):
        client = Mock()
        botoclient.return_value = client
        client.get_paginator.return_value.paginate.return_value = [{
            'logGroups': [{
                'logGroupName': 'A'
            }]
        }]

        awslogs = AWSLogs(log_group_prefix='log_group_prefix')
        self.assertEqual([g for g in awslogs.get_groups()], ['A'])
示例#8
0
def logs():
    params = dict(request.args.items())
    params['start'] = params.get('start') or config['logs_start_default']
    params['log_stream_name'] = (params.get('log_stream_name')
                                 or config['logs_log_stream_name_default'])
    params['watch'] = params.get('watch') == 'true'
    logs = (snake_keys(log) for log in AWSLogs(**params).iter_logs())
    if params['watch']:
        return Response((json.dumps(log) + '\r\n' for log in logs),
                        mimetype='text/plain')
    else:
        return jsonify({'logs': list(logs)})
示例#9
0
 def test_get_streams_filtered_by_date(self, parse_datetime, botoclient):
     client = Mock()
     botoclient.return_value = client
     client.get_paginator.return_value.paginate.return_value = [{
         'logStreams': [
             self._stream('A', 0, 1),
             self._stream('B', 0, 6),
             self._stream('C'),
             self._stream('D', sys.maxsize - 1, sys.maxsize)
         ],
     }]
     parse_datetime.side_effect = [5, 7]
     awslogs = AWSLogs(log_group_name='group', start='5', end='7')
     self.assertEqual([g for g in awslogs.get_streams()], ['B', 'C'])
示例#10
0
    def test_get_streams_from_pattern(self, botoclient):
        client = Mock()
        botoclient.return_value = client

        side_effect = [
            {
                'logStreams': [
                    self._stream('AAA'),
                    self._stream('ABA'),
                    self._stream('ACA')
                ],
                'nextToken':
                1
            },
            {
                'logStreams': [
                    self._stream('BAA'),
                    self._stream('BBA'),
                    self._stream('BBB')
                ],
                'nextToken':
                2
            },
            {
                'logStreams': [self._stream('CAC')]
            },
        ]

        awslogs = AWSLogs()

        client.get_paginator.return_value.paginate.return_value = side_effect
        expected = ['AAA', 'ABA', 'ACA', 'BAA', 'BBA', 'BBB', 'CAC']
        actual = [s for s in awslogs._get_streams_from_pattern('X', 'ALL')]
        self.assertEqual(actual, expected)

        client.get_paginator.return_value.paginate.return_value = side_effect
        expected = ['AAA', 'ABA', 'ACA']
        actual = [s for s in awslogs._get_streams_from_pattern('X', 'A')]
        self.assertEqual(actual, expected)

        client.get_paginator.return_value.paginate.return_value = side_effect
        expected = ['AAA', 'ACA']
        actual = [s for s in awslogs._get_streams_from_pattern('X', 'A[AC]A')]
        self.assertEqual(actual, expected)
示例#11
0
    def test_main_groups(self, mock_stdout, botoclient):
        client = Mock()
        botoclient.return_value = client
        awslogs = AWSLogs()

        groups = [
            {
                'logGroups': [{
                    'logGroupName': 'AAA'
                }, {
                    'logGroupName': 'BBB'
                }, {
                    'logGroupName': 'CCC'
                }]
            },
        ]

        client.get_paginator.return_value.paginate.return_value = groups

        main("awslogs groups".split())
        self.assertEqual(mock_stdout.getvalue(), ("AAA\n" "BBB\n" "CCC\n"))
示例#12
0
    def test_get_groups(self, botoclient):
        client = Mock()
        botoclient.return_value = client
        client.get_paginator.return_value.paginate.return_value = [
            {
                'logGroups': [{
                    'logGroupName': 'A'
                }, {
                    'logGroupName': 'B'
                }, {
                    'logGroupName': 'C'
                }],
                'nextToken':
                1
            },
            {
                'logGroups': [{
                    'logGroupName': 'D'
                }, {
                    'logGroupName': 'E'
                }, {
                    'logGroupName': 'F'
                }],
                'nextToken':
                2
            },
            {
                'logGroups': [{
                    'logGroupName': 'G'
                }]
            },
        ]

        awslogs = AWSLogs()
        self.assertEqual([g for g in awslogs.get_groups()],
                         ['A', 'B', 'C', 'D', 'E', 'F', 'G'])
示例#13
0
文件: tests.py 项目: scalp42/awslogs
 def setUp(self):
     super(TestAWSLogs, self).setUp()
     self.aws = AWSLogs(connection_cls=Mock)
示例#14
0
    def test_main_get_deduplication(self, mock_stdout, botoclient):
        client = Mock()
        botoclient.return_value = client
        awslogs = AWSLogs()

        logs = [{
            'events': [{
                'eventId': 1,
                'message': 'Hello 1',
                'logStreamName': 'DDD'
            }, {
                'eventId': 2,
                'message': 'Hello 2',
                'logStreamName': 'EEE'
            }, {
                'eventId': 3,
                'message': 'Hello 3',
                'logStreamName': 'DDD'
            }],
            'nextToken':
            'token'
        }, {
            'events': [{
                'eventId': 1,
                'message': 'Hello 1',
                'logStreamName': 'DDD'
            }, {
                'eventId': 2,
                'message': 'Hello 2',
                'logStreamName': 'EEE'
            }, {
                'eventId': 3,
                'message': 'Hello 3',
                'logStreamName': 'DDD'
            }],
            'nextToken':
            'token'
        }, {
            'events': []
        }]

        groups = [
            {
                'logGroups': [{
                    'logGroupName': 'AAA'
                }, {
                    'logGroupName': 'BBB'
                }, {
                    'logGroupName': 'CCC'
                }]
            },
        ]

        streams = [{'logStreams': [self._stream('DDD'), self._stream('EEE')]}]

        def paginator(value):
            mock = Mock()
            mock.paginate.return_value = {
                'describe_log_groups': groups,
                'describe_log_streams': streams
            }.get(value)
            return mock

        client.get_paginator.side_effect = paginator
        client.filter_log_events.side_effect = logs
        main("awslogs get AAA DDD --no-color".split())

        self.assertEqual(mock_stdout.getvalue(), ("AAA DDD Hello 1\n"
                                                  "AAA EEE Hello 2\n"
                                                  "AAA DDD Hello 3\n"))
示例#15
0
def streams():
    params = dict(request.args.items())
    params['start'] = params.get('start') or config['streams_start_default']
    return jsonify({'streams': list(AWSLogs(**params).get_streams())})
示例#16
0
def groups():
    params = dict(request.args.items())
    return jsonify({'groups': list(AWSLogs(**params).get_groups())})
示例#17
0
    def test_parse_datetime(self, datetime_mock, botoclient):

        awslogs = AWSLogs()
        datetime_mock.utcnow.return_value = datetime(2015, 1, 1, 3, 0, 0, 0)
        datetime_mock.return_value = datetime(1970, 1, 1)

        def epoch(dt):
            return int(total_seconds(dt - datetime(1970, 1, 1)) * 1000)

        self.assertEqual(awslogs.parse_datetime(''), None)
        self.assertEqual(awslogs.parse_datetime(None), None)

        self.assertEqual(awslogs.parse_datetime('1m'),
                         epoch(datetime(2015, 1, 1, 2, 59, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1m ago'),
                         epoch(datetime(2015, 1, 1, 2, 59, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1minute'),
                         epoch(datetime(2015, 1, 1, 2, 59, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1minute ago'),
                         epoch(datetime(2015, 1, 1, 2, 59, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1minutes'),
                         epoch(datetime(2015, 1, 1, 2, 59, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1minutes ago'),
                         epoch(datetime(2015, 1, 1, 2, 59, 0, 0)))

        self.assertEqual(awslogs.parse_datetime('1h'),
                         epoch(datetime(2015, 1, 1, 2, 0, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1h ago'),
                         epoch(datetime(2015, 1, 1, 2, 0, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1hour'),
                         epoch(datetime(2015, 1, 1, 2, 0, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1hour ago'),
                         epoch(datetime(2015, 1, 1, 2, 0, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1hours'),
                         epoch(datetime(2015, 1, 1, 2, 0, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1hours ago'),
                         epoch(datetime(2015, 1, 1, 2, 0, 0, 0)))

        self.assertEqual(awslogs.parse_datetime('1d'),
                         epoch(datetime(2014, 12, 31, 3, 0, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1d ago'),
                         epoch(datetime(2014, 12, 31, 3, 0, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1day'),
                         epoch(datetime(2014, 12, 31, 3, 0, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1day ago'),
                         epoch(datetime(2014, 12, 31, 3, 0, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1days'),
                         epoch(datetime(2014, 12, 31, 3, 0, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1days ago'),
                         epoch(datetime(2014, 12, 31, 3, 0, 0, 0)))

        self.assertEqual(awslogs.parse_datetime('1w'),
                         epoch(datetime(2014, 12, 25, 3, 0, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1w ago'),
                         epoch(datetime(2014, 12, 25, 3, 0, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1week'),
                         epoch(datetime(2014, 12, 25, 3, 0, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1week ago'),
                         epoch(datetime(2014, 12, 25, 3, 0, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1weeks'),
                         epoch(datetime(2014, 12, 25, 3, 0, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1weeks ago'),
                         epoch(datetime(2014, 12, 25, 3, 0, 0, 0)))

        self.assertEqual(awslogs.parse_datetime('1/1/2013'),
                         epoch(datetime(2013, 1, 1, 0, 0, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1/1/2012 12:34'),
                         epoch(datetime(2012, 1, 1, 12, 34, 0, 0)))
        self.assertEqual(awslogs.parse_datetime('1/1/2011 12:34:56'),
                         epoch(datetime(2011, 1, 1, 12, 34, 56, 0)))

        self.assertRaises(UnknownDateError, awslogs.parse_datetime, '???')