示例#1
0
def test_logs_single_query_raises_no_timespan():
    credential = _credential()
    client = LogsQueryClient(credential)
    query = """AppRequests | 
    where TimeGenerated > ago(12h) | 
    summarize avgRequestDuration=avg(DurationMs) by bin(TimeGenerated, 10m), _ResourceId"""

    # returns LogsQueryResult
    with pytest.raises(TypeError):
        client.query(os.environ['LOG_WORKSPACE_ID'], query)
示例#2
0
def test_logs_single_query_with_non_200():
    credential = _credential()
    client = LogsQueryClient(credential)
    query = """AppInsights | 
    where TimeGenerated > ago(12h)"""

    with pytest.raises(HttpResponseError) as e:
        client.query(os.environ['LOG_WORKSPACE_ID'], query, timespan=None)

    assert "SemanticError" in e.value.message
示例#3
0
def test_query_no_duration():
    credential = _credential()
    client = LogsQueryClient(credential)
    query = """AppRequests | 
    where TimeGenerated > ago(12h) | 
    summarize avgRequestDuration=avg(DurationMs) by bin(TimeGenerated, 10m), _ResourceId"""

    def callback(request):
        dic = json.loads(request.http_request.body)
        assert dic.get('timespan') is None

    # returns LogsQueryResult
    client.query(os.environ['LOG_WORKSPACE_ID'], query, timespan=None)
示例#4
0
def test_query_duration_only():
    credential = _credential()
    client = LogsQueryClient(credential)
    query = "AppRequests | take 5"

    duration = timedelta(days=3)

    def callback(request):
        dic = json.loads(request.http_request.body)
        assert 'PT259200.0S' in dic.get('timespan')

    client.query(os.environ['LOG_WORKSPACE_ID'],
                 query,
                 timespan=duration,
                 raw_request_hook=callback)
示例#5
0
class LogsPerfTest(PerfStressTest):
    def __init__(self, arguments):
        super().__init__(arguments)

        # auth configuration
        self.workspace_id = self.get_from_env('LOG_WORKSPACE_ID')

        self.query = "AppRequests | summarize avgRequestDuration=avg(DurationMs) by bin(TimeGenerated, 10m), _ResourceId"

        # Create clients
        self.logs_client = SyncLogsQueryClient(
            credential=SyncDefaultAzureCredential())
        self.async_logs_client = AsyncLogsQueryClient(
            credential=AsyncDefaultAzureCredential())

    async def close(self):
        """This is run after cleanup.
        
        Use this to close any open handles or clients.
        """
        await self.async_logs_client.close()
        await super().close()

    def run_sync(self):
        """The synchronous perf test.
        
        Try to keep this minimal and focused. Using only a single client API.
        Avoid putting any ancilliary logic (e.g. generating UUIDs), and put this in the setup/init instead
        so that we're only measuring the client API call.
        """
        start_time = datetime(2021, 7, 25, 0, 0, 0, tzinfo=timezone.utc)
        end_time = datetime(2021, 7, 26, 0, 0, 0, tzinfo=timezone.utc)
        self.logs_client.query(self.workspace_id,
                               self.query,
                               timespan=(start_time, end_time))

    async def run_async(self):
        """The asynchronous perf test.
        
        Try to keep this minimal and focused. Using only a single client API.
        Avoid putting any ancilliary logic (e.g. generating UUIDs), and put this in the setup/init instead
        so that we're only measuring the client API call.
        """
        start_time = datetime(2021, 7, 25, 0, 0, 0, tzinfo=timezone.utc)
        end_time = datetime(2021, 7, 26, 0, 0, 0, tzinfo=timezone.utc)
        await self.async_logs_client.query(self.workspace_id,
                                           self.query,
                                           timespan=(start_time, end_time))
示例#6
0
def test_query_start_and_end_time():
    credential = _credential()
    client = LogsQueryClient(credential)
    query = "AppRequests | take 5"

    end_time = datetime.now(UTC())
    start_time = end_time - timedelta(days=3)

    def callback(request):
        dic = json.loads(request.http_request.body)
        assert dic.get('timespan') is not None

    client.query(os.environ['LOG_WORKSPACE_ID'],
                 query,
                 timespan=(start_time, end_time),
                 raw_request_hook=callback)
def test_query_duration_and_end_time():
    credential = _credential()
    client = LogsQueryClient(credential)
    query = "AppRequests | take 5"

    end_time = datetime.now(UTC())
    duration = 'P3D'

    def callback(request):
        dic = json.loads(request.http_request.body)
        assert 'P3D/' in dic.get('timespan')

    client.query(os.environ['LOG_WORKSPACE_ID'],
                 query,
                 duration=duration,
                 end_time=end_time,
                 raw_request_hook=callback)
示例#8
0
def test_logs_single_query_with_partial_success():
    credential = _credential()
    client = LogsQueryClient(credential)
    query = "set truncationmaxrecords=1; union * | project TimeGenerated | take 10"

    response = client.query(os.environ['LOG_WORKSPACE_ID'],
                            query,
                            timespan=None)

    assert response is not None
def test_logs_server_timeout():
    client = LogsQueryClient(_credential())

    with pytest.raises(HttpResponseError) as e:
        response = client.query(
            os.environ['LOG_WORKSPACE_ID'],
            "range x from 1 to 10000000000 step 1 | count",
            server_timeout=1,
        )
        assert e.message.contains('Gateway timeout')
def test_logs_auth():
    credential = _credential()
    client = LogsQueryClient(credential)
    query = """AppRequests | 
    where TimeGenerated > ago(12h) | 
    summarize avgRequestDuration=avg(DurationMs) by bin(TimeGenerated, 10m), _ResourceId"""

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

    assert response is not None
    assert response.tables is not None
示例#11
0
def test_logs_single_query_with_render():
    credential = _credential()
    client = LogsQueryClient(credential)
    query = """AppRequests"""

    # returns LogsQueryResult
    response = client.query(os.environ['LOG_WORKSPACE_ID'],
                            query,
                            timespan=None,
                            include_visualization=True)

    assert response.visualization is not None
示例#12
0
def test_logs_single_query_additional_workspaces():
    credential = _credential()
    client = LogsQueryClient(credential)
    query = "union * | where TimeGenerated > ago(100d) | project TenantId | summarize count() by TenantId"

    # returns LogsQueryResult
    response = client.query(
        os.environ['LOG_WORKSPACE_ID'],
        query,
        timespan=None,
        additional_workspaces=[os.environ["SECONDARY_WORKSPACE_ID"]],
    )

    assert response is not None
    assert len(response.tables[0].rows) == 2
示例#13
0
def test_query_response_types():
    credential = _credential()
    client = LogsQueryClient(credential)
    query = """AppRequests |
    summarize avgRequestDuration=avg(DurationMs) by bin(TimeGenerated, 10m), _ResourceId, Success, ItemCount, DurationMs"""

    # returns LogsQueryResult
    result = client.query(os.environ['LOG_WORKSPACE_ID'], query, timespan=None)
    assert isinstance(result.tables[0].rows[0][0],
                      datetime)  # TimeGenerated generated is a datetime
    assert isinstance(result.tables[0].rows[0][1],
                      six.string_types)  # _ResourceId generated is a string
    assert isinstance(result.tables[0].rows[0][2],
                      bool)  # Success generated is a bool
    assert isinstance(result.tables[0].rows[0][3],
                      int)  # ItemCount generated is a int
示例#14
0
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

import os
import pandas as pd
from azure.monitor.query import LogsQueryClient
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()

client = LogsQueryClient(credential)

response = client.query(
    os.environ['LOG_WORKSPACE_ID'],
    "range x from 1 to 10000000000 step 1 | count",
    server_timeout=1,
)

try:
    table = response.tables[0]
    df = pd.DataFrame(table.rows, columns=[col.name for col in table.columns])
    print(df)
except TypeError:
    print(response.error)
示例#15
0
import os
import pandas as pd
from datetime import datetime
from msrest.serialization import UTC
from azure.monitor.query import LogsQueryClient
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()

client = LogsQueryClient(credential)

# Response time trend
# request duration over the last 12 hours.
query = "union * | where TimeGenerated > ago(100d) | project TenantId | summarize count() by TenantId"

end_time = datetime.now(UTC())

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

try:
    table = response.tables[0]
    df = pd.DataFrame(table.rows, columns=[col.name for col in table.columns])
    print(df)
except TypeError:
    print(response.error)
示例#16
0
from datetime import datetime, timedelta
from msrest.serialization import UTC
from azure.monitor.query import LogsQueryClient
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
client = LogsQueryClient(credential)

# Response time trend
# request duration over the last 12 hours.
query = """AppRequests |
summarize avgRequestDuration=avg(DurationMs) by bin(TimeGenerated, 10m), _ResourceId"""

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

try:
    table = response.tables[0]
    df = pd.DataFrame(table.rows, columns=[col.name for col in table.columns])
    key_value = df.to_dict(orient='records')
    print(key_value)
except TypeError:
    print(response.error)
"""
[
    {
        'TimeGenerated': '2021-07-21T04:40:00Z',
        '_ResourceId': '/subscriptions/faa080af....',
        'avgRequestDuration': 19.7987
示例#17
0
    client_id=os.environ['AZURE_CLIENT_ID'],
    client_secret=os.environ['AZURE_CLIENT_SECRET'],
    tenant_id=os.environ['AZURE_TENANT_ID'])

client = LogsQueryClient(credential)

# Response time trend
# request duration over the last 12 hours.
query = """AppRequests |
summarize avgRequestDuration=avg(DurationMs) by bin(TimeGenerated, 10m), _ResourceId"""

end_time = datetime.now(UTC())

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

if not response.tables:
    print("No results for the query")

#response.tables is a LogsQueryResultTable
for table in response.tables:
    for col in table.columns:  #LogsQueryResultColumn
        print(col.name + "/" + col.type + " | ", end="")
    print("\n")
    for row in table.rows:
        for item in row:
            print(item + " | ", end="")
        print("\n")
"""
示例#18
0
        client_secret = os.environ['AZURE_CLIENT_SECRET'],
        tenant_id = os.environ['AZURE_TENANT_ID']
    )

client = LogsQueryClient(credential)
# [END client_auth_with_token_cred]

# Response time trend 
# request duration over the last 12 hours. 
# [START send_logs_query]
query = """AppRequests | 
where TimeGenerated > ago(12h) | 
summarize avgRequestDuration=avg(DurationMs) by bin(TimeGenerated, 10m), _ResourceId"""

# returns LogsQueryResults 
response = client.query(os.environ['LOG_WORKSPACE_ID'], query, start_time=datetime(2021, 6, 2), end_time=datetime.now())

if not response.tables:
    print("No results for the query")

for table in response.tables:
    df = pd.DataFrame(table.rows, columns=[col.name for col in table.columns])
    print(df)
# [END send_logs_query]
"""
    TimeGenerated                                        _ResourceId          avgRequestDuration
0   2021-05-27T08:40:00Z  /subscriptions/faa080af-c1d8-40ad-9cce-e1a450c...  27.307699999999997
1   2021-05-27T08:50:00Z  /subscriptions/faa080af-c1d8-40ad-9cce-e1a450c...            18.11655
2   2021-05-27T09:00:00Z  /subscriptions/faa080af-c1d8-40ad-9cce-e1a450c...             24.5271
"""