adds a rerender example
This commit is contained in:
parent
828d1952d8
commit
0fb4aa53e9
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{}
|
||||
|
||||
// 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.
|
||||
func (tu timeUtil) ToFloat64(t time.Time) float64 {
|
||||
return float64(t.UnixNano())
|
||||
|
|
Loading…
Reference in New Issue
Block a user