github.com/grafana/synthetic-monitoring-agent@v0.64.2/internal/prober/tcp/tcp.go (about) 1 package tcp 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.Tcp == nil { 26 return Prober{}, errUnsupportedCheck 27 } 28 29 cfg, err := settingsToModule(ctx, check.Settings.Tcp, 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 "tcp" 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.ProbeTCP(ctx, target, p.config, registry, slogger), 0 48 } 49 50 func settingsToModule(ctx context.Context, settings *sm.TcpSettings, logger zerolog.Logger) (config.Module, error) { 51 var m config.Module 52 53 m.Prober = sm.CheckTypeTcp.String() 54 55 m.TCP.IPProtocol, m.TCP.IPProtocolFallback = settings.IpVersion.ToIpProtocol() 56 57 m.TCP.SourceIPAddress = settings.SourceIpAddress 58 59 m.TCP.TLS = settings.Tls 60 61 m.TCP.QueryResponse = make([]config.QueryResponse, len(settings.QueryResponse)) 62 63 for _, qr := range settings.QueryResponse { 64 re, err := config.NewRegexp(string(qr.Expect)) 65 if err != nil { 66 return m, err 67 } 68 69 m.TCP.QueryResponse = append(m.TCP.QueryResponse, config.QueryResponse{ 70 Expect: re, 71 Send: string(qr.Send), 72 }) 73 } 74 75 if settings.TlsConfig != nil { 76 var err error 77 78 m.TCP.TLSConfig, err = tls.SMtoProm(ctx, logger.With().Str("prober", m.Prober).Logger(), settings.TlsConfig) 79 if err != nil { 80 return m, err 81 } 82 } 83 84 return m, nil 85 }