using System; using System.Collections.Generic; using System.Linq; using Microsoft.Kusto.ServiceLayer.Admin.Contracts; using Microsoft.Kusto.ServiceLayer.Metadata.Contracts; using Microsoft.Kusto.ServiceLayer.Utility; namespace Microsoft.Kusto.ServiceLayer.DataSource.Metadata { public class MetadataFactory { public static DataSourceObjectMetadata CreateClusterMetadata(string clusterName) { ValidationUtils.IsArgumentNotNullOrWhiteSpace(clusterName, nameof(clusterName)); return new DataSourceObjectMetadata { MetadataType = DataSourceMetadataType.Cluster, MetadataTypeName = DataSourceMetadataType.Cluster.ToString(), Name = clusterName, PrettyName = clusterName, Urn = $"{clusterName}" }; } public static DataSourceObjectMetadata CreateDatabaseMetadata(DataSourceObjectMetadata clusterMetadata, string databaseName) { ValidationUtils.IsTrue(clusterMetadata.MetadataType == DataSourceMetadataType.Cluster, nameof(clusterMetadata)); ValidationUtils.IsArgumentNotNullOrWhiteSpace(databaseName, nameof(databaseName)); return new DatabaseMetadata { ClusterName = clusterMetadata.Name, MetadataType = DataSourceMetadataType.Database, MetadataTypeName = DataSourceMetadataType.Database.ToString(), Name = databaseName, PrettyName = databaseName, Urn = $"{clusterMetadata.Urn}.{databaseName}" }; } public static FolderMetadata CreateFolderMetadata(DataSourceObjectMetadata parentMetadata, string path, string name) { ValidationUtils.IsNotNull(parentMetadata, nameof(parentMetadata)); return new FolderMetadata { MetadataType = DataSourceMetadataType.Folder, MetadataTypeName = DataSourceMetadataType.Folder.ToString(), Name = name, PrettyName = name, ParentMetadata = parentMetadata, Urn = $"{path}.{name}" }; } /// /// Converts database details shown on cluster manage dashboard to DatabaseInfo type. Add DataSourceType as param if required to show different properties /// /// /// public static List ConvertToDatabaseInfo(IEnumerable clusterDbDetails) { if (clusterDbDetails.FirstOrDefault() is not DatabaseMetadata) { return new List(); } var databaseDetails = new List(); foreach (var dataSourceObjectMetadata in clusterDbDetails) { var dbDetail = (DatabaseMetadata) dataSourceObjectMetadata; long.TryParse(dbDetail.SizeInMB, out long sizeInMb); var databaseInfo = new DatabaseInfo { Options = { ["name"] = dbDetail.Name, ["sizeInMB"] = (sizeInMb / (1024 * 1024)).ToString() } }; databaseDetails.Add(databaseInfo); } return databaseDetails; } /// /// Converts tables details shown on database manage dashboard to ObjectMetadata type. Add DataSourceType as param if required to show different properties /// /// /// public static List ConvertToObjectMetadata(IEnumerable dbChildDetails) { var databaseChildDetails = new List(); foreach (var childDetail in dbChildDetails) { ObjectMetadata dbChildInfo = new ObjectMetadata(); dbChildInfo.Name = childDetail.PrettyName; dbChildInfo.MetadataTypeName = childDetail.MetadataTypeName; dbChildInfo.MetadataType = MetadataType.Table; // Add mapping here. databaseChildDetails.Add(dbChildInfo); } return databaseChildDetails; } public static DataSourceObjectMetadata CreateDataSourceObjectMetadata(DataSourceMetadataType datatype, string name, string urn) { return new DataSourceObjectMetadata { MetadataType = datatype, MetadataTypeName = datatype.ToString(), Name = name, PrettyName = name, Urn = $"{urn}", }; } } }