feat(logging): added in db and logging with websocket

This commit is contained in:
2025-07-22 19:59:06 -05:00
parent 623e19f028
commit 52ef39fd5c
9 changed files with 555 additions and 96 deletions

32
backend/utils/db/db.go Normal file
View 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
View 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
}