Skip to content

Commit

Permalink
Sandesh request to get alarm config in contrail-alarm-gen
Browse files Browse the repository at this point in the history
- Added sandesh request to get alarm configuration in
contrail-alarm-gen
- Added objectlog in alarm-gen to send configuration update on
CREATE/UPDATE/DELETE notifications

Change-Id: Iaa42ea0eed0eba6c71037cb0ea5b446806b39e43
Closes-Bug: #1616667
  • Loading branch information
Sundaresan Rajangam committed Oct 4, 2016
1 parent 35077c4 commit 989df01
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 8 deletions.
25 changes: 21 additions & 4 deletions src/opserver/alarmgen.py
Expand Up @@ -55,7 +55,8 @@
UVETableInfoReq, UVETableInfoResp, UVEObjectInfo, UVEStructInfo, \
UVETablePerfReq, UVETablePerfResp, UVETableInfo, UVETableCount, \
UVEAlarmStateMachineInfo, UVEAlarmState, UVEAlarmOperState,\
AlarmStateChangeTrace, UVEQTrace
AlarmStateChangeTrace, UVEQTrace, AlarmConfig, AlarmConfigRequest, \
AlarmConfigResponse

from sandesh.discovery.ttypes import CollectorTrace
from cpuinfo import CpuInfoData
Expand Down Expand Up @@ -950,8 +951,8 @@ def __init__(self, conf, test_logger=None):

# Create config handler to read/update alarm config
rabbitmq_params = self._conf.rabbitmq_params()
self._config_handler = AlarmGenConfigHandler(self._moduleid,
self._instance_id, self.config_log, self.disc,
self._config_handler = AlarmGenConfigHandler(self._sandesh,
self._moduleid, self._instance_id, self.config_log, self.disc,
self._conf.keystone_params(), rabbitmq_params, self.mgrs,
self.alarm_config_change_callback)
if rabbitmq_params['servers'] and self.disc:
Expand All @@ -965,6 +966,7 @@ def __init__(self, conf, test_logger=None):
UVETableAlarmReq.handle_request = self.handle_UVETableAlarmReq
UVETableInfoReq.handle_request = self.handle_UVETableInfoReq
UVETablePerfReq.handle_request = self.handle_UVETablePerfReq
AlarmConfigRequest.handle_request = self.handle_AlarmConfigRequest

def config_log(self, msg, level):
self._sandesh.logger().log(
Expand Down Expand Up @@ -1825,7 +1827,22 @@ def handle_UVETablePerfReq(self, req):
mr = True
resp.response(req.context(), mr)
np = np + 1


def handle_AlarmConfigRequest(self, req):
config_db = self._config_handler.config_db()
alarm_config_db = config_db.get('alarm', {})
alarms = []
if req.name is not None:
alarm_config = alarm_config_db.get(req.name)
alarm_config_db = {req.name: alarm_config} if alarm_config else {}
for name, config in alarm_config_db.iteritems():
config_dict = {k: json.dumps(v) for k, v in \
self._config_handler.obj_to_dict(config).iteritems()}
alarms.append(AlarmConfig(config_dict))
res = AlarmConfigResponse(alarms)
res.response(req.context())
# end handle_AlarmConfigRequest

def partition_change(self, partno, enl):
"""
Call this function when getting or giving up
Expand Down
15 changes: 12 additions & 3 deletions src/opserver/alarmgen_config_handler.py
Expand Up @@ -4,11 +4,13 @@


import socket
import json

from vnc_api.gen.resource_client import Alarm
from vnc_api.gen.resource_xsd import IdPermsType, AlarmExpression, \
AlarmOperand2, AlarmAndList, AlarmOrList, UveKeysType
from pysandesh.gen_py.sandesh.ttypes import SandeshLevel
from sandesh.alarmgen_ctrl.ttypes import AlarmgenConfigLog
from config_handler import ConfigHandler
from opserver_util import camel_case_to_hyphen, inverse_dict
from plugins.alarm_base import AlarmBase
Expand All @@ -20,13 +22,14 @@

class AlarmGenConfigHandler(ConfigHandler):

def __init__(self, module_id, instance_id, logger,
def __init__(self, sandesh_instance, module_id, instance_id, logger,
discovery_client, keystone_info, rabbitmq_info,
alarm_plugins, alarm_config_change_callback):
service_id = socket.gethostname()+':'+module_id+':'+instance_id
config_types = ['global-system-config', 'alarm']
super(AlarmGenConfigHandler, self).__init__(service_id, logger,
discovery_client, keystone_info, rabbitmq_info, config_types)
self._sandesh_instance = sandesh_instance
self._alarm_plugins = alarm_plugins
self._alarm_config_change_callback = alarm_config_change_callback
self._inbuilt_alarms = {}
Expand Down Expand Up @@ -133,8 +136,14 @@ def _create_inbuilt_alarms_config(self):

def _handle_config_update(self, config_type, fq_name, config_obj,
operation):
self._logger('Handle config %s for %s:%s' % (operation, config_type,
fq_name), SandeshLevel.SYS_INFO)
# Log config update
config_dict = None
if config_obj is not None:
config_dict = {k: json.dumps(v) for k, v in \
self.obj_to_dict(config_obj).iteritems()}
alarmgen_config_log = AlarmgenConfigLog(fq_name, config_type,
operation, config_dict, sandesh=self._sandesh_instance)
alarmgen_config_log.send(sandesh=self._sandesh_instance)
if not self._config_db.get(config_type):
self._config_db[config_type] = {}
alarm_config_change_map = {}
Expand Down
27 changes: 27 additions & 0 deletions src/opserver/alarmgen_ctrl.sandesh
Expand Up @@ -240,4 +240,31 @@ trace sandesh UVEQTrace {
3: list<string> uves
}

/**
* @description: objectlog to send configuration update received from config-node
* @object: analytics-node
*/
objectlog sandesh AlarmgenConfigLog {
1: string name (key="ObjectCollectorInfo")
2: string config_type
3: string operation
4: map<string, string> config
}

struct AlarmConfig {
1: map<string, string> config
}

/**
* @description: sandesh request to get alarm configuration
*/
request sandesh AlarmConfigRequest {
1: optional string name
}

/**
* @description: sandesh response to send alarm configuration
*/
response sandesh AlarmConfigResponse {
1: list<AlarmConfig> alarms
}
11 changes: 11 additions & 0 deletions src/opserver/config_handler.py
Expand Up @@ -4,6 +4,7 @@


import gevent
import json
from pprint import pformat

from vnc_api.vnc_api import VncApi
Expand Down Expand Up @@ -55,6 +56,16 @@ def stop(self):
self._api_client_connection_task.kill()
# end stop

def obj_to_dict(self, obj):
def to_json(obj):
if hasattr(obj, 'serialize_to_json'):
return obj.serialize_to_json()
else:
return dict((k, v) for k, v in obj.__dict__.iteritems())

return json.loads(json.dumps(obj, default=to_json))
# end obj_to_dict

# Private methods

def _fqname_to_str(self, fq_name):
Expand Down
4 changes: 3 additions & 1 deletion src/opserver/test/test_alarmgen_config_handler.py
Expand Up @@ -636,8 +636,10 @@ def test_handle_config_update(self):
),
]

sandesh_instance = mock.MagicMock()
mock_alarm_config_change_callback = mock.MagicMock()
alarmgen_config_handler = AlarmGenConfigHandler(module_id='test',
alarmgen_config_handler = AlarmGenConfigHandler(
sandesh_instance=sandesh_instance, module_id='test',
instance_id='0', logger=self._logger, discovery_client=None,
keystone_info=None, rabbitmq_info=None, alarm_plugins={},
alarm_config_change_callback=mock_alarm_config_change_callback)
Expand Down

0 comments on commit 989df01

Please sign in to comment.