feat: add otel

This commit is contained in:
xuu
2025-02-24 17:28:09 -07:00
parent 1574c48429
commit ed5b43300b
10 changed files with 612 additions and 111 deletions

30
feed.go
View File

@@ -14,6 +14,7 @@ import (
_ "embed"
"go.sour.is/xt/internal/otel"
"go.yarn.social/lextwt"
"go.yarn.social/types"
)
@@ -76,7 +77,10 @@ var (
last_modified_on,
last_etag
from feeds
where datetime(last_scan_on, '+'||refresh_rate||' seconds') < datetime(current_timestamp, '+10 minutes')
where datetime(
coalesce(last_scan_on, '1901-01-01'),
'+'||refresh_rate||' seconds'
) < datetime(current_timestamp, '+10 minutes')
`
updateFeed = `
update feeds set
@@ -90,7 +94,9 @@ var (
)
func (f *Feed) Save(ctx context.Context, db *sql.DB) error {
fmt.Println(f.FetchURI, " ", f.LastModified, " ", f.LastError)
ctx, span := otel.Span(ctx)
defer span.End()
_, err := db.ExecContext(
ctx,
updateFeed,
@@ -135,6 +141,8 @@ func (f *Feed) Scan(res interface{ Scan(...any) error }) error {
}
func loadFeeds(ctx context.Context, db *sql.DB) (iter.Seq[Feed], error) {
ctx, span := otel.Span(ctx)
var err error
var res *sql.Rows
@@ -145,6 +153,8 @@ func loadFeeds(ctx context.Context, db *sql.DB) (iter.Seq[Feed], error) {
}
return func(yield func(Feed) bool) {
defer span.End()
for res.Next() {
var f Feed
err = f.Scan(res)
@@ -158,13 +168,16 @@ func loadFeeds(ctx context.Context, db *sql.DB) (iter.Seq[Feed], error) {
}, err
}
func storeFeed(db *sql.DB, f types.TwtFile) error {
func storeFeed(ctx context.Context, db *sql.DB, f types.TwtFile) error {
ctx, span := otel.Span(ctx)
defer span.End()
loadTS := time.Now()
refreshRate := 600
feedID := urlNS.UUID5(cmp.Or(f.Twter().HashingURI, f.Twter().URI))
tx, err := db.Begin()
tx, err := db.BeginTx(ctx, nil)
if err != nil {
return err
}
@@ -188,7 +201,8 @@ func storeFeed(db *sql.DB, f types.TwtFile) error {
defer tx.Rollback()
_, err = tx.Exec(
_, err = tx.ExecContext(
ctx,
insertFeed,
feedID,
f.Twter().HashingURI,
@@ -220,7 +234,8 @@ func storeFeed(db *sql.DB, f types.TwtFile) error {
}
}
_, err = tx.Exec(
_, err = tx.ExecContext(
ctx,
insertTwt,
feedID,
twt.Hash(),
@@ -236,7 +251,8 @@ func storeFeed(db *sql.DB, f types.TwtFile) error {
}
for nick, uri := range followMap {
_, err = tx.Exec(
_, err = tx.ExecContext(
ctx,
insertFeed,
urlNS.UUID5(uri),
uri,