少しずつ時間をとって最近作ってたのがこれ。Pythonでpipeを使って実行したdfコマンドの結果を整形し、Djangoでviewを作ってAjaxで表示したもの。Ajaxのライブラリには、SimpleJSを使ってみた。
ファイルの命名は適当ですがお気になさらず。サイズを取得してるディレクトリとかは、それぞれの環境に読み替えよろしく。Djangoについて多くは書かないので参考程度に。Windowsでは当然動きませんがあしからず。
- projectdir/modules/status.py
import os import re def diskinfo(dir): pipe = os.popen('df -h | grep \" %s$\"' % dir, 'r') text = pipe.read() pipe.close() info = re.split('[\s]+',text) if text != '': return {'volume':info[0], 'total':info[1], 'used':info[2], 'free':info[3], 'useper':info[4]} else: return None
- projectdir/diskinfo/views.py
from projectdir.modules import status from django.http import HttpResponse def diskinfo_ajax(request, dir, prop): if dir == '_extra1': d = '/var/ftp/_extra1' elif dir == 'global': d = '/' else: d = '/' st = status.diskinfo(d) return HttpResponse(st[prop])
- projectdir/diskinfo/urls.py
from django.conf.urls.defaults import * from django.conf import settings urlpatterns = patterns('', (r'^ajax/(?P<dir>\w+)/(?P<prop>\w+)/$', 'projectdir.diskinfo.views.diskinfo_ajax'), )
- projectdir/static/js/diskinfoajax.js
function LoadDiskInfo() { $ajaxreplace("diskused_global", "/diskinfo/ajax/global/used/", false); $ajaxreplace("disktotal_global", "/diskinfo/ajax/global/total/", false); $ajaxreplace("diskused_extra1", "/diskinfo/ajax/_extra1/used/", false); $ajaxreplace("disktotal_extra1", "/diskinfo/ajax/_extra1/total/", false); }
- /projectdir/templates/index.htm
{中略} <script language="JavaScript" type="text/javascript" src="/static/js/simple.js"></script> <script language="JavaScript" type="text/javascript" src="/static/js/simpleajax.js"></script> <script language="JavaScript" type="text/javascript" src="/static/js/diskinfoajax.js"></script> {中略} <body onload="LoadDiskInfo();setInterval(LoadDiskInfo, 30000);"> <table class="diskinfo_table"> <tr> <td>/</td><td class="disksize"><span id="diskused_global">----</span>/<span id="disktotal_global">----</span></td> </tr> <tr> <td>/_extra1/</td><td class="disksize"><span id="diskused_extra1">----</span>/<span id="disktotal_extra1">----</span></td> </tr> </table> {中略}
30秒間隔で自動更新。