Skip to content

Instantly share code, notes, and snippets.

@flexd
Created June 29, 2012 19:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save flexd/3020018 to your computer and use it in GitHub Desktop.
Save flexd/3020018 to your computer and use it in GitHub Desktop.
Its semi-working!
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="http://mbostock.github.com/d3/d3.v2.js"></script>
<script type="text/javascript">
// Initialize the node storage variables.
// Append a svg tag to #right with the correct width and height.
var w = 960, h=500;
var svg;
var force = d3.layout.force().gravity(.05)
.distance(300)
.charge(-200)
.size([w, h])
.start();
var nodes = force.nodes();
force.on("tick", function() {
svg.selectAll("g.node")
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
// svg.selectAll("line.link")
// .attr("x1", function(d) { return d.source.x; })
// .attr("y1", function(d) { return d.source.y; })
// .attr("x2", function(d) { return d.target.x; })
// .attr("y2", function(d) { return d.target.y; });
});
function collide(node) {
var r = node.radius + 16,
nx1 = node.x - r,
nx2 = node.x + r,
ny1 = node.y - r,
ny2 = node.y + r;
return function (quad, x1, y1, x2, y2) {
if (quad.point && (quad.point !== node)) {
var x = node.x - quad.point.x,
y = node.y - quad.point.y,
l = Math.sqrt(x * x + y * y),
r = node.radius + quad.point.radius;
if (l < r) {
l = (l - r) / l * 0.5;
node.x -= x *= l;
node.y -= y *= l;
quad.point.x += x;
quad.point.y += y;
}
}
return x1 > nx2
|| x2 < nx1
|| y1 > ny2
|| y2 < ny1;
};
}
$(document).ready(function () {
svg = d3.select("#right").append("svg:svg").attr("width", w).attr("height", h)
// Start the loop to keep doing this!
updateData();
setInterval(function () {
updateData();
}, 3000);
});
function draw () {
//$('#left').html(header + content + footer);
console.log(nodes);
var node = svg.selectAll("g.node").data(nodes, function (d) { return d.hostid;});
var nodeEnter = node.enter().append("svg:g")
.attr("class", "node");
nodeEnter.append("svg:circle")
.attr("r", function(d) { return d.radius; })
.style("fill", function(d, i) { return d.color; });
console.log("does this ever happen");
nodeEnter.append("svg:text")
.attr("class", "nodetext")
.attr("dx", 18)
.attr("dy", ".35em")
.text(function(d) { return d.host });
nodeEnter.call(force.drag);
node.exit().remove();
force.start();
}
var updateData = function () {
//var params = {
// "search" : {"host" : "alp-spb1-*.prod-edb"},
// "groupids" : "30",
// "output" : "extend",
// "sortfield" : "host",
// "searchWildcardsEnabled" : 1
// };
var params = {
"output" : "extend",
"groupids" : "2",
"sortfield" : "host"
};
d3.json("servers.json", function (resp) {
var header = "<ul>";
var footer = "</ul>";
var content = "";
var servers = resp.result;
for (var i in servers) {
var s = servers[i];
s.radius = 15;
var status = true;
if (s.available == 0) {
s.color = d3.rgb("gray");
}
if (s.available == 1) {
s.color = d3.rgb("green");
}
if (s.available == 2) {
s.color = d3.rgb("red");
status = false;
}
s.sstatus = status;
content += "<li>" + s.host + " = " + ((status) ? "Oppe" : "Nede") + "</li>";
if (containsObject(s, nodes)) {
var index = getKey(s, nodes);
var old = nodes[index];
var newserver = $.extend({}, old, s);
nodes[index] = newserver;
}
else {
nodes.push(s);
}
}
draw();
});
}
function containsObject(obj, list) {
var i;
for (i = 0; i < list.length; i++) {
if (list[i].name === obj.name) {
return true;
}
}
return false;
}
function getKey(obj, list) {
var i;
for (i = 0; i < list.length; i++) {
if (list[i].name === obj.name) {
return i;
}
}
return -1;
}
</script>
<style type="text/css">
circle {
stroke: #000;
stroke-opacity: .5;
}
</style>
</head>
<body>
<div id="body">
<div id="header"></div>
<div id="left"></div>
<div id="right"</div>
<div id="footer">
System availability
<div id="version" class="hint"></div>
</div>
</div>
</body>
</html>
{"jsonrpc":"2.0","result":[{"groups":[{"groupid":"2"}],"maintenances":[],"hostid":"10251","proxy_hostid":0,"host":"lecter.test.boop.no","status":"0","disable_until":"0","error":"","available":"1","errors_from":"0","lastaccess":"0","ipmi_authtype":"0","ipmi_privilege":"2","ipmi_username":"","ipmi_password":"","ipmi_disable_until":"0","ipmi_available":"0","snmp_disable_until":"0","snmp_available":"0","maintenanceid":0,"maintenance_status":"0","maintenance_type":"0","maintenance_from":"0","ipmi_errors_from":"0","snmp_errors_from":"0","ipmi_error":"","snmp_error":"","jmx_disable_until":"0","jmx_available":"0","jmx_errors_from":"0","jmx_error":"","name":"lecter.test.boop.no"},{"groups":[{"groupid":"2"}],"maintenances":[],"hostid":"10473","proxy_hostid":0,"host":"ZABBIXXXXXX STATUS TEST","status":"0","disable_until":"0","error":"","available":"0","errors_from":"0","lastaccess":"0","ipmi_authtype":"-1","ipmi_privilege":"2","ipmi_username":"","ipmi_password":"","ipmi_disable_until":"0","ipmi_available":"0","snmp_disable_until":"0","snmp_available":"0","maintenanceid":0,"maintenance_status":"0","maintenance_type":"0","maintenance_from":"0","ipmi_errors_from":"0","snmp_errors_from":"0","ipmi_error":"","snmp_error":"","jmx_disable_until":"0","jmx_available":"0","jmx_errors_from":"0","jmx_error":"","name":"Z222STATUS TEST"},{"groups":[{"groupid":"2"}],"maintenances":[],"hostid":"10474","proxy_hostid":0,"host":"ZABBIXXXXXX STATUS TEST","status":"0","disable_until":"0","error":"","available":"0","errors_from":"0","lastaccess":"0","ipmi_authtype":"-1","ipmi_privilege":"2","ipmi_username":"","ipmi_password":"","ipmi_disable_until":"0","ipmi_available":"0","snmp_disable_until":"0","snmp_available":"0","maintenanceid":0,"maintenance_status":"0","maintenance_type":"0","maintenance_from":"0","ipmi_errors_from":"0","snmp_errors_from":"0","ipmi_error":"","snmp_error":"","jmx_disable_until":"0","jmx_available":"0","jmx_errors_from":"0","jmx_error":"","name":"ZxxxxxxSTATUS TEST"},{"groups":[{"groupid":"2"}],"maintenances":[],"hostid":"10475","proxy_hostid":0,"host":"ZABBIXXXXXX STATUS TEST","status":"0","disable_until":"0","error":"","available":"0","errors_from":"0","lastaccess":"0","ipmi_authtype":"-1","ipmi_privilege":"2","ipmi_username":"","ipmi_password":"","ipmi_disable_until":"0","ipmi_available":"0","snmp_disable_until":"0","snmp_available":"0","maintenanceid":0,"maintenance_status":"0","maintenance_type":"0","maintenance_from":"0","ipmi_errors_from":"0","snmp_errors_from":"0","ipmi_error":"","snmp_error":"","jmx_disable_until":"0","jmx_available":"0","jmx_errors_from":"0","jmx_error":"","name":"ZsssssSTATUS TEST"},{"groups":[{"groupid":"2"}],"maintenances":[],"hostid":"10476","proxy_hostid":0,"host":"ZABBIXXXXXX STATUS TEST","status":"0","disable_until":"0","error":"","available":"0","errors_from":"0","lastaccess":"0","ipmi_authtype":"-1","ipmi_privilege":"2","ipmi_username":"","ipmi_password":"","ipmi_disable_until":"0","ipmi_available":"0","snmp_disable_until":"0","snmp_available":"0","maintenanceid":0,"maintenance_status":"0","maintenance_type":"0","maintenance_from":"0","ipmi_errors_from":"0","snmp_errors_from":"0","ipmi_error":"","snmp_error":"","jmx_disable_until":"0","jmx_available":"0","jmx_errors_from":"0","jmx_error":"","name":"Z22224STATUS TEST"},{"groups":[{"groupid":"2"}],"maintenances":[],"hostid":"10477","proxy_hostid":0,"host":"ZABBIXXXXXX STATUS TEST","status":"0","disable_until":"0","error":"","available":"0","errors_from":"0","lastaccess":"0","ipmi_authtype":"-1","ipmi_privilege":"2","ipmi_username":"","ipmi_password":"","ipmi_disable_until":"0","ipmi_available":"0","snmp_disable_until":"0","snmp_available":"0","maintenanceid":0,"maintenance_status":"0","maintenance_type":"0","maintenance_from":"0","ipmi_errors_from":"0","snmp_errors_from":"0","ipmi_error":"","snmp_error":"","jmx_disable_until":"0","jmx_available":"0","jmx_errors_from":"0","jmx_error":"","name":"ZhhhhhhSTATUS TEST"},{"groups":[{"groupid":"2"}],"maintenances":[],"hostid":"10478","proxy_hostid":0,"host":"ZABBIXXXXXX STATUS TEST","status":"0","disable_until":"0","error":"","available":"0","errors_from":"0","lastaccess":"0","ipmi_authtype":"-1","ipmi_privilege":"2","ipmi_username":"","ipmi_password":"","ipmi_disable_until":"0","ipmi_available":"0","snmp_disable_until":"0","snmp_available":"0","maintenanceid":0,"maintenance_status":"0","maintenance_type":"0","maintenance_from":"0","ipmi_errors_from":"0","snmp_errors_from":"0","ipmi_error":"","snmp_error":"","jmx_disable_until":"0","jmx_available":"0","jmx_errors_from":"0","jmx_error":"","name":"ZhhhhhhSTATUS TEST2"}],"id":2}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment