Skip to content

Instantly share code, notes, and snippets.

View ealsur's full-sized avatar

Matias Quaranta ealsur

View GitHub Profile
@ealsur
ealsur / transactionalbatch-view.cs
Created January 6, 2020 18:40
TransactionalBatch - View response
using (batchResponse)
{
if (batchResponse.IsSuccessStatusCode)
{
TransactionalBatchOperationResult<ParentClass> parentResult = batchResponse.GetOperationResultAtIndex<ParentClass>(0);
ParentClass parentClassResult = parentResult.Resource;
TransactionalBatchOperationResult<ChildClass> childResult = batchResponse.GetOperationResultAtIndex<ChildClass>(1);
ChildClass childClassResult = childResult.Resource;
}
}
@ealsur
ealsur / transactionalbatch-execute.cs
Created January 6, 2020 18:39
TransactionalBatch - Execute Batch
TransactionalBatchResponse batchResponse = await batch.ExecuteAsync();
@ealsur
ealsur / transactionalbatch-create.cs
Created January 6, 2020 18:36
TransactionalBatch - Creating Batch
string partitionKey = "The Family";
ParentClass parent = new ParentClass(){ Id = "The Parent", PartitionKey = partitionKey, Name = "John", Age = 30 };
ChildClass child = new ChildClass(){ Id = "The Child", ParentId = parent.Id, PartitionKey = partitionKey };
TransactionalBatch batch = container.CreateTransactionalBatch(new PartitionKey(parent.PartitionKey))
.CreateItem<ParentClass>(parent)
.CreateItem<ChildClass>(child);
@ealsur
ealsur / BulkCreateTasks.cs
Created October 12, 2019 00:20
Azure Cosmos DB V3 SDK - Bulk tasks
Container container = cosmosClient.GetContainer("myDb", "myCollection");
// Assuming your have your data available to be inserted or read
List<Task> concurrentTasks = new List<Task>();
foreach(Item itemToInsert in ReadYourData())
{
concurrentTasks.Add(container.CreateItemAsync(itemToInsert, new PartitionKey(itemToInsert.MyPk)));
}
await Task.WhenAll(concurrentTasks);
@ealsur
ealsur / BulkCreateClient.cs
Last active October 12, 2019 00:11
Azure Cosmos DB V3 Bulk
CosmosClientOptions options = new CosmosClientOptions() {
AllowBulkExecution = true };
CosmosClient cosmosclient = new CosmosClient(connectionString, options);
@ealsur
ealsur / profiles.json
Last active November 5, 2019 23:01
Windows Terminal profiles
// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation
{
"$schema": "https://aka.ms/terminal-profiles-schema",
"defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"profiles":
@ealsur
ealsur / Trigger.cs
Last active February 15, 2019 20:12
Azure Cosmos DB + Functions Cookbook - monitoring - trigger
[FunctionName("Trigger")]
public static void Trigger([CosmosDBTrigger(
databaseName: "%MonitoredDatabase%",
collectionName: "%MonitoredCollection%",
ConnectionStringSetting = "CosmosDB",
LeaseCollectionPrefix = "%MonitoredDatabaseLeasePrefix%",
LeaseCollectionName = "leases",
CreateLeaseCollectionIfNotExists = true)] IReadOnlyList<Document> documents,
ILogger log)
{
@ealsur
ealsur / CosmosDBConnectionString.cs
Created February 15, 2019 20:11
Azure Cosmos DB + Functions Cookbook - monitoring - helper
private class CosmosDBConnectionString
{
public CosmosDBConnectionString(string connectionString)
{
// Use this generic builder to parse the connection string
DbConnectionStringBuilder builder = new DbConnectionStringBuilder
{
ConnectionString = connectionString
};
@ealsur
ealsur / Estimator.cs
Created February 15, 2019 20:10
Azure Cosmos DB + Functions Cookbook - monitoring - estimator
private static Lazy<IRemainingWorkEstimator> remainingWorkEstimator;
public static IRemainingWorkEstimator GetRemainingWorkEstimator(
DocumentClient monitoredCollectionClient,
DocumentClient leaseCollectionClient)
{
if (remainingWorkEstimator == null)
{
// Pull the Connection string from the environment, Environment.GetEnvironmentVariable will read the local.settings.json file or the deployed Function App configuration
CosmosDBConnectionString cosmosDBConnectionString = new CosmosDBConnectionString(Environment.GetEnvironmentVariable("CosmosDB"));
@ealsur
ealsur / Function.cs
Created February 15, 2019 20:09
Azure Cosmos DB + Functions Cookbook - monitoring
[FunctionName("Monitor")]
public static async Task Monitor(
[TimerTrigger("*/1 * * * * *", RunOnStartup = true)] TimerInfo timer, // Timer will trigger every 1 second, adjust CRON expression
[CosmosDB("%MonitoredDatabase%", "%MonitoredCollection%", ConnectionStringSetting = "CosmosDB")] DocumentClient monitoredCollectionClient,
[CosmosDB("%MonitoredDatabase%", "leases", ConnectionStringSetting = "CosmosDB")] DocumentClient leaseCollectionClient,
ILogger log)
{
var estimator = GetRemainingWorkEstimator(monitoredCollectionClient, leaseCollectionClient);
var remainingWork = await estimator.GetEstimatedRemainingWork();
// Send custom metric to App Insight