From a174e6834d474b09df2f14e6e958de66405268ae Mon Sep 17 00:00:00 2001 From: Bel LaPointe <153096461+breel-render@users.noreply.github.com> Date: Thu, 24 Apr 2025 21:12:46 -0600 Subject: [PATCH] shuffle --- src/cmd/cron.go | 10 ---------- src/cmd/cron/main.go | 10 ++++++++++ src/cmd/main.go | 31 ++++++++++++++++++++++++++----- src/cmd/server.go | 10 ---------- src/cmd/server/main.go | 10 ++++++++++ 5 files changed, 46 insertions(+), 25 deletions(-) delete mode 100644 src/cmd/cron.go create mode 100644 src/cmd/cron/main.go delete mode 100644 src/cmd/server.go create mode 100644 src/cmd/server/main.go diff --git a/src/cmd/cron.go b/src/cmd/cron.go deleted file mode 100644 index f5ce4cc..0000000 --- a/src/cmd/cron.go +++ /dev/null @@ -1,10 +0,0 @@ -package cmd - -import ( - "context" - "io" -) - -func cron(ctx context.Context) error { - return io.EOF -} diff --git a/src/cmd/cron/main.go b/src/cmd/cron/main.go new file mode 100644 index 0000000..15906e4 --- /dev/null +++ b/src/cmd/cron/main.go @@ -0,0 +1,10 @@ +package cron + +import ( + "context" + "io" +) + +func Main(ctx context.Context) error { + return io.EOF +} diff --git a/src/cmd/main.go b/src/cmd/main.go index 6b3ace7..e3e5ea0 100644 --- a/src/cmd/main.go +++ b/src/cmd/main.go @@ -3,26 +3,47 @@ package cmd import ( "context" "fmt" + "log" + "show-rss/src/cmd/cron" + "show-rss/src/cmd/server" "show-rss/src/pool" + "time" ) func Main(ctx context.Context) error { ctx, can := context.WithCancel(ctx) defer can() - foos := map[string]func() error{ - "server": func() error { return server(ctx) }, - "cron": func() error { return cron(ctx) }, + foos := map[string]func(context.Context) error{ + "server": server.Main, + "cron": cron.Main, } p := pool.New(len(foos)) defer p.Wait(ctx) for k, foo := range foos { - foo := foo - if err := p.Go(ctx, k, foo); err != nil { + if err := p.Go(ctx, k, runner(ctx, k, foo)); err != nil { return fmt.Errorf("failed to go %s: %v", k, err) } } return p.Wait(ctx) } + +func runner(ctx context.Context, k string, foo func(context.Context) error) func() error { + return func() error { + var err error + for { + err = foo(ctx) + if ctx.Err() == nil { + log.Printf("%s failed; restarting: %v", k, err) + } + select { + case <-ctx.Done(): + break + case <-time.After(time.Second): + } + } + return err + } +} diff --git a/src/cmd/server.go b/src/cmd/server.go deleted file mode 100644 index 4525918..0000000 --- a/src/cmd/server.go +++ /dev/null @@ -1,10 +0,0 @@ -package cmd - -import ( - "context" - "io" -) - -func server(ctx context.Context) error { - return io.EOF -} diff --git a/src/cmd/server/main.go b/src/cmd/server/main.go new file mode 100644 index 0000000..99530a9 --- /dev/null +++ b/src/cmd/server/main.go @@ -0,0 +1,10 @@ +package server + +import ( + "context" + "io" +) + +func Main(ctx context.Context) error { + return io.EOF +}