コード例 #1
0
        public async Task <List <DataCollectionMetrics> > GetDataCollectionMetricsAsync(DataContainer container)
        {
            using (var client = new DynamoDBClientBuilder(container.ConnectionString).GetClient()) {
                var tables = await client.GetTables().ConfigureAwait(false);

                var metrics = new List <DataCollectionMetrics>();
                foreach (var table in tables)
                {
                    var request = new DescribeTableRequest(table);

                    var response = await client.DescribeTableAsync(request).ConfigureAwait(false);

                    var tbl = response.Table;
                    metrics.Add(new DataCollectionMetrics
                    {
                        Name         = tbl.TableName,
                        UsedSpaceKB  = tbl.TableSizeBytes / 1000,
                        TotalSpaceKB = tbl.TableSizeBytes / 1000,
                        RowCount     = tbl.ItemCount,
                    });
                }

                return(metrics);
            }
        }
コード例 #2
0
        public async Task <(List <DataCollection>, List <DataEntity>)> GetSchemaAsync(DataContainer container)
        {
            using (var client = new DynamoDBClientBuilder(container.ConnectionString).GetClient())
            {
                var tableNames = await client.GetTables().ConfigureAwait(false);

                var dataEntities = new List <DataEntity>();
                foreach (var tableName in tableNames)
                {
                    dataEntities.AddRange(await GetSchema(tableName, client, container));
                }

                var dataCollections = tableNames.Select(t => new DataCollection(container, t));

                return(dataCollections.ToList(), dataEntities.ToList());
            }
        }
コード例 #3
0
        public async Task <bool> TestConnectionAsync(DataContainer container)
        {
            using (var client = new DynamoDBClientBuilder(container.ConnectionString).GetClient())
            {
                var request = new ListTablesRequest
                {
                    Limit = 1,
                    ExclusiveStartTableName = null
                };

                try
                {
                    await client.ListTablesAsync(request).ConfigureAwait(false);

                    return(true);
                }
                catch (Exception)
                {
                    return(false);
                }
            }
        }
コード例 #4
0
        public async Task <List <string> > CollectSampleAsync(DataEntity dataEntity, int sampleSize)
        {
            using (var client = new DynamoDBClientBuilder(dataEntity.Container.ConnectionString).GetClient())
            {
                var itemsCount = await GetItemsCount(dataEntity.Collection.Name, client);

                if (itemsCount == 0)
                {
                    return(Enumerable.Empty <string>().ToList());
                }

                var randomSampler = new RandomSampler(sampleSize, itemsCount, 10);

                var request = new ScanRequest
                {
                    TableName = dataEntity.Collection.Name,
                    Limit     = (int)sampleSize
                };

                var response = await client.ScanAll(request).ConfigureAwait(false); //randomSampler.Random(

                return(response.SelectMany(x => x.CollectSample(dataEntity.Name)).Take(sampleSize).ToList());
            }
        }