diff --git a/pkg/queue/queue.go b/pkg/queue/queue.go new file mode 100644 index 0000000..8b8faff --- /dev/null +++ b/pkg/queue/queue.go @@ -0,0 +1,31 @@ +package queue + +import ( + "log/slog" + "mrvacommander/pkg/storage" + + co "github.com/hohn/ghes-mirva-server/common" +) + +var ( + NumWorkers int + Jobs chan co.AnalyzeJob + Results chan co.AnalyzeResult +) + +func StartAnalyses(analysis_repos *map[co.OwnerRepo]storage.DBLocation, session_id int, + session_language string) { + slog.Debug("Queueing codeql database analyze jobs") + + for orl := range *analysis_repos { + info := co.AnalyzeJob{ + QueryPackId: session_id, + QueryLanguage: session_language, + + ORL: orl, + } + Jobs <- info + storage.SetStatus(session_id, orl, co.StatusQueued) + storage.AddJob(session_id, info) + } +} diff --git a/pkg/server/server.go b/pkg/server/server.go index 8b766ab..3e2733e 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -14,6 +14,7 @@ import ( "strconv" "strings" + "mrvacommander/pkg/queue" "mrvacommander/pkg/storage" "github.com/gorilla/mux" @@ -290,8 +291,7 @@ func (c *CommanderSingle) MirvaRequest(w http.ResponseWriter, r *http.Request) { not_found_repos, analysisRepos := c.st.Storage.FindAvailableDBs(session_repositories) - // TODO into Queue - // session_start_analyses() + queue.StartAnalyses(analysisRepos, session_id, session_language) // TODO into Commander (here) si := SessionInfo{ diff --git a/pkg/storage/storage.go b/pkg/storage/storage.go index 2ef3183..d077978 100644 --- a/pkg/storage/storage.go +++ b/pkg/storage/storage.go @@ -210,3 +210,15 @@ func ResultAsFile(path string) (string, []byte, error) { return fpath, file, nil } + +func SetStatus(sessionid int, orl co.OwnerRepo, s co.Status) { + mutex.Lock() + defer mutex.Unlock() + status[co.JobSpec{ID: sessionid, OwnerRepo: orl}] = s +} + +func AddJob(sessionid int, job co.AnalyzeJob) { + mutex.Lock() + defer mutex.Unlock() + jobs[sessionid] = append(jobs[sessionid], job) +}