Return to Snippet

Revision: 61657
at January 3, 2013 13:18 by cduquev


Initial Code
<?php

require_once('AWSSDKforPHP/sdk.class.php');

function checkOnline($domain) {
   $curlInit = curl_init($domain);
   curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,10);
   curl_setopt($curlInit,CURLOPT_HEADER,true);
   curl_setopt($curlInit,CURLOPT_NOBODY,true);
   curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);

   //get answer
   $response = curl_exec($curlInit);

   curl_close($curlInit);
   if ($response) return true;
   return false;
}

function sendNotificationEmail($message){
    $email = new AmazonSES();
    $response = $email->send_email(
            '[email protected]', // Source (aka From) Authorized Amazon SES sender
            array( // Destination (aka To)
                'ToAddresses' => array(
                    "[email protected]" // Email to send notifications

                ),
                
            ),
            array( // Message (long form)
                'Subject' => array(
                    'Data' => 'WebSite not available',
                    'Charset' => 'UTF-8'
                ),
                'Body' => array(
                    'Text' => array(
                        'Data' => utf8_encode($message), 
                        'Charset' => 'UTF-8'  
                    ),
                    'Html' => array(
                        'Data' => utf8_encode($message),
                        'Charset' => 'UTF-8' 
                    )
                )
            ),
            array( // Optional parameters
                //'ReplyToAddresses' => array('[email protected]', '[email protected]')
            )
        );

        // Success?
        return $response->isOK();
    
    
}

$Instances = array(
    'WebSite1'=>array(
        'instanceId'=>'i-1923cb7e',
        'testUrl'=>'http://www.domain1.com',
        
    ),
    'WebSite2'=>array(
        'instanceId'=>'i-32243d57',
        'testUrl'=>'http://www.domain2.com',
        
    ),
    'WebSite3'=>array(
        'instanceId'=>'i-ddcfc1bb',
        'testUrl'=>'http://www.domain3.com',
        
    )
    
    );
$ec2 = new AmazonEC2();

foreach ($Instances as $key => $val){
    
    echo $key." => ". $val["instanceId"] ;
    
    if(checkOnline($val["testUrl"])) { 
        echo "OnLine"; 

    }
    else{
        $response = $ec2->reboot_instances($val["instanceId"]);
        echo "OffLIne";
        if(!$response->isOK()){
            sendNotificationEmail("The WebSite ".$key." is not available and it couldn't be restarted \n please check status ".$val["testUrl"]);
            
        }
        else{
            sendNotificationEmail("The WebSite ".$key." and it's been restarted \n check status here ".$val["testUrl"]);
            
        }
    }
    
}


//You may add crontab using : */3    *    *    *    *  wget --spider 'http://www.yourdomain.com/scriptJob.php'





?>

Initial URL

                                

Initial Description
Script File launched every 3 minutes to check WebSite status.
It uses AWSSDKforPHP library http://docs.amazonwebservices.com/AWSSdkDocsPHP/latest/DeveloperGuide/php-dg-setup.html

Initial Title
Check AmazonEC2 WebSite status and if server is down  send notification and restart instance

Initial Tags
curl

Initial Language
PHP