github.com/grafana/synthetic-monitoring-agent@v0.64.2/internal/prober/grpc/grpc.go (about) 1 package grpc 2 3 import ( 4 "context" 5 "errors" 6 "time" 7 8 "github.com/grafana/synthetic-monitoring-agent/internal/model" 9 "github.com/grafana/synthetic-monitoring-agent/internal/prober/logger" 10 "github.com/grafana/synthetic-monitoring-agent/internal/tls" 11 sm "github.com/grafana/synthetic-monitoring-agent/pkg/pb/synthetic_monitoring" 12 "github.com/prometheus/blackbox_exporter/config" 13 bbeprober "github.com/prometheus/blackbox_exporter/prober" 14 "github.com/prometheus/client_golang/prometheus" 15 "github.com/rs/zerolog" 16 ) 17 18 var errUnsupportedCheck = errors.New("unsupported check") 19 20 type Prober struct { 21 config config.Module 22 } 23 24 func NewProber(ctx context.Context, check model.Check, logger zerolog.Logger) (Prober, error) { 25 if check.Settings.Grpc == nil { 26 return Prober{}, errUnsupportedCheck 27 } 28 29 cfg, err := settingsToModule(ctx, check.Settings.Grpc, logger) 30 if err != nil { 31 return Prober{}, err 32 } 33 34 cfg.Timeout = time.Duration(check.Timeout) * time.Millisecond 35 36 return Prober{ 37 config: cfg, 38 }, nil 39 } 40 41 func (p Prober) Name() string { 42 return "grpc" 43 } 44 45 func (p Prober) Probe(ctx context.Context, target string, registry *prometheus.Registry, l logger.Logger, _ string) (bool, float64) { 46 slogger := logger.ToSlog(l) 47 return bbeprober.ProbeGRPC(ctx, target, p.config, registry, slogger), 0 48 } 49 50 func settingsToModule(ctx context.Context, settings *sm.GrpcSettings, logger zerolog.Logger) (config.Module, error) { 51 var m config.Module 52 53 m.Prober = sm.CheckTypeGrpc.String() 54 55 m.GRPC.PreferredIPProtocol, m.GRPC.IPProtocolFallback = settings.IpVersion.ToIpProtocol() 56 57 m.GRPC.Service = settings.Service 58 59 m.GRPC.TLS = settings.Tls 60 61 if settings.TlsConfig != nil { 62 var err error 63 64 m.GRPC.TLSConfig, err = tls.SMtoProm(ctx, logger.With().Str("prober", m.Prober).Logger(), settings.TlsConfig) 65 if err != nil { 66 return m, err 67 } 68 } 69 70 return m, nil 71 }