mirror of
https://github.com/airlabspl/uptimemonitor.git
synced 2025-08-14 12:19:19 +02:00
52 lines
767 B
Go
52 lines
767 B
Go
package store
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
|
|
"github.com/pressly/goose/v3"
|
|
_ "modernc.org/sqlite"
|
|
)
|
|
|
|
type Store struct {
|
|
db *sql.DB
|
|
}
|
|
|
|
func New(dsn string) *Store {
|
|
db, err := sql.Open("sqlite", dsn)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if err := db.Ping(); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
_, err = db.Exec("PRAGMA journal_mode=WAL;")
|
|
if err != nil {
|
|
panic(fmt.Sprintf("Failed to enable WAL mode: %v", err))
|
|
}
|
|
|
|
db.Exec("PRAGMA foreign_keys = ON;")
|
|
|
|
db.SetMaxOpenConns(1)
|
|
db.SetMaxIdleConns(1)
|
|
db.SetConnMaxLifetime(0)
|
|
|
|
goose.SetBaseFS(FS)
|
|
if err := goose.SetDialect("sqlite"); err != nil {
|
|
panic(err)
|
|
}
|
|
if err := goose.Up(db, "migrations"); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return &Store{
|
|
db: db,
|
|
}
|
|
}
|
|
|
|
func (s *Store) DB() *sql.DB {
|
|
return s.db
|
|
}
|