tracks lexicons and how many times they appeared on the jetstream

feat(server): implement fetching tracking since

ptr.pet 999365ad 383ee9e6

verified
Changed files
+29
server
+12
server/src/api.rs
···
.route("/events", get(events))
.route("/stream_events", get(stream_events))
.route("/hits", get(hits))
+
.route("/since", get(since))
.route_layer(CompressionLayer::new().br(true).deflate(true).gzip(true).zstd(true))
.route_layer(PropagateRequestIdLayer::x_request_id())
.route_layer(
···
.instrument(span)
})
}
+
+
#[derive(Debug, Serialize)]
+
struct Since {
+
since: u64,
+
}
+
+
async fn since(db: State<Arc<Db>>) -> AppResult<Json<Since>> {
+
Ok(Json(Since {
+
since: db.tracking_since()?,
+
}))
+
}
+17
server/src/db.rs
···
},
)))
}
+
+
pub fn tracking_since(&self) -> AppResult<u64> {
+
let _guard = self.hits.guard();
+
// HACK: we should actually store when we started tracking but im lazy
+
// should be accurate enough
+
let Some(tree) = self.hits.get("app.bsky.feed.like", &_guard) else {
+
return Ok(0);
+
};
+
+
let Some((timestamp_raw, _)) = tree.first_key_value()? else {
+
return Ok(0);
+
};
+
+
Ok(u64::from_be_bytes(
+
timestamp_raw.as_ref().try_into().unwrap(),
+
))
+
}
}
type TimestampRepr = [u8; 8];