store feed errors

This commit is contained in:
Nazar Kanaev 2021-01-07 11:32:42 +00:00
parent 6a6153ca48
commit 99684a4b2f
3 changed files with 25 additions and 1 deletions

View File

@ -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)
}

View File

@ -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)
}
}

View File

@ -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 {