Skip to content
Snippets Groups Projects
Commit 3117b512 authored by Thomas Bock's avatar Thomas Bock :speech_balloon:
Browse files

.

parent 48f6a59b
No related branches found
No related tags found
No related merge requests found
No preview for this file type
...@@ -26,11 +26,18 @@ def get_current_date(short=False): ...@@ -26,11 +26,18 @@ def get_current_date(short=False):
def get_jobs(server, port): def get_jobs(server, port):
try: 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", []) return req.json().get("jobs", [])
except: except:
return [] 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(): def gen_count():
i = 0 i = 0
while True: while True:
...@@ -50,12 +57,21 @@ def get_info(url, srv): ...@@ -50,12 +57,21 @@ def get_info(url, srv):
def gen_ext_name(d, h): def gen_ext_name(d, h):
return "{}@{}".format(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): def get_nodes_and_edges(jobs, gen, hosts, dbs, nodes, edges, srv):
for job in jobs: for job in jobs:
s = job.get("source") s = job.get("source")
t = job.get("target") t = job.get("target")
e_label = make_label(job)
if s and t: if s and t:
s_db, s_host = get_info(s, srv) s_db, s_host = get_info(s, srv)
t_db, t_host = get_info(t, 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): ...@@ -64,22 +80,35 @@ def get_nodes_and_edges(jobs, gen, hosts, dbs, nodes, edges, srv):
if s_host not in hosts: if s_host not in hosts:
hosts[s_host] = gen.__next__() 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: if t_host not in hosts:
hosts[t_host] = gen.__next__() 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: if s_db_name not in dbs:
dbs[s_db_name] = gen.__next__() 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: if t_db_name not in dbs:
dbs[t_db_name] = gen.__next__() dbs[t_db_name] = gen.__next__()
nodes.append({"id": dbs[t_db_name], "label": t_db, "group": "db"}) 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": dbs[s_db_name] ,
edges.append({"from": hosts[s_host] , "to":dbs[s_db_name], "arrow_type":"box"}) "to":dbs[t_db_name] ,
edges.append({"from": hosts[t_host] , "to":dbs[t_db_name], "arrow_type":"box"}) "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 return nodes, edges
...@@ -17,10 +17,10 @@ def repl_all(): ...@@ -17,10 +17,10 @@ def repl_all():
dbs = {} dbs = {}
nodes = [] nodes = []
edges = [] edges = []
srvs = utils.get_server()
for srv in ("a73434","a73435", "i75422", "i75464", "e75455", "i75415"): for srv in srvs:
jobs = utils.get_jobs(srv, 5984) jobs = utils.get_jobs(srv.get("name"), srv.get("port"))
nodes, edges = utils.get_nodes_and_edges(jobs, gen, hosts, dbs, nodes, edges, srv) 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') template = utils.path_file(path=config['templates']['html'], file='all.html')
return render_template(template, nodes=nodes, edges=edges) return render_template(template, nodes=nodes, edges=edges)
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
<footer class="footer mt-auto py-3"> <footer class="footer mt-auto py-3">
<div class="container"> <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> </div>
</footer> </footer>
...@@ -49,38 +49,40 @@ ...@@ -49,38 +49,40 @@
<script type="text/javascript" charset="utf8" src="../js/bootstrap.min.js"></script> <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" src="../js/vis-network.min.js"></script>
<script type="text/javascript" charset="utf8"> <script type="text/javascript" charset="utf8">
var nodes = new vis.DataSet([ var nodes = new vis.DataSet([
{% for node in nodes %} {% for node in nodes %}
{id: {{node.id}}, label: "{{node.label}}" , group: "{{node.group}}" }, {id: {{node.id}}, label: "{{node.label}}" , group: "{{node.group}}" },
{%endfor%} {%endfor%}
]); ]);
var edges = new vis.DataSet([ var edges = new vis.DataSet([
{% for edge in edges %} {% for edge in edges %}
{from: {{edge.from}}, to: {{edge.to}} , arrows:"{{edge.arrow_type}}" , shadow: { color: "#FF9900" }}, {from: {{edge.from}},
{%endfor%} to: {{edge.to}} ,
]); arrows:"{{edge.arrow_type}}" ,
label : "{{edge.label|safe}}",
font: { multi: "md" }},
{%endfor%}
]);
var container = document.getElementById('net'); var container = document.getElementById('net');
var data = { var data = {
nodes: nodes, nodes: nodes,
edges: edges edges: edges
}; };
var options = { var options = {
edges: { edges: {
smooth: false smooth: true
}, },
groups: { groups: {
server: { server: {
shape: "box", shape: "box",
color: "#FF9900" color: "#FF9900"
}, },
db: { db: {
shape: "box" shape: "database"
}}} }}}
// initialize your network! var network = new vis.Network(container, data, options);
var network = new vis.Network(container, data, options); </script>
</body>
</script>
</body>
</html> </html>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment