scheduler initial impl

This commit is contained in:
2022-04-27 00:19:05 -04:00
parent a2085625aa
commit 275f71c4d6
8 changed files with 135 additions and 40 deletions

View File

@ -1,20 +1,38 @@
package app
import (
"fmt"
"log"
"go.balki.me/tss/config"
)
func Run(configPath string) {
cfg, err := config.Parse(configPath)
if err != nil {
log.Fatal(err)
}
/*
cfg, err := ParseConfig(configPath)
if err != nil {
log.Fatal(err)
}
for _, feed := range c.Feeds {
log.Println("Processing feed", feed.Name)
}
fmt.Println(configPath)
for _, feed := range cfg.Feeds {
log.Println("Processing feed", feed.Name)
data, err := Download(feed.Url, feed.Proxy)
if err != nil {
log.Fatal(err)
}
}
for _, feed := range c.Feeds {
log.Println("Processing feed", feed.Name)
links, err := parseFeed(data)
if err != nil {
log.Fatal(err)
}
for _, link := range links {
if alreadySent(link) {
continue
}
err := sendTelegram(link, feed.Channel, feed.Rhash)
if err != nil {
log.Fatal(err)
}
}
}
fmt.Println(configPath)
*/
}

View File

@ -1,4 +1,4 @@
package config
package app
import (
"os"
@ -17,8 +17,8 @@ type Config struct {
} `yaml:"feeds"`
}
func Parse(configPath string) (*Config, error) {
cfg, err := os.ReadFile("tss.yaml")
func ParseConfig(configPath string) (*Config, error) {
cfg, err := os.ReadFile(configPath)
if err != nil {
return nil, err
}

5
app/download.go Normal file
View File

@ -0,0 +1,5 @@
package app
func Download(url string, proxy string) ([]byte, error) {
return nil, nil
}

52
app/schedule.go Normal file
View File

@ -0,0 +1,52 @@
package app
import (
"os"
"time"
"github.com/robfig/cron/v3"
"gopkg.in/yaml.v3"
)
type Scheduler struct {
filePath string
lastSuccessTime map[string]time.Time
}
func NewScheduler(filePath string) (*Scheduler, error) {
s := Scheduler{filePath: filePath}
data, err := os.ReadFile(filePath)
if err != nil {
return nil, err
}
err = yaml.Unmarshal(data, &s.lastSuccessTime)
if err != nil {
return nil, err
}
return &s, nil
}
func (s *Scheduler) Save() error {
data, err := yaml.Marshal(&s.lastSuccessTime)
if err != nil {
return err
}
return os.WriteFile(s.filePath, data, 0644)
}
func (s *Scheduler) Good(name string) {
s.lastSuccessTime[name] = time.Now()
}
func (s *Scheduler) ShouldDownload(name string, scheduleSpec string) (bool, error) {
lastSuccess, ok := s.lastSuccessTime[name]
if !ok {
return true, nil
}
cron, err := cron.ParseStandard(scheduleSpec)
if err != nil {
return false, err
}
n := cron.Next(lastSuccess)
return n.Before(time.Now()), nil
}

28
app/schedule_test.go Normal file
View File

@ -0,0 +1,28 @@
package app
import (
"fmt"
"testing"
"time"
"github.com/stretchr/testify/assert"
"gopkg.in/yaml.v3"
)
func TestYamlMap(t *testing.T) {
yesterday := time.Now().Add(-24 * time.Hour)
m := map[string]time.Time{
"Bala": time.Now(),
"Linus": yesterday,
}
out, err := yaml.Marshal(&m)
if err != nil {
t.Fatalf("got err: %v", err)
}
// assert.Equal(t, nil, fmt.Sprintf("%s", out))
var m2 map[string]time.Time
err = yaml.Unmarshal(out, &m2)
assert.NoError(t, err)
assert.Equal(t, "foobar", fmt.Sprint(m2["Bala"]))
}