blob: 06a2eb7bd9b7a38427c1538d596313b02a612bdf [file] [log] [blame]
rdudyalab086cf32016-08-11 00:07:45 -04001#
2# Copyright 2012 New Dream Network, LLC (DreamHost)
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15"""Handler for producing network counter messages from Neutron notification
16 events.
17
18"""
19
20import oslo_messaging
21from oslo_config import cfg
22
23from ceilometer.agent import plugin_base
24from oslo_log import log
25from ceilometer import sample
26
27OPTS = [
28 cfg.StrOpt('vsgservice_control_exchange',
29 default='vcpeservice',
30 help="Exchange name for VCPE notifications."),
31]
32
33cfg.CONF.register_opts(OPTS)
34
35LOG = log.getLogger(__name__)
36
37
38class VCPENotificationBase(plugin_base.NotificationBase):
39
40 resource_name = None
41
42 def get_targets(self,conf):
43 """Return a sequence of oslo.messaging.Target
44
45 This sequence is defining the exchange and topics to be connected for
46 this plugin.
47 """
48 LOG.info("SRIKANTH: get_targets for VCPE Notification Listener")
49 return [oslo_messaging.Target(topic=topic,
50 exchange=conf.vsgservice_control_exchange)
51 for topic in self.get_notification_topics(conf)]
52
53class VCPENotification(VCPENotificationBase):
54
55 resource_name = None
56 event_types = ['vcpe$']
57
58 def process_notification(self, message):
59 LOG.info('SRIKANTH: Received VCPE notification: vcpe_id=%(vcpe_id)s' % {'vcpe_id': message['payload']['vcpe_id']})
60 yield sample.Sample.from_notification(
61 name='vsg',
62 type=sample.TYPE_GAUGE,
63 unit='vsg',
64 volume=1,
65 user_id=message['payload']['user_id'],
66 project_id=message['payload']['tenant_id'],
67 resource_id=message['payload']['vcpe_id'],
68 message=message)
69
70class VCPEComputeStatistics(VCPENotificationBase):
71
72 resource_name = None
73 event_types = ['vcpe.compute.stats']
74
75 def process_notification(self, message):
76 LOG.info('SRIKANTH: Received VCPE event vcpe.compute.stats')
77 if message['payload']:
78 if 'cpu_util' in message['payload']:
79 yield sample.Sample.from_notification(
80 name='cpu_util',
81 type=sample.TYPE_GAUGE,
82 unit='%',
83 volume=float(message['payload']['cpu_util']),
84 user_id=message['payload']['user_id'],
85 project_id=message['payload']['tenant_id'],
86 resource_id=message['payload']['vcpe_id'],
87 message=message)
88 if 'memory' in message['payload']:
89 yield sample.Sample.from_notification(
90 name='memory',
91 type=sample.TYPE_GAUGE,
92 unit='MB',
93 volume=float(message['payload']['memory']),
94 user_id=message['payload']['user_id'],
95 project_id=message['payload']['tenant_id'],
96 resource_id=message['payload']['vcpe_id'],
97 message=message)
98 if 'memory_usage' in message['payload']:
99 yield sample.Sample.from_notification(
100 name='memory.usage',
101 type=sample.TYPE_GAUGE,
102 unit='MB',
103 volume=float(message['payload']['memory_usage']),
104 user_id=message['payload']['user_id'],
105 project_id=message['payload']['tenant_id'],
106 resource_id=message['payload']['vcpe_id'],
107 message=message)
108 if 'network_stats' in message['payload']:
109 for intf in message['payload']['network_stats']:
110 resource_id = message['payload']['vcpe_id'] + '-' + intf['intf']
111 if 'rx_bytes' in intf:
112 yield sample.Sample.from_notification(
113 name='network.incoming.bytes',
114 type=sample.TYPE_CUMULATIVE,
115 unit='B',
116 volume=float(intf['rx_bytes']),
117 user_id=message['payload']['user_id'],
118 project_id=message['payload']['tenant_id'],
119 resource_id=resource_id,
120 message=message)
121 if 'tx_bytes' in intf:
122 yield sample.Sample.from_notification(
123 name='network.outgoing.bytes',
124 type=sample.TYPE_CUMULATIVE,
125 unit='B',
126 volume=float(intf['tx_bytes']),
127 user_id=message['payload']['user_id'],
128 project_id=message['payload']['tenant_id'],
129 resource_id=resource_id,
130 message=message)
131 if 'rx_packets' in intf:
132 yield sample.Sample.from_notification(
133 name='network.incoming.packets',
134 type=sample.TYPE_CUMULATIVE,
135 unit='packet',
136 volume=float(intf['rx_packets']),
137 user_id=message['payload']['user_id'],
138 project_id=message['payload']['tenant_id'],
139 resource_id=resource_id,
140 message=message)
141 if 'tx_packets' in intf:
142 yield sample.Sample.from_notification(
143 name='network.outgoing.packets',
144 type=sample.TYPE_CUMULATIVE,
145 unit='packet',
146 volume=float(intf['tx_packets']),
147 user_id=message['payload']['user_id'],
148 project_id=message['payload']['tenant_id'],
149 resource_id=resource_id,
150 message=message)
151
152class VCPEDNSCacheSize(VCPENotificationBase):
153
154 resource_name = None
155 event_types = ['vcpe.dns.cache.size']
156
157 def process_notification(self, message):
158 LOG.info('SRIKANTH: Received VCPE cache.size notification')
159 yield sample.Sample.from_notification(
160 name='vsg.dns.cache.size',
161 type=sample.TYPE_GAUGE,
162 unit='entries',
163 volume=float(message['payload']['cache_size']),
164 user_id=message['payload']['user_id'],
165 project_id=message['payload']['tenant_id'],
166 resource_id=message['payload']['vcpe_id'],
167 message=message)
168
169class VCPEDNSTotalInsertedEntries(VCPENotificationBase):
170
171 resource_name = None
172 event_types = ['vcpe.dns.total_instered_entries']
173
174 def process_notification(self, message):
175 LOG.info('SRIKANTH: Received VCPE total_instered_entries notification')
176 yield sample.Sample.from_notification(
177 name='vsg.dns.total_instered_entries',
178 type=sample.TYPE_CUMULATIVE,
179 unit='entries',
180 volume=float(message['payload']['total_instered_entries']),
181 user_id=message['payload']['user_id'],
182 project_id=message['payload']['tenant_id'],
183 resource_id=message['payload']['vcpe_id'],
184 message=message)
185
186class VCPEDNSReplacedUnexpiredEntries(VCPENotificationBase):
187
188 resource_name = None
189 event_types = ['vcpe.dns.replaced_unexpired_entries']
190
191 def process_notification(self, message):
192 LOG.info('SRIKANTH: Received VCPE replaced_unexpired_entries notification')
193 yield sample.Sample.from_notification(
194 name='vsg.dns.replaced_unexpired_entries',
195 type=sample.TYPE_CUMULATIVE,
196 unit='entries',
197 volume=float(message['payload']['replaced_unexpired_entries']),
198 user_id=message['payload']['user_id'],
199 project_id=message['payload']['tenant_id'],
200 resource_id=message['payload']['vcpe_id'],
201 message=message)
202
203class VCPEDNSQueriesForwarded(VCPENotificationBase):
204
205 resource_name = None
206 event_types = ['vcpe.dns.queries_forwarded']
207
208 def process_notification(self, message):
209 LOG.info('SRIKANTH: Received VCPE queries_forwarded notification')
210 yield sample.Sample.from_notification(
211 name='vsg.dns.queries_forwarded',
212 type=sample.TYPE_CUMULATIVE,
213 unit='queries',
214 volume=float(message['payload']['queries_forwarded']),
215 user_id=message['payload']['user_id'],
216 project_id=message['payload']['tenant_id'],
217 resource_id=message['payload']['vcpe_id'],
218 message=message)
219
220class VCPEDNSQueriesAnsweredLocally(VCPENotificationBase):
221
222 resource_name = None
223 event_types = ['vcpe.dns.queries_answered_locally']
224
225 def process_notification(self, message):
226 LOG.info('SRIKANTH: Received VCPE queries_answered_locally notification')
227 yield sample.Sample.from_notification(
228 name='vsg.dns.queries_answered_locally',
229 type=sample.TYPE_CUMULATIVE,
230 unit='queries',
231 volume=float(message['payload']['queries_answered_locally']),
232 user_id=message['payload']['user_id'],
233 project_id=message['payload']['tenant_id'],
234 resource_id=message['payload']['vcpe_id'],
235 message=message)
236
237class VCPEDNSServerQueriesSent(VCPENotificationBase):
238
239 resource_name = None
240 event_types = ['vcpe.dns.server.queries_sent']
241
242 def process_notification(self, message):
243 LOG.info('SRIKANTH: Received VCPE server.queries_sent notification')
244 resource_id = message['payload']['vcpe_id'] + '-' + message['payload']['upstream_server']
245 yield sample.Sample.from_notification(
246 name='vsg.dns.server.queries_sent',
247 type=sample.TYPE_CUMULATIVE,
248 unit='queries',
249 volume=float(message['payload']['queries_sent']),
250 user_id=message['payload']['user_id'],
251 project_id=message['payload']['tenant_id'],
252 resource_id=resource_id,
253 message=message)
254
255class VCPEDNSServerQueriesFailed(VCPENotificationBase):
256
257 resource_name = None
258 event_types = ['vcpe.dns.server.queries_failed']
259
260 def process_notification(self, message):
261 LOG.info('SRIKANTH: Received VCPE server.queries_failed notification')
262 resource_id = message['payload']['vcpe_id'] + '-' + message['payload']['upstream_server']
263 yield sample.Sample.from_notification(
264 name='vsg.dns.server.queries_failed',
265 type=sample.TYPE_CUMULATIVE,
266 unit='queries',
267 volume=float(message['payload']['queries_failed']),
268 user_id=message['payload']['user_id'],
269 project_id=message['payload']['tenant_id'],
270 resource_id=resource_id,
271 message=message)
272