Remember lease_seconds when set
This commit is contained in:
parent
c6902909b1
commit
471ff2c564
|
@ -19,6 +19,7 @@ type HubBackend interface {
|
||||||
CreateFeed(url, channel string) (int64, error)
|
CreateFeed(url, channel string) (int64, error)
|
||||||
GetSecret(id int64) string
|
GetSecret(id int64) string
|
||||||
UpdateFeed(feedID int64, contentType string, body io.Reader) error
|
UpdateFeed(feedID int64, contentType string, body io.Reader) error
|
||||||
|
FeedSetLeaseSeconds(feedID int64, leaseSeconds int64) error
|
||||||
}
|
}
|
||||||
|
|
||||||
type incomingHandler struct {
|
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.URL.Query())
|
||||||
log.Println(r.PostForm)
|
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 {
|
if r.Method == http.MethodGet {
|
||||||
values := r.URL.Query()
|
values := r.URL.Query()
|
||||||
|
|
||||||
// check
|
// 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")
|
verify := values.Get("hub.challenge")
|
||||||
fmt.Fprint(w, verify)
|
fmt.Fprint(w, verify)
|
||||||
|
@ -53,13 +75,6 @@ func (h *incomingHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
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
|
// find secret
|
||||||
secret := h.Backend.GetSecret(feed)
|
secret := h.Backend.GetSecret(feed)
|
||||||
if secret == "" {
|
if secret == "" {
|
||||||
|
|
|
@ -131,6 +131,35 @@ func (h *hubIncomingBackend) UpdateFeed(feedID int64, contentType string, body i
|
||||||
return err
|
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 {
|
func newPool(addr string) *redis.Pool {
|
||||||
return &redis.Pool{
|
return &redis.Pool{
|
||||||
MaxIdle: 3,
|
MaxIdle: 3,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user