Initial commit: AetherForge Linux (forge-mesh) v0.1.0-dev
Some checks failed
Test / test (push) Has been cancelled
Some checks failed
Test / test (push) Has been cancelled
This commit is contained in:
59
internal/fleet/atlas.go
Normal file
59
internal/fleet/atlas.go
Normal file
@@ -0,0 +1,59 @@
|
||||
package fleet
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
func (s *Store) InsertSeerEvent(hostID, eventType, payload string) error {
|
||||
_, err := s.db.Exec(`
|
||||
INSERT INTO seer_events (id, host_id, event_type, payload_json)
|
||||
VALUES (?, ?, ?, ?)
|
||||
`, uuid.NewString(), nullString(hostID), eventType, payload)
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *Store) ListSeerEvents(limit int) ([]SeerEvent, error) {
|
||||
if limit <= 0 {
|
||||
limit = 50
|
||||
}
|
||||
rows, err := s.db.Query(`
|
||||
SELECT id, host_id, event_type, payload_json, created_at
|
||||
FROM seer_events ORDER BY created_at DESC LIMIT ?
|
||||
`, limit)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var events []SeerEvent
|
||||
for rows.Next() {
|
||||
var e SeerEvent
|
||||
var hostID sql.NullString
|
||||
if err := rows.Scan(&e.ID, &hostID, &e.EventType, &e.PayloadJSON, &e.CreatedAt); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if hostID.Valid {
|
||||
e.HostID = hostID.String
|
||||
}
|
||||
events = append(events, e)
|
||||
}
|
||||
return events, rows.Err()
|
||||
}
|
||||
|
||||
// SeerEvent is a court/LOTL timeline entry.
|
||||
type SeerEvent struct {
|
||||
ID string `json:"id"`
|
||||
HostID string `json:"host_id,omitempty"`
|
||||
EventType string `json:"event_type"`
|
||||
PayloadJSON string `json:"payload_json"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
}
|
||||
|
||||
func nullString(s string) sql.NullString {
|
||||
if s == "" {
|
||||
return sql.NullString{}
|
||||
}
|
||||
return sql.NullString{String: s, Valid: true}
|
||||
}
|
||||
Reference in New Issue
Block a user