stampede_2025/main.go

81 lines
1.4 KiB
Go

package main
import (
"errors"
"os/signal"
"syscall"
"context"
"os"
"log/slog"
"database/sql"
_ "github.com/mattn/go-sqlite3"
)
const SQLITE_TABLES string = ``
func server(db_path string) error {
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
ctx := context.Background()
seed_db := false
_, err := os.Stat(db_path)
if errors.Is(err, os.ErrNotExist) {
seed_db = true
} else if err != nil {
slog.Error("Failed to stat db file", "path", db_path, "error", err)
return err
}
db, err := sql.Open("sqlite3", db_path)
if err != nil {
slog.Error("Failed to open db file", "path", db_path, "error", err)
return err
}
if seed_db {
slog.Info("Seeding database", "path", db_path)
tx, err := db.BeginTx(ctx, nil)
if err != nil {
slog.Error("Failed to start tx for db init", "error", err)
return err
}
_, err = tx.Exec(SQLITE_TABLES)
if err != nil {
slog.Error("Failed to exec tables for db init", "error", err)
return err
}
err = tx.Commit()
if err != nil {
slog.Error("Failed to commit tx for db init", "error", err)
return err
}
}
slog.Info("Starting server", "path", db_path)
run := true
for run {
select {
case <-sigs:
run = false
}
}
err = db.Close()
if err != nil {
slog.Error("Failed to close db", "path", db_path, "error", err)
}
return nil
}
func main() {
err := server(os.Args[1])
if err != nil {
panic(err)
}
}