4bf4ce33c9
This change replaces the metricqueue library with a native Prometheus client implementation with the intention to aggregated results with the Prometheus PushGateway. This change also adds instrumentation for greenlet context switches.
52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
import logging
|
|
import time
|
|
|
|
import features
|
|
|
|
from app import app # This is required to initialize the database.
|
|
from data import model
|
|
from workers.worker import Worker
|
|
from util.log import logfile_path
|
|
from util.timedeltastring import convert_to_timedelta
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
POLL_PERIOD_SECONDS = 60 * 60 # 1 hour
|
|
|
|
|
|
class ExpiredAppSpecificTokenWorker(Worker):
|
|
def __init__(self):
|
|
super(ExpiredAppSpecificTokenWorker, self).__init__()
|
|
|
|
expiration_window = app.config.get('EXPIRED_APP_SPECIFIC_TOKEN_GC', '1d')
|
|
self.expiration_window = convert_to_timedelta(expiration_window)
|
|
|
|
logger.debug('Found expiration window: %s', expiration_window)
|
|
self.add_operation(self._gc_expired_tokens, POLL_PERIOD_SECONDS)
|
|
|
|
def _gc_expired_tokens(self):
|
|
""" Garbage collects any expired app specific tokens outside of the configured
|
|
window. """
|
|
logger.debug('Garbage collecting expired app specific tokens with window: %s',
|
|
self.expiration_window)
|
|
model.appspecifictoken.gc_expired_tokens(self.expiration_window)
|
|
return True
|
|
|
|
if __name__ == "__main__":
|
|
logging.config.fileConfig(logfile_path(debug=False), disable_existing_loggers=False)
|
|
|
|
if not features.APP_SPECIFIC_TOKENS:
|
|
logger.debug('App specific tokens disabled; skipping')
|
|
while True:
|
|
time.sleep(100000)
|
|
|
|
if app.config.get('EXPIRED_APP_SPECIFIC_TOKEN_GC') is None:
|
|
logger.debug('GC of App specific tokens is disabled; skipping')
|
|
while True:
|
|
time.sleep(100000)
|
|
|
|
logger.debug('Starting expired app specific token GC worker')
|
|
worker = ExpiredAppSpecificTokenWorker()
|
|
worker.start()
|