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

\wo server

parent 3117b512
Branches
Tags 0.0.10
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): ...@@ -21,13 +21,14 @@ def get_current_year(short=False):
return y return y
def get_current_date(short=False): 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: try:
req = requests.get("http://{}:{}/_scheduler/jobs".format(server, port), verify=False, timeout=0.1) req = requests.get(url, verify=False, timeout=0.2)
return req.json().get("jobs", []) return req.json().get("docs", [])
except: except:
return [] return []
...@@ -44,7 +45,7 @@ def gen_count(): ...@@ -44,7 +45,7 @@ def gen_count():
yield i yield i
i = i + 1 i = i + 1
def get_info(url, srv): def gen_ext_name(url, srv):
p = urlparse(url) p = urlparse(url)
db = p.path.replace("/","") db = p.path.replace("/","")
...@@ -52,63 +53,47 @@ def get_info(url, srv): ...@@ -52,63 +53,47 @@ def get_info(url, srv):
host = host.replace("localhost", srv) host = host.replace("localhost", srv)
host = host.split(".")[0] host = host.split(".")[0]
return db, host return "{}@{}".format(db, host)
def gen_ext_name(d, h): def gen_edge_label(doc):
return "{}@{}".format(d, h) state = doc.get("state", "nil")
err_cnt = doc.get("error_count")
info = doc.get("info")
if type(info) is dict:
def make_label(job): wrt_cnt = info.get("docs_written")
hist = job.get("history") else:
l = "" wrt_cnt = 0
for h in hist: d = {"running":"R",
s = h.get("type")[0] "failed": "F ({})".format(err_cnt),
l = "{s} {l}".format(l = l, s = s) "completed": "C ({})".format( wrt_cnt)}
return l return d.get(state)
def get_nodes_and_edges(jobs, gen, hosts, dbs, nodes, edges, srv): def get_nodes_and_edges(docs, gen, dbs, nodes, edges, srv):
for job in jobs: for doc in docs:
s = job.get("source") s = doc.get("source")
t = job.get("target") t = doc.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_name = gen_ext_name(s, srv)
t_db, t_host = get_info(t, srv) t_db_name = gen_ext_name(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"})
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], nodes.append({"id": dbs[s_db_name],
"label": s_db, "label": s_db_name,
"group": "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_name,
"group": "db"})
edges.append({"from": dbs[s_db_name] , edges.append({"from": dbs[s_db_name] ,
"to":dbs[t_db_name] , "to":dbs[t_db_name] ,
"arrow_type": "to" , "arrow_type": "to" ,
"label" : e_label}) "label" :gen_edge_label(doc)})
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
...@@ -13,17 +13,16 @@ CORS(app) ...@@ -13,17 +13,16 @@ CORS(app)
@app.route('/repl/all.html', methods=['GET']) @app.route('/repl/all.html', methods=['GET'])
def repl_all(): def repl_all():
gen = utils.gen_count() gen = utils.gen_count()
hosts = {}
dbs = {} dbs = {}
nodes = [] nodes = []
edges = [] edges = []
srvs = utils.get_server() srvs = utils.get_server()
for srv in srvs: for srv in srvs:
jobs = utils.get_jobs(srv.get("name"), srv.get("port")) docs = utils.get_docs(srv.get("name"), srv.get("port"))
nodes, edges = utils.get_nodes_and_edges(jobs, gen, hosts, dbs, nodes, edges, srv.get("name")) 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') 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']) @app.route('/js/<fn>', methods=['get'])
def js_folder(fn): def js_folder(fn):
......
...@@ -40,7 +40,8 @@ ...@@ -40,7 +40,8 @@
<footer class="footer mt-auto py-3"> <footer class="footer mt-auto py-3">
<div class="container"> <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> </div>
</footer> </footer>
...@@ -60,8 +61,8 @@ ...@@ -60,8 +61,8 @@
{from: {{edge.from}}, {from: {{edge.from}},
to: {{edge.to}} , to: {{edge.to}} ,
arrows:"{{edge.arrow_type}}" , arrows:"{{edge.arrow_type}}" ,
label : "{{edge.label|safe}}", font: { align: "middle", face: "Monospace" },
font: { multi: "md" }}, label : "{{edge.label|safe}}"},
{%endfor%} {%endfor%}
]); ]);
var container = document.getElementById('net'); var container = document.getElementById('net');
...@@ -71,6 +72,9 @@ ...@@ -71,6 +72,9 @@
}; };
var options = { var options = {
physics: {
enabled: true,
},
edges: { edges: {
smooth: true smooth: true
}, },
...@@ -80,7 +84,7 @@ ...@@ -80,7 +84,7 @@
color: "#FF9900" color: "#FF9900"
}, },
db: { db: {
shape: "database" shape: "box"
}}} }}}
var network = new vis.Network(container, data, options); var network = new vis.Network(container, data, options);
</script> </script>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment