d7330d0f44
Primary reason for this change was to update the spec and setup files from basic setuptools to use pbr This allows the autogenerated /usr/bin/system file to directly call the main method without using pkg-resources. This will provide a performance improvement of .5 seconds per CLI call, once the other pkg_resources issues are resolved Second reason for this change was to wire in the tox unit tests. This also includes pep8, pylint and coverage. Currently pep8 does not perform the 80 char limit check Currently pylint still reports some issues This should not affect the RPM names being generated or otherwise affect patching or upgrades. Change-Id: I9f14c9216fdcc63930a4b2849102b58442706144
243 lines
9.0 KiB
Python
243 lines
9.0 KiB
Python
#!/usr/bin/env python
|
|
#
|
|
# Copyright (c) 2013-2015 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
|
|
|
# All Rights Reserved.
|
|
#
|
|
|
|
from cgtsclient.common import utils
|
|
from cgtsclient import exc
|
|
from cgtsclient.v1 import ihost as ihost_utils
|
|
from cgtsclient.v1 import isensorgroup as isensorgroup_utils
|
|
from collections import OrderedDict
|
|
|
|
|
|
def _print_isensorgroup_show(isensorgroup):
|
|
fields = ['uuid', 'sensorgroupname', 'path', 'sensortype', 'datatype',
|
|
'audit_interval_group', 'algorithm', 'state',
|
|
'possible_states', 'actions_critical_choices',
|
|
'actions_major_choices', 'actions_minor_choices',
|
|
'actions_minor_group',
|
|
'actions_major_group',
|
|
'actions_critical_group',
|
|
'record_ttl',
|
|
'sensors',
|
|
'suppress',
|
|
'created_at', 'updated_at']
|
|
|
|
fields_analog = ['unit_base_group', 'unit_modifier_group',
|
|
'unit_rate_group',
|
|
't_minor_lower_group', 't_minor_upper_group',
|
|
't_major_lower_group', 't_major_upper_group',
|
|
't_critical_lower_group', 't_critical_upper_group']
|
|
|
|
labels = ['uuid', 'sensorgroupname', 'path', 'sensortype', 'datatype',
|
|
'audit_interval_group', 'algorithm', 'state',
|
|
'possible_states', 'actions_critical_choices',
|
|
'actions_major_choices', 'actions_minor_choices',
|
|
'actions_minor_group', 'actions_major_group',
|
|
'actions_critical_group',
|
|
'record_ttl',
|
|
'sensors',
|
|
'suppress',
|
|
'created_at', 'updated_at']
|
|
|
|
labels_analog = ['unit_base_group', 'unit_modifier_group',
|
|
'unit_rate_group',
|
|
't_minor_lower_group', 't_minor_upper_group',
|
|
't_major_lower_group', 't_major_upper_group',
|
|
't_critical_lower_group', 't_critical_upper_group']
|
|
|
|
datatype = getattr(isensorgroup, 'datatype') or ""
|
|
if datatype == 'analog':
|
|
fields.extend(fields_analog)
|
|
labels.extend(labels_analog)
|
|
|
|
data = dict([(f, getattr(isensorgroup, f, '')) for f in fields])
|
|
ordereddata = OrderedDict(sorted(data.items(), key=lambda t: t[0]))
|
|
utils.print_dict(ordereddata, wrap=72)
|
|
|
|
|
|
def _find_sensorgroup(cc, ihost, sensorgroup_uuid):
|
|
sensorgroups = cc.isensorgroup.list(ihost.uuid)
|
|
for p in sensorgroups:
|
|
if p.uuid == sensorgroup_uuid:
|
|
break
|
|
else:
|
|
raise exc.CommandError('SensorGroup not found: host %s' % ihost.id)
|
|
return p
|
|
|
|
|
|
@utils.arg('hostnameorid',
|
|
metavar='<hostnameorid>',
|
|
help='Name or ID of host associated with this sensorgroup.')
|
|
@utils.arg('sensorgroupname',
|
|
metavar='<sensorgroupname>',
|
|
help='Name of the sensorgroup.')
|
|
@utils.arg('sensortype',
|
|
metavar='<sensortype>',
|
|
choices=['temperature', 'voltage', 'power',
|
|
'current', 'tachometer', 'pressure',
|
|
'airflow', 'watchdog'],
|
|
help='sensortype of the sensorgroup.')
|
|
@utils.arg('datatype',
|
|
metavar='<datatype>',
|
|
choices=['discrete', 'analog'],
|
|
help='datatype of sensorgroup: "discrete" or "analog"')
|
|
@utils.arg('-acrit', '--actions_critical_choices',
|
|
metavar='<actions_critical_choices>',
|
|
help="Configurable Critical severity Actions for this sensorgroup. CSV format.")
|
|
@utils.arg('-amaj', '--actions_major_choices',
|
|
metavar='<actions_major_choices>',
|
|
help="Configurable Major severity Actions for this sensorgroup. CSV format.")
|
|
@utils.arg('-amin', '--actions_minor_choices',
|
|
metavar='<actions_minor_choices>',
|
|
help="Configurable Minor severity Actions for this sensorgroup. CSV format.")
|
|
@utils.arg('-m', '--actions_major_group',
|
|
metavar='<actions_major_group>',
|
|
help='Major Actions of the sensorgroup. CSV format.')
|
|
@utils.arg('-c', '--actions_critical_group',
|
|
metavar='<actions_critical_group>',
|
|
help='Critical Actions of the sensorgroup. CSV format.')
|
|
@utils.arg('-tcrl', '--t_critical_lower_group',
|
|
metavar='<t_critical_lower_group>',
|
|
help='Critical Lower Threshold of the sensorgroup.')
|
|
@utils.arg('-tcru', '--t_critical_upper',
|
|
metavar='<t_critical_upper_group>',
|
|
help='Critical Upper Threshold of the sensorgroup.')
|
|
def donot_host_sensorgroup_add(cc, args):
|
|
"""Add a new sensorgroup to a host."""
|
|
field_list = ['sensorgroupname', 'sensortype', 'datatype',
|
|
'actions_minor', 'actions_major', 'actions_critical',
|
|
'actions_possible',
|
|
't_minor_lower', 't_minor_upper',
|
|
't_major_lower', 't_major_upper',
|
|
't_critical_lower', 't_critical_upper',
|
|
'suppress']
|
|
|
|
ihost = ihost_utils._find_ihost(cc, args.hostnameorid)
|
|
|
|
fields = dict((k, v) for (k, v) in vars(args).items()
|
|
if k in field_list and not (v is None))
|
|
|
|
fields['host_uuid'] = ihost.uuid
|
|
|
|
isensorgroup = cc.isensorgroup.create(**fields)
|
|
suuid = getattr(isensorgroup, 'uuid', '')
|
|
|
|
try:
|
|
isensorgroup = cc.isensorgroup.get(suuid)
|
|
except exc.HTTPNotFound:
|
|
raise exc.CommandError('Sensor not found: %s' % suuid)
|
|
else:
|
|
_print_isensorgroup_show(isensorgroup)
|
|
|
|
|
|
@utils.arg('hostnameorid',
|
|
metavar='<hostname or id>',
|
|
help="Name or ID of host")
|
|
@utils.arg('sensorgroup_uuid', metavar='<sensorgroup uuid>',
|
|
help="UUID of sensorgroup")
|
|
def do_host_sensorgroup_show(cc, args):
|
|
"""Show host sensor group attributes."""
|
|
ihost = ihost_utils._find_ihost(cc, args.hostnameorid)
|
|
isensorgroup = _find_sensorgroup(cc, ihost, args.sensorgroup_uuid)
|
|
isensorgroup = cc.isensorgroup.get(args.sensorgroup_uuid)
|
|
|
|
isensorgroup_utils._get_sensors(cc, args.hostnameorid, isensorgroup)
|
|
|
|
_print_isensorgroup_show(isensorgroup)
|
|
|
|
|
|
@utils.arg('hostnameorid',
|
|
metavar='<hostname or id>',
|
|
help="Name or ID of host")
|
|
def do_host_sensorgroup_list(cc, args):
|
|
"""List sensor groups."""
|
|
|
|
ihost = ihost_utils._find_ihost(cc, args.hostnameorid)
|
|
|
|
isensorgroups = cc.isensorgroup.list(ihost.uuid)
|
|
|
|
for i in isensorgroups[:]:
|
|
isensorgroup_utils._get_sensors(cc, args.hostnameorid, i)
|
|
|
|
fields = ['uuid', 'sensorgroupname', 'sensortype', 'sensors',
|
|
'audit_interval_group', 'state']
|
|
field_labels = ['uuid', 'name', 'sensortype', 'sensors',
|
|
'audit_interval_group', 'state']
|
|
|
|
utils.print_list(isensorgroups, fields, field_labels, sortby=1)
|
|
|
|
|
|
@utils.arg('hostnameorid',
|
|
metavar='<hostname or id>',
|
|
help="Name or ID of host")
|
|
def do_host_sensorgroup_relearn(cc, args):
|
|
"""Relearn sensor model."""
|
|
|
|
ihost = ihost_utils._find_ihost(cc, args.hostnameorid)
|
|
|
|
isensorgroups = cc.isensorgroup.relearn(ihost.uuid)
|
|
|
|
print ("%s sensor model and any related alarm assertions are being "
|
|
"deleted." % (args.hostnameorid))
|
|
print ("Any sensor suppression settings at the group or sensor levels "
|
|
"will be lost.")
|
|
print ("Will attempt to preserve customized group actions and monitor "
|
|
"interval when the model is relearned on next audit interval.")
|
|
print ("The learning process may take several minutes. Please stand-by.")
|
|
|
|
|
|
@utils.arg('hostnameorid',
|
|
metavar='<hostname or id>',
|
|
help="Name or ID of host")
|
|
@utils.arg('sensorgroup_uuid',
|
|
metavar='<sensorgroup uuid>',
|
|
help="UUID of sensorgroup")
|
|
@utils.arg('attributes',
|
|
metavar='<path=value>',
|
|
nargs='+',
|
|
action='append',
|
|
default=[],
|
|
help="Attributes to modify ")
|
|
def do_host_sensorgroup_modify(cc, args):
|
|
"""Modify sensor group of a host."""
|
|
|
|
ihost = ihost_utils._find_ihost(cc, args.hostnameorid)
|
|
|
|
sensorgroup = _find_sensorgroup(cc, ihost, args.sensorgroup_uuid)
|
|
|
|
patch = utils.args_array_to_patch("replace", args.attributes[0])
|
|
|
|
try:
|
|
isensorgroup = cc.isensorgroup.update(sensorgroup.uuid, patch)
|
|
except exc.HTTPNotFound:
|
|
raise exc.CommandError("Sensor update failed: host %s sensorgroup %s :"
|
|
" update %s" %
|
|
(args.hostnameorid,
|
|
args.sensorgroup_uuid,
|
|
patch))
|
|
|
|
_print_isensorgroup_show(isensorgroup)
|
|
|
|
|
|
@utils.arg('hostnameorid',
|
|
metavar='<hostname or id>',
|
|
help="Name or ID of host")
|
|
@utils.arg('sensorgroup_uuid',
|
|
metavar='<sensorgroup uuid>',
|
|
help="UUID of sensorgroup")
|
|
def donot_host_sensorgroup_delete(cc, args):
|
|
"""Delete an sensorgroup."""
|
|
ihost = ihost_utils._find_ihost(cc, args.hostnameorid)
|
|
i = _find_sensorgroup(cc, ihost, args.sensorgroup_uuid)
|
|
cc.isensorgroup.delete(i.uuid)
|
|
print ('Deleted sensorgroup: host %s sensorgroup %s' %
|
|
(args.hostnameorid, args.sensorgroup_uuid))
|