NOISSUE - Add instance ID (#1776)

* update or to sync with clients branch

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* Add empty lines

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* update inline constant

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* rebase pr to sync with master branch

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* update pr to sync with updated master #1849

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

---------

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>
This commit is contained in:
Ian Ngethe Muchiri
2023-07-07 12:14:55 +03:00
committed by GitHub
parent 604949e073
commit 892015a60f
75 changed files with 421 additions and 117 deletions
-1
View File
@@ -1967,4 +1967,3 @@ components:
security:
- bearerAuth: []
- refreshAuth: []
+3 -2
View File
@@ -51,6 +51,7 @@ const (
addExternalKey = "external-key"
addName = "name"
addContent = "config"
instanceID = "5de9b29a-feb9-11ed-be56-0242ac120002"
)
var (
@@ -201,7 +202,7 @@ func newThingsService(auth upolicies.AuthServiceClient) (clients.Service, groups
func newThingsServer(csvc clients.Service, gsvc groups.Service, psvc tpolicies.Service) *httptest.Server {
logger := mflog.NewMock()
mux := bone.New()
capi.MakeHandler(csvc, mux, logger)
capi.MakeHandler(csvc, mux, logger, instanceID)
gapi.MakeHandler(gsvc, mux, logger)
papi.MakeHandler(csvc, psvc, mux, logger)
return httptest.NewServer(mux)
@@ -209,7 +210,7 @@ func newThingsServer(csvc clients.Service, gsvc groups.Service, psvc tpolicies.S
func newBootstrapServer(svc bootstrap.Service) *httptest.Server {
logger := mflog.NewMock()
mux := bsapi.MakeHandler(svc, bootstrap.NewConfigReader(encKey), logger)
mux := bsapi.MakeHandler(svc, bootstrap.NewConfigReader(encKey), logger, instanceID)
return httptest.NewServer(mux)
}
+2 -2
View File
@@ -34,7 +34,7 @@ var (
)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler(svc bootstrap.Service, reader bootstrap.ConfigReader, logger mflog.Logger) http.Handler {
func MakeHandler(svc bootstrap.Service, reader bootstrap.ConfigReader, logger mflog.Logger, instanceID string) http.Handler {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(apiutil.LoggingErrorEncoder(logger, encodeError)),
}
@@ -100,7 +100,7 @@ func MakeHandler(svc bootstrap.Service, reader bootstrap.ConfigReader, logger mf
encodeResponse,
opts...))
r.GetFunc("/health", mainflux.Health("bootstrap"))
r.GetFunc("/health", mainflux.Health("bootstrap", instanceID))
r.Handle("/metrics", promhttp.Handler())
return r
+2 -1
View File
@@ -51,6 +51,7 @@ const (
thingStateChange = thingPrefix + "state_change"
thingBootstrap = thingPrefix + "bootstrap"
thingUpdateConnections = thingPrefix + "update_connections"
instanceID = "5de9b29a-feb9-11ed-be56-0242ac120002"
)
var (
@@ -101,7 +102,7 @@ func newThingsService(auth upolicies.AuthServiceClient) (clients.Service, groups
func newThingsServer(csvc clients.Service, gsvc groups.Service, psvc tpolicies.Service) *httptest.Server {
logger := logger.NewMock()
mux := bone.New()
capi.MakeHandler(csvc, mux, logger)
capi.MakeHandler(csvc, mux, logger, instanceID)
gapi.MakeHandler(gsvc, mux, logger)
papi.MakeHandler(csvc, psvc, mux, logger)
return httptest.NewServer(mux)
+2 -1
View File
@@ -42,6 +42,7 @@ const (
email = "test@example.com"
unknown = "unknown"
channelsNum = 3
instanceID = "5de9b29a-feb9-11ed-be56-0242ac120002"
)
var (
@@ -92,7 +93,7 @@ func newThingsService(auth upolicies.AuthServiceClient) (clients.Service, groups
func newThingsServer(csvc clients.Service, gsvc groups.Service, psvc tpolicies.Service) *httptest.Server {
logger := mflog.NewMock()
mux := bone.New()
capi.MakeHandler(csvc, mux, logger)
capi.MakeHandler(csvc, mux, logger, instanceID)
gapi.MakeHandler(gsvc, mux, logger)
papi.MakeHandler(csvc, psvc, mux, logger)
return httptest.NewServer(mux)
+2 -2
View File
@@ -27,7 +27,7 @@ const (
)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler(svc certs.Service, logger logger.Logger) http.Handler {
func MakeHandler(svc certs.Service, logger logger.Logger, instanceID string) http.Handler {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(apiutil.LoggingErrorEncoder(logger, encodeError)),
}
@@ -63,7 +63,7 @@ func MakeHandler(svc certs.Service, logger logger.Logger) http.Handler {
))
r.Handle("/metrics", promhttp.Handler())
r.GetFunc("/health", mainflux.Health("certs"))
r.GetFunc("/health", mainflux.Health("certs", instanceID))
return r
}
+2 -1
View File
@@ -43,6 +43,7 @@ const (
caPath = "../docker/ssl/certs/ca.crt"
caKeyPath = "../docker/ssl/certs/ca.key"
cfgSignHoursValid = "24h"
instanceID = "5de9b29a-feb9-11ed-be56-0242ac120002"
)
func newService(tokens map[string]string) (certs.Service, error) {
@@ -367,6 +368,6 @@ func TestViewCert(t *testing.T) {
func newThingsServer(svc clients.Service) *httptest.Server {
logger := logger.NewMock()
mux := bone.New()
httpapi.MakeHandler(svc, mux, logger)
httpapi.MakeHandler(svc, mux, logger, instanceID)
return httptest.NewServer(mux)
}
+12 -2
View File
@@ -29,6 +29,7 @@ import (
httpserver "github.com/mainflux/mainflux/internal/server/http"
mflog "github.com/mainflux/mainflux/logger"
mfsdk "github.com/mainflux/mainflux/pkg/sdk/go"
"github.com/mainflux/mainflux/pkg/uuid"
"github.com/mainflux/mainflux/users/policies"
"golang.org/x/sync/errgroup"
@@ -54,6 +55,7 @@ type config struct {
ThingsURL string `env:"MF_THINGS_URL" envDefault:"http://localhost:9000"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_BOOTSTRAP_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -70,6 +72,14 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
// Create new postgres client
dbConfig := pgClient.Config{Name: defDB}
@@ -94,7 +104,7 @@ func main() {
defer authHandler.Close()
logger.Info("Successfully connected to auth grpc server " + authHandler.Secure())
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL)
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Fatal(fmt.Sprintf("failed to init Jaeger: %s", err))
}
@@ -113,7 +123,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc, bootstrap.NewConfigReader([]byte(cfg.EncKey)), logger), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc, bootstrap.NewConfigReader([]byte(cfg.EncKey)), logger, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+11 -1
View File
@@ -21,6 +21,7 @@ import (
"github.com/mainflux/mainflux/internal/server"
httpserver "github.com/mainflux/mainflux/internal/server/http"
mflog "github.com/mainflux/mainflux/logger"
"github.com/mainflux/mainflux/pkg/uuid"
"github.com/mainflux/mainflux/readers"
"github.com/mainflux/mainflux/readers/api"
"github.com/mainflux/mainflux/readers/cassandra"
@@ -37,6 +38,7 @@ const (
type config struct {
LogLevel string `env:"MF_CASSANDRA_READER_LOG_LEVEL" envDefault:"info"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_CASSANDRA_READER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -55,6 +57,14 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
// Create new thing grpc client
tc, tcHandler, err := thingsClient.Setup(envPrefix)
if err != nil {
@@ -88,7 +98,7 @@ func main() {
logger.Fatal(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(repo, tc, auth, svcName), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(repo, tc, auth, svcName, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+12 -2
View File
@@ -26,6 +26,7 @@ import (
mflog "github.com/mainflux/mainflux/logger"
"github.com/mainflux/mainflux/pkg/messaging/brokers"
"github.com/mainflux/mainflux/pkg/messaging/tracing"
"github.com/mainflux/mainflux/pkg/uuid"
"golang.org/x/sync/errgroup"
)
@@ -42,6 +43,7 @@ type config struct {
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"localhost:6831"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_CASSANDRA_WRITER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -59,6 +61,14 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
// Create new to cassandra client
csdSession, err := cassandraClient.SetupDB(envPrefix, cassandra.Table)
if err != nil {
@@ -66,7 +76,7 @@ func main() {
}
defer csdSession.Close()
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL)
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Error(fmt.Sprintf("Failed to init Jaeger: %s", err))
}
@@ -100,7 +110,7 @@ func main() {
logger.Fatal(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svcName), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svcName, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+11 -1
View File
@@ -29,6 +29,7 @@ import (
authClient "github.com/mainflux/mainflux/internal/clients/grpc/auth"
pgClient "github.com/mainflux/mainflux/internal/clients/postgres"
mfsdk "github.com/mainflux/mainflux/pkg/sdk/go"
"github.com/mainflux/mainflux/pkg/uuid"
)
const (
@@ -44,6 +45,7 @@ type config struct {
CertsURL string `env:"MF_SDK_CERTS_URL" envDefault:"http://localhost"`
ThingsURL string `env:"MF_THINGS_URL" envDefault:"http://things:9000"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_CERTS_INSTANCE_ID" envDefault:""`
// Sign and issue certificates without 3rd party PKI
SignCAPath string `env:"MF_CERTS_SIGN_CA_PATH" envDefault:"ca.crt"`
@@ -73,6 +75,14 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
if cfg.PkiHost == "" {
logger.Fatal("No host specified for PKI engine")
}
@@ -102,7 +112,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc, logger), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc, logger, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+12 -2
View File
@@ -25,6 +25,7 @@ import (
mflog "github.com/mainflux/mainflux/logger"
"github.com/mainflux/mainflux/pkg/messaging/brokers"
pstracing "github.com/mainflux/mainflux/pkg/messaging/tracing"
"github.com/mainflux/mainflux/pkg/uuid"
"golang.org/x/sync/errgroup"
)
@@ -42,6 +43,7 @@ type config struct {
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_COAP_ADAPTER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -58,6 +60,14 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
tc, tcHandler, err := thingsClient.Setup(envPrefix)
if err != nil {
logger.Fatal(err.Error())
@@ -65,7 +75,7 @@ func main() {
defer tcHandler.Close()
logger.Info("Successfully connected to things grpc server " + tcHandler.Secure())
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL)
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Error(fmt.Sprintf("Failed to init Jaeger: %s", err))
}
@@ -96,7 +106,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(instanceID), logger)
coapServerConfig := server.Config{Port: defSvcCoapPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixCoap, AltPrefix: envPrefix}); err != nil {
+12 -2
View File
@@ -25,6 +25,7 @@ import (
"github.com/mainflux/mainflux/pkg/messaging"
"github.com/mainflux/mainflux/pkg/messaging/brokers"
pstracing "github.com/mainflux/mainflux/pkg/messaging/tracing"
"github.com/mainflux/mainflux/pkg/uuid"
"github.com/mainflux/mainflux/things/policies"
"go.opentelemetry.io/otel/trace"
@@ -43,6 +44,7 @@ type config struct {
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_HTTP_ADAPTER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -59,6 +61,14 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
tc, tcHandler, err := thingsClient.Setup(envPrefix)
if err != nil {
logger.Fatal(err.Error())
@@ -66,7 +76,7 @@ func main() {
defer tcHandler.Close()
logger.Info("Successfully connected to things grpc server " + tcHandler.Secure())
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL)
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Error(fmt.Sprintf("Failed to init Jaeger: %s", err))
}
@@ -90,7 +100,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+11 -1
View File
@@ -22,6 +22,7 @@ import (
"github.com/mainflux/mainflux/internal/server"
httpserver "github.com/mainflux/mainflux/internal/server/http"
mflog "github.com/mainflux/mainflux/logger"
"github.com/mainflux/mainflux/pkg/uuid"
"github.com/mainflux/mainflux/readers"
"github.com/mainflux/mainflux/readers/api"
"github.com/mainflux/mainflux/readers/influxdb"
@@ -39,6 +40,7 @@ const (
type config struct {
LogLevel string `env:"MF_INFLUX_READER_LOG_LEVEL" envDefault:"info"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_INFLUX_READER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -55,6 +57,14 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
tc, tcHandler, err := thingsClient.Setup(envPrefix)
if err != nil {
logger.Fatal(err.Error())
@@ -92,7 +102,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(repo, tc, auth, svcName), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(repo, tc, auth, svcName, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+12 -2
View File
@@ -23,6 +23,7 @@ import (
mflog "github.com/mainflux/mainflux/logger"
"github.com/mainflux/mainflux/pkg/messaging/brokers"
"github.com/mainflux/mainflux/pkg/messaging/tracing"
"github.com/mainflux/mainflux/pkg/uuid"
"golang.org/x/sync/errgroup"
)
@@ -40,6 +41,7 @@ type config struct {
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"localhost:6831"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_INFLUX_WRITER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -56,7 +58,15 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL)
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Error(fmt.Sprintf("Failed to init Jaeger: %s", err))
}
@@ -110,7 +120,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svcName), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svcName, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+12 -2
View File
@@ -26,6 +26,7 @@ import (
"github.com/mainflux/mainflux/pkg/messaging"
"github.com/mainflux/mainflux/pkg/messaging/brokers"
"github.com/mainflux/mainflux/pkg/messaging/tracing"
"github.com/mainflux/mainflux/pkg/uuid"
"golang.org/x/sync/errgroup"
jaegerClient "github.com/mainflux/mainflux/internal/clients/jaeger"
@@ -57,6 +58,7 @@ type config struct {
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"localhost:6831"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_LORA_ADAPTER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -73,13 +75,21 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
rmConn, err := redisClient.Setup(envPrefixRouteMap)
if err != nil {
logger.Fatal(fmt.Sprintf("failed to setup route map redis client : %s", err))
}
defer rmConn.Close()
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL)
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Error(fmt.Sprintf("Failed to init Jaeger: %s", err))
}
@@ -114,7 +124,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+11 -1
View File
@@ -20,6 +20,7 @@ import (
"github.com/mainflux/mainflux/internal/server"
httpserver "github.com/mainflux/mainflux/internal/server/http"
mflog "github.com/mainflux/mainflux/logger"
"github.com/mainflux/mainflux/pkg/uuid"
"github.com/mainflux/mainflux/readers"
"github.com/mainflux/mainflux/readers/api"
"github.com/mainflux/mainflux/readers/mongodb"
@@ -38,6 +39,7 @@ const (
type config struct {
LogLevel string `env:"MF_MONGO_READER_LOG_LEVEL" envDefault:"info"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_MONGO_READER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -54,6 +56,14 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
db, err := mongoClient.Setup(envPrefixDB)
if err != nil {
logger.Fatal(fmt.Sprintf("failed to setup mongo database : %s", err))
@@ -79,7 +89,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(repo, tc, auth, svcName), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(repo, tc, auth, svcName, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+12 -2
View File
@@ -24,6 +24,7 @@ import (
mflog "github.com/mainflux/mainflux/logger"
"github.com/mainflux/mainflux/pkg/messaging/brokers"
"github.com/mainflux/mainflux/pkg/messaging/tracing"
"github.com/mainflux/mainflux/pkg/uuid"
"go.mongodb.org/mongo-driver/mongo"
"golang.org/x/sync/errgroup"
)
@@ -42,6 +43,7 @@ type config struct {
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"localhost:6831"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_MONGO_WRITER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -58,7 +60,15 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL)
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Error(fmt.Sprintf("Failed to init Jaeger: %s", err))
}
@@ -91,7 +101,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svcName), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svcName, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+11 -1
View File
@@ -29,6 +29,7 @@ import (
"github.com/mainflux/mainflux/pkg/messaging/brokers"
mqttpub "github.com/mainflux/mainflux/pkg/messaging/mqtt"
"github.com/mainflux/mainflux/pkg/messaging/tracing"
"github.com/mainflux/mainflux/pkg/uuid"
mp "github.com/mainflux/mproxy/pkg/mqtt"
"github.com/mainflux/mproxy/pkg/session"
ws "github.com/mainflux/mproxy/pkg/websocket"
@@ -57,6 +58,7 @@ type config struct {
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_MQTT_ADAPTER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -73,6 +75,14 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
if cfg.MqttTargetHealthCheck != "" {
notify := func(e error, next time.Duration) {
logger.Info(fmt.Sprintf("Broker not ready: %s, next try in %s", e.Error(), next))
@@ -84,7 +94,7 @@ func main() {
}
}
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL)
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Error(fmt.Sprintf("Failed to init Jaeger: %s", err))
}
+12 -2
View File
@@ -27,6 +27,7 @@ import (
"github.com/mainflux/mainflux/opcua/redis"
"github.com/mainflux/mainflux/pkg/messaging/brokers"
"github.com/mainflux/mainflux/pkg/messaging/tracing"
"github.com/mainflux/mainflux/pkg/uuid"
"golang.org/x/sync/errgroup"
)
@@ -49,6 +50,7 @@ type config struct {
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"localhost:6831"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_OPCUA_ADAPTER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -70,6 +72,14 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
rmConn, err := redisClient.Setup(envPrefixRouteMap)
if err != nil {
logger.Fatal(fmt.Sprintf("failed to setup %s bootstrap event store redis client : %s", svcName, err))
@@ -86,7 +96,7 @@ func main() {
}
defer esConn.Close()
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL)
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Error(fmt.Sprintf("Failed to init Jaeger: %s", err))
}
@@ -116,7 +126,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, httpCancel, svcName, httpServerConfig, api.MakeHandler(svc, logger), logger)
hs := httpserver.New(ctx, httpCancel, svcName, httpServerConfig, api.MakeHandler(svc, logger, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, httpCancel)
+12 -1
View File
@@ -21,6 +21,7 @@ import (
"github.com/mainflux/mainflux/internal/server"
httpserver "github.com/mainflux/mainflux/internal/server/http"
mflog "github.com/mainflux/mainflux/logger"
"github.com/mainflux/mainflux/pkg/uuid"
"github.com/mainflux/mainflux/readers"
"github.com/mainflux/mainflux/readers/api"
"github.com/mainflux/mainflux/readers/postgres"
@@ -38,6 +39,7 @@ const (
type config struct {
LogLevel string `env:"MF_POSTGRES_READER_LOG_LEVEL" envDefault:"info"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_POSTGRES_READER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -58,6 +60,15 @@ func main() {
if err != nil {
logger.Fatal(err.Error())
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
defer tcHandler.Close()
logger.Info("Successfully connected to things grpc server " + tcHandler.Secure())
@@ -84,7 +95,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(repo, tc, auth, svcName), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(repo, tc, auth, svcName, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+12 -2
View File
@@ -25,6 +25,7 @@ import (
mflog "github.com/mainflux/mainflux/logger"
"github.com/mainflux/mainflux/pkg/messaging/brokers"
"github.com/mainflux/mainflux/pkg/messaging/tracing"
"github.com/mainflux/mainflux/pkg/uuid"
"golang.org/x/sync/errgroup"
)
@@ -42,6 +43,7 @@ type config struct {
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"localhost:6831"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_POSTGRES_WRITER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -58,7 +60,15 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL)
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Error(fmt.Sprintf("Failed to init Jaeger: %s", err))
}
@@ -93,7 +103,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svcName), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svcName, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+12 -1
View File
@@ -22,6 +22,7 @@ import (
"github.com/mainflux/mainflux/pkg/errors"
mfgroups "github.com/mainflux/mainflux/pkg/groups"
mfSDK "github.com/mainflux/mainflux/pkg/sdk/go"
"github.com/mainflux/mainflux/pkg/uuid"
"github.com/mainflux/mainflux/provision"
"github.com/mainflux/mainflux/provision/api"
"golang.org/x/sync/errgroup"
@@ -50,6 +51,7 @@ const (
defBSContent = ""
defCertsHoursValid = "2400h"
defSendTelemetry = "true"
defInstanceID = ""
envConfigFile = "MF_PROVISION_CONFIG_FILE"
envLogLevel = "MF_PROVISION_LOG_LEVEL"
@@ -71,6 +73,7 @@ const (
envBSContent = "MF_PROVISION_BS_CONTENT"
envCertsHoursValid = "MF_PROVISION_CERTS_HOURS_VALID"
envSendTelemetry = "MF_SEND_TELEMETRY"
envInstanceID = "MF_PROVISION_INSTANCE_ID"
contentType = "application/json"
)
@@ -99,6 +102,14 @@ func main() {
log.Fatalf(err.Error())
}
instanceID := mainflux.Env(envInstanceID, defInstanceID)
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
if cfgFromFile, err := loadConfigFromFile(cfg.File); err != nil {
logger.Warn(fmt.Sprintf("Continue with settings from env, failed to load from: %s: %s", cfg.File, err))
} else {
@@ -122,7 +133,7 @@ func main() {
svc = api.NewLoggingMiddleware(svc, logger)
httpServerConfig := server.Config{Host: "", Port: cfg.Server.HTTPPort, KeyFile: cfg.Server.ServerKey, CertFile: cfg.Server.ServerCert}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc, logger), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc, logger, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+18 -8
View File
@@ -34,6 +34,7 @@ import (
"github.com/mainflux/mainflux/pkg/messaging/brokers"
pstracing "github.com/mainflux/mainflux/pkg/messaging/tracing"
"github.com/mainflux/mainflux/pkg/ulid"
"github.com/mainflux/mainflux/pkg/uuid"
)
const (
@@ -45,12 +46,13 @@ const (
)
type config struct {
LogLevel string `env:"MF_SMPP_NOTIFIER_LOG_LEVEL" envDefault:"info"`
From string `env:"MF_SMPP_NOTIFIER_FROM_ADDR" envDefault:""`
ConfigPath string `env:"MF_SMPP_NOTIFIER_CONFIG_PATH" envDefault:"/config.toml"`
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
LogLevel string `env:"MF_SMPP_NOTIFIER_LOG_LEVEL" envDefault:"info"`
From string `env:"MF_SMPP_NOTIFIER_FROM_ADDR" envDefault:""`
ConfigPath string `env:"MF_SMPP_NOTIFIER_CONFIG_PATH" envDefault:"/config.toml"`
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_SMPP_NOTIFIER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -67,6 +69,14 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
dbConfig := pgClient.Config{Name: defDB}
db, err := pgClient.SetupWithConfig(envPrefix, *notifierPg.Migration(), dbConfig)
if err != nil {
@@ -79,7 +89,7 @@ func main() {
logger.Fatal(fmt.Sprintf("failed to load SMPP configuration from environment : %s", err))
}
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL)
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Error(fmt.Sprintf("Failed to init Jaeger: %s", err))
}
@@ -113,7 +123,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc, logger), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc, logger, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+18 -8
View File
@@ -32,6 +32,7 @@ import (
"github.com/mainflux/mainflux/pkg/messaging/brokers"
pstracing "github.com/mainflux/mainflux/pkg/messaging/tracing"
"github.com/mainflux/mainflux/pkg/ulid"
"github.com/mainflux/mainflux/pkg/uuid"
"github.com/mainflux/mainflux/users/policies"
"go.opentelemetry.io/otel/trace"
"golang.org/x/sync/errgroup"
@@ -46,12 +47,13 @@ const (
)
type config struct {
LogLevel string `env:"MF_SMTP_NOTIFIER_LOG_LEVEL" envDefault:"info"`
ConfigPath string `env:"MF_SMTP_NOTIFIER_CONFIG_PATH" envDefault:"/config.toml"`
From string `env:"MF_SMTP_NOTIFIER_FROM_ADDR" envDefault:""`
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
LogLevel string `env:"MF_SMTP_NOTIFIER_LOG_LEVEL" envDefault:"info"`
ConfigPath string `env:"MF_SMTP_NOTIFIER_CONFIG_PATH" envDefault:"/config.toml"`
From string `env:"MF_SMTP_NOTIFIER_FROM_ADDR" envDefault:""`
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_SMTP_NOTIFIER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -68,6 +70,14 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
dbConfig := pgClient.Config{Name: defDB}
db, err := pgClient.SetupWithConfig(envPrefix, *notifierPg.Migration(), dbConfig)
if err != nil {
@@ -80,7 +90,7 @@ func main() {
logger.Fatal(fmt.Sprintf("failed to load email configuration : %s", err))
}
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL)
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Fatal(fmt.Sprintf("failed to init Jaeger: %s", err))
}
@@ -115,7 +125,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc, logger), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc, logger, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+12 -2
View File
@@ -73,6 +73,7 @@ type config struct {
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
CacheKeyDuration string `env:"MF_THINGS_CACHE_KEY_DURATION" envDefault:"10m"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_THINGS_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -89,6 +90,15 @@ func main() {
if err != nil {
log.Fatalf("failed to init logger: %s", err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
// Create new database for things
dbConfig := pgClient.Config{Name: defDB}
db, err := pgClient.SetupWithConfig(envPrefix, *thingsPg.Migration(), dbConfig)
@@ -97,7 +107,7 @@ func main() {
}
defer db.Close()
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL)
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Error(fmt.Sprintf("Failed to init Jaeger: %s", err))
}
@@ -145,7 +155,7 @@ func main() {
}
mux := bone.New()
hsp := httpserver.New(ctx, cancel, "things-policies", httpServerConfig, httpapi.MakeHandler(csvc, psvc, mux, logger), logger)
hsc := httpserver.New(ctx, cancel, "things-clients", httpServerConfig, capi.MakeHandler(csvc, mux, logger), logger)
hsc := httpserver.New(ctx, cancel, "things-clients", httpServerConfig, capi.MakeHandler(csvc, mux, logger, instanceID), logger)
hsg := httpserver.New(ctx, cancel, "things-groups", httpServerConfig, gapi.MakeHandler(gsvc, mux, logger), logger)
registerThingsServiceServer := func(srv *grpc.Server) {
+13 -3
View File
@@ -21,6 +21,7 @@ import (
"github.com/mainflux/mainflux/internal/server"
httpserver "github.com/mainflux/mainflux/internal/server/http"
mflog "github.com/mainflux/mainflux/logger"
"github.com/mainflux/mainflux/pkg/uuid"
"github.com/mainflux/mainflux/readers"
"github.com/mainflux/mainflux/readers/api"
"github.com/mainflux/mainflux/readers/timescale"
@@ -36,8 +37,9 @@ const (
)
type config struct {
LogLevel string `env:"MF_TIMESCALE_READER_LOG_LEVEL" envDefault:"info"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
LogLevel string `env:"MF_TIMESCALE_READER_LOG_LEVEL" envDefault:"info"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_TIMESCALE_READER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -54,6 +56,14 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
dbConfig := pgClient.Config{Name: defDB}
if err := dbConfig.LoadEnv(envPrefix); err != nil {
logger.Fatal(err.Error())
@@ -84,7 +94,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(repo, tc, auth, svcName), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(repo, tc, auth, svcName, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+17 -7
View File
@@ -26,6 +26,7 @@ import (
mflog "github.com/mainflux/mainflux/logger"
"github.com/mainflux/mainflux/pkg/messaging/brokers"
"github.com/mainflux/mainflux/pkg/messaging/tracing"
"github.com/mainflux/mainflux/pkg/uuid"
"golang.org/x/sync/errgroup"
)
@@ -38,11 +39,12 @@ const (
)
type config struct {
LogLevel string `env:"MF_TIMESCALE_WRITER_LOG_LEVEL" envDefault:"info"`
ConfigPath string `env:"MF_TIMESCALE_WRITER_CONFIG_PATH" envDefault:"/config.toml"`
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"localhost:6831"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
LogLevel string `env:"MF_TIMESCALE_WRITER_LOG_LEVEL" envDefault:"info"`
ConfigPath string `env:"MF_TIMESCALE_WRITER_CONFIG_PATH" envDefault:"/config.toml"`
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"localhost:6831"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_TIMESCALE_WRITER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -59,6 +61,14 @@ func main() {
log.Fatal(err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
dbConfig := pgClient.Config{Name: defDB}
db, err := pgClient.SetupWithConfig(envPrefix, *timescale.Migration(), dbConfig)
if err != nil {
@@ -66,7 +76,7 @@ func main() {
}
defer db.Close()
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL)
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Error(fmt.Sprintf("Failed to init Jaeger: %s", err))
}
@@ -94,7 +104,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svcName), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svcName, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+11 -2
View File
@@ -56,6 +56,7 @@ type config struct {
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_TWINS_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -72,6 +73,14 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
cacheClient, err := redisClient.Setup(envPrefixCache)
if err != nil {
logger.Fatal(err.Error())
@@ -83,7 +92,7 @@ func main() {
logger.Fatal(fmt.Sprintf("failed to setup postgres database : %s", err))
}
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL)
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Fatal(fmt.Sprintf("failed to init Jaeger: %s", err))
}
@@ -121,7 +130,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, twapi.MakeHandler(svc, logger), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, twapi.MakeHandler(svc, logger, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+11 -2
View File
@@ -74,6 +74,7 @@ type config struct {
ResetURL string `env:"MF_TOKEN_RESET_ENDPOINT" envDefault:"/reset-request"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_USERS_INSTANCE_ID" envDefault:""`
PassRegex *regexp.Regexp
}
@@ -96,6 +97,14 @@ func main() {
logger.Fatal(fmt.Sprintf("failed to init logger: %s", err.Error()))
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
ec := email.Config{}
if err := env.Parse(&ec); err != nil {
logger.Fatal(fmt.Sprintf("failed to load email configuration : %s", err.Error()))
@@ -108,7 +117,7 @@ func main() {
}
defer db.Close()
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL)
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Fatal(fmt.Sprintf("failed to init Jaeger: %s", err))
}
@@ -126,7 +135,7 @@ func main() {
logger.Fatal(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err.Error()))
}
mux := bone.New()
hsc := httpserver.New(ctx, cancel, svcName, httpServerConfig, capi.MakeHandler(csvc, mux, logger), logger)
hsc := httpserver.New(ctx, cancel, svcName, httpServerConfig, capi.MakeHandler(csvc, mux, logger, instanceID), logger)
hsg := httpserver.New(ctx, cancel, svcName, httpServerConfig, gapi.MakeHandler(gsvc, mux, logger), logger)
hsp := httpserver.New(ctx, cancel, svcName, httpServerConfig, httpapi.MakeHandler(psvc, mux, logger), logger)
+16 -6
View File
@@ -25,6 +25,7 @@ import (
"github.com/mainflux/mainflux/pkg/messaging"
"github.com/mainflux/mainflux/pkg/messaging/brokers"
pstracing "github.com/mainflux/mainflux/pkg/messaging/tracing"
"github.com/mainflux/mainflux/pkg/uuid"
"github.com/mainflux/mainflux/things/policies"
adapter "github.com/mainflux/mainflux/ws"
"github.com/mainflux/mainflux/ws/api"
@@ -39,10 +40,11 @@ const (
)
type config struct {
LogLevel string `env:"MF_WS_ADAPTER_LOG_LEVEL" envDefault:"info"`
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
LogLevel string `env:"MF_WS_ADAPTER_LOG_LEVEL" envDefault:"info"`
BrokerURL string `env:"MF_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MF_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MF_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MF_WS_ADAPTER_INSTANCE_ID" envDefault:""`
}
func main() {
@@ -59,6 +61,14 @@ func main() {
log.Fatalf("failed to init logger: %s", err)
}
instanceID := cfg.InstanceID
if instanceID == "" {
instanceID, err = uuid.New().ID()
if err != nil {
log.Fatalf("Failed to generate instanceID: %s", err)
}
}
tc, tcHandler, err := thingsClient.Setup(envPrefix)
if err != nil {
logger.Fatal(err.Error())
@@ -66,7 +76,7 @@ func main() {
defer internal.Close(logger, tcHandler)
logger.Info("Successfully connected to things grpc server " + tcHandler.Secure())
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL)
tp, err := jaegerClient.NewProvider(svcName, cfg.JaegerURL, instanceID)
if err != nil {
logger.Fatal(fmt.Sprintf("failed to init Jaeger: %s", err))
}
@@ -90,7 +100,7 @@ func main() {
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))
}
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc, logger), logger)
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, api.MakeHandler(svc, logger, instanceID), logger)
if cfg.SendTelemetry {
chc := chclient.New(svcName, mainflux.Version, logger, cancel)
+2 -2
View File
@@ -50,9 +50,9 @@ var (
)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler() http.Handler {
func MakeHandler(instanceID string) http.Handler {
b := bone.New()
b.GetFunc("/health", mainflux.Health(protocol))
b.GetFunc("/health", mainflux.Health(protocol, instanceID))
b.Handle("/metrics", promhttp.Handler())
return b
+2 -1
View File
@@ -31,6 +31,7 @@ const (
token = "token"
wrongValue = "wrong_value"
topic = "topic"
instanceID = "5de9b29a-feb9-11ed-be56-0242ac120002"
)
var (
@@ -74,7 +75,7 @@ func newService(tokens map[string]string) notifiers.Service {
func newServer(svc notifiers.Service) *httptest.Server {
logger := logger.NewMock()
mux := httpapi.MakeHandler(svc, logger)
mux := httpapi.MakeHandler(svc, logger, instanceID)
return httptest.NewServer(mux)
}
+2 -2
View File
@@ -31,7 +31,7 @@ const (
)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler(svc notifiers.Service, logger logger.Logger) http.Handler {
func MakeHandler(svc notifiers.Service, logger logger.Logger, instanceID string) http.Handler {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(apiutil.LoggingErrorEncoder(logger, encodeError)),
}
@@ -66,7 +66,7 @@ func MakeHandler(svc notifiers.Service, logger logger.Logger) http.Handler {
opts...,
))
mux.GetFunc("/health", mainflux.Health("notifier"))
mux.GetFunc("/health", mainflux.Health("notifier", instanceID))
mux.Handle("/metrics", promhttp.Handler())
return mux
+2 -2
View File
@@ -12,9 +12,9 @@ import (
)
// MakeHandler returns a HTTP API handler with health check and metrics.
func MakeHandler(svcName string) http.Handler {
func MakeHandler(svcName, instanceID string) http.Handler {
r := bone.New()
r.GetFunc("/health", mainflux.Health(svcName))
r.GetFunc("/health", mainflux.Health(svcName, instanceID))
r.Handle("/metrics", promhttp.Handler())
return r
+25 -1
View File
@@ -58,7 +58,8 @@ MF_USERS_REFRESH_TOKEN_DURATION=24h
MF_USERS_ADMIN_EMAIL=admin@example.com
MF_USERS_ADMIN_PASSWORD=12345678
MF_USERS_RESET_PWD_TEMPLATE=users.tmpl
MF_USERS_PASS_REGEX=^.{8,}$
MF_USERS_PASS_REGEX=^.{8,}$$
MF_USERS_INSTANCE_ID=
### Email utility
MF_EMAIL_HOST=smtp.mailtrap.io
@@ -68,6 +69,7 @@ MF_EMAIL_PASSWORD=2b0d302e775b1e
MF_EMAIL_FROM_ADDRESS=from@example.com
MF_EMAIL_FROM_NAME=Example
MF_EMAIL_TEMPLATE=smtp-notifier.tmpl
MF_EMAIL_INSTANCE_ID=
### Token utility
MF_TOKEN_RESET_ENDPOINT=/reset-request
@@ -94,9 +96,11 @@ MF_THINGS_CACHE_DB=
MF_THINGS_ES_URL=es-redis:${MF_REDIS_TCP_PORT}
MF_THINGS_ES_PASS=
MF_THINGS_ES_DB=
MF_THINGS_INSTANCE_ID=
### HTTP
MF_HTTP_ADAPTER_PORT=8008
MF_HTTP_ADAPTER_INSTANCE_ID=
### MQTT
MF_MQTT_ADAPTER_LOG_LEVEL=debug
@@ -106,6 +110,7 @@ MF_MQTT_ADAPTER_WS_PORT=8080
MF_MQTT_BROKER_WS_PORT=8080
MF_MQTT_ADAPTER_ES_DB=0
MF_MQTT_ADAPTER_ES_PASS=
MF_MQTT_ADAPTER_INSTANCE_ID=
### VERNEMQ
MF_DOCKER_VERNEMQ_ALLOW_ANONYMOUS=on
@@ -114,10 +119,12 @@ MF_DOCKER_VERNEMQ_LOG__CONSOLE__LEVEL=error
### CoAP
MF_COAP_ADAPTER_LOG_LEVEL=debug
MF_COAP_ADAPTER_PORT=5683
MF_COAP_ADAPTER_INSTANCE_ID=
### WS
MF_WS_ADAPTER_LOG_LEVEL=debug
MF_WS_ADAPTER_PORT=8186
MF_WS_ADAPTER_INSTANCE_ID=
### Call home
MF_SEND_TELEMETRY=true
@@ -131,6 +138,7 @@ MF_BOOTSTRAP_DB_USER=mainflux
MF_BOOTSTRAP_DB_PASS=mainflux
MF_BOOTSTRAP_DB=bootstrap
MF_BOOTSTRAP_DB_SSL_MODE=disable
MF_BOOTSTRAP_INSTANCE_ID=
### Provision
MF_PROVISION_CONFIG_FILE=/configs/config.toml
@@ -153,6 +161,7 @@ MF_PROVISION_BS_AUTO_WHITELIST=true
MF_PROVISION_BS_CONTENT=
MF_PROVISION_CERTS_HOURS_VALID=2400h
MF_PROVISION_CERTS_RSA_BITS=2048
MF_PROVISION_INSTANCE_ID=
# Certs
MF_CERTS_LOG_LEVEL=debug
@@ -176,6 +185,7 @@ MF_CERTS_SIGN_CA_KEY_PATH=/etc/ssl/certs/ca.key
MF_CERTS_SIGN_HOURS_VALID=2048h
MF_CERTS_SIGN_RSA_BITS=2048
MF_CERTS_VAULT_HOST=http://vault:8200
MF_CERTS_INSTANCE_ID=
### Vault
@@ -206,6 +216,7 @@ MF_LORA_ADAPTER_HTTP_PORT=9017
MF_LORA_ADAPTER_ROUTE_MAP_URL=localhost:6379
MF_LORA_ADAPTER_ROUTE_MAP_PASS=
MF_LORA_ADAPTER_ROUTE_MAP_DB=0
MF_LORA_ADAPTER_INSTANCE_ID=
### OPC-UA
MF_OPCUA_ADAPTER_HTTP_PORT=8188
@@ -218,6 +229,7 @@ MF_OPCUA_ADAPTER_ROUTE_MAP_URL=localhost:6379
MF_OPCUA_ADAPTER_ROUTE_MAP_PASS=
MF_OPCUA_ADAPTER_ROUTE_MAP_DB=0
MF_OPCUA_ADAPTER_EVENT_CONSUMER=opcua
MF_OPCUA_ADAPTER_INSTANCE_ID=
### Cassandra Writer
MF_CASSANDRA_WRITER_LOG_LEVEL=debug
@@ -234,6 +246,7 @@ MF_CASSANDRA_READER_DB_CLUSTER=mainflux-cassandra
MF_CASSANDRA_READER_DB_KEYSPACE=mainflux
MF_CASSANDRA_READER_SERVER_CERT=
MF_CASSANDRA_READER_SERVER_KEY=
MF_CASSANDRA_WRITER_INSANCE_ID=
### InfluxDB
MF_INFLUXDB_PORT=8086
@@ -254,6 +267,7 @@ MF_INFLUX_WRITER_LOG_LEVEL=debug
MF_INFLUX_WRITER_PORT=9006
MF_INFLUX_WRITER_BATCH_SIZE=5000
MF_INFLUX_WRITER_BATCH_TIMEOUT=5
MF_INFLUX_WRITER_INSTANCE_ID=
### InfluxDB Reader
MF_INFLUX_READER_LOG_LEVEL=debug
@@ -261,12 +275,14 @@ MF_INFLUX_READER_PORT=9005
MF_INFLUX_READER_SERVER_KEY=
MF_INFLUX_READER_SERVER_CERT=
MF_INFLUXDB_DB=mainflux
MF_INFLUX_READER_INSTANCE_ID=
### MongoDB Writer
MF_MONGO_WRITER_LOG_LEVEL=debug
MF_MONGO_WRITER_PORT=9008
MF_MONGO_WRITER_DB=mainflux
MF_MONGO_WRITER_DB_PORT=27017
MF_MONGO_WRITER_INSTANCE_ID=
### MongoDB Reader
MF_MONGO_READER_LOG_LEVEL=debug
@@ -275,6 +291,7 @@ MF_MONGO_READER_DB=mainflux
MF_MONGO_READER_DB_PORT=27017
MF_MONGO_READER_SERVER_CERT=
MF_MONGO_READER_SERVER_KEY=
MF_MONGO_READER_INSTANCE_ID=
### Postgres Writer
MF_POSTGRES_WRITER_LOG_LEVEL=debug
@@ -287,6 +304,7 @@ MF_POSTGRES_WRITER_DB_SSL_MODE=disable
MF_POSTGRES_WRITER_DB_SSL_CERT=""
MF_POSTGRES_WRITER_DB_SSL_KEY=""
MF_POSTGRES_WRITER_DB_SSL_ROOT_CERT=""
MF_POSTGRES_WRITER_INSTANCE_ID=
### Postgres Reader
MF_POSTGRES_READER_LOG_LEVEL=debug
@@ -301,6 +319,7 @@ MF_POSTGRES_READER_DB_SSL_MODE=disable
MF_POSTGRES_READER_DB_SSL_CERT=""
MF_POSTGRES_READER_DB_SSL_KEY=""
MF_POSTGRES_READER_DB_SSL_ROOT_CERT=""
MF_POSTGRES_READER_INSTANCE_ID=
### Timescale Writer
MF_TIMESCALE_WRITER_LOG_LEVEL=debug
@@ -313,6 +332,7 @@ MF_TIMESCALE_WRITER_DB_SSL_MODE=disable
MF_TIMESCALE_WRITER_DB_SSL_CERT=""
MF_TIMESCALE_WRITER_DB_SSL_KEY=""
MF_TIMESCALE_WRITER_DB_SSL_ROOT_CERT=""
MF_TIMESCALE_WRITER_INSTANCE_ID=
### Timescale Reader
MF_TIMESCALE_READER_LOG_LEVEL=debug
@@ -327,6 +347,7 @@ MF_TIMESCALE_READER_DB_SSL_MODE=disable
MF_TIMESCALE_READER_DB_SSL_CERT=""
MF_TIMESCALE_READER_DB_SSL_KEY=""
MF_TIMESCALE_READER_DB_SSL_ROOT_CERT=""
MF_TIMESCALE_READER_INSTANCE_ID=
### Twins
MF_TWINS_LOG_LEVEL=debug
@@ -344,6 +365,7 @@ MF_TWINS_CHANNEL_ID=
MF_TWINS_CACHE_URL=es-redis:6379
MF_TWINS_CACHE_PASS=
MF_TWINS_CACHE_DB=0
MF_TWINS_INSTANCE_ID=
### SMTP Notifier
MF_SMTP_NOTIFIER_PORT=9015
@@ -354,6 +376,7 @@ MF_SMTP_NOTIFIER_DB_PASS=mainflux
MF_SMTP_NOTIFIER_DB=subscriptions
MF_SMTP_NOTIFIER_TEMPLATE=smtp-notifier.tmpl
MF_SMTP_NOTIFIER_FROM_ADDR=from@example.com
MF_SMTP_NOTIFIER_INSTANCE_ID=
### SMPP Notifier
MF_SMPP_NOTIFIER_PORT=9014
@@ -372,6 +395,7 @@ MF_SMPP_SRC_ADDR_TON=5
MF_SMPP_SRC_ADDR_NPI=0
MF_SMPP_DST_ADDR_TON=1
MF_SMPP_DST_ADDR_NPI=1
MF_SMPP_NOTIFIER_INSTANCE_ID=
### GRAFANA and PROMETHEUS
MF_PROMETHEUS_PORT=9090
@@ -53,5 +53,6 @@ services:
MF_AUTH_GRPC_TIMMEOUT: ${MF_USERS_GRPC_TIMEOUT}
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_BOOTSTRAP_INSTANCE_ID: ${MF_BOOTSTRAP_INSTANCE_ID}
networks:
- docker_mainflux-base-net
@@ -29,6 +29,7 @@ services:
MF_AUTH_GRPC_URL: ${MF_USERS_GRPC_URL}
MF_AUTH_GRPC_TIMEOUT : ${MF_USERS_GRPC_TIMEOUT}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_CASSANDRA_READER_INSTANCE_ID: ${MF_CASSANDRA_READER_INSTANCE_ID}
ports:
- ${MF_CASSANDRA_READER_PORT}:${MF_CASSANDRA_READER_PORT}
networks:
@@ -42,6 +42,7 @@ services:
MF_CASSANDRA_WRITER_DB_KEYSPACE: ${MF_CASSANDRA_WRITER_DB_KEYSPACE}
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_CASSANDRA_WRITER_INSANCE_ID: ${MF_CASSANDRA_WRITER_INSANCE_ID}
ports:
- ${MF_CASSANDRA_WRITER_PORT}:${MF_CASSANDRA_WRITER_PORT}
networks:
+1
View File
@@ -70,6 +70,7 @@ services:
MF_AUTH_GRPC_TIMEOUT: ${MF_USERS_GRPC_TIMEOUT}
MF_CERTS_VAULT_HOST: ${MF_CERTS_VAULT_HOST}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_CERTS_INSTANCE_ID: ${MF_CERTS_INSTANCE_ID}
volumes:
- ../../ssl/certs/ca.key:/etc/ssl/certs/ca.key
- ../../ssl/certs/ca.crt:/etc/ssl/certs/ca.crt
@@ -37,6 +37,7 @@ services:
MF_AUTH_GRPC_URL: ${MF_USERS_GRPC_URL}
MF_AUTH_GRPC_TIMEOUT : ${MF_USERS_GRPC_TIMEOUT}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_INFLUX_READER_INSTANCE_ID: ${MF_INFLUX_READER_INSTANCE_ID}
ports:
- ${MF_INFLUX_READER_PORT}:${MF_INFLUX_READER_PORT}
networks:
@@ -56,6 +56,7 @@ services:
MF_INFLUXDB_ADMIN_PASSWORD: ${MF_INFLUXDB_ADMIN_PASSWORD}
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_INFLUX_WRITER_INSTANCE_ID: ${MF_INFLUX_WRITER_INSTANCE_ID}
ports:
- ${MF_INFLUX_WRITER_PORT}:${MF_INFLUX_WRITER_PORT}
networks:
@@ -36,6 +36,7 @@ services:
MF_LORA_ADAPTER_HTTP_PORT: ${MF_LORA_ADAPTER_HTTP_PORT}
MF_BROKER_URL: ${MF_BROKER_URL}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_LORA_ADAPTER_INSTANCE_ID: ${MF_LORA_ADAPTER_INSTANCE_ID}
ports:
- ${MF_LORA_ADAPTER_HTTP_PORT}:${MF_LORA_ADAPTER_HTTP_PORT}
networks:
@@ -31,6 +31,7 @@ services:
MF_AUTH_GRPC_URL: ${MF_USERS_GRPC_URL}
MF_AUTH_GRPC_TIMEOUT : ${MF_USERS_GRPC_TIMEOUT}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_MONGO_READER_INSTANCE_ID: ${MF_MONGO_READER_INSTANCE_ID}
ports:
- ${MF_MONGO_READER_PORT}:${MF_MONGO_READER_PORT}
networks:
@@ -48,6 +48,7 @@ services:
MF_MONGO_WRITER_DB_PORT: ${MF_MONGO_WRITER_DB_PORT}
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_MONGO_WRITER_INSTANCE_ID: ${MF_MONGO_WRITER_INSTANCE_ID}
ports:
- ${MF_MONGO_WRITER_PORT}:${MF_MONGO_WRITER_PORT}
networks:
@@ -46,6 +46,7 @@ services:
MF_THINGS_ES_DB: ${MF_THINGS_ES_DB}
MF_OPCUA_ADAPTER_EVENT_CONSUMER: ${MF_OPCUA_ADAPTER_EVENT_CONSUMER}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_OPCUA_ADAPTER_INSTANCE_ID: ${MF_OPCUA_ADAPTER_INSTANCE_ID}
ports:
- ${MF_OPCUA_ADAPTER_HTTP_PORT}:${MF_OPCUA_ADAPTER_HTTP_PORT}
networks:
@@ -37,6 +37,7 @@ services:
MF_AUTH_GRPC_URL: ${MF_USERS_GRPC_URL}
MF_AUTH_GRPC_TIMEOUT : ${MF_USERS_GRPC_TIMEOUT}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_POSTGRES_READER_INSTANCE_ID: ${MF_POSTGRES_READER_INSTANCE_ID}
ports:
- ${MF_POSTGRES_READER_PORT}:${MF_POSTGRES_READER_PORT}
networks:
@@ -52,6 +52,7 @@ services:
MF_POSTGRES_WRITER_DB_SSL_ROOT_CERT: ${MF_POSTGRES_WRITER_DB_SSL_ROOT_CERT}
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_POSTGRES_WRITER_INSTANCE_ID: ${MF_POSTGRES_WRITER_INSTANCE_ID}
ports:
- ${MF_POSTGRES_WRITER_PORT}:${MF_POSTGRES_WRITER_PORT}
networks:
@@ -43,6 +43,7 @@ services:
MF_PROVISION_CERTS_RSA_BITS: ${MF_PROVISION_CERTS_RSA_BITS}
MF_PROVISION_CERTS_HOURS_VALID: ${MF_PROVISION_CERTS_HOURS_VALID}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_PROVISION_INSTANCE_ID: ${MF_PROVISION_INSTANCE_ID}
volumes:
- ./configs:/configs
- ../../ssl/certs/ca.key:/etc/ssl/certs/ca.key
@@ -57,6 +57,7 @@ services:
MF_SMPP_DST_ADDR_TON: ${MF_SMPP_DST_ADDR_TON}
MF_SMPP_DST_ADDR_NPI: ${MF_SMPP_DST_ADDR_NPI}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_SMPP_NOTIFIER_INSTANCE_ID: ${MF_SMPP_NOTIFIER_INSTANCE_ID}
ports:
- ${MF_SMPP_NOTIFIER_PORT}:${MF_SMPP_NOTIFIER_PORT}
networks:
@@ -57,6 +57,7 @@ services:
MF_SMTP_NOTIFIER_TEMPLATE: ${MF_SMTP_NOTIFIER_TEMPLATE}
MF_SMTP_NOTIFIER_FROM_ADDR: ${MF_SMTP_NOTIFIER_FROM_ADDR}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_SMTP_NOTIFIER_INSTANCE_ID: ${MF_SMTP_NOTIFIER_INSTANCE_ID}
ports:
- ${MF_SMTP_NOTIFIER_PORT}:${MF_SMTP_NOTIFIER_PORT}
networks:
@@ -37,6 +37,7 @@ services:
MF_AUTH_GRPC_URL: ${MF_USERS_GRPC_URL}
MF_AUTH_GRPC_TIMEOUT : ${MF_USERS_GRPC_TIMEOUT}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_TIMESCALE_READER_INSTANCE_ID: ${MF_TIMESCALE_READER_INSTANCE_ID}
ports:
- ${MF_TIMESCALE_READER_PORT}:${MF_TIMESCALE_READER_PORT}
networks:
@@ -52,6 +52,7 @@ services:
MF_TIMESCALE_WRITER_DB_SSL_ROOT_CERT: ${MF_TIMESCALE_WRITER_DB_SSL_ROOT_CERT}
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_TIMESCALE_WRITER_INSTANCE_ID: ${MF_TIMESCALE_WRITER_INSTANCE_ID}
ports:
- ${MF_TIMESCALE_WRITER_PORT}:${MF_TIMESCALE_WRITER_PORT}
networks:
+1
View File
@@ -52,6 +52,7 @@ services:
MF_THINGS_STANDALONE_ID: ${MF_THINGS_STANDALONE_ID}
MF_THINGS_STANDALONE_TOKEN: ${MF_THINGS_STANDALONE_TOKEN}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
MF_TWINS_INSTANCE_ID: ${MF_TWINS_INSTANCE_ID}
ports:
- ${MF_TWINS_HTTP_PORT}:${MF_TWINS_HTTP_PORT}
networks:
+4
View File
@@ -216,6 +216,7 @@ services:
MF_MQTT_ADAPTER_MQTT_TARGET_HEALTH_CHECK: http://vernemq:8888/health
MF_MQTT_ADAPTER_WS_TARGET_HOST: vernemq
MF_MQTT_ADAPTER_WS_TARGET_PORT: ${MF_MQTT_BROKER_WS_PORT}
MF_MQTT_ADAPTER_INSTANCE_ID: ${MF_MQTT_ADAPTER_INSTANCE_ID}
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_THINGS_AUTH_GRPC_URL: ${MF_THINGS_AUTH_GRPC_URL}
MF_THINGS_AUTH_GRPC_TIMEOUT: ${MF_THINGS_AUTH_GRPC_TIMEOUT}
@@ -234,6 +235,7 @@ services:
environment:
MF_HTTP_ADAPTER_LOG_LEVEL: debug
MF_HTTP_ADAPTER_PORT: ${MF_HTTP_ADAPTER_PORT}
MF_HTTP_ADAPTER_INSTANCE_ID: ${MF_HTTP_ADAPTER_INSTANCE_ID}
MF_BROKER_URL: ${MF_BROKER_URL}
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_THINGS_AUTH_GRPC_URL: ${MF_THINGS_AUTH_GRPC_URL}
@@ -263,6 +265,7 @@ services:
environment:
MF_COAP_ADAPTER_LOG_LEVEL: ${MF_COAP_ADAPTER_LOG_LEVEL}
MF_COAP_ADAPTER_PORT: ${MF_COAP_ADAPTER_PORT}
MF_COAP_ADAPTER_INSTANCE_ID: ${MF_COAP_ADAPTER_INSTANCE_ID}
MF_BROKER_URL: ${MF_BROKER_URL}
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_THINGS_AUTH_GRPC_URL: ${MF_THINGS_AUTH_GRPC_URL}
@@ -284,6 +287,7 @@ services:
environment:
MF_WS_ADAPTER_LOG_LEVEL: ${MF_WS_ADAPTER_LOG_LEVEL}
MF_WS_ADAPTER_PORT: ${MF_WS_ADAPTER_PORT}
MF_WS_ADAPTER_INSTANCE_ID: ${MF_WS_ADAPTER_INSTANCE_ID}
MF_BROKER_URL: ${MF_BROKER_URL}
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_THINGS_AUTH_GRPC_URL: ${MF_THINGS_AUTH_GRPC_URL}
+5 -1
View File
@@ -46,10 +46,13 @@ type HealthInfo struct {
// BuildTime contains service build time.
BuildTime string `json:"build_time"`
// InstanceID contains the ID of the current service instance
InstanceID string `json:"instance_id"`
}
// Health exposes an HTTP handler for retrieving service health.
func Health(service string) http.HandlerFunc {
func Health(service, instanceID string) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Add(contentType, contentTypeJSON)
if r.Method != http.MethodGet && r.Method != http.MethodHead {
@@ -63,6 +66,7 @@ func Health(service string) http.HandlerFunc {
Commit: Commit,
Description: service + description,
BuildTime: BuildTime,
InstanceID: instanceID,
}
w.WriteHeader(http.StatusOK)
+3 -1
View File
@@ -19,13 +19,15 @@ import (
"github.com/stretchr/testify/assert"
)
const instanceID = "5de9b29a-feb9-11ed-be56-0242ac120002"
func newService(cc policies.ThingsServiceClient) adapter.Service {
pub := mocks.NewPublisher()
return adapter.New(pub, cc)
}
func newHTTPServer(svc adapter.Service) *httptest.Server {
mux := api.MakeHandler(svc)
mux := api.MakeHandler(svc, instanceID)
return httptest.NewServer(mux)
}
+2 -2
View File
@@ -41,7 +41,7 @@ var (
var channelPartRegExp = regexp.MustCompile(`^/channels/([\w\-]+)/messages(/[^?]*)?(\?.*)?$`)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler(svc adapter.Service) http.Handler {
func MakeHandler(svc adapter.Service, instanceID string) http.Handler {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(encodeError),
}
@@ -61,7 +61,7 @@ func MakeHandler(svc adapter.Service) http.Handler {
opts...,
))
r.GetFunc("/health", mainflux.Health("http"))
r.GetFunc("/health", mainflux.Health("http", instanceID))
r.Handle("/metrics", promhttp.Handler())
return r
+5 -2
View File
@@ -22,7 +22,7 @@ var (
)
// NewProvider initializes Jaeger TraceProvider.
func NewProvider(svcName, url string) (*tracesdk.TracerProvider, error) {
func NewProvider(svcName, url, instanceID string) (*tracesdk.TracerProvider, error) {
if url == "" {
return nil, errNoURL
}
@@ -36,7 +36,10 @@ func NewProvider(svcName, url string) (*tracesdk.TracerProvider, error) {
return nil, err
}
attributes := []attribute.KeyValue{semconv.ServiceNameKey.String(svcName)}
attributes := []attribute.KeyValue{
semconv.ServiceNameKey.String(svcName),
attribute.String("InstanceID", instanceID),
}
hostAttr, err := resource.New(context.TODO(), resource.WithHost(), resource.WithOSDescription(), resource.WithContainer())
if err != nil {
+2 -2
View File
@@ -12,9 +12,9 @@ import (
)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler() http.Handler {
func MakeHandler(instanceID string) http.Handler {
r := bone.New()
r.GetFunc("/health", mainflux.Health("lora-adapter"))
r.GetFunc("/health", mainflux.Health("lora-adapter", instanceID))
r.Handle("/metrics", promhttp.Handler())
return r
+2 -2
View File
@@ -28,7 +28,7 @@ const (
)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler(svc opcua.Service, logger mflog.Logger) http.Handler {
func MakeHandler(svc opcua.Service, logger mflog.Logger, instanceID string) http.Handler {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(apiutil.LoggingErrorEncoder(logger, encodeError)),
}
@@ -42,7 +42,7 @@ func MakeHandler(svc opcua.Service, logger mflog.Logger) http.Handler {
opts...,
))
r.GetFunc("/health", mainflux.Health("opcua-adapter"))
r.GetFunc("/health", mainflux.Health("opcua-adapter", instanceID))
r.Handle("/metrics", promhttp.Handler())
return r
+3 -1
View File
@@ -29,6 +29,8 @@ import (
upolicies "github.com/mainflux/mainflux/users/policies"
)
const instanceID = "5de9b29a-feb9-11ed-be56-0242ac120002"
var (
thingsNum = 1
thingKey = "thingKey"
@@ -88,7 +90,7 @@ func newCertService() (certs.Service, error) {
func newCertServer(svc certs.Service) *httptest.Server {
logger := logger.NewMock()
mux := httpapi.MakeHandler(svc, logger)
mux := httpapi.MakeHandler(svc, logger, instanceID)
return httptest.NewServer(mux)
}
+3 -3
View File
@@ -41,14 +41,14 @@ func newSubscriptionService() notifiers.Service {
notifier := mocks.NewNotifier()
idp := uuid.NewMock()
from := "exampleFrom"
return notifiers.New(auth, repo, idp, notifier, from)
}
func newSubscriptionServer(svc notifiers.Service) *httptest.Server {
logger := logger.NewMock()
mux := httpapi.MakeHandler(svc, logger)
mux := httpapi.MakeHandler(svc, logger, instanceID)
return httptest.NewServer(mux)
}
+1 -1
View File
@@ -28,7 +28,7 @@ func newMessageService(cc policies.ThingsServiceClient) adapter.Service {
}
func newMessageServer(svc adapter.Service) *httptest.Server {
mux := api.MakeHandler(svc)
mux := api.MakeHandler(svc, instanceID)
return httptest.NewServer(mux)
}
+1 -1
View File
@@ -37,7 +37,7 @@ var (
func newThingsServer(svc clients.Service, psvc policies.Service) *httptest.Server {
logger := mflog.NewMock()
mux := bone.New()
api.MakeHandler(svc, mux, logger)
api.MakeHandler(svc, mux, logger, instanceID)
papi.MakeHandler(svc, psvc, mux, logger)
return httptest.NewServer(mux)
}
+1 -1
View File
@@ -30,7 +30,7 @@ var id = generateUUID(&testing.T{})
func newClientServer(svc clients.Service) *httptest.Server {
logger := mflog.NewMock()
mux := bone.New()
api.MakeHandler(svc, mux, logger)
api.MakeHandler(svc, mux, logger, instanceID)
return httptest.NewServer(mux)
}
+2 -2
View File
@@ -20,7 +20,7 @@ const (
)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler(svc provision.Service, logger logger.Logger) http.Handler {
func MakeHandler(svc provision.Service, logger logger.Logger, instanceID string) http.Handler {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(apiutil.LoggingErrorEncoder(logger, encodeError)),
@@ -43,7 +43,7 @@ func MakeHandler(svc provision.Service, logger logger.Logger) http.Handler {
))
r.Handle("/metrics", promhttp.Handler())
r.GetFunc("/health", mainflux.Health("provision"))
r.GetFunc("/health", mainflux.Health("provision", instanceID))
return r
}
+2 -1
View File
@@ -36,6 +36,7 @@ const (
mqttProt = "mqtt"
httpProt = "http"
msgName = "temperature"
instanceID = "5de9b29a-feb9-11ed-be56-0242ac120002"
)
var (
@@ -49,7 +50,7 @@ var (
)
func newServer(repo readers.MessageRepository, tc tpolicies.ThingsServiceClient, ac upolicies.AuthServiceClient) *httptest.Server {
mux := api.MakeHandler(repo, tc, ac, svcName)
mux := api.MakeHandler(repo, tc, ac, svcName, instanceID)
return httptest.NewServer(mux)
}
+2 -2
View File
@@ -48,7 +48,7 @@ var (
)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler(svc readers.MessageRepository, tc tpolicies.ThingsServiceClient, ac upolicies.AuthServiceClient, svcName string) http.Handler {
func MakeHandler(svc readers.MessageRepository, tc tpolicies.ThingsServiceClient, ac upolicies.AuthServiceClient, svcName, instanceID string) http.Handler {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(encodeError),
@@ -62,7 +62,7 @@ func MakeHandler(svc readers.MessageRepository, tc tpolicies.ThingsServiceClient
opts...,
))
mux.GetFunc("/health", mainflux.Health(svcName))
mux.GetFunc("/health", mainflux.Health(svcName, instanceID))
mux.Handle("/metrics", promhttp.Handler())
return mux
+2 -2
View File
@@ -23,7 +23,7 @@ import (
)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler(svc clients.Service, mux *bone.Mux, logger mflog.Logger) http.Handler {
func MakeHandler(svc clients.Service, mux *bone.Mux, logger mflog.Logger, instanceID string) http.Handler {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(apiutil.LoggingErrorEncoder(logger, api.EncodeError)),
}
@@ -105,7 +105,7 @@ func MakeHandler(svc clients.Service, mux *bone.Mux, logger mflog.Logger) http.H
opts...,
))
mux.GetFunc("/health", mainflux.Health("things"))
mux.GetFunc("/health", mainflux.Health("things", instanceID))
mux.Handle("/metrics", promhttp.Handler())
return mux
}
+2 -1
View File
@@ -31,6 +31,7 @@ const (
wrongValue = "wrong_value"
wrongID = 0
maxNameSize = 1024
instanceID = "5de9b29a-feb9-11ed-be56-0242ac120002"
)
var invalidName = strings.Repeat("m", maxNameSize+1)
@@ -84,7 +85,7 @@ func (tr testRequest) make() (*http.Response, error) {
func newServer(svc twins.Service) *httptest.Server {
logger := logger.NewMock()
mux := httpapi.MakeHandler(svc, logger)
mux := httpapi.MakeHandler(svc, logger, instanceID)
return httptest.NewServer(mux)
}
+2 -2
View File
@@ -31,7 +31,7 @@ const (
)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler(svc twins.Service, logger logger.Logger) http.Handler {
func MakeHandler(svc twins.Service, logger logger.Logger, instanceID string) http.Handler {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(apiutil.LoggingErrorEncoder(logger, encodeError)),
}
@@ -80,7 +80,7 @@ func MakeHandler(svc twins.Service, logger logger.Logger) http.Handler {
opts...,
))
r.GetFunc("/health", mainflux.Health("twins"))
r.GetFunc("/health", mainflux.Health("twins", instanceID))
r.Handle("/metrics", promhttp.Handler())
return r
+2 -2
View File
@@ -23,7 +23,7 @@ import (
)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler(svc clients.Service, mux *bone.Mux, logger mflog.Logger) http.Handler {
func MakeHandler(svc clients.Service, mux *bone.Mux, logger mflog.Logger, instanceID string) http.Handler {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(apiutil.LoggingErrorEncoder(logger, api.EncodeError)),
}
@@ -140,7 +140,7 @@ func MakeHandler(svc clients.Service, mux *bone.Mux, logger mflog.Logger) http.H
opts...,
))
mux.GetFunc("/health", mainflux.Health("users"))
mux.GetFunc("/health", mainflux.Health("users", instanceID))
mux.Handle("/metrics", promhttp.Handler())
return mux
+6 -5
View File
@@ -23,10 +23,11 @@ import (
)
const (
chanID = "30315311-56ba-484d-b500-c1e08305511f"
id = "1"
thingKey = "c02ff576-ccd5-40f6-ba5f-c85377aad529"
protocol = "ws"
chanID = "30315311-56ba-484d-b500-c1e08305511f"
id = "1"
thingKey = "c02ff576-ccd5-40f6-ba5f-c85377aad529"
protocol = "ws"
instanceID = "5de9b29a-feb9-11ed-be56-0242ac120002"
)
var msg = []byte(`[{"n":"current","t":-1,"v":1.6}]`)
@@ -38,7 +39,7 @@ func newService(cc policies.ThingsServiceClient) (ws.Service, mocks.MockPubSub)
func newHTTPServer(svc ws.Service) *httptest.Server {
logger := mflog.NewMock()
mux := api.MakeHandler(svc, logger)
mux := api.MakeHandler(svc, logger, instanceID)
return httptest.NewServer(mux)
}
+2 -2
View File
@@ -35,13 +35,13 @@ var (
)
// MakeHandler returns http handler with handshake endpoint.
func MakeHandler(svc ws.Service, l mflog.Logger) http.Handler {
func MakeHandler(svc ws.Service, l mflog.Logger, instanceID string) http.Handler {
logger = l
mux := bone.New()
mux.GetFunc("/channels/:chanID/messages", handshake(svc))
mux.GetFunc("/channels/:chanID/messages/*", handshake(svc))
mux.GetFunc("/version", mainflux.Health(protocol))
mux.GetFunc("/version", mainflux.Health(protocol, instanceID))
mux.Handle("/metrics", promhttp.Handler())
return mux