Beispiel #1
0
        /// <summary>
        /// Executes a query to Kusto for Fields Caps.
        /// </summary>
        /// <param name="indexName">Index name.</param>
        /// <returns>An object with the field caps.</returns>
        public async Task <FieldCapabilityResponse> GetFieldCapsAsync(string indexName)
        {
            var response = new FieldCapabilityResponse();

            try
            {
                Logger.LogDebug("Getting schema for table '{@indexName}'", indexName);
                var(databaseName, tableName) = KustoDatabaseTableNames.FromElasticIndexName(indexName, Kusto.DefaultDatabaseName);
                string kustoCommand = $".show {KustoQLOperators.Databases} {KustoQLOperators.Schema} | {KustoQLOperators.Where} TableName=='{tableName}' {KustoQLOperators.And} DatabaseName=='{databaseName}' {KustoQLOperators.And} ColumnName!='' | {KustoQLOperators.Project} ColumnName, ColumnType";

                using IDataReader kustoResults = await Kusto.ExecuteControlCommandAsync(kustoCommand, RequestContext);

                MapFieldCaps(kustoResults, response);

                if (response.Fields.Count > 0)
                {
                    return(response);
                }

                Logger.LogDebug("Getting schema for function '{@indexName}'", indexName);
                string functionQuery     = $"{tableName} | {KustoQLOperators.GetSchema} | project ColumnName, ColumnType=DataType";
                var    functionQueryData = new QueryData(functionQuery, tableName, null, null);
                var(timeTaken, reader) = await Kusto.ExecuteQueryAsync(functionQueryData, RequestContext);

                MapFieldCaps(reader, response);
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "Error while executing GetFieldCaps.");
                throw;
            }

            return(response);
        }
        private IndexListController GetController()
        {
            var mockDAL  = new Mock <IKustoDataAccess>();
            var response = new FieldCapabilityResponse();

            response.AddField(new FieldCapabilityElement {
                Name = "testFieldName"
            });
            var responseTask = Task.FromResult(response);

            mockDAL.Setup(kusto => kusto.GetFieldCapsAsync(It.IsNotNull <string>())).Returns(responseTask);
            mockDAL.Setup(kusto => kusto.GetIndexListAsync(It.IsNotNull <string>())).Returns(Task.FromResult(new IndexListResponseElement()
            {
            }));
            var mockLogger = new Mock <ILogger <IndexListController> >();

            var ctr = new IndexListController(mockDAL.Object, mockLogger.Object)
            {
                ControllerContext = new ControllerContext()
                {
                    HttpContext = new DefaultHttpContext(),
                },
            };

            const string correlationIdHeader = "x-correlation-id";

            ctr.HttpContext.Request.Headers[correlationIdHeader] = Guid.NewGuid().ToString();

            return(ctr);
        }
Beispiel #3
0
        private void MapFieldCaps(IDataReader kustoResults, FieldCapabilityResponse response)
        {
            while (kustoResults.Read())
            {
                var fieldCapabilityElement = FieldCapabilityElementFactory.CreateFromDataRecord(kustoResults);
                if (string.IsNullOrEmpty(fieldCapabilityElement.Type))
                {
                    Logger.LogWarning("Field: {@fieldCapabilityElement} doesn't have a type.", fieldCapabilityElement);
                }

                response.AddField(fieldCapabilityElement);

                Logger.LogDebug("Found field: {@fieldCapabilityElement}", fieldCapabilityElement);
            }
        }
Beispiel #4
0
        public static ISchemaRetrieverFactory CreateMockSchemaRetriever(string name = "dayOfWeek", string type = "string")
        {
            var response = new FieldCapabilityResponse();

            response.AddField(
                new FieldCapabilityElement
            {
                Name = name,
                Type = type,
            });
            var responseTask = Task.FromResult(response);

            var mockDAL = new Mock <IKustoDataAccess>();

            mockDAL.Setup(kusto => kusto.GetFieldCapsAsync(It.IsNotNull <string>())).Returns(responseTask);

            var mockLogger = new Mock <ILogger <SchemaRetriever> >();

            return(new SchemaRetrieverFactory(mockLogger.Object, mockDAL.Object));
        }