Attach interval to feed for saving/loading
parent
e4785e6a05
commit
13e747d846
27
main.go
27
main.go
|
|
@ -14,7 +14,6 @@ const nsForFeeds = "FEEDS"
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
config := config.New()
|
config := config.New()
|
||||||
logger.Log("Starting with", config)
|
|
||||||
|
|
||||||
var sclient store.Client
|
var sclient store.Client
|
||||||
var err error
|
var err error
|
||||||
|
|
@ -27,7 +26,7 @@ func main() {
|
||||||
mon, err := monitor.New(func(url string) {
|
mon, err := monitor.New(func(url string) {
|
||||||
feed, ok := allFeeds[url]
|
feed, ok := allFeeds[url]
|
||||||
if !ok {
|
if !ok {
|
||||||
f, err := rss.New(url, "", "")
|
f, err := rss.New(url, "", "", time.Minute)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log("cannot identify unknown feed triggered in monitor: %q: %v", url, err)
|
logger.Log("cannot identify unknown feed triggered in monitor: %q: %v", url, err)
|
||||||
return
|
return
|
||||||
|
|
@ -80,13 +79,13 @@ func main() {
|
||||||
defer mon.Stop()
|
defer mon.Stop()
|
||||||
|
|
||||||
server, err := server.New(config.Port, func(url string, itemFilter, contentFilter string, interval time.Duration) {
|
server, err := server.New(config.Port, func(url string, itemFilter, contentFilter string, interval time.Duration) {
|
||||||
feed, err := rss.New(url, itemFilter, contentFilter)
|
feed, err := rss.New(url, itemFilter, contentFilter, interval)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log("can't create new RSS %q: %v", url, err)
|
logger.Log("can't create new RSS %q: %v", url, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
allFeeds[url] = feed
|
allFeeds[url] = feed
|
||||||
if err := mon.Submit(url, interval); err != nil {
|
if err := mon.Submit(url, feed.Interval); err != nil {
|
||||||
logger.Log("Cannot accept new feed %q: %v", url, err)
|
logger.Log("Cannot accept new feed %q: %v", url, err)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
@ -94,6 +93,26 @@ func main() {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
oldFeeds, err := sclient.List(nsForFeeds, "")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
for _, feedID := range oldFeeds {
|
||||||
|
b, err := sclient.Get(nsForFeeds, feedID)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
feed, err := rss.Deserialize(b)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
allFeeds[feed.Link] = feed
|
||||||
|
if err := mon.Submit(feed.Link, feed.Interval); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.Log("Starting with", config)
|
||||||
if err := server.Serve(); err != nil {
|
if err := server.Serve(); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,15 +19,17 @@ type Feed struct {
|
||||||
ItemFilter string
|
ItemFilter string
|
||||||
ContentFilter string
|
ContentFilter string
|
||||||
Link string
|
Link string
|
||||||
|
Interval time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
func (feed *Feed) String() string {
|
func (feed *Feed) String() string {
|
||||||
return fmt.Sprintf("Updated: %v, Items: %v, ItemFilter: %q, ContentFilter: %q, Link; %v",
|
return fmt.Sprintf("Updated: %v, Items: %v, ItemFilter: %q, ContentFilter: %q, Link: %v, Interval: %s",
|
||||||
feed.Updated.Local(),
|
feed.Updated.Local(),
|
||||||
feed.Items,
|
feed.Items,
|
||||||
feed.ItemFilter,
|
feed.ItemFilter,
|
||||||
feed.ContentFilter,
|
feed.ContentFilter,
|
||||||
feed.Link,
|
feed.Link,
|
||||||
|
feed.Interval,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -35,7 +37,7 @@ func (feed *Feed) ID() string {
|
||||||
return strings.Join(regexp.MustCompile("[a-zA-Z0-9]*").FindAllString(feed.Link, -1), "_")
|
return strings.Join(regexp.MustCompile("[a-zA-Z0-9]*").FindAllString(feed.Link, -1), "_")
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(source, itemFilter, contentFilter string) (*Feed, error) {
|
func New(source, itemFilter, contentFilter string, interval time.Duration) (*Feed, error) {
|
||||||
if _, err := regexp.Compile(itemFilter); err != nil {
|
if _, err := regexp.Compile(itemFilter); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -47,6 +49,7 @@ func New(source, itemFilter, contentFilter string) (*Feed, error) {
|
||||||
ItemFilter: itemFilter,
|
ItemFilter: itemFilter,
|
||||||
ContentFilter: contentFilter,
|
ContentFilter: contentFilter,
|
||||||
Link: source,
|
Link: source,
|
||||||
|
Interval: interval,
|
||||||
}
|
}
|
||||||
return f, nil
|
return f, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_RSSFeed(t *testing.T) {
|
func Test_RSSFeed(t *testing.T) {
|
||||||
|
|
@ -31,7 +32,7 @@ func Test_RSSFeed(t *testing.T) {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for _, c := range cases {
|
for _, c := range cases {
|
||||||
feed, err := New(s.URL, c.itemFilter, c.contentFilter)
|
feed, err := New(s.URL, c.itemFilter, c.contentFilter, time.Minute)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("couldn't create new feed %v: %v", feed, err)
|
t.Errorf("couldn't create new feed %v: %v", feed, err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue