Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Logs Batch query results #20013

Merged
merged 2 commits into from
Jul 30, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions sdk/monitor/azure-monitor-query/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@
### Features Added

- Added enum `AggregationType` which can be used to specify aggregations in the query API.
- Added `LogsBatchQueryResult` model that is returned for a logs batch query.

### Breaking Changes

- `aggregation` param in the query API is renamed to `aggregations`
- `batch_query` API now returns a list of responses.
- `LogsBatchResults` model is now removed.
- `LogsQueryRequest` is renamed to `LogsBatchQueryRequest`
- `LogsQueryResults` is now renamed to `LogsQueryResult`

### Bugs Fixed

Expand Down
2 changes: 1 addition & 1 deletion sdk/monitor/azure-monitor-query/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ client = LogsQueryClient(credential)
query = """AppRequests |
summarize avgRequestDuration=avg(DurationMs) by bin(TimeGenerated, 10m), _ResourceId"""

# returns LogsQueryResults
# returns LogsQueryResult
response = client.query(
os.environ['LOG_WORKSPACE_ID'],
query,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@

from ._models import (
AggregationType,
LogsQueryResults,
LogsBatchQueryResult,
LogsQueryResult,
LogsQueryResultTable,
LogsQueryResultColumn,
MetricsResult,
Expand All @@ -29,8 +30,9 @@
__all__ = [
"AggregationType",
"LogsQueryClient",
"LogsBatchQueryResult",
"LogsBatchResultError",
"LogsQueryResults",
"LogsQueryResult",
"LogsQueryResultColumn",
"LogsQueryResultTable",
"LogsBatchQueryRequest",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

from ._generated.models import BatchRequest, QueryBody as LogsQueryBody
from ._helpers import get_authentication_policy, process_error, construct_iso8601, order_results
from ._models import LogsQueryResults, LogsBatchQueryRequest, LogsQueryResult
from ._models import LogsQueryResult, LogsBatchQueryRequest, LogsBatchQueryResult

if TYPE_CHECKING:
from azure.core.credentials import TokenCredential
Expand Down Expand Up @@ -50,7 +50,7 @@ def __init__(self, credential, **kwargs):
self._query_op = self._client.query

def query(self, workspace_id, query, duration=None, **kwargs):
# type: (str, str, Optional[timedelta], Any) -> LogsQueryResults
# type: (str, str, Optional[timedelta], Any) -> LogsQueryResult
"""Execute an Analytics query.

Executes an Analytics query for data.
Expand Down Expand Up @@ -81,7 +81,7 @@ def query(self, workspace_id, query, duration=None, **kwargs):
These can be qualified workspace names, workspace Ids, or Azure resource Ids.
:paramtype additional_workspaces: list[str]
:return: QueryResults, or the result of cls(response)
:rtype: ~azure.monitor.query.LogsQueryResults
:rtype: ~azure.monitor.query.LogsQueryResult
:raises: ~azure.core.exceptions.HttpResponseError

.. admonition:: Example:
Expand Down Expand Up @@ -121,7 +121,7 @@ def query(self, workspace_id, query, duration=None, **kwargs):
)

try:
return LogsQueryResults._from_generated(self._query_op.execute( # pylint: disable=protected-access
return LogsQueryResult._from_generated(self._query_op.execute( # pylint: disable=protected-access
workspace_id=workspace_id,
body=body,
prefer=prefer,
Expand All @@ -131,7 +131,7 @@ def query(self, workspace_id, query, duration=None, **kwargs):
process_error(e)

def batch_query(self, queries, **kwargs):
# type: (Union[Sequence[Dict], Sequence[LogsBatchQueryRequest]], Any) -> Sequence[LogsQueryResult]
# type: (Union[Sequence[Dict], Sequence[LogsBatchQueryRequest]], Any) -> Sequence[LogsBatchQueryResult]
"""Execute a list of analytics queries. Each request can be either a LogQueryRequest
object or an equivalent serialized model.

Expand All @@ -140,7 +140,7 @@ def batch_query(self, queries, **kwargs):
:param queries: The list of queries that should be processed
:type queries: list[dict] or list[~azure.monitor.query.LogsBatchQueryRequest]
:return: BatchResponse, or the result of cls(response)
:rtype: ~list[~azure.monitor.query.LogsQueryResult]
:rtype: ~list[~azure.monitor.query.LogsBatchQueryResult]
:raises: ~azure.core.exceptions.HttpResponseError

.. admonition:: Example:
Expand All @@ -165,7 +165,7 @@ def batch_query(self, queries, **kwargs):
return order_results(
request_order,
[
LogsQueryResult._from_generated(rsp) for rsp in generated.responses # pylint: disable=protected-access
LogsBatchQueryResult._from_generated(rsp) for rsp in generated.responses # pylint: disable=protected-access
])

def close(self):
Expand Down
10 changes: 5 additions & 5 deletions sdk/monitor/azure-monitor-query/azure/monitor/query/_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ def __init__(self, **kwargs):
self.type = kwargs.get("type", None)


class LogsQueryResults(object):
class LogsQueryResult(object):
"""Contains the tables, columns & rows resulting from a query.

:keyword tables: The list of tables, columns and rows.
Expand Down Expand Up @@ -206,15 +206,15 @@ def __init__(self, query, workspace_id, duration=None, **kwargs): #pylint: disab
self.headers = headers
self.workspace = workspace_id

class LogsQueryResult(object):
"""The LogsQueryResult.
class LogsBatchQueryResult(object):
"""The LogsBatchQueryResult.

:param id:
:type id: str
:param status:
:type status: int
:param body: Contains the tables, columns & rows resulting from a query.
:type body: ~azure.monitor.query.LogsQueryResults
:type body: ~azure.monitor.query.LogsQueryResult
"""
def __init__(
self,
Expand All @@ -231,7 +231,7 @@ def _from_generated(cls, generated):
return cls(
id=generated.id,
status=generated.status,
body=LogsQueryResults._from_generated(generated.body) # pylint: disable=protected-access
body=LogsQueryResult._from_generated(generated.body) # pylint: disable=protected-access
)


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

from .._generated.models import BatchRequest, QueryBody as LogsQueryBody
from .._helpers import process_error, construct_iso8601, order_results
from .._models import LogsQueryResults, LogsBatchQueryRequest, LogsQueryResult
from .._models import LogsQueryResult, LogsBatchQueryRequest, LogsBatchQueryResult
from ._helpers_asyc import get_authentication_policy

if TYPE_CHECKING:
Expand Down Expand Up @@ -43,7 +43,7 @@ async def query(
workspace_id: str,
query: str,
duration: Optional[timedelta] = None,
**kwargs: Any) -> LogsQueryResults:
**kwargs: Any) -> LogsQueryResult:
"""Execute an Analytics query.

Executes an Analytics query for data.
Expand Down Expand Up @@ -74,7 +74,7 @@ async def query(
These can be qualified workspace names, workspsce Ids or Azure resource Ids.
:paramtype additional_workspaces: list[str]
:return: QueryResults, or the result of cls(response)
:rtype: ~azure.monitor.query.LogsQueryResults
:rtype: ~azure.monitor.query.LogsQueryResult
:raises: ~azure.core.exceptions.HttpResponseError
"""
start = kwargs.pop('start_time', None)
Expand Down Expand Up @@ -105,7 +105,7 @@ async def query(
)

try:
return LogsQueryResults._from_generated(await self._query_op.execute( # pylint: disable=protected-access
return LogsQueryResult._from_generated(await self._query_op.execute( # pylint: disable=protected-access
workspace_id=workspace_id,
body=body,
prefer=prefer,
Expand All @@ -118,7 +118,7 @@ async def batch_query(
self,
queries: Union[Sequence[Dict], Sequence[LogsBatchQueryRequest]],
**kwargs: Any
) -> Sequence[LogsQueryResult]:
) -> Sequence[LogsBatchQueryResult]:
"""Execute a list of analytics queries. Each request can be either a LogQueryRequest
object or an equivalent serialized model.

Expand All @@ -127,7 +127,7 @@ async def batch_query(
:param queries: The list of queries that should be processed
:type queries: list[dict] or list[~azure.monitor.query.LogsBatchQueryRequest]
:return: BatchResponse, or the result of cls(response)
:rtype: ~list[~azure.monitor.query.LogsQueryResult]
:rtype: ~list[~azure.monitor.query.LogsBatchQueryResult]
:raises: ~azure.core.exceptions.HttpResponseError
"""
try:
Expand All @@ -143,7 +143,7 @@ async def batch_query(
return order_results(
request_order,
[
LogsQueryResult._from_generated(rsp) for rsp in generated.responses # pylint: disable=protected-access
LogsBatchQueryResult._from_generated(rsp) for rsp in generated.responses # pylint: disable=protected-access
])

async def __aenter__(self) -> "LogsQueryClient":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ async def logs_query():
where TimeGenerated > ago(12h) |
summarize avgRequestDuration=avg(DurationMs) by bin(TimeGenerated, 10m), _ResourceId"""

# returns LogsQueryResults
# returns LogsQueryResult
async with client:
response = await client.query(os.environ['LOG_WORKSPACE_ID'], query)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

end_time = datetime.now(UTC())

# returns LogsQueryResults
# returns LogsQueryResult
response = client.query(os.environ['LOG_WORKSPACE_ID'], query, duration=timedelta(days=1), end_time=end_time)

if not response.tables:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

end_time = datetime.now(UTC())

# returns LogsQueryResults
# returns LogsQueryResult
response = client.query(os.environ['LOG_WORKSPACE_ID'], query, duration=timedelta(hours=1), end_time=end_time)

if not response.tables:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

end_time = datetime.now(UTC())

# returns LogsQueryResults
# returns LogsQueryResult
response = client.query(
os.environ['LOG_WORKSPACE_ID'],
query,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

end_time = datetime.now(UTC())

# returns LogsQueryResults
# returns LogsQueryResult
response = client.query(os.environ['LOG_WORKSPACE_ID'], query, duration=timedelta(days=1), end_time=end_time)

if not response.tables:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ async def test_logs_auth():
where TimeGenerated > ago(12h) |
summarize avgRequestDuration=avg(DurationMs) by bin(TimeGenerated, 10m), _ResourceId"""

# returns LogsQueryResults
# returns LogsQueryResult
response = await client.query(os.environ['LOG_WORKSPACE_ID'], query)

assert response is not None
Expand Down Expand Up @@ -72,7 +72,7 @@ async def test_logs_single_query_additional_workspaces_async():
client = LogsQueryClient(credential)
query = "union * | where TimeGenerated > ago(100d) | project TenantId | summarize count() by TenantId"

# returns LogsQueryResults
# returns LogsQueryResult
response = await client.query(
os.environ['LOG_WORKSPACE_ID'],
query,
Expand Down
6 changes: 3 additions & 3 deletions sdk/monitor/azure-monitor-query/tests/test_logs_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def test_logs_single_query():
where TimeGenerated > ago(12h) |
summarize avgRequestDuration=avg(DurationMs) by bin(TimeGenerated, 10m), _ResourceId"""

# returns LogsQueryResults
# returns LogsQueryResult
response = client.query(os.environ['LOG_WORKSPACE_ID'], query)

assert response is not None
Expand Down Expand Up @@ -92,7 +92,7 @@ def test_logs_single_query_with_statistics():
client = LogsQueryClient(credential)
query = """AppRequests"""

# returns LogsQueryResults
# returns LogsQueryResult
response = client.query(os.environ['LOG_WORKSPACE_ID'], query, include_statistics=True)

assert response.statistics is not None
Expand Down Expand Up @@ -133,7 +133,7 @@ def test_logs_single_query_additional_workspaces():
client = LogsQueryClient(credential)
query = "union * | where TimeGenerated > ago(100d) | project TenantId | summarize count() by TenantId"

# returns LogsQueryResults
# returns LogsQueryResult
response = client.query(
os.environ['LOG_WORKSPACE_ID'],
query,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def test_query_no_duration():
def callback(request):
dic = json.loads(request.http_request.body)
assert dic.get('timespan') is None
# returns LogsQueryResults
# returns LogsQueryResult
client.query(os.environ['LOG_WORKSPACE_ID'], query)

@pytest.mark.live_test_only
Expand Down