#!/usr/bin/env python # vim: tabstop=4 shiftwidth=4 softtabstop=4 # Copyright 2015 Lenovo # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import codecs import os import sys path = os.path.dirname(os.path.realpath(__file__)) path = os.path.realpath(os.path.join(path, '..', 'lib', 'python')) if path.startswith('/opt'): sys.path.append(path) import confluent.client as client sys.stdout = codecs.getwriter('utf8')(sys.stdout) try: noderange = sys.argv[1] except IndexError: sys.stderr.write('Usage: {0} \n'.format(sys.argv[0])) sys.exit(1) def main(): global session, exitcode, healthbynode, healthexplanations, health, node, sensor, explanation session = client.Command() exitcode = 0 healthbynode = {} healthexplanations = {} for health in session.read( '/noderange/{0}/health/hardware'.format(noderange)): if 'error' in health: sys.stderr.write(health['error'] + '\n') if 'errorcode' in health: exitcode |= health['errorcode'] else: exitcode |= 1 continue if 'databynode' not in health: continue health = health['databynode'] for node in health: if 'error' in health[node]: sys.stderr.write('{0}: Error: {1}\n'.format( node, health[node]['error'])) exitcode |= 1 if 'health' in health[node]: healthbynode[node] = health[node]['health']['value'] if 'sensors' in health[node]: healthexplanations[node] = [] for sensor in health[node]['sensors']: explanation = sensor['name'] + ':' if sensor['value'] is not None: explanation += str(sensor['value']) if sensor['units'] is not None: explanation += sensor['units'] if sensor['states']: explanation += ',' if sensor['states']: explanation += ','.join(sensor['states']) healthexplanations[node].append(explanation) if node in healthbynode and node in healthexplanations: if healthexplanations[node]: print('{0}: {1} ({2})'.format( node, healthbynode[node], ','.join(healthexplanations[node]))) else: print('{0}: {1}'.format(node, healthbynode[node])) try: main() except KeyboardInterrupt: print('') sys.exit(0)