Files
qurl/main.go

69 lines
1.5 KiB
Go
Raw Normal View History

2018-11-12 01:56:30 +00:00
package main
import (
"flag"
"fmt"
2018-11-13 20:24:45 +00:00
"net"
"net/http"
2018-11-12 01:56:30 +00:00
"os"
2018-11-17 16:47:39 +00:00
"qurl/pages"
"qurl/storage"
2018-11-13 20:24:45 +00:00
"runtime"
2018-11-12 01:56:30 +00:00
)
2018-11-13 20:24:45 +00:00
//go:generate bindata -m Assets -r assets -p static -o static/assets.go assets
2018-11-12 01:56:30 +00:00
func main() {
dburl := flag.String("u", "bolt:./qurl.db", "url to database")
2018-11-13 20:24:45 +00:00
lsaddr := flag.String("l", "127.0.0.1:8080", "listen address/port")
2018-11-12 01:56:30 +00:00
jsonfile := flag.String("j", "", "path to json to load into database")
2018-11-13 20:24:45 +00:00
maxpro := flag.Int("m", runtime.NumCPU()+2,
"maximum number of threads to use")
2018-11-12 01:56:30 +00:00
flag.Parse()
2018-11-13 20:24:45 +00:00
if *maxpro < 3 {
fmt.Fprintf(os.Stderr, "Thread limit too low: %d (min 3)\n", *maxpro)
return
}
// Limit max processes
runtime.GOMAXPROCS(*maxpro)
// Open storage backend
2018-11-12 01:56:30 +00:00
stor, err := storage.NewStorage(*dburl)
if err != nil {
2018-11-13 20:24:45 +00:00
fmt.Fprintf(os.Stderr, "Database connection error: %s\n", err.Error())
2018-11-12 01:56:30 +00:00
return
}
defer stor.Shutdown()
2018-11-13 20:24:45 +00:00
// Load data if asked
2018-11-12 01:56:30 +00:00
if *jsonfile != "" {
err := loadjson(stor, *jsonfile)
if err != nil {
2018-11-13 20:24:45 +00:00
fmt.Fprintf(os.Stderr, "%s\n", err.Error())
2018-11-12 01:56:30 +00:00
return
}
}
2018-11-13 20:24:45 +00:00
// 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()
2018-11-17 16:47:39 +00:00
if err != nil {
fmt.Fprintf(os.Stderr, "Handler Init Error: %s\n", err.Error())
2018-11-17 16:47:39 +00:00
return
}
2018-11-13 20:24:45 +00:00
fmt.Fprintf(os.Stdout, "qurl listening .. \n")
err = http.Serve(listen, root)
2018-11-13 20:24:45 +00:00
if err != nil {
fmt.Fprintf(os.Stderr, "Serve error: %s\n", err.Error())
}
2018-11-12 01:56:30 +00:00
}