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 ImportAllReleases(dbPath, token string) error
- func ImportAllRepoMeta(dbPath, token string) error
- func ImportReleases(dbPath, token, owner, repo string) error
- func ImportRepoMeta(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 UpdateDeveloper(ctx context.Context, db *sql.DB, client *http.Client, username string, ...) error
- func UpdateDeveloperNames(db *sql.DB, devs map[string]string) error
- func UpdateEvents(dbPath, token string) (map[string]int, error)
- type AffiliationImportResult
- type CNCFAffiliation
- type CNCFDeveloper
- 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 Developer
- type DeveloperListItem
- type EntityResult
- type Event
- type EventDetails
- type EventImporter
- type EventSearchCriteria
- type EventTypeSeries
- type ForksAndActivitySeries
- type ImportSummary
- type InsightsSummary
- type ListItem
- type Org
- type OrgRepoItem
- type PRReviewRatioSeries
- type Query
- type ReleaseCadenceSeries
- type ReleaseDownloadsByTagSeries
- type ReleaseDownloadsSeries
- type Repo
- type RepoMeta
- type ReputationDistribution
- type ReputationResult
- type RetentionSeries
- 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 ImportAllReleases ¶
func ImportAllRepoMeta ¶
func ImportReleases ¶
func ImportRepoMeta ¶
func UpdateDeveloper ¶
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 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 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"`
}
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"`
}
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(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"`
}
func GetInsightsSummary ¶
type ListItem ¶
type ListItem struct {
Value string `json:"value,omitempty" yaml:"value,omitempty"`
Text string `json:"text,omitempty" yaml:"text,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 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 ReleaseCadenceSeries ¶
type ReleaseCadenceSeries struct {
Months []string `json:"months" yaml:"months"`
Total []int `json:"total" yaml:"total"`
Stable []int `json:"stable" yaml:"stable"`
}
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 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) (*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 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"`
PrivateRepos int64 `json:"private_repos" yaml:"privateRepos"`
StrongAuth bool `json:"strong_auth" yaml:"strongAuth"`
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"`
}
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(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(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"`
}