2020-08-22 23:13:43 +03:00
|
|
|
package main
|
|
|
|
|
2020-08-23 01:06:29 +03:00
|
|
|
import (
|
2023-06-07 18:46:19 +03:00
|
|
|
"context"
|
2021-04-15 21:15:42 +03:00
|
|
|
"github.com/lus/pasty/internal/config"
|
2023-06-07 18:46:19 +03:00
|
|
|
"github.com/lus/pasty/internal/meta"
|
2021-04-15 20:26:17 +03:00
|
|
|
"github.com/lus/pasty/internal/storage"
|
2023-06-07 19:25:28 +03:00
|
|
|
"github.com/lus/pasty/internal/storage/postgres"
|
2023-06-07 18:46:19 +03:00
|
|
|
"github.com/rs/zerolog"
|
|
|
|
"github.com/rs/zerolog/log"
|
|
|
|
"os"
|
|
|
|
"os/signal"
|
2023-06-07 19:25:28 +03:00
|
|
|
"strings"
|
2020-08-23 01:06:29 +03:00
|
|
|
)
|
2020-08-23 00:24:38 +03:00
|
|
|
|
2020-08-22 23:13:43 +03:00
|
|
|
func main() {
|
2023-06-07 18:46:19 +03:00
|
|
|
// Set up the logger
|
|
|
|
zerolog.TimeFieldFormat = zerolog.TimeFormatUnixMs
|
|
|
|
if !meta.IsProdEnvironment() {
|
|
|
|
log.Logger = log.Output(zerolog.ConsoleWriter{
|
|
|
|
Out: os.Stderr,
|
|
|
|
})
|
|
|
|
log.Warn().Msg("This distribution was compiled for development mode and is thus not meant to be run in production!")
|
|
|
|
}
|
2020-08-23 01:06:29 +03:00
|
|
|
|
2023-06-07 18:46:19 +03:00
|
|
|
// Load the configuration
|
|
|
|
cfg, err := config.Load()
|
2020-08-23 01:06:29 +03:00
|
|
|
if err != nil {
|
2023-06-07 18:46:19 +03:00
|
|
|
log.Fatal().Err(err).Msg("Could not load the configuration.")
|
2020-08-23 01:06:29 +03:00
|
|
|
}
|
2023-06-07 18:46:19 +03:00
|
|
|
|
|
|
|
// Adjust the log level
|
|
|
|
if !meta.IsProdEnvironment() {
|
|
|
|
zerolog.SetGlobalLevel(zerolog.DebugLevel)
|
|
|
|
} else {
|
|
|
|
level, err := zerolog.ParseLevel(cfg.LogLevel)
|
2020-08-24 19:08:27 +03:00
|
|
|
if err != nil {
|
2023-06-07 18:46:19 +03:00
|
|
|
log.Warn().Msg("An invalid log level was configured. Falling back to 'info'.")
|
|
|
|
level = zerolog.InfoLevel
|
2020-08-24 19:08:27 +03:00
|
|
|
}
|
2023-06-07 18:46:19 +03:00
|
|
|
zerolog.SetGlobalLevel(level)
|
|
|
|
}
|
2020-09-19 02:56:50 +03:00
|
|
|
|
2023-06-07 19:25:28 +03:00
|
|
|
// Determine the correct storage driver to use
|
|
|
|
var driver storage.Driver
|
|
|
|
switch strings.TrimSpace(strings.ToLower(cfg.StorageDriver)) {
|
|
|
|
case "postgres":
|
|
|
|
driver = new(postgres.Driver)
|
|
|
|
break
|
|
|
|
default:
|
2023-06-07 18:46:19 +03:00
|
|
|
log.Fatal().Str("driver_name", cfg.StorageDriver).Msg("An invalid storage driver name was given.")
|
|
|
|
return
|
|
|
|
}
|
2023-06-07 19:25:28 +03:00
|
|
|
|
|
|
|
// Initialize the configured storage driver
|
2023-06-07 18:46:19 +03:00
|
|
|
log.Info().Str("driver_name", cfg.StorageDriver).Msg("Initializing the storage driver...")
|
|
|
|
if err := driver.Initialize(context.Background(), cfg); err != nil {
|
|
|
|
log.Fatal().Err(err).Str("driver_name", cfg.StorageDriver).Msg("The storage driver could not be initialized.")
|
|
|
|
return
|
2020-09-19 02:56:50 +03:00
|
|
|
}
|
2023-06-07 18:46:19 +03:00
|
|
|
defer func() {
|
|
|
|
log.Info().Msg("Shutting down the storage driver...")
|
|
|
|
if err := driver.Close(); err != nil {
|
|
|
|
log.Err(err).Str("driver_name", cfg.StorageDriver).Msg("Could not shut down the storage driver.")
|
|
|
|
}
|
|
|
|
}()
|
2020-09-19 02:56:50 +03:00
|
|
|
|
2023-06-07 18:46:19 +03:00
|
|
|
// Wait for an interrupt signal
|
|
|
|
log.Info().Msg("The application has been started. Use Ctrl+C to shut it down.")
|
|
|
|
shutdownChan := make(chan os.Signal, 1)
|
|
|
|
signal.Notify(shutdownChan, os.Interrupt)
|
|
|
|
<-shutdownChan
|
2020-08-22 23:13:43 +03:00
|
|
|
}
|