this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 60 lines 1.4 kB view raw
1package main 2 3import ( 4 "context" 5 "flag" 6 "log/slog" 7 "os" 8 "strconv" 9 "time" 10 11 "github.com/eagleusb/proxycon/internal/data" 12 "github.com/eagleusb/proxycon/internal/server" 13) 14 15var ( 16 version = "dev" 17 buildTime = "unknown" 18) 19 20func main() { 21 port := flag.Int("port", 8080, "HTTP listening port") 22 verbose := flag.Bool("verbose", false, "enable DEBUG log level") 23 page := flag.Int("page", 10, "page size for /list endpoint") 24 versionFlag := flag.Bool("version", false, "print version and exit") 25 26 flag.Parse() 27 28 if *versionFlag { 29 slog.Info("proxycon version", "vers", version, "built", buildTime) 30 os.Exit(0) 31 } 32 33 if *port <= 1024 || *port > 65535 { 34 slog.Error("invalid port number", "port", *port) 35 os.Exit(1) 36 } 37 38 opts := &slog.HandlerOptions{Level: slog.LevelInfo} 39 if *verbose { 40 opts.Level = slog.LevelDebug 41 } 42 logger := slog.New(slog.NewTextHandler(os.Stdout, opts)) 43 slog.SetDefault(logger) 44 45 datasource := data.NewBitcoinPrices() 46 ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) 47 defer cancel() 48 49 if err := datasource.SetPrices(ctx); err != nil { 50 slog.Error("failed to fetch prices from datasource", "error", err) 51 os.Exit(1) 52 } 53 54 addr := ":" + strconv.Itoa(*port) 55 slog.Info("starting proxycon", "addr", addr, "page_size", *page, "version", version) 56 if err := server.NewServer(datasource, *page).Listen(addr); err != nil { 57 slog.Error("proxycon init failed", "error", err) 58 os.Exit(1) 59 } 60}