diff --git a/server/handlers.go b/server/handlers.go index bf83540..bcd9193 100644 --- a/server/handlers.go +++ b/server/handlers.go @@ -63,7 +63,7 @@ func StaticHandler(rw http.ResponseWriter, req *http.Request) { func StatusHandler(rw http.ResponseWriter, req *http.Request) { writeJSON(rw, map[string]interface{}{ - "running": handler(req).queueSize > 0, + "running": *handler(req).queueSize > 0, "stats": db(req).FeedStats(), }) } @@ -438,6 +438,8 @@ func OPMLImportHandler(rw http.ResponseWriter, req *http.Request) { } } } + handler(req).fetchAllFeeds() + rw.WriteHeader(http.StatusOK) } else { rw.WriteHeader(http.StatusMethodNotAllowed) } diff --git a/server/server.go b/server/server.go index a6e76ac..5d54e04 100644 --- a/server/server.go +++ b/server/server.go @@ -14,15 +14,16 @@ type Handler struct { db *storage.Storage log *log.Logger feedQueue chan storage.Feed - queueSize int32 + queueSize *int32 } func New(db *storage.Storage, logger *log.Logger) *Handler { + queueSize := int32(0) return &Handler{ db: db, log: logger, feedQueue: make(chan storage.Feed, 1000), - queueSize: 0, + queueSize: &queueSize, } } @@ -51,7 +52,7 @@ func (h *Handler) startJobs() { case feed := <-h.feedQueue: items := listItems(feed) h.db.CreateItems(items) - atomic.AddInt32(&h.queueSize, -1) + atomic.AddInt32(h.queueSize, -1) case <- delTicker.C: h.db.DeleteOldItems() } @@ -77,7 +78,7 @@ func (h *Handler) fetchAllFeeds() { } func (h *Handler) fetchFeed(feed storage.Feed) { - atomic.AddInt32(&h.queueSize, 1) + atomic.AddInt32(h.queueSize, 1) h.feedQueue <- feed } diff --git a/template/static/javascripts/app.js b/template/static/javascripts/app.js index 503604d..5d158a8 100644 --- a/template/static/javascripts/app.js +++ b/template/static/javascripts/app.js @@ -268,6 +268,9 @@ var vm = new Vue({ methods: { refreshStats: function() { api.status().then(function(data) { + if (data.running) { + setTimeout(vm.refreshStats.bind(vm), 2000) + } vm.feedStats = data.stats.reduce(function(acc, stat) { acc[stat.feed_id] = stat return acc @@ -451,6 +454,7 @@ var vm = new Vue({ api.upload_opml(form).then(function() { input.value = '' vm.refreshFeeds() + vm.refreshStats() }) }, getReadable: function(item) {