...

Source file src/github.com/google/go-github/v45/github/repos_traffic.go

Documentation: github.com/google/go-github/v45/github

     1  // Copyright 2016 The go-github AUTHORS. All rights reserved.
     2  //
     3  // Use of this source code is governed by a BSD-style
     4  // license that can be found in the LICENSE file.
     5  
     6  package github
     7  
     8  import (
     9  	"context"
    10  	"fmt"
    11  )
    12  
    13  // TrafficReferrer represent information about traffic from a referrer .
    14  type TrafficReferrer struct {
    15  	Referrer *string `json:"referrer,omitempty"`
    16  	Count    *int    `json:"count,omitempty"`
    17  	Uniques  *int    `json:"uniques,omitempty"`
    18  }
    19  
    20  // TrafficPath represent information about the traffic on a path of the repo.
    21  type TrafficPath struct {
    22  	Path    *string `json:"path,omitempty"`
    23  	Title   *string `json:"title,omitempty"`
    24  	Count   *int    `json:"count,omitempty"`
    25  	Uniques *int    `json:"uniques,omitempty"`
    26  }
    27  
    28  // TrafficData represent information about a specific timestamp in views or clones list.
    29  type TrafficData struct {
    30  	Timestamp *Timestamp `json:"timestamp,omitempty"`
    31  	Count     *int       `json:"count,omitempty"`
    32  	Uniques   *int       `json:"uniques,omitempty"`
    33  }
    34  
    35  // TrafficViews represent information about the number of views in the last 14 days.
    36  type TrafficViews struct {
    37  	Views   []*TrafficData `json:"views,omitempty"`
    38  	Count   *int           `json:"count,omitempty"`
    39  	Uniques *int           `json:"uniques,omitempty"`
    40  }
    41  
    42  // TrafficClones represent information about the number of clones in the last 14 days.
    43  type TrafficClones struct {
    44  	Clones  []*TrafficData `json:"clones,omitempty"`
    45  	Count   *int           `json:"count,omitempty"`
    46  	Uniques *int           `json:"uniques,omitempty"`
    47  }
    48  
    49  // TrafficBreakdownOptions specifies the parameters to methods that support breakdown per day or week.
    50  // Can be one of: day, week. Default: day.
    51  type TrafficBreakdownOptions struct {
    52  	Per string `url:"per,omitempty"`
    53  }
    54  
    55  // ListTrafficReferrers list the top 10 referrers over the last 14 days.
    56  //
    57  // GitHub API docs: https://docs.github.com/en/rest/metrics/traffic#get-top-referral-sources
    58  func (s *RepositoriesService) ListTrafficReferrers(ctx context.Context, owner, repo string) ([]*TrafficReferrer, *Response, error) {
    59  	u := fmt.Sprintf("repos/%v/%v/traffic/popular/referrers", owner, repo)
    60  
    61  	req, err := s.client.NewRequest("GET", u, nil)
    62  	if err != nil {
    63  		return nil, nil, err
    64  	}
    65  
    66  	var trafficReferrers []*TrafficReferrer
    67  	resp, err := s.client.Do(ctx, req, &trafficReferrers)
    68  	if err != nil {
    69  		return nil, resp, err
    70  	}
    71  
    72  	return trafficReferrers, resp, nil
    73  }
    74  
    75  // ListTrafficPaths list the top 10 popular content over the last 14 days.
    76  //
    77  // GitHub API docs: https://docs.github.com/en/rest/metrics/traffic#get-top-referral-paths
    78  func (s *RepositoriesService) ListTrafficPaths(ctx context.Context, owner, repo string) ([]*TrafficPath, *Response, error) {
    79  	u := fmt.Sprintf("repos/%v/%v/traffic/popular/paths", owner, repo)
    80  
    81  	req, err := s.client.NewRequest("GET", u, nil)
    82  	if err != nil {
    83  		return nil, nil, err
    84  	}
    85  
    86  	var paths []*TrafficPath
    87  	resp, err := s.client.Do(ctx, req, &paths)
    88  	if err != nil {
    89  		return nil, resp, err
    90  	}
    91  
    92  	return paths, resp, nil
    93  }
    94  
    95  // ListTrafficViews get total number of views for the last 14 days and breaks it down either per day or week.
    96  //
    97  // GitHub API docs: https://docs.github.com/en/rest/metrics/traffic#get-page-views
    98  func (s *RepositoriesService) ListTrafficViews(ctx context.Context, owner, repo string, opts *TrafficBreakdownOptions) (*TrafficViews, *Response, error) {
    99  	u := fmt.Sprintf("repos/%v/%v/traffic/views", owner, repo)
   100  	u, err := addOptions(u, opts)
   101  	if err != nil {
   102  		return nil, nil, err
   103  	}
   104  
   105  	req, err := s.client.NewRequest("GET", u, nil)
   106  	if err != nil {
   107  		return nil, nil, err
   108  	}
   109  
   110  	trafficViews := new(TrafficViews)
   111  	resp, err := s.client.Do(ctx, req, &trafficViews)
   112  	if err != nil {
   113  		return nil, resp, err
   114  	}
   115  
   116  	return trafficViews, resp, nil
   117  }
   118  
   119  // 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.
   120  //
   121  // GitHub API docs: https://docs.github.com/en/rest/metrics/traffic#get-repository-clones
   122  func (s *RepositoriesService) ListTrafficClones(ctx context.Context, owner, repo string, opts *TrafficBreakdownOptions) (*TrafficClones, *Response, error) {
   123  	u := fmt.Sprintf("repos/%v/%v/traffic/clones", owner, repo)
   124  	u, err := addOptions(u, opts)
   125  	if err != nil {
   126  		return nil, nil, err
   127  	}
   128  
   129  	req, err := s.client.NewRequest("GET", u, nil)
   130  	if err != nil {
   131  		return nil, nil, err
   132  	}
   133  
   134  	trafficClones := new(TrafficClones)
   135  	resp, err := s.client.Do(ctx, req, &trafficClones)
   136  	if err != nil {
   137  		return nil, resp, err
   138  	}
   139  
   140  	return trafficClones, resp, nil
   141  }
   142  

View as plain text