diff options
| author | Bryan Newbold <bnewbold@robocracy.org> | 2018-05-09 23:30:30 -0700 | 
|---|---|---|
| committer | Bryan Newbold <bnewbold@robocracy.org> | 2018-05-09 23:30:30 -0700 | 
| commit | c5f0e88700ee11be7343ff11bcddf3c9a2a28486 (patch) | |
| tree | d2236b4d5daa27fe52e5763c134043e6e7a5608c /golang/cmd | |
| parent | 6f8177979c1dac59902d435cd8d7def38f4ba4d1 (diff) | |
| download | fatcat-c5f0e88700ee11be7343ff11bcddf3c9a2a28486.tar.gz fatcat-c5f0e88700ee11be7343ff11bcddf3c9a2a28486.zip | |
refactor commands (cobra)
Diffstat (limited to 'golang/cmd')
| -rw-r--r-- | golang/cmd/fatcatd/main.go | 118 | ||||
| -rw-r--r-- | golang/cmd/fatcatd/root.go | 65 | ||||
| -rw-r--r-- | golang/cmd/fatcatd/serve.go | 110 | 
3 files changed, 177 insertions, 116 deletions
| diff --git a/golang/cmd/fatcatd/main.go b/golang/cmd/fatcatd/main.go index 15309345..a2ad8ee2 100644 --- a/golang/cmd/fatcatd/main.go +++ b/golang/cmd/fatcatd/main.go @@ -1,123 +1,9 @@ - +   package main  import ( -	"os" -	"net/http" - -    log "github.com/sirupsen/logrus" -	loads "github.com/go-openapi/loads" -	flags "github.com/jessevdk/go-flags" -	//middleware "github.com/go-openapi/runtime/middleware" -    "github.com/spf13/viper" -    "github.com/getsentry/raven-go" -    "github.com/carbocation/interpose" -    "github.com/carbocation/interpose/adaptors" -    "github.com/meatballhat/negroni-logrus" -    "github.com/go-pg/pg" - -	"git.archive.org/bnewbold/fatcat/golang/api/handlers" -	"git.archive.org/bnewbold/fatcat/golang/gen/restapi" -	"git.archive.org/bnewbold/fatcat/golang/gen/restapi/operations"  ) -func init() { - -    viper.SetDefault("port", 9411) -    viper.SetDefault("verbose", true) - -    viper.SetEnvPrefix("FATCAT") -    viper.AutomaticEnv() - -    viper.SetConfigType("toml") -    viper.SetConfigName("fatcatd.toml") -    viper.AddConfigPath(".") -    //err := viper.ReadInConfig() -    //if err != nil { -    //    log.Fatalf("Error loading config: %s \n", err) -    //} - -    // not default of stderr -    log.SetOutput(os.Stdout); - -    raven.SetDSN(viper.GetString("sentry_dsn")); - -} -  func main() { - -    log.Warn("Starting up..."); - -    // load embedded swagger file -    swaggerSpec, err := loads.Analyzed(restapi.SwaggerJSON, "") -    if err != nil { -        log.Fatalln(err) -    } - -    // create new service API -	api := operations.NewFatcatAPI(swaggerSpec) - -	// Set your custom logger if needed. Default one is log.Printf -	// Expected interface func(string, ...interface{}) -    api.Logger = log.Printf - -	server := restapi.NewServer(api) -	defer server.Shutdown() - -	parser := flags.NewParser(server, flags.Default) -	parser.ShortDescription = "fatcat" -	parser.LongDescription = "A scalable, versioned, API-oriented catalog of bibliographic entities and file metadata" - -	server.ConfigureFlags() -	for _, optsGroup := range api.CommandLineOptionsGroups { -		_, err := parser.AddGroup(optsGroup.ShortDescription, optsGroup.LongDescription, optsGroup.Options) -		if err != nil { -			log.Fatalln(err) -		} -	} - -	if _, err := parser.Parse(); err != nil { -		code := 1 -		if fe, ok := err.(*flags.Error); ok { -			if fe.Type == flags.ErrHelp { -				code = 0 -			} -		} -		os.Exit(code) -	} - -    server.Port = viper.GetInt("port") - -    db := pg.Connect(&pg.Options{ -        User: "bnewbold", // XXX: -        Database: "fatcat", -    }) -    defer db.Close() - -    // register all the many handlers here -	api.GetCreatorIDHandler = handlers.NewGetCreatorIDHandler(db); -    api.PostCreatorHandler = handlers.NewPostCreatorHandler(db); - -    middle := interpose.New() - -    // sentry and upstream -    // XXX: middle.UseHandler(sentry.Recovery(raven.DefaultClient, false)) - -    // logging -    negroniMiddleware := negronilogrus.NewMiddleware() -    middle.Use(adaptors.FromNegroni(negroniMiddleware)) - -    // add clacks (TODO: only production) -    middle.UseHandler(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { -        rw.Header().Set("X-Clacks-Overhead:", "GNU Aaron Swartz, John Perry Barlow") -    })) - -    middle.UseHandler(api.Serve(nil)) - -    server.SetHandler(middle) - -	if err := server.Serve(); err != nil { -		log.Fatalln(err) -	} - +    Execute()  } diff --git a/golang/cmd/fatcatd/root.go b/golang/cmd/fatcatd/root.go new file mode 100644 index 00000000..8c1bc586 --- /dev/null +++ b/golang/cmd/fatcatd/root.go @@ -0,0 +1,65 @@ + +package main + +import ( +	"os" +	"fmt" + +    log "github.com/sirupsen/logrus" +	//middleware "github.com/go-openapi/runtime/middleware" +    "github.com/spf13/viper" +    "github.com/spf13/cobra" +    "github.com/getsentry/raven-go" +) + +var cfgFile = ""; + +var rootCmd = &cobra.Command{ +    Use:   "fatcatd", +    Short: "REST API Server", +	Long:  "A scalable, versioned, API-oriented catalog of bibliographic entities and file metadata", +} + +func init() { +    cobra.OnInitialize(initConfig) +    rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is ./fatcatd.toml)") +    rootCmd.PersistentFlags().BoolP("verbose", "v", false, "increase logging volume") + +    rootCmd.AddCommand(serveCmd) +} + +func initConfig() { +    viper.SetDefault("port", 9411) +    viper.SetDefault("verbose", true) + +    viper.SetEnvPrefix("FATCAT") +    viper.AutomaticEnv() + + +    if cfgFile != "" { +        // Use config file from the flag. +        viper.SetConfigFile(cfgFile) +    } else { +        viper.SetConfigType("toml") +        viper.AddConfigPath(".") +        viper.SetConfigName("fatcatd") +    } + +    err := viper.ReadInConfig() +    if err != nil { +        log.Fatalf("Error loading config: %s \n", err) +    } + +    // not default of stderr +    log.SetOutput(os.Stdout); + +    raven.SetDSN(viper.GetString("sentry_dsn")); + +} + +func Execute() { +    if err := rootCmd.Execute(); err != nil { +        fmt.Println(err) +        os.Exit(1) +    } +} diff --git a/golang/cmd/fatcatd/serve.go b/golang/cmd/fatcatd/serve.go new file mode 100644 index 00000000..dcee4f4f --- /dev/null +++ b/golang/cmd/fatcatd/serve.go @@ -0,0 +1,110 @@ + +package main + +import ( +	//"os" +	"net/http" + +    "github.com/spf13/viper" +    log "github.com/sirupsen/logrus" +	loads "github.com/go-openapi/loads" +	//flags "github.com/jessevdk/go-flags" +    //"github.com/getsentry/raven-go" +    "github.com/carbocation/interpose" +    "github.com/carbocation/interpose/adaptors" +    "github.com/meatballhat/negroni-logrus" +    "github.com/go-pg/pg" +    "github.com/spf13/cobra" + +	"git.archive.org/bnewbold/fatcat/golang/api/handlers" +	"git.archive.org/bnewbold/fatcat/golang/gen/restapi" +	"git.archive.org/bnewbold/fatcat/golang/gen/restapi/operations" +) + +var serveCmd = &cobra.Command{ +    Use:    "serve [options]", +    Short:  "Run fatcat REST API server", +    Run:    func(cmd *cobra.Command, args[] string) { +        main_serve() +    }, +} + +func main_serve() { + +    log.Warn("Starting up..."); + +    // load embedded swagger file +    swaggerSpec, err := loads.Analyzed(restapi.SwaggerJSON, "") +    if err != nil { +        log.Fatalln(err) +    } + +    // create new service API +	api := operations.NewFatcatAPI(swaggerSpec) + +	// Set your custom logger if needed. Default one is log.Printf +	// Expected interface func(string, ...interface{}) +    api.Logger = log.Printf + +	server := restapi.NewServer(api) +	defer server.Shutdown() + +/* +	parser := flags.NewParser(server, flags.Default) +	parser.ShortDescription = "fatcat" +	parser.LongDescription = "A scalable, versioned, API-oriented catalog of bibliographic entities and file metadata" + +	server.ConfigureFlags() +	for _, optsGroup := range api.CommandLineOptionsGroups { +		_, err := parser.AddGroup(optsGroup.ShortDescription, optsGroup.LongDescription, optsGroup.Options) +		if err != nil { +			log.Fatalln(err) +		} +	} + +	if _, err := parser.Parse(); err != nil { +		code := 1 +		if fe, ok := err.(*flags.Error); ok { +			if fe.Type == flags.ErrHelp { +				code = 0 +			} +		} +		os.Exit(code) +	} +*/ + +    server.Port = viper.GetInt("port") + +    db := pg.Connect(&pg.Options{ +        User: "bnewbold", // XXX: +        Database: "fatcat", +    }) +    defer db.Close() + +    // register all the many handlers here +	api.GetCreatorIDHandler = handlers.NewGetCreatorIDHandler(db); +    api.PostCreatorHandler = handlers.NewPostCreatorHandler(db); + +    middle := interpose.New() + +    // sentry and upstream +    // XXX: middle.UseHandler(sentry.Recovery(raven.DefaultClient, false)) + +    // logging +    negroniMiddleware := negronilogrus.NewMiddleware() +    middle.Use(adaptors.FromNegroni(negroniMiddleware)) + +    // add clacks (TODO: only production) +    middle.UseHandler(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { +        rw.Header().Set("X-Clacks-Overhead:", "GNU Aaron Swartz, John Perry Barlow") +    })) + +    middle.UseHandler(api.Serve(nil)) + +    server.SetHandler(middle) + +	if err := server.Serve(); err != nil { +		log.Fatalln(err) +	} + +} | 
