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  }