all repos — fixyoutube-go @ 4fde0f88bf0b2a1271263fadb19eebd2c2caa622

A better way to embed YouTube videos everywhere (inspired by FixTweet).

update dockerfile, remove volatile
Marco Andronaco andronacomarco@gmail.com
Sat, 23 Nov 2024 23:41:00 +0100
commit

4fde0f88bf0b2a1271263fadb19eebd2c2caa622

parent

a2037dceb0c6ef1588c64eea205c9f909399c8e1

2 files changed, 2 insertions(+), 95 deletions(-)

jump to
M DockerfileDockerfile

@@ -1,6 +1,6 @@

# syntax=docker/dockerfile:1 -FROM golang:1.22-alpine AS builder +FROM golang:1.23-alpine AS builder RUN apk add --no-cache build-base

@@ -13,13 +13,10 @@

# Transfer source code COPY templates ./templates COPY invidious ./invidious -COPY volatile ./volatile COPY *.go ./ # Build -RUN CGO_ENABLED=1 go build -ldflags='-s -w' -trimpath -o /dist/app -RUN ldd /dist/app | tr -s [:blank:] '\n' | grep ^/ | xargs -I % install -D % /dist/% -RUN ln -s ld-musl-x86_64.so.1 /dist/lib/libc.musl-x86_64.so.1 +RUN CGO_ENABLED=0 go build -trimpath -o /dist/app # Test FROM build-stage AS run-test-stage
D volatile/volatile.go

@@ -1,90 +0,0 @@

-package volatile - -import ( - "fmt" - "time" - - "github.com/sirupsen/logrus" -) - -var logger = logrus.New() - -type Element[V any] struct { - value *V - Timestamp time.Time -} - -type Volatile[K comparable, V any] struct { - data map[K]Element[V] - timeToLive time.Duration -} - -func (v *Volatile[K, V]) clean() int { - now := time.Now() - keysToDelete := []K{} - - for key, value := range v.data { - if now.Sub(value.Timestamp) > v.timeToLive { - keysToDelete = append(keysToDelete, key) - } - } - for _, key := range keysToDelete { - delete(v.data, key) - } - return len(keysToDelete) -} - -func (v *Volatile[K, V]) cleanupRoutine(interval time.Duration) { - ticker := time.NewTicker(interval) - defer ticker.Stop() - - for { - select { - case <-ticker.C: - amt := v.clean() - logger.Debug(amt, " elements were automatically removed from cache.") - } - } -} - -func NewVolatile[K comparable, V any](timeToLive time.Duration, cleanupInterval time.Duration) *Volatile[K, V] { - v := &Volatile[K, V]{ - data: make(map[K]Element[V]), - timeToLive: timeToLive, - } - go v.cleanupRoutine(cleanupInterval) - return v -} - -func (v *Volatile[K, V]) Has(key K) bool { - v.clean() - _, ok := v.data[key] - return ok -} - -func (v *Volatile[K, V]) Get(key K) (*V, error) { - v.clean() - element, ok := v.data[key] - if !ok { - return nil, fmt.Errorf("not found") - } - return element.value, nil -} - -func (v *Volatile[K, V]) Remove(key K) (*V, error) { - v.clean() - value, ok := v.data[key] - - if ok { - delete(v.data, key) - return value.value, nil - } - - return nil, fmt.Errorf("not found") -} - -func (v *Volatile[K, V]) Set(key K, value *V) error { - v.data[key] = Element[V]{value: value, Timestamp: time.Now()} - v.clean() - return nil -}