Documentation
¶
Index ¶
- Constants
- func ConfigNotice(c *ConfigStatus) string
- func Summarize(vips []VIPStatus, peers []PeerStatus) string
- func SummarizePeers(peers []PeerStatus) string
- type CheckDetails
- type CheckStatus
- type ConfigStatus
- type DNSDetails
- type DNSNameDetails
- type DaemonStatus
- type GRPCDetails
- type HTTPDetails
- type HealthStatus
- type KafkaDetails
- type ListenDetails
- type PeerStatus
- type PingDetails
- type ReloadStatus
- type RouteAttrs
- type SQLDetails
- type SQLQueryDetails
- type VIPState
- type VIPStatus
Constants ¶
const ( ReloadApplied = "applied" ReloadUnchanged = "unchanged" ReloadRejected = "rejected" ReloadFailed = "failed" )
Reload outcomes, see ReloadStatus.Outcome.
const SessionEstablished = "established"
SessionEstablished is the session_state of a peer whose BGP session is up.
Variables ¶
This section is empty.
Functions ¶
func ConfigNotice ¶ added in v0.14.0
func ConfigNotice(c *ConfigStatus) string
ConfigNotice renders the config problems worth a glance: a failed or rejected last reload, a file that differs from the running config, VIPs still waiting for the verdict of their new checks. Empty when the daemon runs exactly what the file says. The systemd STATUS= line and the status page both show it.
func Summarize ¶ added in v0.14.0
func Summarize(vips []VIPStatus, peers []PeerStatus) string
Summarize renders the systemd STATUS= line, e.g. "VIPs: 2 announced, 1 pessimized, 0 withdrawn; peers: 1/2 established (down: bird)".
func SummarizePeers ¶ added in v0.14.0
func SummarizePeers(peers []PeerStatus) string
SummarizePeers renders the peer half of the status line, e.g. "peers: 1/2 established (down: bird)". It is the output of `pathosd healthcheck`, whose /readyz reply carries only the peers.
Types ¶
type CheckDetails ¶ added in v0.12.0
type CheckDetails interface {
// contains filtered or unexported methods
}
CheckDetails carries check-type-specific observations alongside a check Result. They are exported as metrics only when check.detailed_metrics is enabled for the VIP; otherwise they are only visible in the ad-hoc check response.
type CheckStatus ¶ added in v0.12.0
type CheckStatus struct {
Name string `json:"name"`
Type string `json:"type"`
Health HealthStatus `json:"health"`
HealthName string `json:"health_name"`
ConsecutiveOK int `json:"consecutive_ok"`
ConsecutiveFail int `json:"consecutive_fail"`
LastSuccess bool `json:"last_success"`
LastDetail string `json:"last_detail"`
LastTime time.Time `json:"last_time"`
}
CheckStatus is the observable state of one check of a VIP.
type ConfigStatus ¶ added in v0.14.0
type ConfigStatus struct {
Path string `json:"path"`
// LoadedAt is when the running config was read: startup or the last
// applied reload.
LoadedAt time.Time `json:"loaded_at"`
// Generation counts applied reloads; 1 is the startup config.
Generation int `json:"generation"`
// FileChanged is true while the file on disk differs from what is
// running: an edit nobody reloaded, or a reload that was rejected.
FileChanged bool `json:"file_changed"`
// PendingVIPs lists VIPs whose new check definitions still run in
// shadow; their old definition governs until the new one has a verdict.
PendingVIPs []string `json:"pending_vips,omitempty"`
// LastReload is nil until the first reload attempt.
LastReload *ReloadStatus `json:"last_reload,omitempty"`
}
ConfigStatus is the config part of DaemonStatus.
type DNSDetails ¶ added in v0.12.0
type DNSDetails struct {
Names []DNSNameDetails `json:"names"`
}
DNSDetails is reported by the dns checker for every name that got a reply.
type DNSNameDetails ¶ added in v0.12.0
type DNSNameDetails struct {
Name string `json:"name"`
Rcode int `json:"rcode"`
Answers int `json:"answers"`
}
DNSNameDetails is one queried name within DNSDetails.
type DaemonStatus ¶
type DaemonStatus struct {
RouterID string `json:"router_id"`
ASN uint32 `json:"asn"`
Version string `json:"version"`
Commit string `json:"commit"`
StartTime time.Time `json:"start_time"`
Peers []PeerStatus `json:"peers"`
VIPs []VIPStatus `json:"vips"`
// Config describes the running config and the last reload; nil when
// the daemon runs without a reloader (tests).
Config *ConfigStatus `json:"config,omitempty"`
}
DaemonStatus is the full daemon state returned on the diagnostic endpoint.
type GRPCDetails ¶ added in v0.12.0
type GRPCDetails struct {
// gRPC status code of the call (0 = OK).
StatusCode uint32 `json:"status_code"`
// Serving status from the standard health protocol; empty for custom methods.
ServingStatus string `json:"serving_status,omitempty"`
}
GRPCDetails is reported by the grpc checker.
type HTTPDetails ¶ added in v0.12.0
type HTTPDetails struct {
StatusCode int `json:"status_code"`
// NotAfter of the leaf certificate presented by the server; zero for plain HTTP.
TLSCertNotAfter time.Time `json:"tls_cert_not_after,omitzero"`
}
HTTPDetails is reported by the http checker once a response was received.
type HealthStatus ¶
type HealthStatus int
HealthStatus tracks whether a VIP's service is considered healthy.
const ( HealthUnknown HealthStatus = 0 HealthHealthy HealthStatus = 1 HealthUnhealthy HealthStatus = 2 )
func (HealthStatus) String ¶
func (h HealthStatus) String() string
type KafkaDetails ¶ added in v0.13.0
type KafkaDetails struct {
ClusterID string `json:"cluster_id"`
Controller int32 `json:"controller"`
Brokers int `json:"brokers"`
Topic string `json:"topic,omitempty"`
Partitions int `json:"partitions,omitempty"`
PartitionsWithoutLeader int `json:"partitions_without_leader,omitempty"`
}
KafkaDetails is reported by the kafka checker. Partition fields are zero unless a topic is configured.
type ListenDetails ¶ added in v0.13.0
type ListenDetails struct {
// Local addresses of the matching bound sockets, e.g. "0.0.0.0:4739".
Sockets []string `json:"sockets"`
}
ListenDetails is reported by the listen checker.
type PeerStatus ¶
type PeerStatus struct {
Name string `json:"name"`
Address string `json:"address"`
PeerASN uint32 `json:"peer_asn"`
SessionState string `json:"session_state"`
Required bool `json:"required"`
Uptime string `json:"uptime,omitempty"`
}
PeerStatus is the observable state for one BGP neighbor.
func UnreadyPeers ¶ added in v0.14.0
func UnreadyPeers(peers []PeerStatus) []PeerStatus
UnreadyPeers returns the required peers whose session is not established. The daemon is ready when the result is empty. /readyz and `pathosd healthcheck` both use it, so the two verdicts cannot diverge.
type PingDetails ¶ added in v0.12.0
type PingDetails struct {
// Round-trip time of every echo reply received in this run.
RTTs []time.Duration `json:"rtts"`
// Fraction of probes lost, 0..1.
PacketLoss float64 `json:"packet_loss"`
PacketsSent int `json:"packets_sent"`
PacketsRecv int `json:"packets_recv"`
}
PingDetails is reported by the ping checker.
type ReloadStatus ¶ added in v0.14.0
type ReloadStatus struct {
At time.Time `json:"at"`
// Outcome is applied, unchanged, rejected (config invalid or a
// restart-only section changed; nothing was touched) or failed (the
// diff was applied but a step reported an error, see Errors).
Outcome string `json:"outcome"`
// Error is the reason for a rejected reload.
Error string `json:"error,omitempty"`
// Errors lists what went wrong in a failed reload.
Errors []string `json:"errors,omitempty"`
Added []string `json:"added,omitempty"`
Removed []string `json:"removed,omitempty"`
// Changed lists VIPs whose definition changed; those in Pending are
// still waiting for their new checks' verdicts.
Changed []string `json:"changed,omitempty"`
Pending []string `json:"pending,omitempty"`
}
ReloadStatus is the result of one reload attempt. It is also the body of POST /api/v1/reload.
func (*ReloadStatus) OK ¶ added in v0.14.0
func (r *ReloadStatus) OK() bool
OK reports whether the attempt left the daemon running the file's config (applied or unchanged).
type RouteAttrs ¶ added in v0.11.0
type RouteAttrs struct {
// ASPathPrepend is the number of additional local-ASN hops added to the
// AS_PATH (on top of the single hop GoBGP adds on eBGP export).
ASPathPrepend int `json:"as_path_prepend"`
// Communities are standard BGP communities in "ASN:value" form.
Communities []string `json:"communities,omitempty"`
}
RouteAttrs are the BGP path attributes pathosd controls on an originated VIP route. The zero value means a plain announcement: no extra AS_PATH prepends and no communities.
type SQLDetails ¶ added in v0.13.0
type SQLDetails struct {
Queries []SQLQueryDetails `json:"queries"`
}
SQLDetails is reported by the sql checker; queries after a failing one are not run and therefore absent.
type SQLQueryDetails ¶ added in v0.13.0
type SQLQueryDetails struct {
Name string `json:"name"`
Rows int `json:"rows"`
Duration time.Duration `json:"duration"`
Passed bool `json:"passed"`
}
SQLQueryDetails is one statement of a SQL check run.
type VIPStatus ¶
type VIPStatus struct {
Name string `json:"name"`
Prefix string `json:"prefix"`
State VIPState `json:"state"`
StateName string `json:"state_name"`
Health HealthStatus `json:"health"`
HealthName string `json:"health_name"`
ConsecutiveOK int `json:"consecutive_ok"`
ConsecutiveFail int `json:"consecutive_fail"`
LastCheckSuccess bool `json:"last_check_success"`
LastCheckDetail string `json:"last_check_detail"`
LastCheckTime time.Time `json:"last_check_time"`
LastTransitionTime time.Time `json:"last_transition_time"`
LastTransitionReason string `json:"last_transition_reason"`
// CheckType is the single check's type, or for a VIP with several
// checks "all(http, dns)", "any(...)" or the policy expression.
CheckType string `json:"check_type"`
// ChecksPolicy is how the checks combine: "all", "any" or an expression.
ChecksPolicy string `json:"checks_policy"`
// Checks lists every check of the VIP in config order.
Checks []CheckStatus `json:"checks"`
BGPPending bool `json:"bgp_pending"`
// ASPathPrependBase is policy.announce.as_path_prepend: the prepend this
// node applies to every announcement of the VIP (its standby rank).
ASPathPrependBase int `json:"as_path_prepend_base"`
// ASPathPrepend is the prepend currently applied: the base while
// announced (or withdrawn), base + lower_priority while pessimized.
ASPathPrepend int `json:"as_path_prepend"`
// Communities currently attached to the route (announce block, merged
// with lower_priority while pessimized).
Communities []string `json:"communities,omitempty"`
}
VIPStatus is the full observable state for one VIP.