mirror of
https://github.com/miniflux/v2.git
synced 2025-09-15 18:57:04 +00:00
Add alternative scheduler based on the number of entries
This commit is contained in:
parent
25d4b9fc0c
commit
cead85b165
12 changed files with 423 additions and 119 deletions
|
@ -8,7 +8,9 @@ import (
|
|||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"miniflux.app/config"
|
||||
"miniflux.app/model"
|
||||
"miniflux.app/timezone"
|
||||
)
|
||||
|
@ -272,6 +274,39 @@ func (s *Storage) fetchFeeds(feedQuery, counterQuery string, args ...interface{}
|
|||
return feeds, nil
|
||||
}
|
||||
|
||||
// FeedSchedulerParameters returns the parameters used for the scheduler.
|
||||
func (s *Storage) FeedSchedulerParameters(userID, feedID int64) (int, error) {
|
||||
scheduler := strings.ToLower(config.Opts.PollingScheduler())
|
||||
if scheduler != model.SchedulerEntryCountBased {
|
||||
return 0, nil
|
||||
}
|
||||
var weeklyCount int
|
||||
|
||||
query := `
|
||||
SELECT
|
||||
count(*)
|
||||
FROM
|
||||
entries
|
||||
WHERE
|
||||
entries.user_id=$1 AND
|
||||
entries.feed_id=$2 AND
|
||||
entries.published_at BETWEEN (now() - interval '1 week') AND now();
|
||||
`
|
||||
|
||||
err := s.db.QueryRow(query, userID, feedID).Scan(
|
||||
&weeklyCount,
|
||||
)
|
||||
|
||||
switch {
|
||||
case err == sql.ErrNoRows:
|
||||
return 0, nil
|
||||
case err != nil:
|
||||
return 0, fmt.Errorf(`store: unable to fetch scheduler parameters for feed #%d: %v`, feedID, err)
|
||||
}
|
||||
|
||||
return weeklyCount, nil
|
||||
}
|
||||
|
||||
// FeedByID returns a feed by the ID.
|
||||
func (s *Storage) FeedByID(userID, feedID int64) (*model.Feed, error) {
|
||||
var feed model.Feed
|
||||
|
@ -429,9 +464,10 @@ func (s *Storage) UpdateFeed(feed *model.Feed) (err error) {
|
|||
user_agent=$13,
|
||||
username=$14,
|
||||
password=$15,
|
||||
disabled=$16
|
||||
disabled=$16,
|
||||
next_check_at=$17
|
||||
WHERE
|
||||
id=$17 AND user_id=$18
|
||||
id=$18 AND user_id=$19
|
||||
`
|
||||
_, err = s.db.Exec(query,
|
||||
feed.FeedURL,
|
||||
|
@ -450,6 +486,7 @@ func (s *Storage) UpdateFeed(feed *model.Feed) (err error) {
|
|||
feed.Username,
|
||||
feed.Password,
|
||||
feed.Disabled,
|
||||
feed.NextCheckAt,
|
||||
feed.ID,
|
||||
feed.UserID,
|
||||
)
|
||||
|
@ -469,14 +506,16 @@ func (s *Storage) UpdateFeedError(feed *model.Feed) (err error) {
|
|||
SET
|
||||
parsing_error_msg=$1,
|
||||
parsing_error_count=$2,
|
||||
checked_at=$3
|
||||
checked_at=$3,
|
||||
next_check_at=$4
|
||||
WHERE
|
||||
id=$4 AND user_id=$5
|
||||
id=$5 AND user_id=$6
|
||||
`
|
||||
_, err = s.db.Exec(query,
|
||||
feed.ParsingErrorMsg,
|
||||
feed.ParsingErrorCount,
|
||||
feed.CheckedAt,
|
||||
feed.NextCheckAt,
|
||||
feed.ID,
|
||||
feed.UserID,
|
||||
)
|
||||
|
|
|
@ -21,8 +21,8 @@ func (s *Storage) NewBatch(batchSize int) (jobs model.JobList, err error) {
|
|||
FROM
|
||||
feeds
|
||||
WHERE
|
||||
parsing_error_count < $1 AND disabled is false
|
||||
ORDER BY checked_at ASC LIMIT %d
|
||||
parsing_error_count < $1 AND disabled is false AND next_check_at < now()
|
||||
ORDER BY next_check_at ASC LIMIT %d
|
||||
`
|
||||
return s.fetchBatchRows(fmt.Sprintf(query, batchSize), maxParsingError)
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ func (s *Storage) NewUserBatch(userID int64, batchSize int) (jobs model.JobList,
|
|||
feeds
|
||||
WHERE
|
||||
user_id=$1 AND disabled is false
|
||||
ORDER BY checked_at ASC LIMIT %d
|
||||
ORDER BY next_check_at ASC LIMIT %d
|
||||
`
|
||||
return s.fetchBatchRows(fmt.Sprintf(query, batchSize), userID)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue