feat(update): 主机每日记录组件版本比对,面板更新页展示可用更新与应用命令
This commit is contained in:
28 files changed
+994
-10
No files matched your search
@@ -0,0 +1,45 @@
|
||||
package updates
|
||||
|
||||
import "time"
|
||||
|
||||
// StatusKey is the platform_settings key `felis update --record` writes the
|
||||
// newest version check to (felis-update-check.timer runs it daily on the host,
|
||||
// where the versions are readable); internal/api serves it to the panel. Felis
|
||||
// applies nothing on its own, so this record is how a SysAdmin learns an update
|
||||
// exists without opening a shell on the node.
|
||||
const StatusKey = "update_report"
|
||||
|
||||
// StatusStaleAfter is how old the newest check may get before the panel says the
|
||||
// daily timer stopped: a day plus the timer's randomized delay and a margin.
|
||||
const StatusStaleAfter = 26 * time.Hour
|
||||
|
||||
// Component states in a StatusReport.
|
||||
const (
|
||||
StateCurrent = "current" // the newest stable release is installed
|
||||
StateAvailable = "available" // a newer stable release exists
|
||||
StateUnknown = "unknown" // the release feed could not be read
|
||||
StateUnreadable = "unreadable" // the installed version could not be read
|
||||
StatePinned = "pinned" // never proposed a change by policy
|
||||
)
|
||||
|
||||
// StatusReport is the value stored under StatusKey.
|
||||
type StatusReport struct {
|
||||
CheckedAt time.Time `json:"checked_at"`
|
||||
// Felis is the version of the felis binary that ran the check.
|
||||
Felis string `json:"felis"`
|
||||
Components []ComponentStatus `json:"components"`
|
||||
}
|
||||
|
||||
// ComponentStatus is one component's line of a StatusReport. Latest is empty
|
||||
// unless State is StateAvailable; Error names why a version is missing (State
|
||||
// StateUnknown or StateUnreadable); Selector is the `felis update --<selector>`
|
||||
// flag that prints how to apply it, empty for a component with none.
|
||||
type ComponentStatus struct {
|
||||
Name string `json:"name"`
|
||||
Current string `json:"current,omitempty"`
|
||||
Latest string `json:"latest,omitempty"`
|
||||
State string `json:"state"`
|
||||
Selector string `json:"selector,omitempty"`
|
||||
Note string `json:"note,omitempty"`
|
||||
Error string `json:"error,omitempty"`
|
||||
}
|
||||
Reference in new issue
Block a user