public void OnGet()
        {
            SnortContext db = HttpContext.RequestServices.GetService(typeof(SnortContext)) as SnortContext;

            if (StaticData.sensors == null)
            {
                StaticData.sensors = SensorTable.GetSensors(db.GetConnection());
            }

            if (StaticData.alerts == null)
            {
                StaticData.alerts = AlertMapper.ResolveAlerts(0, ref StaticData.signatureStrings, db.GetConnection());
                foreach (Alert a in StaticData.alerts)
                {
                    if (StaticData.iplocations.ContainsKey(a.src_ip))
                    {
                        continue;
                    }
                    else
                    {
                        StaticData.iplocations[a.src_ip] = "new";
                    }
                }
            }

            else
            {
                lastTime = StaticData.alerts.Select(x => x.time).DefaultIfEmpty(DateTime.MinValue).Max();
                //Check for new events
                List <Alert>          new_alerts = new List <Alert>();
                Dictionary <int, int> lastAlers  = new Dictionary <int, int>();
                foreach (Sensor s in StaticData.sensors)
                {
                    int lastEvent = StaticData.alerts.Where(x => x.sid == s.sid).Select(x => x.cid).DefaultIfEmpty(0).Max();
                    if (s.last_cid != lastEvent)
                    {
                        new_alerts.AddRange(AlertMapper.UpdateAlerts(s.sid, lastEvent, StaticData.signatureStrings, db.GetConnection()));
                    }
                }
                new_alerts.Sort((alertA, alertB) => DateTime.Compare(alertB.time, alertA.time));
                foreach (Alert a in new_alerts)
                {
                    if (StaticData.iplocations.ContainsKey(a.src_ip))
                    {
                        continue;
                    }
                    else
                    {
                        StaticData.iplocations[a.src_ip] = "new";
                    }
                }
                StaticData.alerts.InsertRange(0, new_alerts);
            }
            if (HttpContext.Request.Query.Count > 0)
            {
                //Filtering.applyFilter(ref alerts, HttpContext.Request.Query);
                filtered = true;
            }
        }
        public void OnGet()
        {
            try
            {
                SnortContext db = HttpContext.RequestServices.GetService(typeof(SnortContext)) as SnortContext;

                if (StaticData.sensors == null)
                {
                    StaticData.sensors = SensorTable.GetSensors(db.GetConnection());
                }

                if (StaticData.alerts == null)
                {
                    StaticData.alerts = AlertMapper.ResolveAlerts(limit, ref StaticData.signatureStrings, db.GetConnection());
                    foreach (Alert a in StaticData.alerts)
                    {
                        if (StaticData.iplocations.ContainsKey(a.src_ip))
                        {
                            continue;
                        }
                        else
                        {
                            StaticData.iplocations[a.src_ip] = "new";
                        }
                    }
                }

                else
                {
                    lastTime = StaticData.alerts.Select(x => x.time).DefaultIfEmpty(DateTime.MinValue).Max();
                    //Check for new events
                    List <Alert> new_alerts = new List <Alert>();
                    foreach (Sensor s in StaticData.sensors)
                    {
                        int lastEvent = StaticData.alerts.Where(x => x.sid == s.sid).Select(x => x.cid).DefaultIfEmpty(0).Max();
                        if (s.last_cid != lastEvent)
                        {
                            //List<Event> events = EventTable.UpdateEvents(s.sid, lastEvent, db.GetConnection());
                            new_alerts.AddRange(AlertMapper.UpdateAlerts(s.sid, lastEvent, StaticData.signatureStrings, db.GetConnection()));
                        }
                    }
                    foreach (Alert a in new_alerts)
                    {
                        if (StaticData.iplocations.ContainsKey(a.src_ip))
                        {
                            continue;
                        }
                        else
                        {
                            StaticData.iplocations[a.src_ip] = "new";
                        }
                    }
                    new_alerts.Sort((alertA, alertB) => DateTime.Compare(alertB.time, alertA.time));
                    StaticData.alerts.InsertRange(0, new_alerts);
                }
            }
            catch (Exception e)
            {
                error = "Database error: " + e.Message;
                return;
            }
            try {
                int year = 0, month = 0, day = 0;

                DateTime startdate;
                DateTime enddate;

                Microsoft.Extensions.Primitives.StringValues queryVal;
                if (HttpContext.Request.Query.TryGetValue("view", out queryVal))
                {
                    Microsoft.Extensions.Primitives.StringValues yearVal;
                    Microsoft.Extensions.Primitives.StringValues monthVal;
                    Microsoft.Extensions.Primitives.StringValues dayVal;

                    HttpContext.Request.Query.TryGetValue("year", out yearVal);
                    HttpContext.Request.Query.TryGetValue("month", out monthVal);
                    HttpContext.Request.Query.TryGetValue("day", out dayVal);

                    switch (queryVal.FirstOrDefault())
                    {
                    case "year":
                    {
                        int.TryParse(yearVal, out year);
                        months = Stats.ByYear(StaticData.alerts, ref alerts, year);
                        if (year == 0)
                        {
                            year = DateTime.Now.Year;
                        }

                        middleText = year.ToString();
                        int upmonth = StaticData.alerts.Where(x => x.time.Year == year).Select(x => x.time.Month).DefaultIfEmpty().Max();
                        upText  = upmonth.ToString();
                        upQuery = "?view=month&year=" + year + "&month=" + upmonth;
                        if (year < DateTime.Now.Year)
                        {
                            rightText = (year + 1).ToString();
                            leftQuery = "?view=year&year=" + (year + 1);
                        }

                        if (year > StaticData.alerts.Select(x => x.time.Year).DefaultIfEmpty(year).Min())
                        {
                            leftText  = (year - 1).ToString();
                            leftQuery = "?view=year&year=" + (year - 1);
                        }
                        startdate = new DateTime(year, 1, 1);
                        enddate   = new DateTime(year, 12, DateTime.DaysInMonth(year, 12));
                        xLabel    = year.ToString();
                        yLabel    = "%b";
                        break;
                    }

                    case "month":
                    {
                        int.TryParse(yearVal, out year);
                        int.TryParse(monthVal, out month);

                        if (year == 0)
                        {
                            year = DateTime.Now.Year;
                        }
                        if (month == 0)
                        {
                            month = DateTime.Now.Month;
                        }
                        months = Stats.ByMonth(StaticData.alerts, ref alerts, year, month);

                        xLabel = year + " " + CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(month);
                        yLabel = "%d";

                        middleText = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(month).Substring(0, 3) + " " + year;
                        int upday = StaticData.alerts.Where(x => x.time.Year == year && x.time.Month == month).Select(x => x.time.Day).DefaultIfEmpty().Max();
                        upText    = upday.ToString();
                        upQuery   = "?view=day&year=" + year + "&month=" + month + "&day=" + upday;
                        downText  = year.ToString();
                        downQuery = "?view=year&year=" + year;
                        if (month < 12)
                        {
                            if (year == DateTime.Now.Year && month >= DateTime.Now.Month)
                            {
                            }
                            else
                            {
                                rightText  = (month + 1).ToString();
                                rightQuery = "?view=month&year=" + year + "&month=" + (month + 1);
                            }
                        }
                        if (month > 1)
                        {
                            leftText  = (month - 1).ToString();
                            leftQuery = "?view=month&year=" + year + "&month=" + (month - 1);
                        }
                        startdate = new DateTime(year, month, 1);
                        enddate   = new DateTime(year, month, DateTime.DaysInMonth(year, month));
                        break;
                    }

                    case "day":
                    {
                        int.TryParse(yearVal, out year);
                        int.TryParse(monthVal, out month);
                        int.TryParse(dayVal, out day);

                        if (year == 0)
                        {
                            year = DateTime.Now.Year;
                        }
                        if (month == 0)
                        {
                            month = DateTime.Now.Month;
                        }
                        if (day == 0)
                        {
                            day = DateTime.DaysInMonth(year, month);
                        }
                        months = Stats.ByDay(StaticData.alerts, ref alerts, year, month, day);

                        xLabel     = year + " " + CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(month) + " " + day;
                        yLabel     = "%H";
                        middleText = day + " " + CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(month).Substring(0, 3) + " " + year;
                        downText   = month.ToString();
                        downQuery  = "?view=month&year=" + year + "&month=" + month;
                        if (day > 1)
                        {
                            leftText  = (day - 1).ToString();
                            leftQuery = "?view=day&year=" + year + "&month=" + month + "&day=" + (day - 1).ToString();
                        }
                        if (day < DateTime.DaysInMonth(year, month))
                        {
                            if (year == DateTime.Now.Year && month == DateTime.Now.Month && day >= DateTime.Now.Day)
                            {
                            }
                            else
                            {
                                rightText  = (month + 1).ToString();
                                rightQuery = "?view=day&year=" + year + "&month=" + month + "&day=" + (day + 1).ToString();
                            }
                        }
                        startdate = new DateTime(year, month, day, 0, 0, 0);
                        enddate   = new DateTime(year, month, day, 23, 59, 59);
                        break;
                    }

                    default:
                    {
                        year  = DateTime.Now.Year;
                        month = DateTime.Now.Month;
                        day   = DateTime.Now.Day;

                        months = Stats.ByDay(StaticData.alerts, ref alerts, year, month, day);


                        xLabel     = year + " " + CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(month) + " " + day;
                        yLabel     = "%H";
                        middleText = day + " " + CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(month).Substring(0, 3) + " " + year;
                        downText   = month.ToString();
                        downQuery  = "?view=month&year=" + year + "&month=" + month;
                        if (day > 1)
                        {
                            leftText  = (day - 1).ToString();
                            leftQuery = "?view=day&year=" + year + "&month=" + month + "&day=" + (day - 1).ToString();
                        }
                        if (day < DateTime.DaysInMonth(year, month))
                        {
                            if (year == DateTime.Now.Year && month == DateTime.Now.Month && day <= DateTime.Now.Day)
                            {
                            }
                            else
                            {
                                rightText  = (month + 1).ToString();
                                rightQuery = "?view=day&year=" + year + "&month=" + month + "&day=" + (day + 1).ToString();
                            }
                        }
                        startdate = new DateTime(year, month, day, 0, 0, 0);
                        enddate   = new DateTime(year, month, day, 23, 59, 59);
                        break;
                    }
                    }
                }
                else
                {
                    year  = DateTime.Now.Year;
                    month = DateTime.Now.Month;
                    //day = DateTime.Now.Day;

                    months = Stats.ByMonth(StaticData.alerts, ref alerts, year, month);


                    xLabel     = year + " " + CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(month);
                    yLabel     = "%d";
                    middleText = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(month).Substring(0, 3) + " " + year;
                    int upday = StaticData.alerts.Where(x => x.time.Year == year && x.time.Month == month).Select(x => x.time.Day).DefaultIfEmpty().Max();
                    upText    = upday.ToString();
                    upQuery   = "?view=day&year=" + year + "&month=" + month + "&day=" + upday;
                    downText  = year.ToString();
                    downQuery = "?view=year&year=" + year;
                    if (month < 12)
                    {
                        if (year == DateTime.Now.Year && month >= DateTime.Now.Month)
                        {
                        }
                        else
                        {
                            rightText  = (month + 1).ToString();
                            rightQuery = "?view=month&year=" + year + "&month=" + (month + 1);
                        }
                    }
                    if (month > 1)
                    {
                        leftText  = (month - 1).ToString();
                        leftQuery = "?view=month&year=" + year + "&month=" + (month - 1);
                    }
                    startdate = new DateTime(year, month, 1);
                    enddate   = new DateTime(year, month, DateTime.DaysInMonth(year, month));
                }

                attackers = Stats.ByAttacker(alerts);
                targets   = Stats.ByTarget(alerts);
                timeline  = Stats.SignaturesInTime(alerts, year, month, day);
                if (alerts.Count == 0)
                {
                    noevents = true;
                }
                if (StaticData.alerts != null && StaticData.alerts.Count() > 0)
                {
                    noalerts = false;
                }
                alerts          = null;
                timelineStart   = "new Date('" + startdate.ToString("yyyy/MM/dd HH:mm:ss") + "')";
                timelineEnd     = "new Date('" + enddate.ToString("yyyy/MM/dd HH:mm:ss") + "')";
                timeFilterStart = startdate.ToString("MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
                timeFilterEnd   = enddate.ToString("MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);

                GC.Collect(1, GCCollectionMode.Forced);
                GC.Collect(2, GCCollectionMode.Forced);
                GC.WaitForPendingFinalizers();
            }
            catch (Exception e)
            {
                error = "e.Message";
                return;
            }
        }