fathom/fathom.go

71 lines
1.9 KiB
Go
Raw Normal View History

package main
import (
"os"
2016-12-11 13:50:01 +00:00
"github.com/joho/godotenv"
"github.com/usefathom/fathom/pkg/commands"
"github.com/usefathom/fathom/pkg/counter"
"github.com/usefathom/fathom/pkg/datastore"
"gopkg.in/alecthomas/kingpin.v2"
"github.com/kelseyhightower/envconfig"
log "github.com/sirupsen/logrus"
)
type Config struct {
Database struct {
Driver string `default:"mysql"`
Host string `default:"localhost"`
User string `required:"true"`
Password string `required:"true"`
Name string `default:"fathom"`
}
Secret string `required:"true"`
}
var (
app = kingpin.New("fathom", "Simple website analytics.")
register = app.Command("register", "Register a new user.")
registerEmail = register.Arg("email", "Email for user.").Required().String()
registerPassword = register.Arg("password", "Password for user.").Required().String()
server = app.Command("server", "Start webserver.").Default()
serverPort = server.Flag("port", "Port to listen on.").Default("8080").Int()
serverWebRoot = server.Flag("webroot", "Root directory of static assets").Default("./").String()
archive = app.Command("archive", "Process unarchived data.")
)
func main() {
2016-12-11 13:50:01 +00:00
// load .env file
var cfg Config
godotenv.Load()
err := envconfig.Process("Fathom", &cfg)
2016-12-11 13:50:01 +00:00
if err != nil {
log.Fatalf("Error parsing Fathom config from environment: %s", err)
2016-12-11 13:50:01 +00:00
}
2016-11-22 21:33:50 +00:00
2016-12-11 13:50:01 +00:00
// setup database connection
dbcfg := cfg.Database
db := datastore.Init(dbcfg.Driver, dbcfg.Host, dbcfg.Name, dbcfg.User, dbcfg.Password)
defer db.Close()
2016-11-22 19:57:16 +00:00
2016-12-11 13:50:01 +00:00
// parse & run cli commands
app.Version("1.0")
app.UsageTemplate(kingpin.CompactUsageTemplate)
switch kingpin.MustParse(app.Parse(os.Args[1:])) {
case "register":
commands.Register(*registerEmail, *registerPassword)
case "server":
commands.Server(*serverPort, *serverWebRoot)
case "archive":
err := counter.Aggregate()
if err != nil {
log.Warn(err)
}
}
}