public IActionResult Index(string Override)
 {
     if (_context.VPCs.ToList().Count == 0)
     {
         ViewData["MissingVPC"] = "YES";
     }
     if (string.IsNullOrEmpty(Override))
     {
         ViewData["Mode"] = "Automatic";
         PlatformLogsParentViewModel model = new PlatformLogsParentViewModel
         {
             Response      = null,
             Streams       = _context.CloudWatchLogStreams.ToList(),
             SelectedValue = -1
         };
         return(View(model));
     }
     else if (Override.Equals("true"))
     {
         ViewData["Mode"] = "Generic";
         PlatformLogsParentViewModel model = new PlatformLogsParentViewModel
         {
             Response      = null,
             Streams       = _context.CloudWatchLogStreams.ToList(),
             SelectedValue = -1
         };
         return(View(model));
     }
     else
     {
         ViewData["Mode"] = "Automatic";
         PlatformLogsParentViewModel model = new PlatformLogsParentViewModel
         {
             Response      = null,
             Streams       = _context.CloudWatchLogStreams.ToList(),
             SelectedValue = -1
         };
         return(View(model));
     }
 }
        public async Task <IActionResult> Index(string StreamID, string ViewMode)
        {
            if (_context.VPCs.ToList().Count == 0)
            {
                ViewData["MissingVPC"] = "YES";
            }
            if (StreamID == null)
            {
                PlatformLogsParentViewModel model = new PlatformLogsParentViewModel
                {
                    Response      = null,
                    Streams       = _context.CloudWatchLogStreams.ToList(),
                    SelectedValue = 0
                };
                TempData["Exception"] = "Invaild Selection of Component!";
                return(View(model));
            }
            else if (StreamID.Equals("0"))
            {
                List <RDSSQLLog>            Logs  = _context.GetRDSLogs().Result.ToList();
                PlatformLogsParentViewModel model = new PlatformLogsParentViewModel
                {
                    Response      = null,
                    Streams       = _context.CloudWatchLogStreams.ToList(),
                    SelectedValue = int.Parse(StreamID),
                    SQLlogs       = Logs
                };
                if (ViewMode.Equals("Automatic"))
                {
                    ViewData["Mode"] = "Automatic";
                }
                else if (ViewMode.Equals("Generic"))
                {
                    ViewData["Mode"] = "Automatic";
                }
                return(View(model));
            }
            else if (ViewMode.Equals("Automatic"))
            {
                CloudWatchLogStream selectedStream = await _context.CloudWatchLogStreams.FindAsync(int.Parse(StreamID));

                if (selectedStream != null)
                {
                    GetLogEventsResponse response = await CloudwatchLogsClient.GetLogEventsAsync(new GetLogEventsRequest
                    {
                        LogGroupName  = selectedStream.LinkedGroup.Name.Replace("@", "/"),
                        LogStreamName = selectedStream.Name
                    });

                    PlatformLogsParentViewModel model = new PlatformLogsParentViewModel
                    {
                        Streams       = _context.CloudWatchLogStreams.ToList(),
                        SelectedValue = int.Parse(StreamID)
                    };
                    if (selectedStream.DisplayName.Contains("IIS"))
                    {
                        List <IISLog> logs = new List <IISLog>();
                        foreach (OutputLogEvent e in response.Events)
                        {
                            if (!e.Message.StartsWith('#'))
                            {
                                string[] spiltedRecord = e.Message.Split();
                                IISLog   l             = new IISLog
                                {
                                    TimeStamp         = e.Timestamp.ToLocalTime(),
                                    ServerIP          = spiltedRecord[0],
                                    HTTPMethod        = spiltedRecord[1],
                                    Path              = spiltedRecord[2],
                                    Query             = spiltedRecord[3],
                                    DestPort          = int.Parse(spiltedRecord[4]),
                                    AuthenticatedUser = spiltedRecord[5],
                                    SourceIP          = spiltedRecord[6],
                                    SourceUserAgent   = spiltedRecord[7],
                                    Referer           = spiltedRecord[8],
                                    HTTPStatusCode    = int.Parse(spiltedRecord[9]),
                                    SubstatusCode     = int.Parse(spiltedRecord[10]),
                                    Win32StatusCode   = int.Parse(spiltedRecord[11]),
                                    Duration          = int.Parse(spiltedRecord[12]),
                                };
                                logs.Add(l);
                            }
                        }
                        model.IISLogs = logs;
                    }
                    else if (selectedStream.DisplayName.Contains("eni"))
                    {
                        List <ENILog> logs = new List <ENILog>();
                        foreach (OutputLogEvent e in response.Events)
                        {
                            if (!e.Message.Contains("NODATA"))
                            {
                                string[] spiltedRecord = e.Message.Split();
                                ENILog   l             = new ENILog
                                {
                                    TimeStamp          = e.Timestamp.ToLocalTime(),
                                    Version            = int.Parse(spiltedRecord[0]),
                                    AccountID          = long.Parse(spiltedRecord[1]),
                                    Interface          = spiltedRecord[2],
                                    SourceAddress      = spiltedRecord[3],
                                    DestinationAddress = spiltedRecord[4],
                                    SourcePort         = spiltedRecord[5],
                                    DestinationPort    = spiltedRecord[6],
                                    Packets            = int.Parse(spiltedRecord[8]),
                                    Bytes     = int.Parse(spiltedRecord[9]),
                                    StartTime = long.Parse(spiltedRecord[10]),
                                    EndTime   = long.Parse(spiltedRecord[11]),
                                    Action    = spiltedRecord[12],
                                    LogAction = spiltedRecord[13]
                                };
                                if (spiltedRecord[7].Equals("1"))
                                {
                                    l.Protocol = "ICMP";
                                }
                                else if (spiltedRecord[7].Equals("4"))
                                {
                                    l.Protocol = "IPv4";
                                }
                                else if (spiltedRecord[7].Equals("6"))
                                {
                                    l.Protocol = "TCP";
                                }
                                else if (spiltedRecord[7].Equals("17"))
                                {
                                    l.Protocol = "UDP";
                                }
                                else if (spiltedRecord[7].Equals("41"))
                                {
                                    l.Protocol = "IPv6";
                                }
                                logs.Add(l);
                            }
                        }
                        model.ENILogs = logs;
                    }
                    else
                    {
                        foreach (OutputLogEvent e in response.Events)
                        {
                            e.Timestamp = e.Timestamp.ToLocalTime();
                        }
                        model.Response = response;
                    }
                    ViewData["Mode"] = "Automatic";
                    return(View(model));
                }
                else
                {
                    return(NotFound());
                }
            }
            else
            {
                CloudWatchLogStream selectedStream = await _context.CloudWatchLogStreams.FindAsync(int.Parse(StreamID));

                if (selectedStream != null)
                {
                    GetLogEventsResponse response = await CloudwatchLogsClient.GetLogEventsAsync(new GetLogEventsRequest
                    {
                        LogGroupName  = selectedStream.LinkedGroup.Name.Replace("@", "/"),
                        LogStreamName = selectedStream.Name
                    });

                    foreach (OutputLogEvent e in response.Events)
                    {
                        e.Timestamp = e.Timestamp.ToLocalTime();
                    }
                    PlatformLogsParentViewModel model = new PlatformLogsParentViewModel
                    {
                        Response      = response,
                        Streams       = _context.CloudWatchLogStreams.ToList(),
                        SelectedValue = int.Parse(StreamID)
                    };
                    ViewData["Mode"] = "Generic";
                    return(View(model));
                }
                else
                {
                    return(NotFound());
                }
            }
        }