1
0
mirror of https://github.com/taigrr/shorturl synced 2025-01-18 04:03:16 -08:00
shorturl/main.go
FileGo a3409454c0
Moved database to Bitcask (#22)
* Changed URL format to shortuuid

* Fixed drone CI failure

* Moved database to Bitcask and some minor changes

* Moved database to Bitcask and some minor changes

* Delete coverage.txt
2021-05-10 23:58:17 +10:00

72 lines
1.4 KiB
Go

package main
//go:generate rice embed-go
import (
"fmt"
"log"
"os"
"os/signal"
"github.com/namsral/flag"
"github.com/prologic/bitcask"
)
func main() {
var (
version bool
config string
dbpath string
baseurl string
bind string
)
flag.BoolVar(&version, "v", false, "display version information")
flag.StringVar(&config, "config", "", "config file")
flag.StringVar(&dbpath, "dbpath", "./db/", "Database path")
flag.StringVar(&baseurl, "baseurl", "", "Base URL for display purposes")
flag.StringVar(&bind, "bind", "0.0.0.0:8000", "[int]:<port> to bind to")
flag.Parse()
if version {
fmt.Printf("shorturl v%s", FullVersion())
os.Exit(0)
}
// Create dbpath if required
if _, err := os.Stat(dbpath); os.IsNotExist(err) {
err = os.Mkdir(dbpath, os.ModePerm)
if err != nil {
log.Fatal(err)
}
}
// Set up environment
env := Env{}
var err error
env.db, err = bitcask.Open(dbpath)
if err != nil {
log.Fatal(err)
}
defer env.db.Close()
// TODO: Abstract the Config and Handlers better
env.cfg.baseURL = baseurl
// Catch Ctrl+C to prevent Bitcask "key/value size is invalid" error on next start
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
go func() {
for sig := range c {
if sig == os.Kill || sig == os.Interrupt {
env.db.Close()
os.Exit(0)
}
}
}()
env.NewServer(bind).ListenAndServe()
}