【发布时间】:2015-11-12 22:45:12
【问题描述】:
我有一个 haproxy 状态端点,它输出以下数据:
我想解析它的输出并构建一个漂亮的交互式仪表板(在这种情况下,监控哪些 Riak 节点在给定时间处于启动或关闭状态。
我写了以下内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>dadsa</title>
</head>
<body>
<div id="viz"></div>
<script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script>
var hosts = [];
var url = "http://localhost:8666/haproxy-csv";
function update() {
d3.csv(url, function(data) {
hosts = data.filter(
function(d){
console.log(JSON.stringify( d) );
console.log(Object.keys(d));
console.log(d["# pxname"]);
return d["# pxname"] == "riak_backend_http"
&& d["svname"] != "BACKEND";
}
).map(function(d){
return {"label": d["svname"],"value": d["status"]};
});
d3.select("#viz")
.append("table")
.style("border-collapse", "collapse")
.style("border", "2px black solid")
.selectAll("tr")
.data(hosts)
.enter().append("tr")
.selectAll("td")
.data(function(d){
return [
d["label"], d["value"]
];
})
.enter().append("td")
.style("border", "1px black solid")
.style("padding", "5px")
.on("mouseover", function(){d3.select(this).style("background-color", "aliceblue")})
.on("mouseout", function(){d3.select(this).style("background-color", "white")})
.text(function(d){return d;})
.style("font-size", "12px");
});
}
update();
setInterval(update, 1000);
</script>
<button onclick="alert(JSON.stringify(hosts[0]))"> see value </button>
<div id="svg"/>
</body>
</html>
该代码运行良好,但有一个小缺陷。它在每次更新时不断地附加一个新的表格元素。我已经多次重写了这段代码,但我写的似乎只是更新了一次。
这是当前输出的样子:
我对 d3 真的一无所知,所以我什至不确定我到底应该绑定或挂钩什么。
任何指针?
【问题讨论】:
标签: d3.js html-table insert-update import-from-csv