in src/common/Telemetry.ts [136:222]
public static TraceRequest(context: any) {
let serviceType = "";
let totalReqs = 0;
let reqName = "";
try{
if (AzuriteTelemetryClient.enableTelemetry && AzuriteTelemetryClient.requestClient !== undefined)
{
if (context instanceof BlobContext)
{
serviceType = "Blob";
AzuriteTelemetryClient._totalBlobRequestCount++;
totalReqs = AzuriteTelemetryClient._totalBlobRequestCount;
reqName = "B_" + BlobOperation[context.operation??0];
}
else if (context instanceof QueueContext)
{
serviceType = "Queue";
AzuriteTelemetryClient._totalQueueRequestCount++;
totalReqs = AzuriteTelemetryClient._totalQueueRequestCount;
reqName = "Q_" + QueueOperation[context.operation??0];
}
else if (context instanceof TableContext)
{
serviceType = "Table";
AzuriteTelemetryClient._totalTableRequestCount++;
totalReqs = AzuriteTelemetryClient._totalTableRequestCount;
reqName = "T_" + TableOperation[context.operation??0];
}
let requestProperties: { [key: string]: any } = {
apiVersion: "v"+context.request?.getHeader("x-ms-version"),
authorization: context.request !== undefined ? AzuriteTelemetryClient.GetRequestAuthentication(context.request.getHeader("authorization"), context.request.getQuery("sig")) : "",
instanceID: AzuriteTelemetryClient.instanceID,
sessionID: AzuriteTelemetryClient.sessionID,
ReqNo:totalReqs,
};
const ingress = context.request?.getHeader("content-length");
if (ingress !== undefined)
{
if (ingress && parseInt(ingress)) {
requestProperties["ingress"] = ingress;
this._totalIngressSize += parseInt(ingress);
}
}
// When body is xml or json, "content-length" header won't return even has body, so currently can't be caculated into egress in telemetry.
// Head request don't has body but can has "content-length" header, like in GetBlobProperties "content-length" header means the blob length but not body length
if (context.request?.getMethod() !== "HEAD")
{
const egress = context.response?.getHeader("content-length");
if (egress !== undefined)
{
if (egress && parseInt(egress)) {
requestProperties["egress"] = egress;
this._totalEgressSize += parseInt(egress);
}
}
}
AzuriteTelemetryClient.requestClient.trackRequest(
{
name:reqName,
url:context.request !== undefined ? AzuriteTelemetryClient.GetRequestUri(context.request.getEndpoint()) : "",
duration:context.startTime?((new Date()).getTime() - context.startTime?.getTime()):0,
resultCode:context.response?.getStatusCode()??0,
success:(context.response?.getStatusCode() ?? 500) <= 399,
id: context.contextId, // Request ID
source: context.request?.getHeader("user-agent"), // User Agent
properties: requestProperties,
contextObjects:
{
operationId: "",
operationParentId: "",
operationName: "test",
operation_Name: "test",
appName: ""
}
});
logger.verbose(`Send ${serviceType} telemetry: ` + reqName, context.contextId === undefined ? context.contextID : context.contextId);
}
}
catch (e)
{
logger.warn(`Fail to telemetry a ${serviceType} request, error: ` + e.message);
}
}