/// <summary> /// Runs the timer trigger function. /// </summary> /// <param name="myTimer"><see cref="TimerInfo"/> instance.</param> /// <param name="log"><see cref="TraceWriter"/> instance.</param> public static async void Run(TimerInfo myTimer, TraceWriter log) { log.Info($"C# Timer trigger function executed at: {DateTime.Now}"); var connString = ConfigurationManager.ConnectionStrings["MonitoringDbContext"].ConnectionString; var settings = CostMonitoringSettings.CreateInstance(); var options = settings.Arguments; var dbContext = new MonitoringDbContext(connString); var auth = new AzureAuthenticationHelperWrapper(); var billing = new AzureBillingApiClientHelper(settings); var httpClient = new HttpClientHelper(); var aggregator = new CostAggregationService(settings, dbContext, auth, billing, httpClient); if (options.RunEntirePeriod) { var monthsBack = 0; var result = 1; while (result > 0) { result = await ProcessAggregatorAsync(aggregator, log, monthsBack : monthsBack).ConfigureAwait(false); monthsBack++; } } else { var result = await ProcessAggregatorAsync(aggregator, log, options : options).ConfigureAwait(false); } var reminder = new CostReminderService(settings, dbContext); var owners = await ProcessReminderAsync(reminder, log, options).ConfigureAwait(false); }
public static void Main(string[] args) { var options = new ArgumentOptions(); Parser.Default.ParseArguments(args, options); var settings = CostMonitoringSettings.CreateInstance(); var dbContext = new MonitoringDbContext(); var auth = new AzureAuthenticationHelperWrapper(); var billing = new AzureBillingApiClientHelper(settings); var httpClient = new HttpClientHelper(); var service = new CostAggregationService(settings, dbContext, auth, billing, httpClient); Console.WriteLine("Azure Resources Usage Cost Aggregator"); Console.WriteLine("-------------------------------------"); Console.WriteLine(); if (!options.RunEntirePeriod) { var result = ProcessAsync(service, options: options).Result; } else { var monthsBack = 0; var result = 1; while (result > 0) { result = ProcessAsync(service, monthsBack: monthsBack).Result; monthsBack++; } } }
/// <summary> /// Runs the HTTP trigger function. /// </summary> /// <param name="req"><see cref="HttpRequestMessage"/> instance.</param> /// <param name="log"><see cref="TraceWriter"/> instance.</param> /// <returns>Returns the <see cref="HttpResponseMessage"/> instance.</returns> public static async Task <HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log) { log.Info("C# HTTP trigger function processed a request."); var options = await req.Content.ReadAsAsync <ArgumentOptions>().ConfigureAwait(false); var connString = ConfigurationManager.ConnectionStrings["MonitoringDbContext"].ConnectionString; var settings = CostMonitoringSettings.CreateInstance(); if (options == null) { options = settings.Arguments; } var dbContext = new MonitoringDbContext(connString); var auth = new AzureAuthenticationHelperWrapper(); var billing = new AzureBillingApiClientHelper(settings); var httpClient = new HttpClientHelper(); var aggregator = new CostAggregationService(settings, dbContext, auth, billing, httpClient); var result = 0; if (!options.RunEntirePeriod) { result = await ProcessAggregatorAsync(aggregator, log, options : options).ConfigureAwait(false); } else { var monthsBack = 0; result = 1; while (result > 0) { result = await ProcessAggregatorAsync(aggregator, log, monthsBack : monthsBack).ConfigureAwait(false); monthsBack++; } } var reminder = new CostReminderService(settings, dbContext); var owners = await ProcessReminderAsync(reminder, log, options).ConfigureAwait(false); return(req.CreateResponse(HttpStatusCode.OK, new { Processed = result, Owners = owners })); }