main.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "strings"
  6. "github.com/spf13/pflag"
  7. "github.com/spf13/viper"
  8. "github.com/kellegous/go/backend"
  9. "github.com/kellegous/go/backend/leveldb"
  10. "github.com/kellegous/go/web"
  11. )
  12. func main() {
  13. pflag.String("addr", ":8067", "default bind address")
  14. pflag.Bool("admin", false, "allow admin-level requests")
  15. pflag.String("version", "", "version string")
  16. pflag.String("backend", "leveldb", "backing store to use. Only 'leveldb' currently supported.")
  17. pflag.String("data", "data", "The location of the leveldb data directory")
  18. pflag.Parse()
  19. if err := viper.BindPFlags(pflag.CommandLine); err != nil {
  20. log.Panic(err)
  21. }
  22. // allow env vars to set pflags
  23. viper.AutomaticEnv()
  24. viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
  25. var backend backend.Backend
  26. switch viper.GetString("backend") {
  27. case "leveldb":
  28. var err error
  29. backend, err = leveldb.New(viper.GetString("data"))
  30. if err != nil {
  31. log.Panic(err)
  32. }
  33. default:
  34. log.Panic(fmt.Sprintf("unknown backend %s", viper.GetString("backend")))
  35. }
  36. defer backend.Close()
  37. log.Panic(web.ListenAndServe(backend))
  38. }