feat: Add DownloadCopilotMetrics helper method#4149
Conversation
DownloadCopilotMetrics helper method
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #4149 +/- ##
=======================================
Coverage 93.75% 93.76%
=======================================
Files 211 211
Lines 19687 19701 +14
=======================================
+ Hits 18458 18472 +14
Misses 1031 1031
Partials 198 198 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
gmlewis
left a comment
There was a problem hiding this comment.
Thank you, @MasterOogway1466.
Please resolve the merge conflicts in all the deprecation warning comments from the master branch, then make sure you run the linter in step 4 of CONTRIBUTING.md and push the changes to this branch and we can then proceed with a full review.
|
@MasterOogway1466 - did you run |
|
Hey @gmlewis , I did run the script and I got the below issue: |
Ah, right. Since this is a helper method that has no GitHub v3 API direct correspondence, then adding this method as an exception is the correct way to proceed. |
|
@MasterOogway1466 - it would also be good if you could attempt to cover as many lines in your function as possible in the unit tests to keep the codecoverage reports high. |
…ethod in metadata
Co-authored-by: Glenn Lewis <[email protected]>
gmlewis
left a comment
There was a problem hiding this comment.
Thank you, @MasterOogway1466!
LGTM.
Awaiting second LGTM+Approval from any other contributor to this repo before merging.
cc: @stevehipwell - @alexandear - @zyfy29 - @Not-Dhananjay-Mishra - @munlicode
|
Thank you, @stevehipwell! |
|
I just had a look at it and it doesn't work for me. Mainly because the data format changed of the report and cannot simply be mapped to // GetOrganizationDailyMetricsReport
type AutoGenerated struct {
Day string `json:"day"`
OrganizationID string `json:"organization_id"`
EnterpriseID string `json:"enterprise_id"`
DailyActiveUsers int `json:"daily_active_users"`
DailyActiveCopilotCloudAgentUsers int `json:"daily_active_copilot_cloud_agent_users"`
WeeklyActiveUsers int `json:"weekly_active_users"`
WeeklyActiveCopilotCloudAgentUsers int `json:"weekly_active_copilot_cloud_agent_users"`
MonthlyActiveUsers int `json:"monthly_active_users"`
MonthlyActiveChatUsers int `json:"monthly_active_chat_users"`
MonthlyActiveAgentUsers int `json:"monthly_active_agent_users"`
MonthlyActiveCopilotCloudAgentUsers int `json:"monthly_active_copilot_cloud_agent_users"`
UserInitiatedInteractionCount int `json:"user_initiated_interaction_count"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
TotalsByIde []struct {
Ide string `json:"ide"`
UserInitiatedInteractionCount int `json:"user_initiated_interaction_count"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_ide"`
TotalsByFeature []struct {
Feature string `json:"feature"`
UserInitiatedInteractionCount int `json:"user_initiated_interaction_count"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_feature"`
TotalsByLanguageFeature []struct {
Language string `json:"language"`
Feature string `json:"feature"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_language_feature"`
TotalsByLanguageModel []struct {
Language string `json:"language"`
Model string `json:"model"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_language_model"`
TotalsByModelFeature []struct {
Model string `json:"model"`
Feature string `json:"feature"`
UserInitiatedInteractionCount int `json:"user_initiated_interaction_count"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_model_feature"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
PullRequests struct {
TotalReviewed int `json:"total_reviewed"`
TotalCreated int `json:"total_created"`
TotalCreatedByCopilot int `json:"total_created_by_copilot"`
TotalReviewedByCopilot int `json:"total_reviewed_by_copilot"`
TotalMerged int `json:"total_merged"`
TotalSuggestions int `json:"total_suggestions"`
TotalAppliedSuggestions int `json:"total_applied_suggestions"`
TotalMergedCreatedByCopilot int `json:"total_merged_created_by_copilot"`
TotalCopilotSuggestions int `json:"total_copilot_suggestions"`
TotalCopilotAppliedSuggestions int `json:"total_copilot_applied_suggestions"`
TotalMergedReviewedByCopilot int `json:"total_merged_reviewed_by_copilot"`
} `json:"pull_requests"`
}
// GetOrganizationMetricsReport
type AutoGenerated struct {
ReportStartDay string `json:"report_start_day"`
ReportEndDay string `json:"report_end_day"`
OrganizationID string `json:"organization_id"`
EnterpriseID string `json:"enterprise_id"`
CreatedAt time.Time `json:"created_at"`
DayTotals []struct {
Day string `json:"day"`
OrganizationID string `json:"organization_id"`
EnterpriseID string `json:"enterprise_id"`
DailyActiveUsers int `json:"daily_active_users"`
DailyActiveCopilotCloudAgentUsers int `json:"daily_active_copilot_cloud_agent_users,omitempty"`
WeeklyActiveUsers int `json:"weekly_active_users"`
WeeklyActiveCopilotCloudAgentUsers int `json:"weekly_active_copilot_cloud_agent_users,omitempty"`
MonthlyActiveUsers int `json:"monthly_active_users"`
MonthlyActiveChatUsers int `json:"monthly_active_chat_users"`
MonthlyActiveAgentUsers int `json:"monthly_active_agent_users"`
MonthlyActiveCopilotCloudAgentUsers int `json:"monthly_active_copilot_cloud_agent_users,omitempty"`
UserInitiatedInteractionCount int `json:"user_initiated_interaction_count"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
TotalsByIde []struct {
Ide string `json:"ide"`
UserInitiatedInteractionCount int `json:"user_initiated_interaction_count"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_ide"`
TotalsByFeature []struct {
Feature string `json:"feature"`
UserInitiatedInteractionCount int `json:"user_initiated_interaction_count"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_feature"`
TotalsByLanguageFeature []struct {
Language string `json:"language"`
Feature string `json:"feature"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_language_feature"`
TotalsByLanguageModel []struct {
Language string `json:"language"`
Model string `json:"model"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_language_model"`
TotalsByModelFeature []struct {
Model string `json:"model"`
Feature string `json:"feature"`
UserInitiatedInteractionCount int `json:"user_initiated_interaction_count"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_model_feature"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
PullRequests struct {
TotalReviewed int `json:"total_reviewed"`
TotalCreated int `json:"total_created"`
TotalCreatedByCopilot int `json:"total_created_by_copilot"`
TotalReviewedByCopilot int `json:"total_reviewed_by_copilot"`
TotalMerged int `json:"total_merged"`
TotalSuggestions int `json:"total_suggestions"`
TotalAppliedSuggestions int `json:"total_applied_suggestions"`
TotalMergedCreatedByCopilot int `json:"total_merged_created_by_copilot"`
TotalCopilotSuggestions int `json:"total_copilot_suggestions"`
TotalCopilotAppliedSuggestions int `json:"total_copilot_applied_suggestions"`
TotalMergedReviewedByCopilot int `json:"total_merged_reviewed_by_copilot"`
} `json:"pull_requests"`
} `json:"day_totals"`
}
// GetOrganizationUsersDailyMetricsReport (NDJSON)
type AutoGenerated struct {
UserID int `json:"user_id"`
UserLogin string `json:"user_login"`
Day string `json:"day"`
OrganizationID string `json:"organization_id"`
EnterpriseID string `json:"enterprise_id"`
UserInitiatedInteractionCount int `json:"user_initiated_interaction_count"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
TotalsByIde []struct {
Ide string `json:"ide"`
UserInitiatedInteractionCount int `json:"user_initiated_interaction_count"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
LastKnownPluginVersion struct {
SampledAt time.Time `json:"sampled_at"`
Plugin string `json:"plugin"`
PluginVersion string `json:"plugin_version"`
} `json:"last_known_plugin_version"`
LastKnownIdeVersion struct {
SampledAt time.Time `json:"sampled_at"`
IdeVersion string `json:"ide_version"`
} `json:"last_known_ide_version"`
} `json:"totals_by_ide"`
TotalsByFeature []struct {
Feature string `json:"feature"`
UserInitiatedInteractionCount int `json:"user_initiated_interaction_count"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_feature"`
TotalsByLanguageFeature []struct {
Language string `json:"language"`
Feature string `json:"feature"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_language_feature"`
TotalsByLanguageModel []struct {
Language string `json:"language"`
Model string `json:"model"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_language_model"`
TotalsByModelFeature []struct {
Model string `json:"model"`
Feature string `json:"feature"`
UserInitiatedInteractionCount int `json:"user_initiated_interaction_count"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_model_feature"`
UsedAgent bool `json:"used_agent"`
UsedChat bool `json:"used_chat"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
UsedCli bool `json:"used_cli"`
UsedCopilotCodingAgent bool `json:"used_copilot_coding_agent"`
}
// GetOrganizationUsersMetricsReport (NDJSON)
type AutoGenerated struct {
ReportStartDay string `json:"report_start_day"`
ReportEndDay string `json:"report_end_day"`
Day string `json:"day"`
OrganizationID string `json:"organization_id"`
EnterpriseID string `json:"enterprise_id"`
UserID int `json:"user_id"`
UserLogin string `json:"user_login"`
UserInitiatedInteractionCount int `json:"user_initiated_interaction_count"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
TotalsByIde []struct {
Ide string `json:"ide"`
UserInitiatedInteractionCount int `json:"user_initiated_interaction_count"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
LastKnownPluginVersion struct {
SampledAt time.Time `json:"sampled_at"`
Plugin string `json:"plugin"`
PluginVersion string `json:"plugin_version"`
} `json:"last_known_plugin_version"`
LastKnownIdeVersion struct {
SampledAt time.Time `json:"sampled_at"`
IdeVersion string `json:"ide_version"`
} `json:"last_known_ide_version"`
} `json:"totals_by_ide"`
TotalsByFeature []struct {
Feature string `json:"feature"`
UserInitiatedInteractionCount int `json:"user_initiated_interaction_count"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_feature"`
TotalsByLanguageFeature []struct {
Language string `json:"language"`
Feature string `json:"feature"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_language_feature"`
TotalsByLanguageModel []struct {
Language string `json:"language"`
Model string `json:"model"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_language_model"`
TotalsByModelFeature []struct {
Model string `json:"model"`
Feature string `json:"feature"`
UserInitiatedInteractionCount int `json:"user_initiated_interaction_count"`
CodeGenerationActivityCount int `json:"code_generation_activity_count"`
CodeAcceptanceActivityCount int `json:"code_acceptance_activity_count"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
} `json:"totals_by_model_feature"`
UsedAgent bool `json:"used_agent"`
UsedChat bool `json:"used_chat"`
LocSuggestedToAddSum int `json:"loc_suggested_to_add_sum"`
LocSuggestedToDeleteSum int `json:"loc_suggested_to_delete_sum"`
LocAddedSum int `json:"loc_added_sum"`
LocDeletedSum int `json:"loc_deleted_sum"`
UsedCopilotCodingAgent bool `json:"used_copilot_coding_agent"`
} |
Added DownloadCopilotMetrics helper method to simulate previous implementation of viewing copilot usage metrics. Also, commented above the older function definitions to highlight that the methods are no longer in use due to the change in API endpoint. Fixes #4136