main.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package main
  2. import (
  3. "encoding/json"
  4. "flag"
  5. "fmt"
  6. "log"
  7. "net/http"
  8. "os"
  9. "time"
  10. )
  11. type event struct {
  12. ID int `json:"id"`
  13. Type string `json:"type"`
  14. Time time.Time `json:"time"`
  15. Data map[string]interface{} `json:"data"`
  16. }
  17. func main() {
  18. log.SetOutput(os.Stdout)
  19. log.SetFlags(0)
  20. target := flag.String("target", "localhost:8080", "Target Syncthing instance")
  21. apikey := flag.String("apikey", "", "Syncthing API key")
  22. flag.Parse()
  23. if *apikey == "" {
  24. log.Fatal("Must give -apikey argument")
  25. }
  26. since := 0
  27. for {
  28. req, err := http.NewRequest("GET", fmt.Sprintf("http://%s/rest/events?since=%d", *target, since), nil)
  29. if err != nil {
  30. log.Fatal(err)
  31. }
  32. req.Header.Set("X-API-Key", *apikey)
  33. res, err := http.DefaultClient.Do(req)
  34. if err != nil {
  35. log.Fatal(err)
  36. }
  37. var events []event
  38. err = json.NewDecoder(res.Body).Decode(&events)
  39. if err != nil {
  40. log.Fatal(err)
  41. }
  42. res.Body.Close()
  43. for _, event := range events {
  44. bs, _ := json.MarshalIndent(event, "", " ")
  45. log.Printf("%s", bs)
  46. since = event.ID
  47. }
  48. }
  49. }