From 9750eeab20f679b8954b8bf3cb093120ee181a7c Mon Sep 17 00:00:00 2001 From: Michael Hohn Date: Wed, 15 May 2024 15:57:27 -0700 Subject: [PATCH] wip: reorganized to go pkg structure --- cmd/{commander => server}/doc.go | 0 cmd/{commander => server}/main.go | 32 +++++++-------- cmd/{commander => server}/mcconfig.toml | 0 go.mod | 2 +- interfaces/mci/commander.go | 12 ------ interfaces/mci/common.go | 4 -- lib/logger/llmem/localdisk.go | 4 -- lib/queue/lqmem/inmemory.go | 4 -- lib/runner/lrmem/inmemory.go | 4 -- pkg/agent/agent.go | 4 ++ .../mci/runner.go => pkg/agent/interfaces.go | 2 +- pkg/common/interfaces.go | 4 ++ .../mci/logger.go => pkg/logger/interfaces.go | 2 +- pkg/logger/types.go | 4 ++ .../mci/queue.go => pkg/queue/interfaces.go | 2 +- pkg/queue/types.go | 4 ++ pkg/server/interfaces.go | 3 ++ .../lcmem/lcmem.go => pkg/server/server.go | 39 ++++++++----------- .../tcmdr/commander.go => pkg/server/types.go | 22 +++++++++-- pkg/storage/interfaces.go | 1 + .../localdisk.go => pkg/storage/storage.go | 17 ++++---- .../mci/storage.go => pkg/storage/types.go | 10 +++-- types/common.go | 0 types/logger.go | 0 types/queue.go | 0 types/runner.go | 0 types/tsto/storage.go | 6 --- 27 files changed, 90 insertions(+), 92 deletions(-) rename cmd/{commander => server}/doc.go (100%) rename cmd/{commander => server}/main.go (69%) rename cmd/{commander => server}/mcconfig.toml (100%) delete mode 100644 interfaces/mci/commander.go delete mode 100644 interfaces/mci/common.go delete mode 100644 lib/logger/llmem/localdisk.go delete mode 100644 lib/queue/lqmem/inmemory.go delete mode 100644 lib/runner/lrmem/inmemory.go create mode 100644 pkg/agent/agent.go rename interfaces/mci/runner.go => pkg/agent/interfaces.go (65%) create mode 100644 pkg/common/interfaces.go rename interfaces/mci/logger.go => pkg/logger/interfaces.go (64%) create mode 100644 pkg/logger/types.go rename interfaces/mci/queue.go => pkg/queue/interfaces.go (65%) create mode 100644 pkg/queue/types.go create mode 100644 pkg/server/interfaces.go rename lib/commander/lcmem/lcmem.go => pkg/server/server.go (87%) rename types/tcmdr/commander.go => pkg/server/types.go (96%) create mode 100644 pkg/storage/interfaces.go rename lib/storage/lsmem/localdisk.go => pkg/storage/storage.go (77%) rename interfaces/mci/storage.go => pkg/storage/types.go (68%) delete mode 100644 types/common.go delete mode 100644 types/logger.go delete mode 100644 types/queue.go delete mode 100644 types/runner.go delete mode 100644 types/tsto/storage.go diff --git a/cmd/commander/doc.go b/cmd/server/doc.go similarity index 100% rename from cmd/commander/doc.go rename to cmd/server/doc.go diff --git a/cmd/commander/main.go b/cmd/server/main.go similarity index 69% rename from cmd/commander/main.go rename to cmd/server/main.go index d6d97bf..0901ea0 100644 --- a/cmd/commander/main.go +++ b/cmd/server/main.go @@ -9,13 +9,13 @@ import ( "log/slog" "os" - "github.com/advanced-security/mrvacommander/config/mcc" - "github.com/advanced-security/mrvacommander/interfaces/mci" - "github.com/advanced-security/mrvacommander/lib/commander/lcmem" - "github.com/advanced-security/mrvacommander/lib/logger/llmem" - "github.com/advanced-security/mrvacommander/lib/queue/lqmem" - "github.com/advanced-security/mrvacommander/lib/runner/lrmem" - "github.com/advanced-security/mrvacommander/lib/storage/lsmem" + "mrvacommander/config/mcc" + + "mrvacommander/pkg/agent" + "mrvacommander/pkg/logger" + "mrvacommander/pkg/queue" + "mrvacommander/pkg/server" + "mrvacommander/pkg/storage" ) func main() { @@ -68,16 +68,16 @@ func main() { switch *mode { case "standalone": // Assemble single-process version - state := mci.State{ - Commander: &lcmem.Commander{}, - Logger: &llmem.Logger{}, - Queue: &lqmem.Queue{}, - Storage: &lsmem.Storage{CurrentID: config.Storage.StartingID}, - Runner: &lrmem.Runner{}, + state := server.State{ + Commander: &server.CommanderSingle{}, + Logger: &logger.LoggerSingle{}, + Queue: &queue.QueueSingle{}, + Storage: &storage.StorageSingle{CurrentID: config.Storage.StartingID}, + Runner: &agent.RunnerSingle{}, } - main := &lcmem.Commander{} - main.Setup(state) - main.Run(state) + main := &server.CommanderSingle{} + main.Setup(&state) + main.Run() case "container": // Assemble cccontainer diff --git a/cmd/commander/mcconfig.toml b/cmd/server/mcconfig.toml similarity index 100% rename from cmd/commander/mcconfig.toml rename to cmd/server/mcconfig.toml diff --git a/go.mod b/go.mod index 6ad6c1b..047546e 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/advanced-security/mrvacommander +module mrvacommander go 1.22.0 diff --git a/interfaces/mci/commander.go b/interfaces/mci/commander.go deleted file mode 100644 index 384ccc2..0000000 --- a/interfaces/mci/commander.go +++ /dev/null @@ -1,12 +0,0 @@ -package mci - -type Commander interface { -} - -type State struct { - Commander Commander - Logger Logger - Queue Queue - Storage Storage - Runner Runner -} diff --git a/interfaces/mci/common.go b/interfaces/mci/common.go deleted file mode 100644 index aab7cf6..0000000 --- a/interfaces/mci/common.go +++ /dev/null @@ -1,4 +0,0 @@ -package mci - -type Common struct { -} diff --git a/lib/logger/llmem/localdisk.go b/lib/logger/llmem/localdisk.go deleted file mode 100644 index 84f06b4..0000000 --- a/lib/logger/llmem/localdisk.go +++ /dev/null @@ -1,4 +0,0 @@ -package llmem - -type Logger struct { -} diff --git a/lib/queue/lqmem/inmemory.go b/lib/queue/lqmem/inmemory.go deleted file mode 100644 index f078845..0000000 --- a/lib/queue/lqmem/inmemory.go +++ /dev/null @@ -1,4 +0,0 @@ -package lqmem - -type Queue struct { -} diff --git a/lib/runner/lrmem/inmemory.go b/lib/runner/lrmem/inmemory.go deleted file mode 100644 index 7d22c60..0000000 --- a/lib/runner/lrmem/inmemory.go +++ /dev/null @@ -1,4 +0,0 @@ -package lrmem - -type Runner struct { -} diff --git a/pkg/agent/agent.go b/pkg/agent/agent.go new file mode 100644 index 0000000..3252caa --- /dev/null +++ b/pkg/agent/agent.go @@ -0,0 +1,4 @@ +package agent + +type RunnerSingle struct { +} diff --git a/interfaces/mci/runner.go b/pkg/agent/interfaces.go similarity index 65% rename from interfaces/mci/runner.go rename to pkg/agent/interfaces.go index bfebbd9..3a21fb3 100644 --- a/interfaces/mci/runner.go +++ b/pkg/agent/interfaces.go @@ -1,4 +1,4 @@ -package mci +package agent type Runner interface { } diff --git a/pkg/common/interfaces.go b/pkg/common/interfaces.go new file mode 100644 index 0000000..98b3017 --- /dev/null +++ b/pkg/common/interfaces.go @@ -0,0 +1,4 @@ +package common + +type Common interface { +} diff --git a/interfaces/mci/logger.go b/pkg/logger/interfaces.go similarity index 64% rename from interfaces/mci/logger.go rename to pkg/logger/interfaces.go index a0742c2..050dead 100644 --- a/interfaces/mci/logger.go +++ b/pkg/logger/interfaces.go @@ -1,4 +1,4 @@ -package mci +package logger type Logger interface { } diff --git a/pkg/logger/types.go b/pkg/logger/types.go new file mode 100644 index 0000000..66d4be0 --- /dev/null +++ b/pkg/logger/types.go @@ -0,0 +1,4 @@ +package logger + +type LoggerSingle struct { +} diff --git a/interfaces/mci/queue.go b/pkg/queue/interfaces.go similarity index 65% rename from interfaces/mci/queue.go rename to pkg/queue/interfaces.go index 5adc611..df566c7 100644 --- a/interfaces/mci/queue.go +++ b/pkg/queue/interfaces.go @@ -1,4 +1,4 @@ -package mci +package queue type Queue interface { } diff --git a/pkg/queue/types.go b/pkg/queue/types.go new file mode 100644 index 0000000..33f5204 --- /dev/null +++ b/pkg/queue/types.go @@ -0,0 +1,4 @@ +package queue + +type QueueSingle struct { +} diff --git a/pkg/server/interfaces.go b/pkg/server/interfaces.go new file mode 100644 index 0000000..5c814cd --- /dev/null +++ b/pkg/server/interfaces.go @@ -0,0 +1,3 @@ +package server + +type Commander interface{} diff --git a/lib/commander/lcmem/lcmem.go b/pkg/server/server.go similarity index 87% rename from lib/commander/lcmem/lcmem.go rename to pkg/server/server.go index 5f73a8a..a3115f5 100644 --- a/lib/commander/lcmem/lcmem.go +++ b/pkg/server/server.go @@ -1,5 +1,4 @@ -// The in-memory implementation of the mrva commander library -package lcmem +package server import ( "bytes" @@ -14,8 +13,6 @@ import ( "strconv" "strings" - "github.com/advanced-security/mrvacommander/interfaces/mci" - "github.com/advanced-security/mrvacommander/types/tcmdr" "github.com/gorilla/mux" "github.com/hohn/ghes-mirva-server/analyze" "github.com/hohn/ghes-mirva-server/api" @@ -23,14 +20,10 @@ import ( "github.com/hohn/ghes-mirva-server/store" ) -type Commander struct { - st mci.State // st points to this Commander instance. Circular, but needed. +func (c *CommanderSingle) Run() { } -func (c *Commander) Run(st mci.State) { -} - -func (c *Commander) Setup(st mci.State) { +func (c *CommanderSingle) Setup(st *State) { r := mux.NewRouter() c.st = st @@ -66,7 +59,7 @@ func (c *Commander) Setup(st mci.State) { log.Fatal(http.ListenAndServe(":8080", r)) } -func (c *Commander) StatusResponse(w http.ResponseWriter, js co.JobSpec, ji co.JobInfo, vaid int) { +func (c *CommanderSingle) StatusResponse(w http.ResponseWriter, js co.JobSpec, ji co.JobInfo, vaid int) { slog.Debug("Submitting status response", "session", vaid) all_scanned := []api.ScannedRepo{} @@ -120,11 +113,11 @@ func (c *Commander) StatusResponse(w http.ResponseWriter, js co.JobSpec, ji co.J w.Write(submitStatus) } -func (c *Commander) RootHandler(w http.ResponseWriter, r *http.Request) { +func (c *CommanderSingle) RootHandler(w http.ResponseWriter, r *http.Request) { slog.Info("Request on /") } -func (c *Commander) MirvaStatus(w http.ResponseWriter, r *http.Request) { +func (c *CommanderSingle) MirvaStatus(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) slog.Info("mrva status request for ", "owner", vars["owner"], @@ -161,7 +154,7 @@ func (c *Commander) MirvaStatus(w http.ResponseWriter, r *http.Request) { } // Download artifacts -func (c *Commander) MirvaDownloadArtifact(w http.ResponseWriter, r *http.Request) { +func (c *CommanderSingle) MirvaDownloadArtifact(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) slog.Info("MRVA artifact download", "controller_owner", vars["controller_owner"], @@ -188,19 +181,19 @@ func (c *Commander) MirvaDownloadArtifact(w http.ResponseWriter, r *http.Request } -func (c *Commander) MirvaDownloadServe(w http.ResponseWriter, r *http.Request) { +func (c *CommanderSingle) MirvaDownloadServe(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) slog.Info("File download request", "local_path", vars["local_path"]) analyze.FileDownload(w, vars["local_path"]) } -func (c *Commander) MirvaRequestID(w http.ResponseWriter, r *http.Request) { +func (c *CommanderSingle) MirvaRequestID(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) slog.Info("New mrva using repository_id=%v\n", vars["repository_id"]) } -func (c *Commander) MirvaRequest(w http.ResponseWriter, r *http.Request) { +func (c *CommanderSingle) MirvaRequest(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) slog.Info("New mrva run ", "owner", vars["owner"], "repo", vars["repo"]) // session := new(MirvaSession) @@ -221,7 +214,7 @@ func (c *Commander) MirvaRequest(w http.ResponseWriter, r *http.Request) { // session_start_analyses() // TODO into Commander (here) - si := tcmdr.SessionInfo{ + si := SessionInfo{ ID: session_id, Owner: session_owner, ControllerRepo: session_controller_repo, @@ -244,11 +237,11 @@ func (c *Commander) MirvaRequest(w http.ResponseWriter, r *http.Request) { // session_save() } -func (c *Commander) submit_response(s tcmdr.SessionInfo) { +func (c *CommanderSingle) submit_response(s SessionInfo) { // TODO } -func (c *Commander) collectRequestInfo(w http.ResponseWriter, r *http.Request, sessionId int) (string, []co.OwnerRepo, string, error) { +func (c *CommanderSingle) collectRequestInfo(w http.ResponseWriter, r *http.Request, sessionId int) (string, []co.OwnerRepo, string, error) { slog.Debug("Collecting session info") if r.Body == nil { @@ -305,12 +298,12 @@ func (c *Commander) collectRequestInfo(w http.ResponseWriter, r *http.Request, s } // Try to extract a SubmitMsg from a json-encoded buffer -func TrySubmitMsg(buf []byte) (tcmdr.SubmitMsg, error) { +func TrySubmitMsg(buf []byte) (SubmitMsg, error) { buf1 := make([]byte, len(buf)) copy(buf1, buf) dec := json.NewDecoder(bytes.NewReader(buf1)) dec.DisallowUnknownFields() - var m tcmdr.SubmitMsg + var m SubmitMsg err := dec.Decode(&m) return m, err } @@ -340,7 +333,7 @@ func isBase64Gzip(val []byte) bool { } } -func (c *Commander) extract_tgz(qp string, sessionID int) (string, error) { +func (c *CommanderSingle) extract_tgz(qp string, sessionID int) (string, error) { // These are decoded manually via // base64 -d < foo1 | gunzip | tar t | head -20 // base64 decode the body diff --git a/types/tcmdr/commander.go b/pkg/server/types.go similarity index 96% rename from types/tcmdr/commander.go rename to pkg/server/types.go index e13ab86..0fac456 100644 --- a/types/tcmdr/commander.go +++ b/pkg/server/types.go @@ -1,7 +1,11 @@ -package tcmdr +package server import ( - "github.com/advanced-security/mrvacommander/types/tsto" + "mrvacommander/pkg/agent" + "mrvacommander/pkg/logger" + "mrvacommander/pkg/queue" + "mrvacommander/pkg/storage" + co "github.com/hohn/ghes-mirva-server/common" ) @@ -237,5 +241,17 @@ type SessionInfo struct { NoCodeqlDBRepos []co.OwnerRepo OverLimitRepos []co.OwnerRepo - AnalysisRepos *map[co.OwnerRepo]tsto.DBLocation + AnalysisRepos *map[co.OwnerRepo]storage.DBLocation +} + +type CommanderSingle struct { + st *State +} + +type State struct { + Commander Commander + Logger logger.Logger + Queue queue.Queue + Storage storage.Storage + Runner agent.Runner } diff --git a/pkg/storage/interfaces.go b/pkg/storage/interfaces.go new file mode 100644 index 0000000..82be054 --- /dev/null +++ b/pkg/storage/interfaces.go @@ -0,0 +1 @@ +package storage diff --git a/lib/storage/lsmem/localdisk.go b/pkg/storage/storage.go similarity index 77% rename from lib/storage/lsmem/localdisk.go rename to pkg/storage/storage.go index 08188bd..8ca28dd 100644 --- a/lib/storage/lsmem/localdisk.go +++ b/pkg/storage/storage.go @@ -1,4 +1,4 @@ -package lsmem +package storage import ( "errors" @@ -9,20 +9,19 @@ import ( "path" "path/filepath" - "github.com/advanced-security/mrvacommander/types/tsto" co "github.com/hohn/ghes-mirva-server/common" ) -type Storage struct { +type StorageSingle struct { CurrentID int } -func (s *Storage) NextID() int { +func (s *StorageSingle) NextID() int { s.CurrentID += 1 return s.CurrentID } -func (s *Storage) SaveQueryPack(tgz []byte, sessionId int) (string, error) { +func (s *StorageSingle) SaveQueryPack(tgz []byte, sessionId int) (string, error) { // Save the tar.gz body cwd, err := os.Getwd() if err != nil { @@ -52,8 +51,8 @@ func (s *Storage) SaveQueryPack(tgz []byte, sessionId int) (string, error) { // Determine for which repositories codeql databases are available. // // Those will be the analysis_repos. The rest will be skipped. -func (s *Storage) FindAvailableDBs(analysisReposRequested []co.OwnerRepo) (not_found_repos []co.OwnerRepo, - analysisRepos *map[co.OwnerRepo]tsto.DBLocation) { +func (s *StorageSingle) FindAvailableDBs(analysisReposRequested []co.OwnerRepo) (not_found_repos []co.OwnerRepo, + analysisRepos *map[co.OwnerRepo]DBLocation) { slog.Debug("Looking for available CodeQL databases") cwd, err := os.Getwd() @@ -62,7 +61,7 @@ func (s *Storage) FindAvailableDBs(analysisReposRequested []co.OwnerRepo) (not_f return } - analysisRepos = &map[co.OwnerRepo]tsto.DBLocation{} + analysisRepos = &map[co.OwnerRepo]DBLocation{} not_found_repos = []co.OwnerRepo{} @@ -77,7 +76,7 @@ func (s *Storage) FindAvailableDBs(analysisReposRequested []co.OwnerRepo) (not_f not_found_repos = append(not_found_repos, rep) } else { slog.Info("Found database for ", "owner/repo", rep, "path", dbPath) - (*analysisRepos)[rep] = tsto.DBLocation{Prefix: dbPrefix, File: dbName} + (*analysisRepos)[rep] = DBLocation{Prefix: dbPrefix, File: dbName} } } return not_found_repos, analysisRepos diff --git a/interfaces/mci/storage.go b/pkg/storage/types.go similarity index 68% rename from interfaces/mci/storage.go rename to pkg/storage/types.go index 4d858b8..766e729 100644 --- a/interfaces/mci/storage.go +++ b/pkg/storage/types.go @@ -1,7 +1,6 @@ -package mci +package storage import ( - "github.com/advanced-security/mrvacommander/types/tsto" co "github.com/hohn/ghes-mirva-server/common" ) @@ -9,5 +8,10 @@ type Storage interface { NextID() int SaveQueryPack(tgz []byte, sessionID int) (storagePath string, error error) FindAvailableDBs(analysisReposRequested []co.OwnerRepo) (not_found_repos []co.OwnerRepo, - analysisRepos *map[co.OwnerRepo]tsto.DBLocation) + analysisRepos *map[co.OwnerRepo]DBLocation) +} + +type DBLocation struct { + Prefix string + File string } diff --git a/types/common.go b/types/common.go deleted file mode 100644 index e69de29..0000000 diff --git a/types/logger.go b/types/logger.go deleted file mode 100644 index e69de29..0000000 diff --git a/types/queue.go b/types/queue.go deleted file mode 100644 index e69de29..0000000 diff --git a/types/runner.go b/types/runner.go deleted file mode 100644 index e69de29..0000000 diff --git a/types/tsto/storage.go b/types/tsto/storage.go deleted file mode 100644 index 84c32b9..0000000 --- a/types/tsto/storage.go +++ /dev/null @@ -1,6 +0,0 @@ -package tsto - -type DBLocation struct { - Prefix string - File string -}