feat: site audit settings and the nightly crawl
- Site audit tab (UI-SPEC C20): crawl_schedule, crawl_max_pages (10-50 000), crawl_delay (100-5000 ms), crawl_keep (1-50) and generic_anchors seeded with the en and pl lists; ranges refuse with lagoon::validation.between on the screen and through the API - the crawler reads its limits and generic anchors from the settings; crawls beyond crawl_keep are deleted with their pages and issues - seo:crawl [--scheduled] and the nightly schedule entry at 02:30 (P33-40): off does nothing, weekly runs on Mondays in app.timezone - TestCrawlSchedule
This commit is contained in:
@@ -115,9 +115,25 @@ type Limits struct {
|
||||
// DefaultKeep is the number of crawls kept.
|
||||
const DefaultKeep = 10
|
||||
|
||||
// LoadLimits reads the crawl limits.
|
||||
// LoadLimits reads the crawl limits from the Site audit settings; a value
|
||||
// outside its range (written around the settings screen) falls back to the
|
||||
// default.
|
||||
func LoadLimits(db *gorm.DB) (Limits, error) {
|
||||
return Limits{MaxPages: DefaultMaxPages, Delay: DefaultDelay, Keep: DefaultKeep, GenericAnchors: DefaultGenericAnchors}, nil
|
||||
st, err := classes.LoadSettings(db)
|
||||
if err != nil {
|
||||
return Limits{}, err
|
||||
}
|
||||
out := Limits{MaxPages: DefaultMaxPages, Delay: DefaultDelay, Keep: DefaultKeep, GenericAnchors: ParseAnchors(st.GenericAnchors)}
|
||||
if st.CrawlMaxPages >= models.MinCrawlMaxPages && st.CrawlMaxPages <= models.MaxCrawlMaxPages {
|
||||
out.MaxPages = st.CrawlMaxPages
|
||||
}
|
||||
if st.CrawlDelay >= models.MinCrawlDelay && st.CrawlDelay <= models.MaxCrawlDelay {
|
||||
out.Delay = time.Duration(st.CrawlDelay) * time.Millisecond
|
||||
}
|
||||
if st.CrawlKeep >= models.MinCrawlKeep && st.CrawlKeep <= models.MaxCrawlKeep {
|
||||
out.Keep = st.CrawlKeep
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// LoadCrawl reads one crawl.
|
||||
@@ -393,3 +409,16 @@ var ErrNotRunning = errCancelledCrawl
|
||||
|
||||
// pluginLog is the crawler's logger (component seo).
|
||||
var pluginLog = diary.For("seo")
|
||||
|
||||
// ScheduledDue reports whether the nightly entry starts a crawl on day
|
||||
// (in the app's location) for the crawl_schedule setting: daily every
|
||||
// night, weekly on Mondays, never when off (P33-40).
|
||||
func ScheduledDue(schedule string, day time.Time) bool {
|
||||
switch schedule {
|
||||
case models.CrawlDaily:
|
||||
return true
|
||||
case models.CrawlWeekly:
|
||||
return day.Weekday() == time.Monday
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user