mirror of
https://github.com/EZ-Api/ez-api.git
synced 2026-01-13 17:47:51 +00:00
feat(api): add log webhook notification service
Implement webhook notifications for log error threshold alerts with configurable thresholds, time windows, and cooldown periods. - Add LogWebhookService with Redis-backed configuration storage - Add admin endpoints for webhook config management (GET/PUT) - Trigger webhook notifications when error count exceeds threshold - Support status code threshold and error message detection - Include sample log record data in webhook payload
This commit is contained in:
@@ -17,14 +17,21 @@ import (
|
||||
)
|
||||
|
||||
type Handler struct {
|
||||
db *gorm.DB
|
||||
sync *service.SyncService
|
||||
logger *service.LogWriter
|
||||
rdb *redis.Client
|
||||
db *gorm.DB
|
||||
sync *service.SyncService
|
||||
logger *service.LogWriter
|
||||
rdb *redis.Client
|
||||
logWebhook *service.LogWebhookService
|
||||
}
|
||||
|
||||
func NewHandler(db *gorm.DB, sync *service.SyncService, logger *service.LogWriter, rdb *redis.Client) *Handler {
|
||||
return &Handler{db: db, sync: sync, logger: logger, rdb: rdb}
|
||||
return &Handler{
|
||||
db: db,
|
||||
sync: sync,
|
||||
logger: logger,
|
||||
rdb: rdb,
|
||||
logWebhook: service.NewLogWebhookService(rdb),
|
||||
}
|
||||
}
|
||||
|
||||
// CreateKey is now handled by MasterHandler
|
||||
@@ -471,7 +478,13 @@ func (h *Handler) IngestLog(c *gin.Context) {
|
||||
}
|
||||
|
||||
// By default, only metadata is expected; payload fields may be empty.
|
||||
h.logger.Write(rec)
|
||||
if h.logger != nil {
|
||||
h.logger.Write(rec)
|
||||
}
|
||||
if h.logWebhook != nil {
|
||||
recCopy := rec
|
||||
go h.logWebhook.NotifyIfNeeded(context.Background(), recCopy)
|
||||
}
|
||||
c.JSON(http.StatusAccepted, gin.H{"status": "queued"})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user