Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -354,11 +354,6 @@ jobs:
run: |
go test --race -v -count=1 -coverprofile=coverage/groups.out ./groups/...

- name: Run WebSocket tests
if: steps.changes.outputs.ws == 'true' || steps.changes.outputs.workflow == 'true'
run: |
go test --race -v -count=1 -coverprofile=coverage/ws.out ./ws/...

- name: Upload coverage
uses: codecov/codecov-action@v5
with:
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

SMQ_DOCKER_IMAGE_NAME_PREFIX ?= supermq
BUILD_DIR ?= build
SERVICES = auth users clients groups channels domains http coap ws cli mqtt certs journal
SERVICES = auth users clients groups channels domains http coap cli mqtt certs journal
TEST_API_SERVICES = journal auth certs http clients users channels groups domains
TEST_API = $(addprefix test_api_,$(TEST_API_SERVICES))
DOCKERS = $(addprefix docker_,$(SERVICES))
Expand Down
2 changes: 1 addition & 1 deletion apidocs/asyncapi/websocket.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ servers:
default: localhost
port:
description: SuperMQ WebSocket Adapter port
default: '8186'
default: '8008'

channels:
'm/{domainPrefix}/c/{channelPrefix}/{subtopic}':
Expand Down
2 changes: 2 additions & 0 deletions apidocs/openapi/http.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ paths:
description: Message discarded due to its malformed content.
"401":
description: Missing or invalid access token provided.
"403":
description: Access denied to the requested resource.
"404":
description: Message discarded due to invalid channel id.
"415":
Expand Down
43 changes: 29 additions & 14 deletions cmd/http/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
grpcDomainsV1 "github.com/absmach/supermq/api/grpc/domains/v1"
adapter "github.com/absmach/supermq/http"
httpapi "github.com/absmach/supermq/http/api"
"github.com/absmach/supermq/http/middleware"
smqlog "github.com/absmach/supermq/logger"
smqauthn "github.com/absmach/supermq/pkg/authn"
"github.com/absmach/supermq/pkg/authn/authsvc"
Expand Down Expand Up @@ -185,31 +186,34 @@ func main() {
}()
tracer := tp.Tracer(svcName)

pub, err := brokers.NewPublisher(ctx, cfg.BrokerURL)
nps, err := brokers.NewPubSub(ctx, cfg.BrokerURL, logger)
if err != nil {
logger.Error(fmt.Sprintf("failed to connect to message broker: %s", err))
logger.Error(fmt.Sprintf("Failed to connect to message broker: %s", err))
exitCode = 1
return
}
defer pub.Close()
pub = brokerstracing.NewPublisher(httpServerConfig, tracer, pub)
defer nps.Close()
nps = brokerstracing.NewPubSub(httpServerConfig, tracer, nps)

pub, err = msgevents.NewPublisherMiddleware(ctx, pub, cfg.ESURL)
nps, err = msgevents.NewPubSubMiddleware(ctx, nps, cfg.ESURL)
if err != nil {
logger.Error(fmt.Sprintf("failed to create event store middleware: %s", err))
exitCode = 1
return
}

svc, err := newService(pub, authn, cacheConfig, clientsClient, channelsClient, domainsClient, logger, tracer)
resolver := messaging.NewTopicResolver(channelsClient, domainsClient)
handler, err := newHandler(nps, authn, cacheConfig, clientsClient, channelsClient, domainsClient, logger, tracer)
if err != nil {
logger.Error(fmt.Sprintf("failed to create service: %s", err))
exitCode = 1
return
}
svc := newService(clientsClient, channelsClient, nps, logger, tracer)

targetServerCfg := server.Config{Port: targetHTTPPort}

hs := httpserver.NewServer(ctx, cancel, svcName, targetServerCfg, httpapi.MakeHandler(logger, cfg.InstanceID), logger)
hs := httpserver.NewServer(ctx, cancel, svcName, targetServerCfg, httpapi.MakeHandler(ctx, svc, resolver, logger, cfg.InstanceID), logger)

if cfg.SendTelemetry {
chc := chclient.New(svcName, supermq.Version, logger, cancel)
Expand All @@ -221,7 +225,7 @@ func main() {
})

g.Go(func() error {
return proxyHTTP(ctx, httpServerConfig, logger, svc)
return proxyHTTP(ctx, httpServerConfig, logger, handler)
})

g.Go(func() error {
Expand All @@ -233,17 +237,28 @@ func main() {
}
}

func newService(pub messaging.Publisher, authn smqauthn.Authentication, cacheCfg messaging.CacheConfig, clients grpcClientsV1.ClientsServiceClient, channels grpcChannelsV1.ChannelsServiceClient, domains grpcDomainsV1.DomainsServiceClient, logger *slog.Logger, tracer trace.Tracer) (session.Handler, error) {
func newHandler(pub messaging.Publisher, authn smqauthn.Authentication, cacheCfg messaging.CacheConfig, clients grpcClientsV1.ClientsServiceClient, channels grpcChannelsV1.ChannelsServiceClient, domains grpcDomainsV1.DomainsServiceClient, logger *slog.Logger, tracer trace.Tracer) (session.Handler, error) {
parser, err := messaging.NewTopicParser(cacheCfg, channels, domains)
if err != nil {
return nil, err
}
svc := adapter.NewHandler(pub, authn, clients, channels, parser, logger)
svc = handler.NewTracing(tracer, svc)
svc = handler.LoggingMiddleware(svc, logger)
h := adapter.NewHandler(pub, authn, clients, channels, parser, logger)
h = handler.NewTracing(tracer, h)
h = handler.LoggingMiddleware(h, logger)
counter, latency := prometheus.MakeMetrics(svcName, "handler")
h = handler.MetricsMiddleware(h, counter, latency)

return h, nil
}

func newService(clientsClient grpcClientsV1.ClientsServiceClient, channels grpcChannelsV1.ChannelsServiceClient, nps messaging.PubSub, logger *slog.Logger, tracer trace.Tracer) adapter.Service {
svc := adapter.NewService(clientsClient, channels, nps)
svc = middleware.Tracing(tracer, svc)
svc = middleware.Logging(svc, logger)
counter, latency := prometheus.MakeMetrics(svcName, "api")
svc = handler.MetricsMiddleware(svc, counter, latency)
return svc, nil
svc = middleware.Metrics(svc, counter, latency)

return svc
}

func proxyHTTP(ctx context.Context, cfg server.Config, logger *slog.Logger, sessionHandler session.Handler) error {
Expand Down
Loading
Loading