さくらインターネットVPSリソース情報自動報告プログラム(Ver.0.0.3)

XWSS016522-s

さくらインターネットVPSリソース情報自動報告プログラム(Ver.0.0.1)」のアップデートをリリースします。

スポンサードリンク

アップデート内容

Ver.0.02

XWSS016522-s

このバージョンでは、ホスト名を取得するようにしました。

VPS のIP アドレスは、Conf ファイルでログイン情報として記述しますので、VPS コントロールパネルに表示される情報を解析する方法ではなく、Conf ファイルに記載されたIP アドレスからホスト名を取得するようになっています。

取得した情報は、メール本文にIP アドレスとともに記載され、複数のVPS を管理する際に間違いが起きにくいように役立てることができます。

Ver.0.03

XWSS016523-s

このバージョンでは、ファイルを保存しようとするディレクトリの存在チェックを行い、不存在の場合は作成するようになりました。

これにより、予めディレクトリを作成しておかなくても動的にチェックして作成することができるようになりました。現在のところ、作成されるディレクトリは「0755」に固定されています。

ちなみに、設定ファイルの終わりに「$save_path = “../data/” . $ipaddress . “/”;」などとすると、複数のVPS のグラフデータをIP アドレス毎に分けて保存することができます(が、ホスト名は、設定ファイルが読み込まれた後に取得されるので、現在のところ、ディレクトリ名に使用できません)。

ソースコード

sakuravps.php

<?php
/* ==============================================
 *
 *  SAKURA Internet Resources Reporter
 *
 *             for SAKURA VPS CONTROL PANEL
 *
 * ==============================================
 *  License: GNU GPL
 *  Code   : PHP, UTF-8
 *  Auther : pc.casey.jp, 2013
 *  Version: 
 *     Ver.0.0.1 2013.03.17 1st.
 *     Ver.0.0.2 2013.03.19 add hostname by ip address.
 *     Ver.0.0.3 2013.03.19 add check and make dir.
 *  Usage  :
 *     - shell
 *        php /virtual/path/to/sakuravps.php
 *     - cron
 *        see sakuravps.sh file
 *   - http (no recomend)
 *        http://example.com/sakuravps.php
 */

/* ------------------------------------
 *    settings
 * ------------------------------------*/

// conf file
$conf = dirname(__FILE__) . '/sakuravps.conf';

/* ----------------------------------
 *    define [do not change!]
 * ----------------------------------*/
// program version
$version = "0.0.3";

// get start time
$sTime = time();

// loggin page url
$url = 'https://secure.sakura.ad.jp/vpscontrol/';

// dev
$debug = false;

/* ------------------------------------
 *    MAIN section
 * ------------------------------------*/

// start output
header("HTTP/1.0 200 OK");
header("Content-type:text/html;charset=utf-8");

// read config file
if(file_exists($conf)){
    require_once $conf;
}else{
    die('Can not load a configuration file');
}

// program name
$host_name = isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : php_uname("n");
$program_name  = "SAKURA Internet Resources Reporter ";
$program_name .= "for SAKURA VPS CONTROL PANEL Ver.";
$program_name .= $version . " on " . $host_name;
$program_name .= " (C) http://pc.casey.jp , 2013";

// get date time
//$date = date('Y/m/d H:i:s');
$file_date = date('Y-m-d_H-i-s');

// get data from sakura internet
$saved_files = getData();

// saved files
$mail_body .= "\n\nSaved Files:\n";
if($saved_files){
    $mail_body .= implode("\n", $saved_files);
    if($double_save){
        $mail_body .= "\n *Double Save Mode ENABLED!\n";
    }
}else{
    $mail_body .= "NONE!(Check your configuration file)\n";
}

// hostname ( ip address )
$mail_body .= "\nHost: " . gethostbyaddr($ipaddress);
$mail_body .= " ( " . $ipaddress . " )" . "\n";

// add mail footer
$mail_body .= "\n\n" . $program_name;
$eTime = time() - $sTime;
$mail_body .= " (" . $eTime . "sec+)";

// debug mode
if($debug){
    print $mail_body;
    $mail=false;
}

// mail send
if($mail){
    mailSend();
}

// end of script
print "OK!\n";
exit;

/* ------------------------------------
 *    mail send with PHPMailer
 * ------------------------------------*/
function mailSend(){

    // init
    global    $mail_addr_to,
            $mail_subject,
            $mail_body,
            $mail_addr_from;
    global $save_path, $saved_files;

    if(!$saved_files){
        return;
    }

    require("PHPMailer/class.phpmailer.php");

    mb_language("japanese");
    mb_internal_encoding("UTF-8");

    $mail = new PHPMailer();
    $mail->CharSet    = "iso-2022-jp";
    $mail->Encoding    = "7bit";

    $mail->AddAddress($mail_addr_to);
    $mail->From        = $mail_addr_from;
    $mail->FromName = $mail_addr_from;
    $mail->Subject    = $mail_subject;
    $mail->Body        = $mail_body;
    foreach($saved_files as $file){
        $mail->AddAttachment($save_path . $file);
    }
    //$mail->FromName = mb_encode_mimeheader(mb_convert_encoding($fromname,"JIS","UTF-8"));
    //$mail->Subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","UTF-8"));
    //$mail->Body  = mb_convert_encoding($body,"JIS","UTF-8");
    $mail->Send();
}

/* ------------------------------------
 *    secure connection
 * ------------------------------------*/
function getData(){

    // init
    global $url;
    global $ipaddress, $password;

    require_once "HTTP/Client.php"; 

    $client =& new HTTP_Client();
    $classCookieManager = $client->getCookieManager();

    // 1st access, get token
    $client->get($url);
    $response = $client->currentResponse(); 

    // get token
    preg_match(
        "/name\=\"Token\" value\=\"(.*)\"/",
        $response['body'],
        $tokens
    ); 
    $token = $tokens[1];

    // 2nd access, send id, password, token, submit
    $login_params = array(
        "ipaddress"    => $ipaddress,
        "password"    => $password,
        "Token"        => $token,
        "Submit"    => "index"
    );
    $client->post($url, $login_params);

    // 3rd access, save resources page data
    global $get_disk, $get_traffic, $get_cpu;

    $res = "";
    //   CPU
    if($get_cpu){
        $res[] = _getData($responce, $client, 'cpu');
    }

    //   Traffic
    if($get_traffic){
        $res[] = _getData($responce, $client, 'traffic');
    }

    //   DISK
    if($get_disk){
        $res[] = _getData($responce, $client, 'disk');
    }

    // return, saved file name array
    return $res;
}

/* ------------------------------------
 *    Download and save the data
 * ------------------------------------*/
function _getData($responce, $client, $filename){

    // init
    global $url, $file_date;
    global $save_path, $get_type, $save_file_date;
    global $double_save;

    // download
    $client->get($url . '/main/graph?type=' . $filename . '&period=' . $get_type);
    $response = $client->currentResponse();

    // save file name
    if($save_file_date){
        if($double_save){
            checkAndMkdir($save_path);
            file_put_contents($save_path . $filename . '.png', $response['body']);
        }
        $filename .= '_' . $file_date;
    }

    // save
    checkAndMkdir($save_path);
    file_put_contents($save_path . $filename . '.png', $response['body']);

    // return, saved file name
    return $filename . '.png';
}

/* ------------------------------------
 *    Check and Make DIR
 * ------------------------------------*/
// add 2013.03.19 Ver.0.0.2
function checkAndMkdir($path){

    // check dir
    if(!is_dir($path)){

        // mkdir
        mkdir($path, 0755, true);
    }

    return;
}
?>

関連記事

スポンサードリンク

Comments

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です