X-SaaSus-Trace-Id 自動引継機能の追加#28
Open
takahujikeita wants to merge 1 commit into
Open
Conversation
- Add x_saasus_trace_id field to Client singleton - Inject X-SaaSus-Trace-Id header in set_referer_header() - Propagate through Authenticate.authenticate() and all API client constructors - Extract X-SaaSus-Trace-Id from incoming request in fastapi_auth() Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
X-SaaSus-Trace-Id を受信リクエストから取得し、同一リクエストライフサイクル内の後続 SaaSus API 呼び出しへ自動転送できるようにする変更です(既存の X-SaaSus-Referer と同パターンでの伝播)。
Changes:
Clientにx_saasus_trace_idを保持し、リクエストヘッダーへX-SaaSus-Trace-Idを付与する処理を追加Authenticate.authenticate()がx_saasus_trace_idを受け取りClientに保存- 各
Signed*ApiClientのコンストラクタ引数にx_saasus_trace_idを追加し、署名付き呼び出しでヘッダーを伝播 - FastAPI サンプルでリクエストヘッダーから
X-SaaSus-Trace-Idを取り出してauthenticate()に渡すよう変更
Reviewed changes
Copilot reviewed 10 out of 12 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| saasus_sdk_python/middleware/middleware.py | authenticate() に x_saasus_trace_id を追加し Client に保存 |
| saasus_sdk_python/client/client.py | Client に trace id を追加し set_referer_header() で X-SaaSus-Trace-Id を付与 |
| saasus_sdk_python/client/pricing_client.py | SignedPricingApiClient に trace id 引数を追加し Client へ伝播 |
| saasus_sdk_python/client/integration_client.py | SignedIntegrationApiClient に trace id 引数を追加し Client へ伝播 |
| saasus_sdk_python/client/communication_client.py | SignedCommunicationApiClient に trace id 引数を追加し Client へ伝播 |
| saasus_sdk_python/client/billing_client.py | SignedBillingApiClient に trace id 引数を追加し Client へ伝播 |
| saasus_sdk_python/client/awsmarketplace_client.py | SignedAwsmarketplaceApiClient に trace id 引数を追加し Client へ伝播 |
| saasus_sdk_python/client/auth_client.py | SignedAuthApiClient に trace id 引数を追加し Client へ伝播 |
| saasus_sdk_python/client/apilog_client.py | SignedApilogApiClient に trace id 引数を追加し Client へ伝播 |
| saasus_sdk_python/main.py | FastAPI 認証で X-SaaSus-Trace-Id を取得して authenticate() に渡す |
Comments suppressed due to low confidence (1)
saasus_sdk_python/client/client.py:35
Clientis a process-wide singleton but now holdsx_saasus_trace_id(and other request-derived headers) as mutable attributes. This is not safe under concurrency: values can leak across requests/tasks and attach the wrong trace id to outbound calls.
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
cls._instance.referer = None
cls._instance.x_saasus_referer = None
cls._instance.x_saasus_trace_id = None
cls._instance.api_key = os.getenv("SAASUS_API_KEY", "")
cls._instance.secret_key = os.getenv("SAASUS_SECRET_KEY", "")
cls._instance.saas_id = os.getenv("SAASUS_SAAS_ID", "")
cls._instance.time_provider = lambda: time.strftime("%Y%m%d%H%M", time.gmtime())
cls._instance.base_url = os.getenv("SAASUS_BASE_URL", "https://api.saasus.io/v1")
return cls._instance
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+8
to
+14
| def __init__(self, referer=None, x_saasus_referer=None, x_saasus_trace_id=None, *args, **kwargs): | ||
| super().__init__(*args, **kwargs) | ||
| self.client = Client() | ||
| self.configuration.default_headers = {} | ||
| self.client.referer = referer | ||
| self.client.x_saasus_referer = x_saasus_referer | ||
| self.client.x_saasus_trace_id = x_saasus_trace_id |
Comment on lines
+9
to
+15
| def __init__(self, referer=None, x_saasus_referer=None, x_saasus_trace_id=None, *args, **kwargs): | ||
| super().__init__(*args, **kwargs) | ||
| self.client = Client() | ||
| self.configuration.default_headers = {} | ||
| self.client.referer = referer | ||
| self.client.x_saasus_referer = x_saasus_referer | ||
| self.client.x_saasus_trace_id = x_saasus_trace_id |
Comment on lines
+9
to
+15
| def __init__(self, referer=None, x_saasus_referer=None, x_saasus_trace_id=None, *args, **kwargs): | ||
| super().__init__(*args, **kwargs) | ||
| self.client = Client() | ||
| self.configuration.default_headers = {} | ||
| self.client.referer = referer | ||
| self.client.x_saasus_referer = x_saasus_referer | ||
| self.client.x_saasus_trace_id = x_saasus_trace_id |
Comment on lines
+9
to
+15
| def __init__(self, referer=None, x_saasus_referer=None, x_saasus_trace_id=None, *args, **kwargs): | ||
| super().__init__(*args, **kwargs) | ||
| self.client = Client() | ||
| self.configuration.default_headers = {} | ||
| self.client.referer = referer | ||
| self.client.x_saasus_referer = x_saasus_referer | ||
| self.client.x_saasus_trace_id = x_saasus_trace_id |
Comment on lines
+9
to
+15
| def __init__(self, referer=None, x_saasus_referer=None, x_saasus_trace_id=None, *args, **kwargs): | ||
| super().__init__(*args, **kwargs) | ||
| self.client = Client() | ||
| self.configuration.default_headers = {} | ||
| self.client.referer = referer | ||
| self.client.x_saasus_referer = x_saasus_referer | ||
| self.client.x_saasus_trace_id = x_saasus_trace_id |
Comment on lines
+9
to
+15
| def __init__(self, referer=None, x_saasus_referer=None, x_saasus_trace_id=None, *args, **kwargs): | ||
| super().__init__(*args, **kwargs) | ||
| self.client = Client() | ||
| self.configuration.default_headers = {} | ||
| self.client.referer = referer | ||
| self.client.x_saasus_referer = x_saasus_referer | ||
| self.client.x_saasus_trace_id = x_saasus_trace_id |
Comment on lines
+9
to
15
| def __init__(self, referer=None, x_saasus_referer=None, x_saasus_trace_id=None, *args, **kwargs): | ||
| self.client = Client() | ||
| self.client.referer = referer | ||
| self.client.x_saasus_referer = x_saasus_referer | ||
| self.client.x_saasus_trace_id = x_saasus_trace_id | ||
| self.base_url = os.getenv("SAASUS_BASE_URL", "https://api.saasus.io/v1") | ||
| super().__init__(*args, **kwargs) |
Comment on lines
33
to
+35
| self.client.referer = referer | ||
| self.client.x_saasus_referer = x_saasus_referer | ||
| self.client.x_saasus_trace_id = x_saasus_trace_id |
Comment on lines
51
to
+53
| referer = request.headers.get("Referer", "") | ||
| user_info, error = auth.authenticate(id_token=token, referer=referer) | ||
| x_saasus_trace_id = request.headers.get("X-SaaSus-Trace-Id", "") | ||
| user_info, error = auth.authenticate(id_token=token, referer=referer, x_saasus_trace_id=x_saasus_trace_id) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
X-SaaSus-Trace-Idヘッダーの自動引継機能を実装しました。アプリケーションサーバーが
X-SaaSus-Trace-Idヘッダーを含むリクエストを受信した場合、その値が同一リクエストライフサイクル内の後続の SaaSus API 呼び出しに自動的に転送されます。変更内容
saasus_sdk_python/client/client.py:x_saasus_trace_idフィールドを追加し、set_referer_header()でヘッダーを付与saasus_sdk_python/middleware/middleware.py:authenticate()でx_saasus_trace_idを受け取り Client に保存saasus_sdk_python/client/*_client.py: コンストラクタでx_saasus_trace_idを受け取り伝播saasus_sdk_python/__main__.py: リクエストからX-SaaSus-Trace-Idを取得し authenticate に渡す実装パターン
既存の
X-SaaSus-Refererの実装と同じパターンに従っています。