a simple url shortener in Go (check it out at qurl.org)
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

73 linhas
1.7 KiB

package main
import (
"flag"
"fmt"
"git.binarythought.com/cdramey/qurl/pages"
"git.binarythought.com/cdramey/qurl/storage"
"net"
"net/http"
"os"
)
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())
}
}