mirror of
https://github.com/mainflux/mainflux.git
synced 2025-04-26 13:48:53 +08:00

Rebase with master and squash commits add: rootCA and clientCA in grpc server add: rootCA and client certificate in grpc client add: docker-compose for grpc-mtls and make target for mtls cert generation fix: typo in makefile fix: loadCertFile function in internal/clients/grpc/connect.go fix: env.parser test remove: commented lines add: make commands update: make commands and grpc clients fix: typo in makefile fix: loadCertFile function in internal/clients/grpc/connect.go remove: commented lines update: make commands and grpc clients update: make commands and docker-compose add: end of line fix: typos in makefile add: end of line fix: typos in makefile revert: grafana port in .env change: loadCertFile function change: certficate logic change: env name and update in compose file fix: makefile remove: tls env var change: ioutil to os for ReadFile change loadfile remove: test which is no needed fix: docker project name single docker-compose file single docker-compose file single docker-compose file fix space and new lines fix makefile add: GRPC_TLS varaible and imporved logging in gRPC Client fix mtls and tls env vars fix mtls and tls env vars grpc_mtls fix docker-compose fix makefile fix const name to go idomatic --------- Signed-off-by: Arvindh <arvindh91@gmail.com>
71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
// Copyright (c) Mainflux
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
package server
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"github.com/mainflux/mainflux/logger"
|
|
)
|
|
|
|
type Server interface {
|
|
Start() error
|
|
Stop() error
|
|
}
|
|
|
|
type Config struct {
|
|
Host string `env:"HOST" envDefault:""`
|
|
Port string `env:"PORT" envDefault:""`
|
|
CertFile string `env:"SERVER_CERT" envDefault:""`
|
|
KeyFile string `env:"SERVER_KEY" envDefault:""`
|
|
ServerCAFile string `env:"SERVER_CA_CERTS" envDefault:""`
|
|
ClientCAFile string `env:"CLIENT_CA_CERTS" envDefault:""`
|
|
}
|
|
|
|
type BaseServer struct {
|
|
Ctx context.Context
|
|
Cancel context.CancelFunc
|
|
Name string
|
|
Address string
|
|
Config Config
|
|
Logger logger.Logger
|
|
Protocol string
|
|
}
|
|
|
|
func stopAllServer(servers ...Server) error {
|
|
var err error
|
|
for _, server := range servers {
|
|
err1 := server.Stop()
|
|
if err1 != nil {
|
|
if err == nil {
|
|
err = fmt.Errorf("%w", err1)
|
|
} else {
|
|
err = fmt.Errorf("%v ; %w", err, err1)
|
|
}
|
|
}
|
|
}
|
|
return err
|
|
}
|
|
|
|
func StopSignalHandler(ctx context.Context, cancel context.CancelFunc, logger logger.Logger, svcName string, servers ...Server) error {
|
|
var err error
|
|
c := make(chan os.Signal, 2)
|
|
signal.Notify(c, syscall.SIGINT, syscall.SIGABRT)
|
|
select {
|
|
case sig := <-c:
|
|
defer cancel()
|
|
err = stopAllServer(servers...)
|
|
if err != nil {
|
|
logger.Error(fmt.Sprintf("%s service error during shutdown: %v", svcName, err))
|
|
}
|
|
logger.Info(fmt.Sprintf("%s service shutdown by signal: %s", svcName, sig))
|
|
return err
|
|
case <-ctx.Done():
|
|
return nil
|
|
}
|
|
}
|