Documentation
¶
Index ¶
- Variables
- func IsContextFinished(ctx *context.Context) bool
- func Run(ctx *context.Context, logger Logger, hc HealthChecker, lm LibraryManager, ...)
- type AudioTrack
- type CompletedJob
- type DispatchedJob
- type File
- type FileCacheDataStorer
- type FileMetadata
- type General
- type HTTPServer
- type HealthChecker
- type HealthCheckerDataStorer
- type History
- type Job
- type JobStatus
- type Library
- type LibraryManager
- type LibraryManagerDataStorer
- type LibraryQueue
- type Logger
- type RunnerCommunicator
- type RunnerCommunicatorDataStorer
- type SettingsStorer
- type SubtitleTrack
- type UUID
- type UserInterfacer
- type UserInterfacerDataStorer
- type VideoTrack
Constants ¶
This section is empty.
Variables ¶
var ErrClosed = errors.New("attempted operation on closed struct")
ErrClosed is used when a struct is closed but an operation was attempted anyway.
var ErrEmptyQueue error = errors.New("queue is empty")
ErrEmptyQueue represents when the operation cannot be completed because the queue is empty
Functions ¶
func IsContextFinished ¶
IsContextFinished returns a boolean indicating whether or not a context.Context is finished. This replaces the need to use a select code block.
func Run ¶
func Run(ctx *context.Context, logger Logger, hc HealthChecker, lm LibraryManager, rc RunnerCommunicator, ui UserInterfacer, setLogLvl func(), testMode bool)
Run is the "top-level" function for running the Encodarr Controller. It calls all of the injected dependencies in order to operate.
Types ¶
type AudioTrack ¶
type AudioTrack struct { Index int `json:"index"` // "StreamOrder" (MI), "index" (FF) Channels int `json:"channels"` // "Channels" (MI), "channels" (FF) }
AudioTrack contains information about a singular audio stream in a media file.
type CompletedJob ¶
type CompletedJob struct { UUID UUID `json:"uuid"` Failed bool `json:"failed"` History History `json:"history"` InFile string `json:"-"` }
CompletedJob represents a job that has been completed by a Runner.
type DispatchedJob ¶
type DispatchedJob struct { UUID UUID `json:"uuid"` Runner string `json:"runner"` Job Job `json:"job"` Status JobStatus `json:"status"` LastUpdated time.Time `json:"last_updated"` }
DispatchedJob represents a job that is currently being worked on by a Runner.
type File ¶
type File struct { Path string ModTime time.Time Metadata FileMetadata }
File represents a file for the purposes of metadata reading.
type FileCacheDataStorer ¶
type FileCacheDataStorer interface { Modtime(path string) (time.Time, error) Metadata(path string) (FileMetadata, error) SaveModtime(path string, t time.Time) error SaveMetadata(path string, f FileMetadata) error }
FileCacheDataStorer defines how the FileCache stores data.
type FileMetadata ¶
type FileMetadata struct { General General `json:"general"` VideoTracks []VideoTrack `json:"video_tracks"` AudioTracks []AudioTrack `json:"audio_tracks"` SubtitleTracks []SubtitleTrack `json:"subtitle_tracks"` }
FileMetadata contains information about a video file.
type General ¶
type General struct { // It looks like any non-string field will have to be parsed Duration float32 `json:"duration"` }
General contains the general information about a media file.
type HTTPServer ¶
type HTTPServer interface { // Start starts the HTTPServer. If Start is called again, it is a no-op. Start(*context.Context, *sync.WaitGroup) Handle(pattern string, handler http.Handler) HandleFunc(pattern string, handlerFunc func(http.ResponseWriter, *http.Request)) }
HTTPServer defines how an HTTPServer should behave.
type HealthChecker ¶
type HealthChecker interface { // Run loops through the provided slice of dispatched jobs and checks if any have // surpassed the allowed time between updates. Run() (uuidsToNull []UUID) Start(ctx *context.Context) }
The HealthChecker interface describes how a struct wishing to decide if a job's last update was long enough ago to mark the Runner doing it as unresponsive should interact with the Run function.
type HealthCheckerDataStorer ¶
type HealthCheckerDataStorer interface { DispatchedJobs() []DispatchedJob DeleteJob(uuid UUID) error }
HealthCheckerDataStorer defines how a HealthChecker stores data.
type History ¶
type History struct { Filename string `json:"file"` DateTimeCompleted time.Time `json:"datetime_completed"` Warnings []string `json:"warnings"` Errors []string `json:"errors"` }
History represents a previously completed job.
type Job ¶
type Job struct { UUID UUID `json:"uuid"` Path string `json:"path"` Command []string `json:"command"` Metadata FileMetadata `json:"metadata"` }
Job represents a job to be carried out by a Runner.
type JobStatus ¶
type JobStatus struct { Stage string `json:"stage"` Percentage string `json:"percentage"` JobElapsedTime string `json:"job_elapsed_time"` FPS string `json:"fps"` StageElapsedTime string `json:"stage_elapsed_time"` StageEstimatedTimeRemaining string `json:"stage_estimated_time_remaining"` }
JobStatus represents the current status of a dispatched job.
type Library ¶
type Library struct { ID int `json:"id"` Folder string `json:"folder"` Priority int `json:"priority"` FsCheckInterval time.Duration `json:"fs_check_interval"` Queue LibraryQueue `json:"queue"` PathMasks []string `json:"path_masks"` CommandDeciderSettings string `json:"command_decider_settings"` // We are using a string for the CommandDecider settings because it is easier for the frontend to convert back and forth from when setting and reading values. }
Library represents a single library.
type LibraryManager ¶
type LibraryManager interface { // ImportCompletedJobs imports the provided jobs into the system. ImportCompletedJobs([]CompletedJob) // LibrarySettings returns the current settings of all libraries (including the queues). LibrarySettings() ([]Library, error) // PopNewJob returns a job that may be dispatched as well as deletes it from any // data stores. PopNewJob() (Job, error) // UpdateLibrarySettings loops through the provided map of new settings and applies // them to the appropriate libraries. UpdateLibrarySettings(map[int]Library) Start(ctx *context.Context, wg *sync.WaitGroup) }
The LibraryManager interface describes how a struct wishing to deal with user's libraries should interact with the Run function.
type LibraryManagerDataStorer ¶
type LibraryManagerDataStorer interface { Libraries() ([]Library, error) Library(id int) (Library, error) SaveLibrary(Library) error IsPathDispatched(path string) (bool, error) PopDispatchedJob(uuid UUID) (DispatchedJob, error) PushHistory(History) error }
LibraryManagerDataStorer defines how a LibraryManager stores data.
type LibraryQueue ¶
type LibraryQueue struct {
Items []Job
}
LibraryQueue represents a singular queue belonging to one library.
func (*LibraryQueue) Dequeue ¶
func (q *LibraryQueue) Dequeue() []Job
Dequeue returns a copy of the underlying slice in the Queue.
func (*LibraryQueue) Empty ¶
func (q *LibraryQueue) Empty() bool
Empty returns a boolean representing whether or not the queue is empty
func (*LibraryQueue) InQueue ¶
func (q *LibraryQueue) InQueue(item Job) bool
InQueue returns a boolean representing whether or not the provided item is in the queue
func (*LibraryQueue) InQueuePath ¶
func (q *LibraryQueue) InQueuePath(item Job) bool
InQueuePath returns a boolean representing whether or not the provided item is in the queue based on only the Path field
func (*LibraryQueue) Pop ¶
func (q *LibraryQueue) Pop() (Job, error)
Pop removes and returns the first item of a LibraryQueue.
func (*LibraryQueue) Push ¶
func (q *LibraryQueue) Push(item Job)
Push appends an item to the end of a LibraryQueue.
type Logger ¶
type Logger interface { Trace(s string, i ...interface{}) Debug(s string, i ...interface{}) Info(s string, i ...interface{}) Warn(s string, i ...interface{}) Error(s string, i ...interface{}) Critical(s string, i ...interface{}) }
The Logger interface defines how a logger should behave.
type RunnerCommunicator ¶
type RunnerCommunicator interface { // CompletedJobs returns a slice of jobs that are ready to be imported back into the // system. CompletedJobs() []CompletedJob // NewJob takes the provided job and sends it to a waiting Runner. NewJob(Job) // NeedNewJob returns a boolean indicating whether or not a new job is required. NeedNewJob() bool // NullifyUUIDs takes the provided slice of UUIDs and marks them // so that if a Runner sends a request with a nullified UUID, it gets notified // that it is considered unresponsive and should acquire a new job. NullifyUUIDs([]UUID) // WaitingRunners returns the names of all the Runners which are waiting for a job. WaitingRunners() (runnerNames []string) Start(ctx *context.Context, wg *sync.WaitGroup) }
The RunnerCommunicator interface describes how a struct wishing to communicate with external Runners should interact with the Run function.
type RunnerCommunicatorDataStorer ¶
type RunnerCommunicatorDataStorer interface { DispatchedJob(uuid UUID) (DispatchedJob, error) SaveDispatchedJob(DispatchedJob) error }
RunnerCommunicatorDataStorer defines how a RunnerCommunicator stores data.
type SettingsStorer ¶
type SettingsStorer interface { Load() error Save() error Close() error HealthCheckInterval() uint64 SetHealthCheckInterval(uint64) HealthCheckTimeout() uint64 SetHealthCheckTimeout(uint64) LogVerbosity() string SetLogVerbosity(string) }
The SettingsStorer defines how a struct which stores the settings in some manner should interact with other components of the application.
type SubtitleTrack ¶
type SubtitleTrack struct { Index int `json:"index"` // "StreamOrder" (MI), "index" (FF) Language string `json:"language"` // "Language" (MI), "tags.language" }
SubtitleTrack contains information about a singular text stream in a media file.
type UserInterfacer ¶
type UserInterfacer interface { // NewLibrarySettings returns a map of all updated library settings as set by the user. NewLibrarySettings() map[int]Library // SetLibrarySettings takes the provided slice of LibrarySettings and stores it // for an incoming request. SetLibrarySettings([]Library) // SetWaitingRunners stores an updated value that should be sent if a request to view // the waiting Runner is received. SetWaitingRunners(runnerNames []string) Start(ctx *context.Context, wg *sync.WaitGroup) }
The UserInterfacer interface describes how a struct wishing to interact with the user should interact with the Run function.
type UserInterfacerDataStorer ¶
type UserInterfacerDataStorer interface { DispatchedJobs() ([]DispatchedJob, error) HistoryEntries() ([]History, error) DeleteLibrary(id int) error }
UserInterfacerDataStorer defines how a UserInterfacer stores data.
type VideoTrack ¶
type VideoTrack struct { Index int `json:"index"` // "StreamOrder" (MI), "index" (FF) Codec string `json:"codec"` // Either "AVC", "HEVC", etc. // Bitrate int `json:"bitrate"` // "BitRate" (MI), "bit_rate" (FF) // Not implemented for now because I want bitrate per stream, not overall file. Width int `json:"width"` // "Width" (MI), "width" (FF) Height int `json:"height"` // "Height" (MI), "height" (FF) ColorPrimaries string `json:"color_primaries"` // "colour_primaries" (MI), "color_primaries" (FF) Will be different based on which MetadataReader is being used (FF gives "bt2020" while MI gives "BT.2020") }
VideoTrack contains information about a singular video stream in a media file.
Source Files
¶
Directories
¶
Path | Synopsis |
---|---|
options
Package options is a centralized location for all supported command-line/environment variable options for the Encodarr Controller
|
Package options is a centralized location for all supported command-line/environment variable options for the Encodarr Controller |
Package globals is the location of read-only constants such as Version, which is set at build time for release binaries.
|
Package globals is the location of read-only constants such as Version, which is set at build time for release binaries. |