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

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

Nokia AMS Event support class for Fixed Telecommunications Network (FTN) data model.

    1: using Microsoft.AspNetCore.Mvc;
    2: using Microsoft.EntityFrameworkCore;
    3: using System;
    4: using System.Collections.Generic;
    5: using System.Data;
    6: using System.IO;
    7: using System.Linq;
    8: using System.Reflection;
    9: using System.Text;
   10: using System.Xml.Linq;
   11:  
   12: namespace Ia.Ftn.Cl.Models.Data
   13: {
   14:     ////////////////////////////////////////////////////////////////////////////
   15:  
   16:     /// <summary publish="true">
   17:     /// Nokia AMS Event support class for Fixed Telecommunications Network (FTN) data model.
   18:     /// </summary>
   19:     /// 
   20:     /// <remarks> 
   21:     /// Copyright © 2006-2021 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
   22:     /// </remarks> 
   23:     public class Event
   24:     {
   25:         private static long startEventId;
   26:         private static XDocument xDocument;
   27:         private static readonly object objectLock = new object();
   28:  
   29:         ////////////////////////////////////////////////////////////////////////////
   30:  
   31:         /// <summary>
   32:         ///
   33:         /// </summary>
   34:         public enum Priority
   35:         {
   36:             /// <summary/>
   37:             Urgent = 1,
   38:  
   39:             /// <summary/>
   40:             Important,
   41:  
   42:             /// <summary/>
   43:             Regular,
   44:  
   45:             /// <summary/>
   46:             Unspecified
   47:         }
   48:  
   49:         ////////////////////////////////////////////////////////////////////////////
   50:  
   51:         /// <summary>
   52:         ///
   53:         /// </summary>
   54:         public struct Severity
   55:         {
   56:             /// <summary/>
   57:             public Severity(string id, string name)
   58:             {
   59:                 this.Id = id;
   60:                 this.Name = name;
   61:             }
   62:  
   63:             /// <summary/>
   64:             public string Id { get; set; }
   65:  
   66:             /// <summary/>
   67:             public string Name { get; set; }
   68:         }
   69:  
   70:         ////////////////////////////////////////////////////////////////////////////
   71:  
   72:         /// <summary>
   73:         ///
   74:         /// </summary>
   75:         public struct ServiceEffect
   76:         {
   77:             /// <summary/>
   78:             public ServiceEffect(string id, string name)
   79:             {
   80:                 this.Id = id;
   81:                 this.Name = name;
   82:             }
   83:  
   84:             /// <summary/>
   85:             public string Id { get; set; }
   86:  
   87:             /// <summary/>
   88:             public string Name { get; set; }
   89:         }
   90:  
   91:         ////////////////////////////////////////////////////////////////////////////
   92:  
   93:         /// <summary>
   94:         ///
   95:         /// </summary>
   96:         public struct Alarm
   97:         {
   98:             /// <summary/>
   99:             public string Id { get; set; }
  100:  
  101:             /// <summary/>
  102:             public string Name { get; set; }
  103:  
  104:             /// <summary/>
  105:             public Severity Severity { get; set; }
  106:  
  107:             /// <summary/>
  108:             public ServiceEffect ServiceEffect { get; set; }
  109:  
  110:             /// <summary/>
  111:             public bool SaveMessage { get; set; }
  112:  
  113:             /// <summary/>
  114:             public string Condition { get; set; }
  115:  
  116:             /// <summary/>
  117:             public string Resolution { get; set; }
  118:         }
  119:  
  120:         ////////////////////////////////////////////////////////////////////////////
  121:  
  122:         /// <summary>
  123:         ///
  124:         /// </summary>
  125:         public Event() { }
  126:  
  127:         ////////////////////////////////////////////////////////////////////////////
  128:  
  129:         /// <summary>
  130:         /// This defines a starting point of event id for searching
  131:         /// </summary>
  132:         public static long StartEventId
  133:         {
  134:             get
  135:             {
  136:                 lock (objectLock)
  137:                 {
  138:                     if (startEventId == 0) startEventId = Ia.Ftn.Cl.Models.Data.Event._StartEventId;
  139:  
  140:                     return startEventId;
  141:                 }
  142:             }
  143:         }
  144:  
  145:         ////////////////////////////////////////////////////////////////////////////
  146:  
  147:         /// <summary>
  148:         /// This defines a starting point of event id for searching
  149:         /// </summary>
  150:         private static long _StartEventId
  151:         {
  152:             get
  153:             {
  154:                 //if (HttpContext.Current != null && HttpContext.Current.Application["eventStartEventId"] != null)
  155:                 if (Ia.Cl.Models.Cache.Instance.TryGetValue("eventStartEventId", out startEventId))
  156:                 {
  157:                 }
  158:                 else
  159:                 {
  160:                     lock (objectLock)
  161:                     {
  162:                         startEventId = StartIdFromEventTime(DateTime.UtcNow.AddHours(3).AddDays(-30));
  163:  
  164:                         //if (HttpContext.Current != null) HttpContext.Current.Application["eventStartEventId"] = startEventId.ToString();
  165:                         Ia.Cl.Models.Cache.Instance.Set("eventStartEventId", startEventId);
  166:                     }
  167:                 }
  168:  
  169:                 return startEventId;
  170:             }
  171:         }
  172:  
  173:         ////////////////////////////////////////////////////////////////////////////
  174:  
  175:         /// <summary>
  176:         ///
  177:         /// </summary>
  178:         private static long StartIdFromEventTime(DateTime startEventTime)
  179:         {
  180:             long id;
  181:  
  182:             using (var db = new Ia.Ftn.Cl.Db())
  183:             {
  184:                 id = (from e in db.Events
  185:                       where e.EventTime >= startEventTime
  186:                       select e.Id).Min();
  187:             }
  188:  
  189:             return id;
  190:         }
  191:  
  192:         ////////////////////////////////////////////////////////////////////////////
  193:  
  194:         /// <summary>
  195:         ///
  196:         /// </summary>
  197:         public static List<Ia.Ftn.Cl.Models.Event> ReadList()
  198:         {
  199:             List<Ia.Ftn.Cl.Models.Event> list;
  200:  
  201:             using (var db = new Ia.Ftn.Cl.Db())
  202:             {
  203:                 list = (from e in db.Events select e).AsNoTracking().ToList();
  204:             }
  205:  
  206:             return list;
  207:         }
  208:  
  209:         ////////////////////////////////////////////////////////////////////////////
  210:  
  211:         /// <summary>
  212:         ///
  213:         /// </summary>
  214:         public static List<Ia.Ftn.Cl.Models.Event> ReadTakeNOrderByIdDescendingListFromNddOntId(string nddOntId, string classId, string severityId, string serviceEffectId, string causeId, int elementsToTake)
  215:         {
  216:             List<Ia.Ftn.Cl.Models.Event> list;
  217:  
  218:             using (var db = new Ia.Ftn.Cl.Db())
  219:             {
  220:                 if (!string.IsNullOrEmpty(nddOntId))
  221:                 {
  222:                     list = (from e in db.Events
  223:                             where e.Ont != null && nddOntId == e.Ont.Id
  224:                             && (classId == string.Empty || e.Class == classId)
  225:                             && (severityId == string.Empty || e.Severity == severityId)
  226:                             && (serviceEffectId == string.Empty || e.SeverityEffect == serviceEffectId)
  227:                             && (causeId == string.Empty || e.Cause == causeId)
  228:                             orderby e.Id descending
  229:                             select e).Include(u => u.Ont).AsNoTracking().Take(elementsToTake).ToList();
  230:                 }
  231:                 else
  232:                 {
  233:                     list = (from e in db.Events
  234:                             where (classId == string.Empty || e.Class == classId)
  235:                             && (severityId == string.Empty || e.Severity == severityId)
  236:                             && (serviceEffectId == string.Empty || e.SeverityEffect == serviceEffectId)
  237:                             && (causeId == string.Empty || e.Cause == causeId)
  238:                             orderby e.Id descending
  239:                             select e).Include(u => u.Ont).AsNoTracking().Take(elementsToTake).ToList();
  240:                 }
  241:             }
  242:  
  243:             return list;
  244:         }
  245:  
  246:         ////////////////////////////////////////////////////////////////////////////
  247:  
  248:         /// <summary>
  249:         ///
  250:         /// </summary>
  251:         public static List<Ia.Ftn.Cl.Models.Event> ReadTakeNOrderByEventTimeDescendingList(int elementsToTake)
  252:         {
  253:             List<Ia.Ftn.Cl.Models.Event> list;
  254:  
  255:             using (var db = new Ia.Ftn.Cl.Db())
  256:             {
  257:                 list = (from e in db.Events
  258:                         orderby e.EventTime descending
  259:                         select e).AsNoTracking().Take(elementsToTake).ToList();
  260:             }
  261:  
  262:             return list;
  263:         }
  264:  
  265:         ////////////////////////////////////////////////////////////////////////////
  266:  
  267:         /// <summary>
  268:         ///
  269:         /// </summary>
  270:         public static List<Ia.Ftn.Cl.Models.Event> EventWithMjOrCrSeverityAndClassNotOntRelatedForLast24HoursList()
  271:         {
  272:             DateTime twentyFourHoursAgoDateTime;
  273:             List<Ia.Ftn.Cl.Models.Event> list;
  274:  
  275:             twentyFourHoursAgoDateTime = DateTime.UtcNow.AddHours(3).AddDays(-1);
  276:  
  277:             using (var db = new Ia.Ftn.Cl.Db())
  278:             {
  279:                 list = (from e in db.Events
  280:                         where (e.Severity == "MJ" || e.Severity == "CR") && e.Class.Substring(0, 3) != "ONT" && e.Created >= twentyFourHoursAgoDateTime
  281:                         orderby e.Created descending
  282:                         select e).AsNoTracking().ToList();
  283:             }
  284:  
  285:             return list;
  286:         }
  287:  
  288:         ////////////////////////////////////////////////////////////////////////////
  289:  
  290:         /// <summary>
  291:         ///
  292:         /// </summary>
  293:         public static List<Ia.Ftn.Cl.Models.Event> EventWithClassOntAndCauseInactAndLastRecordSeverityNotClAndOntAccessNotNullInLast24HoursList()
  294:         {
  295:             DateTime twentyFourHoursAgoDateTime;
  296:             List<Ia.Ftn.Cl.Models.Event> list;
  297:  
  298:             /*
  299: select e.* 
  300: from Events e
  301: inner join 
  302: (
  303: select Ont_Id, max(Created) as MaxDate 
  304: from Events 
  305: where Class = 'ONT' and Cause = 'INACT' and Created > '2020-01-14'
  306: group by Ont_Id
  307: ) e2 on e.Ont_Id = e2.Ont_Id and e.Created = e2.MaxDate
  308: where e.Severity <> 'CL'
  309:              */
  310:  
  311:             twentyFourHoursAgoDateTime = DateTime.UtcNow.AddHours(3).AddDays(-1);
  312:  
  313:             using (var db = new Ia.Ftn.Cl.Db())
  314:             {
  315:                 list = (from e in db.Events
  316:                         where e.Class == "ONT" && e.Cause == "INACT" && e.Ont != null && e.Ont.Access != null && e.Created >= twentyFourHoursAgoDateTime
  317:                         group e by e.Ont.Id into eg
  318:                         select eg.OrderByDescending(t => t.Created).FirstOrDefault()).Include(u => u.Ont).ThenInclude(u => u.Access).AsNoTracking().ToList();
  319:  
  320:                 list = (from e in list where e.Severity != "CL" select e).ToList();
  321:             }
  322:  
  323:             return list;
  324:         }
  325:  
  326:         ////////////////////////////////////////////////////////////////////////////
  327:  
  328:         /// <summary>
  329:         /// 
  330:         /// </summary>
  331:         public static List<long> EventIdTakeNOrderByIdDescendingListFromNddOntId(string nddOntId, int take)
  332:         {
  333:             List<long> list;
  334:  
  335:             using (var db = new Ia.Ftn.Cl.Db())
  336:             {
  337:                 if (!string.IsNullOrEmpty(nddOntId))
  338:                 {
  339:                     //foreach (var v in nddOntList)
  340:                     //{
  341:                     //eventSystemList.Add(v.Pon.PonGroup.Olt.AmsName);
  342:                     //eventAidOntList.Add("ONT-1-1-" + v.Card + "-" + v.Port + "-" + v.Number);
  343:                     //eventAidOntVoipList.Add("ONTVOIP-1-1-" + v.Card + "-" + v.Port + "-1");
  344:  
  345:                     //foreach (var w in ontOntPotsList) eventAidOntPotsList.Add("ONTPOTS-1-1-" + v.Card + "-" + v.Port + "-" + w.Card + "-" + w.Port);
  346:                     //}
  347:  
  348:                     //eventSystemList = eventSystemList.Distinct().ToList();
  349:                     //eventAidOntList = eventAidOntList.Distinct().ToList();
  350:                     //eventAidOntVoipList = eventAidOntVoipList.Distinct().ToList();
  351:  
  352:                     /*
  353:                     eventList = (from e in db.Events where eventSystemList.Contains(e.System) where eventAidOntList.Contains(e.Aid) select e)
  354:                                 .Union(from e in db.Events where eventSystemList.Contains(e.System) where eventAidOntList.Contains(e.Aid) where eventAidOntVoipList.Contains(e.Aid) select e)
  355:                                 .Union(from e in db.Events where eventSystemList.Contains(e.System) where eventAidOntList.Contains(e.Aid) where eventAidOntPotsList.Contains(e.Aid) select e)
  356:                                 .ToList();
  357:                                 */
  358:  
  359:  
  360:                     list = (from e in db.Events
  361:                             where e.Ont != null && nddOntId == e.Ont.Id
  362:                             //orderby e.Created descending
  363:                             orderby e.Id descending
  364:                             select e.Id).Take(take).ToList();
  365:                 }
  366:                 else list = new List<long>();
  367:             }
  368:  
  369:             return list.Distinct().ToList();
  370:         }
  371:  
  372:         ////////////////////////////////////////////////////////////////////////////
  373:  
  374:         /// <summary>
  375:         ///
  376:         /// </summary>
  377:         private static long MaxEventId
  378:         {
  379:             get
  380:             {
  381:                 long maxId;
  382:  
  383:                 using (var db = new Ia.Ftn.Cl.Db())
  384:                 {
  385:                     maxId = db.Events.Max(u => u.Id);
  386:                 }
  387:  
  388:                 return maxId;
  389:             }
  390:         }
  391:  
  392:         ////////////////////////////////////////////////////////////////////////////
  393:         ////////////////////////////////////////////////////////////////////////////
  394:  
  395:         /// <summary>
  396:         ///
  397:         /// </summary>
  398:         public static List<Ia.Ftn.Cl.Models.Event> ReadNewOntList2()
  399:         {
  400:             List<Ia.Ftn.Cl.Models.Event> list;
  401:  
  402:             using (var db = new Ia.Ftn.Cl.Db())
  403:             {
  404:                 list = (from e in db.Events
  405:                         where e.Cause == "NEWONT"
  406:                         select e).AsNoTracking().ToList();
  407:             }
  408:  
  409:             return list;
  410:         }
  411:  
  412:         ////////////////////////////////////////////////////////////////////////////
  413:  
  414:         /// <summary>
  415:         ///
  416:         /// </summary>
  417:         public static List<Ia.Ftn.Cl.Models.Event> NewOntList
  418:         {
  419:             get
  420:             {
  421:                 //string serial, ontSerial, ontId, accessName;
  422:                 List<Ia.Ftn.Cl.Models.Event> list;
  423:  
  424:                 /*
  425:     use Ia_Ftn
  426:     --select distinct System,Class, Aid, Detail from Events where Id > 18900000 and Cause = 'NEWONT'
  427:     --select *from Events where Id > 18000000 and Cause = 'NEWONT' order by Id
  428:     --select max(id) from Events
  429:     -- 1M events is about 3 weeks
  430:     --select * from Events where Id > (select max(id) - 1000000 from Events) and Cause = 'NEWONT' order by Id
  431:     select distinct System, Aid, Cause, Detail from Events where Id > (select max(id) - 1000000 from Events) and Cause = 'NEWONT'
  432: 
  433:      delete from Events where Id < 45564063
  434: 
  435:                 delete events using SQL before one month from today
  436:      */
  437:  
  438:                 var serialList = new List<string>();
  439:                 var ontIdList = new List<string>();
  440:  
  441:                 //var di = Ia.Ftn.Cl.Model.Data.NetworkDesignDocument.OntAccessIdToOntAccessNameDictionary;
  442:  
  443:                 using (var db = new Ia.Ftn.Cl.Db())
  444:                 {
  445:                     list = (from e in db.Events
  446:                             where e.Cause == "NEWONT" && e.Severity == "MN"
  447:                             orderby e.Id descending
  448:                             select e).Include(u => u.Ont).AsNoTracking().ToList();
  449:                     /*
  450:                     if (list != null && list.Count > 0)
  451:                     {
  452:                         var serialToIdListDictionary = Ia.Ftn.Cl.Model.Data.Nokia.Ont.SerialToIdListDictionary;
  453: 
  454:                         foreach (Ia.Ftn.Cl.Model.Event e in list.OrderByDescending(u => u.Id))
  455:                         {
  456:                             if (!string.IsNullOrEmpty(e.Detail))
  457:                             {
  458:                                 serial = Ia.Cl.Models.Default.Match(e.Detail, "(ALCL.{8})");
  459: 
  460:                                 if (!string.IsNullOrEmpty(serial))
  461:                                 {
  462:                                     if (!serialList.Contains(serial))
  463:                                     {
  464:                                         if (serialToIdListDictionary.ContainsKey(serial))
  465:                                         {
  466:                                             ontId = serialToIdListDictionary[serial];
  467:                                             ontSerial = serial;
  468: 
  469:                                             accessName = di[ontId];
  470:                                         }
  471:                                         else
  472:                                         {
  473:                                             ontId = ontSerial = accessName = string.Empty;
  474:                                         }
  475: 
  476:                                         eventOnt = new Ia.Ftn.Cl.Model.Ui.Event
  477:                                         {
  478:                                             Id = e.Id,
  479:                                             TypeId = e.TypeId,
  480:                                             System = e.System,
  481:                                             Class = e.Class,
  482:                                             Aid = e.Aid,
  483:                                             Cause = e.Cause,
  484:                                             Number = e.Number,
  485:                                             Detail = e.Detail,
  486:                                             Severity = e.Severity,
  487:                                             SeverityEffect = e.SeverityEffect,
  488:                                             EventTime = e.EventTime,
  489:                                             NodeTime = e.NodeTime,
  490:                                             Created = e.Created,
  491:                                             OntId = ontId,
  492:                                             Serial = ontSerial,
  493:                                             AccessName = accessName,
  494:                                         };
  495: 
  496:                                         uiList.Add(eventOnt);
  497: 
  498:                                         serialList.Add(serial);
  499:                                     }
  500:                                     else
  501:                                     {
  502: 
  503:                                     }
  504:                                 }
  505:                             }
  506:                         }
  507:                     }
  508:                     else
  509:                     {
  510: 
  511:                     }
  512:                     */
  513:                 }
  514:  
  515:                 /*
  516:                     string s, sql;
  517:                     StringBuilder sb;
  518:                     Hashtable ht, a_ht;
  519:                     DataTable dt, a_dt;
  520: 
  521:                     sb = new StringBuilder(1000);
  522:                     ht = new Hashtable(1000);
  523:                     a_ht = new Hashtable(1000);
  524: 
  525:                     sql = @"SELECT e.id, '' AS last_event, f.area, f.pon, f.ont, f.olt, f.olt_card, f.olt_port, e.system_id, e.aid, f.ont_serial, e.detail, f.area AS f_area, f.block, f.street, 
  526:                                      f.premises_old, f.premises_new, e.node_time, e.event_time, e.created
  527:             FROM            ia_event AS e LEFT OUTER JOIN
  528:                                      ia_field AS f ON e.detail LIKE '%' + f.ont_serial + '%'
  529:             WHERE        (e.cause = 'NEWONT') AND (e.id =
  530:                                          (SELECT        MAX(id) AS max_id
  531:                                            FROM            ia_event AS e2
  532:                                            WHERE        (cause = 'NEWONT') AND (system_id = e.system_id) AND (aid = e.aid) AND (detail = e.detail))) AND (e.severity <> 'CL')
  533:             ORDER BY e.created DESC";
  534: 
  535:                     dt = null; // main.Data.Select(sql);
  536: 
  537:                     if (dt != null && dt.Rows.Count > 1)
  538:                     {
  539:                         // below: now collect all valid ont_position entries and get the last event for them
  540:                         ///gh3
  541:                         sql = string.Empty;
  542: 
  543:                         foreach (DataRow r in dt.Rows)
  544:                         {
  545:                             if (r["ont"] != null && r["ont"].ToString().Length > 0)
  546:                             {
  547:                                 s = r["system_id"].ToString() + ":" + r["aid"].ToString().Replace("PON", "ONT") + "-" + r["ont"].ToString();
  548:                                 ht[s] = r["id"].ToString();
  549:                                 sb.Append("e.system_id='" + r["system_id"].ToString() + "' AND " + "e.aid='" + r["aid"].ToString().Replace("PON", "ONT") + "-" + r["ont"].ToString() + "' OR ");
  550:                             }
  551:                         }
  552: 
  553:                         sql = sb.ToString();
  554: 
  555:                         if (sql.Length > 0)
  556:                         {
  557:                             sql = sql.Remove(sql.Length - 4, 4);
  558: 
  559:                             a_dt = null; // main.Data.Select(@"SELECT system_id, aid, cause, severity FROM ia_event AS e WHERE (" + sql + @") AND (id = (SELECT MAX(id) AS max_id FROM ia_event AS e2 WHERE (system_id = e.system_id) AND (aid = e.aid)))");
  560: 
  561:                             // below: now loop through table and collect cause + severity
  562:                             foreach (DataRow r in a_dt.Rows)
  563:                             {
  564:                                 s = r["system_id"].ToString() + ":" + r["aid"].ToString();
  565:                                 a_ht[ht[s].ToString()] = r["cause"].ToString() + ":" + r["severity"].ToString();
  566:                             }
  567: 
  568:                             // below: now loop through original table and insert last_event
  569: 
  570:                             foreach (DataRow r in dt.Rows)
  571:                             {
  572:                                 s = r["id"].ToString();
  573:                                 if (a_ht.ContainsKey(s)) r["last_event"] = a_ht[s].ToString();
  574:                             }
  575: 
  576:                             gv.DataSource = dt.DefaultView;
  577:                             gv.DataBind();
  578:                         }
  579:                     }
  580:                 }
  581:                      */
  582:  
  583:                 return list;
  584:             }
  585:         }
  586:  
  587:         ////////////////////////////////////////////////////////////////////////////
  588:  
  589:         /// <summary>
  590:         ///
  591:         /// </summary>
  592:         public static void DeleteAllEventsBeforeDateTime(DateTime dateTime)
  593:         {
  594:             // see comment on ftn/maitenance/log/event/ams.aspx
  595:  
  596:             using (var db = new Ia.Ftn.Cl.Db())
  597:             {
  598:                 if (dateTime > DateTime.MinValue)
  599:                 {
  600:                     db.Database.ExecuteSqlRaw("delete Events where Created < '" + dateTime.ToString("yyyy-MM-dd") + "'");
  601:  
  602:                     /*
  603: --select top 100 from events where Created 
  604: 
  605: delete Events where Created < '2018-11-01'
  606: 
  607: --delete Events where id < (select (max(id) - min(id))/2 + min(id) from Events) 
  608: --select max(id), min(id),(max(id) - min(id)),(max(id) - min(id))/2 + min(id) from Events
  609: */
  610:                 }
  611:             }
  612:         }
  613:  
  614:         ////////////////////////////////////////////////////////////////////////////
  615:  
  616:         /// <summary>
  617:         ///
  618:         /// </summary>
  619:         public static bool DeleteByAccessId(string accessId, out string result)
  620:         {
  621:             bool b;
  622:  
  623:             b = false;
  624:             result = string.Empty;
  625:  
  626:             using (var db = new Ia.Ftn.Cl.Db())
  627:             {
  628:                 //--delete from Events where Ont_Id = (select id from Onts where Access_Id = '1040101010040004')
  629:  
  630:                 var v = (from e in db.Events
  631:                          join o in db.Onts on e.Ont.Id equals o.Id
  632:                          where o.Access.Id == accessId
  633:                          select e).FirstOrDefault();
  634:  
  635:                 if (v != null)
  636:                 {
  637:                     db.Events.Remove(v);
  638:                     db.SaveChanges();
  639:  
  640:                     b = true;
  641:                 }
  642:                 else b = false;
  643:             }
  644:  
  645:             return b;
  646:         }
  647:  
  648:         ////////////////////////////////////////////////////////////////////////////
  649:  
  650:         /// <summary>
  651:         ///
  652:         /// </summary>
  653:         public static List<Severity> SeverityList
  654:         {
  655:             get
  656:             {
  657:                 List<Severity> severityList;
  658:  
  659:                 severityList = new List<Severity>();
  660:  
  661:                 severityList.Add(new Severity("CR", "Critical"));
  662:                 severityList.Add(new Severity("MJ", "Major"));
  663:                 severityList.Add(new Severity("MN", "Minor"));
  664:                 severityList.Add(new Severity("NR", "Normal/not reported"));
  665:                 severityList.Add(new Severity("NA", "Not alarmed"));
  666:                 severityList.Add(new Severity("ND", "Not yet determained"));
  667:                 severityList.Add(new Severity("WA", "Warning"));
  668:                 severityList.Add(new Severity("CL", "Clear"));
  669:  
  670:                 return severityList;
  671:             }
  672:         }
  673:  
  674:         ////////////////////////////////////////////////////////////////////////////
  675:  
  676:         /// <summary>
  677:         ///
  678:         /// </summary>
  679:         public static List<ServiceEffect> ServiceEffectList
  680:         {
  681:             get
  682:             {
  683:                 List<ServiceEffect> serviceEffectList;
  684:  
  685:                 serviceEffectList = new List<ServiceEffect>();
  686:  
  687:                 serviceEffectList.Add(new ServiceEffect("SA", "Service Affecting"));
  688:                 serviceEffectList.Add(new ServiceEffect("NSA", "Not Service Affecting"));
  689:                 serviceEffectList.Add(new ServiceEffect("NR", "Not Reported"));
  690:  
  691:                 return serviceEffectList;
  692:             }
  693:         }
  694:  
  695:         ////////////////////////////////////////////////////////////////////////////
  696:  
  697:         /// <summary>
  698:         ///
  699:         /// </summary>
  700:         public static List<string> ClassList
  701:         {
  702:             get
  703:             {
  704:                 List<string> list;
  705:  
  706:                 list = new List<string>();
  707:  
  708:                 list.Add("BRGPORT");
  709:                 list.Add("PON");
  710:                 list.Add("EQPT");
  711:                 list.Add("ONTPOTS");
  712:                 list.Add("ONTVOIP");
  713:                 list.Add("ONT");
  714:                 list.Add("ONTENET");
  715:                 list.Add("ONTCARD");
  716:                 list.Add("ONTHSI");
  717:                 list.Add("SECACCESS");
  718:  
  719:                 list.Sort();
  720:  
  721:                 return list;
  722:             }
  723:         }
  724:  
  725:         ////////////////////////////////////////////////////////////////////////////
  726:  
  727:         /// <summary>
  728:         ///
  729:         /// </summary>
  730:         public static List<string> CauseList
  731:         {
  732:             get
  733:             {
  734:                 List<string> list;
  735:  
  736:                 list = new List<string>();
  737:  
  738:                 list.Add("LIMSVCMIS");
  739:                 list.Add("MEM");
  740:                 list.Add("SECUMGTACCESS");
  741:                 list.Add("EQPT");
  742:                 list.Add("SWRESET");
  743:                 list.Add("SECUMGTACCESSTCA");
  744:                 list.Add("BDRESETCF");
  745:                 list.Add("VICONFIGNOTIFYFAIL");
  746:                 list.Add("TXFAIL");
  747:                 list.Add("PONLOS");
  748:                 list.Add("SWVER");
  749:                 list.Add("NEWONT");
  750:                 list.Add("VICONFIGHTTPFAIL");
  751:                 list.Add("LOAM");
  752:                 list.Add("SHUTDOWN");
  753:                 list.Add("BDMISSING");
  754:                 list.Add("BATTMISS");
  755:                 list.Add("LOA");
  756:                 list.Add("ACFAIL");
  757:                 list.Add("RTCPSTREAMLOSS");
  758:                 list.Add("POTSSVCMIS");
  759:                 list.Add("INACT");
  760:                 list.Add("SWDLIP");
  761:                 list.Add("PONMEA");
  762:                 list.Add("OMCICOMM");
  763:                 list.Add("SWVERCTLERR");
  764:                 list.Add("VNTWKERR");
  765:                 list.Add("BDRESET");
  766:                 list.Add("ONTMEA");
  767:                 list.Add("LOS");
  768:                 list.Add("VOIPCNFG");
  769:                 list.Add("SWACTFAIL");
  770:                 list.Add("VGATEWAYCOMM");
  771:                 list.Add("SD");
  772:                 list.Add("BDINIT");
  773:                 list.Add("INTRUDER");
  774:                 list.Add("FANALM");
  775:                 list.Add("DUPADDR");
  776:                 list.Add("SWDLFILE");
  777:                 list.Add("VCLIENTSVCMIS");
  778:                 list.Add("DG");
  779:                 list.Add("SF");
  780:                 list.Add("SUF");
  781:                 list.Add("BATTFAIL");
  782:                 list.Add("HITEMP");
  783:                 list.Add("LANSVCMIS");
  784:                 list.Add("VICONFIGSUBFAIL");
  785:                 list.Add("SWDLFAIL");
  786:                 list.Add("EXCEPTOVLD");
  787:                 list.Add("HSISVCMIS");
  788:                 list.Add("LOKS");
  789:                 list.Add("PONCOMMFAIL");
  790:                 list.Add("HITEMPSHUTOFF");
  791:                 list.Add("LIMMEA");
  792:                 list.Add("RDI");
  793:                 list.Add("ONTDISABLED");
  794:                 list.Add("BATTLOW");
  795:                 list.Add("DOW");
  796:  
  797:                 list.Sort();
  798:  
  799:                 return list;
  800:             }
  801:         }
  802:  
  803:         ////////////////////////////////////////////////////////////////////////////
  804:  
  805:         /// <summary>
  806:         ///
  807:         /// </summary>
  808:         public static List<Alarm> AlarmList
  809:         {
  810:             get
  811:             {
  812:                 Alarm alarm;
  813:                 List<Alarm> alarmList;
  814:  
  815:                 alarmList = new List<Alarm>();
  816:  
  817:                 foreach (XElement xe in XDocument.Element("event").Element("alarm").Elements("aid").Elements("alarmList").Elements("alarm"))
  818:                 {
  819:                     alarm = new Alarm();
  820:  
  821:                     alarm.Id = xe.Attribute("id").Value;
  822:                     alarm.Name = xe.Attribute("name").Value;
  823:                     alarm.Severity = (from s in SeverityList where s.Id == xe.Attribute("severity").Value select s).Single();
  824:                     alarm.ServiceEffect = (from s in ServiceEffectList where s.Id == xe.Attribute("serviceEffect").Value select s).Single();
  825:                     alarm.SaveMessage = bool.Parse(xe.Attribute("saveMessage").Value);
  826:                     alarm.Condition = xe.Element("condition").Value;
  827:                     alarm.Resolution = xe.Element("resolution").Value;
  828:  
  829:                     alarmList.Add(alarm);
  830:                 }
  831:  
  832:                 return alarmList;
  833:             }
  834:         }
  835:  
  836:         ////////////////////////////////////////////////////////////////////////////
  837:  
  838:         /// <summary>
  839:         ///
  840:         /// </summary>
  841:         public static string ToString(Ia.Ftn.Cl.Models.Event _event)
  842:         {
  843:             StringBuilder sb;
  844:  
  845:             sb = new StringBuilder();
  846:  
  847:             sb.AppendLine("Class: " + _event.Class);
  848:             sb.AppendLine("System: " + _event.System);
  849:             sb.AppendLine("Severity: " + _event.Severity);
  850:             sb.AppendLine("SeverityEffect: " + _event.SeverityEffect);
  851:             sb.AppendLine("Aid: " + _event.Aid);
  852:             sb.AppendLine("Cause: " + _event.Cause);
  853:             sb.AppendLine("Number: " + _event.Number);
  854:             sb.AppendLine("Detail: " + _event.Detail);
  855:             sb.AppendLine("EventTime: " + _event.EventTime);
  856:             sb.AppendLine("NodeTime: " + _event.NodeTime);
  857:             sb.AppendLine("Created: " + _event.Created);
  858:  
  859:             return sb.ToString();
  860:         }
  861:  
  862:         ////////////////////////////////////////////////////////////////////////////
  863:  
  864:         /// <summary>
  865:         ///
  866:         /// </summary>
  867:         public static string ToSimpleTextString(Ia.Ftn.Cl.Models.Event _event)
  868:         {
  869:             StringBuilder sb;
  870:  
  871:             sb = new StringBuilder();
  872:  
  873:             //sb.AppendLine("Class: " + _event.Class);
  874:             sb.AppendLine("System: " + _event.System);
  875:             sb.AppendLine("Severity: " + _event.Severity);
  876:             //sb.AppendLine("SeverityEffect: " + _event.SeverityEffect);
  877:             sb.AppendLine("Aid: " + _event.Aid);
  878:             sb.AppendLine("Cause: " + _event.Cause);
  879:             //sb.AppendLine("Number: " + _event.Number);
  880:             sb.AppendLine("Detail: " + _event.Detail);
  881:             sb.AppendLine("EventTime: " + _event.EventTime);
  882:             //sb.AppendLine("NodeTime: " + _event.NodeTime);
  883:             //sb.AppendLine("Created: " + _event.Created);
  884:  
  885:             return sb.ToString();
  886:         }
  887:  
  888:         ////////////////////////////////////////////////////////////////////////////
  889:  
  890:         /// <summary>
  891:         /// 
  892:         /// How to embed and access resources by using Visual C# http://support.microsoft.com/kb/319292/en-us
  893:         /// 
  894:         /// 1. Change the "Build Action" property of your XML file from "Content" to "Embedded Resource".
  895:         /// 2. Add "using System.Reflection".
  896:         /// 3. Manifest resource stream will start with the project namespace, the location of XML file.
  897:         /// 
  898:         /// </summary>
  899:  
  900:         private static XDocument XDocument
  901:         {
  902:             get
  903:             {
  904:                 if (xDocument == null)
  905:                 {
  906:                     lock (objectLock)
  907:                     {
  908:                         Assembly assembly;
  909:                         StreamReader streamReader;
  910:  
  911:                         assembly = Assembly.GetExecutingAssembly();
  912:                         streamReader = new StreamReader(assembly.GetManifestResourceStream("Ia.Ftn.Cl.Models.Data.event.xml"));
  913:  
  914:                         try
  915:                         {
  916:                             if (streamReader.Peek() != -1)
  917:                             {
  918:                                 xDocument = System.Xml.Linq.XDocument.Load(streamReader);
  919:                             }
  920:                         }
  921:                         catch (Exception)
  922:                         {
  923:                         }
  924:                         finally
  925:                         {
  926:                         }
  927:                     }
  928:                 }
  929:  
  930:                 return xDocument;
  931:             }
  932:         }
  933:  
  934:         ////////////////////////////////////////////////////////////////////////////    
  935:         ////////////////////////////////////////////////////////////////////////////    
  936:     }
  937:  
  938:     ////////////////////////////////////////////////////////////////////////////
  939:     ////////////////////////////////////////////////////////////////////////////   
  940: }