aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/google/go-github/github/admin_stats.go
blob: b5645f8c17646ed36db0b4ff25af1cd751f51020 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
// Copyright 2017 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"
)

// AdminStats represents a variety of stats of a Github Enterprise
// installation.
type AdminStats struct {
	Issues     *IssueStats     `json:"issues,omitempty"`
	Hooks      *HookStats      `json:"hooks,omitempty"`
	Milestones *MilestoneStats `json:"milestones,omitempty"`
	Orgs       *OrgStats       `json:"orgs,omitempty"`
	Comments   *CommentStats   `json:"comments,omitempty"`
	Pages      *PageStats      `json:"pages,omitempty"`
	Users      *UserStats      `json:"users,omitempty"`
	Gists      *GistStats      `json:"gists,omitempty"`
	Pulls      *PullStats      `json:"pulls,omitempty"`
	Repos      *RepoStats      `json:"repos,omitempty"`
}

func (s AdminStats) String() string {
	return Stringify(s)
}

// IssueStats represents the number of total, open and closed issues.
type IssueStats struct {
	TotalIssues  *int `json:"total_issues,omitempty"`
	OpenIssues   *int `json:"open_issues,omitempty"`
	ClosedIssues *int `json:"closed_issues,omitempty"`
}

func (s IssueStats) String() string {
	return Stringify(s)
}

// HookStats represents the number of total, active and inactive hooks.
type HookStats struct {
	TotalHooks    *int `json:"total_hooks,omitempty"`
	ActiveHooks   *int `json:"active_hooks,omitempty"`
	InactiveHooks *int `json:"inactive_hooks,omitempty"`
}

func (s HookStats) String() string {
	return Stringify(s)
}

// MilestoneStats represents the number of total, open and close milestones.
type MilestoneStats struct {
	TotalMilestones  *int `json:"total_milestones,omitempty"`
	OpenMilestones   *int `json:"open_milestones,omitempty"`
	ClosedMilestones *int `json:"closed_milestones,omitempty"`
}

func (s MilestoneStats) String() string {
	return Stringify(s)
}

// OrgStats represents the number of total, disabled organizations and the team
// and team member count.
type OrgStats struct {
	TotalOrgs        *int `json:"total_orgs,omitempty"`
	DisabledOrgs     *int `json:"disabled_orgs,omitempty"`
	TotalTeams       *int `json:"total_teams,omitempty"`
	TotalTeamMembers *int `json:"total_team_members,omitempty"`
}

func (s OrgStats) String() string {
	return Stringify(s)
}

// CommentStats represents the number of total comments on commits, gists, issues
// and pull requests.
type CommentStats struct {
	TotalCommitComments      *int `json:"total_commit_comments,omitempty"`
	TotalGistComments        *int `json:"total_gist_comments,omitempty"`
	TotalIssueComments       *int `json:"total_issue_comments,omitempty"`
	TotalPullRequestComments *int `json:"total_pull_request_comments,omitempty"`
}

func (s CommentStats) String() string {
	return Stringify(s)
}

// PageStats represents the total number of github pages.
type PageStats struct {
	TotalPages *int `json:"total_pages,omitempty"`
}

func (s PageStats) String() string {
	return Stringify(s)
}

// UserStats represents the number of total, admin and suspended users.
type UserStats struct {
	TotalUsers     *int `json:"total_users,omitempty"`
	AdminUsers     *int `json:"admin_users,omitempty"`
	SuspendedUsers *int `json:"suspended_users,omitempty"`
}

func (s UserStats) String() string {
	return Stringify(s)
}

// GistStats represents the number of total, private and public gists.
type GistStats struct {
	TotalGists   *int `json:"total_gists,omitempty"`
	PrivateGists *int `json:"private_gists,omitempty"`
	PublicGists  *int `json:"public_gists,omitempty"`
}

func (s GistStats) String() string {
	return Stringify(s)
}

// PullStats represents the number of total, merged, mergable and unmergeable
// pull-requests.
type PullStats struct {
	TotalPulls      *int `json:"total_pulls,omitempty"`
	MergedPulls     *int `json:"merged_pulls,omitempty"`
	MergablePulls   *int `json:"mergeable_pulls,omitempty"`
	UnmergablePulls *int `json:"unmergeable_pulls,omitempty"`
}

func (s PullStats) String() string {
	return Stringify(s)
}

// RepoStats represents the number of total, root, fork, organization repositories
// together with the total number of pushes and wikis.
type RepoStats struct {
	TotalRepos  *int `json:"total_repos,omitempty"`
	RootRepos   *int `json:"root_repos,omitempty"`
	ForkRepos   *int `json:"fork_repos,omitempty"`
	OrgRepos    *int `json:"org_repos,omitempty"`
	TotalPushes *int `json:"total_pushes,omitempty"`
	TotalWikis  *int `json:"total_wikis,omitempty"`
}

func (s RepoStats) String() string {
	return Stringify(s)
}

// GetAdminStats returns a variety of metrics about a Github Enterprise
// installation.
//
// Please note that this is only available to site administrators,
// otherwise it will error with a 404 not found (instead of 401 or 403).
//
// GitHub API docs: https://developer.github.com/v3/enterprise-admin/admin_stats/
func (s *AdminService) GetAdminStats(ctx context.Context) (*AdminStats, *Response, error) {
	u := fmt.Sprintf("enterprise/stats/all")
	req, err := s.client.NewRequest("GET", u, nil)
	if err != nil {
		return nil, nil, err
	}

	m := new(AdminStats)
	resp, err := s.client.Do(ctx, req, m)
	if err != nil {
		return nil, resp, err
	}

	return m, resp, nil
}