| |
| <!-- |
| 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> |