コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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++;
                }
            }
        }
        public void Given_NullSettings_GetOAuthTokenFromAad_ShouldThrow_Exception()
        {
            var settings = new Mock <ICostMonitoringSettings>();
            var wrapper  = new AzureAuthenticationHelperWrapper();

            Action action = () => { var result = wrapper.GetOAuthTokenFromAad(null); };

            action.ShouldThrow <ArgumentNullException>();

            action = () => { var result = wrapper.GetOAuthTokenFromAad(settings.Object); };
            action.ShouldThrow <InvalidOperationException>();

            settings.SetupGet(p => p.Authentication).Returns(new AuthenticationSettings());
            action = () => { var result = wrapper.GetOAuthTokenFromAad(settings.Object); };
            action.ShouldThrow <InvalidOperationException>();
        }
        /// <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 }));
        }