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:
josephschorr 2017-07-19 16:39:36 -04:00 committed by GitHub
commit 9bd4cee029
6 changed files with 66 additions and 8 deletions

View file

@ -4,6 +4,6 @@ echo 'Starting global prometheus stats worker'
QUAYPATH=${QUAYPATH:-"."}
cd ${QUAYDIR:-"/"}
PYTHONPATH=$QUAYPATH venv/bin/python -m workers.globalpromstats
PYTHONPATH=$QUAYPATH venv/bin/python -m workers.globalpromstats.globalpromstats
echo 'Global prometheus stats exited'

View file

View file

@ -1,11 +1,9 @@
import logging
import time
import features
from app import app, metric_queue
from data.database import UseThenDisconnect
from data import model
from data.model.image import total_image_count
from workers.globalpromstats.models_pre_oci import pre_oci_model as model
from util.locking import GlobalLock, LockNotAcquiredException
from util.log import logfile_path
from workers.worker import Worker
@ -36,12 +34,12 @@ class GlobalPrometheusStatsWorker(Worker):
logger.debug('Reporting global stats')
with UseThenDisconnect(app.config):
# Repository count.
metric_queue.repository_count.Set(model.repository.get_repository_count())
metric_queue.repository_count.Set(model.get_repository_count())
# User counts.
metric_queue.user_count.Set(model.user.get_active_user_count())
metric_queue.org_count.Set(model.organization.get_active_org_count())
metric_queue.robot_count.Set(model.user.get_robot_count())
metric_queue.user_count.Set(model.get_active_user_count())
metric_queue.org_count.Set(model.get_active_org_count())
metric_queue.robot_count.Set(model.get_robot_count())
def main():

View 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

View 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()

View 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()