Created
February 2, 2015 05:52
-
-
Save tdack/1bd0e3114c7fa156192d to your computer and use it in GitHub Desktop.
Output data from javascriptrrd for use with D3js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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