194 lines
5.1 KiB
HTML
Generated
194 lines
5.1 KiB
HTML
Generated
|
|
<!--
|
|
Licensed to the Apache Software Foundation (ASF) under one
|
|
or more contributor license agreements. See the NOTICE file
|
|
distributed with this work for additional information
|
|
regarding copyright ownership. The ASF licenses this file
|
|
to you under the Apache License, Version 2.0 (the
|
|
"License"); you may not use this file except in compliance
|
|
with the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing,
|
|
software distributed under the License is distributed on an
|
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
KIND, either express or implied. See the License for the
|
|
specific language governing permissions and limitations
|
|
under the License.
|
|
-->
|
|
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset='utf-8'>
|
|
<title>Downsample Comparasions</title>
|
|
<meta name='viewport' content='width=device-width, initial-scale=1'>
|
|
</head>
|
|
<body>
|
|
<style>
|
|
.chart {
|
|
width: 800px;
|
|
height: 400px;
|
|
}
|
|
</style>
|
|
<h2 id='status'>Loading lib....</h2>
|
|
<div id='container'></div>
|
|
|
|
<script src='lib/simpleRequire.js'></script>
|
|
<script src='lib/config.js'></script>
|
|
<script>
|
|
require([
|
|
'echarts',
|
|
'data/large-data.json'
|
|
], function (echarts, packedData) {
|
|
function round2(val) {
|
|
return Math.round(val * 100) / 100;
|
|
}
|
|
|
|
function round3(val) {
|
|
return Math.round(val * 1000) / 1000;
|
|
}
|
|
|
|
function prepData(packed) {
|
|
console.time('prep');
|
|
|
|
// epoch,idl,recv,send,read,writ,used,free
|
|
|
|
var numFields = packed[0];
|
|
packed = packed.slice(numFields + 1);
|
|
|
|
var repeatTimes = 5;
|
|
|
|
var data = new Float64Array((packed.length / numFields) * 4 * repeatTimes);
|
|
|
|
var off = 0;
|
|
var date = packed[0];
|
|
for (let repeat = 0; repeat < repeatTimes; repeat++) {
|
|
for (let i = 0, j = 0; i < packed.length; i += numFields, j++) {
|
|
date += 1;
|
|
data[off++] = date * 60 * 1000;
|
|
data[off++] = round3(100 - packed[i + 1]);
|
|
data[off++] = round2(
|
|
(100 * packed[i + 5]) / (packed[i + 5] + packed[i + 6])
|
|
);
|
|
data[off++] = packed[i + 3];
|
|
}
|
|
}
|
|
console.timeEnd('prep');
|
|
|
|
return data;
|
|
}
|
|
|
|
function makeChart(data, title, sampling) {
|
|
var container = document.getElementById('container');
|
|
var dom = document.createElement('div');
|
|
var titleDom = document.createElement('h3');
|
|
dom.classList.add('chart');
|
|
if (title !== 'warmup') {
|
|
container.appendChild(titleDom);
|
|
container.appendChild(dom);
|
|
}
|
|
var myChart = echarts.init(dom, null, {
|
|
width: 800,
|
|
height: 400
|
|
});
|
|
|
|
titleDom.innerHTML = title;
|
|
|
|
let opts = {
|
|
animation: false,
|
|
dataset: {
|
|
source: data,
|
|
dimensions: ['date', 'cpu', 'ram', 'tcpout']
|
|
},
|
|
tooltip: {
|
|
trigger: 'axis'
|
|
},
|
|
legend: {},
|
|
grid: {
|
|
containLabel: true,
|
|
left: 0,
|
|
top: 50,
|
|
right: 0,
|
|
bottom: 30
|
|
},
|
|
xAxis: {
|
|
type: 'time'
|
|
},
|
|
yAxis: [{
|
|
type: 'value',
|
|
max: 100,
|
|
axisLabel: {
|
|
formatter: '{value} %'
|
|
}
|
|
}, {
|
|
type: 'value',
|
|
max: 100,
|
|
axisLabel: {
|
|
formatter: '{value} MB'
|
|
}
|
|
}],
|
|
series: [{
|
|
name: 'CPU',
|
|
type: 'line',
|
|
showSymbol: false,
|
|
sampling: sampling,
|
|
lineStyle: { width: 1 },
|
|
emphasis: { lineStyle: { width: 1 } },
|
|
encode: {
|
|
x: 'date',
|
|
y: 'cpu'
|
|
}
|
|
}, {
|
|
name: 'RAM',
|
|
type: 'line',
|
|
yAxisIndex: 1,
|
|
showSymbol: false,
|
|
sampling: sampling,
|
|
lineStyle: { width: 1 },
|
|
emphasis: { lineStyle: { width: 1 } },
|
|
encode: {
|
|
x: 'date',
|
|
y: 'ram'
|
|
}
|
|
}, {
|
|
name: 'TCP Out',
|
|
type: 'line',
|
|
yAxisIndex: 1,
|
|
showSymbol: false,
|
|
sampling: sampling,
|
|
lineStyle: { width: 1 },
|
|
emphasis: { lineStyle: { width: 1 } },
|
|
encode: {
|
|
x: 'date',
|
|
y: 'tcpout'
|
|
}
|
|
}]
|
|
};
|
|
const startTime = Date.now();
|
|
myChart.setOption(opts, {
|
|
notMerge: true
|
|
});
|
|
const endTime = Date.now();
|
|
titleDom.innerHTML = `${title}(${data.length / 4 * 3}) ${(endTime - startTime).toFixed(0)} ms`;
|
|
}
|
|
let status = document.getElementById('status');
|
|
|
|
status.textContent = 'Warming up';
|
|
let data = prepData(packedData);
|
|
|
|
for (let i = 0; i < 5; i++) {
|
|
makeChart(data, 'warmup');
|
|
makeChart(data, 'warmup', 'lttb');
|
|
makeChart(data, 'warmup', 'average');
|
|
makeChart(data, 'warmup', 'max');
|
|
}
|
|
status.textContent = 'Running';
|
|
makeChart(data, 'No Sampling', null);
|
|
setTimeout(() => makeChart(data, 'LTTB Sampling', 'lttb'), 200);
|
|
setTimeout(() => makeChart(data, 'Max Sampling', 'max'), 400);
|
|
setTimeout(() => makeChart(data, 'Average Sampling', 'average'), 600);
|
|
});
|
|
</script>
|
|
</body>
|
|
</html> |