public DataTable GetS3Buckets(string aprofile,string Region2Scan)
{
string accountid = GetAccountID(aprofile);
Amazon.Runtime.AWSCredentials credential;
DataTable ToReturn = AWSTables.GetComponentTable("S3");
RegionEndpoint Endpoint2scan = RegionEndpoint.USEast1;
//Convert the Region2Scan to an AWS Endpoint.
foreach (var aregion in RegionEndpoint.EnumerableAllRegions)
{
if (aregion.DisplayName.Equals(Region2Scan))
{
Endpoint2scan = aregion;
continue;
}
}
//Query Cloudwatch to get list of buckets and sizes in this here region
var Sizetable = S3SizeCloudWatch(aprofile, Region2Scan);
int sizerows = Sizetable.Rows.Count;
try
{
credential = new Amazon.Runtime.StoredProfileAWSCredentials(aprofile);
AmazonS3Client S3Client = new AmazonS3Client(credential, Endpoint2scan);
ListBucketsResponse response = S3Client.ListBuckets();
//Why are we getting USEast buckets? Because the Cloudwatch returns buckets by region, but list buckets does care about regions!
foreach (S3Bucket abucket in response.Buckets)
{
DataRow abucketrow = ToReturn.NewRow();
var name = abucket.BucketName;
DataRow bucketsizedata = AWSTables.GetS3SizesTable().NewRow();
Boolean havesize = true;
try//Lookup the record in the Sizetable for this bucket.
{
//This is equivalent to the LINQ query.
Boolean foundinsizetable = false;
List<string> bn = new List<string>();
foreach(var rabbit in Sizetable.AsEnumerable())
{
String thisun = rabbit["Bucket"].ToString();
bn.Add(thisun);
if (thisun.Equals(name))
{
bucketsizedata = rabbit;
foundinsizetable = true;
}
}
if(!foundinsizetable)
{
bn.Sort();
if (bn.Contains(name))
{
string rabbit = "Yes it does!";
}
//why not?
}
if (bucketsizedata == null)
{
abucketrow["EndDate"] = AWSTables.Shrug;
havesize = false;
}
}
catch
{
}
try
{
GetBucketLocationRequest gbr = new GetBucketLocationRequest();
gbr.BucketName = name;
GetBucketLocationResponse location = S3Client.GetBucketLocation(gbr);
var region = location.Location.Value;
if (region.Equals(""))
{
region = "us-east-1";
}
if (!region.Contains(Endpoint2scan.SystemName))
{
name = name;//Bucketname
region = region;//BucketRegion
string target = Endpoint2scan.SystemName;
continue;
}
var pointy = RegionEndpoint.GetBySystemName(region);
//Build a config that references the buckets region.
AmazonS3Config S3C = new AmazonS3Config();
S3C.RegionEndpoint = pointy;
AmazonS3Client BS3Client = new AmazonS3Client(credential, S3C);
var authregion = "";
var EP = BS3Client.Config.RegionEndpoint.DisplayName;
if (String.IsNullOrEmpty(BS3Client.Config.RegionEndpoint.DisplayName)) authregion = "";
else
{
authregion = BS3Client.Config.AuthenticationRegion;
}
string authservice = "";
if (string.IsNullOrEmpty(BS3Client.Config.AuthenticationServiceName)) authservice = "";
else
{
authservice = BS3Client.Config.AuthenticationServiceName;
}
var createddate = abucket.CreationDate;
string owner = "";
string grants = "";
string tags = "";
string lastaccess = "";
string defaultpage = "";
string website = "";
//Now start pulling der einen data.
GetACLRequest GACR = new GetACLRequest();
GACR.BucketName = name;
var ACL = BS3Client.GetACL(GACR);
var grantlist = ACL.AccessControlList;
owner = grantlist.Owner.DisplayName;
foreach (var agrant in grantlist.Grants)
{
if (grants.Length > 1) grants += "\n";
var gName = agrant.Grantee.DisplayName;
var gType = agrant.Grantee.Type.Value;
var aMail = agrant.Grantee.EmailAddress;
if (gType.Equals("Group"))
{
grants += gType + " - " + agrant.Grantee.URI + " - " + agrant.Permission + " - " + aMail;
}
else
{
grants += gName + " - " + agrant.Permission + " - " + aMail;
}
}
GetBucketWebsiteRequest GBWReq = new GetBucketWebsiteRequest();
GBWReq.BucketName = name;
GetBucketWebsiteResponse GBWRes = BS3Client.GetBucketWebsite(GBWReq);
defaultpage = GBWRes.WebsiteConfiguration.IndexDocumentSuffix;
if (defaultpage != null)
{
website = @"http://" + name + @".s3-website-" + region + @".amazonaws.com/" + defaultpage;
}
abucketrow["AccountID"] = accountid;
abucketrow["Profile"] = aprofile;
abucketrow["Bucket"] = name;
abucketrow["Region"] = region;
abucketrow["RegionEndpoint"] = EP;
abucketrow["AuthRegion"] = authregion;
abucketrow["AuthService"] = authservice;
abucketrow["CreationDate"] = createddate.ToString();
abucketrow["LastAccess"] = lastaccess;
abucketrow["Owner"] = owner;
abucketrow["Grants"] = grants;
abucketrow["StartDate"] = "NA";
abucketrow["StartSizeMin"] = "NA";
abucketrow["StartSizeAVG"] = "NA";
abucketrow["StartSizeMax"] = "NA";
abucketrow["EndDate"] = "NA";
abucketrow["EndSizeMin"] = "NA";
abucketrow["EndSizeAVG"] = "NA";
abucketrow["EndSizeMax"] = "NA";
abucketrow["EndSizeMaxBytes"] = 0;
if (havesize)
{
abucketrow["StartDate"] = bucketsizedata["StartDate"];
abucketrow["StartSizeMin"] = bucketsizedata["StartSizeMin"];
abucketrow["StartSizeAVG"] = bucketsizedata["StartSizeAVG"];
abucketrow["StartSizeMax"] = bucketsizedata["StartSizeMax"];
abucketrow["EndDate"] = bucketsizedata["EndDate"];
abucketrow["EndSizeMin"] = bucketsizedata["EndSizeMin"];
abucketrow["EndSizeAVG"] = bucketsizedata["EndSizeAVG"];
abucketrow["EndSizeMax"] = bucketsizedata["EndSizeMax"];
abucketrow["EndSizeMaxBytes"] = bucketsizedata["EndSizeMaxBytes"];
}
abucketrow["WebsiteHosting"] = website;
abucketrow["Logging"] = "X";
abucketrow["Events"] = "X";
abucketrow["Versioning"] = "X";
abucketrow["LifeCycle"] = "X";
abucketrow["Replication"] = "X";
abucketrow["Tags"] = "X";
abucketrow["RequesterPays"] = "X";
ToReturn.Rows.Add(abucketrow.ItemArray);
}
catch (Exception ex)
{
abucketrow["AccountID"] = accountid;
abucketrow["Profile"] = aprofile;
abucketrow["Bucket"] = name;
abucketrow["Region"] = ex.InnerException.Message;
if (havesize)
{
abucketrow["StartDate"] = bucketsizedata["StartDate"];
abucketrow["StartSizeMin"] = bucketsizedata["StartSizeMin"];
abucketrow["StartSizeAVG"] = bucketsizedata["StartSizeAVG"];
abucketrow["StartSizeMax"] = bucketsizedata["StartSizeMax"];
abucketrow["EndDate"] = bucketsizedata["EndDate"];
abucketrow["EndSizeMin"] = bucketsizedata["EndSizeMin"];
abucketrow["EndSizeAVG"] = bucketsizedata["EndSizeAVG"];
abucketrow["EndSizeMax"] = bucketsizedata["EndSizeMax"];
abucketrow["EndSizeMaxBytes"] = bucketsizedata["EndSizeMaxBytes"];
}
else
{
abucketrow["StartDate"] = "NA";
abucketrow["StartSizeMin"] = "NA";
abucketrow["StartSizeAVG"] = "NA";
abucketrow["StartSizeMax"] = "NA";
abucketrow["EndDate"] = "NA";
abucketrow["EndSizeMin"] = "NA";
abucketrow["EndSizeAVG"] = "NA";
abucketrow["EndSizeMax"] = "NA";
abucketrow["EndSizeMaxBytes"] = 0;
}
ToReturn.Rows.Add(abucketrow.ItemArray);
}
}
}
catch(Exception ex)
{
//Croak
}
int sizesreturned = Sizetable.Rows.Count;
int rowsreturned = ToReturn.Rows.Count;
return ToReturn;
}