Skip to content

Commit

Permalink
Merge pull request #126 from diggyk/small-api-fix
Browse files Browse the repository at this point in the history
Add ability to filter events by date range
  • Loading branch information
jathanism committed Feb 3, 2016
2 parents 85762a9 + fd03f49 commit 96ad056
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 4 deletions.
26 changes: 23 additions & 3 deletions hermes/handlers/api.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
from __future__ import division


from datetime import datetime
from dateutil import parser, tz
import json
import logging
import pytz
Expand All @@ -18,9 +21,6 @@
from ..models import Host, EventType, Event, Labor, Fate, Quest
from ..settings import settings

from datetime import datetime
from dateutil import parser


log = logging.getLogger(__name__)

Expand Down Expand Up @@ -149,6 +149,7 @@ def post(self):
else:
self.created(data={"hosts": hosts, "totalHosts": len(hosts)})

print hostnames
log.info("HOST: Created {}".format(", ".join(hostnames)))

def get(self):
Expand Down Expand Up @@ -1174,6 +1175,8 @@ def get(self):
:query string hostname: (*optional*) Filter Events by Host's hostname
:query int limit: (*optional*) Limit result to N resources.
:query int offset: (*optional*) Skip the first N resources.
:query string after: (*optional*) Only select events at and after a given timestamp
:query string before: (*optional*) Only select events before a given timestamp
:statuscode 200: The request was successful.
:statuscode 401: The request was made without being logged in.
Expand All @@ -1183,6 +1186,16 @@ def get(self):
host_id = self.get_argument("hostId", None)
hostname = self.get_argument("hostname", None)

after_time = self.get_argument("after", None)
if after_time:
after_time = parser.parse(after_time, yearfirst=True)
after_time = after_time.replace(tzinfo=None)

before_time = self.get_argument("before", None)
if before_time:
before_time = parser.parse(before_time, yearfirst=True)
before_time = before_time.replace(tzinfo=None)

events = self.session.query(Event).order_by(desc(Event.timestamp))

if event_type_id:
Expand All @@ -1203,6 +1216,13 @@ def get(self):

events = events.filter(Event.host == host)

if after_time:
logging.info(after_time)
events = events.filter(Event.timestamp >= after_time)
if before_time:
logging.info(before_time)
events = events.filter(Event.timestamp < before_time)

offset, limit, expand = self.get_pagination_values()
events, total = self.paginate_query(events, offset, limit)

Expand Down
2 changes: 1 addition & 1 deletion hermes/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "0.7.9"
__version__ = "0.7.10"
27 changes: 27 additions & 0 deletions tests/api_tests/test_events.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,3 +200,30 @@ def test_multi_host_events(sample_data1_server):
result_json = result.json()

assert result_json['totalEvents'] == 3


def test__before_after_query(sample_data1_server):
client = sample_data1_server
event2 = client.get("/events/2").json()

assert event2['timestamp'] is not None

assert_created(
client.create(
"/events",
hostname="example",
user="testman@example.com",
eventTypeId=1,
note="This is a test event"
),
"/api/v1/events/3"
)

new_event = client.get("/events/3").json()
new_timestamp = new_event['timestamp']

result = client.get("/events/?after={}".format(new_timestamp)).json()
assert result['totalEvents'] == 1

result = client.get("/events/?before={}".format(new_timestamp)).json()
assert result['totalEvents'] == 2

0 comments on commit 96ad056

Please sign in to comment.