Code

graph: Introduce a new type representing a metric.
authorSebastian Harl <sh@tokkee.org>
Wed, 13 May 2015 20:34:43 +0000 (22:34 +0200)
committerSebastian Harl <sh@tokkee.org>
Wed, 13 May 2015 20:34:43 +0000 (22:34 +0200)
The new type allows to add further information to a metric.

graph/graph.go
server/graph.go

index cb1852cbf71fc6ed5c76364e6fd9a756d43627df..7985dc47f0daba74ff952c48d50cf830b1445c8f 100644 (file)
@@ -38,13 +38,22 @@ import (
        "github.com/sysdb/go/sysdb"
 )
 
-// A Graph represents a single graph. It may reference multiple time-series.
+// A Metric represents a single data-source of a graph.
+type Metric struct {
+       // The unique identifier of the metric.
+       Hostname, Identifier string
+
+       // Attributes describing details of the metric.
+       Attributes map[string]string
+}
+
+// A Graph represents a single graph. It may reference multiple data-sources.
 type Graph struct {
        // Time range of the graph.
        Start, End time.Time
 
-       // Metrics: {<hostname>, <identifier>}
-       Metrics [][2]string
+       // Content of the graph.
+       Metrics []Metric
 }
 
 type pl struct {
@@ -53,8 +62,9 @@ type pl struct {
        ts int // Index of the current time-series.
 }
 
-func (p *pl) addTimeseries(c *client.Client, metric [2]string, start, end time.Time) error {
-       q, err := client.QueryString("TIMESERIES %s.%s START %s END %s", metric[0], metric[1], start, end)
+func (p *pl) addTimeseries(c *client.Client, metric Metric, start, end time.Time) error {
+       q, err := client.QueryString("TIMESERIES %s.%s START %s END %s",
+               metric.Hostname, metric.Identifier, start, end)
        if err != nil {
                return fmt.Errorf("Failed to retrieve graph data: %v", err)
        }
index 9c679bc5a0386a9ed48a4900a8a5c7d9a7f7af27..7509485930e23f60f1dc140e8776d3d0b473c8b5 100644 (file)
@@ -64,7 +64,7 @@ func (s *Server) graph(w http.ResponseWriter, req request) {
        g := &graph.Graph{
                Start:   start,
                End:     end,
-               Metrics: [][2]string{{req.args[0], req.args[1]}},
+               Metrics: []graph.Metric{{Hostname: req.args[0], Identifier: req.args[1]}},
        }
        p, err := g.Plot(s.c)
        if err != nil {