fix: Typing, dump to json

pull/134/head
Raphaël Vinot 2020-11-24 21:01:30 +01:00
parent d77dfb1cac
commit d964549e56
2 changed files with 9 additions and 8 deletions

View File

@ -5,7 +5,6 @@ import os
import base64 import base64
from collections import defaultdict, Counter from collections import defaultdict, Counter
from datetime import datetime, date, timedelta from datetime import datetime, date, timedelta
import calendar
from email.message import EmailMessage from email.message import EmailMessage
from io import BufferedIOBase, BytesIO from io import BufferedIOBase, BytesIO
import ipaddress import ipaddress
@ -997,13 +996,13 @@ class Lookyloo():
urls.append(to_append) urls.append(to_append)
return hostnode, urls return hostnode, urls
def get_stats(self) -> Dict[str, List]: def get_stats(self) -> Dict[str, Union[List, Dict]]:
stats: Dict[int, Dict[int, Dict[str, Any]]] = {} stats: Dict[int, Dict[int, Dict[str, Any]]] = {}
today = date.today() today = date.today()
calendar_week = today.isocalendar()[1] calendar_week = today.isocalendar()[1]
weeks_stats: Dict[int, Dict] = {calendar_week - 1: {'analysis': 0, 'analysis_with_redirects': 0, 'redirects': 0, 'uniq_urls': set()}, weeks_stats: Dict[int, Dict] = {calendar_week - 1: {'analysis': 0, 'analysis_with_redirects': 0, 'redirects': 0, 'uniq_urls': set()},
calendar_week: {'analysis': 0, 'analysis_with_redirects': 0, 'redirects': 0, 'uniq_urls': set()}} calendar_week: {'analysis': 0, 'analysis_with_redirects': 0, 'redirects': 0, 'uniq_urls': set()}}
statistics: Dict[str, List] = {'weeks': [], 'years': {}} statistics: Dict[str, Union[List, Dict]] = {'weeks': [], 'years': {}}
for uuid in self.capture_uuids: for uuid in self.capture_uuids:
cache = self.capture_cache(uuid) cache = self.capture_cache(uuid)
if 'timestamp' not in cache: if 'timestamp' not in cache:
@ -1026,6 +1025,7 @@ class Lookyloo():
weeks_stats[date_analysis.isocalendar()[1]]['redirects'] += len(cache['redirects']) # type: ignore weeks_stats[date_analysis.isocalendar()[1]]['redirects'] += len(cache['redirects']) # type: ignore
weeks_stats[date_analysis.isocalendar()[1]]['uniq_urls'].update(cache['redirects']) weeks_stats[date_analysis.isocalendar()[1]]['uniq_urls'].update(cache['redirects'])
weeks_stats[date_analysis.isocalendar()[1]]['uniq_urls'].add(cache['url']) weeks_stats[date_analysis.isocalendar()[1]]['uniq_urls'].add(cache['url'])
for week_number, week_stat in weeks_stats.items(): for week_number, week_stat in weeks_stats.items():
week = {} week = {}
week['week'] = week_number week['week'] = week_number
@ -1034,9 +1034,10 @@ class Lookyloo():
week['redirects'] = week_stat['redirects'] week['redirects'] = week_stat['redirects']
week['uniq_urls'] = len(week_stat['uniq_urls']) week['uniq_urls'] = len(week_stat['uniq_urls'])
week['uniq_domains'] = len(uniq_domains(week_stat['uniq_urls'])) week['uniq_domains'] = len(uniq_domains(week_stat['uniq_urls']))
statistics['weeks'].append(week) statistics['weeks'].append(week) # type: ignore
for year, data in stats.items(): for year, data in stats.items():
years: Dict[str, Union[Dict, int]] = {} years: Dict[Union[int, str], Union[Dict, int]] = {}
yearly_analysis = 0 yearly_analysis = 0
yearly_redirects = 0 yearly_redirects = 0
for month in sorted(data.keys()): for month in sorted(data.keys()):
@ -1049,8 +1050,8 @@ class Lookyloo():
mstats['uniq_domains'] = len(uniq_domains(_stats['uniq_urls'])) mstats['uniq_domains'] = len(uniq_domains(_stats['uniq_urls']))
yearly_analysis += _stats['analysis'] yearly_analysis += _stats['analysis']
yearly_redirects += _stats['redirects'] yearly_redirects += _stats['redirects']
years[str(month)] = mstats years[month] = mstats
years['yearly_analysis'] = yearly_analysis years['yearly_analysis'] = yearly_analysis
years['yearly_redirects'] = yearly_redirects years['yearly_redirects'] = yearly_redirects
statistics['years'][str(year)] = years statistics['years'][year] = years
return statistics return statistics

View File

@ -679,4 +679,4 @@ def json_hostname_info():
@app.route('/json/stats', methods=['GET']) @app.route('/json/stats', methods=['GET'])
def json_stats(): def json_stats():
to_return = lookyloo.get_stats() to_return = lookyloo.get_stats()
return jsonify(to_return) return Response(json.dumps(to_return), mimetype='application/json')