168 lines
6.4 KiB
Python
168 lines
6.4 KiB
Python
from .config import _state, _access_log, DbType
|
|
from .renderer import _base, _card, _page_css, _page_js, _tmpl
|
|
from .queries.db import e as _e, query as _query
|
|
from .queries import processes as q_processes
|
|
from .queries import pec as q_pec
|
|
from .queries import logs as q_logs
|
|
from .queries import report as q_report
|
|
from .queries import documenti as q_documenti
|
|
from .queries import iscrizioni as q_iscrizioni
|
|
from .queries import email as q_email
|
|
|
|
|
|
def _load_data(db_path: str) -> dict:
|
|
db_type = _state.get('db_type', 'unknown')
|
|
if db_type == DbType.INTRAZ:
|
|
middle_stats = {**q_iscrizioni.get_stats(db_path), **q_email.get_stats(db_path)}
|
|
else:
|
|
middle_stats = q_pec.get_stats(db_path)
|
|
stats = {
|
|
**q_processes.get_stats(db_path),
|
|
**middle_stats,
|
|
**q_logs.get_stats(db_path),
|
|
}
|
|
return {
|
|
'processes': q_processes.get_processes(db_path),
|
|
'pec': [] if db_type == DbType.INTRAZ else q_pec.get_pec(db_path),
|
|
'logs': q_logs.get_logs(db_path),
|
|
'stats': stats,
|
|
}
|
|
|
|
|
|
def _page_dashboard(db_path: str) -> str:
|
|
s = _load_data(db_path)['stats']
|
|
db_type = _state.get('db_type', 'unknown')
|
|
|
|
cards_runs = (
|
|
_card("Run totali", s['total_runs'])
|
|
+ _card("Completati", s['completed_runs'], '#16a34a')
|
|
+ _card("Incompleti", s['total_runs'] - s['completed_runs'], '#dc2626')
|
|
)
|
|
cards_logs = (
|
|
_card("Errori", s['log_errors'], '#dc2626')
|
|
+ _card("Warning", s['log_warnings'], '#d97706')
|
|
)
|
|
|
|
if db_type == DbType.INTRAZ:
|
|
cards_middle = (
|
|
_card("Corsi totali", s.get('isc_total', 0))
|
|
+ _card("Completati", s.get('isc_ok', 0), '#16a34a')
|
|
+ _card("Con errore", s.get('isc_errore', 0), '#dc2626')
|
|
+ _card("In corso", s.get('isc_pending', 0), '#d97706')
|
|
)
|
|
cards_email = (
|
|
_card("Email totali", s.get('email_total', 0))
|
|
+ _card("Inviate", s.get('email_inviata', 0), '#16a34a')
|
|
+ _card("Pending", s.get('email_pending', 0), '#d97706')
|
|
+ _card("Errori", s.get('email_errore', 0), '#dc2626')
|
|
)
|
|
section_middle = (
|
|
'<section>'
|
|
'<h2><a href="/iscrizioni" class="sec-link">📋 Corsi Intraziendali</a></h2>'
|
|
f'<div class="grid">{cards_middle}</div>'
|
|
'</section>'
|
|
'<section>'
|
|
'<h2><a href="/email" class="sec-link">✉ Email</a></h2>'
|
|
f'<div class="grid">{cards_email}</div>'
|
|
'</section>'
|
|
)
|
|
else:
|
|
cards_middle = (
|
|
_card("PEC totali", s.get('total_pec', 0))
|
|
+ _card("Inviate", s.get('pec_inviato', 0), '#16a34a')
|
|
+ _card("Pending", s.get('pec_pending', 0), '#d97706')
|
|
+ _card("Errori", s.get('pec_errore', 0), '#dc2626')
|
|
)
|
|
section_middle = (
|
|
'<section>'
|
|
'<h2><a href="/pec" class="sec-link">✉ Comunicazioni PEC</a></h2>'
|
|
f'<div class="grid">{cards_middle}</div>'
|
|
'</section>'
|
|
)
|
|
|
|
content = _tmpl('dashboard.html').substitute(
|
|
cards_runs=cards_runs, section_middle=section_middle, cards_logs=cards_logs
|
|
)
|
|
return _base('Dashboard', content, 'nav_dashboard', db_path, _page_css('dashboard'), _page_js('dashboard'))
|
|
|
|
|
|
def _page_runs(db_path: str) -> str:
|
|
content = _tmpl('runs.html').substitute(
|
|
tbl_processes=q_processes.render_table(q_processes.get_processes(db_path))
|
|
)
|
|
return _base('Processi', content, 'nav_runs', db_path, _page_css('runs'), _page_js('runs'))
|
|
|
|
|
|
def _page_pec(db_path: str) -> str:
|
|
content = _tmpl('pec.html').substitute(
|
|
tbl_pec=q_pec.render_table(q_pec.get_pec(db_path))
|
|
)
|
|
return _base('PEC', content, 'nav_pec', db_path, _page_css('pec'), _page_js('pec'))
|
|
|
|
|
|
def _page_logs(db_path: str, run_id: int = None) -> str:
|
|
logs = q_logs.get_logs(db_path)
|
|
pagination = (
|
|
'<div class="log-pagination">'
|
|
'<div id="filter-process-names" class="pg-process-filter"></div>'
|
|
'</div>'
|
|
)
|
|
content = _tmpl('logs.html').substitute(
|
|
run_info='',
|
|
pagination=pagination,
|
|
tbl_logs=q_logs.render_table(logs),
|
|
)
|
|
return _base('Log DB', content, 'nav_logs', db_path, _page_css('logs'), _page_js('logs'))
|
|
|
|
|
|
def _page_report(db_path: str) -> str:
|
|
rows = q_report.get_report(db_path)
|
|
content = _tmpl('report.html').substitute(
|
|
tbl_report=q_report.render_table(rows)
|
|
)
|
|
return _base('Report', content, 'nav_report', db_path, _page_css('report'), _page_js('report'))
|
|
|
|
|
|
def _page_documenti(db_path: str) -> str:
|
|
rows = q_documenti.get_documenti(db_path)
|
|
content = _tmpl('documenti.html').substitute(
|
|
sessions_html=q_documenti.render_page(rows)
|
|
)
|
|
return _base('Documenti', content, 'nav_documenti', db_path, _page_css('documenti'), _page_js('documenti'))
|
|
|
|
|
|
def _page_iscrizioni(db_path: str) -> str:
|
|
rows = q_iscrizioni.get_corsi(db_path)
|
|
content = _tmpl('iscrizioni.html').substitute(
|
|
tbl_iscrizioni=q_iscrizioni.render_table(rows),
|
|
)
|
|
return _base('Corsi Intraziendali', content, 'nav_iscrizioni', db_path, _page_css('iscrizioni'), _page_js('iscrizioni'))
|
|
|
|
|
|
def _page_email(db_path: str) -> str:
|
|
rows = q_email.get_email(db_path)
|
|
content = _tmpl('email.html').substitute(
|
|
tbl_email=q_email.render_table(rows)
|
|
)
|
|
return _base('Email', content, 'nav_email', db_path, _page_css('email'), _page_js('email'))
|
|
|
|
|
|
def _page_server_logs(db_path: str) -> str:
|
|
rows = ''.join(
|
|
f'<tr>'
|
|
f'<td>{_e(entry["ts"])}</td><td>{_e(entry["method"])}</td><td>{_e(entry["path"])}</td>'
|
|
f'<td style="color:{"#16a34a" if entry["code"] < 400 else "#d97706" if entry["code"] < 500 else "#dc2626"};font-weight:600">{entry["code"]}</td>'
|
|
f'<td>{_e(entry["client"])}</td>'
|
|
f'</tr>'
|
|
for entry in reversed(_access_log)
|
|
)
|
|
table = (
|
|
'<table><thead><tr>'
|
|
'<th>Timestamp</th><th>Method</th><th>Path</th><th>Status</th><th>Client</th>'
|
|
'</tr></thead><tbody>'
|
|
+ (rows or '<tr><td colspan=5 class="empty">Nessuna richiesta ancora.</td></tr>')
|
|
+ '</tbody></table>'
|
|
)
|
|
content = f'<section><h2>Accessi HTTP (ultimi 200)</h2><div class="tw">{table}</div></section>'
|
|
return _base('Server Logs', content, '', db_path, _page_css('server-logs'))
|