1 ##############################################################################
2 # Copyright (c) 2017 ZTE Corporation and others.
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
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
17 cfg.StrOpt('alarm_basename',
18 default='doctor_alarm',
19 help='the base name of alarm',
26 def __init__(self, conf, log):
29 self.auth = get_identity_auth(username=self.conf.doctor_user,
30 password=self.conf.doctor_passwd,
31 project=self.conf.doctor_project)
33 aodh_client(conf.aodh_version,
34 get_session(auth=self.auth))
36 nova_client(conf.nova_version,
37 get_session(auth=self.auth))
38 self._init_alarm_name()
40 def _init_alarm_name(self):
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)
47 self.log.info('alarm create start......')
49 alarms = {alarm['name']: alarm for alarm in self.aodh.alarm.list()}
51 {getattr(server, 'name'): server
52 for server in self.nova.servers.list()}
54 for i in range(0, self.conf.instance_count):
55 alarm_name = self.alarm_names[i]
56 if alarm_name in alarms:
58 vm_name = '%s%d' % (self.conf.instance_basename, i)
59 vm_id = getattr(servers[vm_name], 'id')
62 description=u'VM failure',
64 alarm_actions=[u'http://%s:%d/failure'
65 % (self.conf.consumer.ip,
66 self.conf.consumer.port)],
71 event_type=u'compute.instance.update',
73 dict(field=u'traits.instance_id',
77 dict(field=u'traits.state',
81 self.aodh.alarm.create(alarm_request)
83 self.log.info('alarm create end......')
86 self.log.info('alarm delete start.......')
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'])
93 del self.alarm_names[:]
95 self.log.info('alarm delete end.......')