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}"); }
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); }
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); } }