in elasticapm/instrumentation/packages/azure.py [0:0]
def handle_azuretable(request, hostname, path, query_params, service, service_type, context):
"""
Returns the HandlerInfo for Azure Table Storage operations
"""
account_name = hostname.split(".")[0]
method = request.method
body = request.body
try:
body = json.loads(body)
except json.decoder.JSONDecodeError: # str not bytes
body = {}
# /tablename(PartitionKey='<partition-key>',RowKey='<row-key>')
resource_name = path.split("/", 1)[1] if "/" in path else path
context["destination"]["service"] = {
"name": service,
"resource": "{}/{}".format(service, account_name),
"type": service_type,
}
operation_name = "Unknown"
if method.lower() == "put":
operation_name = "Update"
if "properties" in query_params.get("comp", []):
operation_name = "SetProperties"
elif "acl" in query_params.get("comp", []):
operation_name = "SetAcl"
elif method.lower() == "post":
if resource_name == "Tables":
resource_name = body.get("TableName", resource_name)
operation_name = "Create"
else: # /<tablename>
operation_name = "Insert"
elif method.lower() == "get":
operation_name = "Query" # for both /Tables and /table()
if "properties" in query_params.get("comp", []):
operation_name = "GetProperties"
elif "stats" in query_params.get("comp", []):
operation_name = "Stats"
elif "acl" in query_params.get("comp", []):
operation_name = "GetAcl"
elif method.lower() == "delete":
operation_name = "Delete"
if "Tables" in resource_name and "'" in resource_name:
resource_name = resource_name.split("'")[1] # /Tables('<table_name>')
elif method.lower() == "options":
operation_name = "Preflight"
elif method.lower() == "head" and "acl" in query_params.get("comp", []):
operation_name = "GetAcl"
elif method.lower() == "merge":
operation_name = "Merge"
signature = "AzureTable {} {}".format(operation_name, resource_name)
return HandlerInfo(signature, service_type, service, operation_name, context)