Compare commits
No commits in common. "7aa64716964292d86b98286c135e684a8c710f70" and "280853054060f611f0bcf30abef5b7340c261f3f" have entirely different histories.
7aa6471696
...
2808530540
|
|
@ -13,7 +13,6 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -44,11 +43,8 @@ type Stat struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type subscriptionHandler struct {
|
type subscriptionHandler struct {
|
||||||
LockSubs sync.Mutex
|
|
||||||
Subscribers map[string][]Subscriber
|
Subscribers map[string][]Subscriber
|
||||||
|
Stats map[string]Stat
|
||||||
LockStats sync.Mutex
|
|
||||||
Stats map[string]Stat
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (handler *subscriptionHandler) handlePublish(w http.ResponseWriter, r *http.Request) error {
|
func (handler *subscriptionHandler) handlePublish(w http.ResponseWriter, r *http.Request) error {
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user