Move aodh.alarm.storage to aodh.storage
Change-Id: I1179addc15624800e4113a6b7ea21999dd45d66f
This commit is contained in:
parent
b8a678929d
commit
a16fa7ae8a
@ -20,9 +20,9 @@ from oslo_context import context
|
|||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
import six
|
import six
|
||||||
|
|
||||||
from aodh.alarm.storage import models
|
|
||||||
from aodh.i18n import _
|
from aodh.i18n import _
|
||||||
from aodh import messaging
|
from aodh import messaging
|
||||||
|
from aodh.storage import models
|
||||||
|
|
||||||
OPTS = [
|
OPTS = [
|
||||||
cfg.StrOpt('notifier_rpc_topic',
|
cfg.StrOpt('notifier_rpc_topic',
|
||||||
|
@ -1,166 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright 2012 New Dream Network, LLC (DreamHost)
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
"""Base classes for storage engines
|
|
||||||
"""
|
|
||||||
import aodh
|
|
||||||
|
|
||||||
|
|
||||||
class Connection(object):
|
|
||||||
"""Base class for alarm storage system connections."""
|
|
||||||
|
|
||||||
# A dictionary representing the capabilities of this driver.
|
|
||||||
CAPABILITIES = {
|
|
||||||
'alarms': {'query': {'simple': False,
|
|
||||||
'complex': False},
|
|
||||||
'history': {'query': {'simple': False,
|
|
||||||
'complex': False}}},
|
|
||||||
}
|
|
||||||
|
|
||||||
STORAGE_CAPABILITIES = {
|
|
||||||
'storage': {'production_ready': False},
|
|
||||||
}
|
|
||||||
|
|
||||||
def __init__(self, url):
|
|
||||||
pass
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def upgrade():
|
|
||||||
"""Migrate the database to `version` or the most recent version."""
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def get_alarms(name=None, user=None, state=None, meter=None,
|
|
||||||
project=None, enabled=None, alarm_id=None,
|
|
||||||
alarm_type=None, severity=None):
|
|
||||||
"""Yields a lists of alarms that match filters.
|
|
||||||
|
|
||||||
:param name: Optional name for alarm.
|
|
||||||
:param user: Optional ID for user that owns the resource.
|
|
||||||
:param state: Optional string for alarm state.
|
|
||||||
:param meter: Optional string for alarms associated with meter.
|
|
||||||
:param project: Optional ID for project that owns the resource.
|
|
||||||
:param enabled: Optional boolean to list disable alarm.
|
|
||||||
:param alarm_id: Optional alarm_id to return one alarm.
|
|
||||||
:param alarm_type: Optional alarm type.
|
|
||||||
:parmr severity: Optional alarm severity
|
|
||||||
"""
|
|
||||||
raise aodh.NotImplementedError('Alarms not implemented')
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def create_alarm(alarm):
|
|
||||||
"""Create an alarm. Returns the alarm as created.
|
|
||||||
|
|
||||||
:param alarm: The alarm to create.
|
|
||||||
"""
|
|
||||||
raise aodh.NotImplementedError('Alarms not implemented')
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def update_alarm(alarm):
|
|
||||||
"""Update alarm."""
|
|
||||||
raise aodh.NotImplementedError('Alarms not implemented')
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def delete_alarm(alarm_id):
|
|
||||||
"""Delete an alarm."""
|
|
||||||
raise aodh.NotImplementedError('Alarms not implemented')
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def get_alarm_changes(alarm_id, on_behalf_of,
|
|
||||||
user=None, project=None, alarm_type=None,
|
|
||||||
severity=None, start_timestamp=None,
|
|
||||||
start_timestamp_op=None, end_timestamp=None,
|
|
||||||
end_timestamp_op=None):
|
|
||||||
"""Yields list of AlarmChanges describing alarm history
|
|
||||||
|
|
||||||
Changes are always sorted in reverse order of occurrence, given
|
|
||||||
the importance of currency.
|
|
||||||
|
|
||||||
Segregation for non-administrative users is done on the basis
|
|
||||||
of the on_behalf_of parameter. This allows such users to have
|
|
||||||
visibility on both the changes initiated by themselves directly
|
|
||||||
(generally creation, rule changes, or deletion) and also on those
|
|
||||||
changes initiated on their behalf by the alarming service (state
|
|
||||||
transitions after alarm thresholds are crossed).
|
|
||||||
|
|
||||||
:param alarm_id: ID of alarm to return changes for
|
|
||||||
:param on_behalf_of: ID of tenant to scope changes query (None for
|
|
||||||
administrative user, indicating all projects)
|
|
||||||
:param user: Optional ID of user to return changes for
|
|
||||||
:param project: Optional ID of project to return changes for
|
|
||||||
:param alarm_type: Optional change type
|
|
||||||
:param severity: Optional change severity
|
|
||||||
:param start_timestamp: Optional modified timestamp start range
|
|
||||||
:param start_timestamp_op: Optional timestamp start range operation
|
|
||||||
:param end_timestamp: Optional modified timestamp end range
|
|
||||||
:param end_timestamp_op: Optional timestamp end range operation
|
|
||||||
"""
|
|
||||||
raise aodh.NotImplementedError('Alarm history not implemented')
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def record_alarm_change(alarm_change):
|
|
||||||
"""Record alarm change event."""
|
|
||||||
raise aodh.NotImplementedError('Alarm history not implemented')
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def clear():
|
|
||||||
"""Clear database."""
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def query_alarms(filter_expr=None, orderby=None, limit=None):
|
|
||||||
"""Return an iterable of model.Alarm objects.
|
|
||||||
|
|
||||||
:param filter_expr: Filter expression for query.
|
|
||||||
:param orderby: List of field name and direction pairs for order by.
|
|
||||||
:param limit: Maximum number of results to return.
|
|
||||||
"""
|
|
||||||
|
|
||||||
raise aodh.NotImplementedError('Complex query for alarms '
|
|
||||||
'is not implemented.')
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def query_alarm_history(filter_expr=None, orderby=None, limit=None):
|
|
||||||
"""Return an iterable of model.AlarmChange objects.
|
|
||||||
|
|
||||||
:param filter_expr: Filter expression for query.
|
|
||||||
:param orderby: List of field name and direction pairs for order by.
|
|
||||||
:param limit: Maximum number of results to return.
|
|
||||||
"""
|
|
||||||
|
|
||||||
raise aodh.NotImplementedError('Complex query for alarms '
|
|
||||||
'history is not implemented.')
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get_capabilities(cls):
|
|
||||||
"""Return an dictionary with the capabilities of each driver."""
|
|
||||||
return cls.CAPABILITIES
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get_storage_capabilities(cls):
|
|
||||||
"""Return a dictionary representing the performance capabilities.
|
|
||||||
|
|
||||||
This is needed to evaluate the performance of each driver.
|
|
||||||
"""
|
|
||||||
return cls.STORAGE_CAPABILITIES
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def clear_expired_alarm_history_data(alarm_history_ttl):
|
|
||||||
"""Clear expired alarm history data from the backend storage system.
|
|
||||||
|
|
||||||
Clearing occurs according to the time-to-live.
|
|
||||||
|
|
||||||
:param alarm_history_ttl: Number of seconds to keep alarm history
|
|
||||||
records for.
|
|
||||||
"""
|
|
||||||
raise aodh.NotImplementedError('Clearing alarm history '
|
|
||||||
'not implemented')
|
|
@ -39,13 +39,13 @@ import wsmeext.pecan as wsme_pecan
|
|||||||
|
|
||||||
import aodh
|
import aodh
|
||||||
from aodh import alarm as aodh_alarm
|
from aodh import alarm as aodh_alarm
|
||||||
from aodh.alarm.storage import models as alarm_models
|
|
||||||
from aodh.api.controllers.v2.alarm_rules import combination
|
from aodh.api.controllers.v2.alarm_rules import combination
|
||||||
from aodh.api.controllers.v2 import base
|
from aodh.api.controllers.v2 import base
|
||||||
from aodh.api.controllers.v2 import utils as v2_utils
|
from aodh.api.controllers.v2 import utils as v2_utils
|
||||||
from aodh.api import rbac
|
from aodh.api import rbac
|
||||||
from aodh.i18n import _
|
from aodh.i18n import _
|
||||||
from aodh import messaging
|
from aodh import messaging
|
||||||
|
from aodh.storage import models
|
||||||
from aodh import utils
|
from aodh import utils
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
@ -459,7 +459,7 @@ class AlarmController(rest.RestController):
|
|||||||
def _record_change(self, data, now, on_behalf_of=None, type=None):
|
def _record_change(self, data, now, on_behalf_of=None, type=None):
|
||||||
if not cfg.CONF.alarm.record_history:
|
if not cfg.CONF.alarm.record_history:
|
||||||
return
|
return
|
||||||
type = type or alarm_models.AlarmChange.RULE_CHANGE
|
type = type or models.AlarmChange.RULE_CHANGE
|
||||||
scrubbed_data = utils.stringify_timestamps(data)
|
scrubbed_data = utils.stringify_timestamps(data)
|
||||||
detail = json.dumps(scrubbed_data)
|
detail = json.dumps(scrubbed_data)
|
||||||
user_id = pecan.request.headers.get('X-User-Id')
|
user_id = pecan.request.headers.get('X-User-Id')
|
||||||
@ -533,10 +533,10 @@ class AlarmController(rest.RestController):
|
|||||||
|
|
||||||
ALARMS_RULES[data.type].plugin.update_hook(data)
|
ALARMS_RULES[data.type].plugin.update_hook(data)
|
||||||
|
|
||||||
old_alarm = Alarm.from_db_model(alarm_in).as_dict(alarm_models.Alarm)
|
old_alarm = Alarm.from_db_model(alarm_in).as_dict(models.Alarm)
|
||||||
updated_alarm = data.as_dict(alarm_models.Alarm)
|
updated_alarm = data.as_dict(models.Alarm)
|
||||||
try:
|
try:
|
||||||
alarm_in = alarm_models.Alarm(**updated_alarm)
|
alarm_in = models.Alarm(**updated_alarm)
|
||||||
except Exception:
|
except Exception:
|
||||||
LOG.exception(_("Error while putting alarm: %s") % updated_alarm)
|
LOG.exception(_("Error while putting alarm: %s") % updated_alarm)
|
||||||
raise base.ClientSideError(_("Alarm incorrect"))
|
raise base.ClientSideError(_("Alarm incorrect"))
|
||||||
@ -558,10 +558,10 @@ class AlarmController(rest.RestController):
|
|||||||
# ensure alarm exists before deleting
|
# ensure alarm exists before deleting
|
||||||
alarm = self._alarm()
|
alarm = self._alarm()
|
||||||
self.conn.delete_alarm(alarm.alarm_id)
|
self.conn.delete_alarm(alarm.alarm_id)
|
||||||
change = Alarm.from_db_model(alarm).as_dict(alarm_models.Alarm)
|
change = Alarm.from_db_model(alarm).as_dict(models.Alarm)
|
||||||
self._record_change(change,
|
self._record_change(change,
|
||||||
timeutils.utcnow(),
|
timeutils.utcnow(),
|
||||||
type=alarm_models.AlarmChange.DELETION)
|
type=models.AlarmChange.DELETION)
|
||||||
|
|
||||||
@wsme_pecan.wsexpose([AlarmChange], [base.Query])
|
@wsme_pecan.wsexpose([AlarmChange], [base.Query])
|
||||||
def history(self, q=None):
|
def history(self, q=None):
|
||||||
@ -605,7 +605,7 @@ class AlarmController(rest.RestController):
|
|||||||
alarm = self.conn.update_alarm(alarm)
|
alarm = self.conn.update_alarm(alarm)
|
||||||
change = {'state': alarm.state}
|
change = {'state': alarm.state}
|
||||||
self._record_change(change, now, on_behalf_of=alarm.project_id,
|
self._record_change(change, now, on_behalf_of=alarm.project_id,
|
||||||
type=alarm_models.AlarmChange.STATE_TRANSITION)
|
type=models.AlarmChange.STATE_TRANSITION)
|
||||||
return alarm.state
|
return alarm.state
|
||||||
|
|
||||||
@wsme_pecan.wsexpose(state_kind_enum)
|
@wsme_pecan.wsexpose(state_kind_enum)
|
||||||
@ -629,7 +629,7 @@ class AlarmsController(rest.RestController):
|
|||||||
def _record_creation(conn, data, alarm_id, now):
|
def _record_creation(conn, data, alarm_id, now):
|
||||||
if not cfg.CONF.alarm.record_history:
|
if not cfg.CONF.alarm.record_history:
|
||||||
return
|
return
|
||||||
type = alarm_models.AlarmChange.CREATION
|
type = models.AlarmChange.CREATION
|
||||||
scrubbed_data = utils.stringify_timestamps(data)
|
scrubbed_data = utils.stringify_timestamps(data)
|
||||||
detail = json.dumps(scrubbed_data)
|
detail = json.dumps(scrubbed_data)
|
||||||
user_id = pecan.request.headers.get('X-User-Id')
|
user_id = pecan.request.headers.get('X-User-Id')
|
||||||
@ -691,7 +691,7 @@ class AlarmsController(rest.RestController):
|
|||||||
|
|
||||||
ALARMS_RULES[data.type].plugin.create_hook(data)
|
ALARMS_RULES[data.type].plugin.create_hook(data)
|
||||||
|
|
||||||
change = data.as_dict(alarm_models.Alarm)
|
change = data.as_dict(models.Alarm)
|
||||||
|
|
||||||
# make sure alarms are unique by name per project.
|
# make sure alarms are unique by name per project.
|
||||||
alarms = list(conn.get_alarms(name=data.name,
|
alarms = list(conn.get_alarms(name=data.name,
|
||||||
@ -702,7 +702,7 @@ class AlarmsController(rest.RestController):
|
|||||||
status_code=409)
|
status_code=409)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
alarm_in = alarm_models.Alarm(**change)
|
alarm_in = models.Alarm(**change)
|
||||||
except Exception:
|
except Exception:
|
||||||
LOG.exception(_("Error while posting alarm: %s") % change)
|
LOG.exception(_("Error while posting alarm: %s") % change)
|
||||||
raise base.ClientSideError(_("Alarm incorrect"))
|
raise base.ClientSideError(_("Alarm incorrect"))
|
||||||
|
@ -28,11 +28,11 @@ from pecan import rest
|
|||||||
from wsme import types as wtypes
|
from wsme import types as wtypes
|
||||||
import wsmeext.pecan as wsme_pecan
|
import wsmeext.pecan as wsme_pecan
|
||||||
|
|
||||||
from aodh.alarm.storage import models as alarm_models
|
|
||||||
from aodh.api.controllers.v2 import alarms
|
from aodh.api.controllers.v2 import alarms
|
||||||
from aodh.api.controllers.v2 import base
|
from aodh.api.controllers.v2 import base
|
||||||
from aodh.api import rbac
|
from aodh.api import rbac
|
||||||
from aodh.i18n import _
|
from aodh.i18n import _
|
||||||
|
from aodh.storage import models
|
||||||
from aodh import utils
|
from aodh import utils
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
@ -339,7 +339,7 @@ class QueryAlarmHistoryController(rest.RestController):
|
|||||||
rbac.enforce('query_alarm_history', pecan.request)
|
rbac.enforce('query_alarm_history', pecan.request)
|
||||||
|
|
||||||
query = ValidatedComplexQuery(body,
|
query = ValidatedComplexQuery(body,
|
||||||
alarm_models.AlarmChange)
|
models.AlarmChange)
|
||||||
query.validate(visibility_field="on_behalf_of")
|
query.validate(visibility_field="on_behalf_of")
|
||||||
conn = pecan.request.alarm_storage_conn
|
conn = pecan.request.alarm_storage_conn
|
||||||
return [alarms.AlarmChange.from_db_model(s)
|
return [alarms.AlarmChange.from_db_model(s)
|
||||||
@ -362,7 +362,7 @@ class QueryAlarmsController(rest.RestController):
|
|||||||
rbac.enforce('query_alarm', pecan.request)
|
rbac.enforce('query_alarm', pecan.request)
|
||||||
|
|
||||||
query = ValidatedComplexQuery(body,
|
query = ValidatedComplexQuery(body,
|
||||||
alarm_models.Alarm)
|
models.Alarm)
|
||||||
query.validate(visibility_field="project_id")
|
query.validate(visibility_field="project_id")
|
||||||
conn = pecan.request.alarm_storage_conn
|
conn = pecan.request.alarm_storage_conn
|
||||||
return [alarms.Alarm.from_db_model(s)
|
return [alarms.Alarm.from_db_model(s)
|
||||||
|
@ -19,6 +19,8 @@ import inspect
|
|||||||
|
|
||||||
import six
|
import six
|
||||||
|
|
||||||
|
import aodh
|
||||||
|
|
||||||
|
|
||||||
class Model(object):
|
class Model(object):
|
||||||
"""Base class for storage API models."""
|
"""Base class for storage API models."""
|
||||||
@ -46,3 +48,152 @@ class Model(object):
|
|||||||
def get_field_names(cls):
|
def get_field_names(cls):
|
||||||
fields = inspect.getargspec(cls.__init__)[0]
|
fields = inspect.getargspec(cls.__init__)[0]
|
||||||
return set(fields) - set(["self"])
|
return set(fields) - set(["self"])
|
||||||
|
|
||||||
|
|
||||||
|
class Connection(object):
|
||||||
|
"""Base class for alarm storage system connections."""
|
||||||
|
|
||||||
|
# A dictionary representing the capabilities of this driver.
|
||||||
|
CAPABILITIES = {
|
||||||
|
'alarms': {'query': {'simple': False,
|
||||||
|
'complex': False},
|
||||||
|
'history': {'query': {'simple': False,
|
||||||
|
'complex': False}}},
|
||||||
|
}
|
||||||
|
|
||||||
|
STORAGE_CAPABILITIES = {
|
||||||
|
'storage': {'production_ready': False},
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self, url):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def upgrade():
|
||||||
|
"""Migrate the database to `version` or the most recent version."""
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_alarms(name=None, user=None, state=None, meter=None,
|
||||||
|
project=None, enabled=None, alarm_id=None,
|
||||||
|
alarm_type=None, severity=None):
|
||||||
|
"""Yields a lists of alarms that match filters.
|
||||||
|
|
||||||
|
:param name: Optional name for alarm.
|
||||||
|
:param user: Optional ID for user that owns the resource.
|
||||||
|
:param state: Optional string for alarm state.
|
||||||
|
:param meter: Optional string for alarms associated with meter.
|
||||||
|
:param project: Optional ID for project that owns the resource.
|
||||||
|
:param enabled: Optional boolean to list disable alarm.
|
||||||
|
:param alarm_id: Optional alarm_id to return one alarm.
|
||||||
|
:param alarm_type: Optional alarm type.
|
||||||
|
:parmr severity: Optional alarm severity
|
||||||
|
"""
|
||||||
|
raise aodh.NotImplementedError('Alarms not implemented')
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def create_alarm(alarm):
|
||||||
|
"""Create an alarm. Returns the alarm as created.
|
||||||
|
|
||||||
|
:param alarm: The alarm to create.
|
||||||
|
"""
|
||||||
|
raise aodh.NotImplementedError('Alarms not implemented')
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def update_alarm(alarm):
|
||||||
|
"""Update alarm."""
|
||||||
|
raise aodh.NotImplementedError('Alarms not implemented')
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def delete_alarm(alarm_id):
|
||||||
|
"""Delete an alarm."""
|
||||||
|
raise aodh.NotImplementedError('Alarms not implemented')
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_alarm_changes(alarm_id, on_behalf_of,
|
||||||
|
user=None, project=None, alarm_type=None,
|
||||||
|
severity=None, start_timestamp=None,
|
||||||
|
start_timestamp_op=None, end_timestamp=None,
|
||||||
|
end_timestamp_op=None):
|
||||||
|
"""Yields list of AlarmChanges describing alarm history
|
||||||
|
|
||||||
|
Changes are always sorted in reverse order of occurrence, given
|
||||||
|
the importance of currency.
|
||||||
|
|
||||||
|
Segregation for non-administrative users is done on the basis
|
||||||
|
of the on_behalf_of parameter. This allows such users to have
|
||||||
|
visibility on both the changes initiated by themselves directly
|
||||||
|
(generally creation, rule changes, or deletion) and also on those
|
||||||
|
changes initiated on their behalf by the alarming service (state
|
||||||
|
transitions after alarm thresholds are crossed).
|
||||||
|
|
||||||
|
:param alarm_id: ID of alarm to return changes for
|
||||||
|
:param on_behalf_of: ID of tenant to scope changes query (None for
|
||||||
|
administrative user, indicating all projects)
|
||||||
|
:param user: Optional ID of user to return changes for
|
||||||
|
:param project: Optional ID of project to return changes for
|
||||||
|
:param alarm_type: Optional change type
|
||||||
|
:param severity: Optional change severity
|
||||||
|
:param start_timestamp: Optional modified timestamp start range
|
||||||
|
:param start_timestamp_op: Optional timestamp start range operation
|
||||||
|
:param end_timestamp: Optional modified timestamp end range
|
||||||
|
:param end_timestamp_op: Optional timestamp end range operation
|
||||||
|
"""
|
||||||
|
raise aodh.NotImplementedError('Alarm history not implemented')
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def record_alarm_change(alarm_change):
|
||||||
|
"""Record alarm change event."""
|
||||||
|
raise aodh.NotImplementedError('Alarm history not implemented')
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def clear():
|
||||||
|
"""Clear database."""
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def query_alarms(filter_expr=None, orderby=None, limit=None):
|
||||||
|
"""Return an iterable of model.Alarm objects.
|
||||||
|
|
||||||
|
:param filter_expr: Filter expression for query.
|
||||||
|
:param orderby: List of field name and direction pairs for order by.
|
||||||
|
:param limit: Maximum number of results to return.
|
||||||
|
"""
|
||||||
|
|
||||||
|
raise aodh.NotImplementedError('Complex query for alarms '
|
||||||
|
'is not implemented.')
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def query_alarm_history(filter_expr=None, orderby=None, limit=None):
|
||||||
|
"""Return an iterable of model.AlarmChange objects.
|
||||||
|
|
||||||
|
:param filter_expr: Filter expression for query.
|
||||||
|
:param orderby: List of field name and direction pairs for order by.
|
||||||
|
:param limit: Maximum number of results to return.
|
||||||
|
"""
|
||||||
|
|
||||||
|
raise aodh.NotImplementedError('Complex query for alarms '
|
||||||
|
'history is not implemented.')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_capabilities(cls):
|
||||||
|
"""Return an dictionary with the capabilities of each driver."""
|
||||||
|
return cls.CAPABILITIES
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_storage_capabilities(cls):
|
||||||
|
"""Return a dictionary representing the performance capabilities.
|
||||||
|
|
||||||
|
This is needed to evaluate the performance of each driver.
|
||||||
|
"""
|
||||||
|
return cls.STORAGE_CAPABILITIES
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def clear_expired_alarm_history_data(alarm_history_ttl):
|
||||||
|
"""Clear expired alarm history data from the backend storage system.
|
||||||
|
|
||||||
|
Clearing occurs according to the time-to-live.
|
||||||
|
|
||||||
|
:param alarm_history_ttl: Number of seconds to keep alarm history
|
||||||
|
records for.
|
||||||
|
"""
|
||||||
|
raise aodh.NotImplementedError('Clearing alarm history '
|
||||||
|
'not implemented')
|
||||||
|
@ -21,9 +21,9 @@ from __future__ import division
|
|||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
import pymongo
|
import pymongo
|
||||||
|
|
||||||
from aodh.alarm.storage import pymongo_base
|
|
||||||
from aodh import storage
|
from aodh import storage
|
||||||
from aodh.storage.mongo import utils as pymongo_utils
|
from aodh.storage.mongo import utils as pymongo_utils
|
||||||
|
from aodh.storage import pymongo_base
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
|
|
@ -17,12 +17,12 @@ import operator
|
|||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
|
|
||||||
import aodh
|
import aodh
|
||||||
from aodh.alarm.storage import base
|
|
||||||
from aodh.alarm.storage import models
|
|
||||||
from aodh.i18n import _
|
from aodh.i18n import _
|
||||||
|
from aodh.storage import base
|
||||||
from aodh.storage.hbase import base as hbase_base
|
from aodh.storage.hbase import base as hbase_base
|
||||||
from aodh.storage.hbase import migration as hbase_migration
|
from aodh.storage.hbase import migration as hbase_migration
|
||||||
from aodh.storage.hbase import utils as hbase_utils
|
from aodh.storage.hbase import utils as hbase_utils
|
||||||
|
from aodh.storage import models
|
||||||
from aodh import utils
|
from aodh import utils
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
@ -17,8 +17,8 @@
|
|||||||
|
|
||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
|
|
||||||
from aodh.alarm.storage import base
|
|
||||||
from aodh.i18n import _LI
|
from aodh.i18n import _LI
|
||||||
|
from aodh.storage import base
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
|
|
@ -24,11 +24,11 @@ from oslo_config import cfg
|
|||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
import pymongo
|
import pymongo
|
||||||
|
|
||||||
from aodh.alarm.storage import pymongo_base
|
|
||||||
from aodh import storage
|
from aodh import storage
|
||||||
from aodh.storage.mongo import utils as pymongo_utils
|
from aodh.storage.mongo import utils as pymongo_utils
|
||||||
|
from aodh.storage import pymongo_base
|
||||||
|
|
||||||
cfg.CONF.import_opt('alarm_history_time_to_live', 'aodh.alarm.storage',
|
cfg.CONF.import_opt('alarm_history_time_to_live', 'aodh.storage',
|
||||||
group="database")
|
group="database")
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
@ -21,9 +21,9 @@ from oslo_log import log
|
|||||||
from oslo_utils import timeutils
|
from oslo_utils import timeutils
|
||||||
from sqlalchemy import desc
|
from sqlalchemy import desc
|
||||||
|
|
||||||
from aodh.alarm.storage import base
|
|
||||||
from aodh.alarm.storage import models as alarm_api_models
|
|
||||||
from aodh.i18n import _LI
|
from aodh.i18n import _LI
|
||||||
|
from aodh.storage import base
|
||||||
|
from aodh.storage import models as alarm_api_models
|
||||||
from aodh.storage.sqlalchemy import models
|
from aodh.storage.sqlalchemy import models
|
||||||
from aodh.storage.sqlalchemy import utils as sql_utils
|
from aodh.storage.sqlalchemy import utils as sql_utils
|
||||||
from aodh import utils
|
from aodh import utils
|
@ -21,8 +21,8 @@
|
|||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
import pymongo
|
import pymongo
|
||||||
|
|
||||||
from aodh.alarm.storage import base
|
from aodh.storage import base
|
||||||
from aodh.alarm.storage import models
|
from aodh.storage import models
|
||||||
from aodh.storage.mongo import utils as pymongo_utils
|
from aodh.storage.mongo import utils as pymongo_utils
|
||||||
from aodh import utils
|
from aodh import utils
|
||||||
|
|
@ -28,7 +28,7 @@ from oslo_utils import timeutils
|
|||||||
import pytz
|
import pytz
|
||||||
|
|
||||||
from aodh.alarm.evaluator import combination
|
from aodh.alarm.evaluator import combination
|
||||||
from aodh.alarm.storage import models
|
from aodh.storage import models
|
||||||
from aodh.tests.alarm.evaluator import base
|
from aodh.tests.alarm.evaluator import base
|
||||||
from aodh.tests import constants
|
from aodh.tests import constants
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ import six
|
|||||||
from six import moves
|
from six import moves
|
||||||
|
|
||||||
from aodh.alarm.evaluator import gnocchi
|
from aodh.alarm.evaluator import gnocchi
|
||||||
from aodh.alarm.storage import models
|
from aodh.storage import models
|
||||||
from aodh.tests.alarm.evaluator import base
|
from aodh.tests.alarm.evaluator import base
|
||||||
from aodh.tests import constants
|
from aodh.tests import constants
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ import pytz
|
|||||||
from six import moves
|
from six import moves
|
||||||
|
|
||||||
from aodh.alarm.evaluator import threshold
|
from aodh.alarm.evaluator import threshold
|
||||||
from aodh.alarm.storage import models
|
from aodh.storage import models
|
||||||
from aodh.tests.alarm.evaluator import base
|
from aodh.tests.alarm.evaluator import base
|
||||||
from aodh.tests import constants
|
from aodh.tests import constants
|
||||||
|
|
||||||
|
@ -22,8 +22,8 @@ from oslo_config import fixture as fixture_config
|
|||||||
import six
|
import six
|
||||||
|
|
||||||
from aodh.alarm import rpc as rpc_alarm
|
from aodh.alarm import rpc as rpc_alarm
|
||||||
from aodh.alarm.storage import models
|
|
||||||
from aodh import messaging
|
from aodh import messaging
|
||||||
|
from aodh.storage import models
|
||||||
from aodh.tests import base as tests_base
|
from aodh.tests import base as tests_base
|
||||||
|
|
||||||
|
|
||||||
|
@ -25,8 +25,8 @@ import six
|
|||||||
from six import moves
|
from six import moves
|
||||||
import six.moves.urllib.parse as urlparse
|
import six.moves.urllib.parse as urlparse
|
||||||
|
|
||||||
from aodh.alarm.storage import models
|
|
||||||
from aodh import messaging
|
from aodh import messaging
|
||||||
|
from aodh.storage import models
|
||||||
from aodh.tests.api import v2
|
from aodh.tests.api import v2
|
||||||
from aodh.tests import constants
|
from aodh.tests import constants
|
||||||
from aodh.tests import db as tests_db
|
from aodh.tests import db as tests_db
|
||||||
|
@ -24,8 +24,8 @@ import mock
|
|||||||
from oslotest import base
|
from oslotest import base
|
||||||
import wsme
|
import wsme
|
||||||
|
|
||||||
from aodh.alarm.storage import models as alarm_models
|
|
||||||
from aodh.api.controllers.v2 import query
|
from aodh.api.controllers.v2 import query
|
||||||
|
from aodh.storage import models as alarm_models
|
||||||
|
|
||||||
|
|
||||||
class FakeComplexQuery(query.ValidatedComplexQuery):
|
class FakeComplexQuery(query.ValidatedComplexQuery):
|
||||||
|
@ -22,7 +22,7 @@ import datetime
|
|||||||
|
|
||||||
from oslo_utils import timeutils
|
from oslo_utils import timeutils
|
||||||
|
|
||||||
from aodh.alarm.storage import models
|
from aodh.storage import models
|
||||||
from aodh.tests.api import v2 as tests_api
|
from aodh.tests.api import v2 as tests_api
|
||||||
from aodh.tests import db as tests_db
|
from aodh.tests import db as tests_db
|
||||||
|
|
||||||
|
@ -23,10 +23,10 @@ from oslotest import base
|
|||||||
from oslotest import mockpatch
|
from oslotest import mockpatch
|
||||||
import wsme
|
import wsme
|
||||||
|
|
||||||
from aodh.alarm.storage import base as alarm_storage_base
|
|
||||||
from aodh.api.controllers.v2 import base as v2_base
|
from aodh.api.controllers.v2 import base as v2_base
|
||||||
from aodh.api.controllers.v2 import utils
|
from aodh.api.controllers.v2 import utils
|
||||||
from aodh import storage
|
from aodh import storage
|
||||||
|
from aodh.storage import base as alarm_storage_base
|
||||||
from aodh.tests import base as tests_base
|
from aodh.tests import base as tests_base
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,8 +19,8 @@ from oslo_config import fixture as fixture_config
|
|||||||
from oslotest import base
|
from oslotest import base
|
||||||
import retrying
|
import retrying
|
||||||
|
|
||||||
from aodh.alarm.storage import impl_log
|
|
||||||
from aodh import storage
|
from aodh import storage
|
||||||
|
from aodh.storage import impl_log
|
||||||
|
|
||||||
import six
|
import six
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from aodh.alarm.storage import impl_db2
|
from aodh.storage import impl_db2
|
||||||
from aodh.tests import base as test_base
|
from aodh.tests import base as test_base
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ except ImportError:
|
|||||||
import testtools.testcase
|
import testtools.testcase
|
||||||
raise testtools.testcase.TestSkipped("happybase is needed")
|
raise testtools.testcase.TestSkipped("happybase is needed")
|
||||||
|
|
||||||
from aodh.alarm.storage import impl_hbase
|
from aodh.storage import impl_hbase
|
||||||
from aodh.tests import base as test_base
|
from aodh.tests import base as test_base
|
||||||
from aodh.tests import db as tests_db
|
from aodh.tests import db as tests_db
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
"""
|
"""
|
||||||
from oslotest import base
|
from oslotest import base
|
||||||
|
|
||||||
from aodh.alarm.storage import impl_log
|
from aodh.storage import impl_log
|
||||||
|
|
||||||
|
|
||||||
class ConnectionTest(base.BaseTestCase):
|
class ConnectionTest(base.BaseTestCase):
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from aodh.alarm.storage import impl_mongodb as impl_mongodb
|
from aodh.storage import impl_mongodb
|
||||||
from aodh.tests import base as test_base
|
from aodh.tests import base as test_base
|
||||||
from aodh.tests import db as tests_db
|
from aodh.tests import db as tests_db
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from aodh.alarm.storage import impl_sqlalchemy as impl_sqla_alarm
|
from aodh.storage import impl_sqlalchemy as impl_sqla_alarm
|
||||||
from aodh.tests import base as test_base
|
from aodh.tests import base as test_base
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ import datetime
|
|||||||
import mock
|
import mock
|
||||||
from oslo_utils import timeutils
|
from oslo_utils import timeutils
|
||||||
|
|
||||||
from aodh.alarm.storage import models as alarm_models
|
from aodh.storage import models as alarm_models
|
||||||
from aodh.tests import constants
|
from aodh.tests import constants
|
||||||
from aodh.tests import db as tests_db
|
from aodh.tests import db as tests_db
|
||||||
|
|
||||||
|
14
setup.cfg
14
setup.cfg
@ -27,13 +27,13 @@ packages =
|
|||||||
|
|
||||||
[entry_points]
|
[entry_points]
|
||||||
aodh.alarm.storage =
|
aodh.alarm.storage =
|
||||||
log = aodh.alarm.storage.impl_log:Connection
|
log = aodh.storage.impl_log:Connection
|
||||||
mongodb = aodh.alarm.storage.impl_mongodb:Connection
|
mongodb = aodh.storage.impl_mongodb:Connection
|
||||||
mysql = aodh.alarm.storage.impl_sqlalchemy:Connection
|
mysql = aodh.storage.impl_sqlalchemy:Connection
|
||||||
postgresql = aodh.alarm.storage.impl_sqlalchemy:Connection
|
postgresql = aodh.storage.impl_sqlalchemy:Connection
|
||||||
sqlite = aodh.alarm.storage.impl_sqlalchemy:Connection
|
sqlite = aodh.storage.impl_sqlalchemy:Connection
|
||||||
hbase = aodh.alarm.storage.impl_hbase:Connection
|
hbase = aodh.storage.impl_hbase:Connection
|
||||||
db2 = aodh.alarm.storage.impl_db2:Connection
|
db2 = aodh.storage.impl_db2:Connection
|
||||||
|
|
||||||
aodh.alarm.rule =
|
aodh.alarm.rule =
|
||||||
threshold = aodh.api.controllers.v2.alarm_rules.threshold:AlarmThresholdRule
|
threshold = aodh.api.controllers.v2.alarm_rules.threshold:AlarmThresholdRule
|
||||||
|
Loading…
Reference in New Issue
Block a user