mirror of
https://github.com/clearml/clearml-server
synced 2025-01-31 10:56:48 +00:00
59 lines
1.6 KiB
Python
59 lines
1.6 KiB
Python
from jsonmodels import models
|
|
from jsonmodels.errors import ValidationError
|
|
from jsonmodels.fields import StringField
|
|
from mongoengine import register_connection
|
|
from mongoengine.connection import get_connection
|
|
|
|
from config import config
|
|
from .defs import Database
|
|
from .utils import get_items
|
|
|
|
log = config.logger(__file__)
|
|
|
|
strict = config.get('apiserver.mongo.strict', True)
|
|
|
|
_entries = []
|
|
|
|
|
|
class DatabaseEntry(models.Base):
|
|
host = StringField(required=True)
|
|
alias = StringField()
|
|
|
|
@property
|
|
def health_alias(self):
|
|
return '__health__' + self.alias
|
|
|
|
|
|
def initialize():
|
|
db_entries = config.get('hosts.mongo', {})
|
|
missing = []
|
|
log.info('Initializing database connections')
|
|
for key, alias in get_items(Database).items():
|
|
if key not in db_entries:
|
|
missing.append(key)
|
|
continue
|
|
entry = DatabaseEntry(alias=alias, **db_entries.get(key))
|
|
try:
|
|
entry.validate()
|
|
log.info('Registering connection to %(alias)s (%(host)s)' % entry.to_struct())
|
|
register_connection(alias=alias, host=entry.host)
|
|
|
|
_entries.append(entry)
|
|
except ValidationError as ex:
|
|
raise Exception('Invalid database entry `%s`: %s' % (key, ex.args[0]))
|
|
if missing:
|
|
raise ValueError('Missing database configuration for %s' % ', '.join(missing))
|
|
|
|
|
|
def get_entries():
|
|
return _entries
|
|
|
|
|
|
def get_aliases():
|
|
return [entry.alias for entry in get_entries()]
|
|
|
|
|
|
def reconnect():
|
|
for entry in get_entries():
|
|
get_connection(entry.alias, reconnect=True)
|