Scalr\Modules\Platforms\Ec2\Ec2PlatformModule::GetServerExtendedInformation PHP Method

GetServerExtendedInformation() public method

See also: Scalr\Modules\PlatformModuleInterface::GetServerExtendedInformation()
public GetServerExtendedInformation ( DBServer $DBServer, $extended = false )
$DBServer DBServer
    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;
    }