X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=server%2Fgraph.go;h=ed5c7fd8338cedb694944674e0cdfe1c440cdca0;hb=e7d61e08ebe25d5ce3193e792717acd4bb0ffb3e;hp=5134ed6659f2ed5bd8539efe9d1580def3c4aec0;hpb=72f42e67ee500535d819109eaee7f9b8e3046f17;p=sysdb%2Fwebui.git diff --git a/server/graph.go b/server/graph.go index 5134ed6..ed5c7fd 100644 --- a/server/graph.go +++ b/server/graph.go @@ -35,11 +35,11 @@ import ( "net/http" "time" - "code.google.com/p/plotinum/plot" - "code.google.com/p/plotinum/plotter" - "code.google.com/p/plotinum/plotutil" - "code.google.com/p/plotinum/vg" - "code.google.com/p/plotinum/vg/vgsvg" + "github.com/gonum/plot" + "github.com/gonum/plot/plotter" + "github.com/gonum/plot/plotutil" + "github.com/gonum/plot/vg" + "github.com/sysdb/go/client" "github.com/sysdb/go/sysdb" ) @@ -71,13 +71,18 @@ func (s *Server) graph(w http.ResponseWriter, req request) { return } - res, err := s.query("TIMESERIES %s.%s START %s END %s", req.args[0], req.args[1], start, end) + q, err := client.QueryString("TIMESERIES %s.%s START %s END %s", req.args[0], req.args[1], start, end) + if err != nil { + s.internal(w, fmt.Errorf("Failed to retrieve graph data: %v", err)) + return + } + res, err := s.c.Query(q) if err != nil { s.internal(w, fmt.Errorf("Failed to retrieve graph data: %v", err)) return } - ts, ok := res.(sysdb.Timeseries) + ts, ok := res.(*sysdb.Timeseries) if !ok { s.internal(w, errors.New("TIMESERIES did not return a time-series")) return @@ -89,7 +94,7 @@ func (s *Server) graph(w http.ResponseWriter, req request) { return } p.Add(plotter.NewGrid()) - p.X.Tick.Marker = dateTicks + p.X.Tick.Marker = dateTicks{} var i int for name, data := range ts.Data { @@ -109,11 +114,14 @@ func (s *Server) graph(w http.ResponseWriter, req request) { i++ } - c := vgsvg.New(vg.Length(500), vg.Length(200)) - p.Draw(plot.MakeDrawArea(c)) + pw, err := p.WriterTo(vg.Length(500), vg.Length(200), "svg") + if err != nil { + s.internal(w, fmt.Errorf("Failed to write plot: %v", err)) + return + } var buf bytes.Buffer - if _, err := c.WriteTo(&buf); err != nil { + if _, err := pw.WriteTo(&buf); err != nil { s.internal(w, fmt.Errorf("Failed to write plot: %v", err)) return } @@ -122,10 +130,12 @@ func (s *Server) graph(w http.ResponseWriter, req request) { io.Copy(w, &buf) } -func dateTicks(min, max float64) []plot.Tick { +type dateTicks struct{} + +func (dateTicks) Ticks(min, max float64) []plot.Tick { // TODO: this is surely not the best we can do // but it'll distribute ticks evenly. - ticks := plot.DefaultTicks(min, max) + ticks := plot.DefaultTicks{}.Ticks(min, max) for i, t := range ticks { if t.Label == "" { // Skip minor ticks.