optimize most concurrent calculation

This commit is contained in:
herby2212 2023-04-15 20:39:01 +02:00
commit 6e9fedee3b

View file

@ -861,11 +861,6 @@ class Graphs(object):
timestamp = helpers.timestamp() - time_range * 24 * 60 * 60 timestamp = helpers.timestamp() - time_range * 24 * 60 * 60
def calc_most_concurrent(result): def calc_most_concurrent(result):
'''
Function to calculate most concurrent streams
Input: Stat title, SQLite query result
Output: Dict {title, count, started, stopped}
'''
times = [] times = []
for item in result: for item in result:
times.append({'time': str(item['started']) + 'B', 'count': 1}) times.append({'time': str(item['started']) + 'B', 'count': 1})
@ -873,27 +868,19 @@ class Graphs(object):
times = sorted(times, key=lambda k: k['time']) times = sorted(times, key=lambda k: k['time'])
count = 0 count = 0
final_count = 0
last_count = 0 last_count = 0
last_start = ''
concurrent = { 'count': 0,
'started': None,
'stopped': None
}
for d in times: for d in times:
if d['count'] == 1: if d['count'] == 1:
count += d['count'] count += d['count']
if count >= last_count:
last_start = d['time']
else: else:
if count >= last_count: if count >= last_count:
last_count = count last_count = count
concurrent['count'] = count final_count = count
concurrent['started'] = last_start[:-1]
concurrent['stopped'] = d['time'][:-1]
count += d['count'] count += d['count']
return concurrent return final_count
try: try:
query = 'SELECT sh.date_played, sh.started, sh.stopped, shmi.transcode_decision ' \ query = 'SELECT sh.date_played, sh.started, sh.stopped, shmi.transcode_decision ' \
@ -930,11 +917,11 @@ class Graphs(object):
for item in grouped_result: for item in grouped_result:
if item['key'] == (date_string,'direct play'): if item['key'] == (date_string,'direct play'):
series_1_value = calc_most_concurrent(item['value'])['count'] series_1_value = calc_most_concurrent(item['value'])
elif item['key'] == (date_string,'copy'): elif item['key'] == (date_string,'copy'):
series_2_value = calc_most_concurrent(item['value'])['count'] series_2_value = calc_most_concurrent(item['value'])
elif item['key'] == (date_string,'transcode'): elif item['key'] == (date_string,'transcode'):
series_3_value = calc_most_concurrent(item['value'])['count'] series_3_value = calc_most_concurrent(item['value'])
series_1.append(series_1_value) series_1.append(series_1_value)
series_2.append(series_2_value) series_2.append(series_2_value)