Compare commits

..

No commits in common. "7aa64716964292d86b98286c135e684a8c710f70" and "280853054060f611f0bcf30abef5b7340c261f3f" have entirely different histories.

View File

@ -13,7 +13,6 @@ import (
"os" "os"
"strconv" "strconv"
"strings" "strings"
"sync"
"time" "time"
) )
@ -44,10 +43,7 @@ type Stat struct {
} }
type subscriptionHandler struct { type subscriptionHandler struct {
LockSubs sync.Mutex
Subscribers map[string][]Subscriber Subscribers map[string][]Subscriber
LockStats sync.Mutex
Stats map[string]Stat Stats map[string]Stat
} }
@ -70,12 +66,12 @@ func (handler *subscriptionHandler) handlePublish(w http.ResponseWriter, r *http
return err return err
} }
handler.incStat("published") // handler.incStat(fmt.Sprintf("publish.%s", topic))
if subs, e := handler.Subscribers[topic]; e { if subs, e := handler.Subscribers[topic]; e {
for _, sub := range subs { for _, sub := range subs {
handler.incStat("publish.post") // handler.incStat(fmt.Sprintf("publish.post.%s.%s", topic, sub.Callback))
log.Printf("publish: creating post to %s\n", sub.Callback) log.Printf("publish: creating post to %s\n", sub.Callback)
postReq, err := http.NewRequest("POST", sub.Callback, strings.NewReader(string(feedContent))) postReq, err := http.NewRequest("POST", sub.Callback, strings.NewReader(string(feedContent)))
if err != nil { if err != nil {
@ -151,7 +147,6 @@ func (handler *subscriptionHandler) handleUnsubscription(w http.ResponseWriter,
func (handler *subscriptionHandler) handleSubscription(w http.ResponseWriter, r *http.Request) error { func (handler *subscriptionHandler) handleSubscription(w http.ResponseWriter, r *http.Request) error {
log.Printf("subscription request received: %s %#v\n", r.URL.String(), r.Form) log.Printf("subscription request received: %s %#v\n", r.URL.String(), r.Form)
callback := r.Form.Get("hub.callback") callback := r.Form.Get("hub.callback")
topic := r.Form.Get("hub.topic") topic := r.Form.Get("hub.topic")
secret := r.Form.Get("hub.secret") secret := r.Form.Get("hub.secret")
@ -257,27 +252,23 @@ func (handler *subscriptionHandler) addSubscriberCallback(topic string, subscrib
} }
func (handler *subscriptionHandler) incStat(name string) { func (handler *subscriptionHandler) incStat(name string) {
handler.LockStats.Lock() // if v, e := handler.Stats[name]; e {
defer handler.LockStats.Unlock() // handler.Stats[name] = Stat{LastUpdate: time.Now(), Updates: v.Updates + 1}
// } else {
if v, e := handler.Stats[name]; e { // handler.Stats[name] = Stat{LastUpdate: time.Now(), Updates: 1}
handler.Stats[name] = Stat{LastUpdate: time.Now(), Updates: v.Updates + 1} // }
} else { // handler.saveStats()
handler.Stats[name] = Stat{LastUpdate: time.Now(), Updates: 1}
}
handler.saveStats()
} }
func (handler *subscriptionHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (handler *subscriptionHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodGet { if r.Method == http.MethodGet {
_, _ = fmt.Fprintln(w, "WebSub hub") fmt.Fprintln(w, "WebSub hub")
if r.URL.Query().Get("debug") == "1" { if r.URL.Query().Get("debug") == "1" {
handler.incStat("http.index.debug") // handler.incStat("http.index.debug")
enc := json.NewEncoder(w) enc := json.NewEncoder(w)
enc.SetIndent("", " ") enc.SetIndent("", " ")
_ = enc.Encode(handler.Subscribers) enc.Encode(handler.Subscribers)
_ = enc.Encode(handler.Stats) //enc.Encode(handler.Stats)
} }
return return
} }
@ -296,14 +287,14 @@ func (handler *subscriptionHandler) ServeHTTP(w http.ResponseWriter, r *http.Req
mode := r.Form.Get("hub.mode") mode := r.Form.Get("hub.mode")
if mode == "subscribe" { if mode == "subscribe" {
err = handler.handleSubscription(w, r) handler.handleSubscription(w, r)
return return
} else if mode == "unsubscribe" { } else if mode == "unsubscribe" {
err = handler.handleUnsubscription(w, r) handler.handleUnsubscription(w, r)
return return
} else if mode == "publish" { } else if mode == "publish" {
log.Println("hub.mode=publish received") log.Println("hub.mode=publish received")
err = handler.handlePublish(w, r) handler.handlePublish(w, r)
return return
} else { } else {
http.Error(w, "Unknown hub.mode", 400) http.Error(w, "Unknown hub.mode", 400)
@ -312,9 +303,6 @@ func (handler *subscriptionHandler) ServeHTTP(w http.ResponseWriter, r *http.Req
} }
func (handler *subscriptionHandler) loadStats() error { func (handler *subscriptionHandler) loadStats() error {
handler.LockStats.Lock()
defer handler.LockStats.Unlock()
file, err := os.Open("./stats.json") file, err := os.Open("./stats.json")
if err != nil { if err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
@ -328,25 +316,7 @@ func (handler *subscriptionHandler) loadStats() error {
return err return err
} }
func (handler *subscriptionHandler) saveStats() error {
handler.LockStats.Lock()
defer handler.LockStats.Unlock()
file, err := os.Create("./stats.json")
if err != nil {
return err
}
defer file.Close()
dec := json.NewEncoder(file)
dec.SetIndent("", " ")
err = dec.Encode(&handler.Stats)
return err
}
func (handler *subscriptionHandler) loadSubscriptions() error { func (handler *subscriptionHandler) loadSubscriptions() error {
handler.LockSubs.Lock()
defer handler.LockSubs.Unlock()
file, err := os.Open("./subscription.json") file, err := os.Open("./subscription.json")
if err != nil { if err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
@ -360,11 +330,28 @@ func (handler *subscriptionHandler) loadSubscriptions() error {
return err return err
} }
func (handler *subscriptionHandler) load() error {
err := handler.loadSubscriptions()
if err != nil {
return err
}
return nil //handler.loadStats()
}
func (handler *subscriptionHandler) saveStats() error {
// file, err := os.Create("./stats.json")
// if err != nil {
// return err
// }
// defer file.Close()
// dec := json.NewEncoder(file)
// dec.SetIndent("", " ")
// err = dec.Encode(&handler.Stats)
// return err
return nil
}
func (handler *subscriptionHandler) saveSubscriptions() error { func (handler *subscriptionHandler) saveSubscriptions() error {
handler.LockSubs.Lock()
defer handler.LockSubs.Unlock()
file, err := os.Create("./subscription.json") file, err := os.Create("./subscription.json")
if err != nil { if err != nil {
return err return err
@ -376,14 +363,6 @@ func (handler *subscriptionHandler) saveSubscriptions() error {
return err return err
} }
func (handler *subscriptionHandler) load() error {
err := handler.loadSubscriptions()
if err != nil {
return err
}
return handler.loadStats()
}
func (handler *subscriptionHandler) save() error { func (handler *subscriptionHandler) save() error {
handler.saveSubscriptions() handler.saveSubscriptions()
return handler.saveStats() return handler.saveStats()