Esempio n. 1
0
        public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems)
        {
            AmazonEC2Config config = new AmazonEC2Config();

            config.RegionEndpoint = region;
            ConfigureClient(config);
            AmazonEC2Client client = new AmazonEC2Client(creds, config);

            DescribeVolumesResponse resp = new DescribeVolumesResponse();

            do
            {
                DescribeVolumesRequest req = new DescribeVolumesRequest
                {
                    NextToken = resp.NextToken
                    ,
                    MaxResults = maxItems
                };

                resp = client.DescribeVolumes(req);
                CheckError(resp.HttpStatusCode, "200");

                foreach (var obj in resp.Volumes)
                {
                    AddObject(obj);
                }
            }while (!string.IsNullOrEmpty(resp.NextToken));
        }
Esempio n. 2
0
        /// <summary>
        /// List all volumes found in region
        /// </summary>
        public static void ListVolumes()
        {
            var ec2 = Ec2Helper.CreateClient();

            DescribeVolumesRequest  rq = new DescribeVolumesRequest();
            DescribeVolumesResponse rs = ec2.DescribeVolumes(rq);

            foreach (Volume v in rs.Volumes)
            {
                Console.WriteLine(v.VolumeId);


                DescribeTagsRequest trq = new DescribeTagsRequest();
                trq.Filters.Add(new Filter()
                {
                    Name = "resource-id", Values = new List <string>()
                    {
                        v.VolumeId
                    }
                });
                DescribeTagsResponse trs = ec2.DescribeTags(trq);
                foreach (TagDescription t in trs.Tags)
                {
                    Console.WriteLine("  " + t.Key + "=" + t.Value);
                }
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Unmarshaller the response from the service to the response class.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context)
        {
            DescribeVolumesResponse response = new DescribeVolumesResponse();

            context.Read();
            int targetDepth = context.CurrentDepth;

            while (context.ReadAtDepth(targetDepth))
            {
                if (context.TestExpression("NextToken", targetDepth))
                {
                    var unmarshaller = StringUnmarshaller.Instance;
                    response.NextToken = unmarshaller.Unmarshall(context);
                    continue;
                }
                if (context.TestExpression("Volumes", targetDepth))
                {
                    var unmarshaller = new ListUnmarshaller <Volume, VolumeUnmarshaller>(VolumeUnmarshaller.Instance);
                    response.Volumes = unmarshaller.Unmarshall(context);
                    continue;
                }
            }

            return(response);
        }
        /// <summary>
        /// Unmarshaller the response from the service to the response class.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context)
        {
            DescribeVolumesResponse response = new DescribeVolumesResponse();

            int originalDepth = context.CurrentDepth;
            int targetDepth   = originalDepth + 1;

            if (context.IsStartOfDocument)
            {
                targetDepth = 2;
            }

            while (context.ReadAtDepth(originalDepth))
            {
                if (context.IsStartElement || context.IsAttribute)
                {
                    if (context.TestExpression("nextToken", targetDepth))
                    {
                        var unmarshaller = StringUnmarshaller.Instance;
                        response.NextToken = unmarshaller.Unmarshall(context);
                        continue;
                    }
                    if (context.TestExpression("volumeSet/item", targetDepth))
                    {
                        var unmarshaller = VolumeUnmarshaller.Instance;
                        var item         = unmarshaller.Unmarshall(context);
                        response.Volumes.Add(item);
                        continue;
                    }
                }
            }

            return(response);
        }
Esempio n. 5
0
        /// <summary>
        /// List all volumes found in region
        /// </summary>
        public static void ListVolumes()
        {
            AmazonEC2 ec2 = Ec2Helper.CreateClient();

            DescribeVolumesRequest  rq = new DescribeVolumesRequest();
            DescribeVolumesResponse rs = ec2.DescribeVolumes(rq);

            foreach (Volume v in rs.DescribeVolumesResult.Volume)
            {
                Console.WriteLine(v.VolumeId);


                DescribeTagsRequest trq = new DescribeTagsRequest();
                trq.WithFilter(new Filter()
                {
                    Name = "resource-id", Value = new List <string>()
                    {
                        v.VolumeId
                    }
                });
                DescribeTagsResponse trs = ec2.DescribeTags(trq);
                foreach (ResourceTag t in trs.DescribeTagsResult.ResourceTag)
                {
                    Console.WriteLine("  " + t.Key + "=" + t.Value);
                }
            }
        }
Esempio n. 6
0
        private DescribeVolumesResponse GetEbsVolumes()
        {
            DescribeVolumesRequest  request = new DescribeVolumesRequest();
            DescribeVolumesResponse resp    = ec2.DescribeVolumes(request);

            return(resp);
        }
Esempio n. 7
0
        public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context)
        {
            DescribeVolumesResponse response = new DescribeVolumesResponse();

            context.Read();

            UnmarshallResult(context, response);
            return(response);
        }
        public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context)
        {
            DescribeVolumesResponse response = new DescribeVolumesResponse();

            context.Read();

            response.DescribeVolumesResult = DescribeVolumesResultUnmarshaller.GetInstance().Unmarshall(context);

            return(response);
        }
Esempio n. 9
0
        public AwsObjectRetriever(string accessKeyID, string secretKeyID, Amazon.RegionEndpoint region, ILogProvider logProvider, IStatusProvider statusProvider)
        {
            _logProvider    = logProvider;
            _statusProvider = statusProvider;

            createEC2Client(accessKeyID, secretKeyID, region);
            createLBClient(accessKeyID, secretKeyID, region);
            REGION = region.SystemName;

            _vpcs      = GetAllVpcs();
            _instances = GetAllInstances();
            _volumes   = GetAllVolumes();
            Application.DoEvents();
            _Loadbalancers = GetAllLBs();
        }
Esempio n. 10
0
        public static void GetTopology()
        {
            IAmazonEC2                  ec2 = AWSClientFactory.CreateAmazonEC2Client();
            IAmazonAutoScaling          asg = AWSClientFactory.CreateAmazonAutoScalingClient();
            IAmazonElasticLoadBalancing elb = AWSClientFactory.CreateAmazonElasticLoadBalancingClient();

            DescribeVpcsResponse vpcResponse = ec2.DescribeVpcs();

            WriteFile("vpcs.csv", vpcResponse.Vpcs);

            DescribeInstancesResponse instanceResponse = ec2.DescribeInstances();
            var reservationIndex = 0;

            foreach (var reservation in instanceResponse.Reservations)
            {
                if (reservationIndex == 0)
                {
                    WriteFile("instances.csv", reservation.Instances);
                }
                else
                {
                    AppendFile("instances.csv", reservation.Instances);
                }
                reservationIndex++;
            }

            DescribeNetworkAclsResponse naclResponse = ec2.DescribeNetworkAcls();

            WriteFile("nacls.csv", naclResponse.NetworkAcls);

            Amazon.EC2.Model.DescribeTagsResponse tagsResponse = ec2.DescribeTags();
            WriteFile("tags.csv", tagsResponse.Tags);

            DescribeVolumesResponse volumesResponse = ec2.DescribeVolumes();

            WriteFile("volumes.csv", volumesResponse.Volumes);

            DescribeLoadBalancersResponse elbResponse = elb.DescribeLoadBalancers();

            WriteFile("elbs.csv", elbResponse.LoadBalancerDescriptions);

            DescribeInternetGatewaysResponse igResponse = ec2.DescribeInternetGateways();

            WriteFile("igs.csv", igResponse.InternetGateways);
        }
Esempio n. 11
0
        public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems)
        {
            AmazonOpsWorksConfig config = new AmazonOpsWorksConfig();

            config.RegionEndpoint = region;
            ConfigureClient(config);
            AmazonOpsWorksClient client = new AmazonOpsWorksClient(creds, config);

            DescribeVolumesResponse resp = new DescribeVolumesResponse();
            DescribeVolumesRequest  req  = new DescribeVolumesRequest
            {
            };

            resp = client.DescribeVolumes(req);
            CheckError(resp.HttpStatusCode, "200");

            foreach (var obj in resp.Volumes)
            {
                AddObject(obj);
            }
        }
        public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context)
        {
            DescribeVolumesResponse response = new DescribeVolumesResponse();

            int targetDepth = 2;

            while (context.Read())
            {
                if (context.IsStartElement || context.IsAttribute)
                {
                    if (context.TestExpression("volumeSet/item", targetDepth))
                    {
                        response.Volumes.Add(VolumeUnmarshaller.GetInstance().Unmarshall(context));

                        continue;
                    }
                }
            }


            return(response);
        }
Esempio n. 13
0
        private static void UnmarshallResult(JsonUnmarshallerContext context, DescribeVolumesResponse response)
        {
            int originalDepth = context.CurrentDepth;
            int targetDepth   = originalDepth + 1;

            while (context.Read())
            {
                if (context.TestExpression("Volumes", targetDepth))
                {
                    context.Read();
                    response.Volumes = new List <Volume>();
                    VolumeUnmarshaller unmarshaller = VolumeUnmarshaller.GetInstance();
                    while (context.Read())
                    {
                        JsonToken token = context.CurrentTokenType;
                        if (token == JsonToken.ArrayStart)
                        {
                            continue;
                        }
                        if (token == JsonToken.ArrayEnd)
                        {
                            break;
                        }
                        response.Volumes.Add(unmarshaller.Unmarshall(context));
                    }
                    continue;
                }

                if (context.CurrentDepth <= originalDepth)
                {
                    return;
                }
            }

            return;
        }
        public List <InstanceDetail> GetVMProperties()
        {
            List <AWSProfile> profile;

            profile = SqlHelper.GetAWSAccounts();
            List <InstanceDetail> profilelist = new List <InstanceDetail>();

            //foreach (var profile_ in profile)
            //{
            //    Amazon.Util.ProfileManager.RegisterProfile(profile_.ProfileName, profile_.Accesskey, profile_.Secretkey);
            //}

            try
            {
                foreach (var profile_ in profile)
                {
                    var regions = Amazon.RegionEndpoint.EnumerableAllRegions;
                    //Amazon.Runtime.AWSCredentials credentials = new Amazon.Runtime.StoredProfileAWSCredentials(profile_.ProfileName);
                    foreach (var r in regions)
                    {
                        string region_;
                        if (r.SystemName != "us-gov-west-1" && r.SystemName != "cn-north-1")
                        {
                            region_ = r.SystemName;
                            var region = RegionEndpoint.GetBySystemName(region_);

                            AmazonEC2Client           ec2            = new AmazonEC2Client(profile_.Accesskey, profile_.Secretkey, region);
                            DescribeInstancesRequest  request        = new DescribeInstancesRequest();
                            DescribeInstancesResponse response       = ec2.DescribeInstances(request);
                            DescribeVolumesRequest    volumeRequest  = new DescribeVolumesRequest();
                            DescribeVolumesResponse   volumeResponse = ec2.DescribeVolumes(volumeRequest);
                            int size = 0;
                            foreach (var volume in volumeResponse.Volumes)
                            {
                                size += volume.Size;
                            }
                            List <Reservation> result = response.Reservations;
                            foreach (var item in result)
                            {
                                List <Instance> results = item.Instances;
                                foreach (var instance in results)
                                {
                                    InstanceDetail p = new InstanceDetail();
                                    p.InstanceId = instance.InstanceId.ToString();
                                    DescribeInstanceStatusRequest req = new DescribeInstanceStatusRequest();
                                    req.InstanceIds.Add(p.InstanceId);
                                    DescribeInstanceStatusResponse resp = ec2.DescribeInstanceStatus(req);
                                    var statuses = resp.InstanceStatuses;
                                    foreach (var status in statuses)
                                    {
                                        p.InstanceState = status.Status.Status;
                                    }

                                    if (p.InstanceState == null)
                                    {
                                        p.InstanceState = "Not Available";
                                    }

                                    p.Region   = r.SystemName;
                                    p.DiskSize = (size / result.Count).ToString() + " GB"; //
                                    if (instance.PublicIpAddress != null)
                                    {
                                        p.IpAddress = instance.PublicIpAddress;
                                    }
                                    else
                                    {
                                        p.IpAddress = "Not Assigned";
                                    }

                                    p.ProfileName   = profile_.ProfileName;
                                    p.InstanceType  = instance.InstanceType;
                                    p.Status        = instance.State.Name.Value;
                                    p.ResourceGroup = "Not Applicable";
                                    if (instance.IamInstanceProfile != null)
                                    {
                                        p.MachineName = instance.IamInstanceProfile.Arn;
                                    }
                                    else
                                    {
                                        p.MachineName = "Not Assigned";
                                    }
                                    p.accountId = profile_.accountId;
                                    var type = instance.InstanceType;
                                    p.Type = "virtualMachines";
                                    var b = instance.Tags.Count;
                                    if (b != 0)
                                    {
                                        p.MachineName = instance.Tags[0].Value;
                                    }
                                    if (instance.Platform != null)
                                    {
                                        p.OSType = instance.Platform;
                                    }
                                    else
                                    {
                                        p.OSType = "Amazon Linux";
                                    }

                                    profilelist.Add(p);
                                }
                            }
                        }
                    }
                }

                return(profilelist);
            }
            catch (Exception e)
            {
                this.log.Error(e);
                return(null);
            }
        }
        public static DescribeVolumesResponse Unmarshall(UnmarshallerContext context)
        {
            DescribeVolumesResponse describeVolumesResponse = new DescribeVolumesResponse();

            describeVolumesResponse.HttpResponse = context.HttpResponse;
            describeVolumesResponse.RequestId    = context.StringValue("DescribeVolumes.RequestId");
            describeVolumesResponse.TotalCount   = context.IntegerValue("DescribeVolumes.TotalCount");
            describeVolumesResponse.PageNumber   = context.IntegerValue("DescribeVolumes.PageNumber");
            describeVolumesResponse.PageSize     = context.IntegerValue("DescribeVolumes.PageSize");

            List <DescribeVolumesResponse.DescribeVolumes_Volume> describeVolumesResponse_volumes = new List <DescribeVolumesResponse.DescribeVolumes_Volume>();

            for (int i = 0; i < context.Length("DescribeVolumes.Volumes.Length"); i++)
            {
                DescribeVolumesResponse.DescribeVolumes_Volume volume = new DescribeVolumesResponse.DescribeVolumes_Volume();
                volume.VolumeId                      = context.StringValue("DescribeVolumes.Volumes[" + i + "].VolumeId");
                volume.RegionId                      = context.StringValue("DescribeVolumes.Volumes[" + i + "].RegionId");
                volume.ZoneId                        = context.StringValue("DescribeVolumes.Volumes[" + i + "].ZoneId");
                volume.VolumeName                    = context.StringValue("DescribeVolumes.Volumes[" + i + "].VolumeName");
                volume.Description                   = context.StringValue("DescribeVolumes.Volumes[" + i + "].Description");
                volume.Category                      = context.StringValue("DescribeVolumes.Volumes[" + i + "].Category");
                volume.Size                          = context.IntegerValue("DescribeVolumes.Volumes[" + i + "].Size");
                volume.SourceSnapshotId              = context.StringValue("DescribeVolumes.Volumes[" + i + "].SourceSnapshotId");
                volume.AutoSnapshotPolicyId          = context.StringValue("DescribeVolumes.Volumes[" + i + "].AutoSnapshotPolicyId");
                volume.SnapshotLinkId                = context.StringValue("DescribeVolumes.Volumes[" + i + "].SnapshotLinkId");
                volume.Status                        = context.StringValue("DescribeVolumes.Volumes[" + i + "].Status");
                volume.EnableAutomatedSnapshotPolicy = context.BooleanValue("DescribeVolumes.Volumes[" + i + "].EnableAutomatedSnapshotPolicy");
                volume.CreationTime                  = context.StringValue("DescribeVolumes.Volumes[" + i + "].CreationTime");
                volume.VolumeChargeType              = context.StringValue("DescribeVolumes.Volumes[" + i + "].VolumeChargeType");
                volume.MountInstanceNum              = context.IntegerValue("DescribeVolumes.Volumes[" + i + "].MountInstanceNum");
                volume.Encrypted                     = context.BooleanValue("DescribeVolumes.Volumes[" + i + "].Encrypted");

                List <DescribeVolumesResponse.DescribeVolumes_Volume.DescribeVolumes_OperationLock> volume_operationLocks = new List <DescribeVolumesResponse.DescribeVolumes_Volume.DescribeVolumes_OperationLock>();
                for (int j = 0; j < context.Length("DescribeVolumes.Volumes[" + i + "].OperationLocks.Length"); j++)
                {
                    DescribeVolumesResponse.DescribeVolumes_Volume.DescribeVolumes_OperationLock operationLock = new DescribeVolumesResponse.DescribeVolumes_Volume.DescribeVolumes_OperationLock();
                    operationLock.LockReason = context.StringValue("DescribeVolumes.Volumes[" + i + "].OperationLocks[" + j + "].LockReason");

                    volume_operationLocks.Add(operationLock);
                }
                volume.OperationLocks = volume_operationLocks;

                List <DescribeVolumesResponse.DescribeVolumes_Volume.DescribeVolumes_MountInstance> volume_mountInstances = new List <DescribeVolumesResponse.DescribeVolumes_Volume.DescribeVolumes_MountInstance>();
                for (int j = 0; j < context.Length("DescribeVolumes.Volumes[" + i + "].MountInstances.Length"); j++)
                {
                    DescribeVolumesResponse.DescribeVolumes_Volume.DescribeVolumes_MountInstance mountInstance = new DescribeVolumesResponse.DescribeVolumes_Volume.DescribeVolumes_MountInstance();
                    mountInstance.InstanceId   = context.StringValue("DescribeVolumes.Volumes[" + i + "].MountInstances[" + j + "].InstanceId");
                    mountInstance.Device       = context.StringValue("DescribeVolumes.Volumes[" + i + "].MountInstances[" + j + "].Device");
                    mountInstance.AttachedTime = context.StringValue("DescribeVolumes.Volumes[" + i + "].MountInstances[" + j + "].AttachedTime");

                    volume_mountInstances.Add(mountInstance);
                }
                volume.MountInstances = volume_mountInstances;

                List <DescribeVolumesResponse.DescribeVolumes_Volume.DescribeVolumes_Tag> volume_tags = new List <DescribeVolumesResponse.DescribeVolumes_Volume.DescribeVolumes_Tag>();
                for (int j = 0; j < context.Length("DescribeVolumes.Volumes[" + i + "].Tags.Length"); j++)
                {
                    DescribeVolumesResponse.DescribeVolumes_Volume.DescribeVolumes_Tag tag = new DescribeVolumesResponse.DescribeVolumes_Volume.DescribeVolumes_Tag();
                    tag.TagKey   = context.StringValue("DescribeVolumes.Volumes[" + i + "].Tags[" + j + "].TagKey");
                    tag.TagValue = context.StringValue("DescribeVolumes.Volumes[" + i + "].Tags[" + j + "].TagValue");

                    volume_tags.Add(tag);
                }
                volume.Tags = volume_tags;

                describeVolumesResponse_volumes.Add(volume);
            }
            describeVolumesResponse.Volumes = describeVolumesResponse_volumes;

            return(describeVolumesResponse);
        }
Esempio n. 16
0
        /// <summary>
        /// Check for any volumes that have a snapshot scheduled based on the schedule in the snapshotSchedule tag key.
        /// </summary>
        public static void CheckForScheduledSnapshots()
        {
            Console.WriteLine("Checking for scheduled snapshots...");

            AmazonEC2 ec2 = Ec2Helper.CreateClient();

            DescribeVolumesRequest rq = new DescribeVolumesRequest();

            rq.WithFilter(new Filter()
            {
                Name = "tag-key", Value = new List <string>()
                {
                    "snapshotSchedule"
                }
            });
            DescribeVolumesResponse rs = ec2.DescribeVolumes(rq);

            foreach (Volume v in rs.DescribeVolumesResult.Volume)
            {
                string[] sch2 = Ec2Helper.GetTagValue(v.Tag, "snapshotSchedule").Split(' ');

                string volumename = Ec2Helper.GetTagValue(v.Tag, "Name");


                DateTime lastSnap;     // date of last snapshot
                DateTime nextSnap;     // the next backup that should have occured based on last backup
                DateTime nextNextSnap; // the next backup that should occur assuming a backup runs now or ran at the last proper time

                DateTime now = DateTime.UtcNow;

                if (!DateTime.TryParse(Ec2Helper.GetTagValue(v.Tag, "lastSnapshot"), out lastSnap))
                {
                    lastSnap = Convert.ToDateTime("1/1/2010");
                }


                Console.WriteLine("Checking " + v.VolumeId + " / " + volumename + "...");
//sch2 = ("hourly 4 :30 x30days").Split(' ');
//lastSnap = Convert.ToDateTime("2/29/2012 6:00:15pm");
//now = Convert.ToDateTime("2/29/2012 10:00:14pm");



                switch (sch2[0])
                {
                case "hourly":     // hourly, hourly 1 :15, hourly :30, hourly 4 (pass it hours between backups & when on the hour to do it, any order; defaults to every hour on the hour)

                    int ah = GetAfterTheHour(sch2, 0);
                    int hi = GetInt(sch2, 1);

                    nextSnap = lastSnap.AddMinutes(-lastSnap.Minute).AddSeconds(-lastSnap.Second).AddMilliseconds(-lastSnap.Millisecond);
                    nextSnap = nextSnap.AddHours(hi).AddMinutes(ah);

                    // this is not right
                    nextNextSnap = now.AddMinutes(-now.Minute).AddSeconds(-now.Second).AddMilliseconds(-now.Millisecond);
                    nextNextSnap = nextNextSnap.AddMinutes(ah).AddHours(hi);

                    break;

                case "daily":     // daily, 3pm, daily 15:15, daily 3:30pm (times are UTC; defaults to midnight UTC)

                    DateTime hour = GetTime(sch2, Convert.ToDateTime("0:00"));

                    nextSnap = lastSnap.Date.AddDays(1).AddTicks(hour.TimeOfDay.Ticks);

                    nextNextSnap = now.Date.AddDays(1).AddTicks(hour.TimeOfDay.Ticks);

                    break;

                case "weekly":     // weekly, weekly sunday, weekly thursday 3pm (times are UTC; defaults to sunday midnight UTC)

                    DateTime  whour = GetTime(sch2, Convert.ToDateTime("0:00"));
                    DayOfWeek dow   = GetDow(sch2, DayOfWeek.Sunday);

                    if (lastSnap.DayOfWeek >= dow)
                    {
                        nextSnap = lastSnap.Date.AddDays(-(int)lastSnap.DayOfWeek).AddDays(7 + (int)dow).AddTicks(whour.TimeOfDay.Ticks);
                    }
                    else
                    {
                        nextSnap = lastSnap.Date.AddDays(-(int)lastSnap.DayOfWeek).AddDays((int)dow).AddTicks(whour.TimeOfDay.Ticks);
                    }

                    nextNextSnap = now.Date.AddDays(-(int)now.DayOfWeek).AddDays(7 + (int)dow).AddTicks(whour.TimeOfDay.Ticks);
                    if (nextSnap == nextNextSnap)
                    {
                        nextNextSnap = nextNextSnap.AddDays(7);
                    }

                    break;

                default:
                    lastSnap     = now.AddYears(1);
                    nextSnap     = lastSnap;
                    nextNextSnap = lastSnap;
                    break;
                }


//Console.WriteLine("last=" + lastSnap.ToString());
//Console.WriteLine("now=" + now);
//Console.WriteLine("next=" + nextSnap.ToString());
//Console.WriteLine("nextNext=" + nextNextSnap.ToString());
//Console.ReadKey();
//return;
                if (nextSnap <= now)
                {
                    // create snapshot of volume

                    string expires     = "";
                    int    expireHours = GetExpireHours(sch2, 0);
                    if (expireHours > 0)
                    {
                        expires = now.AddHours(expireHours).ToString();
                    }


                    Backup(volumename, "automatic", v.VolumeId, volumename, Ec2Helper.GetInstanceName(v.Attachment[0].InstanceId), expires);


                    // update volume tags

                    CreateTagsRequest rqq = new CreateTagsRequest();

                    rqq.WithResourceId(v.VolumeId);

                    nextSnap = nextSnap.AddSeconds(-nextSnap.Second).AddMilliseconds(-nextSnap.Millisecond);

                    rqq.WithTag(new Tag[] {
                        new Tag {
                            Key = "lastSnapshot", Value = now.ToString()
                        },
                        new Tag {
                            Key = "nextSnapshot", Value = nextNextSnap.ToString()
                        }
                    });

                    var createTagResponse = ec2.CreateTags(rqq);
                }
                else
                {
                    Console.WriteLine("    Next scheduled " + nextSnap.ToString());
                }
            }
        }
Esempio n. 17
0
        void MonitorFunction()
        {
            Thread.CurrentThread.Name = "MonitorThread";
            Program.TraceLine("Monitoring thread started...");
            Program.MonitorMessage = "Monitor starting...";
            while (true)
            {
                try
                {
                    //TEST ZONE
                    {
                    }
                    //Now continues normally


                    lock (Ec2Lock) { if (!RunMonitoring)
                                     {
                                         return;
                                     }
                    }
                    DescribeInstancesResponse respEc2 = GetRunningInstances();
                    UpdateClassOfObjects(currentStatusEc2, respEc2.DescribeInstancesResult.Reservation);
                    Program.MonitorMessage = "Updated EC2s...";
                    foreach (ZAwsEc2 ec2Instance in CurrentEc2s)
                    {
                        lock (Ec2Lock) { if (!RunMonitoring)
                                         {
                                             return;
                                         }
                        }
                        ec2Instance.UpdateInfo();
                        Program.MonitorMessage = "Updated EC2 " + ec2Instance.Name;
                    }

                    lock (Ec2Lock) { if (!RunMonitoring)
                                     {
                                         return;
                                     }
                    }
                    DescribeAddressesResponse respElasitIp = GetElasticIps();
                    UpdateClassOfObjects(currentStatusElIps, respElasitIp.DescribeAddressesResult.Address);
                    Program.MonitorMessage = "Updated elastic IPs";

                    lock (Ec2Lock) { if (!RunMonitoring)
                                     {
                                         return;
                                     }
                    }
                    ListHostedZonesResponse route53Zones = GetHostedZones();
                    UpdateClassOfObjects(currentHostedZones, route53Zones.ListHostedZonesResult.HostedZones);
                    Program.MonitorMessage = "Updated hosted zones...";

                    foreach (ZAwsHostedZone zone in CurrentHostedZones)
                    {
                        lock (Ec2Lock) { if (!RunMonitoring)
                                         {
                                             return;
                                         }
                        }
                        zone.UpdateInfo();
                        Program.MonitorMessage = "Updated zone " + zone.Name;
                    }

                    /*
                     * We will not be checking S3 service, because that actually costs money!
                     * lock (Ec2Lock) { if (!RunMonitoring) { return; } }
                     * ListBucketsResponse s3Buckects = GetBuckets();
                     * UpdateClassOfObjects(currentS3Buckets, s3Buckects.Buckets);
                     * Program.MonitorMessage = "Updated S3 Buckets...";
                     * */

                    lock (Ec2Lock) { if (!RunMonitoring)
                                     {
                                         return;
                                     }
                    }
                    DescribeSnapshotsResponse respEc2Snapshots = GetSnapshots();
                    UpdateClassOfObjects(currentSnapshots, respEc2Snapshots.DescribeSnapshotsResult.Snapshot);
                    Program.MonitorMessage = "Updated EC2 Snapshots...";

                    lock (Ec2Lock) { if (!RunMonitoring)
                                     {
                                         return;
                                     }
                    }
                    DescribeKeyPairsResponse respKeyPairs = GetKeyPairs();
                    UpdateClassOfObjects(currentKeyPairs, respKeyPairs.DescribeKeyPairsResult.KeyPair);
                    Program.MonitorMessage = "Updated KeyPairs...";

                    lock (Ec2Lock) { if (!RunMonitoring)
                                     {
                                         return;
                                     }
                    }
                    DescribeSecurityGroupsResponse respSecGroups = GetSecurityGroups();
                    UpdateClassOfObjects(currentSecGroups, respSecGroups.DescribeSecurityGroupsResult.SecurityGroup);
                    Program.MonitorMessage = "Updated Sec Groups...";

                    lock (Ec2Lock) { if (!RunMonitoring)
                                     {
                                         return;
                                     }
                    }
                    DescribeImagesResponse respAmis = GetAmis();
                    UpdateClassOfObjects(currentAmis, respAmis.DescribeImagesResult.Image);
                    Program.MonitorMessage = "Updated AMIs...";

                    lock (Ec2Lock) { if (!RunMonitoring)
                                     {
                                         return;
                                     }
                    }
                    DescribeVolumesResponse respEbsVolumes = GetEbsVolumes();
                    UpdateClassOfObjects(currentEbsVolumes, respEbsVolumes.DescribeVolumesResult.Volume);
                    Program.MonitorMessage = "Updated EBS volumes...";

                    lock (Ec2Lock) { if (!RunMonitoring)
                                     {
                                         return;
                                     }
                    }
                    DescribeSpotInstanceRequestsResponse respSpotRequests = GetSpotRequests();
                    UpdateClassOfObjects(currentSpotRequests, respSpotRequests.DescribeSpotInstanceRequestsResult.SpotInstanceRequest);
                    Program.MonitorMessage = "Updated spot requests...";

                    lock (Ec2Lock) { if (!RunMonitoring)
                                     {
                                         return;
                                     }
                    }

                    if (ThreadInRecovery)
                    {
                        Program.TraceLine("Monitoring working fine again...");
                        ThreadInRecovery = false;
                    }
                }
                catch (Exception ex)
                {
                    Program.TraceLine("Monitoring thread encountered an error. Will restart in {0}...", ex, ThreadInRecovery ? "1 minute" : "5 seconds");
                    Program.MonitorMessage = "Monitor paused...";
                    for (int i = 0; i < (ThreadInRecovery ? 600 : 50); i++)
                    {
                        lock (Ec2Lock) { if (!RunMonitoring)
                                         {
                                             return;
                                         }
                        }
                        Thread.Sleep(100);
                    }
                    Program.TraceLine("Monitoring thread trying to recover...");
                    Program.MonitorMessage = "Monitor restarting...";
                    ThreadInRecovery       = true;
                }
                finally
                {
                    if (!RunMonitoring)
                    {
                        Program.MonitorMessage = "Monitor stopped.";
                    }
                }
            }
        }