diff --git a/atmosphere/api/ingress.py b/atmosphere/api/ingress.py index a369d84..30809b6 100644 --- a/atmosphere/api/ingress.py +++ b/atmosphere/api/ingress.py @@ -48,7 +48,9 @@ def event(): try: models.Resource.get_or_create(event_data) - except (exceptions.EventTooOld, exceptions.IgnoredEvent): - return '', 202 + except exceptions.EventTooOld: + return 'Event Too Old', 202 + except exceptions.IgnoredEvent: + return 'Ignored Event', 202 return '', 204 diff --git a/atmosphere/api/usage.py b/atmosphere/api/usage.py index 103815a..df89c92 100644 --- a/atmosphere/api/usage.py +++ b/atmosphere/api/usage.py @@ -15,7 +15,7 @@ """Usage API.""" import os -from datetime import datetime +import dateutil.parser from flask import abort from flask import Blueprint @@ -65,8 +65,8 @@ def list_resources(): project_id = request.args['project_id'] try: - start = datetime.fromisoformat(request.args['start']) - end = datetime.fromisoformat(request.args['end']) + start = dateutil.parser.isoparse(request.args['start']) + end = dateutil.parser.isoparse(request.args['end']) except (KeyError, ValueError): abort(400) diff --git a/atmosphere/models.py b/atmosphere/models.py index ffca1dc..9cfe581 100644 --- a/atmosphere/models.py +++ b/atmosphere/models.py @@ -31,7 +31,11 @@ from sqlalchemy import or_ from atmosphere import exceptions -db = SQLAlchemy() +session_options = { + 'autocommit': False +} + +db = SQLAlchemy(session_options=session_options) migrate = Migrate() @@ -180,7 +184,8 @@ class Resource(db.Model, GetOrCreateMixin): # No existing period, start our first period. if len(resource.periods) == 0: resource.periods.append(Period( - started_at=event['traits']['created_at'], + started_at=event['traits'].get('created_at') or + event['traits'].get('launched_at'), spec=spec )) @@ -246,6 +251,12 @@ class Instance(Resource): if vm_state_is_deleted and no_deleted_at: return True + # Check if event is missing both created_at and launched_at traits + no_created_at = ('created_at' not in event['traits']) + no_launched_at = ('launched_at' not in event['traits']) + if no_created_at and no_launched_at: + return True + return False