Add scan queue execution and listing endpoint.
Run scans in background with progress/status updates and store scan metrics in memory or PostgreSQL. Made-with: Cursor
This commit is contained in:
+44
-2
@@ -1,18 +1,27 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"nettopo-go/internal/api"
|
||||
"nettopo-go/internal/config"
|
||||
"nettopo-go/internal/scans"
|
||||
"nettopo-go/internal/store"
|
||||
|
||||
_ "github.com/jackc/pgx/v5/stdlib"
|
||||
)
|
||||
|
||||
func main() {
|
||||
cfg := config.FromEnv()
|
||||
store := scans.NewMemoryStore()
|
||||
handler := api.NewHandler(store)
|
||||
scanStore, dbClose := makeStore(cfg)
|
||||
if dbClose != nil {
|
||||
defer dbClose()
|
||||
}
|
||||
|
||||
runner := scans.NewRunner(scanStore)
|
||||
handler := api.NewHandler(scanStore, runner)
|
||||
|
||||
server := &http.Server{
|
||||
Addr: cfg.HTTPAddr,
|
||||
@@ -24,3 +33,36 @@ func main() {
|
||||
log.Fatalf("server failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func makeStore(cfg config.Config) (scans.Store, func()) {
|
||||
if cfg.StoreBackend != "postgres" {
|
||||
log.Printf("store backend: memory")
|
||||
return scans.NewMemoryStore(), nil
|
||||
}
|
||||
|
||||
if cfg.DBDSN == "" {
|
||||
log.Fatalf("STORE_BACKEND=postgres requires DB_DSN")
|
||||
}
|
||||
|
||||
db, err := sql.Open("pgx", cfg.DBDSN)
|
||||
if err != nil {
|
||||
log.Fatalf("db open failed: %v", err)
|
||||
}
|
||||
|
||||
if err = db.Ping(); err != nil {
|
||||
_ = db.Close()
|
||||
log.Fatalf("db ping failed: %v", err)
|
||||
}
|
||||
|
||||
if cfg.RunMigrations {
|
||||
if err = store.RunMigrations(db); err != nil {
|
||||
_ = db.Close()
|
||||
log.Fatalf("db migration failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
log.Printf("store backend: postgres")
|
||||
return scans.NewPostgresStore(db), func() {
|
||||
_ = db.Close()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user