dashboard

package
v0.0.0-...-168bfd8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 8, 2026 License: GPL-3.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

View Source
const (
	EncoderWorkingAllowanceBytes uint64 = 512 * 1024 * 1024
	MinimumSafetyReserveBytes    uint64 = 2 * 1024 * 1024 * 1024
	CriticalFreeSpaceBytes       uint64 = 512 * 1024 * 1024
)

Variables

View Source
var (
	ErrInsufficientDiskSpace = errors.New("insufficient disk space")
	ErrCriticalDiskSpace     = errors.New("critical low disk space")
)
View Source
var ErrInvalidPath = errors.New("invalid movie path")
View Source
var ErrJobPersistence = errors.New("job persistence failed")
View Source
var ErrUnknownRoot = errors.New("unknown media root")

Functions

func CalculatePresetMB

func CalculatePresetMB(size int64, preset string, exact int64) (int64, string, error)

func FormatBytes

func FormatBytes(bytes uint64) string

func SupportedVideo

func SupportedVideo(path string) bool

func TargetBytesFromMB

func TargetBytesFromMB(megabytes int64) uint64

Types

type CLIRunner

type CLIRunner struct {
	// contains filtered or unexported fields
}

func NewCLIRunner

func NewCLIRunner(roots *RootRegistry, shrinkrayBin string) *CLIRunner

func (*CLIRunner) Run

func (r *CLIRunner) Run(ctx context.Context, job *Job, stage func(string), progress func(ProgressUpdate), disk func(DiskSpaceUpdate), logLine func(string)) (RunResult, error)

type DiskSpaceChecker

type DiskSpaceChecker interface {
	Check(string, uint64) (DiskSpaceStatus, error)
}

type DiskSpaceStatus

type DiskSpaceStatus struct {
	AvailableBytes uint64
	CapacityBytes  uint64
	RequiredBytes  uint64
	ReserveBytes   uint64
	Sufficient     bool
	Warning        bool
}

func CalculateDiskSpace

func CalculateDiskSpace(targetBytes, availableBytes, capacityBytes uint64) DiskSpaceStatus

type DiskSpaceUpdate

type DiskSpaceUpdate struct {
	AvailableBytes uint64
	RequiredBytes  uint64
	ReserveBytes   uint64
	Warning        bool
}

type EncoderAvailability

type EncoderAvailability struct {
	Software bool `json:"software"`
	QSV      bool `json:"qsv"`
	VAAPI    bool `json:"vaapi"`
	NVENC    bool `json:"nvenc"`
}

type EncoderCapabilities

type EncoderCapabilities struct {
	Encoders     EncoderAvailability `json:"encoders"`
	AutoSelected string              `json:"auto_selected"`
}

type FileEntry

type FileEntry struct {
	Name string `json:"name"`
	Path string `json:"path"`
	Type string `json:"type"`
	Size int64  `json:"size,omitempty"`
}

type FileList

type FileList struct {
	Path    string      `json:"path"`
	Parent  *string     `json:"parent"`
	Entries []FileEntry `json:"entries"`
}

type FilesystemDiskSpaceChecker

type FilesystemDiskSpaceChecker struct{}

func (FilesystemDiskSpaceChecker) Check

func (FilesystemDiskSpaceChecker) Check(directory string, targetBytes uint64) (DiskSpaceStatus, error)

type Job

type Job struct {
	ID                   string      `json:"id"`
	RootID               string      `json:"root_id"`
	RootLabel            string      `json:"root_label"`
	Path                 string      `json:"path"`
	Filename             string      `json:"filename"`
	OutputPath           string      `json:"output_path"`
	OriginalSize         int64       `json:"original_size"`
	Settings             JobSettings `json:"settings"`
	State                JobState    `json:"state"`
	Stage                string      `json:"stage"`
	QueuedAt             time.Time   `json:"queued_at"`
	StartedAt            *time.Time  `json:"started_at,omitempty"`
	FinishedAt           *time.Time  `json:"finished_at,omitempty"`
	ElapsedSeconds       int64       `json:"elapsed_seconds"`
	ProgressPercent      float64     `json:"progress_percent"`
	StageProgressPercent float64     `json:"stage_progress_percent"`
	DurationSeconds      float64     `json:"duration_seconds"`
	ProcessedSeconds     float64     `json:"processed_seconds"`
	ETASeconds           *float64    `json:"eta_seconds"`
	EncodeSpeed          float64     `json:"encode_speed"`
	ETAIsEstimate        bool        `json:"eta_is_estimate"`
	DiskAvailableBytes   uint64      `json:"disk_available_bytes,omitempty"`
	DiskRequiredBytes    uint64      `json:"disk_required_bytes,omitempty"`
	DiskSafetyReserve    uint64      `json:"disk_safety_reserve_bytes,omitempty"`
	DiskSpaceWarning     bool        `json:"disk_space_warning,omitempty"`
	Logs                 []string    `json:"logs"`
	ResultSize           int64       `json:"result_size,omitempty"`
	SavedPercent         float64     `json:"saved_percent,omitempty"`
	Failure              string      `json:"failure,omitempty"`
	ActualEncoder        string      `json:"actual_encoder,omitempty"`
	// contains filtered or unexported fields
}

type JobManager

type JobManager struct {
	// contains filtered or unexported fields
}

func NewJobManager

func NewJobManager(roots *RootRegistry, runner JobRunner) *JobManager

func (*JobManager) Cancel

func (m *JobManager) Cancel(id string) error

func (*JobManager) ClearHistory

func (m *JobManager) ClearHistory() (int, error)

func (*JobManager) Close

func (m *JobManager) Close()

func (*JobManager) List

func (m *JobManager) List() []*Job

func (*JobManager) Submit

func (m *JobManager) Submit(rootID, path, preset, container string, keepAllAudio bool, exactMB int64, requestedEncoders ...string) (*Job, error)

type JobRunner

type JobRunner interface {
	Run(context.Context, *Job, func(string), func(ProgressUpdate), func(DiskSpaceUpdate), func(string)) (RunResult, error)
}

type JobSettings

type JobSettings struct {
	Preset           string `json:"preset"`
	Quality          string `json:"quality"`
	Container        string `json:"container"`
	KeepAllAudio     bool   `json:"keep_all_audio"`
	TargetMB         int64  `json:"target_mb"`
	RequestedEncoder string `json:"requested_encoder,omitempty"`
}

func (JobSettings) String

func (s JobSettings) String() string

type JobState

type JobState string
const (
	StateQueued    JobState = "queued"
	StateRunning   JobState = "running"
	StateCompleted JobState = "completed"
	StateFailed    JobState = "failed"
	StateCancelled JobState = "cancelled"
)

type MediaRoot

type MediaRoot struct {
	ID    string
	Label string
	Root  *SafeRoot
}

type MovieDetails

type MovieDetails struct {
	RootID         string  `json:"root_id"`
	RootLabel      string  `json:"root_label"`
	Filename       string  `json:"filename"`
	Path           string  `json:"path"`
	Size           int64   `json:"size"`
	Duration       float64 `json:"duration_seconds"`
	Width          int     `json:"width"`
	Height         int     `json:"height"`
	VideoCodec     string  `json:"video_codec"`
	AudioTracks    int     `json:"audio_tracks"`
	SubtitleTracks int     `json:"subtitle_tracks"`
}

type ProgressUpdate

type ProgressUpdate struct {
	ProgressPercent      float64
	StageProgressPercent float64
	DurationSeconds      float64
	ProcessedSeconds     float64
	ETASeconds           *float64
	EncodeSpeed          float64
	ETAIsEstimate        bool
}

type RootRegistry

type RootRegistry struct {
	// contains filtered or unexported fields
}

func NewRootRegistry

func NewRootRegistry(specs []string) (*RootRegistry, error)

func (*RootRegistry) Get

func (r *RootRegistry) Get(id string) (*MediaRoot, error)

func (*RootRegistry) Redact

func (r *RootRegistry) Redact(line string) string

func (*RootRegistry) Roots

func (r *RootRegistry) Roots() []*MediaRoot

func (*RootRegistry) Summaries

func (r *RootRegistry) Summaries() []RootSummary

type RootSummary

type RootSummary struct {
	ID    string `json:"id"`
	Label string `json:"label"`
}

type RunResult

type RunResult struct {
	Size int64
}

type SafeRoot

type SafeRoot struct {
	// contains filtered or unexported fields
}

func NewSafeRoot

func NewSafeRoot(root string) (*SafeRoot, error)

func (*SafeRoot) List

func (r *SafeRoot) List(relative string) (FileList, error)

func (*SafeRoot) Path

func (r *SafeRoot) Path() string

func (*SafeRoot) Probe

func (r *SafeRoot) Probe(relative string) (MovieDetails, error)

func (*SafeRoot) ResolveDir

func (r *SafeRoot) ResolveDir(relative string) (string, string, error)

func (*SafeRoot) ResolveVideo

func (r *SafeRoot) ResolveVideo(relative string) (string, string, error)

type Server

type Server struct {
	// contains filtered or unexported fields
}

func NewServer

func NewServer(roots *RootRegistry, shrinkrayBin, stateDir, version string) (*Server, error)

func (*Server) Close

func (s *Server) Close()

func (*Server) Handler

func (s *Server) Handler() http.Handler

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL