public function GetServerExtendedInformation(DBServer $DBServer, $extended = false)
{
try {
$aws = $DBServer->GetEnvironmentObject()->aws($DBServer);
$iid = $DBServer->GetProperty(EC2_SERVER_PROPERTIES::INSTANCE_ID);
if (!$iid) {
return false;
}
$iinfo = $aws->ec2->instance->describe($iid)->get(0);
$blockStorage = null;
if (isset($iinfo->instancesSet)) {
if ($extended) {
$filter = array(array('name' => VolumeFilterNameType::attachmentInstanceId(), 'value' => $iid));
$ebs = $aws->ec2->volume->describe(null, $filter);
foreach ($ebs as $volume) {
/* @var $volume VolumeData */
$blockStorage[] = $volume->attachmentSet->get(0)->device . " - {$volume->size} Gb" . " (<a href='#/tools/aws/ec2/ebs/volumes/" . $volume->volumeId . "/view" . "?cloudLocation=" . $DBServer->GetCloudLocation() . "&platform=ec2'>" . $volume->volumeId . "</a>)";
//array('id' => $volume->volumeId, 'size' => $volume->size, 'device' => $volume->attachmentSet->get(0)->device);
}
}
$instanceData = $iinfo->instancesSet->get(0);
if (isset($iinfo->groupSet[0]->groupId)) {
$infoGroups = $iinfo->groupSet;
} elseif (isset($iinfo->instancesSet[0]->groupSet[0]->groupId)) {
$infoGroups = $instanceData->groupSet;
} else {
$infoGroups = array();
}
$groups = array();
foreach ($infoGroups as $sg) {
/* @var $sg \Scalr\Service\Aws\Ec2\DataType\SecurityGroupData */
$groups[] = $sg->groupName . " (<a href='#/security/groups/" . $sg->groupId . "/edit" . "?cloudLocation=" . $DBServer->GetProperty(EC2_SERVER_PROPERTIES::REGION) . "&platform=ec2'>" . $sg->groupId . "</a>)";
}
$tags = array();
if ($instanceData->tagSet->count() > 0) {
foreach ($instanceData->tagSet as $tag) {
/* @var $tag \Scalr\Service\Aws\Ec2\DataType\ResourceTagSetData */
if ($tag->value) {
$tags[] = "{$tag->key}={$tag->value}";
} else {
$tags[] = "{$tag->key}";
}
}
}
//monitoring isn't mandatory data set in the InstanceData
$monitoring = isset($instanceData->monitoring->state) ? $instanceData->monitoring->state : null;
if ($monitoring == 'disabled') {
$monitoring = "Disabled";
} else {
$monitoring = "Enabled";
}
$retval = array('Cloud Server ID' => $DBServer->GetProperty(EC2_SERVER_PROPERTIES::INSTANCE_ID), 'Owner ID' => $iinfo->ownerId, 'Image ID (AMI)' => $instanceData->imageId, 'Public DNS name' => $instanceData->dnsName, 'Private DNS name' => $instanceData->privateDnsName, 'Public IP' => $instanceData->ipAddress, 'Private IP' => $instanceData->privateIpAddress, 'Key name' => $instanceData->keyName, 'Instance type' => $instanceData->instanceType, 'Launch time' => $instanceData->launchTime->format('Y-m-d\\TH:i:s.000\\Z'), 'Architecture' => $instanceData->architecture, 'IAM Role' => isset($instanceData->iamInstanceProfile) && $instanceData->iamInstanceProfile instanceof IamInstanceProfileResponseData ? $instanceData->iamInstanceProfile->arn : null, 'Root device type' => $instanceData->rootDeviceType, 'Instance state' => $instanceData->instanceState->name . " ({$instanceData->instanceState->code})", 'Placement' => isset($instanceData->placement) ? $instanceData->placement->availabilityZone : null, 'Tenancy' => isset($instanceData->placement) ? $instanceData->placement->tenancy : null, 'EBS Optimized' => $instanceData->ebsOptimized ? "Yes" : "No", 'Monitoring (CloudWatch)' => $monitoring, 'Security groups' => implode(', ', $groups), 'Tags' => implode(', ', $tags));
if ($extended) {
try {
$statusInfo = $aws->ec2->instance->describeStatus($DBServer->GetProperty(EC2_SERVER_PROPERTIES::INSTANCE_ID))->get(0);
} catch (Exception $e) {
}
if (!empty($statusInfo)) {
if ($statusInfo->systemStatus->status == 'ok') {
$systemStatus = '<span style="color:green;">OK</span>';
} else {
$txtDetails = "";
if (!empty($statusInfo->systemStatus->details)) {
foreach ($statusInfo->systemStatus->details as $d) {
/* @var $d \Scalr\Service\Aws\Ec2\DataType\InstanceStatusDetailsSetData */
$txtDetails .= " {$d->name} is {$d->status},";
}
}
$txtDetails = trim($txtDetails, " ,");
$systemStatus = "<span style='color:red;'>" . $statusInfo->systemStatus->status . "</span> ({$txtDetails})";
}
if ($statusInfo->instanceStatus->status == 'ok') {
$iStatus = '<span style="color:green;">OK</span>';
} else {
$txtDetails = "";
foreach ($statusInfo->instanceStatus->details as $d) {
$txtDetails .= " {$d->name} is {$d->status},";
}
$txtDetails = trim($txtDetails, " ,");
$iStatus = "<span style='color:red;'>" . $statusInfo->instanceStatus->status . "</span> ({$txtDetails})";
}
} else {
$systemStatus = "Unknown";
$iStatus = "Unknown";
}
$retval['AWS System Status'] = $systemStatus;
$retval['AWS Instance Status'] = $iStatus;
}
if ($blockStorage) {
$retval['Block storage'] = implode(', ', $blockStorage);
}
if ($instanceData->subnetId) {
$retval['VPC ID'] = $instanceData->vpcId;
$retval['Subnet ID'] = $instanceData->subnetId;
$retval['SourceDesk Check'] = $instanceData->sourceDestCheck;
$ni = $instanceData->networkInterfaceSet->get(0);
if ($ni) {
$retval['Network Interface'] = $ni->networkInterfaceId;
}
}
if ($instanceData->reason) {
$retval['Reason'] = $instanceData->reason;
}
return $retval;
}
} catch (InstanceNotFoundException $e) {
return false;
} catch (Exception $e) {
throw $e;
}
return false;
}