From f9af1e3e1382895950fda3bee9197246cdd34f0c Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Tue, 10 Nov 2020 21:21:53 +0000 Subject: [PATCH] kojiapi/logs: adjust for multi-build composes Return the full array of image build logs, as well as logs for the init and import tasks. --- internal/kojiapi/api/api.gen.go | 4 +++- internal/kojiapi/api/openapi.yml | 4 ++++ internal/kojiapi/server.go | 30 ++++++++++++++++++++++++------ 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/internal/kojiapi/api/api.gen.go b/internal/kojiapi/api/api.gen.go index 030a4bbb8..0cbe1d95c 100644 --- a/internal/kojiapi/api/api.gen.go +++ b/internal/kojiapi/api/api.gen.go @@ -12,7 +12,9 @@ import ( // ComposeLogs defines model for ComposeLogs. type ComposeLogs struct { - ImageLogs []interface{} `json:"image_logs"` + ImageLogs []interface{} `json:"image_logs"` + KojiImportLogs interface{} `json:"koji_import_logs"` + KojiInitLogs interface{} `json:"koji_init_logs"` } // ComposeRequest defines model for ComposeRequest. diff --git a/internal/kojiapi/api/openapi.yml b/internal/kojiapi/api/openapi.yml index 41e8ea027..923fd7d4d 100644 --- a/internal/kojiapi/api/openapi.yml +++ b/internal/kojiapi/api/openapi.yml @@ -152,8 +152,12 @@ components: example: 42 ComposeLogs: required: + - koji_init_logs + - koji_import_logs - image_logs properties: + koji_init_logs: {} + koji_import_logs: {} image_logs: type: array ImageStatus: diff --git a/internal/kojiapi/server.go b/internal/kojiapi/server.go index 30ac3f009..09e928bd1 100644 --- a/internal/kojiapi/server.go +++ b/internal/kojiapi/server.go @@ -332,19 +332,37 @@ func (h *apiHandlers) GetComposeIdLogs(ctx echo.Context, idstr string) error { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter id: %s", err)) } - var result worker.OSBuildJobResult - _, _, err = h.server.workers.JobStatus(id, &result) + var finalizeResult worker.KojiFinalizeJobResult + _, deps, err := h.server.workers.JobStatus(id, &finalizeResult) if err != nil { return echo.NewHTTPError(http.StatusNotFound, fmt.Sprintf("Job %s not found: %s", idstr, err)) } - // Return the OSBuildJobResult as-is for now. The contents of ImageLogs + var initResult worker.KojiInitJobResult + _, _, err = h.server.workers.JobStatus(deps[0], &initResult) + if err != nil { + // This is a programming errror. + panic(err) + } + + var buildResults []interface{} + for i := 1; i < len(deps); i++ { + var buildResult worker.OSBuildJobResult + _, _, err = h.server.workers.JobStatus(deps[i], &buildResult) + if err != nil { + // This is a programming error. + panic(err) + } + buildResults = append(buildResults, buildResult) + } + + // Return the OSBuildJobResults as-is for now. The contents of ImageLogs // is not part of the API. It's meant for a human to be able to access // the logs, which just happen to be in JSON. response := api.ComposeLogs{ - ImageLogs: []interface{}{ - result, - }, + KojiInitLogs: initResult, + KojiImportLogs: finalizeResult, + ImageLogs: buildResults, } return ctx.JSON(http.StatusOK, response)