Documentation
¶
Index ¶
- Constants
- Variables
- func CleanEntities(db *sql.DB) error
- func ClearState(db *sql.DB, org, repo string) error
- func Contains[T comparable](list []T, val T) bool
- func GetCNCFEntityAffiliations(ctx context.Context) (map[string]*CNCFDeveloper, error)
- func GetDB(path string) (*sql.DB, error)
- func GetDataState(db *sql.DB) (map[string]int64, error)
- func GetDeveloperUsernames(db *sql.DB) ([]string, error)
- func GetMinEventDate(db *sql.DB, org, repo *string) (string, error)
- func GetNoFullnameDeveloperUsernames(db *sql.DB) ([]string, error)
- func GetOrgRepoNames(ctx context.Context, client *http.Client, org string) ([]string, error)
- func ImportAllContainerVersions(ctx context.Context, dbPath, token string) error
- func ImportAllReleases(ctx context.Context, dbPath, token string) error
- func ImportAllRepoMeta(ctx context.Context, dbPath, token string) error
- func ImportAllRepoMetricHistory(ctx context.Context, dbPath, token string) error
- func ImportContainerVersions(ctx context.Context, dbPath, token, org, repo string) error
- func ImportReleases(ctx context.Context, dbPath, token, owner, repo string) error
- func ImportRepoMeta(ctx context.Context, dbPath, token, owner, repo string) error
- func ImportRepoMetricHistory(ctx context.Context, dbPath, token, owner, repo string) error
- func Init(dbFilePath string) error
- func SaveDevelopers(db *sql.DB, devs []*Developer) error
- func SaveState(db *sql.DB, query, org, repo string, state *State) error
- func SearchDeveloperUsernames(db *sql.DB, query string, org, repo *string, months, limit int) ([]string, error)
- func UpdateDeveloperNames(db *sql.DB, devs map[string]string) error
- func UpdateEvents(ctx context.Context, dbPath, token string, concurrency int) (map[string]int, error)
- type AffiliationImportResult
- type CNCFAffiliation
- type CNCFDeveloper
- type ChangeFailureRateSeries
- type ContainerActivitySeries
- type ContributorFunnelSeries
- type ContributorProfileSeries
- type CountedItem
- func GetDeveloperPercentages(db *sql.DB, entity, org, repo *string, ex []string, months int) ([]*CountedItem, error)
- func GetEntityPercentages(db *sql.DB, entity, org, repo *string, ex []string, months int) ([]*CountedItem, error)
- func QueryEntities(db *sql.DB, val string, limit int) ([]*CountedItem, error)
- type CountedResult
- type DailyActivitySeries
- type DeepReputationResult
- type DeleteResult
- type Developer
- type DeveloperListItem
- type EntityResult
- type Event
- type EventDetails
- type EventImporter
- type EventSearchCriteria
- type EventTypeSeries
- type ForksAndActivitySeries
- type ImportSummary
- type InsightsSummary
- type ListItem
- type MomentumSeries
- type Org
- type OrgRepoItem
- type PRReviewRatioSeries
- type PRSizeSeries
- type Query
- type ReleaseCadenceSeries
- type ReleaseDownloadsByTagSeries
- type ReleaseDownloadsSeries
- type Repo
- type RepoMeta
- type RepoMetricHistory
- type ReputationDistribution
- type ReputationResult
- type RetentionSeries
- type ReviewLatencySeries
- type SignalSummary
- type State
- type Substitution
- type UserReputation
- type VelocitySeries
Constants ¶
const ( // EventTypes is a list of event types to import EventTypePR string = "pr" EventTypePRReview string = "pr_review" EventTypeIssue string = "issue" EventTypeIssueComment string = "issue_comment" EventTypeFork string = "fork" EventAgeMonthsDefault = 6 )
const (
DataFileName string = "data.db"
)
Variables ¶
var ( EventTypes = []string{ EventTypePR, EventTypeIssue, EventTypeIssueComment, EventTypePRReview, EventTypeFork, } )
var (
UpdatableProperties = []string{
"entity",
}
)
Functions ¶
func CleanEntities ¶
func GetCNCFEntityAffiliations ¶
func GetCNCFEntityAffiliations(ctx context.Context) (map[string]*CNCFDeveloper, error)
func GetDataState ¶
GetDataState returns the current state of the database.
func GetMinEventDate ¶
GetMinEventDate returns the earliest event date, optionally filtered by org/repo.
func GetOrgRepoNames ¶
func ImportAllContainerVersions ¶ added in v0.12.0
ImportAllContainerVersions imports container versions for all previously imported repos.
func ImportAllRepoMetricHistory ¶ added in v0.8.0
ImportAllRepoMetricHistory backfills metric history for all known org/repo pairs.
func ImportContainerVersions ¶ added in v0.12.0
ImportContainerVersions fetches container package versions from the GitHub API and stores them. Repos without container packages are silently skipped.
func ImportReleases ¶
func ImportRepoMeta ¶
func ImportRepoMetricHistory ¶ added in v0.8.0
ImportRepoMetricHistory backfills daily star and fork counts for the last 30 days.
Types ¶
type AffiliationImportResult ¶
type AffiliationImportResult struct {
Duration string `json:"duration,omitempty" yaml:"duration,omitempty"`
DBDevs int `json:"db_devs,omitempty" yaml:"dbDevs,omitempty"`
CNCFDevs int `json:"cncf_devs,omitempty" yaml:"cncfDevs,omitempty"`
MappedDevs int `json:"mapped_devs,omitempty" yaml:"mappedDevs,omitempty"`
}
func UpdateDevelopersWithCNCFEntityAffiliations ¶
func UpdateDevelopersWithCNCFEntityAffiliations(ctx context.Context, db *sql.DB, client *http.Client) (*AffiliationImportResult, error)
UpdateDevelopersWithCNCFEntityAffiliations updates the developers with the CNCF entity affiliations.
type CNCFAffiliation ¶
type CNCFDeveloper ¶
type CNCFDeveloper struct {
Username string `json:"username,omitempty" yaml:"username,omitempty"`
Identities []string `json:"identities,omitempty" yaml:"identities,omitempty"`
Affiliations []*CNCFAffiliation `json:"affiliations,omitempty" yaml:"affiliations,omitempty"`
}
func (*CNCFDeveloper) GetBestIdentity ¶
func (c *CNCFDeveloper) GetBestIdentity() string
func (*CNCFDeveloper) GetLatestAffiliation ¶
func (c *CNCFDeveloper) GetLatestAffiliation() string
type ChangeFailureRateSeries ¶ added in v0.9.0
type ChangeFailureRateSeries struct {
Months []string `json:"months" yaml:"months"`
Failures []int `json:"failures" yaml:"failures"`
Deployments []int `json:"deployments" yaml:"deployments"`
Rate []float64 `json:"rate" yaml:"rate"`
}
func GetChangeFailureRate ¶ added in v0.9.0
type ContainerActivitySeries ¶ added in v0.12.0
type ContainerActivitySeries struct {
Months []string `json:"months" yaml:"months"`
Versions []int `json:"versions" yaml:"versions"`
}
ContainerActivitySeries is the chart data for container version publishes per month.
func GetContainerActivity ¶ added in v0.12.0
func GetContainerActivity(db *sql.DB, org, repo *string, months int) (*ContainerActivitySeries, error)
GetContainerActivity returns monthly container version publish counts.
type ContributorFunnelSeries ¶ added in v0.9.0
type ContributorFunnelSeries struct {
Months []string `json:"months" yaml:"months"`
FirstComment []int `json:"first_comment" yaml:"firstComment"`
FirstPR []int `json:"first_pr" yaml:"firstPR"`
FirstMerge []int `json:"first_merge" yaml:"firstMerge"`
}
func GetContributorFunnel ¶ added in v0.9.0
type ContributorProfileSeries ¶ added in v0.15.0
type ContributorProfileSeries struct {
Metrics []string `json:"metrics"`
Values []int `json:"values"`
Averages []float64 `json:"averages"`
}
func GetContributorProfile ¶ added in v0.15.0
type CountedItem ¶
type CountedItem struct {
Name string `json:"name,omitempty" yaml:"name,omitempty"`
Count int `json:"count,omitempty" yaml:"count,omitempty"`
}
func GetDeveloperPercentages ¶
func GetDeveloperPercentages(db *sql.DB, entity, org, repo *string, ex []string, months int) ([]*CountedItem, error)
GetOrgRepoPercentages returns a list of repo percentages for the given organization.
func GetEntityPercentages ¶
func GetEntityPercentages(db *sql.DB, entity, org, repo *string, ex []string, months int) ([]*CountedItem, error)
GetEntityPercentages returns a list of entity percentages for the given repository.
func QueryEntities ¶
type CountedResult ¶
type DailyActivitySeries ¶ added in v0.8.1
func GetDailyActivity ¶ added in v0.8.1
type DeepReputationResult ¶ added in v0.7.2
type DeepReputationResult struct {
Scored int `json:"scored" yaml:"scored"`
Skipped int `json:"skipped" yaml:"skipped"`
Errors int `json:"errors" yaml:"errors"`
}
DeepReputationResult is returned by the bulk deep scoring step.
func ImportDeepReputation ¶ added in v0.7.2
func ImportDeepReputation(ctx context.Context, db *sql.DB, token string, limit int, org, repo *string) (*DeepReputationResult, error)
ImportDeepReputation deep-scores the N lowest-reputation contributors using GitHub API signals. Runs after shallow scoring; errors are per-user and never fatal to the overall import.
type DeleteResult ¶ added in v0.7.5
type DeleteResult struct {
Org string `json:"org" yaml:"org"`
Repo string `json:"repo" yaml:"repo"`
Events int64 `json:"events" yaml:"events"`
RepoMeta int64 `json:"repo_meta" yaml:"repo_meta"`
Releases int64 `json:"releases" yaml:"releases"`
ReleaseAssets int64 `json:"release_assets" yaml:"release_assets"`
State int64 `json:"state" yaml:"state"`
}
func DeleteRepoData ¶ added in v0.7.5
func DeleteRepoData(db *sql.DB, org, repo string) (*DeleteResult, error)
type Developer ¶
type Developer struct {
Username string `json:"username,omitempty" yaml:"username,omitempty"`
FullName string `json:"full_name,omitempty" yaml:"fullName,omitempty"`
Email string `json:"email,omitempty" yaml:"email,omitempty"`
AvatarURL string `json:"avatar,omitempty" yaml:"avatar,omitempty"`
ProfileURL string `json:"url,omitempty" yaml:"url,omitempty"`
Entity string `json:"entity,omitempty" yaml:"entity,omitempty"`
Organizations []*Org `json:"organizations,omitempty" yaml:"organizations,omitempty"`
}
func GetGitHubDeveloper ¶
func MergeDeveloper ¶ added in v0.14.0
func MergeDeveloper(ctx context.Context, db *sql.DB, client *http.Client, username string, cDev *CNCFDeveloper) (*Developer, error)
MergeDeveloper fetches the latest GitHub profile for username and merges it with the CNCF affiliation data and the existing DB record. It returns the updated Developer ready to be saved, without writing to the DB.
type DeveloperListItem ¶
type DeveloperListItem struct {
Username string `json:"username,omitempty" yaml:"username,omitempty"`
Entity string `json:"entity,omitempty" yaml:"entity,omitempty"`
}
func SearchDevelopers ¶
SearchDevelopers returns a list of developers matching the given query.
func SearchGitHubUsers ¶
type EntityResult ¶
type EntityResult struct {
Entity string `json:"entity,omitempty" yaml:"entity,omitempty"`
DeveloperCount int `json:"developer_count,omitempty" yaml:"developerCount,omitempty"`
Developers []*DeveloperListItem `json:"developers,omitempty" yaml:"developers,omitempty"`
}
type Event ¶
type Event struct {
Org string `json:"org,omitempty" yaml:"org,omitempty"`
Repo string `json:"repo,omitempty" yaml:"repo,omitempty"`
Username string `json:"username,omitempty" yaml:"username,omitempty"`
Type string `json:"type,omitempty" yaml:"type,omitempty"`
Date string `json:"date,omitempty" yaml:"date,omitempty"`
URL string `json:"url,omitempty" yaml:"url,omitempty"`
Mentions string `json:"mentions,omitempty" yaml:"mentions,omitempty"`
Labels string `json:"labels,omitempty" yaml:"labels,omitempty"`
State *string `json:"state,omitempty" yaml:"state,omitempty"`
Number *int `json:"number,omitempty" yaml:"number,omitempty"`
CreatedAt *string `json:"created_at,omitempty" yaml:"createdAt,omitempty"`
ClosedAt *string `json:"closed_at,omitempty" yaml:"closedAt,omitempty"`
MergedAt *string `json:"merged_at,omitempty" yaml:"mergedAt,omitempty"`
Additions *int `json:"additions,omitempty" yaml:"additions,omitempty"`
Deletions *int `json:"deletions,omitempty" yaml:"deletions,omitempty"`
ChangedFiles *int `json:"changed_files,omitempty" yaml:"changed_files,omitempty"`
Commits *int `json:"commits,omitempty" yaml:"commits,omitempty"`
Title string `json:"title,omitempty" yaml:"title,omitempty"`
}
type EventDetails ¶
type EventDetails struct {
Event *Event `json:"event,omitempty" yaml:"event,omitempty"`
Developer *Developer `json:"developer,omitempty" yaml:"developer,omitempty"`
}
func SearchEvents ¶
func SearchEvents(db *sql.DB, q *EventSearchCriteria) ([]*EventDetails, error)
type EventImporter ¶
type EventImporter struct {
// contains filtered or unexported fields
}
type EventSearchCriteria ¶
type EventSearchCriteria struct {
FromDate *string `json:"from,omitempty" yaml:"from,omitempty"`
ToDate *string `json:"to,omitempty" yaml:"to,omitempty"`
Type *string `json:"type,omitempty" yaml:"type,omitempty"`
Org *string `json:"org,omitempty" yaml:"org,omitempty"`
Repo *string `json:"repo,omitempty" yaml:"repo,omitempty"`
Username *string `json:"user,omitempty" yaml:"user,omitempty"`
Entity *string `json:"entity,omitempty" yaml:"entity,omitempty"`
Mention *string `json:"mention,omitempty" yaml:"mention,omitempty"`
Label *string `json:"label,omitempty" yaml:"label,omitempty"`
Page int `json:"page,omitempty" yaml:"page,omitempty"`
PageSize int `json:"page_size,omitempty" yaml:"pageSize,omitempty"`
}
func (EventSearchCriteria) String ¶
func (c EventSearchCriteria) String() string
type EventTypeSeries ¶
type EventTypeSeries struct {
Dates []string `json:"dates" yaml:"dates"`
PRs []int `json:"pr" yaml:"pr"`
PRReviews []int `json:"pr_review" yaml:"prReview"`
Issues []int `json:"issue" yaml:"issue"`
IssueComments []int `json:"issue_comment" yaml:"issueComment"`
Forks []int `json:"fork" yaml:"fork"`
Total []int `json:"total" yaml:"total"`
Trend []float32 `json:"trend" yaml:"trend"`
}
func GetEventTypeSeries ¶
type ForksAndActivitySeries ¶ added in v0.6.8
type ForksAndActivitySeries struct {
Months []string `json:"months" yaml:"months"`
Forks []int `json:"forks" yaml:"forks"`
Events []int `json:"events" yaml:"events"`
}
func GetForksAndActivity ¶ added in v0.6.8
type ImportSummary ¶
type ImportSummary struct {
Repo string `json:"repo" yaml:"repo"`
Since string `json:"since" yaml:"since"`
Events int `json:"events" yaml:"events"`
Developers int `json:"developers" yaml:"developers"`
}
ImportSummary contains per-repo import metadata.
func ImportEvents ¶
func ImportEvents(ctx context.Context, dbPath, token, owner, repo string, months int) (map[string]int, *ImportSummary, error)
ImportEvents imports events from GitHub for a given org/repo combination.
type InsightsSummary ¶
type InsightsSummary struct {
BusFactor int `json:"bus_factor" yaml:"busFactor"`
PonyFactor int `json:"pony_factor" yaml:"ponyFactor"`
Orgs int `json:"orgs" yaml:"orgs"`
Repos int `json:"repos" yaml:"repos"`
Events int `json:"events" yaml:"events"`
Contributors int `json:"contributors" yaml:"contributors"`
LastImport string `json:"last_import" yaml:"lastImport"`
}
func GetInsightsSummary ¶
type ListItem ¶
type ListItem struct {
Value string `json:"value,omitempty" yaml:"value,omitempty"`
Text string `json:"text,omitempty" yaml:"text,omitempty"`
Type string `json:"type,omitempty" yaml:"type,omitempty"`
}
func GetEntityLike ¶
GetEntityLike returns a list of repos that match the given pattern.
func GetOrgLike ¶
GetOrgLike returns a list of orgs and repos that match the given pattern.
type MomentumSeries ¶ added in v0.9.0
type MomentumSeries struct {
Months []string `json:"months" yaml:"months"`
Active []int `json:"active" yaml:"active"`
Delta []int `json:"delta" yaml:"delta"`
}
func GetContributorMomentum ¶ added in v0.9.0
type Org ¶
type OrgRepoItem ¶
type OrgRepoItem struct {
Org string `json:"org,omitempty" yaml:"org,omitempty"`
Repo string `json:"repo,omitempty" yaml:"repo,omitempty"`
}
func GetAllOrgRepos ¶
func GetAllOrgRepos(db *sql.DB) ([]*OrgRepoItem, error)
GetAllOrgRepos returns a list of repo percentages for the given organization.
type PRReviewRatioSeries ¶
type PRReviewRatioSeries struct {
Months []string `json:"months" yaml:"months"`
PRs []int `json:"prs" yaml:"prs"`
Reviews []int `json:"reviews" yaml:"reviews"`
Ratio []float64 `json:"ratio" yaml:"ratio"`
}
func GetPRReviewRatio ¶
type PRSizeSeries ¶ added in v0.9.0
type PRSizeSeries struct {
Months []string `json:"months" yaml:"months"`
Small []int `json:"small" yaml:"small"`
Medium []int `json:"medium" yaml:"medium"`
Large []int `json:"large" yaml:"large"`
XLarge []int `json:"xlarge" yaml:"xlarge"`
}
func GetPRSizeDistribution ¶ added in v0.9.0
type ReleaseCadenceSeries ¶
type ReleaseCadenceSeries struct {
Months []string `json:"months" yaml:"months"`
Total []int `json:"total" yaml:"total"`
Stable []int `json:"stable" yaml:"stable"`
Deployments []int `json:"deployments" yaml:"deployments"`
}
func GetReleaseCadence ¶
type ReleaseDownloadsByTagSeries ¶ added in v0.7.0
type ReleaseDownloadsByTagSeries struct {
Tags []string `json:"tags" yaml:"tags"`
Downloads []int `json:"downloads" yaml:"downloads"`
}
func GetReleaseDownloadsByTag ¶ added in v0.7.0
type ReleaseDownloadsSeries ¶ added in v0.7.0
type ReleaseDownloadsSeries struct {
Months []string `json:"months" yaml:"months"`
Downloads []int `json:"downloads" yaml:"downloads"`
}
func GetReleaseDownloads ¶ added in v0.7.0
type Repo ¶
type RepoMeta ¶
type RepoMeta struct {
Org string `json:"org" yaml:"org"`
Repo string `json:"repo" yaml:"repo"`
Stars int `json:"stars" yaml:"stars"`
Forks int `json:"forks" yaml:"forks"`
OpenIssues int `json:"open_issues" yaml:"openIssues"`
Language string `json:"language" yaml:"language"`
License string `json:"license" yaml:"license"`
Archived bool `json:"archived" yaml:"archived"`
UpdatedAt string `json:"updated_at" yaml:"updatedAt"`
}
type RepoMetricHistory ¶ added in v0.8.0
type RepoMetricHistory struct {
Org string `json:"org"`
Repo string `json:"repo"`
Date string `json:"date"`
Stars int `json:"stars"`
Forks int `json:"forks"`
}
func GetRepoMetricHistory ¶ added in v0.8.0
func GetRepoMetricHistory(db *sql.DB, org, repo *string) ([]*RepoMetricHistory, error)
type ReputationDistribution ¶
type ReputationDistribution struct {
Labels []string `json:"labels" yaml:"labels"`
Data []float64 `json:"data" yaml:"data"`
}
ReputationDistribution is the dashboard chart data.
type ReputationResult ¶
type ReputationResult struct {
Updated int `json:"updated" yaml:"updated"`
Skipped int `json:"skipped" yaml:"skipped"`
Errors int `json:"errors" yaml:"errors"`
}
ReputationResult is returned by the shallow bulk import.
func ImportReputation ¶
func ImportReputation(db *sql.DB, org, repo *string) (*ReputationResult, error)
ImportReputation computes shallow (local-only) reputation scores for all contributors with stale or missing scores. No GitHub API calls.
type RetentionSeries ¶
type RetentionSeries struct {
Months []string `json:"months" yaml:"months"`
New []int `json:"new" yaml:"new"`
Returning []int `json:"returning" yaml:"returning"`
}
func GetContributorRetention ¶
type ReviewLatencySeries ¶ added in v0.9.0
type ReviewLatencySeries struct {
Months []string `json:"months" yaml:"months"`
Count []int `json:"count" yaml:"count"`
AvgHours []float64 `json:"avg_hours" yaml:"avgHours"`
}
func GetReviewLatency ¶ added in v0.9.0
type SignalSummary ¶
type SignalSummary struct {
AgeDays int64 `json:"age_days" yaml:"ageDays"`
Followers int64 `json:"followers" yaml:"followers"`
Following int64 `json:"following" yaml:"following"`
PublicRepos int64 `json:"public_repos" yaml:"publicRepos"`
Suspended bool `json:"suspended" yaml:"suspended"`
OrgMember bool `json:"org_member" yaml:"orgMember"`
Commits int64 `json:"commits" yaml:"commits"`
TotalCommits int64 `json:"total_commits" yaml:"totalCommits"`
TotalContributors int `json:"total_contributors" yaml:"totalContributors"`
LastCommitDays int64 `json:"last_commit_days" yaml:"lastCommitDays"`
AuthorAssociation string `json:"author_association" yaml:"authorAssociation"`
HasBio bool `json:"has_bio" yaml:"hasBio"`
HasCompany bool `json:"has_company" yaml:"hasCompany"`
HasLocation bool `json:"has_location" yaml:"hasLocation"`
HasWebsite bool `json:"has_website" yaml:"hasWebsite"`
PRsMerged int64 `json:"prs_merged" yaml:"prsMerged"`
PRsClosed int64 `json:"prs_closed" yaml:"prsClosed"`
RecentPRRepoCount int64 `json:"recent_pr_repo_count" yaml:"recentPRRepoCount"`
ForkedRepos int64 `json:"forked_repos" yaml:"forkedRepos"`
TrustedOrgMember bool `json:"trusted_org_member" yaml:"trustedOrgMember"`
}
SignalSummary exposes gathered signals to the UI.
type State ¶
type Substitution ¶
type Substitution struct {
Prop string `json:"prop" yaml:"prop"`
Old string `json:"old" yaml:"old"`
New string `json:"new" yaml:"new"`
Records int64 `json:"records" yaml:"records"`
}
func ApplySubstitutions ¶
func ApplySubstitutions(db *sql.DB) ([]*Substitution, error)
func SaveAndApplyDeveloperSub ¶
func SaveAndApplyDeveloperSub(db *sql.DB, prop, old, new string) (*Substitution, error)
type UserReputation ¶
type UserReputation struct {
Username string `json:"username" yaml:"username"`
Reputation float64 `json:"reputation" yaml:"reputation"`
Deep bool `json:"deep" yaml:"deep"`
Signals *SignalSummary `json:"signals,omitempty" yaml:"signals,omitempty"`
}
UserReputation is returned by the on-demand deep score endpoint.
func ComputeDeepReputation ¶
func ComputeDeepReputation(ctx context.Context, db *sql.DB, token, username string) (*UserReputation, error)
ComputeDeepReputation scores a single user using GitHub API signals and stores the result. Called on-demand from the UI.
func GetOrComputeDeepReputation ¶
func GetOrComputeDeepReputation(ctx context.Context, db *sql.DB, token, username string) (*UserReputation, error)
GetOrComputeDeepReputation returns a cached deep score if fresh (<24h), otherwise computes a new one via GitHub API.
type VelocitySeries ¶
type VelocitySeries struct {
Months []string `json:"months" yaml:"months"`
Count []int `json:"count" yaml:"count"`
AvgDays []float64 `json:"avg_days" yaml:"avgDays"`
}