a simple url shortener in Go (check it out at qurl.org)
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 

73 lignes
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())
}
}