Skip to content

Instantly share code, notes, and snippets.

@tdack
Created February 2, 2015 05:52
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 tdack/1bd0e3114c7fa156192d to your computer and use it in GitHub Desktop.
Save tdack/1bd0e3114c7fa156192d to your computer and use it in GitHub Desktop.
Output data from javascriptrrd for use with D3js
// return an array of objects containing D3elements, one per DS
//
// data = [
// {
// name: <DS name>,
// values: [{ date: <timestamp>, value: 1}, { date: <timestamp>, value: 2}]
// },
// {
// name: <DS name>,
// values: [{ date: <timestamp>, value: 1}, { date: <timestamp>, value: 2}]
// }
// ];
function rrdRRA2D3Obj(rrd_file,rra_idx,ds_list,want_rounding) {
var rra=rrd_file.getRRA(rra_idx);
var rra_rows=rra.getNrRows();
var last_update=rrd_file.getLastUpdate();
var step=rra.getStep();
if (want_rounding!=false) {
// round last_update to step
// so that all elements are sync
last_update-=(last_update%step);
}
var first_el=last_update-(rra_rows-1)*step;
var out_el = [];
var ds_list_len = ds_list.length;
for (var ds_list_idx=0; ds_list_idx<ds_list_len; ++ds_list_idx) {
var ds_id=ds_list[ds_list_idx];
var ds=rrd_file.getDS(ds_id);
var ds_name=ds.getName();
var ds_idx=ds.getIdx();
var timestamp=first_el;
var ds_series=[];
for (var i=0;i<rra_rows;i++) {
var el=rra.getEl(i,ds_idx);
if (el != undefined) {
if (+el > 213000000000000) { // remove erroneous spikes from RRD data
el = 0;
}
// Convert timestamp to JS ticks
ds_series.push( { "date": timestamp * 1000, "value": +el } );
} else {
// Convert timestamp to JS ticks, return null for missing values
ds_series.push( { "date": timestamp * 1000, "value": null } );
}
timestamp+=step;
} // end for
var ds_name=ds.getName();
out_el.push({"name": ds_name,
"values": ds_series});
} //end for ds_list_idx
return out_el;
}
function rfs_format_time(s) {
if (s<120) {
return s+"s";
} else {
var s60=s%60;
var m=(s-s60)/60;
if ((m<10) && (s60>9)) {
return m+":"+s60+" min";
} if (m<120) {
return m+" min";
} else {
var m60=m%60;
var h=(m-m60)/60;
if ((h<12) && (m60>9)) {
return h+":"+m60+" hrs";
} if (h<48) {
return h+" hrs";
} else {
var h24=h%24;
var d=(h-h24)/24;
if ((d<7) && (h24>0)) {
return d+" days "+h24+"h";
} if (d<60) {
return d+" days";
} else {
var d30=d%30;
var mt=(d-d30)/30;
return mt+" months";
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment