very fast at protocol indexer with flexible filtering, xrpc queries, cursor-backed event stream, and more, built on fjall
rust fjall at-protocol atproto indexer
58
fork

Configure Feed

Select the types of activity you want to include in your feed.

[stream,ingest,backfill] properly store live field

dawn a022ce69 d66238cc

+14 -8
+2 -1
src/api/stream.rs
··· 79 79 current_id = id; 80 80 81 81 let StoredEvent { 82 + live, 82 83 did, 83 84 rev, 84 85 collection, ··· 111 112 id, 112 113 event_type: "record".into(), 113 114 record: Some(RecordEvt { 114 - live: true, 115 + live, 115 116 did: did.to_did(), 116 117 rev, 117 118 collection,
+2
src/backfill/mod.rs
··· 430 430 431 431 let event_id = app_state.db.next_event_id.fetch_add(1, Ordering::SeqCst); 432 432 let evt = StoredEvent { 433 + live: false, 433 434 did: TrimmedDid::from(&did), 434 435 rev: CowStr::Borrowed(rev.as_str()), 435 436 collection: CowStr::Borrowed(collection), ··· 454 455 455 456 let event_id = app_state.db.next_event_id.fetch_add(1, Ordering::SeqCst); 456 457 let evt = StoredEvent { 458 + live: false, 457 459 did: TrimmedDid::from(&did), 458 460 rev: CowStr::Borrowed(rev.as_str()), 459 461 collection: CowStr::Borrowed(&collection),
+1
src/ops.rs
··· 262 262 } 263 263 264 264 let evt = StoredEvent { 265 + live: true, 265 266 did: TrimmedDid::from(did), 266 267 rev: CowStr::Borrowed(commit.rev.as_str()), 267 268 collection: CowStr::Borrowed(collection),
+2
src/types.rs
··· 163 163 #[derive(Debug, Serialize, Deserialize, Clone)] 164 164 #[serde(bound(deserialize = "'i: 'de"))] 165 165 pub struct StoredEvent<'i> { 166 + #[serde(default)] 167 + pub live: bool, 166 168 #[serde(borrow)] 167 169 pub did: TrimmedDid<'i>, 168 170 #[serde(borrow)]
+5 -5
tests/common.nu
··· 45 45 export def wait-for-backfill [url: string] { 46 46 print "waiting for backfill to complete..." 47 47 for i in 1..120 { 48 - let stats = (http get $"($url)/stats?accurate=true").keyspace_stats 49 - let pending = ($stats | where name == "pending" | first).count 50 - let records = ($stats | where name == "records" | first).count 51 - let repos = ($stats | where name == "repos" | first).count 52 - let resync = ($stats | where name == "resync" | first).count 48 + let stats = (http get $"($url)/stats?accurate=true").counts 49 + let pending = ($stats.pending | into int) 50 + let records = ($stats.records | into int) 51 + let repos = ($stats.repos | into int) 52 + let resync = ($stats.resync | into int) 53 53 54 54 print $"[($i)/120] pending: ($pending), records: ($records), repos: ($repos), resync: ($resync)" 55 55
+2 -2
tests/stream_test.nu
··· 67 67 68 68 sleep 2sec 69 69 70 - let stats = (http get $"($url)/stats?accurate=true").keyspace_stats 71 - let events_count = ($stats | where name == "events" | first).count 70 + let stats = (http get $"($url)/stats?accurate=true").counts 71 + let events_count = ($stats.events | into int) 72 72 print $"total events in db: ($events_count)" 73 73 74 74 if $events_count > 0 {