package main import ( "context" "flag" "log/slog" "os" "strconv" "time" "github.com/eagleusb/proxycon/internal/data" "github.com/eagleusb/proxycon/internal/server" ) var ( version = "dev" buildTime = "unknown" ) func main() { port := flag.Int("port", 8080, "HTTP listening port") verbose := flag.Bool("verbose", false, "enable DEBUG log level") page := flag.Int("page", 10, "page size for /list endpoint") versionFlag := flag.Bool("version", false, "print version and exit") flag.Parse() if *versionFlag { slog.Info("proxycon version", "vers", version, "built", buildTime) os.Exit(0) } if *port <= 1024 || *port > 65535 { slog.Error("invalid port number", "port", *port) os.Exit(1) } opts := &slog.HandlerOptions{Level: slog.LevelInfo} if *verbose { opts.Level = slog.LevelDebug } logger := slog.New(slog.NewTextHandler(os.Stdout, opts)) slog.SetDefault(logger) datasource := data.NewBitcoinPrices() ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) defer cancel() if err := datasource.SetPrices(ctx); err != nil { slog.Error("failed to fetch prices from datasource", "error", err) os.Exit(1) } addr := ":" + strconv.Itoa(*port) slog.Info("starting proxycon", "addr", addr, "page_size", *page, "version", version) if err := server.NewServer(datasource, *page).Listen(addr); err != nil { slog.Error("proxycon init failed", "error", err) os.Exit(1) } }