src/MeteredTriggerJob/Program.cs (55 lines of code) (raw):
using System;
using System.Diagnostics;
using System.Reflection;
using Azure.Identity;
using Marketplace.SaaS.Accelerator.DataAccess.Context;
using Marketplace.SaaS.Accelerator.DataAccess.Contracts;
using Marketplace.SaaS.Accelerator.DataAccess.Services;
using Marketplace.SaaS.Accelerator.Services.Configurations;
using Marketplace.SaaS.Accelerator.Services.Contracts;
using Marketplace.SaaS.Accelerator.Services.Services;
using Marketplace.SaaS.Accelerator.Services.Utilities;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Marketplace.Metering;
namespace Marketplace.SaaS.Accelerator.MeteredTriggerJob;
class Program
{
/// <summary>
/// Entery point to the scheduler engine
/// </summary>
/// <param name="args"></param>
static void Main (string[] args)
{
Console.WriteLine($"MeteredExecutor Webjob Started at: {DateTime.Now}");
IConfiguration configuration = new ConfigurationBuilder()
.AddEnvironmentVariables()
.Build();
var config = new SaaSApiClientConfiguration()
{
AdAuthenticationEndPoint = configuration["SaaSApiConfiguration:AdAuthenticationEndPoint"],
ClientId = configuration["SaaSApiConfiguration:ClientId"],
ClientSecret = configuration["SaaSApiConfiguration:ClientSecret"],
GrantType = configuration["SaaSApiConfiguration:GrantType"],
Resource = configuration["SaaSApiConfiguration:Resource"],
TenantId = configuration["SaaSApiConfiguration:TenantId"]
};
var creds = new ClientSecretCredential(config.TenantId.ToString(), config.ClientId.ToString(), config.ClientSecret);
var versionInfo = new AppVersionService(Assembly.GetExecutingAssembly()?.GetName()?.Version);
var services = new ServiceCollection()
.AddDbContext<SaasKitContext>(options => options.UseSqlServer(configuration.GetConnectionString("DefaultConnection")), ServiceLifetime.Transient)
.AddScoped<ISchedulerFrequencyRepository, SchedulerFrequencyRepository>()
.AddScoped<IMeteredPlanSchedulerManagementRepository, MeteredPlanSchedulerManagementRepository>()
.AddScoped<ISchedulerManagerViewRepository, SchedulerManagerViewRepository>()
.AddScoped<ISubscriptionUsageLogsRepository, SubscriptionUsageLogsRepository>()
.AddScoped<IApplicationLogRepository, ApplicationLogRepository>()
.AddScoped<IEmailService, SMTPEmailService>()
.AddScoped<IEmailTemplateRepository, EmailTemplateRepository>()
.AddScoped<IApplicationConfigRepository, ApplicationConfigRepository>()
.AddSingleton<IMeteredBillingApiService>(new MeteredBillingApiService(new MarketplaceMeteringClient(creds), config, new SaaSClientLogger<MeteredBillingApiService>()))
.AddSingleton<Executor, Executor>()
.AddSingleton<IAppVersionService>(versionInfo)
.BuildServiceProvider();
services
.GetService<Executor>()
.Execute();
Console.WriteLine($"MeteredExecutor Webjob Ended at: {DateTime.Now}");
}
}