Skip to content

Commit

Permalink
First python 3.4 working version
Browse files Browse the repository at this point in the history
  • Loading branch information
jorgebastida committed Jun 26, 2015
1 parent 1e38d4b commit 902c4c9
Show file tree
Hide file tree
Showing 8 changed files with 205 additions and 505 deletions.
3 changes: 2 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
language: python

python:
- "3.4"
- "3.3"
- "2.7"
- "2.6"

Expand Down
8 changes: 8 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
0.0.3
=====
* awslogs now use ``boto3`` instead of ``boto2``.
* awslogs don't longer require ``gevent``.
* massive refactoring of the internals now that ``aws`` provides ``filter_log_events`` out the box.
* awslogs don't longer support retrieving logs from several groups at the same time.
* awslogs now support python python: 2.7, 3.3 and 3.4

0.0.3
=====
* Filter streams by ``start`` and ``end`` in order to reduce the initial volume of queries #9.
Expand Down
5 changes: 2 additions & 3 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,10 @@ One of the most powerful features is to query events from several streams and co
Features
--------

* Aggregate logs from accross streams and groups.
* Aggregate logs from accross streams.

- Aggregate all streams in a group.
- Aggregate streams matching a regular expression.
- Filter both groups and streams using regular expressions.

* Colored output.
* List existing groups
Expand Down Expand Up @@ -72,7 +71,7 @@ Options

* ``awslogs groups``: List existing groups
* ``awslogs streams GROUP``: List existing streams withing ``GROUP``
* ``awslogs get [GROUP_EXPRESSION [STREAM_EXPRESSION]]``: Get logs matching ``GROUP_EXPRESSION`` and ``STREAM_EXPRESSION``
* ``awslogs get [GROUP [STREAM_EXPRESSION]]``: Get logs matching ``STREAM_EXPRESSION`` in ``GROUP``.

- Expressions can be regular expressions or the wildcard ``ALL`` if you want any and don't want to type ``.*``.

Expand Down
4 changes: 2 additions & 2 deletions awslogs/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
from core import __version__
from core import AWSLogs
from .core import __version__
from .core import AWSLogs
28 changes: 14 additions & 14 deletions awslogs/bin.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@
import boto3
from termcolor import colored

import exceptions
from core import AWSLogs
from . import exceptions
from .core import AWSLogs


__version__ = "0.0.3"


def keyboard_signal_handler(signal, frame):
print 'You pressed Ctrl+C!'
print('You pressed Ctrl+C!')
sys.exit(0)

signal.signal(signal.SIGINT, keyboard_signal_handler)
Expand All @@ -29,37 +29,37 @@ def main(argv=None):
def add_common_arguments(parser):
parser.add_argument("--aws-access-key-id",
dest="aws_access_key_id",
type=unicode,
type=str,
default=None,
help="aws access key id")

parser.add_argument("--aws-secret-access-key",
dest="aws_secret_access_key",
type=unicode,
type=str,
default=None,
help="aws secret access key")

parser.add_argument("--aws-session-token",
dest="aws_session_token",
type=unicode,
type=str,
default=None,
help="aws session token")

parser.add_argument("--aws-region",
dest="aws_region",
type=unicode,
type=str,
default=os.environ.get('AWS_REGION', None),
help="aws region")

def add_date_range_arguments(parser):
parser.add_argument("-s", "--start",
type=unicode,
type=str,
dest='start',
default='24h',
help="Start time")

parser.add_argument("-e", "--end",
type=unicode,
type=str,
dest='end',
help="End time")

Expand All @@ -72,13 +72,13 @@ def add_date_range_arguments(parser):


get_parser.add_argument("log_group_name",
type=unicode,
type=str,
default="ALL",
nargs='?',
help="log group name")

get_parser.add_argument("log_stream_name",
type=unicode,
type=str,
default="ALL",
nargs='?',
help="log stream name")
Expand Down Expand Up @@ -117,7 +117,7 @@ def add_date_range_arguments(parser):
add_date_range_arguments(streams_parser)

streams_parser.add_argument("log_group_name",
type=unicode,
type=str,
help="log group name")

# Parse input
Expand All @@ -126,7 +126,7 @@ def add_date_range_arguments(parser):
try:
logs = AWSLogs(**vars(options))
getattr(logs, options.func)()
except exceptions.BaseAWSLogsException, exc:
except exceptions.BaseAWSLogsException as exc:
sys.stderr.write(colored("{0}\n".format(exc.hint()), "red"))
return exc.code
except Exception:
Expand All @@ -135,7 +135,7 @@ def add_date_range_arguments(parser):
options = vars(options)
options['aws_access_key_id'] = 'SENSITIVE'
options['aws_secret_access_key'] = 'SENSITIVE'
options['aws_secret_access_key'] = 'SENSITIVE'
options['aws_session_token'] = 'SENSITIVE'
sys.stderr.write("\n")
sys.stderr.write("=" * 80)
sys.stderr.write("\nYou've found a bug! Please, raise an issue attaching the following traceback\n")
Expand Down
57 changes: 7 additions & 50 deletions awslogs/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,55 +6,12 @@
import boto3

from termcolor import colored
from boto import logs as botologs
from dateutil.parser import parse

import exceptions
from . import exceptions

__version__ = '0.1.0'

#NO_MORE_EVENTS = object()

#
# class AWSConnection(object):
# """Wrapper on top of boto's ``connect_to_region`` which retry api
# calls if some well-known errors occur."""
#
# def __init__(self, aws_region, *args, **kwargs):
#
# if aws_region not in (r.name for r in botologs.regions()):
# raise exceptions.InvalidRegionError(aws_region)
#
# try:
# self.connection = botologs.connect_to_region(aws_region, *args, **kwargs)
# except boto.exception.NoAuthHandlerFound, exc:
# raise exceptions.NoAuthHandlerFoundError(*exc.args)
#
# if not self.connection:
# raise exceptions.ConnectionError()
#
# def __bool__(self):
# return bool(self.connection)
#
# def __getattr__(self, name):
#
# def aws_connection_wrap(*args, **kwargs):
# while True:
# try:
# return getattr(self.connection, name)(*args, **kwargs)
# except boto.exception.JSONResponseError, exc:
# if exc.error_code == u'ThrottlingException':
# gevent.sleep(1)
# continue
# elif exc.error_code == u'AccessDeniedException':
# hint = exc.body.get('Message', 'AccessDeniedException')
# raise exceptions.AccessDeniedError(hint)
# raise
# except Exception, exc:
# raise
#
# return aws_connection_wrap


class AWSLogs(object):

Expand Down Expand Up @@ -134,17 +91,17 @@ def get_logs(self):

def list_logs(self):
for event in self.get_logs():
print event
print(event)

def list_groups(self):
"""Lists available CloudWatch logs groups"""
for group in self.get_groups():
print group
print(group)

def list_streams(self, *args, **kwargs):
def list_streams(self):
"""Lists available CloudWatch logs streams in ``log_group_name``."""
for stream in self.get_streams(*args, **kwargs):
print stream
for stream in self.get_streams():
print(stream)

def get_groups(self):
"""Returns available CloudWatch logs groups"""
Expand All @@ -164,7 +121,7 @@ def get_streams(self, log_group_name=None):
"""Returns available CloudWatch logs streams in ``log_group_name``."""
kwargs = {'logGroupName': log_group_name or self.log_group_name}
window_start = self.start or 0
window_end = self.end or sys.maxint
window_end = self.end or sys.maxsize

while True:
response = self.client.describe_log_streams(**kwargs)
Expand Down
4 changes: 2 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
install_requires = [
'boto3>=1.0.0',
'termcolor>=1.1',
'python-dateutil>=2.4.0'
'python-dateutil>=2.4.0',
'future'
]

tests_require = []
Expand All @@ -18,7 +19,6 @@
if sys.version_info < (3, 3):
tests_require.append('mock>=1.0')


setup(
name='awslogs',
version='0.1.0',
Expand Down
Loading

0 comments on commit 902c4c9

Please sign in to comment.