mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-19 16:56:39 +00:00
67 lines
1.2 KiB
Go
67 lines
1.2 KiB
Go
package event
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
_ "github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
const (
|
|
SQLiteEventSinkDB = "events.db"
|
|
createTableQuery = "CREATE TABLE IF NOT EXISTS events " +
|
|
"(id UNSIGNED BIG INT PRIMARY KEY AUTOINCREMENT, message TEXT, timestamp DATETIME);"
|
|
)
|
|
|
|
type SQLiteSink struct {
|
|
db *sql.DB
|
|
}
|
|
|
|
// NewSQLiteSink creates a new SQLiteSink with an event table if not exists.
|
|
func NewSQLiteSink(dbPath string) (*SQLiteSink, error) {
|
|
db, err := sql.Open("sqlite3", dbPath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
_, err = db.Exec(createTableQuery)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &SQLiteSink{db: db}, nil
|
|
}
|
|
|
|
// Add an event to the SQLite table
|
|
func (sink *SQLiteSink) Add(event *Event) error {
|
|
|
|
_, err := sink.db.Exec(createTableQuery)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
stmt, err := sink.db.Prepare("INSERT INTO events(message, timestamp) values(?, ?)")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
result, err := stmt.Exec(event.Message, event.Timestamp)
|
|
if err != nil {
|
|
if err == sql.ErrNoRows {
|
|
// Handle the case of no rows returned.
|
|
}
|
|
return album, err
|
|
}
|
|
|
|
fmt.Println(result)
|
|
|
|
return nil
|
|
}
|
|
|
|
// Close the SQLiteSink
|
|
func (sink *SQLiteSink) Close() error {
|
|
if sink.db != nil {
|
|
return sink.db.Close()
|
|
}
|
|
return nil
|
|
}
|