dashapi

package
v0.0.0-...-17b87e8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 29, 2020 License: Apache-2.0 Imports: 11 Imported by: 0

Documentation

Overview

Package dashapi defines data structures used in dashboard communication and provides client interface.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type BisectResult

type BisectResult struct {
	Commit          *Commit   // for conclusive bisection
	Commits         []*Commit // for inconclusive bisection
	LogLink         string
	CrashLogLink    string
	CrashReportLink string
	Fix             bool
}

type BugListResp

type BugListResp struct {
	List []string
}

type BugNotif

type BugNotif int
const (
	// Upstream bug into next reporting.
	// If the action succeeds, reporting sends BugStatusUpstream update.
	BugNotifUpstream BugNotif = iota
	// Bug needs to be closed as obsoleted.
	// If the action succeeds, reporting sends BugStatusInvalid update.
	BugNotifObsoleted
	// Bug fixing commit can't be discovered (wrong commit title).
	BugNotifBadCommit
)

type BugNotification

type BugNotification struct {
	Type        BugNotif
	Namespace   string
	Config      []byte
	ID          string
	ExtID       string // arbitrary reporting ID forwarded from BugUpdate.ExtID
	Title       string
	Text        string   // meaning depends on Type
	CC          []string // additional CC emails
	Maintainers []string
	// Public is what we want all involved people to see (e.g. if we notify about a wrong commit title,
	// people need to see it and provide the right title). Not public is what we want to send only
	// to a minimal set of recipients (our mailing list) (e.g. notification about an obsoleted bug
	// is mostly "for the record").
	Public bool
}

type BugReport

type BugReport struct {
	Type              ReportType
	Namespace         string
	Config            []byte
	ID                string
	JobID             string
	ExtID             string // arbitrary reporting ID forwarded from BugUpdate.ExtID
	First             bool   // Set for first report for this bug (Type == ReportNew).
	Moderation        bool
	NoRepro           bool // We don't expect repro (e.g. for build/boot errors).
	Title             string
	Link              string // link to the bug on dashboard
	CreditEmail       string // email for the Reported-by tag
	Maintainers       []string
	CC                []string // additional CC emails
	OS                string
	Arch              string
	VMArch            string
	UserSpaceArch     string // user-space arch as kernel developers know it (rather than Go names)
	CompilerID        string
	KernelRepo        string
	KernelRepoAlias   string
	KernelBranch      string
	KernelCommit      string
	KernelCommitTitle string
	KernelCommitDate  time.Time
	KernelConfig      []byte
	KernelConfigLink  string
	Log               []byte
	LogLink           string
	Report            []byte
	ReportLink        string
	ReproC            []byte
	ReproCLink        string
	ReproSyz          []byte
	ReproSyzLink      string
	CrashID           int64 // returned back in BugUpdate
	NumCrashes        int64
	HappenedOn        []string // list of kernel repo aliases

	CrashTitle     string // job execution crash title
	Error          []byte // job execution error
	ErrorLink      string
	ErrorTruncated bool // full Error text is too large and was truncated
	PatchLink      string
	BisectCause    *BisectResult
	BisectFix      *BisectResult
}

BugReport describes a single bug. Used by dashboard external reporting.

type BugStatus

type BugStatus int
const (
	BugStatusOpen BugStatus = iota
	BugStatusUpstream
	BugStatusInvalid
	BugStatusDup
	BugStatusUpdate // aux info update (i.e. ExtID/Link/CC)
	BugStatusUnCC   // don't CC sender on any future communication
)

type BugUpdate

type BugUpdate struct {
	ID           string // copied from BugReport
	JobID        string // copied from BugReport
	ExtID        string
	Link         string
	Status       BugStatus
	ReproLevel   ReproLevel
	DupOf        string
	OnHold       bool     // If set for open bugs, don't upstream this bug.
	Notification bool     // Reply to a notification.
	FixCommits   []string // Titles of commits that fix this bug.
	CC           []string // Additional emails to add to CC list in future emails.
	CrashID      int64
}

type BugUpdateReply

type BugUpdateReply struct {
	// Bug update can fail for 2 reason:
	//  - update does not pass logical validataion, in this case OK=false
	//  - internal/datastore error, in this case Error=true
	OK    bool
	Error bool
	Text  string
}

type Build

type Build struct {
	Manager             string
	ID                  string
	OS                  string
	Arch                string
	VMArch              string
	SyzkallerCommit     string
	SyzkallerCommitDate time.Time
	CompilerID          string
	KernelRepo          string
	KernelBranch        string
	KernelCommit        string
	KernelCommitTitle   string
	KernelCommitDate    time.Time
	KernelConfig        []byte
	Commits             []string // see BuilderPoll
	FixCommits          []Commit
}

Build describes all aspects of a kernel build.

type BuildErrorReq

type BuildErrorReq struct {
	Build Build
	Crash Crash
}

type BuilderPollReq

type BuilderPollReq struct {
	Manager string
}

type BuilderPollResp

type BuilderPollResp struct {
	PendingCommits []string
	ReportEmail    string
}

type Commit

type Commit struct {
	Hash       string
	Title      string
	Author     string
	AuthorName string
	CC         []string
	BugIDs     []string // ID's extracted from Reported-by tags
	Date       time.Time
}

type CommitPollResp

type CommitPollResp struct {
	ReportEmail string
	Repos       []Repo
	Commits     []string
}

type CommitPollResultReq

type CommitPollResultReq struct {
	Commits []Commit
}

type Crash

type Crash struct {
	BuildID     string // refers to Build.ID
	Title       string
	Corrupted   bool // report is corrupted (corrupted title, no stacks, etc)
	Maintainers []string
	Log         []byte
	Report      []byte
	// The following is optional and is filled only after repro.
	ReproOpts []byte
	ReproSyz  []byte
	ReproC    []byte
}

Crash describes a single kernel crash (potentially with repro).

type CrashID

type CrashID struct {
	BuildID   string
	Title     string
	Corrupted bool
}

CrashID is a short summary of a crash for repro queries.

type Dashboard

type Dashboard struct {
	Client string
	Addr   string
	Key    string
	// contains filtered or unexported fields
}

func New

func New(client, addr, key string) *Dashboard

func NewCustom

func NewCustom(client, addr, key string, ctor RequestCtor, doer RequestDoer,
	logger RequestLogger, errorHandler func(error)) *Dashboard

func (*Dashboard) BugList

func (dash *Dashboard) BugList() (*BugListResp, error)

func (*Dashboard) BuilderPoll

func (dash *Dashboard) BuilderPoll(manager string) (*BuilderPollResp, error)

func (*Dashboard) CommitPoll

func (dash *Dashboard) CommitPoll() (*CommitPollResp, error)

func (*Dashboard) JobDone

func (dash *Dashboard) JobDone(req *JobDoneReq) error

func (*Dashboard) JobPoll

func (dash *Dashboard) JobPoll(req *JobPollReq) (*JobPollResp, error)

func (*Dashboard) LoadBug

func (dash *Dashboard) LoadBug(id string) (*LoadBugResp, error)

func (*Dashboard) LogError

func (dash *Dashboard) LogError(name, msg string, args ...interface{})

Centralized logging on dashboard.

func (*Dashboard) NeedRepro

func (dash *Dashboard) NeedRepro(crash *CrashID) (bool, error)

NeedRepro checks if dashboard needs a repro for this crash or not.

func (*Dashboard) Query

func (dash *Dashboard) Query(method string, req, reply interface{}) error

func (*Dashboard) ReportBuildError

func (dash *Dashboard) ReportBuildError(req *BuildErrorReq) error

func (*Dashboard) ReportCrash

func (dash *Dashboard) ReportCrash(crash *Crash) (*ReportCrashResp, error)

func (*Dashboard) ReportFailedRepro

func (dash *Dashboard) ReportFailedRepro(crash *CrashID) error

ReportFailedRepro notifies dashboard about a failed repro attempt for the crash.

func (*Dashboard) ReportingPollBugs

func (dash *Dashboard) ReportingPollBugs(typ string) (*PollBugsResponse, error)

func (*Dashboard) ReportingPollClosed

func (dash *Dashboard) ReportingPollClosed(ids []string) ([]string, error)

func (*Dashboard) ReportingPollNotifications

func (dash *Dashboard) ReportingPollNotifications(typ string) (*PollNotificationsResponse, error)

func (*Dashboard) ReportingUpdate

func (dash *Dashboard) ReportingUpdate(upd *BugUpdate) (*BugUpdateReply, error)

func (*Dashboard) UploadBuild

func (dash *Dashboard) UploadBuild(build *Build) error

func (*Dashboard) UploadCommits

func (dash *Dashboard) UploadCommits(commits []Commit) error

func (*Dashboard) UploadManagerStats

func (dash *Dashboard) UploadManagerStats(req *ManagerStatsReq) error

type JobDoneFlags

type JobDoneFlags int64
const (
	BisectResultMerge   JobDoneFlags = 1 << iota // bisected to a merge commit
	BisectResultNoop                             // commit does not affect resulting kernel binary
	BisectResultRelease                          // commit is a kernel release
)

type JobDoneReq

type JobDoneReq struct {
	ID          string
	Build       Build
	Error       []byte
	Log         []byte // bisection log
	CrashTitle  string
	CrashLog    []byte
	CrashReport []byte
	// Bisection results:
	// If there is 0 commits:
	//  - still happens on HEAD for fix bisection
	//  - already happened on the oldest release
	// If there is 1 commits: bisection result (cause or fix).
	// If there are more than 1: suspected commits due to skips (broken build/boot).
	Commits []Commit
	Flags   JobDoneFlags
}

type JobPollReq

type JobPollReq struct {
	Managers map[string]ManagerJobs
}

type JobPollResp

type JobPollResp struct {
	ID                string
	Type              JobType
	Manager           string
	KernelRepo        string
	KernelBranch      string
	KernelCommit      string
	KernelCommitTitle string
	KernelCommitDate  time.Time
	KernelConfig      []byte
	SyzkallerCommit   string
	Patch             []byte
	ReproOpts         []byte
	ReproSyz          []byte
	ReproC            []byte
}

type JobType

type JobType int
const (
	JobTestPatch JobType = iota
	JobBisectCause
	JobBisectFix
)

type LoadBugReq

type LoadBugReq struct {
	ID string
}

type LoadBugResp

type LoadBugResp struct {
	ID              string
	Title           string
	Status          string
	SyzkallerCommit string
	Arch            string
	ReproOpts       []byte
	ReproSyz        []byte
	ReproC          []byte
}

type LogEntry

type LogEntry struct {
	Name string
	Text string
}

type ManagerJobs

type ManagerJobs struct {
	TestPatches bool
	BisectCause bool
	BisectFix   bool
}

type ManagerStatsReq

type ManagerStatsReq struct {
	Name string
	Addr string

	// Current level:
	UpTime     time.Duration
	Corpus     uint64
	PCs        uint64 // coverage
	Cover      uint64 // what we call feedback signal everywhere else
	CrashTypes uint64

	// Delta since last sync:
	FuzzingTime       time.Duration
	Crashes           uint64
	SuppressedCrashes uint64
	Execs             uint64
}

type NeedReproResp

type NeedReproResp struct {
	NeedRepro bool
}

type PollBugsRequest

type PollBugsRequest struct {
	Type string
}

type PollBugsResponse

type PollBugsResponse struct {
	Reports []*BugReport
}

type PollClosedRequest

type PollClosedRequest struct {
	IDs []string
}

type PollClosedResponse

type PollClosedResponse struct {
	IDs []string
}

type PollNotificationsRequest

type PollNotificationsRequest struct {
	Type string
}

type PollNotificationsResponse

type PollNotificationsResponse struct {
	Notifications []*BugNotification
}

type Repo

type Repo struct {
	URL    string
	Branch string
}

type ReportCrashResp

type ReportCrashResp struct {
	NeedRepro bool
}

type ReportType

type ReportType int
const (
	ReportNew         ReportType = iota // First report for this bug in the reporting stage.
	ReportRepro                         // Found repro for an already reported bug.
	ReportTestPatch                     // Patch testing result.
	ReportBisectCause                   // Cause bisection result for an already reported bug.
	ReportBisectFix                     // Fix bisection result for an already reported bug.
)

type ReproLevel

type ReproLevel int
const (
	ReproLevelNone ReproLevel = iota
	ReproLevelSyz
	ReproLevelC
)

type RequestCtor

type RequestCtor func(method, url string, body io.Reader) (*http.Request, error)

type RequestDoer

type RequestDoer func(req *http.Request) (*http.Response, error)

type RequestLogger

type RequestLogger func(msg string, args ...interface{})

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL