1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-04-24 13:48:49 +08:00

NOISSUE - Add traces to API Bootstraps and Certs endpoints (#1851)

* add traces to bootstrap endpoints

Signed-off-by: SammyOina <sammyoina@gmail.com>

* add tracing to certs endpoints

Signed-off-by: SammyOina <sammyoina@gmail.com>

* remove tracing provider

Signed-off-by: SammyOina <sammyoina@gmail.com>

* add tracing provider

Signed-off-by: SammyOina <sammyoina@gmail.com>

* add tracing provider

Signed-off-by: SammyOina <sammyoina@gmail.com>

* Update cmd/certs/main.go

Co-authored-by: b1ackd0t <blackd0t@protonmail.com>
Signed-off-by: SammyOina <sammyoina@gmail.com>

---------

Signed-off-by: SammyOina <sammyoina@gmail.com>
Co-authored-by: b1ackd0t <blackd0t@protonmail.com>
This commit is contained in:
Sammy Kerata Oina 2023-07-11 16:19:04 +03:00 committed by GitHub
parent 7ffc14b279
commit 5410a14b04
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 28 additions and 14 deletions

View File

@ -18,6 +18,7 @@ import (
mflog "github.com/mainflux/mainflux/logger" mflog "github.com/mainflux/mainflux/logger"
"github.com/mainflux/mainflux/pkg/errors" "github.com/mainflux/mainflux/pkg/errors"
"github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/client_golang/prometheus/promhttp"
"go.opentelemetry.io/contrib/instrumentation/github.com/go-kit/kit/otelkit"
) )
const ( const (
@ -41,61 +42,61 @@ func MakeHandler(svc bootstrap.Service, reader bootstrap.ConfigReader, logger mf
r := bone.New() r := bone.New()
r.Post("/things/configs", kithttp.NewServer( r.Post("/things/configs", kithttp.NewServer(
addEndpoint(svc), otelkit.EndpointMiddleware(otelkit.WithOperation("add"))(addEndpoint(svc)),
decodeAddRequest, decodeAddRequest,
encodeResponse, encodeResponse,
opts...)) opts...))
r.Get("/things/configs/:configID", kithttp.NewServer( r.Get("/things/configs/:configID", kithttp.NewServer(
viewEndpoint(svc), otelkit.EndpointMiddleware(otelkit.WithOperation("view"))(viewEndpoint(svc)),
decodeEntityRequest, decodeEntityRequest,
encodeResponse, encodeResponse,
opts...)) opts...))
r.Put("/things/configs/:configID", kithttp.NewServer( r.Put("/things/configs/:configID", kithttp.NewServer(
updateEndpoint(svc), otelkit.EndpointMiddleware(otelkit.WithOperation("update"))(updateEndpoint(svc)),
decodeUpdateRequest, decodeUpdateRequest,
encodeResponse, encodeResponse,
opts...)) opts...))
r.Patch("/things/configs/certs/:certID", kithttp.NewServer( r.Patch("/things/configs/certs/:certID", kithttp.NewServer(
updateCertEndpoint(svc), otelkit.EndpointMiddleware(otelkit.WithOperation("update_cert"))(updateCertEndpoint(svc)),
decodeUpdateCertRequest, decodeUpdateCertRequest,
encodeResponse, encodeResponse,
opts...)) opts...))
r.Put("/things/configs/connections/:connID", kithttp.NewServer( r.Put("/things/configs/connections/:connID", kithttp.NewServer(
updateConnEndpoint(svc), otelkit.EndpointMiddleware(otelkit.WithOperation("update_connections"))(updateConnEndpoint(svc)),
decodeUpdateConnRequest, decodeUpdateConnRequest,
encodeResponse, encodeResponse,
opts...)) opts...))
r.Get("/things/configs", kithttp.NewServer( r.Get("/things/configs", kithttp.NewServer(
listEndpoint(svc), otelkit.EndpointMiddleware(otelkit.WithOperation("list"))(listEndpoint(svc)),
decodeListRequest, decodeListRequest,
encodeResponse, encodeResponse,
opts...)) opts...))
r.Get("/things/bootstrap/:externalID", kithttp.NewServer( r.Get("/things/bootstrap/:externalID", kithttp.NewServer(
bootstrapEndpoint(svc, reader, false), otelkit.EndpointMiddleware(otelkit.WithOperation("bootstrap"))(bootstrapEndpoint(svc, reader, false)),
decodeBootstrapRequest, decodeBootstrapRequest,
encodeResponse, encodeResponse,
opts...)) opts...))
r.Get("/things/bootstrap/secure/:externalID", kithttp.NewServer( r.Get("/things/bootstrap/secure/:externalID", kithttp.NewServer(
bootstrapEndpoint(svc, reader, true), otelkit.EndpointMiddleware(otelkit.WithOperation("bootstrap_secure"))(bootstrapEndpoint(svc, reader, true)),
decodeBootstrapRequest, decodeBootstrapRequest,
encodeSecureRes, encodeSecureRes,
opts...)) opts...))
r.Put("/things/state/:thingID", kithttp.NewServer( r.Put("/things/state/:thingID", kithttp.NewServer(
stateEndpoint(svc), otelkit.EndpointMiddleware(otelkit.WithOperation("state"))(stateEndpoint(svc)),
decodeStateRequest, decodeStateRequest,
encodeResponse, encodeResponse,
opts...)) opts...))
r.Delete("/things/configs/:configID", kithttp.NewServer( r.Delete("/things/configs/:configID", kithttp.NewServer(
removeEndpoint(svc), otelkit.EndpointMiddleware(otelkit.WithOperation("remove"))(removeEndpoint(svc)),
decodeEntityRequest, decodeEntityRequest,
encodeResponse, encodeResponse,
opts...)) opts...))

View File

@ -16,6 +16,7 @@ import (
"github.com/mainflux/mainflux/logger" "github.com/mainflux/mainflux/logger"
"github.com/mainflux/mainflux/pkg/errors" "github.com/mainflux/mainflux/pkg/errors"
"github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/client_golang/prometheus/promhttp"
"go.opentelemetry.io/contrib/instrumentation/github.com/go-kit/kit/otelkit"
) )
const ( const (
@ -35,28 +36,28 @@ func MakeHandler(svc certs.Service, logger logger.Logger, instanceID string) htt
r := bone.New() r := bone.New()
r.Post("/certs", kithttp.NewServer( r.Post("/certs", kithttp.NewServer(
issueCert(svc), otelkit.EndpointMiddleware(otelkit.WithOperation("issue"))(issueCert(svc)),
decodeCerts, decodeCerts,
encodeResponse, encodeResponse,
opts..., opts...,
)) ))
r.Get("/certs/:certID", kithttp.NewServer( r.Get("/certs/:certID", kithttp.NewServer(
viewCert(svc), otelkit.EndpointMiddleware(otelkit.WithOperation("view"))(viewCert(svc)),
decodeViewCert, decodeViewCert,
encodeResponse, encodeResponse,
opts..., opts...,
)) ))
r.Delete("/certs/:certID", kithttp.NewServer( r.Delete("/certs/:certID", kithttp.NewServer(
revokeCert(svc), otelkit.EndpointMiddleware(otelkit.WithOperation("revoke"))(revokeCert(svc)),
decodeRevokeCerts, decodeRevokeCerts,
encodeResponse, encodeResponse,
opts..., opts...,
)) ))
r.Get("/serials/:thingID", kithttp.NewServer( r.Get("/serials/:thingID", kithttp.NewServer(
listSerials(svc), otelkit.EndpointMiddleware(otelkit.WithOperation("list_serials"))(listSerials(svc)),
decodeListCerts, decodeListCerts,
encodeResponse, encodeResponse,
opts..., opts...,

View File

@ -123,6 +123,7 @@ func main() {
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHttp, AltPrefix: envPrefix}); err != nil { if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHttp, AltPrefix: envPrefix}); err != nil {
logger.Fatal(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err)) logger.Fatal(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
} }
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc, bootstrap.NewConfigReader([]byte(cfg.EncKey)), logger, instanceID), logger) hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc, bootstrap.NewConfigReader([]byte(cfg.EncKey)), logger, instanceID), logger)
if cfg.SendTelemetry { if cfg.SendTelemetry {

View File

@ -18,6 +18,7 @@ import (
vault "github.com/mainflux/mainflux/certs/pki" vault "github.com/mainflux/mainflux/certs/pki"
certsPg "github.com/mainflux/mainflux/certs/postgres" certsPg "github.com/mainflux/mainflux/certs/postgres"
"github.com/mainflux/mainflux/internal" "github.com/mainflux/mainflux/internal"
jaegerClient "github.com/mainflux/mainflux/internal/clients/jaeger"
"github.com/mainflux/mainflux/internal/env" "github.com/mainflux/mainflux/internal/env"
"github.com/mainflux/mainflux/internal/server" "github.com/mainflux/mainflux/internal/server"
httpserver "github.com/mainflux/mainflux/internal/server/http" httpserver "github.com/mainflux/mainflux/internal/server/http"
@ -46,6 +47,7 @@ type config struct {
ThingsURL string `env:"MF_THINGS_URL" envDefault:"http://things:9000"` ThingsURL string `env:"MF_THINGS_URL" envDefault:"http://things:9000"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"` SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_CERTS_INSTANCE_ID" envDefault:""` InstanceID string `env:"MF_CERTS_INSTANCE_ID" envDefault:""`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
// Sign and issue certificates without 3rd party PKI // Sign and issue certificates without 3rd party PKI
SignCAPath string `env:"MF_CERTS_SIGN_CA_PATH" envDefault:"ca.crt"` SignCAPath string `env:"MF_CERTS_SIGN_CA_PATH" envDefault:"ca.crt"`
@ -112,6 +114,15 @@ func main() {
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHttp, AltPrefix: envPrefix}); err != nil { if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHttp, AltPrefix: envPrefix}); err != nil {
logger.Fatal(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err)) logger.Fatal(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
} }
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Fatal(fmt.Sprintf("failed to init Jaeger: %s", err))
}
defer func() {
if err := tp.Shutdown(ctx); err != nil {
logger.Error(fmt.Sprintf("error shutting down tracer provider: %v", err))
}
}()
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc, logger, instanceID), logger) hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc, logger, instanceID), logger)
if cfg.SendTelemetry { if cfg.SendTelemetry {