소스 검색

feat: alerts define operator and resolved timestamp

master
Blaz Smehov 21 시간 전
부모
커밋
2dec06e7b7
5개의 변경된 파일28개의 추가작업 그리고 7개의 파일을 삭제
  1. +9
    -1
      internal/pkg/apiclient/data.go
  2. +8
    -4
      internal/pkg/controller/alerts_controller.go
  3. +2
    -0
      internal/pkg/model/alerts.go
  4. +1
    -0
      internal/pkg/model/gateway.go
  5. +8
    -2
      internal/pkg/service/alert_service.go

+ 9
- 1
internal/pkg/apiclient/data.go 파일 보기

@@ -1,8 +1,10 @@
package apiclient package apiclient


import ( import (
"bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io"
"net/http" "net/http"


"github.com/AFASystems/presence/internal/pkg/config" "github.com/AFASystems/presence/internal/pkg/config"
@@ -30,8 +32,14 @@ func GetGateways(token string, client *http.Client, cfg *config.Config) ([]model
return []model.Gateway{}, err return []model.Gateway{}, err
} }


body, err := io.ReadAll(res.Body)
if err != nil {
return []model.Gateway{}, err
}
fmt.Printf("Gateways raw response: %s\n", body)

var i []model.Gateway var i []model.Gateway
err = json.NewDecoder(res.Body).Decode(&i)
err = json.NewDecoder(bytes.NewReader(body)).Decode(&i)
if err != nil { if err != nil {
return []model.Gateway{}, err return []model.Gateway{}, err
} }


+ 8
- 4
internal/pkg/controller/alerts_controller.go 파일 보기

@@ -81,9 +81,7 @@ func AlertDeleteController(db *gorm.DB, ctx context.Context) http.HandlerFunc {
func AlertUpdateStatusController(db *gorm.DB, ctx context.Context) http.HandlerFunc { func AlertUpdateStatusController(db *gorm.DB, ctx context.Context) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) {
id := mux.Vars(r)["id"] id := mux.Vars(r)["id"]
var body struct {
Status string `json:"status"`
}
var body service.AlertPatchBody
if err := json.NewDecoder(r.Body).Decode(&body); err != nil { if err := json.NewDecoder(r.Body).Decode(&body); err != nil {
response.BadRequest(w, "invalid request body") response.BadRequest(w, "invalid request body")
return return
@@ -92,7 +90,13 @@ func AlertUpdateStatusController(db *gorm.DB, ctx context.Context) http.HandlerF
response.BadRequest(w, err.Error()) response.BadRequest(w, err.Error())
return return
} }
if err := service.UpdateAlertStatus(id, body.Status, db, ctx); err != nil {

if err := validation.Var(body.Operator, "required"); err != nil {
response.BadRequest(w, err.Error())
return
}

if err := service.UpdateAlertStatus(id, body, db, ctx); err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) { if errors.Is(err, gorm.ErrRecordNotFound) {
response.NotFound(w, "alert not found") response.NotFound(w, "alert not found")
return return


+ 2
- 0
internal/pkg/model/alerts.go 파일 보기

@@ -9,4 +9,6 @@ type Alert struct {
Status string `json:"status"` Status string `json:"status"`
Timestamp time.Time `json:"timestamp"` Timestamp time.Time `json:"timestamp"`
ResolutionTimestamp time.Time `json:"resolution_timestamp"` ResolutionTimestamp time.Time `json:"resolution_timestamp"`
Operator string `json:"operator"`
Zone string `json:"zone"`
} }

+ 1
- 0
internal/pkg/model/gateway.go 파일 보기

@@ -13,4 +13,5 @@ type Gateway struct {
Notes string `json:"notes"` Notes string `json:"notes"`
Floor string `json:"floor"` Floor string `json:"floor"`
Building string `json:"building"` Building string `json:"building"`
Zone string `json:"zone"`
} }

+ 8
- 2
internal/pkg/service/alert_service.go 파일 보기

@@ -2,6 +2,7 @@ package service


import ( import (
"context" "context"
"time"


"github.com/AFASystems/presence/internal/pkg/model" "github.com/AFASystems/presence/internal/pkg/model"
"gorm.io/gorm" "gorm.io/gorm"
@@ -38,9 +39,14 @@ func GetAlertById(id string, db *gorm.DB, ctx context.Context) (model.Alert, err
return alert, nil return alert, nil
} }


type AlertPatchBody struct {
Status string `json:"status"`
Operator string `json:"operator"`
}

// UpdateAlertStatus updates the status of an alert by id. Returns gorm.ErrRecordNotFound if the alert does not exist. // UpdateAlertStatus updates the status of an alert by id. Returns gorm.ErrRecordNotFound if the alert does not exist.
func UpdateAlertStatus(id string, status string, db *gorm.DB, ctx context.Context) error {
result := db.WithContext(ctx).Model(&model.Alert{}).Where("id = ?", id).Update("status", status)
func UpdateAlertStatus(id string, body AlertPatchBody, db *gorm.DB, ctx context.Context) error {
result := db.WithContext(ctx).Model(&model.Alert{}).Where("id = ?", id).Updates(model.Alert{Status: body.Status, Operator: body.Operator, ResolutionTimestamp: time.Now()})
if result.Error != nil { if result.Error != nil {
return result.Error return result.Error
} }


불러오는 중...
취소
저장