-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathwriter.go
112 lines (92 loc) · 2.58 KB
/
writer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package main
import (
"html"
"io/ioutil"
"os"
"strconv"
)
func writeGChartHTML() {
const s = `<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script><script type="text/javascript" src="chart.js"></script><div id="chart_div" style="width: 1200px; height: 800px"></div>`
content := []byte(html.UnescapeString(s))
_ = os.Mkdir("www", 0755)
err := ioutil.WriteFile("www/index.html", content, 0644)
check(err)
}
func writeGChartJs(title string, delay int, iterations int, data map[string][]float64) {
const s = `google.charts.load('current', {packages: ['corechart', 'line']});
google.charts.setOnLoadCallback(drawCurveTypes);
function drawCurveTypes() {
var data = new google.visualization.DataTable();
data.addColumn('number', 'X');`
content := []byte(html.UnescapeString(s))
dataRows := [][]float64{}
counter := 0
delayTime := delay - 1
var fields []string
for field := range data {
fields = append(fields, field)
}
for counter < iterations {
row := []float64{float64(delayTime)}
for field := range fields {
row = append(row, float64(data[fields[field]][counter]))
}
dataRows = append(dataRows, row)
delayTime += delay
counter++
}
dataStr := ""
for _, row := range dataRows {
dataStr += "["
for _, value := range row {
dataStr += strconv.FormatFloat(value, 'f', -1, 64) + ", "
}
dataStr = dataStr[:len(dataStr)-2]
dataStr += "], "
}
dataStr = dataStr[:len(dataStr)-2]
columnData := ""
for field := range fields {
columnData += "\n\tdata.addColumn('number', '" + fields[field] + "');"
}
columnData += "\n"
// write header stuff
_ = os.Mkdir("www", 0755)
err := ioutil.WriteFile("www/chart.js", content, 0644)
check(err)
// open up file again for appending more stuff
f, err := os.OpenFile("www/chart.js", os.O_APPEND|os.O_WRONLY, os.ModeAppend)
check(err)
defer f.Close()
// write field columns
_, err = f.WriteString(columnData)
check(err)
// write actual value data
values := "\n\n data.addRows([" + dataStr + "])\n\n"
_, err = f.WriteString(values)
check(err)
// write footer stuff
const footer = ` var options = {
title: '`
const mfooter = `',
hAxis: {
title: 'Time'
},
vAxis: {
title: ''
},
series: {
1: {curveType: 'function'}
}
};
var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, options);
}`
// what the...
_, err = f.WriteString(footer)
check(err)
_, err = f.WriteString(title)
check(err)
_, err = f.WriteString(mfooter)
check(err)
}