mirror of
https://github.com/stylersnico/librenms.git
synced 2026-07-27 00:25:06 +02:00
Squashed 'lib/vis/' content from commit 1d029ca
git-subtree-dir: lib/vis git-subtree-split: 1d029cab7b527f3b292e95d550efbf784dac8699
This commit is contained in:
@@ -0,0 +1,170 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Network | Groups</title>
|
||||
|
||||
<style>
|
||||
body {
|
||||
font: 10pt arial;
|
||||
}
|
||||
#mynetwork {
|
||||
width: 1900px;
|
||||
height: 900px;
|
||||
border: 1px solid lightgray;
|
||||
background-color:#222222;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
|
||||
<script type="text/javascript" src="../../dist/vis.js"></script>
|
||||
<link href="../../dist/vis.css" rel="stylesheet" type="text/css" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var nodes = null;
|
||||
var edges = null;
|
||||
var network = null;
|
||||
var nodesData = null;
|
||||
|
||||
google.load('visualization', '1');
|
||||
|
||||
// Set callback to run when API is loaded
|
||||
google.setOnLoadCallback(draw);
|
||||
|
||||
function destroy() {
|
||||
if (network !== null) {
|
||||
network.destroy();
|
||||
network = null;
|
||||
}
|
||||
}
|
||||
|
||||
// Called when the Visualization API is loaded.
|
||||
function draw() {
|
||||
destroy();
|
||||
|
||||
var from, to;
|
||||
|
||||
nodes = [];
|
||||
edges = [];
|
||||
|
||||
var color = 'gray';
|
||||
var len = undefined;
|
||||
|
||||
// randomly create some nodes
|
||||
var nodeCount = parseInt(document.getElementById('nodeCount').value);
|
||||
var nodeOffset = 0;
|
||||
var groupMin = 0;
|
||||
var groupMax = parseInt(document.getElementById('groupCount').value);
|
||||
var group = groupMin;
|
||||
var groupLeader = []; // will contain the node id with the most links of each group
|
||||
while (group < groupMax) {
|
||||
// randomly create some nodes
|
||||
var i = 0;
|
||||
var cols = parseInt(Math.sqrt(nodeCount));
|
||||
var connectionCount = [];
|
||||
while (i < nodeCount) {
|
||||
nodes.push({
|
||||
id: i + nodeOffset,
|
||||
label: String(i + nodeOffset),
|
||||
group: group
|
||||
});
|
||||
connectionCount[i] = 0;
|
||||
|
||||
// create links in a scale-free-network way
|
||||
if (i == 1) {
|
||||
from = i;
|
||||
to = 0;
|
||||
edges.push({
|
||||
from: from + nodeOffset,
|
||||
to: to + nodeOffset,
|
||||
length: len
|
||||
});
|
||||
connectionCount[from]++;
|
||||
connectionCount[to]++;
|
||||
}
|
||||
else if (i > 1) {
|
||||
var conn = (i - 1) * 2;
|
||||
var rand = Math.floor(Math.random() * conn);
|
||||
var cum = 0;
|
||||
var j = 0;
|
||||
while (j < connectionCount.length && cum < rand) {
|
||||
cum += connectionCount[j];
|
||||
j++;
|
||||
}
|
||||
|
||||
from = i;
|
||||
to = j;
|
||||
edges.push({
|
||||
from: from + nodeOffset,
|
||||
to: to + nodeOffset,
|
||||
length: len
|
||||
});
|
||||
connectionCount[from]++;
|
||||
connectionCount[to]++;
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
// calculate the node with the most number of connections
|
||||
var leader = 0;
|
||||
for (var c in connectionCount) {
|
||||
if (connectionCount.hasOwnProperty(c)) {
|
||||
if (connectionCount[c] > connectionCount[leader]) {
|
||||
leader = parseInt(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (group > groupMin) {
|
||||
// connect to the leader of this group to the leader of a random other group
|
||||
from = leader + nodeOffset;
|
||||
to = groupLeader[groupMin + parseInt(Math.random() * (group - groupMin))];
|
||||
edges.push({
|
||||
from: from,
|
||||
to: to,
|
||||
length: len
|
||||
});
|
||||
}
|
||||
|
||||
// add this leader to the list
|
||||
groupLeader[group] = leader + nodeOffset;
|
||||
|
||||
nodeOffset += nodeCount;
|
||||
group++;
|
||||
}
|
||||
nodesData = new vis.DataSet(nodes);
|
||||
// create a network
|
||||
var container = document.getElementById('mynetwork');
|
||||
var data = {
|
||||
nodes: nodesData,
|
||||
edges: edges
|
||||
};
|
||||
var options = {
|
||||
stabilize: true,
|
||||
nodes: {
|
||||
shape: 'dot',
|
||||
radius:30,
|
||||
fontColor:'#ffffff',
|
||||
borderWidth:2
|
||||
},
|
||||
physics: {barnesHut:{springLength: 100}}
|
||||
};
|
||||
network = new vis.Network(container, data, options);
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body onload="draw()">
|
||||
<form onsubmit= "javascript: draw(); return false;">
|
||||
Number of groups:
|
||||
<input type="text" value="20" id="groupCount" style="width: 50px;">
|
||||
Number of nodes per group:
|
||||
<input type="text" value="1" id="nodeCount" style="width: 50px;">
|
||||
<input type="submit" value="Go">
|
||||
</form>
|
||||
<br>
|
||||
<div id="mynetwork"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user