main.go 986 B

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