aboutsummaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorRasmus Dahlberg <rasmus@rgdd.se>2023-12-31 09:39:25 +0100
committerRasmus Dahlberg <rasmus@rgdd.se>2024-01-07 20:22:23 +0100
commite18d36ebae30536c77c61cd5da123991e0ca1629 (patch)
treebf4880c0019a6009ab1b671e23ef4a1a4a5e8e08 /main.go
parent54d980afcbd6f0011d6a162e0003587d26a3e311 (diff)
Add drafty prototype
Diffstat (limited to 'main.go')
-rw-r--r--main.go109
1 files changed, 0 insertions, 109 deletions
diff --git a/main.go b/main.go
deleted file mode 100644
index 14c1b71..0000000
--- a/main.go
+++ /dev/null
@@ -1,109 +0,0 @@
-package main
-
-import (
- "context"
- "errors"
- "flag"
- "fmt"
- "os"
- "os/signal"
- "sync"
- "syscall"
-
- "rgdd.se/silent-ct/internal/manager"
- "rgdd.se/silent-ct/internal/options"
- "rgdd.se/silent-ct/pkg/monitor"
- "rgdd.se/silent-ct/pkg/server"
-)
-
-func main() {
- opts, err := options.New(os.Args[0], os.Args[1:])
- if err != nil {
- if errors.Is(err, flag.ErrHelp) {
- os.Exit(0)
- }
- die("options: %v", err)
- }
- var c options.Config
- if err := c.FromFile(opts.ConfigFile); err != nil {
- die("configuration: %v", err)
- }
- fmt.Printf("%v\n", c)
-
- srv, err := server.New(server.Config{Address: opts.ListenAddr, Nodes: c.Nodes})
- if err != nil {
- die("create new server: %v", err)
- }
- mon, err := monitor.New(monitor.Config{Callback: &c.Monitor})
- if err != nil {
- die("create new monitor: %v", err)
- }
- mgr, err := manager.New(manager.Config{Nodes: c.Nodes})
- if err != nil {
- die("create new manager: %v", err)
- }
-
- configCh := make(chan []monitor.MessageLogConfig)
- defer close(configCh)
-
- progressCh := make(chan monitor.MessageLogProgress)
- defer close(progressCh)
-
- submitCh := make(chan server.MessageNodeSubmission)
- defer close(submitCh)
-
- errorCh := make(chan error)
- defer close(errorCh)
-
- ctx, cancel := context.WithCancel(context.Background())
- var wg sync.WaitGroup
- defer wg.Wait()
-
- wg.Add(1)
- go func() {
- defer wg.Done()
- defer cancel()
- await(ctx)
- }()
-
- wg.Add(1)
- go func() {
- defer wg.Done()
- defer cancel()
- if err := srv.Run(ctx, submitCh, errorCh); err != nil {
- die("server: %v\n", err)
- }
- }()
-
- wg.Add(1)
- go func() {
- defer wg.Done()
- defer cancel()
- mon.Run(ctx, configCh, progressCh, errorCh)
- }()
-
- wg.Add(1)
- go func() {
- defer wg.Done()
- defer cancel()
- if err := mgr.Run(ctx, submitCh, progressCh, configCh, errorCh); err != nil {
- die("manager: %v\n", err)
- }
- }()
-}
-
-func await(ctx context.Context) {
- sigs := make(chan os.Signal, 1)
- defer close(sigs)
-
- signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
- select {
- case <-sigs:
- case <-ctx.Done():
- }
-}
-
-func die(format string, args ...interface{}) {
- fmt.Printf("fatal: "+format, args)
- os.Exit(1)
-}