Skip to content

Commit

Permalink
refactor: Remove http logic from main
Browse files Browse the repository at this point in the history
Signed-off-by: Vincent Boutour <[email protected]>
  • Loading branch information
ViBiOh committed Jun 28, 2024
1 parent 839f40c commit 555a484
Show file tree
Hide file tree
Showing 8 changed files with 66 additions and 93 deletions.
20 changes: 9 additions & 11 deletions cmd/fibr/adapters.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,24 +14,22 @@ type adapters struct {
}

func newAdapters(config configuration, clients clients) (adapters, error) {
storageService, err := absto.New(config.absto, clients.telemetry.TracerProvider())
var output adapters
var err error

output.storage, err = absto.New(config.absto, clients.telemetry.TracerProvider())
if err != nil {
return adapters{}, err
return output, err
}

filteredStorage, err := storage.Get(config.storage, storageService)
output.filteredStorage, err = storage.Get(config.storage, output.storage)
if err != nil {
return adapters{}, err
return output, err
}

var exclusiveService exclusive.Service
if clients.redis.Enabled() {
exclusiveService = exclusive.New(clients.redis)
output.exclusiveService = exclusive.New(clients.redis)
}

return adapters{
storage: storageService,
filteredStorage: filteredStorage,
exclusiveService: exclusiveService,
}, nil
return output, nil
}
22 changes: 0 additions & 22 deletions cmd/fibr/background.go

This file was deleted.

6 changes: 2 additions & 4 deletions cmd/fibr/clients.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,8 @@ type clients struct {
}

func newClients(ctx context.Context, config configuration) (clients, error) {
var (
output clients
err error
)
var output clients
var err error

logger.Init(ctx, config.logger)

Expand Down
13 changes: 5 additions & 8 deletions cmd/fibr/fibr.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@ import (
"context"

"github.com/ViBiOh/httputils/v4/pkg/alcotest"
"github.com/ViBiOh/httputils/v4/pkg/httputils"
"github.com/ViBiOh/httputils/v4/pkg/logger"
"github.com/ViBiOh/httputils/v4/pkg/owasp"
"github.com/ViBiOh/httputils/v4/pkg/server"
)

Expand All @@ -25,19 +23,18 @@ func main() {
adapters, err := newAdapters(config, clients)
logger.FatalfOnErr(ctx, err, "adapters")

endCtx := clients.health.EndCtx()

services, err := newServices(endCtx, config, clients, adapters)
services, err := newServices(ctx, config, clients, adapters)
logger.FatalfOnErr(ctx, err, "services")

endCtx := clients.health.EndCtx()

go services.Start(adapters, clients.health.DoneCtx(), endCtx)
defer services.Close()

port := newPort(config, services)
port := newPort(clients, services)

go services.server.Start(endCtx, httputils.Handler(port, clients.health, clients.telemetry.Middleware("http"), owasp.New(config.owasp).Middleware))
go services.server.Start(endCtx, port)

clients.health.WaitForTermination(services.server.Done())

server.GracefulWait(services.server.Done())
}
11 changes: 8 additions & 3 deletions cmd/fibr/port.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,17 @@ package main

import (
"net/http"

"github.com/ViBiOh/httputils/v4/pkg/httputils"
)

func newPort(config configuration, services services) http.Handler {
func newPort(clients clients, services services) http.Handler {
mux := http.NewServeMux()

mux.Handle(config.renderer.PathPrefix+"/", services.renderer.NewServeMux(services.fibr.TemplateFunc))
services.renderer.RegisterMux(mux, services.fibr.TemplateFunc)

return mux
return httputils.Handler(mux, clients.health,
clients.telemetry.Middleware("http"),
services.owasp.Middleware,
)
}
69 changes: 33 additions & 36 deletions cmd/fibr/service.go → cmd/fibr/services.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
"github.com/ViBiOh/fibr/pkg/thumbnail"
"github.com/ViBiOh/fibr/pkg/webhook"
"github.com/ViBiOh/httputils/v4/pkg/amqphandler"
"github.com/ViBiOh/httputils/v4/pkg/owasp"
"github.com/ViBiOh/httputils/v4/pkg/renderer"
"github.com/ViBiOh/httputils/v4/pkg/server"
"go.opentelemetry.io/otel/trace"
Expand All @@ -28,86 +29,82 @@ import (
var content embed.FS

type services struct {
server *server.Server
owasp owasp.Service
renderer *renderer.Service

fibr fibr.Service
eventBus provider.EventBus
webhook *webhook.Service
share *share.Service
renderer *renderer.Service
amqpThumbnail *amqphandler.Service
amqpExif *amqphandler.Service
server *server.Server
sanitizer sanitizer.Service
metadata metadata.Service
thumbnail thumbnail.Service
}

func newServices(ctx context.Context, config configuration, clients clients, adapters adapters) (services, error) {
eventBus, err := provider.NewEventBus(provider.MaxConcurrency, clients.telemetry.MeterProvider(), clients.telemetry.TracerProvider())
var output services
var err error

output.server = server.New(config.server)
output.owasp = owasp.New(config.owasp)

output.eventBus, err = provider.NewEventBus(provider.MaxConcurrency, clients.telemetry.MeterProvider(), clients.telemetry.TracerProvider())
if err != nil {
return services{}, err
return output, err
}

thumbnailService, err := thumbnail.New(ctx, config.thumbnail, adapters.storage, clients.redis, clients.telemetry.MeterProvider(), clients.telemetry.TracerProvider(), clients.amqp)
output.thumbnail, err = thumbnail.New(ctx, config.thumbnail, adapters.storage, clients.redis, clients.telemetry.MeterProvider(), clients.telemetry.TracerProvider(), clients.amqp)
if err != nil {
return services{}, err
return output, err
}

rendererService, err := renderer.New(ctx, config.renderer, content, fibr.FuncMap, clients.telemetry.MeterProvider(), clients.telemetry.TracerProvider())
output.renderer, err = renderer.New(ctx, config.renderer, content, fibr.FuncMap, clients.telemetry.MeterProvider(), clients.telemetry.TracerProvider())
if err != nil {
return services{}, err
return output, err
}

metadataService, err := metadata.New(ctx, config.metadata, adapters.storage, clients.telemetry.MeterProvider(), clients.telemetry.TracerProvider(), clients.amqp, clients.redis, adapters.exclusiveService)
output.metadata, err = metadata.New(ctx, config.metadata, adapters.storage, clients.telemetry.MeterProvider(), clients.telemetry.TracerProvider(), clients.amqp, clients.redis, adapters.exclusiveService)
if err != nil {
return services{}, err
return output, err
}

webhookService := webhook.New(config.webhook, adapters.storage, clients.telemetry.MeterProvider(), clients.redis, rendererService, thumbnailService, adapters.exclusiveService)
webhookService := webhook.New(config.webhook, adapters.storage, clients.telemetry.MeterProvider(), clients.redis, output.renderer, output.thumbnail, adapters.exclusiveService)

shareService, err := share.New(config.share, adapters.storage, clients.redis, adapters.exclusiveService)
output.share, err = share.New(config.share, adapters.storage, clients.redis, adapters.exclusiveService)
if err != nil {
return services{}, err
return output, err
}

amqpThumbnailService, err := amqphandler.New(config.amqpThumbnail, clients.amqp, clients.telemetry.MeterProvider(), clients.telemetry.TracerProvider(), thumbnailService.AMQPHandler)
output.amqpThumbnail, err = amqphandler.New(config.amqpThumbnail, clients.amqp, clients.telemetry.MeterProvider(), clients.telemetry.TracerProvider(), output.thumbnail.AMQPHandler)
if err != nil {
return services{}, err
return output, err
}

amqpExifService, err := amqphandler.New(config.amqpExif, clients.amqp, clients.telemetry.MeterProvider(), clients.telemetry.TracerProvider(), metadataService.AMQPHandler)
output.amqpExif, err = amqphandler.New(config.amqpExif, clients.amqp, clients.telemetry.MeterProvider(), clients.telemetry.TracerProvider(), output.metadata.AMQPHandler)
if err != nil {
return services{}, err
return output, err
}

searchService := search.New(adapters.filteredStorage, thumbnailService, metadataService, adapters.exclusiveService, clients.telemetry.TracerProvider())
searchService := search.New(adapters.filteredStorage, output.thumbnail, output.metadata, adapters.exclusiveService, clients.telemetry.TracerProvider())

crudService, err := crud.New(config.crud, adapters.storage, adapters.filteredStorage, rendererService, shareService, webhookService, thumbnailService, metadataService, searchService, eventBus.Push, clients.telemetry.TracerProvider())
crudService, err := crud.New(config.crud, adapters.storage, adapters.filteredStorage, output.renderer, output.share, webhookService, output.thumbnail, output.metadata, searchService, output.eventBus.Push, clients.telemetry.TracerProvider())
if err != nil {
return services{}, err
return output, err
}

sanitizerService := sanitizer.New(config.sanitizer, adapters.filteredStorage, adapters.exclusiveService, crudService, eventBus.Push)
output.sanitizer = sanitizer.New(config.sanitizer, adapters.filteredStorage, adapters.exclusiveService, crudService, output.eventBus.Push)

var middlewareService provider.Auth
if !config.disableAuth {
middlewareService = newLoginService(clients.telemetry.TracerProvider(), config.basic)
}

fibrService := fibr.New(&crudService, rendererService, shareService, webhookService, middlewareService)

return services{
eventBus: eventBus,
amqpThumbnail: amqpThumbnailService,
amqpExif: amqpExifService,
fibr: fibrService,
sanitizer: sanitizerService,
renderer: rendererService,
webhook: webhookService,
share: shareService,
thumbnail: thumbnailService,
metadata: metadataService,
server: server.New(config.server),
}, nil
output.fibr = fibr.New(&crudService, output.renderer, output.share, webhookService, middlewareService)

return output, nil
}

func (s services) Start(adapters adapters, doneCtx, endCtx context.Context) {
Expand Down
6 changes: 3 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ require (
github.com/ViBiOh/auth/v2 v2.20.1
github.com/ViBiOh/exas v0.8.1
github.com/ViBiOh/flags v1.5.0
github.com/ViBiOh/httputils/v4 v4.77.2
github.com/ViBiOh/httputils/v4 v4.77.3
github.com/ViBiOh/vith v0.6.0
github.com/rabbitmq/amqp091-go v1.10.0
github.com/redis/go-redis/v9 v9.5.3
Expand Down Expand Up @@ -56,8 +56,8 @@ require (
golang.org/x/net v0.26.0 // indirect
golang.org/x/sys v0.21.0 // indirect
golang.org/x/term v0.21.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240617180043-68d350f18fd4 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240617180043-68d350f18fd4 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240624140628-dc46fd24d27d // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240624140628-dc46fd24d27d // indirect
google.golang.org/grpc v1.64.0 // indirect
google.golang.org/protobuf v1.34.2 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
Expand Down
12 changes: 6 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ github.com/ViBiOh/exas v0.8.1 h1:bXrWK99ze7MLMfjD+pp/NHngOSkR1eqcCVWlNNxLT/M=
github.com/ViBiOh/exas v0.8.1/go.mod h1:aldybvPY4yJQlvUpq6GJluGxH+7prpaJjDQ03t3VvCw=
github.com/ViBiOh/flags v1.5.0 h1:nwuFS8tAwtV6rTPpv2pCB+r12WjZYLjluW7yT+SeVpQ=
github.com/ViBiOh/flags v1.5.0/go.mod h1:39UMuTnKsIp6walgD8dK99KRCb4DJt9vPtbWehHh1T0=
github.com/ViBiOh/httputils/v4 v4.77.2 h1:nRWRymsKrWhnQESVG0lDqQOlJ57atU19MKJlKkByiCs=
github.com/ViBiOh/httputils/v4 v4.77.2/go.mod h1:d+KMqLg2gLDaB4RXVDEuOZCY6EVOYEaLiMQgg7SXAWs=
github.com/ViBiOh/httputils/v4 v4.77.3 h1:XlBd+U0yF/geT68mEiBa6T8/1HG6oqXorTPkkcyaBq0=
github.com/ViBiOh/httputils/v4 v4.77.3/go.mod h1:ZtZ2sDUi2ZNDOgGyDIUQJHBGam+EgfdCzPXQYy/ipa8=
github.com/ViBiOh/vith v0.6.0 h1:bdLmwgqUEWi3ivShtAhtM9gOZlWQzvZi2Z5b0BRSB1U=
github.com/ViBiOh/vith v0.6.0/go.mod h1:eRqtDU2uB8g85vll4spbnCV93DHyHNAYwXCMIBH1GuQ=
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
Expand Down Expand Up @@ -118,10 +118,10 @@ golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA=
golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
google.golang.org/genproto/googleapis/api v0.0.0-20240617180043-68d350f18fd4 h1:MuYw1wJzT+ZkybKfaOXKp5hJiZDn2iHaXRw0mRYdHSc=
google.golang.org/genproto/googleapis/api v0.0.0-20240617180043-68d350f18fd4/go.mod h1:px9SlOOZBg1wM1zdnr8jEL4CNGUBZ+ZKYtNPApNQc4c=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240617180043-68d350f18fd4 h1:Di6ANFilr+S60a4S61ZM00vLdw0IrQOSMS2/6mrnOU0=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240617180043-68d350f18fd4/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY=
google.golang.org/genproto/googleapis/api v0.0.0-20240624140628-dc46fd24d27d h1:Aqf0fiIdUQEj0Gn9mKFFXoQfTTEaNopWpfVyYADxiSg=
google.golang.org/genproto/googleapis/api v0.0.0-20240624140628-dc46fd24d27d/go.mod h1:Od4k8V1LQSizPRUK4OzZ7TBE/20k+jPczUDAEyvn69Y=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240624140628-dc46fd24d27d h1:k3zyW3BYYR30e8v3x0bTDdE9vpYFjZHK+HcyqkrppWk=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240624140628-dc46fd24d27d/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY=
google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY=
google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg=
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
Expand Down

0 comments on commit 555a484

Please sign in to comment.