Merge pull request #2765 from coreos-inc/joseph.schorr/QUAY-629/globalprom-data-interface
Switch globalpromstats worker to use a data interface
This commit is contained in:
commit
9bd4cee029
6 changed files with 66 additions and 8 deletions
|
@ -4,6 +4,6 @@ echo 'Starting global prometheus stats worker'
|
||||||
|
|
||||||
QUAYPATH=${QUAYPATH:-"."}
|
QUAYPATH=${QUAYPATH:-"."}
|
||||||
cd ${QUAYDIR:-"/"}
|
cd ${QUAYDIR:-"/"}
|
||||||
PYTHONPATH=$QUAYPATH venv/bin/python -m workers.globalpromstats
|
PYTHONPATH=$QUAYPATH venv/bin/python -m workers.globalpromstats.globalpromstats
|
||||||
|
|
||||||
echo 'Global prometheus stats exited'
|
echo 'Global prometheus stats exited'
|
||||||
|
|
0
workers/globalpromstats/__init__.py
Normal file
0
workers/globalpromstats/__init__.py
Normal file
|
@ -1,11 +1,9 @@
|
||||||
import logging
|
import logging
|
||||||
import time
|
import time
|
||||||
import features
|
|
||||||
|
|
||||||
from app import app, metric_queue
|
from app import app, metric_queue
|
||||||
from data.database import UseThenDisconnect
|
from data.database import UseThenDisconnect
|
||||||
from data import model
|
from workers.globalpromstats.models_pre_oci import pre_oci_model as model
|
||||||
from data.model.image import total_image_count
|
|
||||||
from util.locking import GlobalLock, LockNotAcquiredException
|
from util.locking import GlobalLock, LockNotAcquiredException
|
||||||
from util.log import logfile_path
|
from util.log import logfile_path
|
||||||
from workers.worker import Worker
|
from workers.worker import Worker
|
||||||
|
@ -36,12 +34,12 @@ class GlobalPrometheusStatsWorker(Worker):
|
||||||
logger.debug('Reporting global stats')
|
logger.debug('Reporting global stats')
|
||||||
with UseThenDisconnect(app.config):
|
with UseThenDisconnect(app.config):
|
||||||
# Repository count.
|
# Repository count.
|
||||||
metric_queue.repository_count.Set(model.repository.get_repository_count())
|
metric_queue.repository_count.Set(model.get_repository_count())
|
||||||
|
|
||||||
# User counts.
|
# User counts.
|
||||||
metric_queue.user_count.Set(model.user.get_active_user_count())
|
metric_queue.user_count.Set(model.get_active_user_count())
|
||||||
metric_queue.org_count.Set(model.organization.get_active_org_count())
|
metric_queue.org_count.Set(model.get_active_org_count())
|
||||||
metric_queue.robot_count.Set(model.user.get_robot_count())
|
metric_queue.robot_count.Set(model.get_robot_count())
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
27
workers/globalpromstats/models_interface.py
Normal file
27
workers/globalpromstats/models_interface.py
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
from abc import ABCMeta, abstractmethod
|
||||||
|
from six import add_metaclass
|
||||||
|
|
||||||
|
@add_metaclass(ABCMeta)
|
||||||
|
class GlobalPromStatsWorkerDataInterface(object):
|
||||||
|
"""
|
||||||
|
Interface that represents all data store interactions required by the global prom stats worker.
|
||||||
|
"""
|
||||||
|
@abstractmethod
|
||||||
|
def get_repository_count(self):
|
||||||
|
""" Returns the number of repositories in the database. """
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def get_active_user_count(self):
|
||||||
|
""" Returns the number of active users in the database. """
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def get_active_org_count(self):
|
||||||
|
""" Returns the number of active organizations in the database. """
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def get_robot_count(self):
|
||||||
|
""" Returns the number of robots in the database. """
|
||||||
|
pass
|
18
workers/globalpromstats/models_pre_oci.py
Normal file
18
workers/globalpromstats/models_pre_oci.py
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
from data import model
|
||||||
|
|
||||||
|
from workers.globalpromstats.models_interface import GlobalPromStatsWorkerDataInterface
|
||||||
|
|
||||||
|
class PreOCIModel(GlobalPromStatsWorkerDataInterface):
|
||||||
|
def get_repository_count(self):
|
||||||
|
return model.repository.get_repository_count()
|
||||||
|
|
||||||
|
def get_active_user_count(self):
|
||||||
|
return model.user.get_active_user_count()
|
||||||
|
|
||||||
|
def get_active_org_count(self):
|
||||||
|
return model.organization.get_active_org_count()
|
||||||
|
|
||||||
|
def get_robot_count(self):
|
||||||
|
return model.user.get_robot_count()
|
||||||
|
|
||||||
|
pre_oci_model = PreOCIModel()
|
15
workers/globalpromstats/test/test_globalpromstats.py
Normal file
15
workers/globalpromstats/test/test_globalpromstats.py
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
from mock import patch, Mock
|
||||||
|
|
||||||
|
from workers.globalpromstats.globalpromstats import GlobalPrometheusStatsWorker
|
||||||
|
|
||||||
|
from test.fixtures import *
|
||||||
|
|
||||||
|
def test_reportstats(initialized_db):
|
||||||
|
mock = Mock()
|
||||||
|
with patch('workers.globalpromstats.globalpromstats.metric_queue', mock):
|
||||||
|
worker = GlobalPrometheusStatsWorker()
|
||||||
|
worker._report_stats()
|
||||||
|
|
||||||
|
mock.repository_count.Set.assert_called_once()
|
||||||
|
mock.org_count.Set.assert_called_once()
|
||||||
|
mock.robot_count.Set.assert_called_once()
|
Reference in a new issue