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

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "net"
  6. "net/http"
  7. "os"
  8. "qurl/pages"
  9. "qurl/storage"
  10. )
  11. //go:generate bindata -m Assets -r assets -p static -o static/assets.go assets
  12. func main() {
  13. dburl := flag.String("u", "bolt:./qurl.db", "url to database")
  14. lsaddr := flag.String("l", "127.0.0.1:8080", "listen address/port")
  15. jsonfile := flag.String("j", "", "path to json to load into database")
  16. backupint := flag.Int("i", 86400, "seconds between database backups")
  17. backupdir := flag.String("b", "", "destination directory for database backups")
  18. flag.Parse()
  19. // Open storage backend
  20. stor, err := storage.NewStorage(*dburl)
  21. if err != nil {
  22. fmt.Fprintf(os.Stderr, "Database connection error: %s\n", err.Error())
  23. return
  24. }
  25. defer stor.Shutdown()
  26. // If there's a backup dir specified, do backups
  27. // at a specific interval
  28. if *backupdir != "" {
  29. stat, err := os.Stat(*backupdir)
  30. if err != nil {
  31. fmt.Fprintf(os.Stderr, "Directory stat error: %s\n", err.Error())
  32. return
  33. }
  34. if !stat.IsDir() {
  35. fmt.Fprintf(os.Stderr, "Backup directory does not exist: %s\n", *backupdir)
  36. return
  37. }
  38. go manageBackup(stor, *backupdir, *backupint)
  39. }
  40. // Load data if asked
  41. if *jsonfile != "" {
  42. err := loadjson(stor, *jsonfile)
  43. if err != nil {
  44. fmt.Fprintf(os.Stderr, "%s\n", err.Error())
  45. return
  46. }
  47. }
  48. // Open listener port
  49. listen, err := net.Listen("tcp", *lsaddr)
  50. if err != nil {
  51. fmt.Fprintf(os.Stderr, "Listen error: %s\n", err.Error())
  52. return
  53. }
  54. root := &pages.RootHandler{Storage: stor}
  55. err = root.Init()
  56. if err != nil {
  57. fmt.Fprintf(os.Stderr, "Handler Init Error: %s\n", err.Error())
  58. return
  59. }
  60. fmt.Fprintf(os.Stdout, "qurl listening .. \n")
  61. err = http.Serve(listen, root)
  62. if err != nil {
  63. fmt.Fprintf(os.Stderr, "Serve error: %s\n", err.Error())
  64. }
  65. }