From ae5d1898037be4f59bf6517ad76b13cc16f595ce Mon Sep 17 00:00:00 2001 From: =Corey Hulen Date: Thu, 22 Oct 2015 18:04:06 -0700 Subject: Adding analytics tab --- model/analytics_row.go | 55 +++++++++++++++++++++++++++++++++++++++++++++ model/analytics_row_test.go | 37 ++++++++++++++++++++++++++++++ model/client.go | 9 ++++++++ 3 files changed, 101 insertions(+) create mode 100644 model/analytics_row.go create mode 100644 model/analytics_row_test.go (limited to 'model') diff --git a/model/analytics_row.go b/model/analytics_row.go new file mode 100644 index 000000000..ed1d69dd2 --- /dev/null +++ b/model/analytics_row.go @@ -0,0 +1,55 @@ +// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package model + +import ( + "encoding/json" + "io" +) + +type AnalyticsRow struct { + Name string `json:"name"` + Value float64 `json:"value"` +} + +type AnalyticsRows []*AnalyticsRow + +func (me *AnalyticsRow) ToJson() string { + b, err := json.Marshal(me) + if err != nil { + return "" + } else { + return string(b) + } +} + +func AnalyticsRowFromJson(data io.Reader) *AnalyticsRow { + decoder := json.NewDecoder(data) + var me AnalyticsRow + err := decoder.Decode(&me) + if err == nil { + return &me + } else { + return nil + } +} + +func (me AnalyticsRows) ToJson() string { + if b, err := json.Marshal(me); err != nil { + return "[]" + } else { + return string(b) + } +} + +func AnalyticsRowsFromJson(data io.Reader) AnalyticsRows { + decoder := json.NewDecoder(data) + var me AnalyticsRows + err := decoder.Decode(&me) + if err == nil { + return me + } else { + return nil + } +} diff --git a/model/analytics_row_test.go b/model/analytics_row_test.go new file mode 100644 index 000000000..1202d5b52 --- /dev/null +++ b/model/analytics_row_test.go @@ -0,0 +1,37 @@ +// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package model + +import ( + "strings" + "testing" +) + +func TestAnalyticsRowJson(t *testing.T) { + a1 := AnalyticsRow{} + a1.Name = "2015-10-12" + a1.Value = 12345.0 + json := a1.ToJson() + ra1 := AnalyticsRowFromJson(strings.NewReader(json)) + + if a1.Name != ra1.Name { + t.Fatal("days didn't match") + } +} + +func TestAnalyticsRowsJson(t *testing.T) { + a1 := AnalyticsRow{} + a1.Name = "2015-10-12" + a1.Value = 12345.0 + + var a1s AnalyticsRows = make([]*AnalyticsRow, 1) + a1s[0] = &a1 + + ljson := a1s.ToJson() + results := AnalyticsRowsFromJson(strings.NewReader(ljson)) + + if a1s[0].Name != results[0].Name { + t.Fatal("Ids do not match") + } +} diff --git a/model/client.go b/model/client.go index 9183dcacb..6361c8e12 100644 --- a/model/client.go +++ b/model/client.go @@ -414,6 +414,15 @@ func (c *Client) TestEmail(config *Config) (*Result, *AppError) { } } +func (c *Client) GetAnalytics(teamId, name string) (*Result, *AppError) { + if r, err := c.DoApiGet("/admin/analytics/"+teamId+"/"+name, "", ""); err != nil { + return nil, err + } else { + return &Result{r.Header.Get(HEADER_REQUEST_ID), + r.Header.Get(HEADER_ETAG_SERVER), AnalyticsRowsFromJson(r.Body)}, nil + } +} + func (c *Client) CreateChannel(channel *Channel) (*Result, *AppError) { if r, err := c.DoApiPost("/channels/create", channel.ToJson()); err != nil { return nil, err -- cgit v1.2.3-1-g7c22