Skip to content

Commit 2e23a6e

Browse files
authored
Adds new templates (#340)
* Adds new templates * comment remove * PR comments * submodule update * Adds submodule dev
1 parent e8ac1ce commit 2e23a6e

File tree

5 files changed

+115
-1
lines changed

5 files changed

+115
-1
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
"""sum table
2+
3+
Revision ID: 3e6633b3fa0a
4+
Revises: 580fd6de4f15
5+
Create Date: 2025-08-19 08:18:28.043370
6+
7+
"""
8+
from alembic import op
9+
import sqlalchemy as sa
10+
from sqlalchemy.dialects import postgresql
11+
12+
# revision identifiers, used by Alembic.
13+
revision = '3e6633b3fa0a'
14+
down_revision = '580fd6de4f15'
15+
branch_labels = None
16+
depends_on = None
17+
18+
19+
def upgrade():
20+
# ### commands auto generated by Alembic - please adjust! ###
21+
op.create_table('sums_table',
22+
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
23+
sa.Column('sum_key', sa.String(), nullable=True),
24+
sa.Column('created_at', sa.DateTime(), nullable=True),
25+
sa.Column('data', sa.JSON(), nullable=True),
26+
sa.PrimaryKeyConstraint('id'),
27+
schema='global'
28+
)
29+
op.create_index(op.f('ix_global_sums_table_sum_key'), 'sums_table', ['sum_key'], unique=False, schema='global')
30+
# ### end Alembic commands ###
31+
32+
33+
def downgrade():
34+
# ### commands auto generated by Alembic - please adjust! ###
35+
op.drop_index(op.f('ix_global_sums_table_sum_key'), table_name='sums_table', schema='global')
36+
op.drop_table('sums_table', schema='global')
37+
# ### end Alembic commands ###

app.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
from util import security, clean_up
6666
from middleware import log_storage
6767
from submodules.model import session
68+
from controller.sums_table import manager as sums_table_manager
6869

6970
logging.basicConfig(level=logging.DEBUG)
7071
logger = logging.getLogger(__name__)
@@ -151,3 +152,4 @@
151152

152153
session.start_session_cleanup_thread()
153154
log_storage.start_persist_thread()
155+
sums_table_manager.start_sums_table_thread()

controller/sums_table/__init__.py

Whitespace-only changes.

controller/sums_table/manager.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
from time import sleep
2+
from datetime import timedelta, datetime
3+
from submodules.model import daemon
4+
from submodules.model.enums import AdminQueries
5+
from submodules.model.global_objects import sums_table as sums_table_db_go
6+
from submodules.model.business_objects import general
7+
import traceback
8+
9+
10+
NEXT_EXEC = {}
11+
SUM_TABLE_TASKS = {
12+
AdminQueries.PRIVATEMODE_USE_OVER_TIME.value: timedelta(days=1),
13+
}
14+
SUM_TABLE_REMOVES = {
15+
AdminQueries.PRIVATEMODE_USE_OVER_TIME.value: timedelta(days=90),
16+
}
17+
18+
19+
def start_sums_table_thread() -> None:
20+
__init_next_exec()
21+
daemon.run_without_db_token(__sum_table_thread)
22+
23+
24+
def __sum_table_thread() -> None:
25+
global NEXT_EXEC, SUM_TABLE_TASKS
26+
while True:
27+
sleep(5)
28+
now = datetime.now()
29+
# collect only keys that are due
30+
to_run = [
31+
(k, delta)
32+
for k, delta in SUM_TABLE_TASKS.items()
33+
if now >= NEXT_EXEC.get(k, datetime.min)
34+
]
35+
36+
if not to_run:
37+
continue
38+
39+
if to_run:
40+
try:
41+
general.get_ctx_token()
42+
for key, delta in to_run:
43+
data = __get_sum_data_by_key(key)
44+
if not data:
45+
raise ValueError("No sum data found")
46+
sums_table_db_go.create(sum_key=key, data=data, with_commit=True)
47+
NEXT_EXEC[key] = now + delta
48+
_cleanup_old_entries() # only if something run we clean so we dont do this to often
49+
except Exception:
50+
print(traceback.format_exc(), flush=True)
51+
finally:
52+
general.remove_and_refresh_session()
53+
54+
55+
def __init_next_exec() -> None:
56+
global NEXT_EXEC
57+
58+
for key, delta in SUM_TABLE_TASKS.items():
59+
NEXT_EXEC[key] = sums_table_db_go.get_last_execution_by_key(key)
60+
if NEXT_EXEC[key] is None:
61+
NEXT_EXEC[key] = datetime.now()
62+
else:
63+
NEXT_EXEC[key] = NEXT_EXEC[key] + delta
64+
65+
66+
def __get_sum_data_by_key(sum_key: str) -> dict:
67+
if sum_key == AdminQueries.PRIVATEMODE_USE_OVER_TIME.value:
68+
return sums_table_db_go.get_privatemode_sum_snapshot()
69+
return None
70+
71+
72+
def _cleanup_old_entries() -> None:
73+
global NEXT_EXEC
74+
for key, delta in SUM_TABLE_REMOVES.items():
75+
sums_table_db_go.clean_old_entries(key, delta)

0 commit comments

Comments
 (0)