adds a rerender example
This commit is contained in:
parent
828d1952d8
commit
0fb4aa53e9
2 changed files with 55 additions and 0 deletions
50
_examples/rerender/main.go
Normal file
50
_examples/rerender/main.go
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/wcharczuk/go-chart/util"
|
||||||
|
|
||||||
|
chart "github.com/wcharczuk/go-chart"
|
||||||
|
)
|
||||||
|
|
||||||
|
var lock sync.Mutex
|
||||||
|
var graph *chart.Chart
|
||||||
|
var ts *chart.TimeSeries
|
||||||
|
|
||||||
|
func addData(t time.Time, e time.Duration) {
|
||||||
|
lock.Lock()
|
||||||
|
ts.XValues = append(ts.XValues, t)
|
||||||
|
ts.YValues = append(ts.YValues, util.Time.Millis(e))
|
||||||
|
lock.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func drawChart(res http.ResponseWriter, req *http.Request) {
|
||||||
|
start := time.Now()
|
||||||
|
defer func() {
|
||||||
|
addData(start, time.Since(start))
|
||||||
|
}()
|
||||||
|
if len(ts.XValues) == 0 {
|
||||||
|
http.Error(res, "no data (yet)", http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
res.Header().Set("Content-Type", "image/png")
|
||||||
|
if err := graph.Render(chart.PNG, res); err != nil {
|
||||||
|
log.Printf("%v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
ts = &chart.TimeSeries{
|
||||||
|
XValues: []time.Time{},
|
||||||
|
YValues: []float64{},
|
||||||
|
}
|
||||||
|
graph = &chart.Chart{
|
||||||
|
Series: []chart.Series{ts},
|
||||||
|
}
|
||||||
|
http.HandleFunc("/", drawChart)
|
||||||
|
log.Fatal(http.ListenAndServe(":8080", nil))
|
||||||
|
}
|
|
@ -9,6 +9,11 @@ var (
|
||||||
|
|
||||||
type timeUtil struct{}
|
type timeUtil struct{}
|
||||||
|
|
||||||
|
// Millis returns the duration as milliseconds.
|
||||||
|
func (tu timeUtil) Millis(d time.Duration) float64 {
|
||||||
|
return float64(d) / float64(time.Millisecond)
|
||||||
|
}
|
||||||
|
|
||||||
// TimeToFloat64 returns a float64 representation of a time.
|
// TimeToFloat64 returns a float64 representation of a time.
|
||||||
func (tu timeUtil) ToFloat64(t time.Time) float64 {
|
func (tu timeUtil) ToFloat64(t time.Time) float64 {
|
||||||
return float64(t.UnixNano())
|
return float64(t.UnixNano())
|
||||||
|
|
Loading…
Reference in a new issue