feat(logging): added in db and logging with websocket
This commit is contained in:
32
backend/utils/db/db.go
Normal file
32
backend/utils/db/db.go
Normal file
@@ -0,0 +1,32 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var DB *gorm.DB
|
||||
|
||||
func InitDB() error {
|
||||
dsn := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s",
|
||||
os.Getenv("DB_HOST"),
|
||||
os.Getenv("DB_PORT"),
|
||||
os.Getenv("DB_USER"),
|
||||
os.Getenv("DB_PASSWORD"),
|
||||
os.Getenv("DB_NAME"))
|
||||
|
||||
var err error
|
||||
|
||||
DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to connect to database: %v", err)
|
||||
}
|
||||
|
||||
// Auto-migrate all models
|
||||
DB.AutoMigrate(&Log{}) // Add other models here
|
||||
|
||||
return nil
|
||||
}
|
||||
41
backend/utils/db/logs.go
Normal file
41
backend/utils/db/logs.go
Normal file
@@ -0,0 +1,41 @@
|
||||
package db
|
||||
|
||||
import "time"
|
||||
|
||||
type Log struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
Level string `gorm:"size:10;not null"` // "info", "error", etc.
|
||||
Message string `gorm:"not null"`
|
||||
Service string `gorm:"size:50"` // Optional: service name
|
||||
Metadata JSONB `gorm:"type:jsonb"` // Structured fields (e.g., {"user_id": 123})
|
||||
CreatedAt time.Time `gorm:"index"` // Auto-set by GORM
|
||||
Checked bool `gorm:"type:boolean;default:false"`
|
||||
}
|
||||
|
||||
// JSONB is a helper type for PostgreSQL JSONB fields.
|
||||
type JSONB map[string]interface{}
|
||||
|
||||
// --- CRUD Operations ---
|
||||
|
||||
// CreateLog inserts a new log entry.
|
||||
func CreateLog(level, message, service string, metadata JSONB) error {
|
||||
log := Log{
|
||||
Level: level,
|
||||
Message: message,
|
||||
Service: service,
|
||||
Metadata: metadata,
|
||||
}
|
||||
return DB.Create(&log).Error
|
||||
}
|
||||
|
||||
// GetLogsByLevel fetches logs filtered by severity.
|
||||
func GetLogsByLevel(level string, limit int) ([]Log, error) {
|
||||
var logs []Log
|
||||
err := DB.Where("level = ?", level).Limit(limit).Find(&logs).Error
|
||||
return logs, err
|
||||
}
|
||||
|
||||
// DeleteOldLogs removes logs older than `days`.
|
||||
func DeleteOldLogs(days int) error {
|
||||
return DB.Where("created_at < ?", time.Now().AddDate(0, 0, -days)).Delete(&Log{}).Error
|
||||
}
|
||||
Reference in New Issue
Block a user