public async Task BatchQuery() { #region Snippet:BatchQuery LogsClient client = new LogsClient(new DefaultAzureCredential()); /*@@*/ string workspaceId = TestEnvironment.WorkspaceId; //@@string workspaceId = "<workspace_id>"; // Query TOP 10 resource groups by event count // And total event count LogsBatchQuery batch = client.CreateBatchQuery(); string countQueryId = batch.AddQuery(workspaceId, "AzureActivity | count"); string topQueryId = batch.AddQuery(workspaceId, "AzureActivity | summarize Count = count() by ResourceGroup | top 10 by Count"); Response <LogsBatchQueryResult> response = await batch.SubmitAsync(); var count = response.Value.GetResult <int>(countQueryId).Single(); var topEntries = response.Value.GetResult <MyLogEntryModel>(topQueryId); Console.WriteLine($"AzureActivity has total {count} events"); foreach (var logEntryModel in topEntries) { Console.WriteLine($"{logEntryModel.ResourceGroup} had {logEntryModel.Count} events"); } #endregion }
public async Task ThrowsExceptionWhenQueryFailsBatch() { var client = CreateClient(); LogsBatchQuery batch = InstrumentClient(client.CreateBatchQuery()); var queryId = batch.AddQuery(TestEnvironment.WorkspaceId, "this won't work", _logsTestData.DataTimeRange); var batchResult = await batch.SubmitAsync(); var exception = Assert.Throws <RequestFailedException>(() => batchResult.Value.GetResult(queryId)); Assert.AreEqual("BadArgumentError", exception.ErrorCode); StringAssert.StartsWith("The request had some invalid properties", exception.Message); }
public async Task CanQueryBatch() { var client = CreateClient(); LogsBatchQuery batch = InstrumentClient(client.CreateBatchQuery()); string id1 = batch.AddQuery(TestEnvironment.WorkspaceId, "Heartbeat"); string id2 = batch.AddQuery(TestEnvironment.WorkspaceId, "Heartbeat"); Response <LogsBatchQueryResult> response = await batch.SubmitAsync(); var result1 = response.Value.GetResult(id1); var result2 = response.Value.GetResult(id2); CollectionAssert.IsNotEmpty(result1.Tables[0].Columns); CollectionAssert.IsNotEmpty(result2.Tables[0].Columns); }
public async Task ThrowsExceptionWhenBatchQueryNotFound() { var client = CreateClient(); LogsBatchQuery batch = InstrumentClient(client.CreateBatchQuery()); batch.AddQuery(TestEnvironment.WorkspaceId, _logsTestData.TableAName, _logsTestData.DataTimeRange); var batchResult = await batch.SubmitAsync(); var exception = Assert.Throws <ArgumentException>(() => batchResult.Value.GetResult("12345")); Assert.AreEqual("queryId", exception.ParamName); StringAssert.StartsWith("Query with ID '12345' wasn't part of the batch. Please use the return value of the LogsBatchQuery.AddQuery as the 'queryId' argument.", exception.Message); }
public async Task CanQueryWithStatisticsBatch(bool include) { var client = CreateClient(); LogsBatchQuery batch = InstrumentClient(client.CreateBatchQuery()); var queryId = batch.AddQuery(TestEnvironment.WorkspaceId, _logsTestData.TableAName, _logsTestData.DataTimeRange, options: new LogsQueryOptions() { IncludeStatistics = include }); var batchResult = await batch.SubmitAsync(); var result = batchResult.Value.GetResult(queryId); if (include) { Assert.Greater(result.Statistics.GetProperty("query").GetProperty("executionTime").GetDouble(), 0); } else { Assert.AreEqual(JsonValueKind.Undefined, result.Statistics.ValueKind); } }
public async Task CanQueryBatchWithTimespan() { // Get the time of the second event and add a bit of buffer to it (events are 2d apart) var minOffset = (DateTimeOffset)_logsTestData.TableA[1][LogsTestData.TimeGeneratedColumnNameSent]; var timespan = Recording.UtcNow - minOffset; timespan = timespan.Add(TimeSpan.FromDays(1)); var client = CreateClient(); LogsBatchQuery batch = InstrumentClient(client.CreateBatchQuery()); string id1 = batch.AddQuery(TestEnvironment.WorkspaceId, $"{_logsTestData.TableAName} | project {LogsTestData.TimeGeneratedColumnName}", _logsTestData.DataTimeRange); string id2 = batch.AddQuery(TestEnvironment.WorkspaceId, $"{_logsTestData.TableAName} | project {LogsTestData.TimeGeneratedColumnName}", timespan); Response <LogsBatchQueryResult> response = await batch.SubmitAsync(); var result1 = response.Value.GetResult <DateTimeOffset>(id1); var result2 = response.Value.GetResult <DateTimeOffset>(id2); // All rows Assert.AreEqual(3, result1.Count); // Filtered by the timestamp Assert.AreEqual(2, result2.Count); Assert.True(result2.All(r => r >= minOffset)); }