HTTP リクエストへのトラッキングの追加
半自動 HTTP トラッキング
HttpMessageHandler は、すべてのトラッキングとエラー処理を処理します。ロギングなどの他の目的ですでにカスタム HttpMessageHandler を使用している場合は、他の内部ハンドラを含めることもできます。
半自動トラッキングを追加するには、HttpClient をインスタンス化し、HttpRequestTrackerHandler を渡します。
var client = new HttpClient(new HttpRequestTrackerHandler());
その後、クライアントを使用して送信されたすべてのリクエストがインストルメント化されます。
response = await client.GetAsync(uri);
HttpClient に HttpMessageHandler がすでに渡されている場合(たとえば、ロギングハンドラの追加)、HttpRequestTrackerHandler をインスタンス化して、既存のハンドラをコンストラクタに渡す必要があります。var loggingHandler = new MyLoggingHandler();
var client = new HttpClient(new HttpRequestTrackerHandler(loggingHandler));手動 HTTP トラッキング
AppDynamics.Agent.HttpRequestTracker クラスを使用してネットワークリクエストを手動で報告できます。
次の例では、System.Net.Http.HttpClient クラスで HttpRequestTracker を使用しています。tracker オブジェクトは、ネットワークリクエストおよびネットワークエラーを同期的にキャプチャして報告します。
using AppDynamics.Agent;
...
public async Task<string> Fetch(Uri uri) {
var client = new HttpClient();
// Create AppDynamics Tracker
var tracker = HttpRequestTracker.Create(uri);
// Add AppDynamics Server Correlation Headers
foreach (var header in ServerCorrelationHeaders.Generate) {
// Each header could have multiple values
foreach (var value in header.Value) {
client.DefaultRequestHeaders.Add(header.Key, value);
}
}
HttpResponseMessage response = null;
try {
response = await client.GetAsync(uri);
} catch (Exception ex) {
// Capture any network errors.
tracker.Exception = ex;
tracker.ReportDone();
throw ex; //you decide to throw it or not
}
if (!response.Equals(null)) {
// Capture request information such as the
// status code, status message, and headers.
tracker.ResponseCode = (int)response.StatusCode;
tracker.StatusLine = response.ReasonPhrase;
tracker.ResponseHeaderFields = response.Headers;
tracker.ReportDone();
return await response.Content.ReadAsStringAsync();
}
return null;
}
ネットワークリクエストへのカスタム ユーザー データ プロパティの追加
HttpRequestTracker にユーザーデータを追加することで、特定のネットワークリクエストに HttpRequestTracker カスタム ユーザー データ プロパティを追加できます。
public HttpRequestTracker withUserData(String key, String value)
public HttpRequestTracker withUserLong(String key, Long value)
public HttpRequestTracker withUserBoolean(String key, Boolean value)
public HttpRequestTracker withUserDouble(String key, Double value)
public HttpRequestTracker withUserDate(String key, Date value)
例
public byte[] sendRequest(URL url) throws HttpException {
HttpRequestTracker tracker = Instrumentation.beginHttpRequest(url);
try {
// implementation omitted
tracker.withResponseCode(theResponseCode)
.withResponseHeaderFields(theResponseHeaderFields)
.withUserData("key", "value")
.withUserLong("number", 100)
.withUserBoolean("boolean", true)
.withUserDouble("double", 1.1234)
.withUserDate("date", 1609488000)
.reportDone();
return responseBody;
} catch (UnderlyingException e) {
tracker.withException(e)
.reportDone();
throw new HttpException(e);
}
}