今回は、ファイルのアップロードプログラムを構築するにあたり、サーバーの使用状況を確認する必要があり、ちょっと調べてみたのでメモ。
アップロードされるファイルの数が相当あることが想定され、物理的にサーバー容量の限界を超えるとまずいってことで、使用状況をグラフで可視化することにしました。
サーバーの使用状況を知る
まずは使用しているサーバーがどれくらいの容量があるかを調べます。phpでもできるのですが、今回はサーバーのコンパネに記載があるのでそれをリミットの数値とします。
調べてみると500GBでした。
なので、まずはphpを記述します。
<?php $server_limit=500000; $f = '/home/sample/sample.net/html/'; $io = popen ( '/usr/bin/du -sk ' . $f, 'r' ); $size = fgets ( $io, 4096); $used_in_kb = substr($size, 0, strpos($size, "\t")); $used_in_mb = round($used_in_kb/1024, 3); $used_remain_mb=$server_limit - $used_in_mb; $used_in_p=($used_in_mb / $server_limit) *100; $used_remain_p=($used_remain_mb / $server_limit) *100; pclose ( $io ); ?>
サーバーのリミットが500GBであることを変数に代入。対象のディレクトリをカレントパスで記述します。
$server_limit=500000; $f = '/home/sample/sample.net/html/';
カレントパスについては、以下のphpで取得可能です。
echo __DIR__;
しかし、上記はPHP5.3以降でしか使用できないので、それ以前のバージョンの場合は、下記のようにして取得しましょう。
echo dirname(__FILE__);
現在の使用容量を取得する
現時点で、どれくらいの容量を使用しているのかを取得します。
$used_in_kb = substr($size, 0, strpos($size, "\t")); $used_in_mb = round($used_in_kb/1024, 3);
$used_in_mbには単位をMBとした数値が代入されます。
この時点で
echo '使用容量 : '.$used_in_mb.'MB';
とすれば使用容量が表示されると思います。
グラフ用に数値をパーセントにする
今回は円グラフでサーバーの使用状況を表示します。
なので、取得した使用容量をパーセントに変換します。
$used_remain_mb=$server_limit - $used_in_mb; $used_in_p=($used_in_mb / $server_limit) *100; $used_remain_p=($used_remain_mb / $server_limit) *100;
$used_in_pに使用容量のパーセントを代入しています。
$used_remain_pに未使用容量のパーセントを代入しています。
この時点で
echo '使用容量パーセント : '.$used_in_p.'%<br>'; echo '未使用容量パーセント : '.$used_remain_p.'%';
とすればそれぞれの使用容量が表示されると思います。
Chart.jsでグラフを描画する
円グラフはChart.bundle.jsで描画します。
ソースコード
<?php $server_limit=500000; $f = '/home/sample/sample.net/html/'; $io = popen ( '/usr/bin/du -sk ' . $f, 'r' ); $size = fgets ( $io, 4096); $used_in_kb = substr($size, 0, strpos($size, "\t")); $used_in_mb = round($used_in_kb/1024, 3); $used_remain_mb=$server_limit - $used_in_mb; $used_in_p=($used_in_mb / $server_limit) *100; $used_remain_p=($used_remain_mb / $server_limit) *100; pclose ( $io ); ?> <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.js"></script> <div class="canvas-container"> <canvas id="myPieChart"></canvas> </div> <script> var ctx = document.getElementById("myPieChart"); var myPieChart = new Chart(ctx, { type: 'pie', data: { labels: ["使用中", "未使用"], datasets: [{ backgroundColor: [ "#BB5179", "#FAFF67" ], data: [<?php print $used_in_p;?>, <?php print $used_remain_p;?>] }] }, options: { title: { display: true, text: 'サーバー使用状況' } } }); </script>
Chart.js読み込み
CDNに公開されているChart.jsを読み込みます。
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.js"></script>
canvas要素取得
グラフを描画するためにcanvasのID、myPieChartを取得します。
var ctx = document.getElementById("myPieChart");
円グラフを生成
取得した情報をもとに円グラフを生成します。
var myPieChart = new Chart(ctx, { type: 'pie', data: { labels: ["使用中", "未使用"], datasets: [{ backgroundColor: [ "#BB5179", "#FAFF67" ], data: [<?php print $used_in_p;?>, <?php print $used_remain_p;?>] }] }, options: { title: { display: true, text: 'サーバー使用状況' } } });
typeでグラフのタイプ、dataでラベルトデータセット、optionsでオプション設定しています。
今回は円グラフなのでtypeはpieにdataには使用中を未使用容量の数値を設定し、それぞれのカラーを設定しています。optionsにはグラフのタイトルを設定しています。
円グラフの描画
円グラフの描画ソースは以下になります。
<div class="canvas-container"> <canvas id="myPieChart"></canvas> </div>
円グラフのサイズを調整する
円グラフのサイズを調整したい場合はCSSで対応可能です。
CSS例
.canvas-container { width:50%; margin:20px; }
以上です。
Chart.jsは円グラフ以外にも様々な種類のグラフの描画が可能なので、今後研究したいと思います。