diff --git a/api/api.go b/api/api.go index 769bccb..1fcb143 100644 --- a/api/api.go +++ b/api/api.go @@ -44,21 +44,27 @@ func (api *API) StartScheduler(ctx context.Context) error { } for _, subreddit := range subreddits { - id, err := api.scheduler.AddFunc(subreddit.Schedule, func() { - // TODO: Add download - }) + err := api.scheduleSubreddit(subreddit) if err != nil { - log. - New(ctx). - Err(err). - Error( - fmt.Sprintf("failed to start scheduler for subreddit '%s'", subreddit.Name), - "subreddit", subreddit, - ) + log.New(ctx).Err(err).Error( + fmt.Sprintf("failed to start scheduler for subreddit '%s'", subreddit.Name), + "subreddit", subreddit, + ) continue } - api.scheduleMap[id] = subreddit } return nil } + +func (api *API) scheduleSubreddit(subreddit queries.Subreddit) error { + id, err := api.scheduler.AddFunc(subreddit.Schedule, func() { + }) + if err != nil { + return errs.Wrap(err) + } + + api.scheduleMap[id] = subreddit + + return nil +} diff --git a/api/reddit/image_download_reader.go b/api/reddit/image_download_reader.go index eb44a08..7b80e50 100644 --- a/api/reddit/image_download_reader.go +++ b/api/reddit/image_download_reader.go @@ -77,7 +77,7 @@ func (idr *ImageDownloadReader) checkSpeed() { delta := idr.deltavalue.Load() - if delta >= idr.IdleSpeedThreshold { + if delta >= int64(idr.IdleSpeedThreshold) { idr.deltavalue.Store(0) idr.cancelDebounce.Stop() idr.cancelDebounce = nil diff --git a/cli/serve.go b/cli/serve.go index 49dc586..baaed68 100644 --- a/cli/serve.go +++ b/cli/serve.go @@ -3,7 +3,6 @@ package cli import ( "io/fs" "os" - "os/signal" "github.com/spf13/cobra" "github.com/tigorlazuardi/redmage/api" @@ -32,16 +31,7 @@ var serveCmd = &cobra.Command{ server := server.New(cfg, api, PublicDir) - exit := make(chan struct{}, 1) - - go func() { - sig := make(chan os.Signal, 1) - signal.Notify(sig, os.Interrupt) - <-sig - exit <- struct{}{} - }() - - if err := server.Start(exit); err != nil { + if err := server.Start(cmd.Context().Done()); err != nil { log.New(cmd.Context()).Err(err).Error("failed to start server") os.Exit(1) } diff --git a/go.mod b/go.mod index 470bbc6..1177a83 100644 --- a/go.mod +++ b/go.mod @@ -30,6 +30,8 @@ require ( require ( github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/stdr v1.2.2 // indirect github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/knadh/koanf/maps v0.1.1 // indirect @@ -38,6 +40,9 @@ require ( github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/sethvargo/go-retry v0.2.4 // indirect + go.opentelemetry.io/otel v1.25.0 // indirect + go.opentelemetry.io/otel/metric v1.25.0 // indirect + go.opentelemetry.io/otel/trace v1.25.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20231219180239-dc181d75b848 // indirect golang.org/x/sync v0.6.0 // indirect diff --git a/go.sum b/go.sum index 6435d26..216a4a2 100644 --- a/go.sum +++ b/go.sum @@ -53,6 +53,11 @@ github.com/go-faster/city v1.0.1 h1:4WAxSZ3V2Ws4QRDrscLEDcibJY8uf41H6AhXDrNDcGw= github.com/go-faster/city v1.0.1/go.mod h1:jKcUJId49qdW3L1qKHH/3wPeUstCVpVSXTM6vO3VcTw= github.com/go-faster/errors v0.6.1 h1:nNIPOBkprlKzkThvS/0YaX8Zs9KewLCOSFQS5BU06FI= github.com/go-faster/errors v0.6.1/go.mod h1:5MGV2/2T9yvlrbhe9pD9LO5Z/2zCSq2T8j+Jpi2LAyY= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-sql-driver/mysql v1.8.0 h1:UtktXaU2Nb64z/pLiGIxY4431SJ4/dR5cjMmlVHgnT4= github.com/go-sql-driver/mysql v1.8.0/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c= @@ -198,8 +203,14 @@ github.com/ydb-platform/ydb-go-sdk/v3 v3.55.1 h1:Ebo6J5AMXgJ3A438ECYotA0aK7ETqjQ github.com/ydb-platform/ydb-go-sdk/v3 v3.55.1/go.mod h1:udNPW8eupyH/EZocecFmaSNJacKKYjzQa7cVgX5U2nc= go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc= go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs= +go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k= +go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg= +go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA= +go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s= go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ= go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU= +go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM= +go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= diff --git a/main.go b/main.go index 27ae781..82f667c 100644 --- a/main.go +++ b/main.go @@ -6,6 +6,7 @@ import ( "errors" "io/fs" "os" + "os/signal" "github.com/joho/godotenv" "github.com/tigorlazuardi/redmage/cli" @@ -26,7 +27,11 @@ func main() { if err != nil { panic(errors.New("failed to create sub filesystem")) } - if err := cli.RootCmd.ExecuteContext(context.Background()); err != nil { + + ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) + defer stop() + + if err := cli.RootCmd.ExecuteContext(ctx); err != nil { os.Exit(1) } } diff --git a/pkg/telemetry/telemetry.go b/pkg/telemetry/telemetry.go new file mode 100644 index 0000000..c782583 --- /dev/null +++ b/pkg/telemetry/telemetry.go @@ -0,0 +1,7 @@ +package telemetry + +type Telemetry struct{} + +func (te *Telemetry) Close() error { + return nil +}