~ubuntu-branches/ubuntu/vivid/ceilometer/vivid

« back to all changes in this revision

Viewing changes to ceilometer/api/controllers/v2.py

  • Committer: Package Import Robot
  • Author(s): James Page, Corey Bryant, James Page
  • Date: 2015-02-19 14:59:07 UTC
  • mfrom: (1.2.3)
  • Revision ID: package-import@ubuntu.com-20150219145907-9jojybdsl64zcn14
Tags: 2015.1~b2-0ubuntu1
[ Corey Bryant ]
* New upstream release.
  - d/control: Align requirements with upstream.
  - d/p/skip-test.patch: Rebased.

[ James Page ]
* d/rules,d/p/skip-gabbi.patch: Skip tests that rely on python-gabbi until
  packaging and MIR is complete.

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
 
38
38
import croniter
39
39
import jsonschema
40
 
from oslo.config import cfg
41
 
from oslo.utils import netutils
42
 
from oslo.utils import strutils
43
 
from oslo.utils import timeutils
 
40
from oslo_config import cfg
 
41
from oslo_context import context
 
42
from oslo_utils import netutils
 
43
from oslo_utils import strutils
 
44
from oslo_utils import timeutils
44
45
import pecan
45
46
from pecan import rest
46
47
import pytz
50
51
import wsmeext.pecan as wsme_pecan
51
52
 
52
53
import ceilometer
53
 
from ceilometer.alarm import service as alarm_service
 
54
from ceilometer import alarm as ceilometer_alarm
54
55
from ceilometer.alarm.storage import models as alarm_models
55
56
from ceilometer.api import rbac
56
57
from ceilometer.event.storage import models as event_models
57
58
from ceilometer.i18n import _
58
59
from ceilometer import messaging
59
 
from ceilometer.openstack.common import context
60
60
from ceilometer.openstack.common import log
61
61
from ceilometer import sample
62
62
from ceilometer import storage
86
86
state_kind_enum = wtypes.Enum(str, *state_kind)
87
87
operation_kind = ('lt', 'le', 'eq', 'ne', 'ge', 'gt')
88
88
operation_kind_enum = wtypes.Enum(str, *operation_kind)
 
89
severity_kind = ["low", "moderate", "critical"]
 
90
severity_kind_enum = wtypes.Enum(str, *severity_kind)
89
91
 
90
92
 
91
93
class ClientSideError(wsme.exc.ClientSideError):
1540
1542
class ResourcesController(rest.RestController):
1541
1543
    """Works on resources."""
1542
1544
 
1543
 
    def _resource_links(self, resource_id, meter_links=1):
 
1545
    @staticmethod
 
1546
    def _resource_links(resource_id, meter_links=1):
1544
1547
        links = [_make_link('self', pecan.request.host_url, 'resources',
1545
1548
                            resource_id)]
1546
1549
        if meter_links:
1831
1834
    state_timestamp = datetime.datetime
1832
1835
    "The date of the last alarm state changed"
1833
1836
 
 
1837
    severity = AdvEnum('severity', str, *severity_kind,
 
1838
                       default='low')
 
1839
    "The severity of the alarm"
 
1840
 
1834
1841
    def __init__(self, rule=None, time_constraints=None, **kwargs):
1835
1842
        super(Alarm, self).__init__(**kwargs)
1836
1843
 
1888
1895
 
1889
1896
    @staticmethod
1890
1897
    def check_alarm_actions(alarm):
1891
 
        actions_schema = alarm_service.AlarmNotifierService.notifiers_schemas
 
1898
        actions_schema = ceilometer_alarm.NOTIFIER_SCHEMAS
1892
1899
        for state in state_kind:
1893
1900
            actions_name = state.replace(" ", "_") + '_actions'
1894
1901
            actions = getattr(alarm, actions_name)
1919
1926
                   enabled=True,
1920
1927
                   timestamp=datetime.datetime.utcnow(),
1921
1928
                   state="ok",
 
1929
                   severity="moderate",
1922
1930
                   state_timestamp=datetime.datetime.utcnow(),
1923
1931
                   ok_actions=["http://site:8000/ok"],
1924
1932
                   alarm_actions=["http://site:8000/alarm"],
2050
2058
        now = timeutils.utcnow()
2051
2059
 
2052
2060
        data.alarm_id = self._id
 
2061
 
2053
2062
        user, project = rbac.get_limited_to(pecan.request.headers)
2054
2063
        if user:
2055
2064
            data.user_id = user
2064
2073
            data.state_timestamp = now
2065
2074
        else:
2066
2075
            data.state_timestamp = alarm_in.state_timestamp
2067
 
 
 
2076
        alarm_in.severity = data.severity
2068
2077
        # make sure alarms are unique by name per project.
2069
2078
        if alarm_in.name != data.name:
2070
2079
            alarms = list(self.conn.get_alarms(name=data.name,
2175
2184
    def _lookup(self, alarm_id, *remainder):
2176
2185
        return AlarmController(alarm_id), remainder
2177
2186
 
2178
 
    def _record_creation(self, conn, data, alarm_id, now):
 
2187
    @staticmethod
 
2188
    def _record_creation(conn, data, alarm_id, now):
2179
2189
        if not cfg.CONF.alarm.record_history:
2180
2190
            return
2181
2191
        type = alarm_models.AlarmChange.CREATION
2308
2318
                                             self._get_value_as_type(),
2309
2319
                                             self.type)
2310
2320
 
 
2321
    @classmethod
 
2322
    def sample(cls):
 
2323
        return cls(field="event_type",
 
2324
                   type="string",
 
2325
                   op="eq",
 
2326
                   value="compute.instance.create.start")
 
2327
 
2311
2328
 
2312
2329
class Trait(_Base):
2313
2330
    """A Trait associated with an event."""
2372
2389
    def sample(cls):
2373
2390
        return cls(
2374
2391
            event_type='compute.instance.update',
2375
 
            generated='2013-11-11T20:00:00',
 
2392
            generated=datetime.datetime(2015, 1, 1, 12, 30, 59, 123456),
2376
2393
            message_id='94834db1-8f1b-404d-b2ec-c35901f1b7f0',
2377
2394
            traits={
2378
 
                'request_id': 'req-4e2d67b8-31a4-48af-bb2f-9df72a353a72',
2379
 
                'service': 'conductor.tem-devstack-01',
2380
 
                'tenant_id': '7f13f2b17917463b9ee21aa92c4b36d6'
 
2395
                Trait(name='request_id',
 
2396
                      value='req-4e2d67b8-31a4-48af-bb2f-9df72a353a72'),
 
2397
                Trait(name='service',
 
2398
                      value='conductor.tem-devstack-01'),
 
2399
                Trait(name='tenant_id',
 
2400
                      value='7f13f2b17917463b9ee21aa92c4b36d6')
2381
2401
            }
2382
2402
        )
2383
2403
 
2463
2483
 
2464
2484
    traits = TraitsController()
2465
2485
 
2466
 
    @pecan.expose()
 
2486
    @requires_admin
 
2487
    @wsme_pecan.wsexpose(None, wtypes.text)
2467
2488
    def get_one(self, event_type):
 
2489
        """Unused API, will always return 404.
 
2490
 
 
2491
        :param event_type: A event type
 
2492
        """
2468
2493
        pecan.abort(404)
2469
2494
 
2470
2495
    @requires_admin