private void GetDevicesReport() { bool haveMultiChannelDevice = m_model.GetDevices().Count(x => x is MultiChannelDevice) > 0; m_writer.WriteLine( $" <table>\r\n" + $" <caption>{GlobalizationEngine.GetString("Information about devices")}</caption>\r\n" + $" <tr>\r\n" + $" <th>{GlobalizationEngine.GetString("Name of device")}</th>\r\n" + $" <th>{GlobalizationEngine.GetString("Average processing time")}</th>\r\n" + $" <th>{GlobalizationEngine.GetString("Load percentage")}</th>\r\n" + $" <th>{GlobalizationEngine.GetString("Transact count")}</th>\r\n" + (haveMultiChannelDevice ? $" <th>{GlobalizationEngine.GetString("Channel count")}</th>\r\n" : "") + $" </tr>"); foreach (Device device in m_model.GetDevices()) { string avgProcessingTime = (device.TimeUsedSum * 1.0f / device.TransactCount).ToString("0.##"); string loadPercentage = (device.TimeUsedSum * 1.0f / m_model.ModelTime * 100).ToString("0.##"); m_writer.WriteLine($"<tr><td>{device.Name}</td><td>{avgProcessingTime}</td><td>{loadPercentage}%</td><td>{device.TransactCount}</td>"); if (device is MultiChannelDevice) { MultiChannelDevice multichannelDevice = device as MultiChannelDevice; m_writer.WriteLine($"<td>{multichannelDevice.StorageSize}</td>"); } m_writer.WriteLine("</tr>"); } m_writer.WriteLine(" </table>"); }
private void GetDevicesReport(int maxPossibleLines) { Console.WriteLine($" {GlobalizationEngine.GetString("Information about devices")}:"); int outputLength = 0; foreach (Device device in m_model.GetDevices()) { double avgProcessingTime = device.TimeUsedSum * 1.0f / device.TransactCount; Console.WriteLine($" {GlobalizationEngine.GetString("Name of device")}: {device.Name}"); Console.WriteLine($" {GlobalizationEngine.GetString("Average processing time")}: {avgProcessingTime.ToString("0.##")}"); Console.WriteLine($" {GlobalizationEngine.GetString("Load percentage")}: {(device.TimeUsedSum * 1.0f / m_model.ModelTime * 100).ToString("0.##")}%"); Console.WriteLine($" {GlobalizationEngine.GetString("Transact count")}: {device.TransactCount}"); if (device is MultiChannelDevice) { MultiChannelDevice multichannelDevice = device as MultiChannelDevice; Console.WriteLine($" {GlobalizationEngine.GetString("Channel count")}: {multichannelDevice.StorageSize}"); } if (maxPossibleLines != -1 && outputLength++ > maxPossibleLines) { Console.WriteLine(GlobalizationEngine.GetString("There are too many items to be displayed. Truncating output. If you want to avoid it, set maxPossibleLines to -1")); return; } } }
private void GetDevicesReport() { bool haveMultiChannelDevice = m_model.GetDevices().Count(x => x is MultiChannelDevice) > 0; m_writer.WriteLine($"## {GlobalizationEngine.GetString("Information about devices")}"); m_writer.WriteLine(""); m_writer.WriteLine($"| {GlobalizationEngine.GetString("Name of device")} | {GlobalizationEngine.GetString("Average processing time")} | " + $" {GlobalizationEngine.GetString("Average processing time")} | {GlobalizationEngine.GetString("Transact count")} | {(haveMultiChannelDevice? GlobalizationEngine.GetString("Channel count") + " |":"")}"); m_writer.WriteLine($"|-------------|---------------------|-----------------|----------------|{(haveMultiChannelDevice ?"----------------|":"")}"); foreach (Device device in m_model.GetDevices()) { string avgProcessingTime = (device.TimeUsedSum * 1.0f / device.TransactCount).ToString("0.##"); string loadPercentage = (device.TimeUsedSum * 1.0f / m_model.ModelTime * 100).ToString("0.##"); string line = $"| {device.Name} | {avgProcessingTime} | {loadPercentage}% | {device.TransactCount} |"; if (device is MultiChannelDevice) { MultiChannelDevice multichannelDevice = device as MultiChannelDevice; line += $" {multichannelDevice.StorageSize} |"; } m_writer.WriteLine(line); } }
static void Main(string[] args) { InitGlobalizationEngine(Language.RU); Model model = new Model(); MultiChannelDevice multiChannelDevice = model.CreateMultiChannelDevice("MultiChannel", 7); SMQueue queue = model.CreateQueue("Accumulator"); UInt64 transactCounter = 1; model.Schedule((int)Events.EventGenerate, model.Random(14, 26), transactCounter); model.Schedule((int)Events.EventEnd, 4800, (ulong)1e9); UInt64 currentTransact = 1; Events currentEvent = Events.EventEnd; do { (UInt64, UInt64)top = model.Cause(); currentEvent = (Events)top.Item1; currentTransact = top.Item2; switch (currentEvent) { case Events.EventGenerate: { model.Schedule((int)Events.EventReserve, 0, currentTransact); transactCounter++; model.Schedule((int)Events.EventGenerate, model.Random(14, 26), transactCounter); break; } case Events.EventReserve: { if (multiChannelDevice.GetState() != Device.State.Full) { multiChannelDevice.Reserve(currentTransact); model.Schedule((int)Events.EventRelease, model.Random(130, 150), currentTransact); } else { queue.Add(currentTransact, 0); } break; } case Events.EventRelease: { multiChannelDevice.Release(); if (queue.Count > 0) { UInt64 transactId = queue.Dequeue(out UInt64 stage).TransactId; model.Schedule((int)Events.EventReserve, 0, transactId); } break; } case Events.EventEnd: { break; } default: { throw new Exception(); } } }while (currentEvent != Events.EventEnd); using (HtmlReporter htmlReporter = new HtmlReporter(model)) { htmlReporter.GetReport("output.html"); } }