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:-"."} | ||||
| cd ${QUAYDIR:-"/"} | ||||
| PYTHONPATH=$QUAYPATH venv/bin/python -m workers.globalpromstats | ||||
| PYTHONPATH=$QUAYPATH venv/bin/python -m workers.globalpromstats.globalpromstats | ||||
| 
 | ||||
| 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 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(): | ||||
							
								
								
									
										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