Exemplo n.º 1
0
 def load_collector(key, _data):
     if _data["state"] == "running":
         state = colorize(_data["state"], color.GREEN)
     else:
         state = colorize(_data["state"], color.RED)
     line = [
         " "+colorize(key, color.BOLD),
         state,
         "",
         fmt_tid(_data, stats_data),
         fmt_thr_tasks(key, stats_data),
         fmt_thr_cpu_usage(key, prev_stats_data, stats_data),
         fmt_thr_cpu_time(key, stats_data),
         "",
         "",
         "",
         "",
         "",
         "|" if nodenames else "",
     ]
     for nodename in nodenames:
         speaker = data["monitor"].get("nodes", {}).get(nodename, {}).get("speaker")
         if speaker:
             status = "up"
             status = colorize_status(status, lpad=0).replace(status, unicons[status])
         else:
             status = ""
         line.append(status)
     out.append(line)
Exemplo n.º 2
0
 def load_daemon():
     key = "daemon"
     state = colorize("running", color.GREEN)
     line = [
         " "+colorize(key, color.BOLD),
         "%s" % state,
         "",
         str(data.get("pid", "")) if stats_data else "",
         "",
         fmt_thr_cpu_usage(key, prev_stats_data, stats_data),
         fmt_thr_cpu_time(key, stats_data),
         fmt_thr_mem_total(key, stats_data),
         "",
         "",
         "",
         "",
         "|" if nodenames else "",
     ]
     for nodename in nodenames:
         speaker = data["monitor"].get("nodes", {}).get(nodename, {}).get("speaker")
         if speaker:
             status = "up"
             status = colorize_status(status, lpad=0).replace(status, unicons[status])
         else:
             status = ""
         line.append(status)
     out.append(line)
Exemplo n.º 3
0
    def test_colorize_status():
        """
        Status, colorization
        """
        sta1 = Status()
        ret = colorize_status(sta1, lpad=0)
        assert ret == "undef"

        sta1 = 0
        ret = colorize_status(sta1, lpad=0)
        assert ret == "up"

        sta1 = None
        ret = colorize_status(sta1, lpad=0)
        assert ret == "undef"

        sta1 = "warn"
        ret = colorize_status(sta1, lpad=0)
        assert ret == "warn"

        sta1 = "n/a"
        ret = colorize_status(sta1, lpad=0)
        assert ret == "n/a"

        sta1 = "unsupported"
        ret = colorize_status(sta1, lpad=0)
        assert ret == "unsupported"
Exemplo n.º 4
0
 def load_arbitrators():
     if "arbitrators" not in sections:
         return
     arbitrators = []
     arbitrators_name = {}
     for nodename, ndata in data["monitor"]["nodes"].items():
         for aid, adata in ndata.get("arbitrators", {}).items():
             if aid not in arbitrators:
                 arbitrators.append(aid)
                 arbitrators_name[aid] = adata["name"]
     if len(arbitrators) == 0:
         return
     load_header("Arbitrators")
     for aid in arbitrators:
         line = [
             colorize(" " + arbitrators_name[aid], color.BOLD),
             "",
             "",
             "",
             "",
             "",
             "",
             "",
             "",
             "",
             "",
             "",
             "|" if nodenames else "",
         ]
         for nodename in nodenames:
             status = data["monitor"]["nodes"].get(nodename, {}).get(
                 "arbitrators", {}).get(aid, {}).get("status", "undef")
             if status != "up":
                 line[1] = colorize_status("warn", lpad=0)
             status = colorize_status(status, lpad=0).replace(
                 status, unicons[status])
             line.append(status)
         out.append(line)
     out.append([])
Exemplo n.º 5
0
 def load_hb(key, _data):
     state = _data.get("state", "")
     if state == "running":
         state = colorize(state, color.GREEN)
     else:
         state = colorize(state, color.RED)
     if _data.get("alerts"):
         state += colorize("!", color.BROWN)
     cf = _data.get("config", {})
     addr = cf.get("addr", "")
     port = cf.get("port", "")
     dev = cf.get("dev", "")
     relay = cf.get("relay", "")
     if addr and port:
         config = addr + ":" + str(port)
     elif dev:
         config = os.path.basename(dev)
     elif relay:
         config = relay
     else:
         config = ""
     line = [
         " " + colorize(key, color.BOLD),
         state,
         config,
         fmt_tid(_data, stats_data),
         fmt_thr_tasks(key, stats_data),
         fmt_thr_cpu_usage(key, prev_stats_data, stats_data),
         fmt_thr_cpu_time(key, stats_data),
         "",
         "",
         "",
         "",
         "",
         "|" if nodenames else "",
     ]
     peers = _data.get("peers", {})
     for nodename in nodenames:
         beating = peers.get(nodename, {}).get("beating")
         if beating is None:
             status = "n/a"
         elif beating:
             status = "up"
         else:
             status = "down"
         status = colorize_status(status,
                                  lpad=0).replace(status, unicons[status])
         line.append(status)
     out.append(line)
Exemplo n.º 6
0
def colorize_json(s):
    import re
    from core.status import colorize_status
    s = re.sub(
        r'(")(error|ok|err|up|down|warn|n/a|stdby up|stdby down)(")', lambda m:
        m.group(1) + colorize_status(m.group(2), lpad=0) + m.group(3), s)
    s = re.sub(r'((?!"DEFAULT":)("[\w: ,@-]+":))',
               colorize(r'\1', color.LIGHTBLUE), s)
    s = re.sub(r'("DEFAULT":)( {)', colorize(r'\1', color.BROWN) + r'\2', s)
    s = re.sub(r'("[\w:-]+#[\w\.:-]+":)( {)',
               colorize(r'\1', color.BROWN) + r'\2', s)
    s = re.sub(r'(@[\w-]+)(":)',
               colorize(r'\1', color.RED) + colorize(r'\2', color.LIGHTBLUE),
               s)
    s = re.sub(r'({.+})', colorize(r'\1', color.GREEN), s)
    return s
Exemplo n.º 7
0
    def load_svc(path, prefix=""):
        if path not in services:
            return
        data = services[path]
        if path in slave_parents and prefix == "":
            return
        try:
            topology = services[path].topology
        except KeyError:
            topology = ""
        if services[path].get("drp", False):
            topology = "drp " + topology

        # status
        status = colorize_status(data["avail"], lpad=0)
        if data["overall"] == "warn":
            status += colorize("!", color.BROWN)
        if data["placement"] == "non-optimal":
            status += colorize("^", color.RED)

        # info
        info = {
            "topology": data.get("topology", ""),
            "orchestrate": data.get("orchestrate", "-"),
            "status": "%d/1" % data["n_up"] if data["n_up"] is not None else 0,
        }
        if data.get("scale") is not None:
            info["status"] = "%d/%d" % (data["n_up"], data.get("scale"))
        elif data.get("wrapper"):
            info = {
                "topology": "",
                "orchestrate": "",
                "status": "",
            }
        elif topology == "flex":
            info["status"] = "%d/%d" % (data["n_up"], data["flex_target"])
        if data["avail"] == "n/a":
            info["status"] = ""
        info = "%(orchestrate)-5s %(status)-5s" % info
        line = [
            " "+colorize(prefix+strip_path(path, os.environ.get("OSVC_NAMESPACE")), color.BOLD),
            status,
            info,
            fmt_svc_uptime(path, stats_data),
            fmt_svc_tasks(path, prev_stats_data),
            fmt_svc_cpu_usage(path, prev_stats_data, stats_data),
            fmt_svc_cpu_time(path, stats_data),
            fmt_svc_mem_total(path, stats_data),
            fmt_svc_blk_rb(path, stats_data),
            fmt_svc_blk_wb(path, stats_data),
            fmt_svc_blk_rbps(path, prev_stats_data, stats_data),
            fmt_svc_blk_wbps(path, prev_stats_data, stats_data),
            "|" if nodenames else "",
        ]
        if not nodenames:
            states = []
            if data["frozen"] == "frozen":
                frozen = "frozen"
            elif data["frozen"] == "thawed":
                frozen = ""
            elif data["frozen"] == "n/a":
                frozen = ""
            elif data["frozen"] == "mixed":
                frozen = "part-frozen"
            else:
                frozen = ""
            if frozen:
                states.append(frozen)

            if data["provisioned"] is True:
                provisioned = ""
            elif data["provisioned"] is False:
                provisioned = "unprovisioned"
            elif data["provisioned"] == "n/a":
                provisioned = ""
            elif data["provisioned"] == "mixed":
                provisioned = "part-provisioned"
            else:
                provisioned = ""
            if provisioned:
                states.append(provisioned)

            mon_status_counts = {}
            ge = None
            for nodename in avail_nodenames:
                try:
                    _data = data["nodes"][nodename]
                except KeyError:
                    continue
                if _data is None:
                    continue
                ge = _data.get("global_expect")
                st = _data.get("mon")
                if st not in ("idle", None):
                    if st not in mon_status_counts:
                        mon_status_counts[st] = 1
                    else:
                        mon_status_counts[st] += 1
            if ge:
                states.append(">"+ge)
            for s, n in mon_status_counts.items():
                states.append("%s(%d)" % (s, n))
            line.append(", ".join(states))

        for nodename in nodenames:
            if nodename not in data["nodes"]:
                line.append("")
            elif data["nodes"][nodename] is None:
                line.append(colorize("?", color.RED))
            elif data["nodes"][nodename] is not None:
                val = []
                # frozen unicon
                if data["nodes"][nodename]["frozen"]:
                    frozen_icon = colorize(unicons["frozen"], color.BLUE)
                else:
                    frozen_icon = ""
                # avail status unicon
                if data["wrapper"]:
                    avail_icon = ""
                else:
                    avail = data["nodes"][nodename]["avail"]
                    if avail == "unknown":
                        avail_icon = colorize("?", color.RED)
                    else:
                        avail_icon = colorize_status(avail, lpad=0, agg_status=data["avail"]).replace(avail, unicons[avail])
                    if data["nodes"][nodename].get("preserved"):
                        avail_icon += colorize("?", color.LIGHTBLUE)
                # overall status unicon
                if data["wrapper"]:
                    overall_icon = ""
                else:
                    overall = data["nodes"][nodename]["overall"]
                    if overall == "warn":
                        overall_icon = colorize_status(overall, lpad=0).replace(overall, unicons[overall])
                    else:
                        overall_icon = ""
                # mon status
                smon = data["nodes"][nodename]["mon"]
                if smon == "idle":
                    # don't display 'idle', as its to normal status and thus repeated as nauseam
                    smon = ""
                else:
                    smon = " " + smon
                # global expect
                if smon == "":
                    global_expect = data["nodes"][nodename]["global_expect"]
                    if global_expect:
                        global_expect = colorize(" >" + str(global_expect), color.LIGHTBLUE)
                    else:
                        global_expect = ""
                else:
                    global_expect = ""
                # leader
                if data["wrapper"]:
                    leader = ""
                else:
                    if data["nodes"][nodename]["placement"] == "leader":
                        leader = colorize("^", color.LIGHTBLUE)
                    else:
                        leader = ""
                # provisioned
                if data["nodes"][nodename].get("provisioned") is False:
                    provisioned = colorize("P", color.RED)
                else:
                    provisioned = ""

                val.append(avail_icon)
                val.append(overall_icon)
                val.append(leader)
                val.append(frozen_icon)
                val.append(provisioned)
                val.append(smon)
                val.append(global_expect)
                line.append("".join(val))
        out.append(line)

        for child in sorted(list(data.get("slaves", []))):
            load_svc(child, prefix=prefix+" ")