main.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package main
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "flag"
  6. "fmt"
  7. "io/ioutil"
  8. "log"
  9. "net/http"
  10. "time"
  11. )
  12. const (
  13. apiPath = "http://%s:%s/api/url/%s"
  14. )
  15. type config struct {
  16. host string
  17. port string
  18. dumpFile string
  19. }
  20. type goData struct {
  21. url string
  22. ts time.Time
  23. }
  24. func main() {
  25. c := config{}
  26. flag.StringVar(&c.host, "host", "localhost", "host to post data to")
  27. flag.StringVar(&c.port, "port", "8067", "port on host to talk to")
  28. flag.StringVar(&c.dumpFile, "file", "", "dump file to load from")
  29. flag.Parse()
  30. if c.dumpFile == "" {
  31. log.Fatal("dump file must be specified with -file argument")
  32. }
  33. var d interface{}
  34. f, err := ioutil.ReadFile(c.dumpFile)
  35. if err != nil {
  36. log.Printf("error reading dump file : %s\n", c.dumpFile)
  37. log.Fatal(err)
  38. }
  39. err = json.Unmarshal(f, &d)
  40. if err != nil {
  41. log.Printf("error parsing dump file : %s\n", c.dumpFile)
  42. log.Fatal(err)
  43. }
  44. links := d.(map[string]interface{})
  45. for k, v := range links {
  46. req := fmt.Sprintf(apiPath, c.host, c.port, k)
  47. p, err := json.Marshal(&v)
  48. if err != nil {
  49. log.Printf("error marshalling data for link : %s\n", k)
  50. log.Println(err)
  51. continue
  52. }
  53. resp, err := http.Post(req, "application/json", bytes.NewReader(p))
  54. if err != nil {
  55. log.Printf("error POSTing link : %s\n", k)
  56. } else {
  57. log.Printf("POSTed short link (%s) : %s\n", resp.Status, k)
  58. }
  59. }
  60. }