aboutsummaryrefslogtreecommitdiffstats
path: root/golang/cmd
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@robocracy.org>2018-05-09 23:30:30 -0700
committerBryan Newbold <bnewbold@robocracy.org>2018-05-09 23:30:30 -0700
commitc5f0e88700ee11be7343ff11bcddf3c9a2a28486 (patch)
treed2236b4d5daa27fe52e5763c134043e6e7a5608c /golang/cmd
parent6f8177979c1dac59902d435cd8d7def38f4ba4d1 (diff)
downloadfatcat-c5f0e88700ee11be7343ff11bcddf3c9a2a28486.tar.gz
fatcat-c5f0e88700ee11be7343ff11bcddf3c9a2a28486.zip
refactor commands (cobra)
Diffstat (limited to 'golang/cmd')
-rw-r--r--golang/cmd/fatcatd/main.go118
-rw-r--r--golang/cmd/fatcatd/root.go65
-rw-r--r--golang/cmd/fatcatd/serve.go110
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)
+ }
+
+}