function advise()

in services/ec2/ec2.class.php [176:307]


    function advise(){
        $objs = [];
        $securityGroups = [];
        
        $driver = 'ec2_compopt';
        if (class_exists($driver)){
            __info('... (Compute Optimizer) inspecting');
            $obj = new $driver($this->compOptClient);
            $obj->run();
            
            $objs['ComputeOptimizer'] = $obj->getInfo();
            unset($obj);
        }
        
        $driver = 'ec2_costExplorer';
        if (class_exists($driver)){
            __info('... (Cost Explorer) inspecting');
            $obj = new $driver($this->costExplorerClient);
            $obj->run();
            
            $objs['CostExplorer'] = $obj->getInfo();
            unset($obj);
        }
        
        $instances = $this->getResources();
        $driver = 'ec2_ec2';
        foreach($instances as $instance){
            if (class_exists($driver)){
                __info('... (EC2::Instance) inspecting ' . $instance['Instances'][0]['InstanceId']);
                $obj = new $driver($instance, $this->ec2Client);
                $obj->run();
            }
            
            $objs['EC2::' . $instance['Instances'][0]['InstanceId']] = $obj->getInfo();
            unset($obj);
            
            $instanceSGs = $this->getEC2SecurityGroups($instance);
            foreach($instanceSGs as $group){
                if(!isset($securityGroups[$group['GroupId']])){
                    $securityGroups[$group['GroupId']] = $group;
                }
            }
        }
        
        $ebsBlocks = $this->getEBS();
        $driver = 'ec2_ebs';
        foreach($ebsBlocks as $block){
            if (class_exists($driver)){
                __info('... (EBS::Volume) inspecting ' . $block['VolumeId']);
                $obj = new $driver($block, $this->ec2Client);
                $obj->run();
                
                $objs['EBS::' . $block['VolumeId']] = $obj->getInfo();
                unset($obj);
            }
        }
        
        $elbList = $this->getELB();
        $driver = 'ec2_elb';
        foreach($elbList as $elb){
            if (class_exists($driver)){
                __info('... (ELB::Load Balancer) inspecting ' . $elb['LoadBalancerName']);
                $obj = new $driver($elb, $this->elbClient);
                $obj->run();
            }
            
            $objs['ELB::' . $elb['LoadBalancerName']] = $obj->getInfo();
            unset($obj);
            
            
            $elbSGList = $this->getELBSecurityGroup($elb);
            
            foreach($elbSGList as $group){
                if(!isset($securityGroups[$group['GroupId']])){
                    $securityGroups[$group['GroupId']] = $group;
                }
            }
        }
        
        $elbClassicList = $this->getELBClassic();
        $driver = 'ec2_elbClassic';
        foreach($elbClassicList as $elb){
            if (class_exists($driver)){
                __info('... (ELB::Load Balancer Classic) inspecting ' . $elb['LoadBalancerName']);
                $obj = new $driver($elb, $this->elbClassicClient);
                $obj->run();
            }
            
            $objs['ELB Classic::' . $elb['LoadBalancerName']] = $obj->getInfo();
            unset($obj);
            
            $elbSGList = $this->getELBSecurityGroup($elb);
            
            foreach($elbSGList as $group){
                if(!isset($securityGroups[$group['GroupId']])){
                    $securityGroups[$group['GroupId']] = $group;
                }
            }
        }
        
        
        $driver = 'ec2_sg';
        foreach($securityGroups as $group){
            if(isset($objs[$group['GroupId']])){
                continue;
            }
            if (class_exists($driver)){
                __info('... (EC2::Security Group) inspecting ' . $group['GroupId']);
                $obj = new $driver($group, $this->ec2Client);
                $obj->run();
                
                $objs['SG::' . $group['GroupId']] = $obj->getInfo();
                unset($obj);
            }
        }
        
        
        $asgList = $this->getAsg();
        $driver = 'ec2_asg';
        foreach($asgList as $asg){
            if(class_exists($driver)){
                __info('... (ASG::Auto Scaling Group) inspecting ' . $asg['AutoScalingGroupName']);
                $obj = new $driver($asg, $this->asgClient, $this->elbClient, $this->elbClassicClient, $this->ec2Client);
                $obj->run();
            }
            
            $objs['ASG::' . $asg['AutoScalingGroupName']] = $obj->getInfo();
            unset($obj);
        }

        return $objs;
    }