/
githubmirror
/
servo
Обзор
Документация
Войти
/
githubmirror
/
servo
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
etc/memory_chart.html
112 строк
4 KB
Josh Matthews
Add tool to chart memory usage from reports.
09 мар 2018, 06:46
09 мар 2018, 06:46
dd1b43b
Код
Авторство
О чём код?
<!DOCTYPE html> <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.min.js"></script> <select id="graphs"></select> <script> function transformData(data, path) { console.log(path); var pathParts = path.split('!'); var name = pathParts[pathParts.length - 1]; var transformed = []; for (const report of data.map(d => d.report)) { var subData = findData(report, path); transformed.push(subData.amount); } console.log(transformed); return [{ label: 'Usage in MiB', data: transformed, fill: false, }]; } function findData(data, parent) { parent = parent.split('!'); parent.reverse(); while (parent.length) { var next = parent.pop(); console.log(next); if ('children' in data) { data = data.children; } data = data[next]; } return data; } function makeOptions(data, initial) { var sel = document.querySelector('#graphs'); sel.innerHTML = ''; // TODO: add support for labels that are not present in initial report. var rootData = data[0].report; console.log(Object.keys(rootData)); var remaining = Object.keys(rootData).map(k => [k, rootData[k], k]); remaining.reverse(); while (remaining.length) { var next = remaining.pop(); var children = Object.keys(next[1].children).map(k => [k, next[1].children[k], next[2] + '!' + k]); children.reverse(); remaining.push.apply(remaining, children); var opt = sel.appendChild(document.createElement('option')); opt.innerText = '-'.repeat((next[2].match(/!/g) || []).length) + next[0]; opt.fullPath = next[2]; } sel.onchange = function() { var title = sel.value; while (title[0] == '-') { title = title.slice(1); } makeChart({ 'labels': data.map(d => d.seconds + 's'), 'datasets': transformData(data, sel.selectedOptions[0].fullPath), }, title); }; sel.value = initial; sel.onchange(); } function makeChart(data, title) { var canvas = document.querySelector('#myChart'); if (canvas) { canvas.remove(); } canvas = document.body.appendChild(document.createElement('canvas')); canvas.id = 'myChart'; canvas.width = 800; canvas.height = 600; var ctx = canvas.getContext('2d'); var myChart = new Chart(ctx, { type: 'line', data: { labels: data['labels'], datasets: data['datasets'] }, options: { title: { display: true, text: title, }, responsive: false, animation: { duration: 0 }, elements: { line: { tension: 0 } }, scales: { yAxes: [{ ticks: { beginAtZero:true } }] } } }); } var data = [/* json data */]; var initialGraph = "explicit"; makeOptions(data, initialGraph); </script>