public async Task ProcessCommands(KustoFunctionsState functionsState) { IKustoFunction[] functions = { ListDatabases.Create(), ListTables.Create(), AddUser.Create() }; KustoFunctionsEnum kustoEnum = KustoFunctionsEnum.None; if (functionsState._options.ListDatabases) { kustoEnum |= KustoFunctionsEnum.ListDatabases; } if (functionsState._options.ListTables) { kustoEnum |= KustoFunctionsEnum.ListTables; } if (functionsState._options.AddUser) { kustoEnum |= KustoFunctionsEnum.AddUser; } // TODO: Need to ensure that there is error handling within the contained classes for things like database and table names - should be a validate method on the interface foreach (var function in functions) { if ((function.KustoCommandType & kustoEnum) == function.KustoCommandType) { await function.Execute(functionsState); } } }
public async Task Execute(KustoFunctionsState functionsState) { try { var client = await functionsState.GetManagementClient(); var databases = await client.Databases.ListByClusterAsync(resourceGroupName : functionsState._options.ResourceGroup, clusterName : $"{functionsState._options.KustoClusterName}"); var headerThickness = new LineThickness(LineWidth.Single, LineWidth.Single); var doc = new Document( new Grid { Color = Gray, Columns = { GridLength.Auto, GridLength.Char(20), GridLength.Char(20) }, Children = { new Cell("Name") { Stroke = headerThickness }, new Cell("Row Count") { Stroke = headerThickness }, new Cell("Cache Size (GB)") { Stroke = headerThickness }, databases.Select(item => { var databasesQuery = functionsState.GetDataAdminReader(item.Name.Split('/')[1], ".show database datastats").Result; var dataStats = new KustoDatastats(databasesQuery); return(new[] { new Cell(dataStats.DatabaseName) { Color = Yellow }, new Cell(dataStats.HotRowCount), new Cell(dataStats.HotCompressedSize.ToString("##,##0.00000000", CultureInfo.InvariantCulture)) { Align = Align.Right }, }); }) } } ); ConsoleRenderer.RenderDocument(doc); } catch (Exception ex) { Console.WriteLine(ex); } }
public async Task Execute(KustoFunctionsState functionsState) { try { List <KustoTableDetail> tableDetails = new List <KustoTableDetail>(); var databasesQuery = await functionsState.GetDataAdminReader(functionsState._options.DatabaseName, ".show tables details"); var allTables = databasesQuery.FromDataReader(functionsState._options.DatabaseName); foreach (DataRow row in allTables.Tables[0].Rows) { tableDetails.Add(new KustoTableDetail(row)); } var headerThickness = new LineThickness(LineWidth.Single, LineWidth.Single); var doc = new Document( new Grid { Color = Gray, Columns = { GridLength.Auto, GridLength.Char(20), GridLength.Char(20), GridLength.Auto }, Children = { new Cell("Name") { Stroke = headerThickness }, new Cell("Row Count") { Stroke = headerThickness }, new Cell("Cache Size (GB)") { Stroke = headerThickness }, new Cell("Users/Groups") { Stroke = headerThickness }, tableDetails.Select(item => { var kustoAuthorised = JsonConvert.DeserializeObject <List <KustoAuthorisedPrincipals> >(item.AuthorizedPrincipals); var kaWithType = kustoAuthorised.Select(item => item.DisplayName + $" [{item.Type}]"); string principals = String.Join('\n', kaWithType); double extentSize = item.TotalExtentSize / 1000000000; return(new[] { new Cell(item.TableName) { Color = Yellow }, new Cell(item.TotalRowCount), new Cell(extentSize.ToString("##,##0.00000000", CultureInfo.InvariantCulture)) { Align = Align.Right }, new Cell(principals) { Color = Yellow }, }); }) } } ); ConsoleRenderer.RenderDocument(doc); } catch (Exception ex) { Console.WriteLine(ex); } }
public async Task Execute(KustoFunctionsState functionsState) { try { var databasesQuery = await functionsState.GetDataAdminReader(functionsState._options.DatabaseName, $".add table {functionsState._options.TableName} admins('aaduser={functionsState._options.UserName}')", true); var allTables = databasesQuery.FromDataReader(functionsState._options.DatabaseName); var principals = (from DataRow row in allTables.Tables[0].Rows select new KustoPrincipal(row)).ToList(); var headerThickness = new LineThickness(LineWidth.Single, LineWidth.Single); var doc = new Document( new Grid { Color = Gray, Columns = { GridLength.Auto, GridLength.Char(20), GridLength.Char(20), GridLength.Auto }, Children = { new Cell("Role") { Stroke = headerThickness }, new Cell("Principal Type") { Stroke = headerThickness }, new Cell("Display Name") { Stroke = headerThickness }, new Cell("PrincipalFQN") { Stroke = headerThickness }, principals.Select(item => { return(new[] { new Cell(item.Role) { Color = Yellow }, new Cell(item.PrincipalType), new Cell(item.PrincipalDisplayName), new Cell(item.PrincipalFQN) { Color = Yellow }, }); }) } } ); ConsoleRenderer.RenderDocument(doc); } catch (Exception ex) { Console.WriteLine(ex); } }