Skip to content

Instantly share code, notes, and snippets.

View ealsur's full-sized avatar

Matias Quaranta ealsur

View GitHub Profile
@ealsur
ealsur / function.json
Created April 2, 2018 01:59
Azure Cosmos DB + Functions Cookbook - multi triggers
{
"bindings": [
{
"type": "cosmosDBTrigger",
"name": "input",
"direction": "in",
"leaseCollectionName": "leases",
"connectionStringSetting": "<your-connectionstring-setting>",
"databaseName": "<your-monitored-database>",
"collectionName": "<your-monitored-collection>",
@ealsur
ealsur / function2.json
Created April 2, 2018 02:00
Azure Cosmos DB + Functions Cookbook - multi triggers
{
"bindings": [
{
"type": "cosmosDBTrigger",
"name": "input",
"direction": "in",
"leaseCollectionName": "leases",
"connectionStringSetting": "<your-connectionstring-setting>",
"databaseName": "<your-monitored-database>",
"collectionName": "<your-monitored-collection>",
@ealsur
ealsur / precompiled.cs
Created April 2, 2018 03:13
Azure Cosmos DB + Functions Cookbook - multi triggers
[FunctionName("Trigger1")]
public static void Run(
[CosmosDBTrigger("<your-monitored-database>",
"<your-monitored-collection>",
ConnectionStringSetting = "<your-connectionstring-setting>"
LeaseCollectionPrefix = "trigger1")]
IReadOnlyList<Document> input,
TraceWriter log)
{
log.Info("Documents modified " + input.Count);
@ealsur
ealsur / host.json
Created August 8, 2018 14:47
Custom ConnectionMode and Protocol
{
"documentDB": {
"connectionMode": "Direct",
"protocol": "Tcp"
}
}
@ealsur
ealsur / host.json
Created August 8, 2018 17:37
Custom ConnectionMode and Protocol for Functions V2
{
"cosmosDB": {
"connectionMode": "Direct",
"protocol": "Tcp"
}
}
@ealsur
ealsur / precompiled-input.cs
Created November 12, 2018 12:57
Azure Cosmos DB + Functions Cookbook - Multi master & preferred region
public static HttpResponseMessage Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "HttpInputBindingByIdInRoute/{id}")] HttpRequestMessage req,
[CosmosDB(databaseName: "%CosmosDBDatabase%",
collectionName: "%CosmosDBCollection%",
ConnectionStringSetting = "CosmosDBConnectionString",
UseMultipleWriteLocations = true,
PreferredLocations = "Central US,North Central US"
Id = "{id}")] Document document,
ILogger log)
{
@ealsur
ealsur / precompiled-output.cs
Created November 12, 2018 13:03
Azure Cosmos DB + Functions Cookbook - Multi master & preferred region
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
[CosmosDB(databaseName: "%CosmosDBDatabase%",
collectionName: "%CosmosDBCollection%",
ConnectionStringSetting = "CosmosDBConnectionString",
UseMultipleWriteLocations = true,
PreferredLocations = "Central US"
)] IAsyncCollector<MyClass> documentsToSave,
ILogger log)
{
@ealsur
ealsur / hosts.json
Created January 15, 2019 20:06
Azure Cosmos DB + Functions - Health monitoring
{
"version": "2.0",
"logging": {
"fileLoggingMode": "always",
"logLevel": {
"Host.Triggers.CosmosDB": "Trace"
}
}
}
@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
@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"));