コード例 #1
0
        public static async Task Run([TimerTrigger("0 */2 * * * *")] TimerInfo myTimer,
                                     [ServiceBus("orders", Connection = "ServiceBusConnection")] ICollector <string> orderOutput,
                                     [ServiceBus("logs", Connection = "ServiceBusConnection")] ICollector <string> logOutput,
                                     ILogger log)
        {
            log.LogInformation($"GenerateOrders function executed at: {DateTime.Now}");

            var settingsList = new List <Settings>
            {
                Settings.OrderRate,
                Settings.MaxActiveOrders,
                Settings.MaxOrderSize
            };

            try
            {
                using (IDbConnection conn = new SqlConnection(Environment.GetEnvironmentVariable("SqlConnection")))
                {
                    var settingsRepo = new SettingRepository(conn);
                    var orderRepo    = new OrderRepository(conn);

                    var settings = await settingsRepo.GetSettings(settingsList);

                    var orderCount = await orderRepo.GetOpenOrderCount();

                    if (orderCount < Setting.GetSetting(settings.ToList(), Settings.MaxActiveOrders))
                    {
                        Order order = new Order(ActionCheck.GenerateInt((int)settings.First(s => s.Id == Settings.MaxOrderSize).SettingValue));

                        var result = await orderRepo.CreateOrder(order);

                        orderOutput.Add(JsonConvert.SerializeObject(result,
                                                                    new JsonSerializerSettings
                        {
                            ContractResolver = new CamelCasePropertyNamesContractResolver()
                        }));
                        logOutput.Add($"{TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time")).ToLongTimeString()} New order created. Id: {result.Id}, Widget Count: {result.WidgetCount}");
                    }
                }
            }
            catch (Exception e)
            {
                log.LogError(e.Message);
            }

            log.LogInformation($"GenerateOrders function completed at: {DateTime.Now}");
        }
コード例 #2
0
        public static MachineRun RunMachine(MachineRun machine)
        {
            var averageFailureRate        = Setting.GetSetting(machine.SettingsList, Settings.AverageFailureRate);
            var failureRateVariability    = Setting.GetSetting(machine.SettingsList, Settings.FailureRateVariability);
            var averageProductionTime     = Setting.GetSetting(machine.SettingsList, Settings.AverageProductionTime);
            var productionTimeVariability = Setting.GetSetting(machine.SettingsList, Settings.ProductionTimeVariability);
            var machineFailureRate        = Setting.GetSetting(machine.SettingsList, Settings.MachineFailureRate);

            var adjFailureRate = averageFailureRate;

            if (machine.Machine.Broken)
            {
                adjFailureRate = averageFailureRate * 10000;
            }

            //produce widgets
            var baseProduction = ActionCheck.GenerateInt((int)(averageProductionTime * 2), (int)productionTimeVariability);

            var baseFailure = ActionCheck.GenerateFloat(adjFailureRate * 2, failureRateVariability) / 2;

            baseFailure = baseFailure > 1 ? 1 : baseFailure < 0 ? 0 : baseFailure;

            machine.CompletedOutput = (int)Math.Ceiling(baseProduction * (1 - baseFailure));

            machine.FailedOutput = baseProduction - machine.CompletedOutput;

            //check to see if machine broke
            var machineAge = (DateTime.UtcNow - machine.Machine.CreateDate).TotalHours / 100;

            var failureChance1 = ActionCheck.GenerateFloat(machineFailureRate, (float)machineAge);
            var failureChance2 = ActionCheck.GenerateFloat(machineFailureRate, (float)machineAge);
            var failureChance3 = ActionCheck.GenerateFloat(machineFailureRate, (float)machineAge);

            if (!machine.MachineBroken && !ActionCheck.Check(failureChance1) && !ActionCheck.Check(failureChance2) && !ActionCheck.Check(failureChance3))
            {
                machine.MachineBroken = true;
            }

            return(machine);
        }
コード例 #3
0
        public static async Task Run([TimerTrigger("0 */15 * * * *")]TimerInfo myTimer,
            [ServiceBus("machines", Connection = "ServiceBusConnection")] ICollector<string> machineOutput,
            [ServiceBus("logs", Connection = "ServiceBusConnection")] ICollector<string> logOutput,
            ILogger log)
        {
            log.LogInformation($"CheckMachineCounts function executed at: {DateTime.Now}");

            try
            {
                using (IDbConnection conn = new SqlConnection(Environment.GetEnvironmentVariable("SqlConnection")))
                {
                    var settingsRepo = new SettingRepository(conn);
                    var machineRepo = new MachineRepository(conn);

                    var machineRate = await settingsRepo.GetSetting(Settings.BaseMachineRate);
                    var activeMachines = await machineRepo.GetActiveMachines();

                    //decomission broken machines
                    var brokenMachines = activeMachines.Where(m => m.Broken).Take(3);

                    log.LogDebug($"Found {brokenMachines.Count()} broken machines. Removing from circulation.");

                    foreach(var machine in brokenMachines)
                    {
                        machine.Broken = false;
                        await machineRepo.UpdateMachine(machine);
                        machineOutput.Add(JsonConvert.SerializeObject(machine,
                            new JsonSerializerSettings
                            {
                                ContractResolver = new CamelCasePropertyNamesContractResolver()
                            }));
                        logOutput.Add($"{TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time")).ToLongTimeString()} Machine {machine.Id} repaired.");
                    }

                    if(activeMachines.Count(m => !m.Broken && m.MachineType == "Smasher") < machineRate.SettingValue)
                    {
                        var smasher = await machineRepo.CreateMachine(new Machine("Smasher", ActionCheck.GenerateInt(10)));
                        machineOutput.Add(JsonConvert.SerializeObject(smasher,
                            new JsonSerializerSettings
                            {
                                ContractResolver = new CamelCasePropertyNamesContractResolver()
                            }));
                        logOutput.Add($"{TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time")).ToLongTimeString()} Machine {smasher.Id} created as {smasher.MachineType}.");
                    }

                    if (activeMachines.Count(m => !m.Broken && m.MachineType == "Slasher") < machineRate.SettingValue)
                    {
                        var slasher = await machineRepo.CreateMachine(new Machine("Slasher", ActionCheck.GenerateInt(10)));
                        machineOutput.Add(JsonConvert.SerializeObject(slasher,
                            new JsonSerializerSettings
                            {
                                ContractResolver = new CamelCasePropertyNamesContractResolver()
                            }));
                        logOutput.Add($"{TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time")).ToLongTimeString()} Machine {slasher.Id} created as {slasher.MachineType}.");
                    }

                    if (activeMachines.Count(m => !m.Broken && m.MachineType == "Trasher") < machineRate.SettingValue)
                    {
                        var trasher = await machineRepo.CreateMachine(new Machine("Trasher", ActionCheck.GenerateInt(10)));

                        machineOutput.Add(JsonConvert.SerializeObject(trasher,
                            new JsonSerializerSettings
                            {
                                ContractResolver = new CamelCasePropertyNamesContractResolver()
                            }));
                        logOutput.Add($"{TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time")).ToLongTimeString()} Machine {trasher.Id} created as {trasher.MachineType}.");
                    }

                }
            }
            catch (Exception e)
            {
                log.LogError(e.Message);
            }
        }