Skip to content
Clone

chore(observability): record request ids on service spans

ZhenYi committed
parent 5b68b8b commit 590c07b Browse files

20 files changed

+91 −91

File tree 20
Modified lib/auth/src/services/account_access.rs View lib/auth/src/services/account_access.rs
@@ -9,7 +9,7 @@
99
1010use crate::services::authority::session_token_hash;
1111impl Accounts {
12 #[tracing::instrument(skip_all, fields(user_id = user_id, session_id = %session_id, request_id = %request_id.unwrap_or_default()))]
12 #[tracing::instrument(skip_all, fields(user_id = user_id, session_id = %session_id, request_id = %envelope::context::resolve_request_id(request_id)))]
1313 pub async fn check_session(
1414 &self,
1515 user_id: i64,
@@ -59,7 +59,7 @@
5959 }
6060 Ok((user, row.mfa_verified_at.is_some()))
6161 }
62 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
62 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
6363 pub async fn require_session(
6464 &self,
6565 session: &Session,
Modified lib/auth/src/services/account_identity.rs View lib/auth/src/services/account_identity.rs
@@ -13,7 +13,7 @@
1313 crate::share::auth_store::user_public(user, String::new(), None)
1414}
1515impl Accounts {
16 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
16 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
1717 pub(crate) async fn get_user_public_inner(
1818 &self,
1919 request_id: Option<&str>,
@@ -32,7 +32,7 @@
3232 user: Some(store::user_public(&user, email, None)),
3333 })
3434 }
35 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
35 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
3636 pub(crate) async fn batch_get_user_public_inner(
3737 &self,
3838 request_id: Option<&str>,
@@ -68,7 +68,7 @@
6868 }
6969 Ok(BatchGetUserPublicResponse { users })
7070 }
71 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
71 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
7272 pub(crate) async fn get_user_status_inner(
7373 &self,
7474 request_id: Option<&str>,
@@ -93,7 +93,7 @@
9393 status: Some(store::user_status_of(&user, mfa)),
9494 })
9595 }
96 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
96 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
9797 pub(crate) async fn ensure_bot_user_inner(
9898 &self,
9999 request_id: Option<&str>,
Modified lib/auth/src/services/authority.rs View lib/auth/src/services/authority.rs
@@ -16,7 +16,7 @@
1616}
1717
1818impl AuthService {
19 #[tracing::instrument(skip_all, fields(user_id = user.id, mfa = mfa, request_id = %request_id.unwrap_or_default()))]
19 #[tracing::instrument(skip_all, fields(user_id = user.id, mfa = mfa, request_id = %envelope::context::resolve_request_id(request_id)))]
2020 pub async fn bind_auth_session(
2121 &self,
2222 session: &Session,
Modified lib/auth/src/services/authority_store.rs View lib/auth/src/services/authority_store.rs
@@ -76,7 +76,7 @@
7676}
7777
7878impl Accounts {
79 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
79 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
8080 pub(crate) async fn get_user_inner(
8181 &self,
8282 request_id: Option<&str>,
@@ -98,7 +98,7 @@
9898 })
9999 }
100100
101 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
101 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
102102 pub(crate) async fn batch_get_user_inner(
103103 &self,
104104 request_id: Option<&str>,
@@ -123,7 +123,7 @@
123123 })
124124 }
125125
126 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
126 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
127127 pub(crate) async fn get_session_inner(
128128 &self,
129129 request_id: Option<&str>,
@@ -166,7 +166,7 @@
166166 })
167167 }
168168
169 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
169 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
170170 pub(crate) async fn update_user_inner(
171171 &self,
172172 request_id: Option<&str>,
Modified lib/auth/src/services/identity.rs View lib/auth/src/services/identity.rs
@@ -121,7 +121,7 @@
121121}
122122
123123impl AuthService {
124 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
124 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
125125 pub(crate) async fn change_password_inner(
126126 &self,
127127 request_id: Option<&str>,
Modified lib/auth/src/services/sessions.rs View lib/auth/src/services/sessions.rs
@@ -14,7 +14,7 @@
1414pub const SESSION_LIST_MAX: usize = 200;
1515
1616impl Accounts {
17 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
17 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
1818 pub(crate) async fn list_user_sessions_inner(
1919 &self,
2020 request_id: Option<&str>,
@@ -68,7 +68,7 @@
6868 page: Some(crate::protos::auth::common::v1::PageResponse { next_page_token }),
6969 })
7070 }
71 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
71 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
7272 pub(crate) async fn revoke_session_inner(
7373 &self,
7474 request_id: Option<&str>,
@@ -148,7 +148,7 @@
148148 security_version,
149149 })
150150 }
151 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
151 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
152152 pub(crate) async fn revoke_user_sessions_inner(
153153 &self,
154154 request_id: Option<&str>,
Modified lib/auth/src/services/two_factor.rs View lib/auth/src/services/two_factor.rs
@@ -177,7 +177,7 @@
177177 })
178178 }
179179
180 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
180 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
181181 pub(crate) async fn configure_totp_impl(
182182 &self,
183183 request: ConfigureTotpRequest,
@@ -253,7 +253,7 @@
253253 })
254254 }
255255
256 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
256 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
257257 pub(crate) async fn enable_totp_impl(
258258 &self,
259259 request: EnableTotpRequest,
@@ -322,7 +322,7 @@
322322 })
323323 }
324324
325 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
325 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
326326 pub(crate) async fn disable_totp_impl(
327327 &self,
328328 request: DisableTotpRequest,
@@ -382,7 +382,7 @@
382382 Ok(DisableTotpResponse { disabled: true })
383383 }
384384
385 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
385 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
386386 pub(crate) async fn regenerate_recovery_codes_impl(
387387 &self,
388388 request: RegenerateRecoveryCodesRequest,
Modified lib/auth/src/share/codes.rs View lib/auth/src/share/codes.rs
@@ -17,7 +17,7 @@
1717}
1818
1919/// 验证码只存哈希:Redis 里的明文泄露不等于验证码泄露。
20#[tracing::instrument(skip_all, fields(request_id = %_request_id.unwrap_or_default()))]
20#[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(_request_id)))]
2121pub async fn store_email_code(
2222 cache: &Cache,
2323 key: &str,
@@ -33,7 +33,7 @@
3333 Ok(())
3434}
3535
36#[tracing::instrument(skip_all, fields(request_id = %_request_id.unwrap_or_default()))]
36#[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(_request_id)))]
3737pub async fn take_code_attempt(
3838 cache: &Cache,
3939 key: &str,
@@ -56,7 +56,7 @@
5656 Ok(CodeAttempt::Allowed(attempts))
5757}
5858
59#[tracing::instrument(skip_all, fields(request_id = %_request_id.unwrap_or_default()))]
59#[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(_request_id)))]
6060pub async fn consume_email_code(
6161 cache: &Cache,
6262 key: &str,
Modified lib/auth/src/share/mfa.rs View lib/auth/src/share/mfa.rs
@@ -4,7 +4,7 @@
44
55use crate::{AuthError, AuthResult};
66
7#[tracing::instrument(skip_all, fields(request_id = %_request_id.unwrap_or_default()))]
7#[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(_request_id)))]
88pub async fn consume_totp(
99 db: &crate::db::DbConn,
1010 factor: &user_mfa::Model,
@@ -44,7 +44,7 @@
4444 Ok(step)
4545}
4646
47#[tracing::instrument(skip_all, fields(user_id = user_id, request_id = %_request_id.unwrap_or_default()))]
47#[tracing::instrument(skip_all, fields(user_id = user_id, request_id = %envelope::context::resolve_request_id(_request_id)))]
4848pub async fn consume_recovery(
4949 db: &crate::db::DbConn,
5050 user_id: i64,
Modified lib/auth/src/share/password.rs View lib/auth/src/share/password.rs
@@ -31,7 +31,7 @@
3131 Mismatch,
3232}
3333
34#[tracing::instrument(skip_all, fields(request_id = %_request_id.unwrap_or_default()))]
34#[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(_request_id)))]
3535pub async fn hash(client_digest: String, _request_id: Option<&str>) -> AuthResult<String> {
3636 blocking(move || {
3737 argon2_instance()
@@ -42,7 +42,7 @@
4242 .await
4343}
4444
45#[tracing::instrument(skip_all, fields(request_id = %_request_id.unwrap_or_default()))]
45#[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(_request_id)))]
4646pub async fn verify(
4747 client_digest: String,
4848 stored: String,
Modified lib/auth/src/share/rate.rs View lib/auth/src/share/rate.rs
@@ -4,7 +4,7 @@
44
55use crate::errors::{AuthError, AuthResult};
66
7#[tracing::instrument(skip_all, fields(request_id = %_request_id.unwrap_or_default()))]
7#[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(_request_id)))]
88pub async fn rate_limit_once(
99 cache: &Cache,
1010 key: &str,
@@ -21,7 +21,7 @@
2121 Ok(())
2222}
2323
24#[tracing::instrument(skip_all, fields(request_id = %_request_id.unwrap_or_default()))]
24#[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(_request_id)))]
2525pub async fn attempts_track(
2626 cache: &Cache,
2727 key: &str,
@@ -36,13 +36,13 @@
3636 Ok(count <= max as i64)
3737}
3838
39#[tracing::instrument(skip_all, fields(request_id = %_request_id.unwrap_or_default()))]
39#[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(_request_id)))]
4040pub async fn attempts_load(cache: &Cache, key: &str, _request_id: Option<&str>) -> AuthResult<u64> {
4141 let count: Option<i64> = cache.get(key).await?;
4242 Ok(count.unwrap_or_default().max(0) as u64)
4343}
4444
45#[tracing::instrument(skip_all, fields(request_id = %_request_id.unwrap_or_default()))]
45#[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(_request_id)))]
4646pub async fn attempts_reset(cache: &Cache, key: &str, _request_id: Option<&str>) -> AuthResult<()> {
4747 cache.delete(key).await?;
4848 Ok(())
Modified lib/events/src/handler.rs View lib/events/src/handler.rs
@@ -44,7 +44,7 @@
4444 Envelope::new(kind, payload)
4545 }
4646
47 #[tracing::instrument(skip_all, fields(kind = kind, request_id = %request_id.unwrap_or_default()))]
47 #[tracing::instrument(skip_all, fields(kind = kind, request_id = %envelope::context::resolve_request_id(request_id)))]
4848 pub async fn send_labeled<T>(
4949 &self,
5050 kind: &str,
@@ -59,7 +59,7 @@
5959 .await
6060 }
6161
62 #[tracing::instrument(skip_all, fields(kind = kind, request_id = %request_id.unwrap_or_default()))]
62 #[tracing::instrument(skip_all, fields(kind = kind, request_id = %envelope::context::resolve_request_id(request_id)))]
6363 pub async fn send_keyed<T>(
6464 &self,
6565 kind: &str,
@@ -88,7 +88,7 @@
8888 self.send_envelope(&envelope, request_id).await
8989 }
9090
91 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
91 #[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(request_id)))]
9292 pub async fn send_envelope<T>(
9393 &self,
9494 envelope: &Envelope<T>,
@@ -102,7 +102,7 @@
102102 self.dispatch(envelope, request_id).await
103103 }
104104
105 #[tracing::instrument(skip_all, fields(subject = %subject, request_id = %request_id.unwrap_or_default()))]
105 #[tracing::instrument(skip_all, fields(subject = %subject, request_id = %envelope::context::resolve_request_id(request_id)))]
106106 pub async fn publish_durable<T: Serialize>(
107107 &self,
108108 subject: &str,
@@ -118,7 +118,7 @@
118118 Ok(())
119119 }
120120
121 #[tracing::instrument(skip_all, fields(kind = %envelope.kind, request_id = %request_id.unwrap_or_default()))]
121 #[tracing::instrument(skip_all, fields(kind = %envelope.kind, request_id = %envelope::context::resolve_request_id(request_id)))]
122122 async fn dispatch<T: Serialize>(
123123 &self,
124124 envelope: &Envelope<T>,
Modified lib/events/src/outbox.rs View lib/events/src/outbox.rs
@@ -173,7 +173,7 @@
173173 })
174174}
175175
176#[tracing::instrument(skip_all, fields(kind, request_id = %_request_id.unwrap_or_default()))]
176#[tracing::instrument(skip_all, fields(kind, request_id = %envelope::context::resolve_request_id(_request_id)))]
177177pub async fn enqueue_at<T: Serialize>(
178178 conn: &impl ConnectionTrait,
179179 kind: &str,
@@ -480,7 +480,7 @@
480480 Ok(())
481481}
482482
483#[tracing::instrument(skip_all, fields(request_id = %_request_id.unwrap_or_default()))]
483#[tracing::instrument(skip_all, fields(request_id = %envelope::context::resolve_request_id(_request_id)))]
484484async fn run_batch(
485485 db: &DatabaseConnection,
486486 identity: Option<&EventHandler>,
Modified lib/space/src/services/invite.rs View lib/space/src/services/invite.rs
@@ -22,7 +22,7 @@
2222
2323impl SpaceService {
2424 #[allow(clippy::too_many_arguments)]
25 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %request_id.unwrap_or_default()))]
25 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
2626 pub async fn admin_create_invite(
2727 &self,
2828 actor_user_id: i64,
@@ -49,7 +49,7 @@
4949
5050 /// 邮箱型邀请与额外角色必须在同一个事务里写入,否则邀请已经可用而扩展字段丢失。
5151 #[allow(clippy::too_many_arguments)]
52 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %request_id.unwrap_or_default()))]
52 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
5353 pub async fn create_invite_with_extras(
5454 &self,
5555 actor_user_id: i64,
@@ -179,7 +179,7 @@
179179 Ok((summary, token))
180180 }
181181
182 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %request_id.unwrap_or_default()))]
182 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
183183 pub async fn admin_list_invites(
184184 &self,
185185 actor_user_id: i64,
@@ -205,7 +205,7 @@
205205 Ok(rows.iter().map(invite_summary).collect())
206206 }
207207
208 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, invite_id = %invite_id, request_id = %request_id.unwrap_or_default()))]
208 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, invite_id = %invite_id, request_id = %envelope::context::resolve_request_id(request_id)))]
209209 pub async fn admin_revoke_invite(
210210 &self,
211211 actor_user_id: i64,
@@ -257,7 +257,7 @@
257257
258258 /// 兑换邀请。整个过程在一个事务里完成,uses 递增用条件更新防止并发超发:
259259 /// `UPDATE ... WHERE uses < max_uses` 影响 0 行即视为已用尽。
260 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, request_id = %request_id.unwrap_or_default()))]
260 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, request_id = %envelope::context::resolve_request_id(request_id)))]
261261 pub async fn redeem_invite(
262262 &self,
263263 actor_user_id: i64,
Modified lib/space/src/services/join.rs View lib/space/src/services/join.rs
@@ -57,7 +57,7 @@
5757
5858 // 加入规则的可选字段本身就多,参数表与 HTTP 请求体一一对应,拆结构体只会增加噪音。
5959 #[allow(clippy::too_many_arguments)]
60 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %request_id.unwrap_or_default()))]
60 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
6161 pub async fn admin_create_join_rule(
6262 &self,
6363 actor_user_id: i64,
@@ -96,7 +96,7 @@
9696
9797 // 同上:可选字段多,保持与请求体一致的参数顺序。
9898 #[allow(clippy::too_many_arguments)]
99 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, rule_id = %rule_id, request_id = %request_id.unwrap_or_default()))]
99 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, rule_id = %rule_id, request_id = %envelope::context::resolve_request_id(request_id)))]
100100 pub async fn admin_update_join_rule(
101101 &self,
102102 actor_user_id: i64,
@@ -146,7 +146,7 @@
146146 Ok(rule_summary(&updated))
147147 }
148148
149 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, rule_id = %rule_id, request_id = %request_id.unwrap_or_default()))]
149 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, rule_id = %rule_id, request_id = %envelope::context::resolve_request_id(request_id)))]
150150 pub async fn admin_delete_join_rule(
151151 &self,
152152 actor_user_id: i64,
@@ -167,7 +167,7 @@
167167 Ok(deleted.rows_affected > 0)
168168 }
169169
170 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %request_id.unwrap_or_default()))]
170 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
171171 pub async fn admin_list_join_rules(
172172 &self,
173173 actor_user_id: i64,
@@ -184,7 +184,7 @@
184184 Ok(rows.iter().map(rule_summary).collect())
185185 }
186186
187 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %request_id.unwrap_or_default()))]
187 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
188188 pub async fn admin_create_join_request(
189189 &self,
190190 actor_user_id: i64,
@@ -230,7 +230,7 @@
230230 self.join_request_summary(&row).await
231231 }
232232
233 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %request_id.unwrap_or_default()))]
233 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
234234 pub async fn admin_list_join_requests(
235235 &self,
236236 actor_user_id: i64,
@@ -261,7 +261,7 @@
261261 Ok((out, total))
262262 }
263263
264 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, join_request_id = %join_request_id, request_id = %request_id.unwrap_or_default()))]
264 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, join_request_id = %join_request_id, request_id = %envelope::context::resolve_request_id(request_id)))]
265265 pub async fn admin_withdraw_join_request(
266266 &self,
267267 actor_user_id: i64,
@@ -286,7 +286,7 @@
286286 self.join_request_summary(&updated).await
287287 }
288288
289 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, join_request_id = %join_request_id, request_id = %request_id.unwrap_or_default()))]
289 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, join_request_id = %join_request_id, request_id = %envelope::context::resolve_request_id(request_id)))]
290290 async fn finish_join_request(
291291 &self,
292292 actor_user_id: i64,
@@ -338,7 +338,7 @@
338338 self.join_request_summary(&updated).await
339339 }
340340
341 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, join_request_id = %join_request_id, request_id = %request_id.unwrap_or_default()))]
341 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, join_request_id = %join_request_id, request_id = %envelope::context::resolve_request_id(request_id)))]
342342 pub async fn admin_approve_join_request(
343343 &self,
344344 actor_user_id: i64,
@@ -357,7 +357,7 @@
357357 .await
358358 }
359359
360 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, join_request_id = %join_request_id, request_id = %request_id.unwrap_or_default()))]
360 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, join_request_id = %join_request_id, request_id = %envelope::context::resolve_request_id(request_id)))]
361361 pub async fn admin_reject_join_request(
362362 &self,
363363 actor_user_id: i64,
Modified lib/space/src/services/member.rs View lib/space/src/services/member.rs
@@ -125,7 +125,7 @@
125125impl SpaceService {
126126 // 分页与过滤开关直接对应查询参数,拆结构体没有收益。
127127 #[allow(clippy::too_many_arguments)]
128 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %request_id.unwrap_or_default()))]
128 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
129129 pub async fn admin_list_members(
130130 &self,
131131 actor_user_id: i64,
@@ -159,7 +159,7 @@
159159 Ok(out)
160160 }
161161
162 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %request_id.unwrap_or_default()))]
162 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
163163 pub async fn admin_add_member(
164164 &self,
165165 actor_user_id: i64,
@@ -231,7 +231,7 @@
231231 Ok((summary, created))
232232 }
233233
234 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, user_id = user_id, request_id = %request_id.unwrap_or_default()))]
234 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, user_id = user_id, request_id = %envelope::context::resolve_request_id(request_id)))]
235235 pub async fn admin_remove_member(
236236 &self,
237237 actor_user_id: i64,
@@ -298,7 +298,7 @@
298298 Ok(true)
299299 }
300300
301 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %request_id.unwrap_or_default()))]
301 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
302302 pub async fn leave_organization(
303303 &self,
304304 actor_user_id: i64,
@@ -351,7 +351,7 @@
351351 Ok(true)
352352 }
353353
354 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, member_id = %member_id, request_id = %request_id.unwrap_or_default()))]
354 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, member_id = %member_id, request_id = %envelope::context::resolve_request_id(request_id)))]
355355 pub async fn set_member_role(
356356 &self,
357357 actor_user_id: i64,
@@ -433,7 +433,7 @@
433433 Ok(summary)
434434 }
435435
436 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, member_id = %member_id, request_id = %request_id.unwrap_or_default()))]
436 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, member_id = %member_id, request_id = %envelope::context::resolve_request_id(request_id)))]
437437 pub async fn ban_member(
438438 &self,
439439 actor_user_id: i64,
@@ -503,7 +503,7 @@
503503 Ok(summary)
504504 }
505505
506 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, member_id = %member_id, request_id = %request_id.unwrap_or_default()))]
506 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, member_id = %member_id, request_id = %envelope::context::resolve_request_id(request_id)))]
507507 pub async fn unban_member(
508508 &self,
509509 actor_user_id: i64,
@@ -577,7 +577,7 @@
577577 }
578578
579579 /// 按会籍 id 或 user_id 读会籍;两者都提供时以 member_id 为准。
580 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, user_id = user_id, request_id = %request_id.unwrap_or_default()))]
580 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, user_id = user_id, request_id = %envelope::context::resolve_request_id(request_id)))]
581581 pub async fn admin_get_member(
582582 &self,
583583 actor_user_id: i64,
@@ -598,7 +598,7 @@
598598 }
599599
600600 /// 管理端更新会籍:别名、头像、通知偏好、免打扰。封禁中的会籍只走 `update_ban`。
601 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, member_id = %member_id, request_id = %request_id.unwrap_or_default()))]
601 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, member_id = %member_id, request_id = %envelope::context::resolve_request_id(request_id)))]
602602 pub async fn admin_update_member(
603603 &self,
604604 actor_user_id: i64,
@@ -626,7 +626,7 @@
626626 }
627627
628628 /// 成员自助更新:只允许改自己的别名、头像与通知偏好。
629 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %request_id.unwrap_or_default()))]
629 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
630630 pub async fn update_self_member(
631631 &self,
632632 actor_user_id: i64,
@@ -767,7 +767,7 @@
767767 }
768768
769769 /// 封禁列表:只看 `banned_at` 非空的会籍。
770 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %request_id.unwrap_or_default()))]
770 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
771771 pub async fn admin_list_bans(
772772 &self,
773773 actor_user_id: i64,
@@ -793,7 +793,7 @@
793793 Ok(out)
794794 }
795795
796 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, user_id = user_id, request_id = %request_id.unwrap_or_default()))]
796 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, user_id = user_id, request_id = %envelope::context::resolve_request_id(request_id)))]
797797 pub async fn admin_get_ban(
798798 &self,
799799 actor_user_id: i64,
@@ -813,7 +813,7 @@
813813 }
814814
815815 /// 改封禁原因、到期时间与四个放行位;会籍必须处于封禁中。
816 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, user_id = user_id, request_id = %request_id.unwrap_or_default()))]
816 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, user_id = user_id, request_id = %envelope::context::resolve_request_id(request_id)))]
817817 pub async fn admin_update_ban(
818818 &self,
819819 actor_user_id: i64,
Modified lib/space/src/services/permission.rs View lib/space/src/services/permission.rs
@@ -263,7 +263,7 @@
263263
264264/// 唯一判定入口。顺序固定:组织状态 → 活跃会籍 → Owner → Admin 固有集
265265/// → 角色 Allow/Deny → 成员直挂 Allow/Deny。
266#[tracing::instrument(skip_all, fields(organization_id = %organization_id, user_id = user_id, permission = %permission, request_id = %request_id.unwrap_or_default()))]
266#[tracing::instrument(skip_all, fields(organization_id = %organization_id, user_id = user_id, permission = %permission, request_id = %envelope::context::resolve_request_id(request_id)))]
267267pub(crate) async fn resolve(
268268 svc: &SpaceService,
269269 organization_id: Uuid,
@@ -284,7 +284,7 @@
284284
285285impl SpaceService {
286286 /// 平台管理员越过会籍判定,但仍受组织状态约束。
287 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, user_id = user_id, request_id = %request_id.unwrap_or_default()))]
287 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, user_id = user_id, request_id = %envelope::context::resolve_request_id(request_id)))]
288288 pub async fn check_permission(
289289 &self,
290290 actor_user_id: i64,
@@ -315,7 +315,7 @@
315315 }
316316
317317 /// 批量校验:组织与会籍只加载一次,权限逐个走同一条判定链。
318 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, user_id = user_id, request_id = %request_id.unwrap_or_default()))]
318 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, user_id = user_id, request_id = %envelope::context::resolve_request_id(request_id)))]
319319 pub async fn check_permissions(
320320 &self,
321321 actor_user_id: i64,
Modified lib/space/src/services/role.rs View lib/space/src/services/role.rs
@@ -236,7 +236,7 @@
236236}
237237
238238impl SpaceService {
239 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %request_id.unwrap_or_default()))]
239 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
240240 pub async fn list_roles(
241241 &self,
242242 actor_user_id: i64,
@@ -258,7 +258,7 @@
258258 Ok(out)
259259 }
260260
261 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %request_id.unwrap_or_default()))]
261 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
262262 pub async fn create_role(
263263 &self,
264264 actor_user_id: i64,
@@ -319,7 +319,7 @@
319319 Ok(summary)
320320 }
321321
322 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, role_id = %role_id, request_id = %request_id.unwrap_or_default()))]
322 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, role_id = %role_id, request_id = %envelope::context::resolve_request_id(request_id)))]
323323 pub async fn set_role_permissions(
324324 &self,
325325 actor_user_id: i64,
@@ -382,7 +382,7 @@
382382 }
383383
384384 #[allow(clippy::too_many_arguments)]
385 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, role_id = %role_id, request_id = %request_id.unwrap_or_default()))]
385 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, role_id = %role_id, request_id = %envelope::context::resolve_request_id(request_id)))]
386386 pub async fn update_role(
387387 &self,
388388 actor_user_id: i64,
@@ -471,7 +471,7 @@
471471 Ok(summary)
472472 }
473473
474 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, role_id = %role_id, request_id = %request_id.unwrap_or_default()))]
474 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, role_id = %role_id, request_id = %envelope::context::resolve_request_id(request_id)))]
475475 pub async fn delete_role(
476476 &self,
477477 actor_user_id: i64,
@@ -523,7 +523,7 @@
523523 Ok(true)
524524 }
525525
526 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, member_id = %member_id, role_key = %role_key, request_id = %request_id.unwrap_or_default()))]
526 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, member_id = %member_id, role_key = %role_key, request_id = %envelope::context::resolve_request_id(request_id)))]
527527 pub async fn assign_role(
528528 &self,
529529 actor_user_id: i64,
@@ -590,7 +590,7 @@
590590 Ok(keys)
591591 }
592592
593 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, member_id = %member_id, role_key = %role_key, request_id = %request_id.unwrap_or_default()))]
593 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, member_id = %member_id, role_key = %role_key, request_id = %envelope::context::resolve_request_id(request_id)))]
594594 pub async fn unassign_role(
595595 &self,
596596 actor_user_id: i64,
@@ -655,7 +655,7 @@
655655 }
656656
657657 /// 成员直挂权限:整表替换语义。`permission` 必须在白名单内,否则直接拒绝。
658 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, member_id = %member_id, request_id = %request_id.unwrap_or_default()))]
658 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, member_id = %member_id, request_id = %envelope::context::resolve_request_id(request_id)))]
659659 pub async fn set_member_permissions(
660660 &self,
661661 actor_user_id: i64,
@@ -756,7 +756,7 @@
756756 }
757757
758758 /// 单个角色详情。
759 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, role_id = %role_id, request_id = %request_id.unwrap_or_default()))]
759 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, role_id = %role_id, request_id = %envelope::context::resolve_request_id(request_id)))]
760760 pub async fn get_role(
761761 &self,
762762 actor_user_id: i64,
@@ -771,7 +771,7 @@
771771 }
772772
773773 /// 自助加入:只接受 `self_assignable = true` 的非内置角色。
774 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, role_id = %role_id, request_id = %request_id.unwrap_or_default()))]
774 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, role_id = %role_id, request_id = %envelope::context::resolve_request_id(request_id)))]
775775 pub async fn join_role(
776776 &self,
777777 actor_user_id: i64,
@@ -814,7 +814,7 @@
814814 }
815815
816816 /// 自助退出:同样只接受自助角色;重复退出视为成功。
817 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, role_id = %role_id, request_id = %request_id.unwrap_or_default()))]
817 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, role_id = %role_id, request_id = %envelope::context::resolve_request_id(request_id)))]
818818 pub async fn leave_role(
819819 &self,
820820 actor_user_id: i64,
Modified lib/space/src/services/service.rs View lib/space/src/services/service.rs
@@ -229,7 +229,7 @@
229229 self.emit_tx(txn, kind, labels, payload, request_id).await
230230 }
231231
232 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, request_id = %request_id.unwrap_or_default()))]
232 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, request_id = %envelope::context::resolve_request_id(request_id)))]
233233 pub async fn create_space(
234234 &self,
235235 actor_user_id: i64,
@@ -311,7 +311,7 @@
311311 Ok(summary)
312312 }
313313
314 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = ?organization_id, request_id = %request_id.unwrap_or_default()))]
314 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = ?organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
315315 pub async fn get_space(
316316 &self,
317317 actor_user_id: i64,
@@ -410,7 +410,7 @@
410410 })
411411 }
412412
413 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, user_id = user_id, request_id = %request_id.unwrap_or_default()))]
413 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, user_id = user_id, request_id = %envelope::context::resolve_request_id(request_id)))]
414414 pub async fn list_spaces(
415415 &self,
416416 actor_user_id: i64,
@@ -490,7 +490,7 @@
490490 Ok(out)
491491 }
492492
493 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %request_id.unwrap_or_default()))]
493 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
494494 pub async fn update_space(
495495 &self,
496496 actor_user_id: i64,
@@ -589,7 +589,7 @@
589589 Ok(summary)
590590 }
591591
592 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %request_id.unwrap_or_default()))]
592 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
593593 pub async fn archive_space(
594594 &self,
595595 actor_user_id: i64,
@@ -635,7 +635,7 @@
635635 Ok(summary)
636636 }
637637
638 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %request_id.unwrap_or_default()))]
638 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, request_id = %envelope::context::resolve_request_id(request_id)))]
639639 pub async fn restore_space(
640640 &self,
641641 actor_user_id: i64,
@@ -690,7 +690,7 @@
690690 /// 删除分两种语义:`force = false` 时仍有活跃成员会被拦下,
691691 /// `force = true` 时才连成员与角色一并清理。软删标记写在 `deleted_at` 上,
692692 /// 但权限缓存与派生数据必须真的清掉,否则残留的授予会在重建同名组织时复活。
693 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, force = force, request_id = %request_id.unwrap_or_default()))]
693 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, force = force, request_id = %envelope::context::resolve_request_id(request_id)))]
694694 pub async fn delete_space(
695695 &self,
696696 actor_user_id: i64,
@@ -802,7 +802,7 @@
802802 Ok(true)
803803 }
804804
805 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, target_user_id = target_user_id, request_id = %request_id.unwrap_or_default()))]
805 #[tracing::instrument(skip_all, fields(actor_user_id = actor_user_id, organization_id = %organization_id, target_user_id = target_user_id, request_id = %envelope::context::resolve_request_id(request_id)))]
806806 pub async fn transfer_ownership(
807807 &self,
808808 actor_user_id: i64,
Modified lib/user/src/services/ssh_keys.rs View lib/user/src/services/ssh_keys.rs
@@ -30,7 +30,7 @@
3030}
3131
3232impl SshKeys {
33 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
33 #[tracing::instrument(skip_all, fields(request_id = %export::middleware::resolve_request_id(request_id)))]
3434 pub async fn lookup_ssh_key_inner(
3535 &self,
3636 request_id: Option<&str>,
@@ -91,7 +91,7 @@
9191 current_security_version: user.security_version,
9292 })
9393 }
94 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
94 #[tracing::instrument(skip_all, fields(request_id = %export::middleware::resolve_request_id(request_id)))]
9595 pub async fn add_ssh_key_inner(
9696 &self,
9797 request_id: Option<&str>,
@@ -124,7 +124,7 @@
124124 key: Some(crate::share::ssh_keys::ssh_key_info(&row)),
125125 })
126126 }
127 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
127 #[tracing::instrument(skip_all, fields(request_id = %export::middleware::resolve_request_id(request_id)))]
128128 pub async fn list_user_ssh_keys_inner(
129129 &self,
130130 request_id: Option<&str>,
@@ -170,7 +170,7 @@
170170 page: Some(PageResponse { next_page_token }),
171171 })
172172 }
173 #[tracing::instrument(skip_all, fields(request_id = %request_id.unwrap_or_default()))]
173 #[tracing::instrument(skip_all, fields(request_id = %export::middleware::resolve_request_id(request_id)))]
174174 pub async fn revoke_ssh_key_inner(
175175 &self,
176176 request_id: Option<&str>,