Blame internal/weldr/compose.go

Packit 63bb0d
package weldr
Packit 63bb0d
Packit 63bb0d
import (
Packit 63bb0d
	"sort"
Packit 63bb0d
Packit 63bb0d
	"github.com/google/uuid"
Packit 63bb0d
Packit 63bb0d
	"github.com/osbuild/osbuild-composer/internal/common"
Packit 63bb0d
	"github.com/osbuild/osbuild-composer/internal/store"
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
type ComposeEntry struct {
Packit 63bb0d
	ID          uuid.UUID              `json:"id"`
Packit 63bb0d
	Blueprint   string                 `json:"blueprint"`
Packit 63bb0d
	Version     string                 `json:"version"`
Packit 63bb0d
	ComposeType string                 `json:"compose_type"`
Packit 63bb0d
	ImageSize   uint64                 `json:"image_size"` // This is user-provided image size, not actual file size
Packit 63bb0d
	QueueStatus common.ImageBuildState `json:"queue_status"`
Packit 63bb0d
	JobCreated  float64                `json:"job_created"`
Packit 63bb0d
	JobStarted  float64                `json:"job_started,omitempty"`
Packit 63bb0d
	JobFinished float64                `json:"job_finished,omitempty"`
Packit 63bb0d
	Uploads     []uploadResponse       `json:"uploads,omitempty"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func composeToComposeEntry(id uuid.UUID, compose store.Compose, status *composeStatus, includeUploads bool) *ComposeEntry {
Packit 63bb0d
	var composeEntry ComposeEntry
Packit 63bb0d
Packit 63bb0d
	composeEntry.ID = id
Packit 63bb0d
	composeEntry.Blueprint = compose.Blueprint.Name
Packit 63bb0d
	composeEntry.Version = compose.Blueprint.Version
Packit 63bb0d
	composeEntry.ComposeType = compose.ImageBuild.ImageType.Name()
Packit 63bb0d
Packit 63bb0d
	if includeUploads {
Packit 63bb0d
		composeEntry.Uploads = targetsToUploadResponses(compose.ImageBuild.Targets, status.State)
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	switch status.State {
Packit 63bb0d
	case common.CWaiting:
Packit 63bb0d
		composeEntry.QueueStatus = common.IBWaiting
Packit 63bb0d
		composeEntry.JobCreated = float64(status.Queued.UnixNano()) / 1000000000
Packit 63bb0d
Packit 63bb0d
	case common.CRunning:
Packit 63bb0d
		composeEntry.QueueStatus = common.IBRunning
Packit 63bb0d
		composeEntry.JobCreated = float64(status.Queued.UnixNano()) / 1000000000
Packit 63bb0d
		composeEntry.JobStarted = float64(status.Started.UnixNano()) / 1000000000
Packit 63bb0d
Packit 63bb0d
	case common.CFinished:
Packit 63bb0d
		composeEntry.QueueStatus = common.IBFinished
Packit 63bb0d
		composeEntry.ImageSize = compose.ImageBuild.Size
Packit 63bb0d
		composeEntry.JobCreated = float64(status.Queued.UnixNano()) / 1000000000
Packit 63bb0d
		composeEntry.JobStarted = float64(status.Started.UnixNano()) / 1000000000
Packit 63bb0d
		composeEntry.JobFinished = float64(status.Finished.UnixNano()) / 1000000000
Packit 63bb0d
Packit 63bb0d
	case common.CFailed:
Packit 63bb0d
		composeEntry.QueueStatus = common.IBFailed
Packit 63bb0d
		composeEntry.JobCreated = float64(status.Queued.UnixNano()) / 1000000000
Packit 63bb0d
		composeEntry.JobStarted = float64(status.Started.UnixNano()) / 1000000000
Packit 63bb0d
		composeEntry.JobFinished = float64(status.Finished.UnixNano()) / 1000000000
Packit 63bb0d
	default:
Packit 63bb0d
		panic("invalid compose state")
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	return &composeEntry
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func sortComposeEntries(entries []*ComposeEntry) {
Packit 63bb0d
	sort.Slice(entries, func(i, j int) bool {
Packit 63bb0d
		return entries[i].ID.String() < entries[j].ID.String()
Packit 63bb0d
	})
Packit 63bb0d
}