Exemplo n.º 1
0
        public async Task <IActionResult> Explore(
            ExploreParams data,
            [FromServices] ExplorationLauncher launcher,
            [FromServices] IAircloakAuthenticationProvider authProvider,
            [FromServices] ContextBuilder contextBuilder,
            [FromServices] AircloakConnectionBuilder connectionBuilder)
        {
            // Register the authentication token for this scope.
            if (authProvider is ExplorerApiAuthProvider auth)
            {
                auth.RegisterApiKey(data.ApiKey);
            }

            var apiUri  = new Uri(data.ApiUrl);
            var cts     = new CancellationTokenSource();
            var conn    = connectionBuilder.Build(apiUri, data.DataSource, cts.Token);
            var ctxList = await contextBuilder.Build(apiUri, data.DataSource, data.Table, data.Columns);

            var explorationSettings = ctxList.Select(ctx => (ComponentComposition.ColumnConfiguration(ctx.ColumnType), ctx));
            var exploration         = launcher.LaunchExploration(data.DataSource, data.Table, conn, explorationSettings);

            // Register the exploration for future reference.
            var id = explorationRegistry.Register(exploration, cts);

            return(Ok(new ExploreResult(id, ExplorationStatus.New, data.DataSource, data.Table, versionInfo)));
        }
Exemplo n.º 2
0
        public async Task <Exploration> RunExploration(
            string dataSource,
            string table,
            IEnumerable <string> columns,
            Uri?apiUri    = null,
            string?apiKey = null)
        {
            apiUri ??= TestApiUri;
            apiKey ??= string.Empty;

            // Register the authentication token for this scope.
            // Note that in most test cases the api key will not be needed as it will be provided from
            // the environment (via a `StaticApiKeyAuthProvider`)
            if (rootContainer.GetInstance <IAircloakAuthenticationProvider>() is ExplorerApiAuthProvider auth)
            {
                auth.RegisterApiKey(apiKey);
            }

            // Create the Context and Connection objects for this exploration.
            var ctxList = await rootContainer.GetInstance <ContextBuilder>().Build(apiUri, dataSource, table, columns);

            var conn = rootContainer.GetInstance <AircloakConnectionBuilder>().Build(apiUri, dataSource, CancellationToken.None);

            var columnExplorations = ctxList.Select(ctx =>
            {
                var scope = rootContainer.GetNestedContainer();
                if (LoadedCassette != null)
                {
                    scope.Inject(LoadedCassette);
                }

                columnScopes.Add(scope);

                return(ExplorationLauncher.ExploreColumn(
                           scope, conn, ctx, ComponentComposition.ColumnConfiguration(ctx.ColumnType)));
            });

            return(new Exploration(dataSource, table, columnExplorations.ToList()));
        }