@Override
    public void execute(CommandLine commandLine, Options options, RPCHook rpcHook) throws SubCommandException {
        DefaultMQAdminExt defaultMQAdminExt = new DefaultMQAdminExt(rpcHook);

        defaultMQAdminExt.setInstanceName(Long.toString(System.currentTimeMillis()));

        try {
            defaultMQAdminExt.start();

            String brokerAddr = commandLine.hasOption('b') ? commandLine.getOptionValue('b').trim() : null;
            String clusterName = commandLine.hasOption('c') ? commandLine.getOptionValue('c').trim() : null;
            if (brokerAddr != null) {
                printBrokerRuntimeStats(defaultMQAdminExt, brokerAddr, false);
            } else if (clusterName != null) {
                Set<String> masterSet =
                    CommandUtil.fetchMasterAndSlaveAddrByClusterName(defaultMQAdminExt, clusterName);
                for (String ba : masterSet) {
                    try {
                        printBrokerRuntimeStats(defaultMQAdminExt, ba, true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }

        } catch (Exception e) {
            throw new SubCommandException(this.getClass().getSimpleName() + " command failed", e);
        } finally {
            defaultMQAdminExt.shutdown();
        }
    }
@Test
    public void testExecute() throws SubCommandException {
        BrokerStatusSubCommand cmd = new BrokerStatusSubCommand();
        Options options = ServerUtil.buildCommandlineOptions(new Options());
        String[] subargs = new String[] {"-b 127.0.0.1:" + listenPort()};
        final CommandLine commandLine =
            ServerUtil.parseCmdLine("mqadmin " + cmd.commandName(), subargs,
                cmd.buildCommandlineOptions(options), new DefaultParser());

        cmd.execute(commandLine, options, null);
    }