16b6fa5ce8
As specified by the OpenStack Style Guidelines in its 1.1.1.dev15 version, which is the latest version to this day, *author* tags should not be specified (see H105). https://docs.openstack.org/hacking/latest/user/hacking.html#general Change-Id: I0ab7359e15eb04948c7a905378001a66cb901e69
157 lines
4.1 KiB
Python
157 lines
4.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright 2014 Objectif Libre
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
#
|
|
import abc
|
|
|
|
from oslo_config import cfg
|
|
from oslo_db import api as db_api
|
|
import six
|
|
|
|
_BACKEND_MAPPING = {'sqlalchemy': 'cloudkitty.db.sqlalchemy.api'}
|
|
IMPL = db_api.DBAPI.from_config(cfg.CONF,
|
|
backend_mapping=_BACKEND_MAPPING,
|
|
lazy=True)
|
|
|
|
|
|
def get_instance():
|
|
"""Return a DB API instance."""
|
|
return IMPL
|
|
|
|
|
|
@six.add_metaclass(abc.ABCMeta)
|
|
class State(object):
|
|
"""Base class for state tracking."""
|
|
|
|
@abc.abstractmethod
|
|
def get_state(self, name):
|
|
"""Retrieve the current state.
|
|
|
|
:param name: Name of the state
|
|
:return float: State value
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def set_state(self, name, state):
|
|
"""Store the state.
|
|
|
|
:param name: Name of the state
|
|
:param state: State value
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def get_metadata(self, name):
|
|
"""Retrieve state metadata
|
|
|
|
:param name: Name of the state
|
|
:return str: Return a json dict with all metadata attached to this
|
|
state.
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def set_metadata(self, name, metadata):
|
|
"""Store the state metadata.
|
|
|
|
:param name: Name of the state
|
|
:param metadata: Metadata value
|
|
"""
|
|
|
|
|
|
@six.add_metaclass(abc.ABCMeta)
|
|
class ModuleInfo(object):
|
|
"""Base class for module info management."""
|
|
|
|
@abc.abstractmethod
|
|
def get_priority(self, name):
|
|
"""Retrieve the module priority.
|
|
|
|
:param name: Name of the module
|
|
:return int: Priority of the module
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def set_priority(self, name, priority):
|
|
"""Set the module state.
|
|
|
|
:param name: Name of the module
|
|
:param priority: New priority of the module
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def get_state(self, name):
|
|
"""Retrieve the module state.
|
|
|
|
:param name: Name of the module
|
|
:return bool: State of the module
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def set_state(self, name, state):
|
|
"""Set the module state.
|
|
|
|
:param name: Name of the module
|
|
:param value: State of the module
|
|
"""
|
|
|
|
|
|
class NoSuchMapping(Exception):
|
|
"""Raised when the mapping doesn't exist."""
|
|
|
|
def __init__(self, service):
|
|
super(NoSuchMapping, self).__init__(
|
|
"No mapping for service: %s" % service)
|
|
self.service = service
|
|
|
|
|
|
@six.add_metaclass(abc.ABCMeta)
|
|
class ServiceToCollectorMapping(object):
|
|
"""Base class for service to collector mapping."""
|
|
|
|
@abc.abstractmethod
|
|
def get_mapping(self, service):
|
|
"""Get a mapping.
|
|
|
|
:return mapping: service to collector object.
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def set_mapping(self, service, collector):
|
|
"""Set a mapping.
|
|
|
|
:param service: Service to work on.
|
|
:param collector: Collector to prioritize.
|
|
:return mapping: Service to Collector object.
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def list_services(self, collector=None):
|
|
"""Retrieve the list of every services mapped.
|
|
|
|
:param collector: Filter on a collector name.
|
|
:return list(str): List of services' name.
|
|
"""
|
|
@abc.abstractmethod
|
|
def list_mappings(self, collector=None):
|
|
"""Retrieve the list of every mappings.
|
|
|
|
:param collector: Filter on a collector's name.
|
|
:return [tuple(str, str)]: List of mappings.
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def delete_mapping(self, service):
|
|
"""Remove a mapping.
|
|
|
|
"""
|