scheme

package
v0.16.6 Latest Latest
Warning

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

Go to latest
Published: Jan 23, 2024 License: MIT Imports: 29 Imported by: 0

Documentation

Overview

Package scheme implements how to probe or send alert to the URL.

All scheme structs implement Prober and/or Alerter.

Index

Constants

View Source
const (
	HTTP_REDIRECT_MAX = 10
)

Variables

View Source
var (
	ErrInvalidAlertURL        = errors.New("invalid alert URL")
	ErrUnsupportedAlertScheme = errors.New("unsupported scheme for alert")
)
View Source
var (
	ErrUnsupportedDNSType = errors.New("unsupported DNS type")
	ErrConflictDNSType    = errors.New("DNS type in scheme and query is conflicted")
	ErrMissingDomainName  = errors.New("missing domain name")
)
View Source
var (
	ErrMissingUsername = errors.New("username is required if set password")
	ErrMissingPassword = errors.New("password is required if set username")
)
View Source
var (
	ErrInvalidURL        = errors.New("invalid URL")
	ErrMissingScheme     = errors.New("missing scheme in URL")
	ErrUnsupportedScheme = errors.New("unsupported scheme")
	ErrMissingHost       = errors.New("missing target host")
)
View Source
var (
	ErrInvalidSource    = errors.New("invalid source")
	ErrInvalidSourceURL = errors.New("invalid source URL")
	ErrMissingFile      = errors.New("missing file")
)
View Source
var (
	ErrFailedToPreparePing = errors.New("failed to setup ping service")
)
View Source
var (
	ErrMissingCommand = errors.New("missing command")
)
View Source
var (
	ErrRedirectLoopDetected = errors.New("redirect loop detected")
)
View Source
var (
	ErrTCPPortMissing = errors.New("TCP target's port number is required")
)
View Source
var (
	HTTPUserAgent = "ayd health check"
)

Functions

func SplitScheme

func SplitScheme(scheme string) (subScheme string, separator rune, variant string)

SplitScheme splits scheme of URL.

For example, "http-get" will splited to "http", '-', and "get".

Types

type AlertReporter

type AlertReporter struct {
	Source   *api.URL
	Upstream Reporter
}

AlertReporter is a wrapper of Reporter interface for alert schemes. It replaces source URL, and puts "alert:" prefix to the target URL.

func (AlertReporter) DeactivateTarget

func (r AlertReporter) DeactivateTarget(source *api.URL, targets ...*api.URL)

func (AlertReporter) Report

func (r AlertReporter) Report(_ *api.URL, rec api.Record)

type Alerter

type Alerter interface {
	// Target returns the alert target URL.
	// This URL should not change during lifetime of the instance.
	Target() *api.URL

	// Alert sends an alert to the target, and report result(s) to the Reporter.
	Alert(context.Context, Reporter, api.Record)
}

Alerter is the interface to send alerts to somewhere.

func NewAlerter

func NewAlerter(target string) (Alerter, error)

func NewAlerterFromURL

func NewAlerterFromURL(u *api.URL) (Alerter, error)

type AlerterSet

type AlerterSet []Alerter

AlerterSet is a set of alerts. It also implements Alerter alertinterface.

func NewAlerterSet

func NewAlerterSet(targets []string) (AlerterSet, error)

func (AlerterSet) Alert

func (as AlerterSet) Alert(ctx context.Context, r Reporter, lastRecord api.Record)

Alert of AlerterSet calls all Alert methods of children parallelly. This method blocks until all alerts done.

func (AlerterSet) Target

func (as AlerterSet) Target() *api.URL

Target implements Alert interface. This method always returns alert-set: URL.

type DNSProbe added in v0.13.0

type DNSProbe struct {
	// contains filtered or unexported fields
}

DNSProbe is a Prober implementation for the DNS protocol.

func NewDNSProbe added in v0.13.0

func NewDNSProbe(u *api.URL) (DNSProbe, error)

NewDNSProbe creates a new DNSProbe.

func (DNSProbe) Probe added in v0.13.0

func (s DNSProbe) Probe(ctx context.Context, r Reporter)

func (DNSProbe) Target added in v0.13.0

func (s DNSProbe) Target() *api.URL

type DummyScheme

type DummyScheme struct {
	// contains filtered or unexported fields
}

func NewDummyScheme

func NewDummyScheme(u *api.URL) (DummyScheme, error)

func (DummyScheme) Alert

func (s DummyScheme) Alert(ctx context.Context, r Reporter, _ api.Record)

func (DummyScheme) Probe

func (s DummyScheme) Probe(ctx context.Context, r Reporter)

func (DummyScheme) Status

func (s DummyScheme) Status() api.Status

func (DummyScheme) Target

func (s DummyScheme) Target() *api.URL

type ExecScheme

type ExecScheme struct {
	// contains filtered or unexported fields
}

func NewExecScheme

func NewExecScheme(u *api.URL) (ExecScheme, error)

func (ExecScheme) Alert

func (s ExecScheme) Alert(ctx context.Context, r Reporter, lastRecord api.Record)

func (ExecScheme) Probe

func (s ExecScheme) Probe(ctx context.Context, r Reporter)

func (ExecScheme) Target

func (s ExecScheme) Target() *api.URL

type FTPScheme added in v0.16.0

type FTPScheme struct {
	// contains filtered or unexported fields
}

FTPScheme is a probe/alert implementation for the FTP.

func NewFTPScheme added in v0.16.0

func NewFTPScheme(u *api.URL) (FTPScheme, error)

func (FTPScheme) Alert added in v0.16.0

func (s FTPScheme) Alert(ctx context.Context, r Reporter, lastRecord api.Record)

func (FTPScheme) Probe added in v0.16.0

func (s FTPScheme) Probe(ctx context.Context, r Reporter)

Probe checks if the target FTP server is available.

func (FTPScheme) Target added in v0.16.0

func (s FTPScheme) Target() *api.URL

type FileScheme added in v0.15.0

type FileScheme struct {
	// contains filtered or unexported fields
}

FileScheme is a probe/alert implementation for local file.

func NewFileScheme added in v0.15.0

func NewFileScheme(u *api.URL) (FileScheme, error)

func (FileScheme) Alert added in v0.15.0

func (s FileScheme) Alert(ctx context.Context, r Reporter, lastRecord api.Record)

func (FileScheme) Probe added in v0.15.0

func (s FileScheme) Probe(ctx context.Context, r Reporter)

func (FileScheme) Target added in v0.15.0

func (s FileScheme) Target() *api.URL

type FixedSourceReporter

type FixedSourceReporter struct {
	Source    *api.URL
	Upstreams []Reporter
}

FixedSourceReporter is a Reporter that overrides source argument.

This struct is used by TargetTracker.

func (FixedSourceReporter) DeactivateTarget

func (r FixedSourceReporter) DeactivateTarget(source *api.URL, targets ...*api.URL)

DeactivateTarget implements Reporter.

func (FixedSourceReporter) Report

func (r FixedSourceReporter) Report(_ *api.URL, rec api.Record)

Report implements Reporter. This method just reports to upstream reporters.

type HTTPScheme

type HTTPScheme struct {
	// contains filtered or unexported fields
}

func NewHTTPScheme

func NewHTTPScheme(u *api.URL) (HTTPScheme, error)

func (HTTPScheme) Alert

func (s HTTPScheme) Alert(ctx context.Context, r Reporter, lastRecord api.Record)

func (HTTPScheme) Probe

func (s HTTPScheme) Probe(ctx context.Context, r Reporter)

func (HTTPScheme) Target

func (s HTTPScheme) Target() *api.URL

type PingProbe added in v0.13.0

type PingProbe struct {
	// contains filtered or unexported fields
}

PingProbe is a Prober implementation for SNMP echo request aka ping.

func NewPingProbe added in v0.13.0

func NewPingProbe(u *api.URL) (PingProbe, error)

func (PingProbe) Probe added in v0.13.0

func (s PingProbe) Probe(ctx context.Context, r Reporter)

func (PingProbe) Target added in v0.13.0

func (s PingProbe) Target() *api.URL

type PluginScheme

type PluginScheme struct {
	// contains filtered or unexported fields
}

PluginScheme is the plugin handler. This implements both of Prober interface and Alerter interface.

func NewPluginAlert

func NewPluginAlert(u *api.URL) (PluginScheme, error)

func NewPluginProbe

func NewPluginProbe(u *api.URL) (PluginScheme, error)

func NewPluginScheme

func NewPluginScheme(u *api.URL, scope string) (PluginScheme, error)

func (PluginScheme) Alert

func (p PluginScheme) Alert(ctx context.Context, r Reporter, lastRecord api.Record)

func (PluginScheme) Probe

func (p PluginScheme) Probe(ctx context.Context, r Reporter)

func (PluginScheme) Target

func (p PluginScheme) Target() *api.URL

type Prober

type Prober interface {
	// Target returns the target URL.
	// This URL should not change during lifetime of the instance.
	Target() *api.URL

	// Probe checks the target is dead or alive, and report result(s) to the Reporter.
	Probe(context.Context, Reporter)
}

Prober is the interface to check the target is dead or alive.

func NewProber

func NewProber(rawURL string) (Prober, error)

func NewProberFromURL

func NewProberFromURL(u *api.URL) (Prober, error)

type Reporter

type Reporter interface {
	// Report reports a Record.
	//
	// `source` in argument is the probe's URL.
	Report(source *api.URL, r api.Record)

	// DeactivateTarget marks the target is no longer reported via specified source.
	DeactivateTarget(source *api.URL, targets ...*api.URL)
}

type SourceScheme

type SourceScheme struct {
	// contains filtered or unexported fields
}

SourceScheme implements how to load target URLs from file, HTTP, or external command.

func NewSourceAlert

func NewSourceAlert(u *api.URL) (SourceScheme, error)

NewSourceAlert makes a new SourceScheme instance. It checks each URLs in source as an Alerter.

func NewSourceProbe

func NewSourceProbe(u *api.URL) (SourceScheme, error)

NewSourceProbe makes a new SourceScheme instance. It checks each URLs in source as a Prober.

func (SourceScheme) Alert

func (p SourceScheme) Alert(ctx context.Context, r Reporter, lastRecord api.Record)

func (SourceScheme) Probe

func (p SourceScheme) Probe(ctx context.Context, r Reporter)

func (SourceScheme) Target

func (p SourceScheme) Target() *api.URL

type TCPProbe added in v0.13.0

type TCPProbe struct {
	// contains filtered or unexported fields
}

TCPProbe is a Prober implementation for the TCP.

func NewTCPProbe added in v0.13.0

func NewTCPProbe(u *api.URL) (TCPProbe, error)

func (TCPProbe) Probe added in v0.13.0

func (s TCPProbe) Probe(ctx context.Context, r Reporter)

func (TCPProbe) Target added in v0.13.0

func (s TCPProbe) Target() *api.URL

type TargetTracker

type TargetTracker struct {
	sync.Mutex
	// contains filtered or unexported fields
}

TargetTracker tracks the targets is active or not.

func (*TargetTracker) Activate

func (t *TargetTracker) Activate(target *api.URL)

Activate removes target URL from inactive list and appends to active list.

func (*TargetTracker) DeactivateTarget

func (t *TargetTracker) DeactivateTarget(_ *api.URL, _ ...*api.URL)

DeactivateTarget implements Reporter. it does nothing.

func (*TargetTracker) Inactives

func (t *TargetTracker) Inactives() []*api.URL

Inactives returns the list of inactive targets that not reported since last PrepareReporter called.

func (*TargetTracker) PrepareReporter

func (t *TargetTracker) PrepareReporter(source *api.URL, r Reporter) Reporter

PrepareReporter prepares to tracking a new probe with a new reporter.

func (*TargetTracker) Report

func (t *TargetTracker) Report(_ *api.URL, rec api.Record)

Report implements Reporter. This method marks as the target is active.

Directories

Path Synopsis
Package textdecode is a utility package to decode text.
Package textdecode is a utility package to decode text.

Jump to

Keyboard shortcuts

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