a simple url shortener in Go (check it out at qurl.org)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

75 lines
1.8 KiB

package main
import (
"flag"
"fmt"
"net"
"net/http"
"os"
"qurl/pages"
"qurl/storage"
)
//go:generate bindata -m Assets -r assets -p static -o static/assets.go assets
func main() {
dburl := flag.String("u", "bolt:./qurl.db", "url to database")
lsaddr := flag.String("l", "127.0.0.1:8080", "listen address/port")
jsonfile := flag.String("j", "", "path to json to load into database")
backupint := flag.Int("i", 86400, "seconds between database backups")
backupdir := flag.String("b", "", "destination directory for database backups")
flag.Parse()
// Open storage backend
stor, err := storage.NewStorage(*dburl)
if err != nil {
fmt.Fprintf(os.Stderr, "Database connection error: %s\n", err.Error())
return
}
defer stor.Shutdown()
// If there's a backup dir specified, do backups
// at a specific interval
if *backupdir != "" {
stat, err := os.Stat(*backupdir)
if err != nil {
fmt.Fprintf(os.Stderr, "Directory stat error: %s\n", err.Error())
return
}
if !stat.IsDir() {
fmt.Fprintf(os.Stderr, "Backup directory does not exist: %s\n", *backupdir)
return
}
go manageBackup(stor, *backupdir, *backupint)
}
// Load data if asked
if *jsonfile != "" {
err := loadjson(stor, *jsonfile)
if err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err.Error())
return
}
}
// Open listener port
listen, err := net.Listen("tcp", *lsaddr)
if err != nil {
fmt.Fprintf(os.Stderr, "Listen error: %s\n", err.Error())
return
}
root := &pages.RootHandler{Storage: stor}
err = root.Init()
if err != nil {
fmt.Fprintf(os.Stderr, "Handler Init Error: %s\n", err.Error())
return
}
fmt.Fprintf(os.Stdout, "qurl listening .. \n")
err = http.Serve(listen, root)
if err != nil {
fmt.Fprintf(os.Stderr, "Serve error: %s\n", err.Error())
}
}