)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Home » Code Library » Sdc (Ia.Ftn.Wa.Models.Administration)

Public general use code classes and xml files that we've compiled and used over the years:

    1: using Microsoft.AspNetCore.Identity;
    2: using Microsoft.AspNetCore.Mvc.Rendering;
    3: using System.Text;
    4: using System.Text.RegularExpressions;
    5:  
    6: namespace Ia.Ftn.Wa.Models.Administration
    7: {
    8:     ////////////////////////////////////////////////////////////////////////////
    9:  
   10:     /// <summary publish="true">
   11:     ///
   12:     /// </summary>
   13:     /// 
   14:     /// <remarks> 
   15:     /// Copyright © 2006-2025 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
   16:     /// </remarks> 
   17:     public static class Sdc
   18:     {
   19:         private struct PonNameReceiveTransmitValue { public string Name; public long Value; public long ReceiveValue; public long TransmitValue; }
   20:  
   21:         /// <summary/>
   22:         public readonly static int PastDays = 7;
   23:  
   24:         private class Pon
   25:         {
   26:             public string Value { get; set; }
   27:             public string Text { get; set; }
   28:         };
   29:  
   30:         private class Olt
   31:         {
   32:             public int Value { get; set; }
   33:             public string Text { get; set; }
   34:         };
   35:  
   36:  
   37:         ////////////////////////////////////////////////////////////////////////////
   38:  
   39:         /// <summary>
   40:         ///
   41:         /// </summary>
   42:         public static Ia.Ftn.Wa.Models.Administration.SdcViewModel ViewModel()
   43:         {
   44:             var sdcViewModel = new Ia.Ftn.Wa.Models.Administration.SdcViewModel();
   45:  
   46:             OltSelectList(ref sdcViewModel);
   47:  
   48:             return sdcViewModel;
   49:         }
   50:  
   51:         ////////////////////////////////////////////////////////////////////////////
   52:  
   53:         /// <summary>
   54:         ///
   55:         /// </summary>
   56:         public static void ViewModel(ref Ia.Ftn.Wa.Models.Administration.SdcViewModel sdcViewModel)
   57:         {
   58:             OltSelectList(ref sdcViewModel);
   59:         }
   60:  
   61:         ////////////////////////////////////////////////////////////////////////////
   62:  
   63:         /// <summary>
   64:         ///
   65:         /// </summary>
   66:         public static Ia.Ftn.Wa.Models.Administration.SdcViewModel SdcPonBandwidthUtilizationViewModel()
   67:         {
   68:             var sdcViewModel = new Ia.Ftn.Wa.Models.Administration.SdcViewModel();
   69:  
   70:             PonBandwidthChartDataBind(ref sdcViewModel);
   71:  
   72:             return sdcViewModel;
   73:         }
   74:  
   75:         ////////////////////////////////////////////////////////////////////////////
   76:  
   77:         /// <summary>
   78:         ///
   79:         /// </summary>
   80:         private static void OltSelectList(ref Ia.Ftn.Wa.Models.Administration.SdcViewModel sdcViewModel)
   81:         {
   82:             List<Olt> list2;
   83:  
   84:             list2 = new List<Olt>();
   85:  
   86:             var list = (from o in Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OltList
   87:                         where o.Odf != null && o.Odf.Vendor == Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Vendor.Nokia
   88:                         select o).ToList();
   89:  
   90:             foreach (var o in list) list2.Add(new Olt() { Text = o.Symbol + " (" + o.AmsName + ")", Value = o.Id });
   91:  
   92:  
   93:             list2 = list2.OrderBy(u => u.Text).ToList();
   94:  
   95:             if (!string.IsNullOrEmpty(sdcViewModel.OltSelectedValue))
   96:             {
   97:                 sdcViewModel.OltSelectList = new SelectList(list2, "Value", "Text", sdcViewModel.OltSelectedValue);
   98:             }
   99:             else
  100:             {
  101:                 sdcViewModel.OltSelectList = new SelectList(list2, "Value", "Text", list[0].Id.ToString());
  102:                 sdcViewModel.OltSelectedValue = list2[0].Value.ToString();
  103:             }
  104:  
  105:             OltSelectList_SelectedIndexChanged(ref sdcViewModel);
  106:         }
  107:  
  108:         ////////////////////////////////////////////////////////////////////////////
  109:  
  110:         /// <summary>
  111:         ///
  112:         /// </summary>
  113:         private static void OltSelectList_SelectedIndexChanged(ref Ia.Ftn.Wa.Models.Administration.SdcViewModel sdcViewModel)
  114:         {
  115:             int oltId;
  116:  
  117:             if (sdcViewModel.OltSelectList.Count() > 0 && !string.IsNullOrEmpty(sdcViewModel.OltSelectedValue))
  118:             {
  119:                 oltId = int.Parse(sdcViewModel.OltSelectedValue);
  120:  
  121:                 PonSelectList_Data(ref sdcViewModel, oltId);
  122:  
  123:                 DisplayStatisticButton_Click(ref sdcViewModel);
  124:             }
  125:             else
  126:             {
  127:             }
  128:         }
  129:  
  130:         ////////////////////////////////////////////////////////////////////////////
  131:  
  132:         /// <summary>
  133:         ///
  134:         /// </summary>
  135:         private static void PonSelectList_Data(ref Ia.Ftn.Wa.Models.Administration.SdcViewModel sdcViewModel, int oltId)
  136:         {
  137:             List<Pon> list2;
  138:  
  139:             list2 = new List<Pon>();
  140:  
  141:             var list = (from p in Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.PonList
  142:                         where p.PonGroup.Olt.Id == oltId
  143:                         select p).ToList();
  144:  
  145:             foreach (var p in list) list2.Add(new Pon() { Text = p.Name, Value = p.Id });
  146:  
  147:             if (!string.IsNullOrEmpty(sdcViewModel.PonSelectedValue))
  148:             {
  149:                 sdcViewModel.PonSelectList = new SelectList(list2, "Value", "Text", sdcViewModel.OltSelectedValue);
  150:             }
  151:             else
  152:             {
  153:                 sdcViewModel.PonSelectList = new SelectList(list2, "Value", "Text", list[0].Id.ToString());
  154:                 sdcViewModel.PonSelectedValue = list2[0].Value.ToString();
  155:             }
  156:  
  157:             PonSelectList_SelectedIndexChanged(ref sdcViewModel);
  158:         }
  159:  
  160:         ////////////////////////////////////////////////////////////////////////////
  161:  
  162:         /// <summary>
  163:         ///
  164:         /// </summary>
  165:         private static void PonSelectList_SelectedIndexChanged(ref Ia.Ftn.Wa.Models.Administration.SdcViewModel sdcViewModel)
  166:         {
  167:             DisplayStatisticButton_Click(ref sdcViewModel);
  168:         }
  169:  
  170:         ////////////////////////////////////////////////////////////////////////////
  171:         ////////////////////////////////////////////////////////////////////////////
  172:  
  173:         /// <summary>
  174:         ///
  175:         /// </summary>
  176:         private static void DisplayStatisticButton_Click(ref Ia.Ftn.Wa.Models.Administration.SdcViewModel sdcViewModel)
  177:         {
  178:             int oltId;
  179:             string ponId;
  180:             Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Pon pon;
  181:  
  182:             var result = new Ia.Cl.Models.Result();
  183:  
  184:             sdcViewModel.Result = new Ia.Cl.Models.Result();
  185:  
  186:             if (sdcViewModel.OltSelectList.Count() > 0 && !string.IsNullOrEmpty(sdcViewModel.OltSelectedValue))
  187:             {
  188:                 oltId = int.Parse(sdcViewModel.OltSelectedValue);
  189:  
  190:                 if (sdcViewModel.PonSelectList.Count() > 0 && !string.IsNullOrEmpty(sdcViewModel.PonSelectedValue))
  191:                 {
  192:                     ponId = sdcViewModel.PonSelectedValue;
  193:  
  194:                     pon = (from p in Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.PonList
  195:                            where p.Id == ponId
  196:                            select p).SingleOrDefault();
  197:  
  198:                     if (pon != null)
  199:                     {
  200:                         result = DisplaySelectedPonStatistics(ref sdcViewModel, pon);
  201:  
  202:                         if (result.IsSuccessful) sdcViewModel.Result.AddSuccess("Display PON Statistics: " + result.Message);
  203:                         else sdcViewModel.Result.AddError("Display PON Statistics: " + result.Message);
  204:                     }
  205:                     else
  206:                     {
  207:                         sdcViewModel.Result.AddError("PON is null.");
  208:                     }
  209:                 }
  210:                 else
  211:                 {
  212:                     sdcViewModel.Result.AddError("PON is undefined.");
  213:                 }
  214:             }
  215:             else
  216:             {
  217:                 sdcViewModel.Result.AddError("OLT is undefined.");
  218:             }
  219:         }
  220:  
  221:         ////////////////////////////////////////////////////////////////////////////
  222:  
  223:         /// <summary>
  224:         ///
  225:         /// </summary>
  226:         private static Ia.Cl.Models.Result DisplaySelectedPonStatistics(ref Ia.Ftn.Wa.Models.Administration.SdcViewModel sdcViewModel, Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Pon pon)
  227:         {
  228:             var result = new Ia.Cl.Models.Result();
  229:  
  230:             var receiveTransactionTimestampValueList = Ia.Ftn.Cl.Models.Data.Nokia.Sdc.ReadTransactionTimestampHourlyValueListOfPon(Ia.Ftn.Cl.Models.Business.Nokia.Sdc.Transaction.Receive, pon);
  231:             var transmitTransactionTimestampValueList = Ia.Ftn.Cl.Models.Data.Nokia.Sdc.ReadTransactionTimestampHourlyValueListOfPon(Ia.Ftn.Cl.Models.Business.Nokia.Sdc.Transaction.Transmit, pon);
  232:  
  233:             // 12 to account for five minute readings
  234:             sdcViewModel.CountText = "Total number of readings: Receive: " + receiveTransactionTimestampValueList.Count * 12 + ", Transmit: " + transmitTransactionTimestampValueList.Count * 12;
  235:  
  236:             ChartDataBind(ref sdcViewModel, receiveTransactionTimestampValueList, transmitTransactionTimestampValueList);
  237:  
  238:             return result;
  239:         }
  240:  
  241:         ////////////////////////////////////////////////////////////////////////////
  242:  
  243:         /// <summary>
  244:         ///
  245:         /// </summary>
  246:         private static void ChartDataBind(ref Ia.Ftn.Wa.Models.Administration.SdcViewModel sdcViewModel, List<Ia.Ftn.Cl.Models.Business.Nokia.Sdc.TransactionTimestampValue> receiveTimestampValueList, List<Ia.Ftn.Cl.Models.Business.Nokia.Sdc.TransactionTimestampValue> transmitTimestampValueList)
  247:         {
  248:             sdcViewModel.Chart = new Ia.Cl.Models.Ui.Chart();
  249:  
  250:             sdcViewModel.Chart.Id = "chart";
  251:  
  252:             sdcViewModel.Chart.Labels = (from t in receiveTimestampValueList select t.Timestamp.ToString("yyyy-MM-dd HH:mm")).ToList();
  253:  
  254:             sdcViewModel.Chart.Label1 = "Timestamp vs Received Data Rate (Mb/s)";
  255:             sdcViewModel.Chart.Data1 = (from t in receiveTimestampValueList select (int)(t.Value)).ToList();
  256:  
  257:             sdcViewModel.Chart.Label2 = "Timestamp vs Transmitted Data Rate (Mb/s)";
  258:             sdcViewModel.Chart.Data2 = (from t in transmitTimestampValueList select (int)(t.Value)).ToList();
  259:  
  260:             sdcViewModel.Chart.Type = "stackedBar";
  261:             sdcViewModel.Chart.Width = 1200;
  262:             sdcViewModel.Chart.Height = 300;
  263:  
  264:             sdcViewModel.Chart.DataBind();
  265:         }
  266:  
  267:         ////////////////////////////////////////////////////////////////////////////
  268:         ////////////////////////////////////////////////////////////////////////////
  269:  
  270:  
  271:  
  272:  
  273:  
  274:  
  275:  
  276:  
  277:  
  278:  
  279:  
  280:         ////////////////////////////////////////////////////////////////////////////
  281:         ////////////////////////////////////////////////////////////////////////////
  282:  
  283:         /// <summary>
  284:         ///
  285:         /// </summary>
  286:         private static void PonBandwidthChartDataBind(ref Ia.Ftn.Wa.Models.Administration.SdcViewModel sdcViewModel)
  287:         {
  288:             var dateTime = DateTime.UtcNow.AddHours(3).AddDays(-PastDays);
  289:  
  290:             var ponNameToTransactionTimestampValueListDictionary = Ia.Ftn.Cl.Models.Data.Nokia.Sdc.PonNameToTransactionTimestampValueHourlyListDictionary();
  291:  
  292:             var list0 = (from p in ponNameToTransactionTimestampValueListDictionary
  293:                          where p.Value.Any(u => u.Timestamp >= dateTime)
  294:                          select p).ToList();
  295:  
  296:             var list1 = new List<PonNameReceiveTransmitValue>();
  297:  
  298:             foreach (var kvp in list0)
  299:             {
  300:                 list1.Add(new PonNameReceiveTransmitValue()
  301:                 {
  302:                     Name = kvp.Key,
  303:                     Value = kvp.Value.Sum(u => u.Value),
  304:                     ReceiveValue = kvp.Value.Where(u => u.Transaction == Ia.Ftn.Cl.Models.Business.Nokia.Sdc.Transaction.Receive).Sum(u => u.Value),
  305:                     TransmitValue = kvp.Value.Where(u => u.Transaction == Ia.Ftn.Cl.Models.Business.Nokia.Sdc.Transaction.Transmit).Sum(u => u.Value),
  306:                 });
  307:             }
  308:  
  309:             var list2 = (from l in list1 select l).OrderByDescending(u => u.Value).Take(70).ToList();
  310:  
  311:  
  312:             sdcViewModel.Chart = new Ia.Cl.Models.Ui.Chart();
  313:  
  314:             sdcViewModel.Chart.Id = "char";
  315:  
  316:             sdcViewModel.Chart.Labels = (from l in list2 select l.Name).ToList();
  317:  
  318:             sdcViewModel.Chart.Label1 = "PON vs Received Data Rate (Mb/s)";
  319:             sdcViewModel.Chart.Data1 = (from l in list2 select (int)(Ia.Ftn.Cl.Models.Business.Nokia.Sdc.ConvertHourlyByteCountToMegaBitsPerSecond(l.ReceiveValue))).ToList();
  320:  
  321:             sdcViewModel.Chart.Label2 = "PON vs Transmitted Data Rate (Mb/s)";
  322:             sdcViewModel.Chart.Data2 = (from l in list2 select (int)(Ia.Ftn.Cl.Models.Business.Nokia.Sdc.ConvertHourlyByteCountToMegaBitsPerSecond(l.TransmitValue))).ToList();
  323:  
  324:             sdcViewModel.Chart.Type = "stackedBar";
  325:             sdcViewModel.Chart.Width = 1200;
  326:             sdcViewModel.Chart.Height = 300;
  327:  
  328:             sdcViewModel.Chart.DataBind();
  329:         }
  330:  
  331:         ////////////////////////////////////////////////////////////////////////////
  332:         ////////////////////////////////////////////////////////////////////////////
  333:     }
  334:  
  335:     ////////////////////////////////////////////////////////////////////////////
  336:     ////////////////////////////////////////////////////////////////////////////
  337: }