diff --git a/repl/__pycache__/utils.cpython-36.pyc b/repl/__pycache__/utils.cpython-36.pyc index 9f73514557b08e53d1a0998a9c86d59e4ba85e91..4922f5d0ecb0c2f5f5ed6c19480051db0aae8658 100644 Binary files a/repl/__pycache__/utils.cpython-36.pyc and b/repl/__pycache__/utils.cpython-36.pyc differ diff --git a/repl/utils.py b/repl/utils.py index 9e6e432626db2244bbec6fc8ad7fa3038287c425..2e86f94d62fe3d724ad4a7804a2020b8d0cd16d6 100644 --- a/repl/utils.py +++ b/repl/utils.py @@ -26,11 +26,18 @@ def get_current_date(short=False): def get_jobs(server, port): try: - req = requests.get("http://{}:{}/_scheduler/jobs".format(server, port)) + req = requests.get("http://{}:{}/_scheduler/jobs".format(server, port), verify=False, timeout=0.1) return req.json().get("jobs", []) except: return [] +def get_server(): + try: + req = requests.get("http://localhost:5984/vl_db/000_SERVERS") + return req.json().get("Servers", []) + except: + return [] + def gen_count(): i = 0 while True: @@ -50,12 +57,21 @@ def get_info(url, srv): def gen_ext_name(d, h): return "{}@{}".format(d, h) +def make_label(job): + hist = job.get("history") + l = "" + for h in hist: + s = h.get("type")[0] + l = "{s} {l}".format(l = l, s = s) + return l + def get_nodes_and_edges(jobs, gen, hosts, dbs, nodes, edges, srv): for job in jobs: s = job.get("source") t = job.get("target") - + + e_label = make_label(job) if s and t: s_db, s_host = get_info(s, srv) t_db, t_host = get_info(t, srv) @@ -64,22 +80,35 @@ def get_nodes_and_edges(jobs, gen, hosts, dbs, nodes, edges, srv): if s_host not in hosts: hosts[s_host] = gen.__next__() - nodes.append({"id": hosts[s_host], "label": s_host, "group": "server" }) + nodes.append({"id": hosts[s_host], + "label": s_host, + "group": "server" }) if t_host not in hosts: hosts[t_host] = gen.__next__() - nodes.append({"id": hosts[t_host], "label": t_host, "group": "server"}) + nodes.append({"id": hosts[t_host], + "label": t_host, + "group": "server"}) if s_db_name not in dbs: dbs[s_db_name] = gen.__next__() - nodes.append({"id": dbs[s_db_name], "label": s_db, "group": "db"}) + nodes.append({"id": dbs[s_db_name], + "label": s_db, + "group": "db"}) if t_db_name not in dbs: dbs[t_db_name] = gen.__next__() nodes.append({"id": dbs[t_db_name], "label": t_db, "group": "db"}) - edges.append({"from": dbs[s_db_name] , "to":dbs[t_db_name] , "arrow_type": "to" }) - edges.append({"from": hosts[s_host] , "to":dbs[s_db_name], "arrow_type":"box"}) - edges.append({"from": hosts[t_host] , "to":dbs[t_db_name], "arrow_type":"box"}) + edges.append({"from": dbs[s_db_name] , + "to":dbs[t_db_name] , + "arrow_type": "to" , + "label" : e_label}) + edges.append({"from": hosts[s_host] , + "to":dbs[s_db_name], + "arrow_type":"to"}) + edges.append({"from": hosts[t_host] , + "to":dbs[t_db_name], + "arrow_type":"from"}) return nodes, edges diff --git a/server.py b/server.py index ca165875d88c113b36a55fabc81ad216f158d67c..0465c1c58d34cd2171c72f023e9775743a90a7a0 100644 --- a/server.py +++ b/server.py @@ -17,10 +17,10 @@ def repl_all(): dbs = {} nodes = [] edges = [] - - for srv in ("a73434","a73435", "i75422", "i75464", "e75455", "i75415"): - jobs = utils.get_jobs(srv, 5984) - nodes, edges = utils.get_nodes_and_edges(jobs, gen, hosts, dbs, nodes, edges, srv) + srvs = utils.get_server() + for srv in srvs: + jobs = utils.get_jobs(srv.get("name"), srv.get("port")) + nodes, edges = utils.get_nodes_and_edges(jobs, gen, hosts, dbs, nodes, edges, srv.get("name")) template = utils.path_file(path=config['templates']['html'], file='all.html') return render_template(template, nodes=nodes, edges=edges) diff --git a/templates/html/all.html b/templates/html/all.html index 620eb8eea597e38c02e5bf7573f53bd5a1841a9a..c3437097d51c7575cfcc7a607314c910bf7dc2a7 100644 --- a/templates/html/all.html +++ b/templates/html/all.html @@ -40,7 +40,7 @@ <footer class="footer mt-auto py-3"> <div class="container"> - <span class="text-muted">.</span> + <span class="text-muted"><b>a</b>: added, <b>s</b>: started, <b>c:</b> crasched</span> </div> </footer> @@ -49,38 +49,40 @@ <script type="text/javascript" charset="utf8" src="../js/bootstrap.min.js"></script> <script type="text/javascript" charset="utf8" src="../js/vis-network.min.js"></script> <script type="text/javascript" charset="utf8"> - var nodes = new vis.DataSet([ - {% for node in nodes %} - {id: {{node.id}}, label: "{{node.label}}" , group: "{{node.group}}" }, - {%endfor%} - ]); - + var nodes = new vis.DataSet([ + {% for node in nodes %} + {id: {{node.id}}, label: "{{node.label}}" , group: "{{node.group}}" }, + {%endfor%} + ]); + var edges = new vis.DataSet([ - {% for edge in edges %} - {from: {{edge.from}}, to: {{edge.to}} , arrows:"{{edge.arrow_type}}" , shadow: { color: "#FF9900" }}, - {%endfor%} - ]); + {% for edge in edges %} + {from: {{edge.from}}, + to: {{edge.to}} , + arrows:"{{edge.arrow_type}}" , + label : "{{edge.label|safe}}", + font: { multi: "md" }}, + {%endfor%} + ]); var container = document.getElementById('net'); var data = { - nodes: nodes, - edges: edges - }; + nodes: nodes, + edges: edges + }; - var options = { - edges: { - smooth: false - }, - groups: { - server: { - shape: "box", - color: "#FF9900" - }, - db: { - shape: "box" - }}} - // initialize your network! - var network = new vis.Network(container, data, options); - - </script> -</body> + var options = { + edges: { + smooth: true + }, + groups: { + server: { + shape: "box", + color: "#FF9900" + }, + db: { + shape: "database" + }}} + var network = new vis.Network(container, data, options); +</script> + </body> </html>