File: Program.cs
Web Access
Project: src\playground\AzureKusto\AzureKusto.Worker\AzureKusto.Worker.csproj (AzureKusto.Worker)
using Azure.Identity;
using AzureKusto.Worker;
using Kusto.Cloud.Platform.Utils;
using Kusto.Data;
using Kusto.Data.Net.Client;
using Kusto.Ingest;
using Polly;
 
var builder = Host.CreateApplicationBuilder(args);
builder.AddServiceDefaults();
 
var connectionString = builder.Configuration.GetConnectionString("testdb");
 
var connectionStringBuilder = new KustoConnectionStringBuilder(connectionString);
if (connectionStringBuilder.DataSourceUri.Contains("kusto.windows.net"))
{
    connectionStringBuilder = connectionStringBuilder.WithAadAzureTokenCredentialsAuthentication(new DefaultAzureCredential());
}
 
builder.Services.AddSingleton(sp =>
{
    return KustoClientFactory.CreateCslQueryProvider(connectionStringBuilder);
});
builder.Services.AddSingleton(sp =>
{
    return KustoClientFactory.CreateCslAdminProvider(connectionStringBuilder);
});
builder.Services.AddSingleton(sp =>
{
    return KustoIngestFactory.CreateStreamingIngestClient(connectionStringBuilder);
});
 
builder.Services.AddResiliencePipeline("kusto-resilience", builder =>
    builder.AddRetry(new()
    {
        // Retry any non-permanent exceptions
        MaxRetryAttempts = 10,
        Delay = TimeSpan.FromMilliseconds(100),
        BackoffType = DelayBackoffType.Exponential,
        ShouldHandle = new PredicateBuilder().Handle<Exception>(e => e is ICloudPlatformException cpe && ! cpe.IsPermanent),
    })
);
 
builder.Services.AddOptions<WorkerOptions>();
 
builder.Services.AddHostedService<QueryWorker>();
builder.Services.AddHostedService<IngestionWorker>();
 
var app = builder.Build();
 
app.Run();