|
|
@@ -0,0 +1,73 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "bytes"
|
|
|
+ "encoding/json"
|
|
|
+ "flag"
|
|
|
+ "fmt"
|
|
|
+ "io/ioutil"
|
|
|
+ "log"
|
|
|
+ "net/http"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+const (
|
|
|
+ apiPath = "http://%s:%s/api/url/%s"
|
|
|
+)
|
|
|
+
|
|
|
+type config struct {
|
|
|
+ host string
|
|
|
+ port string
|
|
|
+ dumpFile string
|
|
|
+}
|
|
|
+
|
|
|
+type goData struct {
|
|
|
+ url string
|
|
|
+ ts time.Time
|
|
|
+}
|
|
|
+
|
|
|
+func main() {
|
|
|
+ c := config{}
|
|
|
+ flag.StringVar(&c.host, "host", "localhost", "host to post data to")
|
|
|
+ flag.StringVar(&c.port, "port", "8067", "port on host to talk to")
|
|
|
+ flag.StringVar(&c.dumpFile, "file", "", "dump file to load from")
|
|
|
+ flag.Parse()
|
|
|
+
|
|
|
+ if c.dumpFile == "" {
|
|
|
+ log.Fatal("dump file must be specified with -file argument")
|
|
|
+ }
|
|
|
+
|
|
|
+ var d interface{}
|
|
|
+
|
|
|
+ f, err := ioutil.ReadFile(c.dumpFile)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ log.Printf("error reading dump file : %s\n", c.dumpFile)
|
|
|
+ log.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ err = json.Unmarshal(f, &d)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ log.Printf("error parsing dump file : %s\n", c.dumpFile)
|
|
|
+ log.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ links := d.(map[string]interface{})
|
|
|
+
|
|
|
+ for k, v := range links {
|
|
|
+ req := fmt.Sprintf(apiPath, c.host, c.port, k)
|
|
|
+ p, err := json.Marshal(&v)
|
|
|
+ if err != nil {
|
|
|
+ log.Printf("error marshalling data for link : %s\n", k)
|
|
|
+ log.Println(err)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ resp, err := http.Post(req, "application/json", bytes.NewReader(p))
|
|
|
+ if err != nil {
|
|
|
+ log.Printf("error POSTing link : %s\n", k)
|
|
|
+ } else {
|
|
|
+ log.Printf("POSTed short link (%s) : %s\n", resp.Status, k)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|