Add service supervisor
This patch set adds supervisor mechanism for Watcher services to get ability to track states. Partially-Implements: blueprint watcher-service-list Change-Id: Iab1cefb971c79ed27b22b6a5d1bed8698e35f9a4
This commit is contained in:
@@ -1065,3 +1065,65 @@ class Connection(api.BaseConnection):
|
||||
except exception.ResourceNotFound:
|
||||
raise exception.ScoringEngineNotFound(
|
||||
scoring_engine=scoring_engine_id)
|
||||
|
||||
# ### SERVICES ### #
|
||||
|
||||
def _add_services_filters(self, query, filters):
|
||||
if not filters:
|
||||
filters = {}
|
||||
|
||||
plain_fields = ['id', 'name', 'host']
|
||||
|
||||
return self._add_filters(
|
||||
query=query, model=models.Service, filters=filters,
|
||||
plain_fields=plain_fields)
|
||||
|
||||
def get_service_list(self, context, filters=None, limit=None,
|
||||
marker=None, sort_key=None, sort_dir=None):
|
||||
query = model_query(models.Service)
|
||||
query = self._add_services_filters(query, filters)
|
||||
if not context.show_deleted:
|
||||
query = query.filter_by(deleted_at=None)
|
||||
return _paginate_query(models.Service, limit, marker,
|
||||
sort_key, sort_dir, query)
|
||||
|
||||
def create_service(self, values):
|
||||
service = models.Service()
|
||||
service.update(values)
|
||||
try:
|
||||
service.save()
|
||||
except db_exc.DBDuplicateEntry:
|
||||
raise exception.ServiceAlreadyExists(name=values['name'],
|
||||
host=values['host'])
|
||||
return service
|
||||
|
||||
def _get_service(self, context, fieldname, value):
|
||||
try:
|
||||
return self._get(context, model=models.Service,
|
||||
fieldname=fieldname, value=value)
|
||||
except exception.ResourceNotFound:
|
||||
raise exception.ServiceNotFound(service=value)
|
||||
|
||||
def get_service_by_id(self, context, service_id):
|
||||
return self._get_service(context, fieldname="id", value=service_id)
|
||||
|
||||
def get_service_by_name(self, context, service_name):
|
||||
return self._get_service(context, fieldname="name", value=service_name)
|
||||
|
||||
def destroy_service(self, service_id):
|
||||
try:
|
||||
return self._destroy(models.Service, service_id)
|
||||
except exception.ResourceNotFound:
|
||||
raise exception.ServiceNotFound(service=service_id)
|
||||
|
||||
def update_service(self, service_id, values):
|
||||
try:
|
||||
return self._update(models.Service, service_id, values)
|
||||
except exception.ResourceNotFound:
|
||||
raise exception.ServiceNotFound(service=service_id)
|
||||
|
||||
def soft_delete_service(self, service_id):
|
||||
try:
|
||||
self._soft_delete(models.Service, service_id)
|
||||
except exception.ResourceNotFound:
|
||||
raise exception.ServiceNotFound(service=service_id)
|
||||
|
||||
@@ -255,3 +255,18 @@ class ScoringEngine(Base):
|
||||
# The format might vary between different models (e.g. be JSON, XML or
|
||||
# even some custom format), the blob type should cover all scenarios.
|
||||
metainfo = Column(Text, nullable=True)
|
||||
|
||||
|
||||
class Service(Base):
|
||||
"""Represents a service entity"""
|
||||
|
||||
__tablename__ = 'services'
|
||||
__table_args__ = (
|
||||
UniqueConstraint('host', 'name', 'deleted',
|
||||
name="uniq_services0host0name0deleted"),
|
||||
table_args()
|
||||
)
|
||||
id = Column(Integer, primary_key=True)
|
||||
name = Column(String(255), nullable=False)
|
||||
host = Column(String(255), nullable=False)
|
||||
last_seen_up = Column(DateTime, nullable=True)
|
||||
|
||||
Reference in New Issue
Block a user