示例#1
0
        private async Task <IDictionary <string, MetricAlarm> > ReadAllAlarms()
        {
            var    alarms        = new List <MetricAlarm>();
            string lastAlarmName = null;

            do
            {
                var request = new DescribeAlarmsRequest
                {
                    NextToken = lastAlarmName
                };

                var alarmsResponse = await _cloudWatchClient.DescribeAlarmsAsync(request);

                if (alarmsResponse != null)
                {
                    alarms.AddRange(alarmsResponse.MetricAlarms);
                    lastAlarmName = alarmsResponse.NextToken;
                }
                else
                {
                    lastAlarmName = null;
                }
            }while (lastAlarmName != null);

            _logger.Info($"Preloaded all {alarms.Count} alarms");

            return(alarms.ToDictionary(a => a.AlarmName));
        }
        async IAsyncEnumerable <DescribeAlarmsResponse> IPaginator <DescribeAlarmsResponse> .PaginateAsync(CancellationToken cancellationToken = default)
        {
            if (Interlocked.Exchange(ref _isPaginatorInUse, 1) != 0)
            {
                throw new System.InvalidOperationException("Paginator has already been consumed and cannot be reused. Please create a new instance.");
            }
            var nextToken = _request.NextToken;
            DescribeAlarmsResponse response;

            do
            {
                _request.NextToken = nextToken;
                response           = await _client.DescribeAlarmsAsync(_request, cancellationToken).ConfigureAwait(false);

                nextToken = response.NextToken;
                cancellationToken.ThrowIfCancellationRequested();
                yield return(response);
            }while (nextToken != null);
        }
 private Amazon.CloudWatch.Model.DescribeAlarmsResponse CallAWSServiceOperation(IAmazonCloudWatch client, Amazon.CloudWatch.Model.DescribeAlarmsRequest request)
 {
     Utils.Common.WriteVerboseEndpointMessage(this, client.Config, "Amazon CloudWatch", "DescribeAlarms");
     try
     {
         #if DESKTOP
         return(client.DescribeAlarms(request));
         #elif CORECLR
         return(client.DescribeAlarmsAsync(request).GetAwaiter().GetResult());
         #else
                 #error "Unknown build edition"
         #endif
     }
     catch (AmazonServiceException exc)
     {
         var webException = exc.InnerException as System.Net.WebException;
         if (webException != null)
         {
             throw new Exception(Utils.Common.FormatNameResolutionFailureMessage(client.Config, webException.Message), webException);
         }
         throw;
     }
 }
示例#4
0
        public async Task <IActionResult> Index(Boolean unFixable)
        {
            var CloudwatchFeed = await FeedReader.ReadAsync("https://status.aws.amazon.com/rss/cloudwatch-ap-southeast-1.rss");

            var CloudwatchFeed1 = CloudwatchFeed.Items.ElementAt(0);

            if (CloudwatchFeed1.Title.StartsWith("Service is operating normally"))
            {
                ViewData["CWStatus"] = "OK";
            }
            else if (CloudwatchFeed1.Title.StartsWith("Informational message") || CloudwatchFeed1.Title.StartsWith("Performance issues"))
            {
                ViewData["CWStatus"] = "WARNING";
            }
            else if (CloudwatchFeed1.Title.StartsWith("Service disruption"))
            {
                ViewData["CWStatus"] = "CRITICAL";
            }

            var EC2Feed = await FeedReader.ReadAsync("https://status.aws.amazon.com/rss/ec2-ap-southeast-1.rss");

            var EC2Feed1 = EC2Feed.Items.ElementAt(0);

            if (EC2Feed1.Title.StartsWith("Service is operating normally"))
            {
                ViewData["EC2Status"] = "OK";
            }
            else if (EC2Feed1.Title.StartsWith("Informational message") || EC2Feed1.Title.StartsWith("Performance issues"))
            {
                ViewData["EC2Status"] = "WARNING";
            }
            else if (EC2Feed1.Title.StartsWith("Service disruption"))
            {
                ViewData["EC2Status"] = "CRITICAL";
            }

            var EBSFeed = await FeedReader.ReadAsync("https://status.aws.amazon.com/rss/elasticbeanstalk-ap-southeast-1.rss");

            var EBSFeed1 = EBSFeed.Items.ElementAt(0);

            if (EBSFeed1.Title.StartsWith("Service is operating normally"))
            {
                ViewData["EBSStatus"] = "OK";
            }
            else if (EBSFeed1.Title.StartsWith("Informational message") || EBSFeed1.Title.StartsWith("Performance issues"))
            {
                ViewData["EBSStatus"] = "WARNING";
            }
            else if (EBSFeed1.Title.StartsWith("Service disruption"))
            {
                ViewData["EBSStatus"] = "CRITICAL";
            }

            var ELBFeed = await FeedReader.ReadAsync("https://status.aws.amazon.com/rss/elb-ap-southeast-1.rss");

            if (ELBFeed.Items.Count != 0)
            {
                var ELBFeed1 = ELBFeed.Items.ElementAt(0);
                if (ELBFeed1.Title.StartsWith("Service is operating normally"))
                {
                    ViewData["ELBStatus"] = "OK";
                }
                else if (ELBFeed1.Title.StartsWith("Informational message") || ELBFeed1.Title.StartsWith("Performance issues"))
                {
                    ViewData["ELBStatus"] = "WARNING";
                }
                else if (ELBFeed1.Title.StartsWith("Service disruption"))
                {
                    ViewData["ELBStatus"] = "CRITICAL";
                }
            }
            else
            {
                ViewData["ELBStatus"] = "OK";
            }

            var NATFeed = await FeedReader.ReadAsync("https://status.aws.amazon.com/rss/natgateway-ap-southeast-1.rss");

            if (NATFeed.Items.Count != 0)
            {
                var NATFeed1 = NATFeed.Items.ElementAt(0);
                if (NATFeed1.Title.StartsWith("Service is operating normally"))
                {
                    ViewData["NATStatus"] = "OK";
                }
                else if (NATFeed1.Title.StartsWith("Informational message") || NATFeed1.Title.StartsWith("Performance issues"))
                {
                    ViewData["NATStatus"] = "WARNING";
                }
                else if (NATFeed1.Title.StartsWith("Service disruption"))
                {
                    ViewData["NATStatus"] = "CRITICAL";
                }
            }
            else
            {
                ViewData["NATStatus"] = "OK";
            }

            var RDSFeed = await FeedReader.ReadAsync("https://status.aws.amazon.com/rss/rds-ap-southeast-1.rss");

            var RDSFeed1 = RDSFeed.Items.ElementAt(0);

            if (RDSFeed1.Title.StartsWith("Service is operating normally"))
            {
                ViewData["RDSStatus"] = "OK";
            }
            else if (RDSFeed1.Title.StartsWith("Informational message") || RDSFeed1.Title.StartsWith("Performance issues"))
            {
                ViewData["RDSStatus"] = "WARNING";
            }
            else if (RDSFeed1.Title.StartsWith("Service disruption"))
            {
                ViewData["RDSStatus"] = "CRITICAL";
            }

            var R53Feed = await FeedReader.ReadAsync("https://status.aws.amazon.com/rss/route53.rss");

            var R53Feed1 = R53Feed.Items.ElementAt(0);

            if (R53Feed1.Title.StartsWith("Service is operating normally") || R53Feed1.Title.Contains("[RESOLVED]"))
            {
                ViewData["R53Status"] = "OK";
            }
            else if (R53Feed1.Title.StartsWith("Informational message") || R53Feed1.Title.StartsWith("Performance issues"))
            {
                ViewData["R53Status"] = "WARNING";
            }
            else if (R53Feed1.Title.StartsWith("Service disruption"))
            {
                ViewData["R53Status"] = "CRITICAL";
            }

            var SGFeed = await FeedReader.ReadAsync("https://status.aws.amazon.com/rss/storagegateway-ap-southeast-1.rss");

            var SGFeed1 = SGFeed.Items.ElementAt(0);

            if (SGFeed1.Title.StartsWith("Service is operating normally"))
            {
                ViewData["SGStatus"] = "OK";
            }
            else if (SGFeed1.Title.StartsWith("Informational message") || SGFeed1.Title.StartsWith("Performance issues"))
            {
                ViewData["SGStatus"] = "WARNING";
            }
            else if (SGFeed1.Title.StartsWith("Service disruption"))
            {
                ViewData["SGStatus"] = "CRITICAL";
            }

            var S3Feed = await FeedReader.ReadAsync("https://status.aws.amazon.com/rss/s3-ap-southeast-1.rss");

            var S3Feed1 = S3Feed.Items.ElementAt(0);

            if (S3Feed1.Title.StartsWith("Service is operating normally"))
            {
                ViewData["S3Status"] = "OK";
            }
            else if (S3Feed1.Title.StartsWith("Informational message") || S3Feed1.Title.StartsWith("Performance issues"))
            {
                ViewData["S3Status"] = "WARNING";
            }
            else if (S3Feed1.Title.StartsWith("Service disruption"))
            {
                ViewData["S3Status"] = "CRITICAL";
            }

            var VPCFeed = await FeedReader.ReadAsync("https://status.aws.amazon.com/rss/vpc-ap-southeast-1.rss");

            var VPCFeed1 = VPCFeed.Items.ElementAt(0);

            if (VPCFeed1.Title.StartsWith("Service is operating normally"))
            {
                ViewData["VPCStatus"] = "OK";
            }
            else if (VPCFeed1.Title.StartsWith("Informational message") || VPCFeed1.Title.StartsWith("Performance issues"))
            {
                ViewData["VPCStatus"] = "WARNING";
            }
            else if (VPCFeed1.Title.StartsWith("Service disruption"))
            {
                ViewData["VPCStatus"] = "CRITICAL";
            }

            DescribeAlarmsResponse response = await CWClient.DescribeAlarmsAsync();

            Boolean Flag = false;

            foreach (MetricAlarm a in response.MetricAlarms)
            {
                if (a.AlarmName.Contains("awsec2") && a.StateValue == StateValue.ALARM)
                {
                    Flag = true;
                    break;
                }
            }
            if (Flag == true)
            {
                ViewData["CWPlatformState"] = "ALARM";
            }
            else
            {
                ViewData["CWPlatformState"] = "OK";
            }

            Flag = false;
            foreach (MetricAlarm a in response.MetricAlarms)
            {
                if (a.AlarmName.Equals("eCTF Load Balancer HTTP 5XX Errors") && a.StateValue == StateValue.ALARM)
                {
                    Flag = true;
                    break;
                }
            }
            if (Flag == true)
            {
                ViewData["CWELBState"] = "ALARM";
            }
            else
            {
                ViewData["CWELBState"] = "OK";
            }

            if (_context.Servers.Count() != 0)
            {
                Flag = false;
                foreach (MetricAlarm a in response.MetricAlarms)
                {
                    if (a.AlarmName.Contains("-eCTFVM-") && a.StateValue == StateValue.ALARM)
                    {
                        Flag = true;
                        break;
                    }
                }
                if (Flag == true)
                {
                    ViewData["CWCSState"] = "ALARM";
                }
                else
                {
                    ViewData["CWCSState"] = "OK";
                }
            }
            if (_context.VPCs.ToList().Count == 0)
            {
                ViewData["MissingVPC"] = "YES";
            }
            else if (unFixable == true)
            {
                ViewData["MissingVPC"] = "UNFIXABLE";
            }
            else
            {
                ViewData["MissingVPC"] = "NO";
                List <Server> allServers = await _context.Servers.ToListAsync();

                ViewData["ServerTotalCount"] = allServers.Count();
                List <Server> errorServers = await _context.Servers.FromSql("SELECT * FROM dbo.Servers WHERE State = 4").ToListAsync();

                ViewData["ServerErrorCount"] = errorServers.Count();
                List <Server> runningServers = await _context.Servers.FromSql("SELECT * FROM dbo.Servers WHERE State = 1").ToListAsync();

                ViewData["ServerRunningCount"] = runningServers.Count();
                List <Subnet> allSubnets = await _context.Subnets.ToListAsync();

                ViewData["SubnetTotalCount"] = allSubnets.Count();
                if (errorServers.Count() == 0)
                {
                    ViewData["ServerHealth"] = "OK";
                }
                else
                {
                    ViewData["ServerHealth"] = "NOT OK";
                }

                List <Subnet> intranetSubnets = await _context.Subnets.FromSql("SELECT * FROM dbo.Subnets WHERE Type = 2").ToListAsync();

                ViewData["SubnetIntranetCount"] = intranetSubnets.Count();
                List <Subnet> extranetSubnets = await _context.Subnets.FromSql("SELECT * FROM dbo.Subnets WHERE Type = 1").ToListAsync();

                ViewData["SubnetExtranetCount"] = extranetSubnets.Count();
                List <Subnet> internetSubnets = await _context.Subnets.FromSql("SELECT * FROM dbo.Subnets WHERE Type = 0").ToListAsync();

                ViewData["SubnetInternetCount"] = internetSubnets.Count();
                List <Route> problemRoutes = await _context.Routes.FromSql("SELECT * FROM dbo.Routes WHERE Status = 1").ToListAsync();

                if (problemRoutes.Count() == 0)
                {
                    ViewData["RouteHealth"] = "OK";
                }
                else
                {
                    ViewData["RouteHealth"] = "NOT OK";
                }
            }
            return(View());
        }