-
Notifications
You must be signed in to change notification settings - Fork 19
/
scripted.go
75 lines (56 loc) · 1.59 KB
/
scripted.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package scripted
import (
"context"
"errors"
"time"
"github.com/grafana/synthetic-monitoring-agent/internal/k6runner"
"github.com/grafana/synthetic-monitoring-agent/internal/prober/logger"
sm "github.com/grafana/synthetic-monitoring-agent/pkg/pb/synthetic_monitoring"
"github.com/prometheus/client_golang/prometheus"
"github.com/rs/zerolog"
)
const proberName = "scripted"
var errUnsupportedCheck = errors.New("unsupported check")
type Module struct {
Prober string
Timeout time.Duration
Script []byte
}
type Prober struct {
logger zerolog.Logger
config Module
script *k6runner.Script
}
func NewProber(ctx context.Context, check sm.Check, logger zerolog.Logger, runner k6runner.Runner) (Prober, error) {
var p Prober
if check.Settings.Scripted == nil {
return p, errUnsupportedCheck
}
p.config = settingsToModule(check.Settings.Scripted)
timeout := time.Duration(check.Timeout) * time.Millisecond
p.config.Timeout = timeout
script, err := k6runner.NewScript(check.Settings.Scripted.Script, runner)
if err != nil {
return p, err
}
p.script = script
p.logger = logger
return p, nil
}
func (p Prober) Name() string {
return proberName
}
func (p Prober) Probe(ctx context.Context, target string, registry *prometheus.Registry, logger logger.Logger) bool {
success, err := p.script.Run(ctx, registry, logger, p.logger)
if err != nil {
p.logger.Warn().Err(err).Msg("running probe")
return false
}
return success
}
func settingsToModule(settings *sm.ScriptedSettings) Module {
var m Module
m.Prober = sm.CheckTypeScripted.String()
m.Script = settings.Script
return m
}