From 471ff2c56494cb8e0433e503c8d3450731e83bf7 Mon Sep 17 00:00:00 2001 From: Peter Stuifzand Date: Sat, 7 Jul 2018 17:56:28 +0200 Subject: [PATCH] Remember lease_seconds when set --- cmd/eksterd/incoming.go | 29 ++++++++++++++++++++++------- cmd/eksterd/main.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 7 deletions(-) diff --git a/cmd/eksterd/incoming.go b/cmd/eksterd/incoming.go index c8bd38b..ada80f0 100644 --- a/cmd/eksterd/incoming.go +++ b/cmd/eksterd/incoming.go @@ -19,6 +19,7 @@ type HubBackend interface { CreateFeed(url, channel string) (int64, error) GetSecret(id int64) string UpdateFeed(feedID int64, contentType string, body io.Reader) error + FeedSetLeaseSeconds(feedID int64, leaseSeconds int64) error } type incomingHandler struct { @@ -37,10 +38,31 @@ func (h *incomingHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { log.Println(r.URL.Query()) log.Println(r.PostForm) + // find feed + matches := urlRegex.FindStringSubmatch(r.URL.Path) + feed, err := strconv.ParseInt(matches[1], 10, 64) + if err != nil { + fmt.Fprint(w, err) + } + if r.Method == http.MethodGet { values := r.URL.Query() // check + if leaseStr := values.Get("hub.lease_seconds"); leaseStr != "" { + // update lease_seconds + + leaseSeconds, err := strconv.ParseInt(leaseStr, 10, 64) + if err != nil { + http.Error(w, fmt.Sprintf("error in hub.lease_seconds format %q: %s", leaseSeconds, err), 400) + return + } + err = h.Backend.FeedSetLeaseSeconds(feed, leaseSeconds) + if err != nil { + http.Error(w, fmt.Sprintf("error in while setting hub.lease_seconds: %s", err), 400) + return + } + } verify := values.Get("hub.challenge") fmt.Fprint(w, verify) @@ -53,13 +75,6 @@ func (h *incomingHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } - // find feed - matches := urlRegex.FindStringSubmatch(r.URL.Path) - feed, err := strconv.ParseInt(matches[1], 10, 64) - if err != nil { - fmt.Fprint(w, err) - } - // find secret secret := h.Backend.GetSecret(feed) if secret == "" { diff --git a/cmd/eksterd/main.go b/cmd/eksterd/main.go index 6d6436e..f8a6cd4 100644 --- a/cmd/eksterd/main.go +++ b/cmd/eksterd/main.go @@ -131,6 +131,35 @@ func (h *hubIncomingBackend) UpdateFeed(feedID int64, contentType string, body i return err } +func (h *hubIncomingBackend) FeedSetLeaseSeconds(feedID int64, leaseSeconds int64) error { + conn := pool.Get() + defer conn.Close() + log.Printf("updating feed %d lease_seconds", feedID) + + args := redis.Args{}.Add(fmt.Sprintf("feed:%d", feedID), "lease_seconds", leaseSeconds) + conn.Do("HSET", args...) + + return nil +} + +func (h *hubIncomingBackend) run() error { + ticker := time.NewTicker(10 * time.Minute) + quit := make(chan struct{}) + + go func() { + for { + select { + case <-ticker.C: + case <-quit: + ticker.Stop() + return + } + } + }() + + return nil +} + func newPool(addr string) *redis.Pool { return &redis.Pool{ MaxIdle: 3,