this repo has no description
0
fork

Configure Feed

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

labelmaker CLI: cleanup arg parsing

+75 -77
+75 -77
cmd/labelmaker/main.go
··· 2 2 3 3 import ( 4 4 "os" 5 + "path/filepath" 5 6 6 7 "github.com/bluesky-social/indigo/carstore" 8 + cliutil "github.com/bluesky-social/indigo/cmd/gosky/util" 7 9 "github.com/bluesky-social/indigo/labeling" 8 10 "github.com/urfave/cli/v2" 9 - "gorm.io/driver/postgres" 10 - "gorm.io/driver/sqlite" 11 - "gorm.io/gorm" 12 11 13 - "go.opentelemetry.io/otel" 14 - "go.opentelemetry.io/otel/attribute" 15 - "go.opentelemetry.io/otel/exporters/jaeger" 16 - "go.opentelemetry.io/otel/sdk/resource" 17 - tracesdk "go.opentelemetry.io/otel/sdk/trace" 18 - semconv "go.opentelemetry.io/otel/semconv/v1.4.0" 12 + logging "github.com/ipfs/go-log" 13 + "github.com/joho/godotenv" 19 14 "gorm.io/plugin/opentelemetry/tracing" 20 15 ) 16 + 17 + var log = logging.Logger("labelmaker") 21 18 22 19 func main() { 23 - app := cli.NewApp() 20 + 21 + // only try dotenv if it exists 22 + if _, err := os.Stat(".env"); err == nil { 23 + err := godotenv.Load() 24 + if err != nil { 25 + log.Fatal("Error loading .env file") 26 + } 27 + } 28 + 29 + run(os.Args) 30 + } 31 + 32 + func run(args []string) { 33 + 34 + app := cli.App{ 35 + Name: "labelmaker", 36 + Usage: "atproto content labeling daemon", 37 + } 24 38 25 39 app.Flags = []cli.Flag{ 26 - &cli.BoolFlag{ 27 - Name: "jaeger", 40 + &cli.StringFlag{ 41 + Name: "db-url", 42 + Usage: "database connection string for labelmaker database", 43 + Value: "sqlite://./data/labelmaker/labelmaker.sqlite", 44 + EnvVars: []string{"DATABASE_URL"}, 28 45 }, 29 - &cli.BoolFlag{ 30 - // Temp flag for testing, eventually will just pass db connection strings here 31 - Name: "postgres", 46 + &cli.StringFlag{ 47 + Name: "carstore-db-url", 48 + Usage: "database connection string for carstore database", 49 + Value: "sqlite://./data/labelmaker/carstore.sqlite", 50 + EnvVars: []string{"CARSTORE_DATABASE_URL"}, 32 51 }, 33 52 &cli.BoolFlag{ 34 - Name: "dbtracing", 53 + Name: "db-tracing", 35 54 }, 36 - /* XXX unused? 37 55 &cli.StringFlag{ 38 - Name: "labelmakerhost", 39 - Usage: "hostname of the labelmaker", 40 - Value: "localhost:2210", 56 + Name: "data-dir", 57 + Usage: "path of directory for CAR files and other data", 58 + Value: "data/labelmaker", 59 + EnvVars: []string{"DATA_DIR"}, 41 60 }, 42 - */ 61 + &cli.StringFlag{ 62 + Name: "bgs-host", 63 + Usage: "hostname and port of BGS to subscribe to", 64 + Value: "localhost:2470", 65 + EnvVars: []string{"ATP_BGS_HOST"}, 66 + }, 67 + &cli.StringFlag{ 68 + Name: "plc-host", 69 + Usage: "method, hostname, and port of PLC registry", 70 + Value: "https://plc.directory", 71 + EnvVars: []string{"ATP_PLC_HOST"}, 72 + }, 73 + &cli.BoolFlag{ 74 + Name: "subscribe-insecure-ws", 75 + Usage: "when connecting to BGS instance, use ws:// instead of wss://", 76 + }, 43 77 } 44 78 45 79 app.Action = func(cctx *cli.Context) error { 46 80 47 - if cctx.Bool("jaeger") { 48 - url := "http://localhost:14268/api/traces" 49 - exp, err := jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint(url))) 50 - if err != nil { 51 - return err 52 - } 53 - tp := tracesdk.NewTracerProvider( 54 - // Always be sure to batch in production. 55 - tracesdk.WithBatcher(exp), 56 - // Record information about this application in a Resource. 57 - tracesdk.WithResource(resource.NewWithAttributes( 58 - semconv.SchemaURL, 59 - semconv.ServiceNameKey.String("labelmaker"), 60 - attribute.String("environment", "test"), 61 - attribute.Int64("ID", 1), 62 - )), 63 - ) 64 - 65 - otel.SetTracerProvider(tp) 66 - } 67 - 68 - pgdb := cctx.Bool("postgres") 69 - dbtracing := cctx.Bool("dbtracing") 70 - 71 81 // ensure data directory exists; won't error if it does 72 - os.MkdirAll("data/labelmaker/", os.ModePerm) 82 + datadir := cctx.String("data-dir") 83 + csdir := filepath.Join(datadir, "carstore") 84 + os.MkdirAll(datadir, os.ModePerm) 73 85 74 - var labalmakerdial gorm.Dialector 75 - if pgdb { 76 - dsn := "host=localhost user=postgres password=password dbname=labelmakerdb port=5432 sslmode=disable" 77 - labalmakerdial = postgres.Open(dsn) 78 - } else { 79 - labalmakerdial = sqlite.Open("data/labelmaker/labelmaker.sqlite") 80 - } 81 - db, err := gorm.Open(labalmakerdial, &gorm.Config{}) 86 + dburl := cctx.String("db-url") 87 + db, err := cliutil.SetupDatabase(dburl) 82 88 if err != nil { 83 89 return err 84 90 } 85 91 86 - if dbtracing { 87 - if err := db.Use(tracing.NewPlugin()); err != nil { 88 - return err 89 - } 90 - } 91 - 92 - var cardial gorm.Dialector 93 - if pgdb { 94 - dsn2 := "host=localhost user=postgres password=password dbname=cardb port=5432 sslmode=disable" 95 - cardial = postgres.Open(dsn2) 96 - } else { 97 - cardial = sqlite.Open("data/labelmaker/carstore.sqlite") 98 - } 99 - carstdb, err := gorm.Open(cardial, &gorm.Config{}) 92 + csdburl := cctx.String("carstore-db-url") 93 + csdb, err := cliutil.SetupDatabase(csdburl) 100 94 if err != nil { 101 95 return err 102 96 } 103 97 104 - if dbtracing { 105 - if err := carstdb.Use(tracing.NewPlugin()); err != nil { 98 + if cctx.Bool("db-tracing") { 99 + if err := db.Use(tracing.NewPlugin()); err != nil { 100 + return err 101 + } 102 + if err := csdb.Use(tracing.NewPlugin()); err != nil { 106 103 return err 107 104 } 108 105 } 109 106 110 - cs, err := carstore.NewCarStore(carstdb, "data/labelmaker/carstore") 107 + os.MkdirAll(filepath.Dir(csdir), os.ModePerm) 108 + cstore, err := carstore.NewCarStore(csdb, csdir) 111 109 if err != nil { 112 110 return err 113 111 } 114 112 113 + // TODO: additional config work to be done 115 114 repoDid := "did:plc:FAKE" 116 115 repoHandle := "labelmaker.test" 117 - // NOTE: connecting to PDS for now, not actual BGS 118 - //bgsUrl := "localhost:2470" 119 - bgsUrl := "localhost:4989" 120 - //plcUrl := "https://plc.directory" 121 - plcUrl := "http://localhost:2582" 122 - srv, err := labeling.NewServer(db, cs, "data/labelmaker/labelmaker.key", repoDid, repoHandle, bgsUrl, plcUrl) 116 + repoKeyPath := "data/labelmaker/labelmaker.key" 117 + bgsUrl := cctx.String("bgs-host") 118 + plcUrl := cctx.String("plc-host") 119 + 120 + srv, err := labeling.NewServer(db, cstore, repoKeyPath, repoDid, repoHandle, bgsUrl, plcUrl) 123 121 if err != nil { 124 122 return err 125 123 }