@@ -2,23 +2,20 @@ package main
22
33import (
44 "context"
5+ "errors"
56 "flag"
6- "fmt"
7- "net"
87 "os"
98 "os/signal"
109 "strconv"
1110
1211 _ "github.com/DIMO-Network/fetch-api/docs"
1312 "github.com/DIMO-Network/fetch-api/internal/app"
1413 "github.com/DIMO-Network/fetch-api/internal/config"
15- "github.com/DIMO-Network/shared/pkg/settings"
16- "github.com/gofiber/fiber/v2"
17- "github.com/gofiber/fiber/v2/middleware/adaptor"
18- "github.com/prometheus/client_golang/prometheus/promhttp"
19- "github.com/rs/zerolog"
14+ "github.com/DIMO-Network/server-garage/pkg/env"
15+ "github.com/DIMO-Network/server-garage/pkg/logging"
16+ "github.com/DIMO-Network/server-garage/pkg/monserver"
17+ "github.com/DIMO-Network/server-garage/pkg/runner"
2018 "golang.org/x/sync/errgroup"
21- "google.golang.org/grpc"
2219)
2320
2421// @title DIMO Fetch API
@@ -27,81 +24,38 @@ import (
2724// @in header
2825// @name Authorization
2926func main () {
30- logger := zerolog .New (os .Stdout ).With ().Timestamp ().Str ("app" , "fetch-api" ).Logger ()
31- // create a flag for the settings file
32- settingsFile := flag .String ("settings" , "settings.yaml" , "settings file" )
27+ settingsFile := flag .String ("env" , ".env" , "env file" )
3328 flag .Parse ()
34- settings , err := settings.LoadConfig [config.Settings ](* settingsFile )
29+ ctx , cancel := signal .NotifyContext (context .Background (), os .Interrupt )
30+ defer cancel ()
31+ logger := logging .GetAndSetDefaultLogger ("fetch-api" )
32+ settings , err := env.LoadSettings [config.Settings ](* settingsFile )
3533 if err != nil {
3634 logger .Fatal ().Err (err ).Msg ("Couldn't load settings." )
3735 }
38- webServer , err := app .CreateWebServer (& logger , & settings )
36+ webServer , err := app .CreateWebServer (& settings )
3937 if err != nil {
4038 logger .Fatal ().Err (err ).Msg ("Failed to create web server." )
4139 }
4240 rpcServer , err := app .CreateGRPCServer (& logger , & settings )
4341 if err != nil {
4442 logger .Fatal ().Err (err ).Msg ("Failed to create RPC server." )
4543 }
46-
47- monApp := CreateMonitoringServer (strconv .Itoa (settings .MonPort ), & logger )
48-
49- ctx , cancel := signal .NotifyContext (context .Background (), os .Interrupt )
50- defer cancel ()
51-
5244 group , gCtx := errgroup .WithContext (ctx )
5345
54- logger .Info ().Str ("port" , strconv .Itoa (settings .GRPCPort )).Msgf ("Starting gRPC server" )
55- runGRPC (gCtx , rpcServer , ":" + strconv .Itoa (settings .GRPCPort ), group )
46+ monApp := monserver .NewMonitoringServer (& logger , settings .EnablePprof )
5647 logger .Info ().Str ("port" , strconv .Itoa (settings .MonPort )).Msgf ("Starting monitoring server" )
57- runFiber (gCtx , monApp , ":" + strconv .Itoa (settings .MonPort ), group )
48+ runner .RunHandler (gCtx , group , monApp , ":" + strconv .Itoa (settings .MonPort ))
49+
5850 logger .Info ().Str ("port" , strconv .Itoa (settings .Port )).Msgf ("Starting web server" )
59- runFiber (gCtx , webServer , ":" + strconv .Itoa (settings .Port ), group )
51+ runner .RunFiber (gCtx , group , webServer , ":" + strconv .Itoa (settings .Port ))
52+
53+ logger .Info ().Str ("port" , strconv .Itoa (settings .GRPCPort )).Msgf ("Starting gRPC server" )
54+ runner .RunGRPC (gCtx , group , rpcServer , ":" + strconv .Itoa (settings .GRPCPort ))
6055
6156 err = group .Wait ()
62- if err != nil {
63- logger .Fatal ().Err (err ).Msg ("Failed to run servers ." )
57+ if err != nil && ! errors . Is ( err , context . Canceled ) {
58+ logger .Fatal ().Err (err ).Msg ("Server shut down due to an error ." )
6459 }
65- }
66-
67- func runFiber (ctx context.Context , fiberApp * fiber.App , addr string , group * errgroup.Group ) {
68- group .Go (func () error {
69- if err := fiberApp .Listen (addr ); err != nil {
70- return fmt .Errorf ("failed to start server: %w" , err )
71- }
72- return nil
73- })
74- group .Go (func () error {
75- <- ctx .Done ()
76- if err := fiberApp .Shutdown (); err != nil {
77- return fmt .Errorf ("failed to shutdown server: %w" , err )
78- }
79- return nil
80- })
81- }
82-
83- func runGRPC (ctx context.Context , grpcServer * grpc.Server , addr string , group * errgroup.Group ) {
84- group .Go (func () error {
85- lis , err := net .Listen ("tcp" , addr )
86- if err != nil {
87- return fmt .Errorf ("failed to listen on gRPC port %s: %w" , addr , err )
88- }
89- if err := grpcServer .Serve (lis ); err != nil {
90- return fmt .Errorf ("gRPC server failed to serve: %w" , err )
91- }
92- return nil
93- })
94- group .Go (func () error {
95- <- ctx .Done ()
96- grpcServer .GracefulStop ()
97- return nil
98- })
99- }
100-
101- func CreateMonitoringServer (port string , logger * zerolog.Logger ) * fiber.App {
102- monApp := fiber .New (fiber.Config {DisableStartupMessage : true })
103- monApp .Get ("/" , func (c * fiber.Ctx ) error { return nil })
104- monApp .Get ("/metrics" , adaptor .HTTPHandler (promhttp .Handler ()))
105-
106- return monApp
60+ logger .Info ().Msg ("Server shut down." )
10761}
0 commit comments