add create alarm
[doctor.git] / tests / alarm.py
1 ##############################################################################
2 # Copyright (c) 2017 ZTE Corporation and others.
3 #
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
9 from oslo_config import cfg
10
11 from identity_auth import get_identity_auth
12 from identity_auth import get_session
13 from os_clients import aodh_client
14 from os_clients import nova_client
15
16 OPTS = [
17     cfg.StrOpt('alarm_basename',
18                default='doctor_alarm',
19                help='the base name of alarm',
20                required=True),
21 ]
22
23
24 class Alarm(object):
25
26     def __init__(self, conf, log):
27         self.conf = conf
28         self.log = log
29         self.auth = get_identity_auth(username=self.conf.doctor_user,
30                                       password=self.conf.doctor_passwd,
31                                       project=self.conf.doctor_project)
32         self.aodh = \
33             aodh_client(conf.aodh_version,
34                         get_session(auth=self.auth))
35         self.nova = \
36             nova_client(conf.nova_version,
37                         get_session(auth=self.auth))
38         self._init_alarm_name()
39
40     def _init_alarm_name(self):
41         self.alarm_names = []
42         for i in range(0, self.conf.instance_count):
43             alarm_name = '%s%d' % (self.conf.alarm_basename, i)
44             self.alarm_names.append(alarm_name)
45
46     def create(self):
47         self.log.info('alarm create start......')
48
49         alarms = {alarm['name']: alarm for alarm in self.aodh.alarm.list()}
50         servers = \
51             {getattr(server, 'name'): server
52              for server in self.nova.servers.list()}
53
54         for i in range(0, self.conf.instance_count):
55             alarm_name = self.alarm_names[i]
56             if alarm_name in alarms:
57                 continue;
58             vm_name = '%s%d' % (self.conf.instance_basename, i)
59             vm_id = getattr(servers[vm_name], 'id')
60             alarm_request = dict(
61                 name=alarm_name,
62                 description=u'VM failure',
63                 enabled=True,
64                 alarm_actions=[u'http://%s:%d/failure'
65                                % (self.conf.consumer.ip,
66                                   self.conf.consumer.port)],
67                 repeat_actions=False,
68                 severity=u'moderate',
69                 type=u'event',
70                 event_rule=dict(
71                     event_type=u'compute.instance.update',
72                     query=[
73                         dict(field=u'traits.instance_id',
74                              type='',
75                              op=u'eq',
76                              value=vm_id),
77                         dict(field=u'traits.state',
78                              type='',
79                              op=u'eq',
80                              value=u'error')]))
81             self.aodh.alarm.create(alarm_request)
82
83         self.log.info('alarm create end......')
84
85     def delete(self):
86         self.log.info('alarm delete start.......')
87
88         alarms = {alarm['name']: alarm for alarm in self.aodh.alarm.list()}
89         for alarm_name in self.alarm_names:
90             if alarm_name in alarms:
91                 self.aodh.alarm.delete(alarms[alarm_name]['alarm_id'])
92
93         del self.alarm_names[:]
94
95         self.log.info('alarm delete end.......')