Skip to content
Snippets Groups Projects
Commit 72d32a5d authored by David Trattnig's avatar David Trattnig
Browse files

Filter playlogs by range.

parent 055c113a
No related branches found
No related tags found
No related merge requests found
......@@ -86,14 +86,19 @@ class PlayLog(db.Model):
@staticmethod
def paginate(page, page_size, since_time=None):
def paginate(page, page_size, from_time=None, to_time=None, skip_synced=False):
"""
Returns a list of entries for a given page and an start time (optional).
"""
def q(page=0, page_size=None):
query = db.session.query(PlayLog).order_by(PlayLog.track_start.desc())
if isinstance(since_time, datetime.datetime):
query = query.filter(PlayLog.track_start >= since_time)
if isinstance(from_time, datetime.datetime):
if isinstance(from_time, datetime.datetime):
query = query.filter(PlayLog.track_start >= from_time and PlayLog.track_start < to_time)
else:
query = query.filter(PlayLog.track_start >= from_time)
if skip_synced == True:
query = query.filter(PlayLog.is_synced == False)
listen(query, 'before_compile', apply_limit(page, page_size), retval=True)
return query
......@@ -231,7 +236,7 @@ class HealthHistory(db.Model):
log_source = Column(Integer) # The source the history entry relates to
is_healthy = Column(Boolean) # Indicates if source is "healthy enough" to be used for play-out
is_synced = Column(Boolean) # Only relevant for main nodes, in a multi-node setup
health_info = Column(String(2048)) # Stringified JSON object, or other, if needed
health_info = Column(String(2048)) # Stringified JSON object or other, if needed
def __init__(self, source_number, is_healthy, health_info):
......
import connexion
import six
import datetime
from dateutil.parser import parse
from flask import current_app
from src.rest.models.clock_info import ClockInfo # noqa: E501
......@@ -77,7 +77,7 @@ def get_source_health(number): # noqa: E501
return service.get_source_health(number)
def list_playlog(date_time, page=None, limit=None, skip_synced=None): # noqa: E501
def list_playlog(from_date=None, to_dat=None, page=None, limit=None, skip_synced=None): # noqa: E501
"""List tracks in the play-log since the given timestamp
Get paginated playlog entries for since the given timestamp. # noqa: E501
......@@ -94,8 +94,9 @@ def list_playlog(date_time, page=None, limit=None, skip_synced=None): # noqa: E
:rtype: List[PlayLog]
"""
service = current_app.config['SERVICE']
date_time = parse(date_time)
return service.list_playlog(page, limit, date_time)
from_date = parse(from_date)
to_date = parse(to_date)
return service.list_playlog(page, limit, from_date, to_date, skip_synced)
def log_source_health(body, number): # noqa: E501
......
......@@ -137,7 +137,7 @@ paths:
schema:
$ref: '#/components/schemas/inline_response_400'
x-openapi-router-controller: src.rest.controllers.internal_controller
/playlog/since/{date_time}:
/playlog:
get:
tags:
- internal
......@@ -146,14 +146,24 @@ paths:
Get paginated playlog entries for since the given timestamp.
operationId: list_playlog
parameters:
- name: date_time
in: path
description: Get entries after this timestamp (e.g. '2020-08-29T09:12:33.001Z')
- name: from
in: query
description: Get entries after this timestamp
required: true
style: simple
explode: false
style: form
explode: true
schema:
type: string
example: 2020-08-29T09:12:33.001Z
- name: to
in: query
description: Get entries before this timestamp
required: true
style: form
explode: true
schema:
type: string
example: 2020-11-29T09:12:33.001Z
- name: page
in: query
description: The number of items to skip before starting to collect the result
......
......@@ -75,7 +75,7 @@ class TestInternalController(BaseTestCase):
Report for one month
"""
response = self.client.open(
'/api/v1/playlog/report/{year_month}'.format(year_month='year_month_example'),
'/api/v1/playlog/report/{year_month}'.format(year_month='2020_02'),
method='GET')
self.assert200(response,
'Response body is : ' + response.data.decode('utf-8'))
......@@ -98,9 +98,11 @@ class TestInternalController(BaseTestCase):
"""
query_string = [('page', 56),
('limit', 200),
('skip_synced', true)]
('skip_synced', true),
('from', '2020-08-15T15:40:44'),
('to', '2020-10-15T15:40:44'))]
response = self.client.open(
'/api/v1/playlog/since/{date_time}'.format(date_time='date_time_example'),
'/api/v1/playlog/',
method='GET',
query_string=query_string)
self.assert200(response,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment