public async Task DoWorkAsync() { _logger.LogInformation("Update Background Service is running"); try { _logger.LogInformation("Update Background Service is checking VPCs"); if (context.VPCs.Any()) { DescribeVpcsResponse responseDescribeVPC = await ec2Client.DescribeVpcsAsync(); List <VPC> vpcs = await context.VPCs.ToListAsync(); foreach (VPC vpc in vpcs) { Boolean Flag = false; foreach (Vpc AWSVPC in responseDescribeVPC.Vpcs) { if (vpc.AWSVPCReference.Equals(AWSVPC.VpcId)) { Flag = true; break; } } if (Flag == false) { context.VPCs.Remove(vpc); } } context.SaveChanges(); _logger.LogInformation("Update Background Service completed checking of VPCs"); } if (context.VPCs.Any()) { VPC vpc = await context.VPCs.FindAsync(1); if (context.Servers.Any()) { _logger.LogInformation("Update Background Service is checking servers"); List <Server> servers = await context.Servers.ToListAsync(); DescribeInstancesResponse response = await ec2Client.DescribeInstancesAsync(new DescribeInstancesRequest { Filters = new List <Filter> { new Filter { Name = "vpc-id", Values = new List <string> { vpc.AWSVPCReference } } } }); foreach (var server in servers) { foreach (var reservation in response.Reservations) { foreach (var instance in reservation.Instances) { bool Flag = false; if (server.AWSEC2Reference.Equals(instance.InstanceId)) { if (instance.State.Code == 0 && server.State != State.Starting) { server.State = State.Starting; Flag = true; } else if (instance.State.Code == 16 && server.State != State.Running) { server.State = State.Running; Flag = true; } else if (instance.State.Code == 64 && server.State != State.Stopping) { server.State = State.Stopping; Flag = true; } else if (instance.State.Code == 80 && server.State != State.Stopped) { server.State = State.Stopped; Flag = true; } if (server.Visibility == Visibility.Internet && (server.IPAddress != instance.PublicIpAddress || server.DNSHostname != instance.PublicDnsName) && server.State != State.Stopped) { server.IPAddress = instance.PublicIpAddress; server.DNSHostname = instance.PublicDnsName; Flag = true; } else if (server.Visibility == Visibility.Internet && (server.IPAddress != instance.PublicIpAddress || server.DNSHostname != instance.PublicDnsName)) { server.IPAddress = "Public IP Address is not available when server is stopped"; server.DNSHostname = "Public DNS Hostname is not available when server is stopped"; Flag = true; } else if ((server.Visibility == Visibility.Extranet || server.Visibility == Visibility.Intranet) && (server.IPAddress != instance.PrivateIpAddress || server.DNSHostname != instance.PrivateDnsName)) { server.IPAddress = instance.PrivateIpAddress; server.DNSHostname = instance.PrivateDnsName; Flag = true; } if (Flag == true) { context.Servers.Update(server); } break; } } } } context.SaveChanges(); } if (context.CloudWatchLogGroups.Any() && context.CloudWatchLogStreams.Any()) { _logger.LogInformation("Update Background Service is checking cloudwatch groups"); List <CloudWatchLogGroup> allStreams = await context.CloudWatchLogGroups.ToListAsync(); foreach (CloudWatchLogGroup g in allStreams) { DescribeLogStreamsResponse response = await cwlClient.DescribeLogStreamsAsync(new DescribeLogStreamsRequest { LogGroupName = g.Name.Replace("@", "/") }); foreach (LogStream ls in response.LogStreams) { Boolean Flag = false; foreach (CloudWatchLogStream CWLS in g.LogStreams) { if (ls.Arn.Equals(CWLS.ARN)) { Flag = true; break; } } if (Flag == false) { CloudWatchLogStream newS = new CloudWatchLogStream { ARN = ls.Arn, CreationTime = ls.CreationTime, FirstEventTime = ls.FirstEventTimestamp, LastEventTime = ls.LastEventTimestamp, Name = ls.LogStreamName, LinkedGroupID = g.ID }; if (g.Name.Equals("VMVPCLogs")) { newS.DisplayName = "Network Flow Log For Challenge Network Interface (" + newS.Name.Substring(0, newS.Name.Length - 4) + ")"; } else if (g.Name.Equals("PlatformVPCLogs")) { newS.DisplayName = "Network Flow Log For Platform Network Interface (" + newS.Name.Substring(0, newS.Name.Length - 4) + ")"; } else if (g.Name.Equals("@aws@elasticbeanstalk@User-Side@IIS-Log")) { newS.DisplayName = "IIS Logs for User Side Web Server"; } else if (g.Name.Equals("@aws@elasticbeanstalk@Admin-Side@IIS-Log")) { newS.DisplayName = "IIS Logs for Admin Side Web Server"; } else if (g.Name.Equals("@aws@elasticbeanstalk@User-Side@EBDeploy-Log")) { newS.DisplayName = "Elastic Beanstalk Deployment Tool Logs for User Side"; } else if (g.Name.Equals("@aws@elasticbeanstalk@Admin-Side@EBDeploy-Log")) { newS.DisplayName = "Elastic Beanstalk Deployment Tool Logs for Admin Side"; } else if (g.Name.Equals("@aws@elasticbeanstalk@User-Side@EBHooks-Log")) { newS.DisplayName = "Elastic Beanstalk Deployment Hook Logs for User Side"; } else if (g.Name.Equals("@aws@elasticbeanstalk@Admin-Side@EBHooks-Log")) { newS.DisplayName = "Elastic Beanstalk Deployment Hook Logs for Admin Side"; } else { newS.DisplayName = newS.Name; } if (!g.Name.Equals("RDSOSMetrics") || !g.Name.Contains("sns")) { context.CloudWatchLogStreams.Add(newS); } } } foreach (CloudWatchLogStream CWLS in g.LogStreams) { Boolean Flag = false; foreach (LogStream ls in response.LogStreams) { if (CWLS.ARN.Equals(ls.Arn)) { Flag = true; break; } } if (Flag == false) { context.CloudWatchLogStreams.Remove(CWLS); } } } await context.SaveChangesAsync(); } if (context.Templates.Any()) { DescribeSnapshotsResponse response = await ec2Client.DescribeSnapshotsAsync(new DescribeSnapshotsRequest()); List <Template> templates = await context.Templates.FromSql("SELECT * FROM dbo.Templates WHERE AWSSnapshotReference = NULL").ToListAsync(); foreach (Template t in templates) { foreach (Snapshot s in response.Snapshots) { if (s.Description.Contains(t.AWSAMIReference)) { t.AWSSnapshotReference = s.SnapshotId; break; } } } await context.SaveChangesAsync(); } } _logger.LogInformation("Update Background Service has completed!"); } catch (SqlException e) { _logger.LogInformation("Update Background Service faced an SQL exception! " + e.Message + " | " + e.Source); return; } catch (Exception e) { _logger.LogInformation("Update Background Service faced an exception! " + e.Message + " | " + e.Source); return; } }
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()); } } }