1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>untitled</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="assets/javascript/flot/excanvas.min.js"></script>
<script type="text/javascript" src="assets/javascript/flot/jquery.flot.min.js"></script>
<script type="text/javascript" src="assets/javascript/javascriptrrd/binaryXHR.js"></script>
<script type="text/javascript" src="assets/javascript/javascriptrrd/rrdFile.js"></script>
<script type="text/javascript" src="assets/javascript/javascriptrrd/rrdFlotSupport.js"></script>
<script type="text/javascript" src="assets/javascript/MochiKit/Base.js"></script>
<script type="text/javascript" src="assets/javascript/MochiKit/Async.js"></script>
<script type="text/javascript">
var RrdDataWrapper = function(url, rrd) {
this.url = url;
this.rrd = rrd;
}
RrdDataWrapper.load = function(url) {
var d = new MochiKit.Async.Deferred();
$.ajax({
url: url,
dataType: 'text',
beforeSend: function(request) {
try {
request.overrideMimeType('text/plain; charset=x-user-defined');
} catch(e) {
// IE doesn't support overrideMimeType
}
},
success: function(data) {
try {
d.callback(
new RrdDataWrapper(
url,
new RRDFile(new BinaryFile(data))));
} catch(e) {
d.errback(e);
}
},
error: function(xhr, textStatus, errorThrown) {
// Special case for IE which handles binary data slightly
// differently.
if(textStatus == 'parsererror') {
if (typeof xhr.responseBody != 'undefined') {
return this.success(xhr.responseBody);
}
}
d.errback(new Error(xhr.status));
}
});
return d;
}
RrdDataWrapper.prototype = {
getData: function(consolidationFunc, targetResolution) {
var bestRRA = null;
for(var i=0; i<this.rrd.getNrRRAs(); i++) {
// Look through all RRAs looking for the most suitable
// data resolution.
var rra = this.rrd.getRRA(i);
if(rra.getCFName() != consolidationFunc) {
continue;
}
if(!bestRRA) {
bestRRA = rra;
continue;
}
var bestDiff = Math.abs(bestRRA.getStep() - targetResolution);
var newDiff = Math.abs(rra.getStep() - targetResolution);
if(newDiff < bestDiff) {
bestRRA = rra;
} else {
break;
}
}
if(!bestRRA) {
throw new Error('Unrecognised consolidation function: ' + consolidationFunc);
}
return rrdRRA2FlotObj(this.rrd, bestRRA.getIdx(),
this.rrd.getDSNames(), 1, 1).data;
}
};
$(function() {
var d = RrdDataWrapper.load('data/localhost/load/load.rrd');
d.addCallback(
function(rrd) {
var options = {
xaxis: {
mode: "time"
}
};
var data = rrd.getData('AVERAGE', 100);
var plot = $.plot($('.container'), data, options);
});
d.addErrback(
function(failure) {
err = failure;
$('.container').text('error: ' + failure.message);
});
});
</script>
</head>
<body>
<div class="container" style="width:100%; height:200px;"></div>
</body>
</html>
|