in elasticapm/instrumentation/packages/azure.py [0:0]
def handle_azureblob(request, hostname, path, query_params, service, service_type, context):
"""
Returns the HandlerInfo for Azure Blob Storage operations
"""
account_name = hostname.split(".")[0]
context["destination"]["service"] = {
"name": service,
"resource": "{}/{}".format(service, account_name),
"type": service_type,
}
method = request.method
headers = request.headers
blob = path[1:]
operation_name = "Unknown"
if method.lower() == "delete":
operation_name = "Delete"
elif method.lower() == "get":
operation_name = "Download"
if "container" in query_params.get("restype", []):
operation_name = "GetProperties"
if "acl" in query_params.get("comp", []):
operation_name = "GetAcl"
elif "list" in query_params.get("comp", []):
operation_name = "ListBlobs"
elif "metadata" in query_params.get("comp", []):
operation_name = "GetMetadata"
elif "list" in query_params.get("comp", []):
operation_name = "ListContainers"
elif "tags" in query_params.get("comp", []):
operation_name = "GetTags"
if query_params.get("where"):
operation_name = "FindTags"
elif "blocklist" in query_params.get("comp", []):
operation_name = "GetBlockList"
elif "pagelist" in query_params.get("comp", []):
operation_name = "GetPageRanges"
elif "stats" in query_params.get("comp", []):
operation_name = "Stats"
elif "blobs" in query_params.get("comp", []):
operation_name = "FilterBlobs"
elif method.lower() == "head":
operation_name = "GetProperties"
if "container" in query_params.get("restype", []) and query_params.get("comp") == "metadata":
operation_name = "GetMetadata"
elif "container" in query_params.get("restype", []) and query_params.get("comp") == "acl":
operation_name = "GetAcl"
elif method.lower() == "post":
if "batch" in query_params.get("comp", []):
operation_name = "Batch"
elif "query" in query_params.get("comp", []):
operation_name = "Query"
elif "userdelegationkey" in query_params.get("comp", []):
operation_name = "GetUserDelegationKey"
elif method.lower() == "put":
operation_name = "Create"
if "x-ms-copy-source" in headers:
operation_name = "Copy"
# These are repetitive and unnecessary, but included in case the table at
# https://github.com/elastic/apm/blob/main/specs/agents/tracing-instrumentation-azure.md
# changes in the future
if "block" in query_params.get("comp", []):
operation_name = "Copy"
elif "page" in query_params.get("comp", []):
operation_name = "Copy"
elif "incrementalcopy" in query_params.get("comp", []):
operation_name = "Copy"
elif "appendblock" in query_params.get("comp", []):
operation_name = "Copy"
elif "x-ms-blob-type" in headers:
operation_name = "Upload"
elif "x-ms-page-write" in headers and query_params.get("comp") == "page":
operation_name = "Clear"
elif "copy" in query_params.get("comp", []):
operation_name = "Abort"
elif "block" in query_params.get("comp", []):
operation_name = "Upload"
elif "blocklist" in query_params.get("comp", []):
operation_name = "Upload"
elif "page" in query_params.get("comp", []):
operation_name = "Upload"
elif "appendblock" in query_params.get("comp", []):
operation_name = "Upload"
elif "metadata" in query_params.get("comp", []):
operation_name = "SetMetadata"
elif "container" in query_params.get("restype", []) and query_params.get("comp") == "acl":
operation_name = "SetAcl"
elif "properties" in query_params.get("comp", []):
operation_name = "SetProperties"
elif "lease" in query_params.get("comp", []):
operation_name = "Lease"
elif "snapshot" in query_params.get("comp", []):
operation_name = "Snapshot"
elif "undelete" in query_params.get("comp", []):
operation_name = "Undelete"
elif "tags" in query_params.get("comp", []):
operation_name = "SetTags"
elif "tier" in query_params.get("comp", []):
operation_name = "SetTier"
elif "expiry" in query_params.get("comp", []):
operation_name = "SetExpiry"
elif "seal" in query_params.get("comp", []):
operation_name = "Seal"
elif "rename" in query_params.get("comp", []):
operation_name = "Rename"
signature = "AzureBlob {} {}".format(operation_name, blob)
return HandlerInfo(signature, service_type, service, operation_name, context)