fixed some config and log problems

This commit is contained in:
overflowerror 2021-08-14 14:48:49 +02:00
parent 9ce408f9c0
commit 21281b764d
5 changed files with 33 additions and 17 deletions

View file

@ -2,8 +2,8 @@ package main
import (
"flag"
"fmt"
"github.com/google/logger"
"io/ioutil"
"log"
"os"
"threadule/backend/internal/app"
@ -21,14 +21,13 @@ func main() {
cfg, err := config.Read(*configFile)
if err != nil {
fmt.Println("reading config file failed")
fmt.Println(err)
return
log.Println("reading config file failed")
log.Fatal(err)
}
ctx := &app.Context{
Config: cfg,
Log: logger.Init("default", false, true, os.Stderr),
Log: logger.Init("message logger", false, false, ioutil.Discard),
AccessLog: log.New(os.Stdout, "access", log.Ldate|log.Lmicroseconds|log.Lmsgprefix),
}
@ -40,8 +39,7 @@ func main() {
ctx.Data, err = data.Setup(ctx)
if err != nil {
ctx.Log.Error("couldn't setup persistence layer")
ctx.Log.Fatal(err)
ctx.Log.Fatal("couldn't setup persistence layer")
}
handler := router.Setup(ctx)

View file

@ -1,12 +1,17 @@
package config
import (
"errors"
"fmt"
"github.com/pelletier/go-toml/v2"
"io/fs"
"os"
)
type web struct {
Port uint
}
type database struct {
DSN string
}
@ -17,14 +22,14 @@ type twitter struct {
}
type Config struct {
Port uint
Web web
Database database
Twitter twitter
}
func writeDefaultConfig(path string) error {
content, err := toml.Marshal(&Config{
Port: 8080,
Web: web{Port: 8080},
Database: database{DSN: ""},
Twitter: twitter{
ConsumerKey: "",
@ -35,7 +40,12 @@ func writeDefaultConfig(path string) error {
return fmt.Errorf("couldn't generate default config: %w", err)
}
return os.WriteFile(path, content, fs.FileMode(0640))
err = os.WriteFile(path, content, fs.FileMode(0640))
if err != nil {
return err
}
return errors.New(fmt.Sprintf("config file not be read; generated empty file in: %s", path))
}
func Read(path string) (*Config, error) {

View file

@ -16,10 +16,11 @@ var _ app.Data = &Data{}
func Setup(ctx *app.Context) (app.Data, error) {
db, err := connect(ctx.Config.Database.DSN)
if err != nil {
return nil, fmt.Errorf("failed to connect to database: %w", err)
ctx.Log.Errorf("failed to connect to database: %v", err)
return nil, err
}
err = migrate(db)
err = migrate(ctx, db)
if err != nil {
return nil, fmt.Errorf("failed to migrate models: %w", err)
}

View file

@ -5,6 +5,7 @@ import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
"strings"
"threadule/backend/internal/app"
"threadule/backend/internal/data/models"
)
@ -12,7 +13,7 @@ func connect(dsn string) (*gorm.DB, error) {
return gorm.Open(mysql.Open(dsn), &gorm.Config{})
}
func migrate(db *gorm.DB) error {
func migrate(ctx *app.Context, db *gorm.DB) error {
var errs []error
errs = append(errs, db.AutoMigrate(&models.Group{}))
@ -21,16 +22,22 @@ func migrate(db *gorm.DB) error {
errs = append(errs, db.AutoMigrate(&models.Tweet{}))
errs = append(errs, db.AutoMigrate(&models.Thread{}))
var last string
errorBuilder := strings.Builder{}
for _, err := range errs {
if err != nil {
errorBuilder.WriteString(err.Error())
errorBuilder.WriteString("\n")
if last != err.Error() {
errorBuilder.WriteString(err.Error())
errorBuilder.WriteString("\n")
}
last = err.Error()
}
}
errorString := strings.TrimSpace(errorBuilder.String())
ctx.Log.Errorf("migration error: %v", errorString)
if errorBuilder.Len() == 0 {
return nil
} else {
return errors.New(strings.TrimSpace(errorBuilder.String()))
return errors.New(errorString)
}
}

View file

@ -7,5 +7,5 @@ import (
)
func StartServer(ctx *app.Context, handler http.Handler) error {
return http.ListenAndServe(fmt.Sprintf("0.0.0.0:%d", ctx.Config.Port), handler)
return http.ListenAndServe(fmt.Sprintf("0.0.0.0:%d", ctx.Config.Web.Port), handler)
}