wip: port submit_response()

This commit is contained in:
Michael Hohn
2024-05-21 10:51:01 -07:00
committed by =Michael Hohn
parent 8cd4f4d809
commit 873339ff06

View File

@@ -13,6 +13,7 @@ import (
"path/filepath" "path/filepath"
"strconv" "strconv"
"strings" "strings"
"time"
"mrvacommander/pkg/queue" "mrvacommander/pkg/queue"
"mrvacommander/pkg/storage" "mrvacommander/pkg/storage"
@@ -20,6 +21,7 @@ import (
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/hohn/ghes-mirva-server/api" "github.com/hohn/ghes-mirva-server/api"
co "github.com/hohn/ghes-mirva-server/common" co "github.com/hohn/ghes-mirva-server/common"
"github.com/hohn/ghes-mirva-server/store"
) )
func (c *CommanderSingle) Run() { func (c *CommanderSingle) Run() {
@@ -293,7 +295,6 @@ func (c *CommanderSingle) MirvaRequest(w http.ResponseWriter, r *http.Request) {
queue.StartAnalyses(analysisRepos, session_id, session_language) queue.StartAnalyses(analysisRepos, session_id, session_language)
// TODO into Commander (here)
si := SessionInfo{ si := SessionInfo{
ID: session_id, ID: session_id,
Owner: session_owner, Owner: session_owner,
@@ -311,14 +312,92 @@ func (c *CommanderSingle) MirvaRequest(w http.ResponseWriter, r *http.Request) {
AnalysisRepos: analysisRepos, AnalysisRepos: analysisRepos,
} }
c.submit_response(si) submit_response, err := c.submit_response(si)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
w.Write(submit_response)
// TODO into Storage // TODO into Storage
// session_save() // session_save()
} }
func (c *CommanderSingle) submit_response(s SessionInfo) {
// TODO Port this function from ghes-mirva-server func ORToArr(aor []co.OwnerRepo) ([]string, int) {
repos := []string{}
count := len(aor)
for _, repo := range aor {
repos = append(repos, fmt.Sprintf("%s/%s", repo.Owner, repo.Repo))
}
return repos, count
}
func (c *CommanderSingle) submit_response(sn SessionInfo) ([]byte, error) {
slog.Debug("Forming and sending response for submitted analysis job", "id", sn.ID)
// Construct the response bottom-up
var m_cr api.ControllerRepo
var m_ac api.Actor
repos, count := ORToArr(sn.NotFoundRepos)
r_nfr := api.NotFoundRepos{RepositoryCount: count, RepositoryFullNames: repos}
repos, count = ORToArr(sn.AccessMismatchRepos)
r_amr := api.AccessMismatchRepos{RepositoryCount: count, Repositories: repos}
repos, count = ORToArr(sn.NoCodeqlDBRepos)
r_ncd := api.NoCodeqlDBRepos{RepositoryCount: count, Repositories: repos}
// TODO fill these with real values?
repos, count = ORToArr(sn.NoCodeqlDBRepos)
r_olr := api.OverLimitRepos{RepositoryCount: count, Repositories: repos}
m_skip := api.SkippedRepositories{
AccessMismatchRepos: r_amr,
NotFoundRepos: r_nfr,
NoCodeqlDBRepos: r_ncd,
OverLimitRepos: r_olr}
m_sr := api.SubmitResponse{
Actor: m_ac,
ControllerRepo: m_cr,
ID: sn.ID,
QueryLanguage: sn.Language,
QueryPackURL: sn.QueryPack,
CreatedAt: time.Now().Format(time.RFC3339),
UpdatedAt: time.Now().Format(time.RFC3339),
Status: "in_progress",
SkippedRepositories: m_skip,
}
// Store data needed later
joblist := storage.GetJobList(sn.ID)
for _, job := range joblist {
store.SetJobInfo(co.JobSpec{
ID: sn.ID,
OwnerRepo: job.ORL,
}, co.JobInfo{
QueryLanguage: sn.Language,
CreatedAt: m_sr.CreatedAt,
UpdatedAt: m_sr.UpdatedAt,
SkippedRepositories: m_skip,
},
)
}
// Encode the response as JSON
submit_response, err := json.Marshal(m_sr)
if err != nil {
slog.Warn("Error encoding response as JSON:", err)
return nil, err
}
return submit_response, nil
} }
func (c *CommanderSingle) 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) {