瀏覽代碼

simple command line to load data back in from JSON dumps file.

Steve Brunton 9 年之前
父節點
當前提交
9ce01bb783
共有 1 個文件被更改,包括 73 次插入0 次删除
  1. 73 0
      cmd/dump-loader/main.go

+ 73 - 0
cmd/dump-loader/main.go

@@ -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)
+		}
+	}
+}