weldr: move common.ComposeState to weldr

ComposeState is only used by the weldr API.

Drop the JSON marshaller and unmarshaller, because ComposeState is not
used in an JSON-exported field anymore.
This commit is contained in:
Lars Karlitski 2020-10-24 13:40:08 +02:00
parent 669b612d96
commit bcd57a77e2
5 changed files with 62 additions and 67 deletions

View file

@ -69,31 +69,3 @@ func (ibs *ImageBuildState) UnmarshalJSON(data []byte) error {
func (ibs ImageBuildState) MarshalJSON() ([]byte, error) {
return json.Marshal(getStateMapping()[ibs])
}
type ComposeState int
const (
CWaiting ComposeState = iota
CRunning
CFinished
CFailed
)
// ToString converts ImageBuildState into a human readable string
func (cs ComposeState) ToString() string {
return getStateMapping()[int(cs)]
}
// UnmarshalJSON converts a JSON string into an ImageBuildState
func (ibs *ComposeState) UnmarshalJSON(data []byte) error {
val, err := unmarshalStateHelper(data, getStateMapping())
if err != nil {
return err
}
*ibs = ComposeState(val)
return nil
}
func (ibs ComposeState) MarshalJSON() ([]byte, error) {
return json.Marshal(getStateMapping()[ibs])
}

View file

@ -2,28 +2,26 @@ package common
import (
"encoding/json"
"github.com/stretchr/testify/assert"
"testing"
"github.com/stretchr/testify/assert"
)
func TestJSONConversions(t *testing.T) {
type TestJson struct {
Ibs ImageBuildState `json:"ibs"`
Cs ComposeState `json:"cs"`
}
typedCases := []TestJson{
{
Ibs: IBWaiting,
Cs: CWaiting,
},
{
Ibs: IBRunning,
Cs: CFailed,
},
}
strCases := []string{
`{"ibs": "WAITING", "cs": "WAITING"}`,
`{"ibs": "RUNNING", "cs": "FAILED"}`,
`{"ibs": "WAITING"}`,
`{"ibs": "RUNNING"}`,
}
for n, c := range strCases {

View file

@ -49,6 +49,31 @@ type API struct {
compatOutputDir string
}
type ComposeState int
const (
CWaiting ComposeState = iota
CRunning
CFinished
CFailed
)
// ToString converts ImageBuildState into a human readable string
func (cs ComposeState) ToString() string {
switch cs {
case CWaiting:
return "WAITING"
case CRunning:
return "RUNNING"
case CFinished:
return "FINISHED"
case CFailed:
return "FAILED"
default:
panic("invalid ComposeState value")
}
}
// systemRepoIDs returns a list of the system repos
// NOTE: The system repos have no concept of id vs. name so the id is returned
func (api *API) systemRepoNames() (names []string) {
@ -162,31 +187,31 @@ func (api *API) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
}
type composeStatus struct {
State common.ComposeState
State ComposeState
Queued time.Time
Started time.Time
Finished time.Time
Result *osbuild.Result
}
func composeStateFromJobStatus(js *worker.JobStatus) common.ComposeState {
func composeStateFromJobStatus(js *worker.JobStatus) ComposeState {
if js.Canceled {
return common.CFailed
return CFailed
}
if js.Started.IsZero() {
return common.CWaiting
return CWaiting
}
if js.Finished.IsZero() {
return common.CRunning
return CRunning
}
if js.Result.OSBuildOutput != nil && js.Result.OSBuildOutput.Success {
return common.CFinished
return CFinished
}
return common.CFailed
return CFailed
}
// Returns the state of the image in `compose` and the times the job was
@ -199,16 +224,16 @@ func (api *API) getComposeStatus(compose store.Compose) *composeStatus {
// the job queue from the store still contain their valid status and
// times. Return those here as a fallback.
if jobId == uuid.Nil {
var state common.ComposeState
var state ComposeState
switch compose.ImageBuild.QueueStatus {
case common.IBWaiting:
state = common.CWaiting
state = CWaiting
case common.IBRunning:
state = common.CRunning
state = CRunning
case common.IBFinished:
state = common.CFinished
state = CFinished
case common.IBFailed:
state = common.CFailed
state = CFailed
}
return &composeStatus{
State: state,
@ -1910,7 +1935,7 @@ func (api *API) composeDeleteHandler(writer http.ResponseWriter, request *http.R
}
composeStatus := api.getComposeStatus(compose)
if composeStatus.State != common.CFinished && composeStatus.State != common.CFailed {
if composeStatus.State != CFinished && composeStatus.State != CFailed {
errors = append(errors, composeDeleteError{
"BuildInWrongState",
fmt.Sprintf("Compose %s is not in FINISHED or FAILED.", id),
@ -1975,7 +2000,7 @@ func (api *API) composeCancelHandler(writer http.ResponseWriter, request *http.R
}
composeStatus := api.getComposeStatus(compose)
if composeStatus.State == common.CWaiting {
if composeStatus.State == CWaiting {
errors := responseError{
ID: "BuildInWrongState",
Msg: fmt.Sprintf("Build %s has not started yet. No logs to view.", uuidString),
@ -2035,9 +2060,9 @@ func (api *API) composeQueueHandler(writer http.ResponseWriter, request *http.Re
for id, compose := range composes {
composeStatus := api.getComposeStatus(compose)
switch composeStatus.State {
case common.CWaiting:
case CWaiting:
reply.New = append(reply.New, composeToComposeEntry(id, compose, composeStatus, includeUploads))
case common.CRunning:
case CRunning:
reply.Run = append(reply.Run, composeToComposeEntry(id, compose, composeStatus, includeUploads))
}
}
@ -2219,7 +2244,7 @@ func (api *API) composeImageHandler(writer http.ResponseWriter, request *http.Re
}
composeStatus := api.getComposeStatus(compose)
if composeStatus.State != common.CFinished {
if composeStatus.State != CFinished {
errors := responseError{
ID: "BuildInWrongState",
Msg: fmt.Sprintf("Build %s is in wrong state: %s", uuidString, composeStatus.State.ToString()),
@ -2277,7 +2302,7 @@ func (api *API) composeMetadataHandler(writer http.ResponseWriter, request *http
}
composeStatus := api.getComposeStatus(compose)
if composeStatus.State != common.CFinished && composeStatus.State != common.CFailed {
if composeStatus.State != CFinished && composeStatus.State != CFailed {
errors := responseError{
ID: "BuildInWrongState",
Msg: fmt.Sprintf("Build %s is in wrong state: %s", uuidString, composeStatus.State.ToString()),
@ -2338,7 +2363,7 @@ func (api *API) composeResultsHandler(writer http.ResponseWriter, request *http.
}
composeStatus := api.getComposeStatus(compose)
if composeStatus.State != common.CFinished && composeStatus.State != common.CFailed {
if composeStatus.State != CFinished && composeStatus.State != CFailed {
errors := responseError{
ID: "BuildInWrongState",
Msg: fmt.Sprintf("Build %s is in wrong state: %s", uuidString, composeStatus.State.ToString()),
@ -2429,7 +2454,7 @@ func (api *API) composeLogsHandler(writer http.ResponseWriter, request *http.Req
}
composeStatus := api.getComposeStatus(compose)
if composeStatus.State != common.CFinished && composeStatus.State != common.CFailed {
if composeStatus.State != CFinished && composeStatus.State != CFailed {
errors := responseError{
ID: "BuildInWrongState",
Msg: fmt.Sprintf("Build %s not in FINISHED or FAILED state.", uuidString),
@ -2493,7 +2518,7 @@ func (api *API) composeLogHandler(writer http.ResponseWriter, request *http.Requ
}
composeStatus := api.getComposeStatus(compose)
if composeStatus.State == common.CWaiting {
if composeStatus.State == CWaiting {
errors := responseError{
ID: "BuildInWrongState",
Msg: fmt.Sprintf("Build %s has not started yet. No logs to view.", uuidString),
@ -2502,7 +2527,7 @@ func (api *API) composeLogHandler(writer http.ResponseWriter, request *http.Requ
return
}
if composeStatus.State == common.CRunning {
if composeStatus.State == CRunning {
fmt.Fprintf(writer, "Build %s is still running.\n", uuidString)
return
}
@ -2523,7 +2548,7 @@ func (api *API) composeFinishedHandler(writer http.ResponseWriter, request *http
includeUploads := isRequestVersionAtLeast(params, 1)
for id, compose := range api.store.GetAllComposes() {
composeStatus := api.getComposeStatus(compose)
if composeStatus.State != common.CFinished {
if composeStatus.State != CFinished {
continue
}
reply.Finished = append(reply.Finished, composeToComposeEntry(id, compose, composeStatus, includeUploads))
@ -2546,7 +2571,7 @@ func (api *API) composeFailedHandler(writer http.ResponseWriter, request *http.R
includeUploads := isRequestVersionAtLeast(params, 1)
for id, compose := range api.store.GetAllComposes() {
composeStatus := api.getComposeStatus(compose)
if composeStatus.State != common.CFailed {
if composeStatus.State != CFailed {
continue
}
reply.Failed = append(reply.Failed, composeToComposeEntry(id, compose, composeStatus, includeUploads))

View file

@ -35,23 +35,23 @@ func composeToComposeEntry(id uuid.UUID, compose store.Compose, status *composeS
}
switch status.State {
case common.CWaiting:
case CWaiting:
composeEntry.QueueStatus = common.IBWaiting
composeEntry.JobCreated = float64(status.Queued.UnixNano()) / 1000000000
case common.CRunning:
case CRunning:
composeEntry.QueueStatus = common.IBRunning
composeEntry.JobCreated = float64(status.Queued.UnixNano()) / 1000000000
composeEntry.JobStarted = float64(status.Started.UnixNano()) / 1000000000
case common.CFinished:
case CFinished:
composeEntry.QueueStatus = common.IBFinished
composeEntry.ImageSize = compose.ImageBuild.Size
composeEntry.JobCreated = float64(status.Queued.UnixNano()) / 1000000000
composeEntry.JobStarted = float64(status.Started.UnixNano()) / 1000000000
composeEntry.JobFinished = float64(status.Finished.UnixNano()) / 1000000000
case common.CFailed:
case CFailed:
composeEntry.QueueStatus = common.IBFailed
composeEntry.JobCreated = float64(status.Queued.UnixNano()) / 1000000000
composeEntry.JobStarted = float64(status.Started.UnixNano()) / 1000000000

View file

@ -91,7 +91,7 @@ func (u *uploadRequest) UnmarshalJSON(data []byte) error {
//
// This also ignores any sensitive data passed into targets. Access keys may
// be passed as input to composer, but should not be possible to be queried.
func targetsToUploadResponses(targets []*target.Target, state common.ComposeState) []uploadResponse {
func targetsToUploadResponses(targets []*target.Target, state ComposeState) []uploadResponse {
var uploads []uploadResponse
for _, t := range targets {
upload := uploadResponse{
@ -101,13 +101,13 @@ func targetsToUploadResponses(targets []*target.Target, state common.ComposeStat
}
switch state {
case common.CWaiting:
case CWaiting:
upload.Status = common.IBWaiting
case common.CRunning:
case CRunning:
upload.Status = common.IBRunning
case common.CFinished:
case CFinished:
upload.Status = common.IBFinished
case common.CFailed:
case CFailed:
upload.Status = common.IBFailed
}