refactoring

This commit is contained in:
Bel LaPointe
2025-11-19 12:14:20 -07:00
parent 9fabbcb761
commit 5b11ae1648
4 changed files with 331 additions and 147 deletions

17
src/with/ctx.go Normal file
View File

@@ -0,0 +1,17 @@
package with
import (
"context"
"os/signal"
"syscall"
)
func Context(foo func(context.Context) error) error {
ctx, can := signal.NotifyContext(context.Background(), syscall.SIGINT)
defer can()
if err := foo(ctx); err != nil && ctx.Err() == nil {
return err
}
return nil
}

51
src/with/pg.go Normal file
View File

@@ -0,0 +1,51 @@
package with
import (
"context"
"database/sql"
"log"
"time"
_ "github.com/lib/pq"
)
func PSQL(ctx context.Context, conn string, foo func(db *sql.DB) error) error {
log.Println("opening...")
pg, err := sql.Open("postgres", conn)
if err != nil {
return err
}
defer func() {
log.Println("closed:", pg.Close())
}()
func() {
pinged := make(chan bool)
defer close(pinged)
for {
log.Println("pinging...")
go func() {
err := pg.PingContext(ctx)
if err != nil {
log.Println("!", err)
}
select {
case pinged <- err == nil:
case <-ctx.Done():
case <-time.After(time.Second * 5):
}
}()
select {
case <-ctx.Done():
return
case ok := <-pinged:
if ok {
return
}
case <-time.After(time.Second * 5):
}
}
}()
return foo(pg)
}