mirror of
https://github.com/taigrr/shorturl
synced 2025-01-18 04:03:16 -08:00
* 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
72 lines
1.4 KiB
Go
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()
|
|
|
|
}
|