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

\wo server

parent 3117b512
No related branches found
No related tags found
No related merge requests found
mmpy_bot_settings.py
*.pyc
dist
docs
/*.egg-info
.coverage
lib
bin
lib64
pyvenv.cfg
share/
pip-selfcheck.json
.vscode
repl/__pycache__
\ No newline at end of file
File deleted
File deleted
File deleted
File deleted
File deleted
File deleted
File deleted
File deleted
File deleted
......@@ -21,13 +21,14 @@ def get_current_year(short=False):
return y
def get_current_date(short=False):
return "{}".format(datetime.datetime.today().date())
return "{}".format(datetime.datetime.today())
def get_jobs(server, port):
def get_docs(server, port):
url = "http://{}:{}/_scheduler/docs".format(server, port)
try:
req = requests.get("http://{}:{}/_scheduler/jobs".format(server, port), verify=False, timeout=0.1)
return req.json().get("jobs", [])
req = requests.get(url, verify=False, timeout=0.2)
return req.json().get("docs", [])
except:
return []
......@@ -44,7 +45,7 @@ def gen_count():
yield i
i = i + 1
def get_info(url, srv):
def gen_ext_name(url, srv):
p = urlparse(url)
db = p.path.replace("/","")
......@@ -52,63 +53,47 @@ def get_info(url, srv):
host = host.replace("localhost", srv)
host = host.split(".")[0]
return db, host
return "{}@{}".format(db, host)
def gen_ext_name(d, h):
return "{}@{}".format(d, h)
def gen_edge_label(doc):
state = doc.get("state", "nil")
err_cnt = doc.get("error_count")
info = doc.get("info")
if type(info) is dict:
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
wrt_cnt = info.get("docs_written")
else:
wrt_cnt = 0
d = {"running":"R",
"failed": "F ({})".format(err_cnt),
"completed": "C ({})".format( wrt_cnt)}
return d.get(state)
def get_nodes_and_edges(jobs, gen, hosts, dbs, nodes, edges, srv):
for job in jobs:
s = job.get("source")
t = job.get("target")
def get_nodes_and_edges(docs, gen, dbs, nodes, edges, srv):
for doc in docs:
s = doc.get("source")
t = doc.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)
s_db_name = gen_ext_name(s_db, s_host)
t_db_name = gen_ext_name(t_db, t_host)
if s_host not in hosts:
hosts[s_host] = gen.__next__()
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"})
s_db_name = gen_ext_name(s, srv)
t_db_name = gen_ext_name(t, srv)
if s_db_name not in dbs:
dbs[s_db_name] = gen.__next__()
nodes.append({"id": dbs[s_db_name],
"label": s_db,
"label": s_db_name,
"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"})
nodes.append({"id": dbs[t_db_name],
"label": t_db_name,
"group": "db"})
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"})
"label" :gen_edge_label(doc)})
return nodes, edges
......@@ -13,17 +13,16 @@ CORS(app)
@app.route('/repl/all.html', methods=['GET'])
def repl_all():
gen = utils.gen_count()
hosts = {}
dbs = {}
nodes = []
edges = []
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"))
docs = utils.get_docs(srv.get("name"), srv.get("port"))
nodes, edges = utils.get_nodes_and_edges(docs, gen, 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)
return render_template(template, nodes=nodes, edges=edges, date=utils.get_current_date())
@app.route('/js/<fn>', methods=['get'])
def js_folder(fn):
......
......@@ -40,7 +40,8 @@
<footer class="footer mt-auto py-3">
<div class="container">
<span class="text-muted"><b>a</b>: added, <b>s</b>: started, <b>c:</b> crasched</span>
<span class="text-muted"><b>R</b>: running, <b>C</b>: complete (number of docs written), <b>F:</b> failed (error count)</span>
<span>last updated on {{date}}</span>
</div>
</footer>
......@@ -60,8 +61,8 @@
{from: {{edge.from}},
to: {{edge.to}} ,
arrows:"{{edge.arrow_type}}" ,
label : "{{edge.label|safe}}",
font: { multi: "md" }},
font: { align: "middle", face: "Monospace" },
label : "{{edge.label|safe}}"},
{%endfor%}
]);
var container = document.getElementById('net');
......@@ -71,6 +72,9 @@
};
var options = {
physics: {
enabled: true,
},
edges: {
smooth: true
},
......@@ -80,7 +84,7 @@
color: "#FF9900"
},
db: {
shape: "database"
shape: "box"
}}}
var network = new vis.Network(container, data, options);
</script>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment