collab: Record geoip_country_code on HTTP request spans (#17092)

This PR attaches the `geoip_country_code` that we source from
Cloudflare's `CF-IPCountry` header to the HTTP request spans.

This will allow us to see where traffic is originating geographically.

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2024-08-29 11:33:51 -04:00 committed by GitHub
parent 4d6bb52d1f
commit 4f408ec65a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,10 +1,12 @@
use anyhow::anyhow; use anyhow::anyhow;
use axum::headers::HeaderMapExt;
use axum::{ use axum::{
extract::MatchedPath, extract::MatchedPath,
http::{Request, Response}, http::{Request, Response},
routing::get, routing::get,
Extension, Router, Extension, Router,
}; };
use collab::api::CloudflareIpCountryHeader;
use collab::llm::{db::LlmDatabase, log_usage_periodically}; use collab::llm::{db::LlmDatabase, log_usage_periodically};
use collab::migrations::run_database_migrations; use collab::migrations::run_database_migrations;
use collab::user_backfiller::spawn_user_backfiller; use collab::user_backfiller::spawn_user_backfiller;
@ -150,10 +152,16 @@ async fn main() -> Result<()> {
.get::<MatchedPath>() .get::<MatchedPath>()
.map(MatchedPath::as_str); .map(MatchedPath::as_str);
let geoip_country_code = request
.headers()
.typed_get::<CloudflareIpCountryHeader>()
.map(|header| header.to_string());
tracing::info_span!( tracing::info_span!(
"http_request", "http_request",
method = ?request.method(), method = ?request.method(),
matched_path, matched_path,
geoip_country_code,
user_id = tracing::field::Empty, user_id = tracing::field::Empty,
login = tracing::field::Empty, login = tracing::field::Empty,
authn.jti = tracing::field::Empty, authn.jti = tracing::field::Empty,