stub asses
parent
6259a4f179
commit
14e80ac2c3
|
|
@ -0,0 +1,43 @@
|
|||
package asses
|
||||
|
||||
import (
|
||||
"context"
|
||||
"show-rss/src/db"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
func Next(ctx context.Context) (time.Time, error) {
|
||||
if err := initDB(ctx); err != nil {
|
||||
return time.Time{}, err
|
||||
}
|
||||
|
||||
type Did struct {
|
||||
Did time.Time
|
||||
}
|
||||
result, err := db.QueryOne[Did](ctx, `
|
||||
SELECT executed_at AS "Did"
|
||||
FROM "asses.executions"
|
||||
ORDER BY executed_at DESC
|
||||
LIMIT 1
|
||||
`)
|
||||
return result.Did, err
|
||||
}
|
||||
|
||||
func Record(ctx context.Context) error {
|
||||
if err := initDB(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return db.Exec(ctx, `INSERT INTO "asses.executions" (id, executed_at) VALUES ($1, $2)`, uuid.New().String(), time.Now())
|
||||
}
|
||||
|
||||
func initDB(ctx context.Context) error {
|
||||
return db.InitializeSchema(ctx, "asses", []string{
|
||||
`CREATE TABLE "asses.executions" (
|
||||
id TEXT PRIMARY KEY NOT NULL,
|
||||
executed_at TIMESTAMP NOT NULL
|
||||
)`,
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
package asses_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"show-rss/src/asses"
|
||||
"show-rss/src/db"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestNextRecord(t *testing.T) {
|
||||
ctx := db.Test(t, context.Background())
|
||||
|
||||
if v, err := asses.Next(ctx); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if zero := v.IsZero(); !zero {
|
||||
t.Fatal(v)
|
||||
}
|
||||
|
||||
if err := asses.Record(ctx); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if v, err := asses.Next(ctx); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if since := time.Since(v); since > time.Minute {
|
||||
t.Fatal(since)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
package asses
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
"show-rss/src/asses"
|
||||
"time"
|
||||
)
|
||||
|
||||
func Main(ctx context.Context) error {
|
||||
next, err := asses.Next(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
c := time.NewTicker(3 * time.Hour)
|
||||
defer c.Stop()
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
case <-c.C:
|
||||
case <-time.After(time.Until(next)):
|
||||
}
|
||||
|
||||
if err := One(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
next, err = asses.Next(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return ctx.Err()
|
||||
}
|
||||
|
||||
func One(ctx context.Context) error {
|
||||
return io.EOF
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
package asses_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestOne(t *testing.T) {
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package cron
|
||||
package fetch
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package cron_test
|
||||
package fetch_test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
|
|
@ -7,7 +7,7 @@ import (
|
|||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
"show-rss/src/cmd/cron"
|
||||
"show-rss/src/cmd/fetch"
|
||||
"show-rss/src/db"
|
||||
"show-rss/src/feeds"
|
||||
"strconv"
|
||||
|
|
@ -85,7 +85,7 @@ func TestOne(t *testing.T) {
|
|||
ctx := aCtx(t)
|
||||
for i := 0; i < 2; i++ {
|
||||
t.Run(strconv.Itoa(i), func(t *testing.T) {
|
||||
if err := cron.One(ctx); err != nil && ctx.Err() == nil {
|
||||
if err := fetch.One(ctx); err != nil && ctx.Err() == nil {
|
||||
t.Fatalf("failed %d: %v", i, err)
|
||||
}
|
||||
})
|
||||
|
|
@ -96,7 +96,7 @@ func TestOne(t *testing.T) {
|
|||
for i := 0; i < 2; i++ {
|
||||
t.Run(strconv.Itoa(i), func(t *testing.T) {
|
||||
ctx := aCtx(t)
|
||||
if err := cron.One(ctx); err != nil && ctx.Err() == nil {
|
||||
if err := fetch.One(ctx); err != nil && ctx.Err() == nil {
|
||||
t.Fatalf("failed %d: %v", i, err)
|
||||
}
|
||||
})
|
||||
|
|
@ -4,7 +4,8 @@ import (
|
|||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"show-rss/src/cmd/cron"
|
||||
"show-rss/src/cmd/asses"
|
||||
"show-rss/src/cmd/fetch"
|
||||
"show-rss/src/cmd/server"
|
||||
"show-rss/src/pool"
|
||||
"time"
|
||||
|
|
@ -22,7 +23,8 @@ func Main(ctx context.Context, args []string) error {
|
|||
|
||||
foos := map[string]func(context.Context) error{
|
||||
"server": server.Main,
|
||||
"cron": cron.Main,
|
||||
"fetch": fetch.Main,
|
||||
"asses": asses.Main,
|
||||
}
|
||||
p := pool.New(len(foos))
|
||||
defer p.Wait(ctx)
|
||||
|
|
|
|||
Loading…
Reference in New Issue