track running status

This commit is contained in:
Nazar Kanaev 2020-08-02 22:36:17 +01:00
parent f3bfd6fb3a
commit a2c8e30e79
3 changed files with 12 additions and 5 deletions

View File

@ -63,7 +63,7 @@ func StaticHandler(rw http.ResponseWriter, req *http.Request) {
func StatusHandler(rw http.ResponseWriter, req *http.Request) { func StatusHandler(rw http.ResponseWriter, req *http.Request) {
writeJSON(rw, map[string]interface{}{ writeJSON(rw, map[string]interface{}{
"running": handler(req).queueSize > 0, "running": *handler(req).queueSize > 0,
"stats": db(req).FeedStats(), "stats": db(req).FeedStats(),
}) })
} }
@ -438,6 +438,8 @@ func OPMLImportHandler(rw http.ResponseWriter, req *http.Request) {
} }
} }
} }
handler(req).fetchAllFeeds()
rw.WriteHeader(http.StatusOK)
} else { } else {
rw.WriteHeader(http.StatusMethodNotAllowed) rw.WriteHeader(http.StatusMethodNotAllowed)
} }

View File

@ -14,15 +14,16 @@ type Handler struct {
db *storage.Storage db *storage.Storage
log *log.Logger log *log.Logger
feedQueue chan storage.Feed feedQueue chan storage.Feed
queueSize int32 queueSize *int32
} }
func New(db *storage.Storage, logger *log.Logger) *Handler { func New(db *storage.Storage, logger *log.Logger) *Handler {
queueSize := int32(0)
return &Handler{ return &Handler{
db: db, db: db,
log: logger, log: logger,
feedQueue: make(chan storage.Feed, 1000), feedQueue: make(chan storage.Feed, 1000),
queueSize: 0, queueSize: &queueSize,
} }
} }
@ -51,7 +52,7 @@ func (h *Handler) startJobs() {
case feed := <-h.feedQueue: case feed := <-h.feedQueue:
items := listItems(feed) items := listItems(feed)
h.db.CreateItems(items) h.db.CreateItems(items)
atomic.AddInt32(&h.queueSize, -1) atomic.AddInt32(h.queueSize, -1)
case <- delTicker.C: case <- delTicker.C:
h.db.DeleteOldItems() h.db.DeleteOldItems()
} }
@ -77,7 +78,7 @@ func (h *Handler) fetchAllFeeds() {
} }
func (h *Handler) fetchFeed(feed storage.Feed) { func (h *Handler) fetchFeed(feed storage.Feed) {
atomic.AddInt32(&h.queueSize, 1) atomic.AddInt32(h.queueSize, 1)
h.feedQueue <- feed h.feedQueue <- feed
} }

View File

@ -268,6 +268,9 @@ var vm = new Vue({
methods: { methods: {
refreshStats: function() { refreshStats: function() {
api.status().then(function(data) { api.status().then(function(data) {
if (data.running) {
setTimeout(vm.refreshStats.bind(vm), 2000)
}
vm.feedStats = data.stats.reduce(function(acc, stat) { vm.feedStats = data.stats.reduce(function(acc, stat) {
acc[stat.feed_id] = stat acc[stat.feed_id] = stat
return acc return acc
@ -451,6 +454,7 @@ var vm = new Vue({
api.upload_opml(form).then(function() { api.upload_opml(form).then(function() {
input.value = '' input.value = ''
vm.refreshFeeds() vm.refreshFeeds()
vm.refreshStats()
}) })
}, },
getReadable: function(item) { getReadable: function(item) {