$(function() {
// screen搜索
$('#searchinput').on('click', function(e) {
e.preventDefault();
e.stopPropagation();
// console.log($(e.target));
});
$('#searchinput').on('keyup', debouncer(function(e) {
var $el = $(e.target);
var val = $el.val();
// console.log('1', val);
var screenEls = $el.parent().parent().nextAll();
_.each(screenEls, function(e) {
var text = $(e).find('small').text();
// console.log('2', text);
var re = new RegExp(val, 'i');
// if (text.indexOf(val) !== -1) {
if (re.test(text)) {
$(e).show();
} else {
$(e).hide();
}
});
// console.log('0', '------');
// console.log('1', val);
}, 300));
function debouncer(func, timeout) {
var timeoutID;
timeout = timeout || 300;
return function () {
var scope = this , args = arguments;
clearTimeout( timeoutID );
timeoutID = setTimeout( function () {
func.apply( scope , Array.prototype.slice.call( args ) );
}, timeout);
};
}
// 画图
active();
window.active = active;
window.getData = getData;
function getData(area, url) {
$.getJSON(url, function(ret) {
var data = parseData(ret);
var title = ret.title;
var $el = $(area).find('.chart-area');
var $t = $(area).find('.chart-title');
var $l = $(area).find('.legend');
var href = $.query.load(window.location.href);
var showLegend = href.get('legend');
//if (showLegend && showLegend === 'off') {
// $l.hide();
//}
$.plot($el, data, getConfig({legend: $l}));
$t.html(title);
$el.on('plothover', function (event, pos, item) {
// console.log('1111');
if (item) {
// console.log('2222');
// var x = item.datapoint[0].toFixed(2),
var x = moment(item.datapoint[0]).format('YYYY-MM-DD HH:mm:ss'),
y = item.datapoint[1].toFixed(2);
$('#tooltip').html(item.series.label + '
' + x + '
' + y)
.css({top: item.pageY+5, left: item.pageX+5})
.fadeIn(200);
// console.log('3333');
} else {
$('#tooltip').hide();
}
});
});
}
function active() {
var $containers = $('.chart-container');
var href = $.query.load(window.location.href);
var showLegend = href.get('legend') || "off";
window.cacheData = {}; // 数据缓存
window.cachePlot = {}; // plot缓存
_.each($containers, function(c, i) {
var url = $(c).data('u');
var $el = $(c).find('.chart-area');
var $t = $(c).find('.chart-title');
var $l = $(c).find('.legend');
$.getJSON(url, function(ret) {
var data = parseData(ret);
var title = ret.title;
window.cacheData[i] = $.extend(true, [], data);
if (showLegend && showLegend === 'off') {
$l.hide();
}
cachePlot[i] = {};
var flot = $.plot($el, data, getConfig({legend: $l}));
cachePlot[i].plot = flot;
cachePlot[i].$el = $el;
cachePlot[i].$l = $l;
$t.html(title);
$el.on('plothover', function (event, pos, item) {
// console.log('1111');
if (item) {
// console.log('2222');
// var x = item.datapoint[0].toFixed(2),
var x = moment(item.datapoint[0]).format('YYYY-MM-DD HH:mm:ss'),
y = formatSizeOrigin(item.datapoint[1], "si", 3)
$('#tooltip').html(item.series.label + '
' + x + '
' + y)
.css({top: item.pageY+5, left: item.pageX+5})
.fadeIn(200);
// console.log('3333');
} else {
$('#tooltip').hide();
}
});
$el.bind("plotselected", function (event, ranges) {
// $("#selection").text(ranges.xaxis.from.toFixed(1) + " to " + ranges.xaxis.to.toFixed(1));
$.each(flot.getXAxes(), function(_, axis) {
var opts = axis.options;
opts.min = ranges.xaxis.from;
opts.max = ranges.xaxis.to;
});
flot.setupGrid();
flot.draw();
flot.clearSelection();
});
});
});
}
// reset zoom
// TODO: 切换求和的时候reset zoom 有问题
$('body').on('click', '.reset-zoom', function(e) {
var $el = $(e.target);
var index = $el.data('index');
var data = $.extend(true, [], window.cacheData[index]);
window.cachePlot[index].plot.shutdown();
$.plot(cachePlot[index].$el, data, getConfig({legend: cachePlot[index].$l}));
});
// sort data
function sortData(data) {
_.each(data, function(d) {
d.data = d.data.sort(function(a, b) {
return a[0] - b[0];
});
});
return data;
}
// summary series
function summary(series) {
var d = series.data;
// 去掉值中的null
d = _.filter(d, function(i) {
return i[1] !== null;
});
// 这里的数据结构是 [timestamp, value]
var last = d[d.length-1][1];
var max = _.max(d, function(i) {return i[1]})[1];
var min = _.min(d, function(i) {return i[1]})[1]
var sum = sum = _.reduce(d, function(memo, i) {return memo + i[1]}, 0);
var avg = (sum/d.length);
var sorted = d.sort(function(a,b) {return a[1]-b[1]});
var th95 = sorted[parseInt(d.length*0.95, 10)][1];
var th99 = sorted[parseInt(d.length*0.99, 10)][1];
return {
last: last,
max: max,
min: min,
sum: sum,
avg: avg,
th95: th95,
th99: th99
};
}
// parse return data
function parseData(ret) {
var data = [];
var len = ret.series.length;
for (var i = 0, l = len; i < l; i ++) {
var v = ret.series[i];
data.push({label: v.name, data: v.data, check: true});
}
return data;
}
// flot config
function getConfig(options) {
return {
lines: {
show: true
},
points: {
show: true,
radius: 0.2,
lineWidth: 1,
fill:true,
fillColor: "rgba(215, 234, 252, 0.8)"
},
xaxis: {
mode: 'time',
timezone: 'browser',
color: "#EAEAEA",
font: {
size: 10,
weight: "bold",
color: "#ACABAB",
family: "sans-serif",
variant: "small-caps"
}
//tickDecimals: 0,
//tickSize: 1
},
series: {
shadowSize: 0 // Drawing is faster without shadows
},
// 使用深色色彩可选值, 避免因为绘图线条颜色太浅看不清楚
colors: [
"#FF6A6A", "#00BFFF", "#A52A2A",
"#CDCD00", "#008878", "#FF0000",
"#00FF00", "#7B68EE", "#FF00FF",
"#EEAEEE", "#00AEEE", "#AEEEEE",
"#FFB90F", "#00B90F", "#00FFFF",
"#DC143C", "#BFEFFF", "#AA7500",
"#F0E68C", "#00E68C", "#AAE68C",
"#EE9A49", "#009A49", "#AA9A49",
"#FFA54F", "#00A54F", "#AAA54F",
"#8B4789", "#004789", "#AA4789",
"#00CDCD", "#00CDCD", "#AACDCD",
"#EE8262", "#008262", "#AA8262",
"#FF8C00", "#008C00", "#AA8C00",
"#8B3626", "#003626", "#AA3626",
"#00BFFF", "#00E8AA", "#AAE8AA",
"#EE7621", "#007621", "#AA7621",
],
yaxis: {
// min: -1
// max: 100
color: "#EAEAEA",
font: {
size: 10,
weight: "bold",
color: "#ACABAB",
family: "sans-serif",
variant: "small-caps"
}
},
selection: {
mode: "x"
},
grid: {
hoverable: true,
clickable: true,
borderWidth: 0.5,
borderColor: "#EAEAEA"
},
legend: {
show: true,
// position: 'nw',
container: options.legend,
labelFormatter: function(label, series) {
return label;
// return label + '';
// return null;
}
}
}
}
});