Skip to content

Commit 5cba5fb

Browse files
Rakshith Bhyravabhotlaiscai-msft
Rakshith Bhyravabhotla
authored andcommitted
Handle value types for results (#20358)
* Handle value types for results * update test * lint * comprehension * more precis * fix test
1 parent 7f4268b commit 5cba5fb

File tree

4 files changed

+45
-3
lines changed

4 files changed

+45
-3
lines changed

sdk/monitor/azure-monitor-query/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
- `metric_namespace_name` is renamed to `fully_qualified_namespace`
1717
- `is_dimension_required` is renamed to `dimension_required`
1818
- `time_grain` is renamed to `granularity`
19+
- `LogsQueryResult` now returns `datetime` objects for a time values.
1920

2021
### Bugs Fixed
2122

sdk/monitor/azure-monitor-query/azure/monitor/query/_helpers.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# --------------------------------------------------------------------------
77
from datetime import datetime, timedelta
88
from typing import TYPE_CHECKING
9-
from msrest import Serializer
9+
from msrest import Serializer, Deserializer
1010
from azure.core.exceptions import HttpResponseError
1111
from azure.core.pipeline.policies import BearerTokenCredentialPolicy
1212

@@ -81,3 +81,13 @@ def construct_iso8601(timespan=None):
8181
else:
8282
iso_str = duration
8383
return iso_str
84+
85+
def native_col_type(col_type, value):
86+
if col_type == 'datetime':
87+
value = Deserializer.deserialize_iso(value)
88+
elif col_type in ('timespan', 'guid'):
89+
value = str(value)
90+
return value
91+
92+
def process_row(col_types, row):
93+
return [native_col_type(col_types[ind].type, val) for ind, val in enumerate(row)]

sdk/monitor/azure-monitor-query/azure/monitor/query/_models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import uuid
1010
from typing import Any, Optional, List
1111

12-
from ._helpers import construct_iso8601
12+
from ._helpers import construct_iso8601, process_row
1313
from ._generated.models import (
1414
Column as InternalColumn,
1515
BatchQueryRequest as InternalLogQueryRequest,
@@ -32,7 +32,7 @@ def __init__(self, name, columns, rows):
3232
# type: (str, List[LogsQueryResultColumn], List[List[str]]) -> None
3333
self.name = name
3434
self.columns = columns
35-
self.rows = rows
35+
self.rows = [process_row(self.columns, row) for row in rows]
3636

3737
@classmethod
3838
def _from_generated(cls, generated):
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from datetime import datetime
2+
import pytest
3+
import six
4+
import os
5+
6+
from azure.identity import ClientSecretCredential
7+
from azure.monitor.query import LogsQueryClient
8+
9+
def _credential():
10+
credential = ClientSecretCredential(
11+
client_id = os.environ['AZURE_CLIENT_ID'],
12+
client_secret = os.environ['AZURE_CLIENT_SECRET'],
13+
tenant_id = os.environ['AZURE_TENANT_ID']
14+
)
15+
return credential
16+
17+
@pytest.mark.live_test_only
18+
def test_query_response_types():
19+
credential = _credential()
20+
client = LogsQueryClient(credential)
21+
query = """AppRequests |
22+
summarize avgRequestDuration=avg(DurationMs) by bin(TimeGenerated, 10m), _ResourceId, Success, ItemCount, DurationMs"""
23+
24+
# returns LogsQueryResult
25+
result = client.query(os.environ['LOG_WORKSPACE_ID'], query, timespan=None)
26+
assert isinstance(result.tables[0].rows[0][0], datetime) # TimeGenerated generated is a datetime
27+
assert isinstance(result.tables[0].rows[0][1], six.string_types) # _ResourceId generated is a string
28+
assert isinstance(result.tables[0].rows[0][2], bool) # Success generated is a bool
29+
assert isinstance(result.tables[0].rows[0][3], int) # ItemCount generated is a int
30+
assert isinstance(result.tables[0].rows[0][4], float) # DurationMs generated is a real
31+

0 commit comments

Comments
 (0)