def _handle_sensor_state_request(self, details): """Update runtime value of a IPMI/BMC sensor""" server_sm = IStateManager.get_state_manager_by_key( details["payload"]["key"]) server_sm.update_sensor(details["payload"]["sensor_name"], details["payload"]["sensor_value"])
def _handle_ctrl_update_request(self, details): """Update RAID controller when requested""" payload = details["payload"] executed = IStateManager.get_state_manager_by_key( payload["key"]).set_controller_prop(payload["controller"], payload) self._cmd_executed_response(details["client"], executed)
def get_server_state_manager(asset_key): """Get server asset by key with type validation""" server_manager = IStateManager.get_state_manager_by_key(asset_key) if not isinstance(server_manager, IBMCServerStateManager): raise argparse.ArgumentTypeError( "Asset [{}] is not a server!".format(asset_key) ) return server_manager
def _handle_pd_update_request(self, details): """Update data related to physical drives when requested""" payload = details["payload"] executed = IStateManager.get_state_manager_by_key( payload["key"] ).set_physical_drive_prop(payload["controller"], payload["drive_id"], payload) self._cmd_executed_response(details["client"], executed)
def _handle_cv_repl_request(self, details): """Update cv details upon a request""" payload = details["payload"] executed = IStateManager.get_state_manager_by_key( payload["key"]).set_cv_replacement( payload["controller"], payload["replacement_required"], payload["write_through_fail"], ) self._cmd_executed_response(details["client"], executed)
def _handle_power_request(self, details): """Power up/down asset""" power_up = details["payload"]["status"] state_manager = IStateManager.get_state_manager_by_key( details["payload"]["key"]) if power_up: state_manager.power_up() elif "hard" in details["payload"] and details["payload"]["hard"]: state_manager.power_off() else: state_manager.shut_down()
def configure_battery(key, kwargs): """Udpate runtime battery status""" state_manager = IStateManager.get_state_manager_by_key(key) if not isinstance(state_manager, IUPSStateManager): raise argparse.ArgumentTypeError("Asset [{}] is not a ups!".format(key)) if kwargs["drain_speed"] is None and kwargs["charge_speed"] is None: raise argparse.ArgumentTypeError( 'Must provide "--drain-speed" or "--charge-speed"' ) if kwargs["drain_speed"] is not None: state_manager.set_drain_speed_factor(kwargs["drain_speed"]) if kwargs["charge_speed"] is not None: state_manager.set_charge_speed_factor(kwargs["charge_speed"])
def get_status(**kwargs): """Retrieve power states of the assets Args: **kwargs: Command line options """ #### one asset #### if kwargs["asset_key"] and kwargs["load"]: state_manager = IStateManager.get_state_manager_by_key(kwargs["asset_key"]) if kwargs["value_only"]: print(state_manager.load) else: print( "{}-{} : {}".format( state_manager.key, state_manager.asset_type, state_manager.load ) ) return elif kwargs["asset_key"] and kwargs["agent"]: state_manager = IStateManager.get_state_manager_by_key(kwargs["asset_key"]) agent_info = state_manager.agent if agent_info: msg = "running" if agent_info[1] else "not running" if kwargs["value_only"]: print(int(agent_info[1])) else: print( "{}-{} : pid[{}] is {}".format( state_manager.key, state_manager.asset_type, agent_info[0], msg ) ) else: print( "{}-{} is not running any agents!".format( state_manager.key, state_manager.asset_type ) ) return elif kwargs["asset_key"]: state_manager = IStateManager.get_state_manager_by_key(kwargs["asset_key"]) if kwargs["value_only"]: print(state_manager.status) else: print( "{}-{} : {}".format( state_manager.key, state_manager.asset_type, state_manager.status ) ) return elif kwargs["mains"]: mains_status = ISystemEnvironment.mains_status() if kwargs["value_only"]: print(mains_status) else: print("Wallpower status:", mains_status) return ##### list states ##### assets = IStateManager.get_system_status() # json format if kwargs["json"]: print(json.dumps(assets, indent=4)) # monitor state with curses elif kwargs["monitor"]: stdscr = curses.initscr() curses.noecho() curses.cbreak() try: curses.start_color() curses.use_default_colors() for i in range(0, curses.COLORS): curses.init_pair(i, i, -1) while True: status_table_format(assets, stdscr) time.sleep(kwargs["watch_rate"]) assets = IStateManager.get_system_status() except KeyboardInterrupt: pass finally: curses.echo() curses.nocbreak() curses.endwin() # human-readable table else: status_table_format(assets)