mirror of
https://github.com/ultravioletrs/cocos.git
synced 2026-08-07 07:14:50 +00:00
ec426e58a2
* restructure grpc configs Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> enhance clients Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> restructure config Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> refactor Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> rebase Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> rebase Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> use separate configuration Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> fix tests Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> fix config Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> refactor Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> Lint Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> fix tests Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> add tests Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> add test case Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> add test case Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> refactor Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> further refactor' Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> add tests Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> rebase Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> * remove redundant code Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> * fix test Signed-off-by: WashingtonKK <washingtonkigan@gmail.com> --------- Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>
90 lines
2.0 KiB
Go
90 lines
2.0 KiB
Go
// Copyright (c) Ultraviolet
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
package server
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log/slog"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
)
|
|
|
|
type Server interface {
|
|
Start() error
|
|
Stop() error
|
|
}
|
|
|
|
type ServerConfiguration interface {
|
|
GetBaseConfig() ServerConfig
|
|
}
|
|
|
|
type BaseConfig struct {
|
|
Host string `env:"HOST" envDefault:"localhost"`
|
|
Port string `env:"PORT" envDefault:"7001"`
|
|
ServerCAFile string `env:"SERVER_CA_CERTS" envDefault:""`
|
|
CertFile string `env:"SERVER_CERT" envDefault:""`
|
|
KeyFile string `env:"SERVER_KEY" envDefault:""`
|
|
ClientCAFile string `env:"CLIENT_CA_CERTS" envDefault:""`
|
|
}
|
|
|
|
type ServerConfig struct {
|
|
BaseConfig
|
|
}
|
|
type AgentConfig struct {
|
|
ServerConfig
|
|
AttestedTLS bool `env:"ATTESTED_TLS" envDefault:"false"`
|
|
}
|
|
|
|
type BaseServer struct {
|
|
Ctx context.Context
|
|
Cancel context.CancelFunc
|
|
Name string
|
|
Address string
|
|
Config ServerConfiguration
|
|
Logger *slog.Logger
|
|
Protocol string
|
|
}
|
|
|
|
func (s ServerConfig) GetBaseConfig() ServerConfig {
|
|
return s
|
|
}
|
|
|
|
func (a AgentConfig) GetBaseConfig() ServerConfig {
|
|
return a.ServerConfig
|
|
}
|
|
|
|
func stopAllServer(servers ...Server) error {
|
|
var errs []error
|
|
for _, server := range servers {
|
|
if err := server.Stop(); err != nil {
|
|
errs = append(errs, err)
|
|
}
|
|
}
|
|
|
|
if len(errs) > 0 {
|
|
return fmt.Errorf("encountered errors while stopping servers: %v", errs)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func StopHandler(ctx context.Context, cancel context.CancelFunc, logger *slog.Logger, svcName string, servers ...Server) error {
|
|
var err error
|
|
c := make(chan os.Signal, 1)
|
|
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
|
|
}
|
|
}
|