|
- // 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 (
- "context"
- "fmt"
- )
-
- // 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"`
- }
-
- // TrafficData represent information about a specific timestamp in views or clones list.
- type TrafficData struct {
- Timestamp *Timestamp `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(ctx context.Context, 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
- }
-
- var trafficReferrers []*TrafficReferrer
- resp, err := s.client.Do(ctx, req, &trafficReferrers)
- if err != nil {
- return nil, resp, err
- }
-
- return trafficReferrers, resp, nil
- }
-
- // 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(ctx context.Context, 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
- }
-
- var paths []*TrafficPath
- resp, err := s.client.Do(ctx, req, &paths)
- if err != nil {
- return nil, resp, err
- }
-
- return paths, resp, nil
- }
-
- // 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(ctx context.Context, 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
- }
-
- trafficViews := new(TrafficViews)
- resp, err := s.client.Do(ctx, req, &trafficViews)
- if err != nil {
- return nil, resp, err
- }
-
- return trafficViews, resp, nil
- }
-
- // 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(ctx context.Context, 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
- }
-
- trafficClones := new(TrafficClones)
- resp, err := s.client.Do(ctx, req, &trafficClones)
- if err != nil {
- return nil, resp, err
- }
-
- return trafficClones, resp, nil
- }
|