Exemple #1
0
        private static async Task RunAsync(string clientId, string outputFile, CancellationToken ct)
        {
            var authenticator = new DeviceCodeTokenProvider(clientId,
                                                            (url, deviceCode) => Console.WriteLine($"Go to {url} and enter device code {deviceCode}"));

            await authenticator.GetAccessTokenAsync(ct).ConfigureAwait(false);

            var state = authenticator.GetSerializedState();

            var clientConfiguration = new ClientConfiguration {
                ClientId = clientId, TokenCacheState = state
            };

            File.WriteAllText(outputFile, JsonConvert.SerializeObject(clientConfiguration));
        }
Exemple #2
0
        private static async Task RunAsync(Arguments arguments, CancellationToken ct)
        {
            DeviceCodeTokenProvider authenticator;

            if (!string.IsNullOrWhiteSpace(arguments.TokenFile) && File.Exists(arguments.TokenFile))
            {
                var configuration = JsonConvert.DeserializeObject <ClientConfiguration>(File.ReadAllText(arguments.TokenFile));
                authenticator = new DeviceCodeTokenProvider(configuration.ClientId, configuration.TokenCacheState);
            }
            else
            {
                authenticator = new DeviceCodeTokenProvider(arguments.ClientId,
                                                            (url, deviceCode) => Console.WriteLine($"Go to {url} and enter device code {deviceCode}"));
            }

            var credentials   = new TokenCredentials(authenticator);
            var powerBIClient = new PowerBIClient(credentials);

            var hasGroup = !string.IsNullOrWhiteSpace(arguments.GroupId);

            if (string.IsNullOrWhiteSpace(arguments.DatasetId))
            {
                var datasets = await(hasGroup ? powerBIClient.Datasets.GetDatasetsAsync(ct) : powerBIClient.Datasets.GetDatasetsInGroupAsync(arguments.GroupId, ct)).ConfigureAwait(false);
                foreach (var dataset in datasets.Value)
                {
                    Console.WriteLine($"{dataset.Name} = {dataset.Id}");
                }
            }
            else
            {
                Console.WriteLine("About to refresh the dataset");
                await(hasGroup ? powerBIClient.Datasets.RefreshDatasetAsync(arguments.DatasetId, ct) : powerBIClient.Datasets.RefreshDatasetInGroupAsync(arguments.GroupId, arguments.DatasetId, ct)).ConfigureAwait(false);
                Console.WriteLine("Refreshed the dataset");
            }

            if (!string.IsNullOrWhiteSpace(arguments.TokenFile))
            {
                var state = authenticator.GetSerializedState();
                var clientConfiguration = new ClientConfiguration {
                    ClientId = arguments.ClientId, TokenCacheState = state
                };
                File.WriteAllText(arguments.TokenFile, JsonConvert.SerializeObject(clientConfiguration));
            }
        }
Exemple #3
0
        private static async Task RunAsync(string configurationFile, CancellationToken ct)
        {
            var configuration = JsonConvert.DeserializeObject <ClientConfiguration>(File.ReadAllText(configurationFile));
            var tokenProvider = new DeviceCodeTokenProvider(configuration.ClientId, configuration.TokenCacheState);

            using (var powerBIClient = new PowerBIClient(new TokenCredentials(tokenProvider)))
            {
                var dataset          = CreateDatasetDefinition();
                var existingDatasets = await powerBIClient.Datasets.GetDatasetsAsync(ct).ConfigureAwait(false);

                var    existingDataset = existingDatasets.Value.SingleOrDefault(d => d.Name == dataset.Name);
                string datasetId;
                if (existingDataset == null)
                {
                    var created = await powerBIClient.Datasets.PostDatasetAsync(dataset, DefaultRetentionPolicy.BasicFIFO, ct).ConfigureAwait(false);

                    datasetId = ((Dataset)created).Id;
                }
                else
                {
                    datasetId = existingDataset.Id;
                }
                var tableName = dataset.Tables[0].Name;
                var random    = new Random();
                while (!ct.IsCancellationRequested)
                {
                    var row = new
                    {
                        TimestampUtc = DateTime.UtcNow,
                        IntCounter   = random.Next(0, 1000),
                        FloatCounter = random.NextDouble() * 1000,
                        Flag         = random.NextDouble() > 0.5,
                        Label        = $"Label {random.Next(0, 1000)}"
                    };
                    await powerBIClient.Datasets.PostRowsAsync(datasetId, tableName, new[] { row }, ct).ConfigureAwait(false);

                    await Task.Delay(5000, ct).ConfigureAwait(false);
                }
            }
        }
Exemple #4
0
        private static async Task RunAsync(string configurationFile, CancellationToken ct)
        {
            var configuration = JsonConvert.DeserializeObject <ClientConfiguration>(File.ReadAllText(configurationFile));
            var tokenProvider = new DeviceCodeTokenProvider(configuration.ClientId, configuration.TokenCacheState);

            using (var powerBIClient = new PowerBIClient(new TokenCredentials(tokenProvider)))
            {
                var existingDatasets = await powerBIClient.Datasets.GetDatasetsAsync(ct).ConfigureAwait(false);

                var dataset   = CreateDatasetDefinition();
                var datasetId = await GetOrCreateDataset(powerBIClient, dataset, existingDatasets.Value, ct).ConfigureAwait(false);

                var perMinuteStatus = dataset.Tables[0].Name;

                var liveDataset   = CreateLiveDatasetDefinition();
                var liveDatasetId = await GetOrCreateDataset(powerBIClient, liveDataset, existingDatasets.Value, ct).ConfigureAwait(false);

                var liveStatus = liveDataset.Tables[0].Name;

                var random            = new Random();
                var activePlayers     = random.Next(0, 10);
                var playersToday      = activePlayers;
                var playersAllTime    = activePlayers;
                var resetDaysDuration = TimeSpan.FromMinutes(10);

                var dayStart    = DateTime.MinValue;
                var minuteStart = DateTime.MinValue;
                while (!ct.IsCancellationRequested)
                {
                    var now = DateTime.UtcNow;
                    if (now > dayStart + TimeSpan.FromMinutes(10))
                    {
                        playersToday = 0;
                        dayStart     = now;
                    }

                    var newActivePlayers = random.Next(0, 10);
                    var delta            = newActivePlayers - activePlayers;
                    if (delta > 0)
                    {
                        playersToday   += delta;
                        playersAllTime += delta;
                    }
                    activePlayers = newActivePlayers;

                    var liveRow = new
                    {
                        TimestampUtc   = now,
                        ActivePlayers  = activePlayers,
                        PlayersToday   = playersToday,
                        PlayersAllTime = playersAllTime
                    };
                    await RetryPolicy.ExecuteAsync(cancel =>
                                                   powerBIClient.Datasets.PostRowsAsync(liveDatasetId, liveStatus, new[] { liveRow }, cancel),
                                                   ct, false
                                                   ).ConfigureAwait(false);

                    if (now > minuteStart + TimeSpan.FromMinutes(1))
                    {
                        var minuteRows = new object[random.Next(3, 10)];
                        for (var i = 0; i < minuteRows.Length; i++)
                        {
                            minuteRows[i] = new
                            {
                                TimestampUtc = now,
                                Name         = $"Player {i + 1}",
                                Image        = $"https://lorempixel.com/400/200/sports/{i + 1}",
                                Count        = random.Next(10, 50),
                                Score        = random.Next(50, 10000)
                            };
                        }
                        await RetryPolicy.ExecuteAsync(cancel =>
                                                       powerBIClient.Datasets.PostRowsAsync(datasetId, perMinuteStatus, minuteRows, cancel),
                                                       ct, false
                                                       ).ConfigureAwait(false);

                        minuteStart = now;
                    }
                    await Task.Delay(5000, ct).ConfigureAwait(false);
                }
            }
        }
Exemple #5
0
        private static async Task RunAsync(Arguments arguments, CancellationToken ct)
        {
            ITokenProvider tokenProvider;

            if (!string.IsNullOrWhiteSpace(arguments.TokenFile) && File.Exists(arguments.TokenFile))
            {
                var configuration = JsonConvert.DeserializeObject <ClientConfiguration>(File.ReadAllText(arguments.TokenFile));
                tokenProvider = new DeviceCodeTokenProvider(configuration.ClientId, configuration.TokenCacheState);
            }
            else
            {
                tokenProvider = new DeviceCodeTokenProvider(arguments.ClientId,
                                                            (url, deviceCode) => Console.WriteLine($"Go to {url} and enter device code {deviceCode}"));
            }

            var powerBIClient = new PowerBIClient(new TokenCredentials(tokenProvider));

            if (arguments.ListGroups)
            {
                var groups = await powerBIClient.Groups.GetGroupsAsync(ct).ConfigureAwait(false);

                Console.WriteLine($"Got {groups.Value.Count} groups");
                foreach (var group in groups.Value)
                {
                    Console.WriteLine(JsonConvert.SerializeObject(group));
                }
            }

            var noGroup = string.IsNullOrWhiteSpace(arguments.GroupId);

            if (arguments.ListDatasets)
            {
                var datasets = await(noGroup ? powerBIClient.Datasets.GetDatasetsAsync(ct) : powerBIClient.Datasets.GetDatasetsInGroupAsync(arguments.GroupId, ct)).ConfigureAwait(false);
                Console.WriteLine($"Got {datasets.Value.Count} datasets");
                foreach (var dataset in datasets.Value)
                {
                    Console.WriteLine(JsonConvert.SerializeObject(dataset));
                }
            }

            if (arguments.ListDashboards)
            {
                var dashboards = await(noGroup ? powerBIClient.Dashboards.GetDashboardsAsync(ct) : powerBIClient.Dashboards.GetDashboardsInGroupAsync(arguments.GroupId, ct)).ConfigureAwait(false);
                Console.WriteLine($"Got {dashboards.Value.Count} dashboards");
                foreach (var dashboard in dashboards.Value)
                {
                    Console.WriteLine(JsonConvert.SerializeObject(dashboard));
                }
            }

            if (arguments.ListReports)
            {
                var reports = await(noGroup ? powerBIClient.Reports.GetReportsAsync(ct) : powerBIClient.Reports.GetReportsInGroupAsync(arguments.GroupId, ct)).ConfigureAwait(false);
                Console.WriteLine($"Got {reports.Value.Count} reports");
                foreach (var dashboard in reports.Value)
                {
                    Console.WriteLine(JsonConvert.SerializeObject(dashboard));
                }
            }

            if (arguments.ListTiles)
            {
                var tiles = await(noGroup ? powerBIClient.Dashboards.GetTilesAsync(arguments.DashboardId, ct) : powerBIClient.Dashboards.GetTilesInGroupAsync(arguments.GroupId, arguments.DashboardId, ct)).ConfigureAwait(false);
                Console.WriteLine($"Got {tiles.Value.Count} tiles");
                foreach (var tile in tiles.Value)
                {
                    Console.WriteLine(JsonConvert.SerializeObject(tile));
                }
            }

            if (arguments.EmbedToken && !string.IsNullOrWhiteSpace(arguments.ReportId))
            {
                var report = await(noGroup ? powerBIClient.Reports.GetReportAsync(arguments.ReportId, ct) : powerBIClient.Reports.GetReportInGroupAsync(arguments.GroupId, arguments.ReportId, ct)).ConfigureAwait(false);
                Console.WriteLine($"Report: {JsonConvert.SerializeObject(report)}");
                var request = new GenerateTokenRequest {
                    AccessLevel = "View"
                };
                var token = await(noGroup ? powerBIClient.Reports.GenerateTokenAsync(arguments.ReportId, request, ct) : powerBIClient.Reports.GenerateTokenInGroupAsync(arguments.GroupId, arguments.ReportId, request, ct)).ConfigureAwait(false);
                Console.WriteLine($"Report token: {JsonConvert.SerializeObject(token)}");
            }

            if (arguments.EmbedToken && !string.IsNullOrWhiteSpace(arguments.TileId) && !string.IsNullOrWhiteSpace(arguments.DashboardId))
            {
                var tile = await(noGroup ? powerBIClient.Dashboards.GetTileAsync(arguments.DashboardId, arguments.TileId, ct) : powerBIClient.Dashboards.GetTileInGroupAsync(arguments.GroupId, arguments.DashboardId, arguments.TileId, ct)).ConfigureAwait(false);
                Console.WriteLine($"Tile: {JsonConvert.SerializeObject(tile)}");
                var request = new GenerateTokenRequest {
                    AccessLevel = "View"
                };
                var token = await(noGroup ? powerBIClient.Dashboards.GenerateTokenAsync(arguments.DashboardId, request, ct) : powerBIClient.Dashboards.GenerateTokenInGroupAsync(arguments.GroupId, arguments.DashboardId, request, ct)).ConfigureAwait(false);
                Console.WriteLine($"Dashboard Token: {JsonConvert.SerializeObject(token)}");
                token = await(noGroup ? powerBIClient.Tiles.GenerateTokenAsync(arguments.DashboardId, arguments.TileId, request, ct) : powerBIClient.Tiles.GenerateTokenInGroupAsync(arguments.GroupId, arguments.DashboardId, arguments.TileId, request, ct)).ConfigureAwait(false);
                Console.WriteLine($"Tile Token: {JsonConvert.SerializeObject(token)}");
            }

            if (arguments.GetParameters && !string.IsNullOrWhiteSpace(arguments.DatasetId))
            {
                var parameters = await(noGroup ? powerBIClient.Datasets.GetParametersAsync(arguments.DatasetId, ct) : powerBIClient.Datasets.GetParametersInGroupAsync(arguments.GroupId, arguments.DatasetId, ct)).ConfigureAwait(false);
                Console.WriteLine($"Parameters: {JsonConvert.SerializeObject(parameters)}");
            }

            if (!string.IsNullOrWhiteSpace(arguments.TokenFile) && tokenProvider is DeviceCodeTokenProvider deviceCodeProvider)
            {
                var state = deviceCodeProvider.GetSerializedState();
                var clientConfiguration = new ClientConfiguration {
                    ClientId = arguments.ClientId, TokenCacheState = state
                };
                File.WriteAllText(arguments.TokenFile, JsonConvert.SerializeObject(clientConfiguration));
            }
        }