private async Task <QueryExecutionResult> ExecuteQuery(string name, string description, ElasticClient client, Func <ElasticClient, Task <long> > queryFunction) { _logger.LogInformation($"Begin executing query with name {name}"); var result = new QueryExecutionResult { Name = name, Description = description }; for (var i = 0; i < _config.Iterations; i++) { var metrics = new QueryExecutionMetrics { Id = i + 1, Name = name }; var iterationSw = new Stopwatch(); iterationSw.Start(); metrics.RecordsFetched = await queryFunction(client); iterationSw.Stop(); metrics.Duration = iterationSw.ElapsedMilliseconds; result.Metrics.Add(metrics); } return(result); }
private static QueryExecutionMetrics ParseExecutionMetrics(RedisResult[] contents) { var executionMetrics = new QueryExecutionMetrics(); foreach (var entity in contents) { var kvp = ((string)entity).Split(':'); var key = kvp[0]; switch (key.ToLowerInvariant()) { case "nodes created": executionMetrics.NodesCreated = int.Parse(kvp[1].Trim()); break; case "nodes deleted": executionMetrics.NodesDeleted = int.Parse(kvp[1].Trim()); break; case "properties set": executionMetrics.PropertiesSet = int.Parse(kvp[1].Trim()); break; case "query internal execution time": executionMetrics.ExecutionTimeInMilliseconds = ParseCommandExecutionTime(kvp[1]); break; case "relationships created": executionMetrics.RelationshipsCreated = int.Parse(kvp[1].Trim()); break; case "relationships deleted": executionMetrics.RelationshipsDeleted = int.Parse(kvp[1].Trim()); break; case "labels added": executionMetrics.LabelsCreated = int.Parse(kvp[1].Trim()); break; default: break; } } return(executionMetrics); }