mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 20:02:27 -06:00 
			
		
		
		
	* Add whereNotEmptyAndNotNull * Add GetRemoteOlderThanDays * Add GetRemoteOlderThanDays * Add PruneRemote to Manager interface * Start implementing PruneRemote * add new attachment + status to tests * fix up and test GetRemoteOlderThan * fix bad import * PruneRemote: return number pruned * add Cached column to mediaattachment * update + test pruneRemote * update mediaTest * use Cached column * upstep bun to latest version * embed structs in mediaAttachment * migrate mediaAttachment to new format * don't default cached to true * select only remote media * update db dependencies * step bun back to last working version * update pruneRemote to use Cached field * fix storage path of test attachments * add recache logic to manager * fix trimmed aspect ratio * test prune and recache * return errwithcode * tidy up different paths for emoji vs attachment * fix incorrect thumbnail type being stored * expose TransportController to media processor * implement tee-ing recached content * add thoughts of dog to test fedi attachments * test get remote files * add comment on PruneRemote * add postData cleanup to recache * test thumbnail fetching * add incredible diagram * go mod tidy * buffer pipes for recache streaming * test for client stops reading after 1kb * add media-remote-cache-days to config * add cron package * wrap logrus so it's available to cron * start and stop cron jobs gracefully
		
			
				
	
	
		
			86 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package cron
 | 
						|
 | 
						|
import (
 | 
						|
	"io/ioutil"
 | 
						|
	"log"
 | 
						|
	"os"
 | 
						|
	"strings"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
// DefaultLogger is used by Cron if none is specified.
 | 
						|
var DefaultLogger Logger = PrintfLogger(log.New(os.Stdout, "cron: ", log.LstdFlags))
 | 
						|
 | 
						|
// DiscardLogger can be used by callers to discard all log messages.
 | 
						|
var DiscardLogger Logger = PrintfLogger(log.New(ioutil.Discard, "", 0))
 | 
						|
 | 
						|
// Logger is the interface used in this package for logging, so that any backend
 | 
						|
// can be plugged in. It is a subset of the github.com/go-logr/logr interface.
 | 
						|
type Logger interface {
 | 
						|
	// Info logs routine messages about cron's operation.
 | 
						|
	Info(msg string, keysAndValues ...interface{})
 | 
						|
	// Error logs an error condition.
 | 
						|
	Error(err error, msg string, keysAndValues ...interface{})
 | 
						|
}
 | 
						|
 | 
						|
// PrintfLogger wraps a Printf-based logger (such as the standard library "log")
 | 
						|
// into an implementation of the Logger interface which logs errors only.
 | 
						|
func PrintfLogger(l interface{ Printf(string, ...interface{}) }) Logger {
 | 
						|
	return printfLogger{l, false}
 | 
						|
}
 | 
						|
 | 
						|
// VerbosePrintfLogger wraps a Printf-based logger (such as the standard library
 | 
						|
// "log") into an implementation of the Logger interface which logs everything.
 | 
						|
func VerbosePrintfLogger(l interface{ Printf(string, ...interface{}) }) Logger {
 | 
						|
	return printfLogger{l, true}
 | 
						|
}
 | 
						|
 | 
						|
type printfLogger struct {
 | 
						|
	logger  interface{ Printf(string, ...interface{}) }
 | 
						|
	logInfo bool
 | 
						|
}
 | 
						|
 | 
						|
func (pl printfLogger) Info(msg string, keysAndValues ...interface{}) {
 | 
						|
	if pl.logInfo {
 | 
						|
		keysAndValues = formatTimes(keysAndValues)
 | 
						|
		pl.logger.Printf(
 | 
						|
			formatString(len(keysAndValues)),
 | 
						|
			append([]interface{}{msg}, keysAndValues...)...)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (pl printfLogger) Error(err error, msg string, keysAndValues ...interface{}) {
 | 
						|
	keysAndValues = formatTimes(keysAndValues)
 | 
						|
	pl.logger.Printf(
 | 
						|
		formatString(len(keysAndValues)+2),
 | 
						|
		append([]interface{}{msg, "error", err}, keysAndValues...)...)
 | 
						|
}
 | 
						|
 | 
						|
// formatString returns a logfmt-like format string for the number of
 | 
						|
// key/values.
 | 
						|
func formatString(numKeysAndValues int) string {
 | 
						|
	var sb strings.Builder
 | 
						|
	sb.WriteString("%s")
 | 
						|
	if numKeysAndValues > 0 {
 | 
						|
		sb.WriteString(", ")
 | 
						|
	}
 | 
						|
	for i := 0; i < numKeysAndValues/2; i++ {
 | 
						|
		if i > 0 {
 | 
						|
			sb.WriteString(", ")
 | 
						|
		}
 | 
						|
		sb.WriteString("%v=%v")
 | 
						|
	}
 | 
						|
	return sb.String()
 | 
						|
}
 | 
						|
 | 
						|
// formatTimes formats any time.Time values as RFC3339.
 | 
						|
func formatTimes(keysAndValues []interface{}) []interface{} {
 | 
						|
	var formattedArgs []interface{}
 | 
						|
	for _, arg := range keysAndValues {
 | 
						|
		if t, ok := arg.(time.Time); ok {
 | 
						|
			arg = t.Format(time.RFC3339)
 | 
						|
		}
 | 
						|
		formattedArgs = append(formattedArgs, arg)
 | 
						|
	}
 | 
						|
	return formattedArgs
 | 
						|
}
 |