Rob Watson 98d93ad286
Some checks are pending
ci-build / lint (push) Waiting to run
ci-build / build (push) Blocked by required conditions
ci-build / release (push) Blocked by required conditions
ci-scan / Analyze (go) (push) Waiting to run
ci-scan / Analyze (actions) (push) Waiting to run
feat(mediaserver): RTMPS
2025-04-19 22:05:55 +02:00

101 lines
2.4 KiB
Go

package domain
import (
"slices"
"time"
)
// AppState holds application state.
type AppState struct {
Source Source
Destinations []Destination
BuildInfo BuildInfo
}
// Clone performs a deep copy of AppState.
func (s *AppState) Clone() AppState {
return AppState{
Source: s.Source,
Destinations: slices.Clone(s.Destinations),
BuildInfo: s.BuildInfo,
}
}
// BuildInfo holds information about the build.
type BuildInfo struct {
GoVersion string
Version string
Commit string
Date string
}
// Source represents the source, currently always the mediaserver.
type Source struct {
Container Container
Live bool
LiveChangedAt time.Time
Tracks []string
ExitReason string
}
// DestinationStatus reflects the high-level status of a single destination.
type DestinationStatus int
const (
DestinationStatusOffAir DestinationStatus = iota
DestinationStatusStarting
DestinationStatusLive
)
// Destination is a single destination.
type Destination struct {
Container Container
Status DestinationStatus
Name string
URL string
}
// NetAddr holds a network address.
type NetAddr struct {
IP string
Port int
}
// IsZero returns true if the NetAddr is zero value.
func (n NetAddr) IsZero() bool {
return n.IP == "" && n.Port == 0
}
// Container status strings.
//
// TODO: refactor to strictly reflect Docker status strings.
const (
ContainerStatusPulling = "pulling" // Does not correspond to a Docker status.
ContainerStatusCreated = "created"
ContainerStatusRunning = "running"
ContainerStatusPaused = "paused"
ContainerStatusRestarting = "restarting"
ContainerStatusRemoving = "removing"
ContainerStatusExited = "exited"
ContainerStatusDead = "dead"
)
// Container represents the current state of an individual container.
type Container struct {
ID string
Status string
HealthState string
CPUPercent float64
MemoryUsageBytes uint64
RxRate int
TxRate int
RxSince time.Time
ImageName string
PullStatus string // PullStatus is the status of the image pull.
PullProgress string // PullProgress is the "progress string" of the image pull.
PullPercent int // PullPercent is the percentage of the image that has been pulled.
RestartCount int
ExitCode *int
Err error // Err is set if any error was received from the container client.
}