diff --git a/api/database/migrations/002_site_info_more_settings.up.sql b/api/database/migrations/002_site_info_more_settings.up.sql index 272bbfea..8502510b 100644 --- a/api/database/migrations/002_site_info_more_settings.up.sql +++ b/api/database/migrations/002_site_info_more_settings.up.sql @@ -1,4 +1,4 @@ ALTER TABLE site_info - ADD COLUMN IF NOT EXISTS periodic_scan_interval int(8) NOT NULL DEFAULT 0, - ADD COLUMN IF NOT EXISTS concurrent_workers int(8) NOT NULL DEFAULT 3; + ADD COLUMN IF NOT EXISTS periodic_scan_interval int(8) NOT NULL, + ADD COLUMN IF NOT EXISTS concurrent_workers int(8) NOT NULL; diff --git a/api/graphql/models/site_info.go b/api/graphql/models/site_info.go index 81cf241e..dc36bfb0 100644 --- a/api/graphql/models/site_info.go +++ b/api/graphql/models/site_info.go @@ -2,16 +2,27 @@ package models import ( "database/sql" + + "github.com/pkg/errors" ) -func initializeSiteInfoRow(db *sql.DB) error { - _, err := db.Exec("INSERT INTO site_info (initial_setup) VALUES (true)") +func initializeSiteInfoRow(db *sql.DB) (*SiteInfo, error) { + _, err := db.Exec("INSERT INTO site_info (initial_setup, periodic_scan_interval, concurrent_workers) VALUES (true, 0, 3)") if err != nil { - return err + return nil, errors.Wrap(err, "initialize site_info row") } - return nil + + siteInfo := &SiteInfo{} + + row := db.QueryRow("SELECT * FROM site_info") + if err := row.Scan(&siteInfo.InitialSetup, &siteInfo.PeriodicScanInterval, &siteInfo.ConcurrentWorkers); err != nil { + return nil, errors.Wrap(err, "get site_info row after initialization") + } + + return siteInfo, nil } +// GetSiteInfo gets the site info row from the database, and creates it if it does not exist func GetSiteInfo(db *sql.DB) (*SiteInfo, error) { rows, err := db.Query("SELECT * FROM site_info") defer rows.Close() @@ -19,25 +30,19 @@ func GetSiteInfo(db *sql.DB) (*SiteInfo, error) { return nil, err } - var initialSetup bool - var periodicScanInterval int - var concurrentWorkers int + siteInfo := &SiteInfo{} if !rows.Next() { // Entry does not exist - if err := initializeSiteInfoRow(db); err != nil { + siteInfo, err = initializeSiteInfoRow(db) + if err != nil { return nil, err } - initialSetup = true } else { - if err := rows.Scan(&initialSetup, &periodicScanInterval, &concurrentWorkers); err != nil { + if err := rows.Scan(&siteInfo.InitialSetup, &siteInfo.PeriodicScanInterval, &siteInfo.ConcurrentWorkers); err != nil { return nil, err } } - return &SiteInfo{ - InitialSetup: initialSetup, - PeriodicScanInterval: periodicScanInterval, - ConcurrentWorkers: concurrentWorkers, - }, nil + return siteInfo, nil } diff --git a/api/scanner/queue.go b/api/scanner/queue.go index a56eb08c..d3c49337 100644 --- a/api/scanner/queue.go +++ b/api/scanner/queue.go @@ -48,6 +48,8 @@ func InitializeScannerQueue(db *sql.DB) error { concurrentWorkers = site_info.ConcurrentWorkers } + log.Printf("Initializing scanner queue with %d workers", concurrentWorkers) + global_scanner_queue = ScannerQueue{ idle_chan: make(chan bool, 1), in_progress: make([]ScannerJob, 0), @@ -78,7 +80,7 @@ func (queue *ScannerQueue) startBackgroundWorker() { <-queue.idle_chan log.Println("Queue waiting for lock") queue.mutex.Lock() - log.Println("Queue running") + log.Printf("Queue running: in_progress: %d, max_tasks: %d, queue_len: %d\n", len(queue.in_progress), queue.settings.max_concurrent_tasks, len(queue.up_next)) for len(queue.in_progress) < queue.settings.max_concurrent_tasks && len(queue.up_next) > 0 { log.Println("Queue starting job")