UNPKG

2.51 kBJavaScriptView Raw
1var Drawille = require('drawille')
2var prettybytes = require('pretty-bytes')
3
4module.exports.create = function(box) {
5 var width = (box.width - 3) * 2
6 var height = (box.height - 2) * 4
7 var canvas = new Drawille(width, height)
8 var values = []
9 var chart = {
10 chart: canvas,
11 values: values,
12 width: width,
13 height: height,
14 ready: false,
15 min: 0,
16 max: 0
17 }
18
19 return chart
20}
21
22module.exports.resize = function(chart, box) {
23 var width = (box.width - 3) * 2
24 var height = (box.height - 2) * 4
25 chart.chart = new Drawille(width, height)
26 chart.width = width
27 chart.height = height
28}
29
30module.exports.draw = function(chart, position) {
31 var c = chart.chart
32 c.clear()
33
34 if (!chart.ready) {
35 return false
36 }
37
38 var dataPointsToKeep = 1000
39
40 chart.values[position] = chart.value
41
42 if (position > dataPointsToKeep) {
43 delete chart.values[position - dataPointsToKeep]
44 }
45
46 chart.min = 0
47 chart.max = 0 // 1kb
48 chart.average = 0
49
50 var avgCount = 0
51 // do first pass to determine min/max
52 for (var i = 0; i < chart.width; i++) {
53 var rawval = chart.values[chart.values.length - i]
54 if (rawval > 0) {
55 avgCount++
56 chart.average += rawval
57 if (rawval < chart.min) chart.min = rawval
58 if (rawval > chart.max) chart.max = rawval
59 }
60 }
61
62 chart.average = ~~(chart.average / avgCount)
63
64 for (var pos in chart.values) {
65 var p = parseInt(pos, 10) + (chart.width - chart.values.length)
66 var pval = computeValue(chart.values[pos])
67
68 if (p > 0 && chart.values[pos] > 0) {
69 c.set(p, chart.height - 1)
70 }
71
72 for (var y = 0; y < pval; y++) {
73 c.set(p, chart.height - y)
74 }
75 }
76
77 // Add percentage to top right of the chart by splicing it into the braille data
78 var textOutput = c.frame().split("\n")
79
80 var currentVal = prettybytes(chart.values[chart.values.length - 1])
81 var msg = "current: " + currentVal + ", avg: " + prettybytes(chart.average) + ', max: ' + prettybytes(chart.max)
82 textOutput[0] = textOutput[0].slice(0, textOutput[0].length - msg.length) + msg
83
84 return textOutput.join("\n")
85
86 function computeValue(input) {
87 var max = chart.max
88 if (max < 1000) max = 1000
89 return ~~scale(input, chart.min, max, 0, chart.height)
90 }
91}
92
93function scale( x, fromLow, fromHigh, toLow, toHigh ) {
94 return ( x - fromLow ) * ( toHigh - toLow ) / ( fromHigh - fromLow ) + toLow
95}
96
97function stringRepeat(string, num) {
98 if (num < 0) return ''
99 return new Array(num + 1).join(string)
100}
101
102