Exemple #1
0
    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"])
Exemple #2
0
    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
Exemple #4
0
    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)
Exemple #5
0
    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)
Exemple #6
0
    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"])
Exemple #8
0
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)