aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/google/go-github/github/repos_traffic.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/google/go-github/github/repos_traffic.go')
-rw-r--r--vendor/github.com/google/go-github/github/repos_traffic.go173
1 files changed, 173 insertions, 0 deletions
diff --git a/vendor/github.com/google/go-github/github/repos_traffic.go b/vendor/github.com/google/go-github/github/repos_traffic.go
new file mode 100644
index 0000000..b6c8d83
--- /dev/null
+++ b/vendor/github.com/google/go-github/github/repos_traffic.go
@@ -0,0 +1,173 @@
+// Copyright 2016 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+ "fmt"
+ "strconv"
+ "time"
+)
+
+// TrafficReferrer represent information about traffic from a referrer .
+type TrafficReferrer struct {
+ Referrer *string `json:"referrer,omitempty"`
+ Count *int `json:"count,omitempty"`
+ Uniques *int `json:"uniques,omitempty"`
+}
+
+// TrafficPath represent information about the traffic on a path of the repo.
+type TrafficPath struct {
+ Path *string `json:"path,omitempty"`
+ Title *string `json:"title,omitempty"`
+ Count *int `json:"count,omitempty"`
+ Uniques *int `json:"uniques,omitempty"`
+}
+
+// TimestampMS represents a timestamp as used in datapoint.
+//
+// It's only used to parse the result given by the API which are unix timestamp in milliseonds.
+type TimestampMS struct {
+ time.Time
+}
+
+// UnmarshalJSON parse unix timestamp.
+func (t *TimestampMS) UnmarshalJSON(b []byte) error {
+ s := string(b)
+ i, err := strconv.ParseInt(s, 10, 64)
+ if err != nil {
+ return err
+ }
+ // We can drop the reaminder as returned values are days and it will always be 0
+ *t = TimestampMS{time.Unix(i/1000, 0)}
+ return nil
+}
+
+// TrafficData represent information about a specific timestamp in views or clones list.
+type TrafficData struct {
+ Timestamp *TimestampMS `json:"timestamp,omitempty"`
+ Count *int `json:"count,omitempty"`
+ Uniques *int `json:"uniques,omitempty"`
+}
+
+// TrafficViews represent information about the number of views in the last 14 days.
+type TrafficViews struct {
+ Views []*TrafficData `json:"views,omitempty"`
+ Count *int `json:"count,omitempty"`
+ Uniques *int `json:"uniques,omitempty"`
+}
+
+// TrafficClones represent information about the number of clones in the last 14 days.
+type TrafficClones struct {
+ Clones []*TrafficData `json:"clones,omitempty"`
+ Count *int `json:"count,omitempty"`
+ Uniques *int `json:"uniques,omitempty"`
+}
+
+// TrafficBreakdownOptions specifies the parameters to methods that support breakdown per day or week.
+// Can be one of: day, week. Default: day.
+type TrafficBreakdownOptions struct {
+ Per string `url:"per,omitempty"`
+}
+
+// ListTrafficReferrers list the top 10 referrers over the last 14 days.
+//
+// GitHub API docs: https://developer.github.com/v3/repos/traffic/#list-referrers
+func (s *RepositoriesService) ListTrafficReferrers(owner, repo string) ([]*TrafficReferrer, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/traffic/popular/referrers", owner, repo)
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeTrafficPreview)
+
+ trafficReferrers := new([]*TrafficReferrer)
+ resp, err := s.client.Do(req, &trafficReferrers)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return *trafficReferrers, resp, err
+}
+
+// ListTrafficPaths list the top 10 popular content over the last 14 days.
+//
+// GitHub API docs: https://developer.github.com/v3/repos/traffic/#list-paths
+func (s *RepositoriesService) ListTrafficPaths(owner, repo string) ([]*TrafficPath, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/traffic/popular/paths", owner, repo)
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeTrafficPreview)
+
+ var paths = new([]*TrafficPath)
+ resp, err := s.client.Do(req, &paths)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return *paths, resp, err
+}
+
+// ListTrafficViews get total number of views for the last 14 days and breaks it down either per day or week.
+//
+// GitHub API docs: https://developer.github.com/v3/repos/traffic/#views
+func (s *RepositoriesService) ListTrafficViews(owner, repo string, opt *TrafficBreakdownOptions) (*TrafficViews, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/traffic/views", owner, repo)
+ u, err := addOptions(u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeTrafficPreview)
+
+ trafficViews := new(TrafficViews)
+ resp, err := s.client.Do(req, &trafficViews)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return trafficViews, resp, err
+}
+
+// ListTrafficClones get total number of clones for the last 14 days and breaks it down either per day or week for the last 14 days.
+//
+// GitHub API docs: https://developer.github.com/v3/repos/traffic/#views
+func (s *RepositoriesService) ListTrafficClones(owner, repo string, opt *TrafficBreakdownOptions) (*TrafficClones, *Response, error) {
+ u := fmt.Sprintf("repos/%v/%v/traffic/clones", owner, repo)
+ u, err := addOptions(u, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest("GET", u, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeTrafficPreview)
+
+ trafficClones := new(TrafficClones)
+ resp, err := s.client.Do(req, &trafficClones)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return trafficClones, resp, err
+}