init: first steps

This commit is contained in:
2025-07-20 23:50:47 +03:00
commit 5f26ad6941
25 changed files with 1134 additions and 0 deletions

53
modules/db/db.go Normal file
View File

@@ -0,0 +1,53 @@
package db
import (
"fmt"
"os"
"time"
appLog "git.ostiwe.com/ostiwe-com/status/modules/log"
"github.com/sirupsen/logrus"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
var Global *gorm.DB
func init() {
appLog.Global.Put(appLog.DATABASE, logrus.New())
}
func Connect() (*gorm.DB, error) {
dsn := fmt.Sprintf(
"host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=%s",
os.Getenv("DATABASE_HOST"),
os.Getenv("DATABASE_USER"),
os.Getenv("DATABASE_PASS"),
os.Getenv("DATABASE_DB"),
os.Getenv("DATABASE_PORT"),
os.Getenv("DATABASE_TZ"),
)
newLogger := logger.New(
appLog.Global.Get(appLog.DATABASE),
logger.Config{
SlowThreshold: time.Second, // Slow SQL threshold
LogLevel: logger.Info, // Log level
IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger
ParameterizedQueries: false, // Don't include params in the SQL log
Colorful: false, // Disable color
},
)
return gorm.Open(
postgres.Open(dsn),
&gorm.Config{
Logger: newLogger,
},
)
}
func SetGlobal(bd *gorm.DB) {
Global = bd
}

28
modules/log/formatter.go Normal file
View File

@@ -0,0 +1,28 @@
package log
import (
"fmt"
"github.com/sirupsen/logrus"
)
type TextFormatter struct {
logrusFormatter logrus.TextFormatter
prefix []byte
}
func NewTextFormatter(prefix string) *TextFormatter {
return &TextFormatter{
logrusFormatter: logrus.TextFormatter{},
prefix: []byte(fmt.Sprintf("[%s] ", prefix)),
}
}
func (t *TextFormatter) Format(item *logrus.Entry) ([]byte, error) {
original, err := t.logrusFormatter.Format(item)
if err != nil {
return nil, err
}
return append(t.prefix, original...), nil
}

47
modules/log/manager.go Normal file
View File

@@ -0,0 +1,47 @@
package log
import (
"sync"
"github.com/sirupsen/logrus"
)
const (
SERVER = "server"
SYSTEM = "system"
DATABASE = "database"
)
var Global *LoggerManager
func SetGlobalManager(manager *LoggerManager) {
Global = manager
}
type LoggerManager struct {
loggers map[string]*logrus.Logger
mu sync.Mutex
}
func (m *LoggerManager) Get(name string) *logrus.Logger {
if logger, ok := m.loggers[name]; ok {
return logger
}
return nil
}
func (m *LoggerManager) Put(name string, logger *logrus.Logger) {
m.mu.Lock()
defer m.mu.Unlock()
logger.Formatter = NewTextFormatter(name)
m.loggers[name] = logger
}
func NewManager() *LoggerManager {
return &LoggerManager{
loggers: make(map[string]*logrus.Logger),
}
}