From 99684a4b2f0af424a831de668a6048aa54b7e707 Mon Sep 17 00:00:00 2001 From: Nazar Kanaev Date: Thu, 7 Jan 2021 11:32:42 +0000 Subject: [PATCH] store feed errors --- server/server.go | 2 ++ storage/feed.go | 18 ++++++++++++++++++ storage/storage.go | 6 +++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/server/server.go b/server/server.go index 72f2070..c732745 100644 --- a/server/server.go +++ b/server/server.go @@ -103,6 +103,7 @@ func (h *Handler) startJobs() { atomic.AddInt32(h.queueSize, -1) if err != nil { h.log.Printf("Failed to fetch %s (%d): %s", feed.FeedLink, feed.Id, err) + h.db.SetFeedError(feed.Id, err) continue } h.db.CreateItems(items) @@ -168,6 +169,7 @@ func (h Handler) requiresAuth() bool { func (h *Handler) fetchAllFeeds() { h.log.Print("Refreshing all feeds") + h.db.ResetFeedErrors() for _, feed := range h.db.ListFeeds() { h.fetchFeed(feed) } diff --git a/storage/feed.go b/storage/feed.go index 9c39b95..691791c 100644 --- a/storage/feed.go +++ b/storage/feed.go @@ -132,3 +132,21 @@ func (s *Storage) GetFeed(id int64) *Feed { } return nil } + +func (s *Storage) ResetFeedErrors() { + if _, err := s.db.Exec(`delete from feed_errors`); err != nil { + s.log.Print(err) + } +} + +func (s *Storage) SetFeedError(feedID int64, lastError error) { + _, err := s.db.Exec(` + insert into feed_errors (feed_id, error) + values (?, ?) + on conflict (feed_id) do update set error = excluded.error`, + feedID, lastError.Error(), + ) + if err != nil { + s.log.Print(err) + } +} diff --git a/storage/storage.go b/storage/storage.go index 403f4a4..2748e8f 100644 --- a/storage/storage.go +++ b/storage/storage.go @@ -65,12 +65,16 @@ end; create table if not exists http_states ( feed_id references feeds(id) unique, last_refreshed datetime not null, - last_error string, -- http header fields -- last_modified string not null, etag string not null ); + +create table if not exists feed_errors ( + feed_id references feeds(id) unique, + error string +); ` type Storage struct {