Skip to content

Commit 6070444

Browse files
committed
modifications to app insights query
1 parent 26b7027 commit 6070444

File tree

3 files changed

+50
-35
lines changed

3 files changed

+50
-35
lines changed

src/containerapp/azext_containerapp/_validators.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ def validate_revision_and_get_name(cmd, resource_group_name, container_app_name,
318318
if not provided_revision_name:
319319
logger.debug("No revision name provided for multiple revision mode container app")
320320
raise ValidationError("Revision name is required when active revision mode is not 'single'.")
321-
return provided_revision_name
321+
return provided_revision_name, active_revision_mode
322322
if not provided_revision_name:
323323
logger.debug("No revision name provided - attempting to determine latest revision")
324324
revision_name = safe_get(containerapp_def, "properties", "latestRevisionName")
@@ -331,9 +331,9 @@ def validate_revision_and_get_name(cmd, resource_group_name, container_app_name,
331331
if not revision_name or revision_name is None:
332332
logger.debug("Could not determine any revision name from container app properties")
333333
raise ValidationError("Could not determine the latest revision name. Please provide --revision.")
334-
return revision_name
334+
return revision_name, active_revision_mode
335335
logger.debug("Using provided revision name: '%s'", provided_revision_name)
336-
return provided_revision_name
336+
return provided_revision_name, active_revision_mode
337337

338338

339339
def validate_functionapp_kind(cmd, resource_group_name, container_app_name):

src/containerapp/azext_containerapp/containerapp_function_keys_decorator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def validate_common_arguments(self):
5858
)
5959

6060
# Validate revision and get the appropriate revision name
61-
revision_name = validate_revision_and_get_name(
61+
revision_name, _ = validate_revision_and_get_name(
6262
cmd=self.cmd,
6363
resource_group_name=resource_group_name,
6464
container_app_name=name,

src/containerapp/azext_containerapp/containerapp_functions_decorator.py

Lines changed: 46 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def validate_common_arguments(self):
7373
)
7474

7575
# Validate revision and get the appropriate revision name
76-
revision_name = validate_revision_and_get_name(
76+
revision_name, _ = validate_revision_and_get_name(
7777
cmd=self.cmd,
7878
resource_group_name=resource_group_name,
7979
container_app_name=name,
@@ -186,23 +186,17 @@ def validate_arguments(self):
186186
)
187187

188188
revision_name = self.get_argument_revision_name()
189-
revision_name = validate_revision_and_get_name(
189+
revision_name, active_revision_mode = validate_revision_and_get_name(
190190
cmd=self.cmd,
191191
resource_group_name=self.get_argument_resource_group_name(),
192192
container_app_name=self.get_argument_container_app_name(),
193193
provided_revision_name=revision_name
194194
)
195195

196-
min_replicas = get_min_replicas_from_revision(
197-
cmd=self.cmd,
198-
resource_group_name=self.get_argument_resource_group_name(),
199-
container_app_name=self.get_argument_container_app_name(),
200-
revision_name=revision_name
201-
)
202-
if min_replicas is not None and min_replicas == 0:
203-
raise CLIError(f"The revision '{revision_name}' has minimum replicas set to 0. Ensure that there is at least one replica to fetch invocation details. To update minimum replica: Run 'az containerapp update --name {self.get_argument_container_app_name()} --resource-group {self.get_argument_resource_group_name()} --min-replica 1'")
204196
# Update the revision name with the validated value
205197
self.set_argument_revision_name(revision_name)
198+
# Store active revision mode for use in query building
199+
self.active_revision_mode = active_revision_mode
206200
self.validate_function_name_requirement()
207201

208202
def _get_app_insights_id(self, resource_group_name, container_app_name, revision_name):
@@ -277,15 +271,24 @@ def get_summary(self):
277271
# Fetch the app insights resource app id
278272
app_id = self._get_app_insights_id(resource_group_name, container_app_name, revision_name)
279273

280-
# Use application insights query to get function invocations summary
281-
invocation_summary_query = (
282-
f"requests | extend functionNameFromCustomDimension = tostring(customDimensions['faas.name']) "
283-
f"| where timestamp >= ago({timespan}) "
284-
f"| where cloud_RoleName =~ '{container_app_name}' "
285-
f"| where cloud_RoleInstance contains '{revision_name}' "
286-
f"| where operation_Name =~ '{function_name}' or functionNameFromCustomDimension =~ '{function_name}' "
287-
f"| summarize SuccessCount = coalesce(countif(success == true), 0), ErrorCount = coalesce(countif(success == false), 0)"
288-
)
274+
# Build query based on active revision mode
275+
if self.active_revision_mode.lower() == "single":
276+
invocation_summary_query = (
277+
f"requests | extend functionNameFromCustomDimension = tostring(customDimensions['faas.name']) "
278+
f"| where timestamp >= ago({timespan}) "
279+
f"| where cloud_RoleName =~ '{container_app_name}' "
280+
f"| where operation_Name =~ '{function_name}' or functionNameFromCustomDimension =~ '{function_name}' "
281+
f"| summarize SuccessCount = coalesce(countif(success == true), 0), ErrorCount = coalesce(countif(success == false), 0)"
282+
)
283+
else:
284+
invocation_summary_query = (
285+
f"requests | extend functionNameFromCustomDimension = tostring(customDimensions['faas.name']) "
286+
f"| where timestamp >= ago({timespan}) "
287+
f"| where cloud_RoleName =~ '{container_app_name}' "
288+
f"| where cloud_RoleInstance contains '{revision_name}' "
289+
f"| where operation_Name =~ '{function_name}' or functionNameFromCustomDimension =~ '{function_name}' "
290+
f"| summarize SuccessCount = coalesce(countif(success == true), 0), ErrorCount = coalesce(countif(success == false), 0)"
291+
)
289292

290293
result = self._execute_app_insights_query(app_id, invocation_summary_query, "getLast30DaySummary")
291294

@@ -309,18 +312,30 @@ def get_traces(self):
309312
# Fetch the app insights resource app id
310313
app_id = self._get_app_insights_id(resource_group_name, container_app_name, revision_name)
311314

312-
# Use application insights query to get function invocations traces
313-
invocation_traces_query = (
314-
f"requests | extend functionNameFromCustomDimension = tostring(customDimensions['faas.name']) "
315-
f"| project timestamp, id, operation_Name, success, resultCode, duration, operation_Id, functionNameFromCustomDimension, "
316-
f"cloud_RoleName, cloud_RoleInstance, invocationId=coalesce(tostring(customDimensions['InvocationId']), tostring(customDimensions['faas.invocation_id'])) "
317-
f"| where timestamp > ago({timespan}) "
318-
f"| where cloud_RoleName =~ '{container_app_name}' "
319-
f"| where cloud_RoleInstance contains '{revision_name}' "
320-
f"| where operation_Name =~ '{function_name}' or functionNameFromCustomDimension =~ '{function_name}' "
321-
f"| order by timestamp desc | take {limit} "
322-
f"| project timestamp, success, resultCode, durationInMilliSeconds=duration, invocationId, operationId=operation_Id, operationName=operation_Name, functionNameFromCustomDimension "
323-
)
315+
# Build query based on active revision mode
316+
if self.active_revision_mode.lower() == "single":
317+
invocation_traces_query = (
318+
f"requests | extend functionNameFromCustomDimension = tostring(customDimensions['faas.name']) "
319+
f"| project timestamp, id, operation_Name, success, resultCode, duration, operation_Id, functionNameFromCustomDimension, "
320+
f"cloud_RoleName, cloud_RoleInstance, invocationId=coalesce(tostring(customDimensions['InvocationId']), tostring(customDimensions['faas.invocation_id'])) "
321+
f"| where timestamp > ago({timespan}) "
322+
f"| where cloud_RoleName =~ '{container_app_name}' "
323+
f"| where operation_Name =~ '{function_name}' or functionNameFromCustomDimension =~ '{function_name}' "
324+
f"| order by timestamp desc | take {limit} "
325+
f"| project timestamp, success, resultCode, durationInMilliSeconds=duration, invocationId, operationId=operation_Id, operationName=operation_Name, functionNameFromCustomDimension "
326+
)
327+
else:
328+
invocation_traces_query = (
329+
f"requests | extend functionNameFromCustomDimension = tostring(customDimensions['faas.name']) "
330+
f"| project timestamp, id, operation_Name, success, resultCode, duration, operation_Id, functionNameFromCustomDimension, "
331+
f"cloud_RoleName, cloud_RoleInstance, invocationId=coalesce(tostring(customDimensions['InvocationId']), tostring(customDimensions['faas.invocation_id'])) "
332+
f"| where timestamp > ago({timespan}) "
333+
f"| where cloud_RoleName =~ '{container_app_name}' "
334+
f"| where cloud_RoleInstance contains '{revision_name}' "
335+
f"| where operation_Name =~ '{function_name}' or functionNameFromCustomDimension =~ '{function_name}' "
336+
f"| order by timestamp desc | take {limit} "
337+
f"| project timestamp, success, resultCode, durationInMilliSeconds=duration, invocationId, operationId=operation_Id, operationName=operation_Name, functionNameFromCustomDimension "
338+
)
324339

325340
result = self._execute_app_insights_query(app_id, invocation_traces_query, "getInvocationTraces")
326341

0 commit comments

Comments
 (0)