Documentation ¶
Overview ¶
The library for making Ayd plugin or client.
Example (AlertPlugin) ¶
args, err := ayd.ParseAlertPluginArgs() if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } logger := ayd.NewLogger(args.AlertURL).StartTimer() // send alert to somewhere logger.Healthy("alert sent", nil)
Output:
Example (ApiClient) ¶
aydURL, _ := url.Parse("http://localhost:9000") // fetch status from Ayd server report, err := ayd.Fetch(aydURL) if err != nil { panic(err) } for target, status := range report.ProbeHistory { // show target name fmt.Printf("# %s\n", target) // show status history for _, x := range status.Records { fmt.Println(x.Status) } }
Output:
Example (ProbePlugin) ¶
args, err := ayd.ParseProbePluginArgs() if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } logger := ayd.NewLogger(args.TargetURL).StartTimer() // check your target here ok := true if ok { logger.Healthy("target is healthy!", nil) } else { logger.Failure("target is down", nil) }
Output:
Index ¶
- Variables
- func ParseTime(s string) (time.Time, error)
- func SortProbeHistories(hs []ProbeHistory)deprecated
- type AlertPluginArgsdeprecated
- type ExtraPair
- type Incidentdeprecated
- type LogScannerdeprecated
- type Logger
- func (l Logger) Aborted(message string, extra map[string]interface{}) error
- func (l Logger) Degrade(message string, extra map[string]interface{}) error
- func (l Logger) Failure(message string, extra map[string]interface{}) error
- func (l Logger) Healthy(message string, extra map[string]interface{}) error
- func (l Logger) Print(r Record) error
- func (l Logger) StartTimer() Logger
- func (l Logger) StopTimer() Logger
- func (l Logger) Unknown(message string, extra map[string]interface{}) error
- func (l Logger) WithTarget(target *URL) Logger
- func (l Logger) WithTime(startTime time.Time, latency time.Duration) Logger
- type ProbeHistorydeprecated
- type ProbePluginArgsdeprecated
- type Record
- type Reportdeprecated
- type Status
- type URL
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrInvalidArgument is a error for if the argument was wrong. ErrInvalidArgumentValue = errors.New("invalid argument value") // ErrArgumentCount is a error for if the count of arguments was wrong. ErrArgumentCount = errors.New("unexpected count of arguments") // ErrCommunicate is a error for if connect or communicate with the Ayd server. ErrCommunicate = errors.New("server communication error") // ErrInvalidRecord is a error for if failed to parse log because it was invalid format. ErrInvalidRecord = errors.New("invalid record") // ErrIO is a error for if failed to wread/write log. ErrIO = errors.New("failed to read/write log") // ErrEmptyTarget is a error for if the target URL of Record was empty. ErrEmptyTarget = errors.New("invalid record: the target URL is required") )
The errors in Ayd library can check the error type via errors.Is function.
var (
ErrInvalidTime = errors.New("invalid format")
)
Functions ¶
func ParseTime ¶ added in v0.15.1
ParseTime parses time string in Ayd way. This function supports RFC3339 and some variant formats.
func SortProbeHistories
deprecated
added in
v0.10.0
func SortProbeHistories(hs []ProbeHistory)
SortProbeHistories sorts list of ProbeHistory by latest status and target URL.
This function will edit slice directly.
Deprecated: this struct will removed in future version.
Types ¶
type AlertPluginArgs
deprecated
type AlertPluginArgs struct { AlertURL *URL Time time.Time Status Status Latency time.Duration TargetURL *URL Message string Extra map[string]interface{} }
AlertPluginArgs is arguments for alert plugin
Deprecated: since version 0.16. This struct will removed in future version. Please parse using ParseURL and ParseRecord instead of this.
func ParseAlertPluginArgs ¶
func ParseAlertPluginArgs() (AlertPluginArgs, error)
ParseAlertPluginArgs is get arguments for alert plugin
This function is shorthand of `ayd.ParseAlertPluginArgs(os.Args)`.
func ParseAlertPluginArgsFrom ¶
func ParseAlertPluginArgsFrom(args []string) (AlertPluginArgs, error)
ParseAlertPluginArgsFrom is parse arguments for alert plugin
type Incident
deprecated
type Incident struct { Target *URL Status Status Message string // StartsAt is the first detected time the target is unhealthy status StartsAt time.Time // EndsAt is the earliest time that detected the target back to healthy status EndsAt time.Time }
Incident is a period of failure or unknown status that has the same status and message
Deprecated: this struct will removed in future version.
func (Incident) MarshalJSON ¶ added in v0.10.0
MarshalJSON implements the json.Marshaler interface.
func (*Incident) UnmarshalJSON ¶ added in v0.10.0
UnmarshalJSON implements the json.Unmarshaler interface.
type LogScanner
deprecated
added in
v0.14.0
type LogScanner interface { // Close closes the scanner. Close() error // Scan scans the next line of log. If there is no more log, it returns false. Scan() bool // Record returns current record. Record() Record }
LogScanner is the interface to read ayd's log format.
Deprecated: this interface will removed in future version. After version 0.15, you can read log file using combination of the bufio.Scanner and the json.Unmarshal in the standard library of Go.
func NewLogScanner ¶ added in v0.14.0
func NewLogScanner(f io.ReadCloser) LogScanner
NewLogScanner creates a new LogScanner from io.ReadCloser.
Example ¶
f := io.NopCloser(strings.NewReader(` {"time":"2001-02-03T16:05:06Z", "status":"HEALTHY", "latency":1.234, "target":"https://example.com", "message":"200 OK"} {"time":"2001-02-03T16:15:06Z", "status":"HEALTHY", "latency":2.345, "target":"https://example.com", "message":"200 OK"} {"time":"2001-02-03T16:25:06Z", "status":"HEALTHY", "latency":3.456, "target":"https://example.com", "message":"200 OK"} `)) s := ayd.NewLogScanner(f) defer s.Close() for s.Scan() { fmt.Println(s.Record().Time) }
Output: 2001-02-03 16:05:06 +0000 UTC 2001-02-03 16:15:06 +0000 UTC 2001-02-03 16:25:06 +0000 UTC
func NewLogScannerWithPeriod ¶ added in v0.14.0
func NewLogScannerWithPeriod(f io.ReadCloser, since, until time.Time) LogScanner
NewLogScannerWithPeriod creates a new LogScanner from io.ReadCloser, with period specification.
Example ¶
f := io.NopCloser(strings.NewReader(` {"time":"2001-02-03T16:05:06Z", "status":"HEALTHY", "latency":1.234, "target":"https://example.com", "message":"200 OK"} {"time":"2001-02-03T16:15:06Z", "status":"HEALTHY", "latency":2.345, "target":"https://example.com", "message":"200 OK"} {"time":"2001-02-03T16:25:06Z", "status":"HEALTHY", "latency":3.456, "target":"https://example.com", "message":"200 OK"} `)) s := ayd.NewLogScannerWithPeriod( f, time.Date(2001, 2, 3, 16, 7, 0, 0, time.UTC), time.Date(2001, 2, 3, 16, 25, 0, 0, time.UTC), ) defer s.Close() for s.Scan() { fmt.Println(s.Record().Time) }
Output: 2001-02-03 16:15:06 +0000 UTC
type Logger ¶
type Logger struct {
// contains filtered or unexported fields
}
Logger is the logger for Ayd plugin
Example ¶
target, _ := ayd.ParseURL("foobar:your-plugin-url") logger := ayd.NewLogger(target) logger.Healthy("hello world", nil) logger.Failure("hello world", map[string]interface{}{ "extra": "information", })
Output:
Example (SetExtraValues) ¶
logger := ayd.NewLogger(nil) // change target URL target, _ := ayd.ParseURL("foobar:your-plugin-url") logger = logger.WithTarget(target) // set check time and latency of the target startTime, _ := time.Parse(time.RFC3339, "2001-02-03T16:05:06+09:00") latency := 123 * time.Millisecond logger = logger.WithTime(startTime, latency) // report target status with a message logger.Healthy("target is healthy", map[string]interface{}{ "hello": "world", }) logger.Degrade("target is partialy working", map[string]interface{}{ "number": 42, }) logger.Failure("target seems down", map[string]interface{}{ "list": []string{"hello", "world"}, }) logger.Unknown("failed to check, so target status is unknown", map[string]interface{}{ "obj": map[string]string{"hello": "world"}, }) logger.Aborted("the check was aborted by user or something", nil)
Output: {"time":"2001-02-03T16:05:06+09:00", "status":"HEALTHY", "latency":123.000, "target":"foobar:your-plugin-url", "message":"target is healthy", "hello":"world"} {"time":"2001-02-03T16:05:06+09:00", "status":"DEGRADE", "latency":123.000, "target":"foobar:your-plugin-url", "message":"target is partialy working", "number":42} {"time":"2001-02-03T16:05:06+09:00", "status":"FAILURE", "latency":123.000, "target":"foobar:your-plugin-url", "message":"target seems down", "list":["hello","world"]} {"time":"2001-02-03T16:05:06+09:00", "status":"UNKNOWN", "latency":123.000, "target":"foobar:your-plugin-url", "message":"failed to check, so target status is unknown", "obj":{"hello":"world"}} {"time":"2001-02-03T16:05:06+09:00", "status":"ABORTED", "latency":123.000, "target":"foobar:your-plugin-url", "message":"the check was aborted by user or something"}
func NewLogger ¶
NewLogger makes new Logger
This is the shorthand to `ayd.NewLoggerWithWriter(os.Stdout, target)`.
func NewLoggerWithWriter ¶
NewLoggerWithWriter makes new Logger with a io.Writer
func (Logger) Degrade ¶ added in v0.14.0
Degrade prints Degrade status record.
Seealso StatusDegrade.
func (Logger) Print ¶
Print prints a Record
Example ¶
logger := ayd.NewLogger(nil) logger.Print(ayd.Record{ Target: &ayd.URL{Scheme: "foo", Host: "bar"}, Status: ayd.StatusHealthy, Time: time.Date(2001, 2, 3, 16, 5, 6, 7, time.UTC), Message: "hello world", }) logger.Print(ayd.Record{ Target: &ayd.URL{Scheme: "foo", Host: "bar"}, Time: time.Date(2001, 2, 3, 16, 5, 7, 0, time.UTC), Message: "without status", }) logger.Print(ayd.Record{ Target: &ayd.URL{Scheme: "foo", Host: "bar"}, Status: ayd.StatusHealthy, Time: time.Date(2001, 2, 3, 16, 5, 6, 7, time.UTC), Message: "with extra", Extra: map[string]interface{}{ "hello": "world", }, }) err := logger.Print(ayd.Record{ Time: time.Date(2001, 2, 3, 16, 5, 8, 0, time.UTC), Message: "without target", }) fmt.Println("error:", err)
Output: {"time":"2001-02-03T16:05:06Z", "status":"HEALTHY", "latency":0.000, "target":"foo://bar", "message":"hello world"} {"time":"2001-02-03T16:05:07Z", "status":"UNKNOWN", "latency":0.000, "target":"foo://bar", "message":"without status"} {"time":"2001-02-03T16:05:06Z", "status":"HEALTHY", "latency":0.000, "target":"foo://bar", "message":"with extra", "hello":"world"} error: invalid record: the target URL is required
func (Logger) StartTimer ¶
StartTimer makes new Logger that set start time as current time, and start timer for latency from now.
You can stop the timer with StopTimer method, or just call print method like Healthy or Failure.
Example ¶
target, _ := ayd.ParseURL("foobar:your-plugin-url") logger := ayd.NewLogger(target) l := logger.StartTimer() // check your target status l.Healthy("hello world", nil)
Output:
func (Logger) StopTimer ¶
StopTimer stops latency timer that started by StartTimer method, and makes new Logger with measured latency.
Example ¶
target, _ := ayd.ParseURL("foobar:your-plugin-url") logger := ayd.NewLogger(target) l := logger.StartTimer() // check your target status l = l.StopTimer() // do something, for example calculate result of the check l.Healthy("hello world", nil)
Output:
func (Logger) WithTarget ¶
WithTarget makes new Logger with new target URL
Example ¶
logger := ayd.NewLogger(nil) target, _ := ayd.ParseURL("foobar:your-plugin-url") logger.WithTarget(target).Healthy("hello world", nil)
Output:
func (Logger) WithTime ¶
WithTime makes new Logger with start time and latency value
Example ¶
target, _ := ayd.ParseURL("foobar:your-plugin-url") logger := ayd.NewLogger(target) startTime, _ := time.Parse(time.RFC3339, "2001-02-03T16:05:06+09:00") latency := 123 * time.Millisecond logger.WithTime(startTime, latency).Healthy("hello world", nil)
Output: {"time":"2001-02-03T16:05:06+09:00", "status":"HEALTHY", "latency":123.000, "target":"foobar:your-plugin-url", "message":"hello world"}
type ProbeHistory
deprecated
added in
v0.10.0
type ProbeHistory struct { Target *URL // Status is the latest status of the target Status Status // Status is the same as Time of the latest History record Updated time.Time Records []Record }
ProbeHistory is the status history data of single target
Deprecated: this struct will removed in future version.
func (ProbeHistory) MarshalJSON ¶ added in v0.10.0
func (ph ProbeHistory) MarshalJSON() ([]byte, error)
MarshalJSON implements the json.Marshaler interface.
func (*ProbeHistory) UnmarshalJSON ¶ added in v0.10.0
func (ph *ProbeHistory) UnmarshalJSON(data []byte) error
UnmarshalJSON implements the json.Unmarshaler interface.
type ProbePluginArgs
deprecated
type ProbePluginArgs struct {
TargetURL *URL
}
ProbePluginArgs is arguments for probe plugin
Deprecated: since version 0.16. This struct will removed in future version. Please parse using ParseURL instead of this.
func ParseProbePluginArgs ¶
func ParseProbePluginArgs() (ProbePluginArgs, error)
ParseProbePluginArgs is get arguments for probe plugin
This function is shorthand of `ayd.ParseProbePluginArgs(os.Args)`.
func ParseProbePluginArgsFrom ¶
func ParseProbePluginArgsFrom(args []string) (ProbePluginArgs, error)
ParseProbePluginArgsFrom is parse arguments for probe plugin
type Record ¶
type Record struct { Time time.Time Status Status Latency time.Duration Target *URL Message string Extra map[string]interface{} }
Record is a record in Ayd log
func ParseRecord ¶
ParseRecord is parse string as a Record row in the log
func (Record) MarshalJSON ¶ added in v0.10.0
MarshalJSON implements the json.Marshaler interface.
func (Record) ReadableExtra ¶ added in v0.15.0
ReadableExtra returns Extra map but encode each values as string.
func (Record) ReadableMessage ¶ added in v0.15.0
ReadableMessage returns human readable message of the message field and extra fields.
func (*Record) UnmarshalJSON ¶ added in v0.10.0
UnmarshalJSON implements the json.Unmarshaler interface.
type Report
deprecated
added in
v0.10.0
type Report struct { // ProbeHistory is the map of ProbeHistory. // The key is target URL string, and the value is struct ProbeHistory. ProbeHistory map[string]ProbeHistory // CurrentIncidents is the list of Incident that current causing. CurrentIncidents []Incident // IncidentHistory is the list of Incident that already resolved. // // If you want get current causing incidents, please use CurrentIncidents. IncidentHistory []Incident // ReportedAt is the time the report created in server. ReportedAt time.Time }
Report is a report from Ayd server.
Deprecated: this struct planed be removed in future version.
func (Report) MarshalJSON ¶ added in v0.10.0
MarshalJSON implements the json.Marshaler interface.
func (Report) TargetURLs ¶ added in v0.10.0
TargetURLs returns target URLs that to status checking
func (*Report) UnmarshalJSON ¶ added in v0.10.0
UnmarshalJSON implements the json.Unmarshaler interface.
type Status ¶
type Status int8
Status is the status of target service
const ( // StatusFailure means the target is in FAILURE, but status check is success. // System administrators have to do something action to the target system when this status. StatusFailure Status = -2 // StatusDegrade means success to status check and the target is worked but partially features or stability is DEGRADE. // System administrators have to do something action to the target system when this status, but might not urgency. StatusDegrade Status = -1 // StatusUnknown means UNKNOWN current status because failed to check the target status. // System administrators have to fix Ayd settings, or do something to the target system, when this status. StatusUnknown Status = 0 // StatusAborted means the status check ABORTED because stop by system administrator or other system program like systemd. // System administrators don't have to do something on this status. StatusAborted Status = 1 // StatusHealthy means success to status check and the target is HEALTHY. StatusHealthy Status = 2 )
func ParseStatus ¶
ParseStatus is parse status string
If passed unsupported status, it will returns StatusUnknown
func (Status) MarshalText ¶
MarshalText is marshal Status as text
func (*Status) UnmarshalText ¶
UnmarshalText is unmarshal text as status
This function always returns nil. This parses as StatusUnknown instead of returns error if unsupported status passed.
type URL ¶ added in v0.14.0
URL is a target URL.
func (URL) MarshalText ¶ added in v0.15.0
MarshalText encodes a URL to []byte.
func (URL) String ¶ added in v0.14.0
String returns string version of the URL. The password in the URL will be masked.
func (*URL) UnmarshalText ¶ added in v0.15.0
UnmarshalText parser raw text as a URL.