| Viewing file:  base.py (1.27 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
# coding=utf-8#
 # Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2023 All Rights Reserved
 #
 # Licensed under CLOUD LINUX LICENSE AGREEMENT
 # http://cloudlinux.com/docs/LICENSE.TXT
 import contextlib
 from typing import Any, TypedDict, Callable
 from threading import Thread, Event
 
 import sqlalchemy as sa
 
 from lvestats.orm import BurstingEventType, bursting_events_table
 
 from ..common import LveId, Timestamp
 
 
 def init_db_schema(engine: sa.engine.Engine) -> None:
 bursting_events_table.create(engine, checkfirst=True)
 
 
 def drop_db_schema(engine: sa.engine.Engine) -> None:
 bursting_events_table.drop(engine, checkfirst=True)
 
 
 class InBurstingEventRow(TypedDict):
 lve_id: LveId
 timestamp: Timestamp
 event_type: BurstingEventType
 
 
 @contextlib.contextmanager
 def thread_running(name: str, main: Callable[[Event], Any]):
 terminate = Event()
 (saver_thread := Thread(
 name=name,
 target=main,
 # NOTE(vlebedev): For details regarding how this interacts with termination using "atexit" callback,
 #                 have a look at https://stackoverflow.com/a/58928213/3344105
 daemon=True,
 args=(terminate,),
 )).start()
 try:
 yield
 finally:
 terminate.set()
 saver_thread.join()
 |