public async Task CreateDatasetRecord(Dataset dataset, DatasetItemContainerDetails containerDetails)
        {
            var datasetItem = dataset.ToDatasetStorageItem(d =>
            {
                d.Created            = DateTime.UtcNow;
                d.CreatedByUserName  = dataset.CreatedByUserName;
                d.CreatedByUserEmail = dataset.CreatedByUserEmail;
            });

            var options = new RequestOptions
            {
                PartitionKey = new PartitionKey(dataset.Id.ToString())
            };
            var datasetRecord = await Client.UpsertDocumentAsync(DatasetDocumentCollectionUri, datasetItem, options).ConfigureAwait(false);

            var link = new Attachment
            {
                Id          = containerDetails.Name,
                ContentType = containerDetails.ContentType,
                MediaLink   = containerDetails.Uri
            };

            link.SetPropertyValue("storageType", "blob");
            link.SetPropertyValue("container", containerDetails.Container);
            link.SetPropertyValue("account", containerDetails.Account);

            await Client.UpsertAttachmentAsync(datasetRecord.Resource.SelfLink, link, options).ConfigureAwait(false);
        }
        public async Task CreateDatasetStorageDetailsRecord(DatasetItemContainerDetails containerDetails)
        {
            var datasetItem = new DatasetStorageDetailsStorageItem
            {
                DatasetId   = containerDetails.DatasetId,
                Id          = Guid.NewGuid(),
                Account     = containerDetails.Account,
                Container   = containerDetails.Container,
                StorageType = "blob",
                PrimaryUri  = new Uri(containerDetails.Uri),
            };

            var options = new RequestOptions
            {
                PartitionKey = new PartitionKey(containerDetails.DatasetId.ToString())
            };
            await Client.UpsertDocumentAsync(DatasetDocumentCollectionUri, datasetItem, options).ConfigureAwait(false);
        }
Esempio n. 3
0
        private async Task <Func <Task> > SetupDataset(DatasetStorageItem dataset, Action <DatasetStorage> setParamsFn = null)
        {
            var sasTokens      = Services.GetService <SasTokenService>();
            var datasetStorage = new DatasetStorage
            {
                Id          = dataset.Id,
                DatasetName = dataset.Name,
                AccountName = sasTokens.DefaultDatasetStorageAccount(),
            };
            await sasTokens.FindUniqueDatasetContainerName(datasetStorage);

            await sasTokens.CreateDatasetContainer(datasetStorage);

            var blobClient = await Services.GetBlobClient();

            var container = blobClient.GetContainerReference(datasetStorage.ContainerName);

            foreach (var testFile in TestFiles)
            {
                var blob    = container.GetBlockBlobReference($"{testFile}.txt");
                var content = $"{testFile}, generated {DateTime.UtcNow.ToString()}";
                await blob.UploadTextAsync(content);
            }

            var datasetId      = dataset.Id.ToString();
            var requestOptions = new RequestOptions
            {
                PartitionKey = new PartitionKey(datasetId)
            };
            var cosmosConfig = Services.GetService <IOptions <CosmosConfiguration> >().Value;
            var cosmosClient = await Services.GetCosmosClient();

            var response = await cosmosClient.CreateDocumentAsync(
                UriFactory.CreateDocumentCollectionUri(cosmosConfig.Database, cosmosConfig.DatasetCollection),
                dataset,
                requestOptions);

            var containerDetails = new DatasetItemContainerDetails
            {
                DatasetId = dataset.Id,
                Account   = datasetStorage.AccountName,
                Container = datasetStorage.ContainerName,
                Uri       = container.Uri.ToString(),
            };
            var link = new Attachment
            {
                Id          = containerDetails.Name,
                ContentType = containerDetails.ContentType,
                MediaLink   = containerDetails.Uri
            };

            link.SetPropertyValue("storageType", "blob");
            link.SetPropertyValue("container", containerDetails.Container);
            link.SetPropertyValue("account", containerDetails.Account);
            await cosmosClient.UpsertAttachmentAsync(
                response.Resource.SelfLink,
                link,
                requestOptions);

            setParamsFn?.Invoke(datasetStorage);

            return(async() =>
            {
                await cosmosClient.DeleteDocumentAsync(
                    UriFactory.CreateDocumentUri(cosmosConfig.Database, cosmosConfig.DatasetCollection, datasetId),
                    requestOptions);

                await sasTokens.DeleteDatasetContainer(datasetStorage);
            });
        }