main.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package main
  2. import (
  3. "apiote.xyz/p/szczanieckiej/config"
  4. "apiote.xyz/p/szczanieckiej/server"
  5. "apiote.xyz/p/szczanieckiej/traffic"
  6. "context"
  7. "fmt"
  8. "log"
  9. "os"
  10. "os/signal"
  11. "syscall"
  12. )
  13. func main() {
  14. if len(os.Args) == 1 {
  15. fmt.Println("bimba_server [-c <config>] <command> ")
  16. os.Exit(1)
  17. }
  18. configFilePath := "/etc/bimba.toml"
  19. command := os.Args[1]
  20. if os.Args[1] == "-c" {
  21. configFilePath = os.Args[2]
  22. command = os.Args[3]
  23. }
  24. cfg, err := config.Read(configFilePath)
  25. if err != nil {
  26. log.Printf("Error while reading config file, %v\n", err)
  27. os.Exit(1)
  28. }
  29. t := traffic.Traffic{}
  30. traffic.EnableFeeds(cfg, &t)
  31. switch command {
  32. case "convert":
  33. err := traffic.Prepare(cfg, t, -1)
  34. if err != nil {
  35. log.Println(err)
  36. os.Exit(1)
  37. }
  38. case "serve":
  39. c := make(chan os.Signal, 1)
  40. d := make(chan bool)
  41. signal.Notify(c, os.Interrupt, syscall.SIGUSR1)
  42. go traffic.Initialise(c, d, cfg, &t)
  43. c <- syscall.SIGUSR1
  44. srv := server.Route(cfg, &t)
  45. <-d
  46. if err := srv.Shutdown(context.Background()); err != nil {
  47. panic(err)
  48. }
  49. fmt.Println("\nNothing Arrived")
  50. }
  51. }