Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
14 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
210 changes: 210 additions & 0 deletions github/copilot.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,24 @@ type CopilotMetrics struct {
CopilotDotcomPullRequests *CopilotDotcomPullRequests `json:"copilot_dotcom_pull_requests,omitempty"`
}

// CopilotMetricsReportOptions specifies the optional parameters for single-day metrics report endpoints.
type CopilotMetricsReportOptions struct {
Day string `url:"day"` // Required, format: YYYY-MM-DD
}

// CopilotMetricsDailyReport represents the response from 1-day Copilot metrics report endpoints.
type CopilotMetricsDailyReport struct {
DownloadLinks []string `json:"download_links"`
ReportDay string `json:"report_day"`
}

// CopilotMetricsReport represents the response from 28-day Copilot metrics report endpoints.
type CopilotMetricsReport struct {
DownloadLinks []string `json:"download_links"`
ReportStartDay string `json:"report_start_day"`
ReportEndDay string `json:"report_end_day"`
}

// UnmarshalJSON implements the json.Unmarshaler interface.
func (cp *CopilotSeatDetails) UnmarshalJSON(data []byte) error {
// Using an alias to avoid infinite recursion when calling json.Unmarshal
Expand Down Expand Up @@ -574,3 +592,195 @@ func (s *CopilotService) GetOrganizationTeamMetrics(ctx context.Context, org, te

return metrics, resp, nil
}

// GetEnterpriseDailyMetricsReport gets a report containing Copilot metrics for a single day for an enterprise.
//
// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/copilot/copilot-usage-metrics#get-copilot-enterprise-usage-metrics-for-a-specific-day
//
//meta:operation GET /enterprises/{enterprise}/copilot/metrics/reports/enterprise-1-day
func (s *CopilotService) GetEnterpriseDailyMetricsReport(ctx context.Context, enterprise string, opts *CopilotMetricsReportOptions) (*CopilotMetricsDailyReport, *Response, error) {
u := fmt.Sprintf("enterprises/%v/copilot/metrics/reports/enterprise-1-day", enterprise)
u, err := addOptions(u, opts)
if err != nil {
return nil, nil, err
}

req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}

var report *CopilotMetricsDailyReport
resp, err := s.client.Do(ctx, req, &report)
if err != nil {
return nil, resp, err
}

return report, resp, nil
}

// GetEnterpriseMetricsReport gets a report containing Copilot metrics for a 28-day rolling window for an enterprise.
//
// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/copilot/copilot-usage-metrics#get-copilot-enterprise-usage-metrics
//
//meta:operation GET /enterprises/{enterprise}/copilot/metrics/reports/enterprise-28-day/latest
func (s *CopilotService) GetEnterpriseMetricsReport(ctx context.Context, enterprise string) (*CopilotMetricsReport, *Response, error) {
u := fmt.Sprintf("enterprises/%v/copilot/metrics/reports/enterprise-28-day/latest", enterprise)

req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}

var report *CopilotMetricsReport
resp, err := s.client.Do(ctx, req, &report)
if err != nil {
return nil, resp, err
}

return report, resp, nil
}

// GetEnterpriseUsersDailyMetricsReport gets a report containing Copilot user metrics for a single day for an enterprise.
//
// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/copilot/copilot-usage-metrics#get-copilot-users-usage-metrics-for-a-specific-day
//
//meta:operation GET /enterprises/{enterprise}/copilot/metrics/reports/users-1-day
func (s *CopilotService) GetEnterpriseUsersDailyMetricsReport(ctx context.Context, enterprise string, opts *CopilotMetricsReportOptions) (*CopilotMetricsDailyReport, *Response, error) {
u := fmt.Sprintf("enterprises/%v/copilot/metrics/reports/users-1-day", enterprise)
u, err := addOptions(u, opts)
if err != nil {
return nil, nil, err
}

req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}

var report *CopilotMetricsDailyReport
resp, err := s.client.Do(ctx, req, &report)
if err != nil {
return nil, resp, err
}

return report, resp, nil
}

// GetEnterpriseUsersMetricsReport gets a report containing Copilot user metrics for a 28-day rolling window for an enterprise.
//
// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/copilot/copilot-usage-metrics#get-copilot-users-usage-metrics
//
//meta:operation GET /enterprises/{enterprise}/copilot/metrics/reports/users-28-day/latest
func (s *CopilotService) GetEnterpriseUsersMetricsReport(ctx context.Context, enterprise string) (*CopilotMetricsReport, *Response, error) {
u := fmt.Sprintf("enterprises/%v/copilot/metrics/reports/users-28-day/latest", enterprise)

req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}

var report *CopilotMetricsReport
resp, err := s.client.Do(ctx, req, &report)
if err != nil {
return nil, resp, err
}

return report, resp, nil
}

// GetOrganizationDailyMetricsReport gets a report containing Copilot metrics for a single day for an organization.
//
// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/copilot/copilot-usage-metrics#get-copilot-organization-usage-metrics-for-a-specific-day
//
//meta:operation GET /orgs/{org}/copilot/metrics/reports/organization-1-day
func (s *CopilotService) GetOrganizationDailyMetricsReport(ctx context.Context, org string, opts *CopilotMetricsReportOptions) (*CopilotMetricsDailyReport, *Response, error) {
u := fmt.Sprintf("orgs/%v/copilot/metrics/reports/organization-1-day", org)
u, err := addOptions(u, opts)
if err != nil {
return nil, nil, err
}

req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}

var report *CopilotMetricsDailyReport
resp, err := s.client.Do(ctx, req, &report)
if err != nil {
return nil, resp, err
}

return report, resp, nil
}

// GetOrganizationMetricsReport gets a report containing Copilot metrics for a 28-day rolling window for an organization.
//
// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/copilot/copilot-usage-metrics#get-copilot-organization-usage-metrics
//
//meta:operation GET /orgs/{org}/copilot/metrics/reports/organization-28-day/latest
func (s *CopilotService) GetOrganizationMetricsReport(ctx context.Context, org string) (*CopilotMetricsReport, *Response, error) {
u := fmt.Sprintf("orgs/%v/copilot/metrics/reports/organization-28-day/latest", org)

req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}

var report *CopilotMetricsReport
resp, err := s.client.Do(ctx, req, &report)
if err != nil {
return nil, resp, err
}

return report, resp, nil
}

// GetOrganizationUsersDailyMetricsReport gets a report containing Copilot user metrics for a single day for an organization.
//
// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/copilot/copilot-usage-metrics#get-copilot-organization-users-usage-metrics-for-a-specific-day
//
//meta:operation GET /orgs/{org}/copilot/metrics/reports/users-1-day
func (s *CopilotService) GetOrganizationUsersDailyMetricsReport(ctx context.Context, org string, opts *CopilotMetricsReportOptions) (*CopilotMetricsDailyReport, *Response, error) {
u := fmt.Sprintf("orgs/%v/copilot/metrics/reports/users-1-day", org)
u, err := addOptions(u, opts)
if err != nil {
return nil, nil, err
}

req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}

var report *CopilotMetricsDailyReport
resp, err := s.client.Do(ctx, req, &report)
if err != nil {
return nil, resp, err
}

return report, resp, nil
}

// GetOrganizationUsersMetricsReport gets a report containing Copilot user metrics for a 28-day rolling window for an organization.
//
// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/copilot/copilot-usage-metrics#get-copilot-organization-users-usage-metrics
//
//meta:operation GET /orgs/{org}/copilot/metrics/reports/users-28-day/latest
func (s *CopilotService) GetOrganizationUsersMetricsReport(ctx context.Context, org string) (*CopilotMetricsReport, *Response, error) {
u := fmt.Sprintf("orgs/%v/copilot/metrics/reports/users-28-day/latest", org)

req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}

var report *CopilotMetricsReport
resp, err := s.client.Do(ctx, req, &report)
if err != nil {
return nil, resp, err
}

return report, resp, nil
}
Loading