github.com/0xPolygon/supernets2-node@v0.0.0-20230711153321-2fe574524eaa/event/pgeventstorage/pgeventstorage.go (about) 1 package pgeventstorage 2 3 import ( 4 "context" 5 6 "github.com/0xPolygon/supernets2-node/db" 7 "github.com/0xPolygon/supernets2-node/event" 8 "github.com/0xPolygon/supernets2-node/event/nileventstorage" 9 "github.com/jackc/pgx/v4/pgxpool" 10 ) 11 12 // PostgresEventStorage is an implementation of the event storage interface 13 // that uses a postgres database to store the data 14 type PostgresEventStorage struct { 15 db *pgxpool.Pool 16 } 17 18 // NewPostgresEventStorage creates and initializes an instance of PostgresEventStorage 19 func NewPostgresEventStorage(cfg db.Config) (*PostgresEventStorage, error) { 20 poolDB, err := db.NewSQLDB(cfg) 21 if err != nil { 22 return nil, err 23 } 24 25 return &PostgresEventStorage{ 26 db: poolDB, 27 }, nil 28 } 29 30 // Close closes the database connection 31 func (p *PostgresEventStorage) Close() error { 32 p.db.Close() 33 return nil 34 } 35 36 // LogEvent logs an event to the database 37 func (p *PostgresEventStorage) LogEvent(ctx context.Context, ev *event.Event) error { 38 const insertEventSQL = "INSERT INTO event (received_at, ip_address, source, component, level, event_id, description, data, json) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)" 39 40 var ipAddressPtr *string 41 if ev.IPAddress != "" { 42 ipAddressPtr = &ev.IPAddress 43 } 44 45 nileventstorage.LogEvent(ev) 46 _, err := p.db.Exec(ctx, insertEventSQL, ev.ReceivedAt, ipAddressPtr, ev.Source, ev.Component, ev.Level, ev.EventID, ev.Description, ev.Data, ev.Json) 47 return err 48 }