Skip to content

Commit

Permalink
Add ability to disable thumbs and recording (#80)
Browse files Browse the repository at this point in the history
This was requested by fishtank as their thumbs were leaking
  • Loading branch information
mjh1 authored Oct 19, 2024
1 parent 3517b44 commit 3f7c262
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 5 deletions.
25 changes: 24 additions & 1 deletion catalyst-uploader.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ func run() int {
timeout := fs.Duration("t", 30*time.Second, "Upload timeout")
storageFallbackURLs := CommaMapFlag(fs, "storage-fallback-urls", `Comma-separated map of primary to backup storage URLs. If a file fails uploading to one of the primary storages (detected by prefix), it will fallback to the corresponding backup URL after having the prefix replaced`)
segTimeout := fs.Duration("segment-timeout", 5*time.Minute, "Segment write timeout")
disableRecording := CommaSliceFlag(fs, "disable-recording", `Comma-separated list of playbackIDs to disable recording for`)
disableThumbs := CommaSliceFlag(fs, "disable-thumbs", `Comma-separated list of playbackIDs to disable thumbs for`)

defaultConfigFile := "/etc/livepeer/catalyst_uploader.conf"
if _, err := os.Stat(defaultConfigFile); os.IsNotExist(err) {
Expand Down Expand Up @@ -100,8 +102,15 @@ func run() int {
return 1
}

for _, playbackID := range *disableRecording {
if strings.Contains(uri.Path, playbackID) {
glog.Errorf("Uploader disabled for %s", uri.Redacted())
return 0
}
}

start := time.Now()
out, err := core.Upload(os.Stdin, uri, WaitBetweenWrites, *timeout, *storageFallbackURLs, *segTimeout)
out, err := core.Upload(os.Stdin, uri, WaitBetweenWrites, *timeout, *storageFallbackURLs, *segTimeout, *disableThumbs)
if err != nil {
glog.Errorf("Uploader failed for %s: %s", uri.Redacted(), err)
return 1
Expand All @@ -124,6 +133,20 @@ func run() int {
return 0
}

// handles -foo=value1,value2,value3
func CommaSliceFlag(fs *flag.FlagSet, name string, usage string) *[]string {
var dest []string
fs.Func(name, usage, func(s string) error {
split := strings.Split(s, ",")
if len(split) == 1 && split[0] == "" {
return nil
}
dest = split
return nil
})
return &dest
}

// handles -foo=key1=value1,key2=value2
func CommaMapFlag(fs *flag.FlagSet, name string, usage string) *map[string]string {
var dest map[string]string
Expand Down
13 changes: 10 additions & 3 deletions core/uploader.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ var expiryField = map[string]string{
"Object-Expires": "+168h", // Objects will be deleted after 7 days
}

func Upload(input io.Reader, outputURI *url.URL, waitBetweenWrites, writeTimeout time.Duration, storageFallbackURLs map[string]string, segTimeout time.Duration) (*drivers.SaveDataOutput, error) {
func Upload(input io.Reader, outputURI *url.URL, waitBetweenWrites, writeTimeout time.Duration, storageFallbackURLs map[string]string, segTimeout time.Duration, disableThumbs []string) (*drivers.SaveDataOutput, error) {
ext := filepath.Ext(outputURI.Path)
inputFile, err := os.CreateTemp("", "upload-*"+ext)
if err != nil {
Expand All @@ -78,7 +78,7 @@ func Upload(input io.Reader, outputURI *url.URL, waitBetweenWrites, writeTimeout
return nil, fmt.Errorf("failed to upload video %s: (%d bytes) %w", outputURI.Redacted(), bytesWritten, err)
}

if err = extractThumb(outputURI, inputFileName, storageFallbackURLs); err != nil {
if err = extractThumb(outputURI, inputFileName, storageFallbackURLs, disableThumbs); err != nil {
glog.Errorf("extracting thumbnail failed for %s: %v", outputURI.Redacted(), err)
}
return out, nil
Expand Down Expand Up @@ -229,7 +229,14 @@ func uploadFile(outputURI *url.URL, fileName string, fields *drivers.FilePropert
return out, bytesWritten, err
}

func extractThumb(outputURI *url.URL, segmentFileName string, storageFallbackURLs map[string]string) error {
func extractThumb(outputURI *url.URL, segmentFileName string, storageFallbackURLs map[string]string, disableThumbs []string) error {
for _, playbackID := range disableThumbs {
if strings.Contains(outputURI.Path, playbackID) {
glog.Infof("Thumbnails disabled for %s", outputURI.Redacted())
return nil
}
}

tmpDir, err := os.MkdirTemp(os.TempDir(), "thumb-*")
if err != nil {
return fmt.Errorf("temp file creation failed: %w", err)
Expand Down
2 changes: 1 addition & 1 deletion core/uploader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ func TestItWritesSlowInputIncrementally(t *testing.T) {
go func() {
u, err := url.Parse(outputFile.Name())
require.NoError(t, err)
_, err = Upload(slowReader, u, 100*time.Millisecond, time.Second, nil, time.Minute)
_, err = Upload(slowReader, u, 100*time.Millisecond, time.Second, nil, time.Minute, nil)
require.NoError(t, err, "")
}()

Expand Down

0 comments on commit 3f7c262

Please sign in to comment.