タイトル変えました。
なんかロジックが頭に降臨!
上手いことサーバの情報をメーターに表示できそうな予感!
大枠の流れ
Rainmeterから特定のURLをキック
↓
キックされたプログラムがサーバ内の必要な情報を収集&編集してレスポンスを返す
↓
Rainmeterで内容を解析&表示
言葉にすると簡単だな(;・∀・)
実装
PHPが一番手っ取り早い。
既に入っているので環境構築の必要がない。
問題は俺がPHPでガッツリとコーディングしたことがない ということw
Hello Worldからだな。
RainmeterへのレスポンスはJSON形式で返すのが良さそうだ。
PHPが標準でサポートしているので、それを使えばOK。
Linuxのコマンドを発行して結果を得るのは簡単だった。
実行した結果は$※返り値※に入るので、あとはループなりなんなりで
必要項目を切り出せば良い。
んで、それらを集めてJSONでドーン!だ(雑
発行コマンド
取りたい項目は以下の通り
・CPU温度
・CPU使用率
・HDD温度
・HDDのRemaining Life(余命)
CPUの温度はlm-sensors
を使用する。(要・インストール)
パッケージとCoreごとの温度が取得できる。
CPU使用率はtop
で取って計算すれば良さそうだ。
top -b -n 1
で取得すれば良いと思っていたら
最初の1回目は何故か同じ値になって、全然参考にならないw
なのでtop -b -n 2
にしてソレっぽい値を取得することにした。
1~2秒の待ちが発生するけど、それほどリアルタイム性は求めていないので問題ない。
HDD温度と余命はS.M.A.R.T.の情報から取得できる。
コマンドはsmartctl /dev/sda -A
。
結果の中の190 Airflow_Temperature
行のRAW_VALUE
が温度。
余命については何をもって判断するか悩んだ結果、
結果のWHEN_FAILED列が全部問題なし(="-")だったらOKということにする。
問題はこのコマンドが一般ユーザでは使えないということ。
解決法は調べると情報は色々出てくる。
手っ取り早いのがsudoの縛りを緩くすること。
visudo
でsudoersファイルの内容に追記する。
見たサイトでは
※UserName※ ALL=(ALL) ALL
と書いているところも多かったけど、ちょっとそれは解放しすぎだろうw
というわけで、
と特定のシェル実行時のみ、パスワードなしでsudo /hoge/xxxx.sh
を実行できるようにした。
シェルの中はsmartctl /dev/sda -A
のみw(お約束のヘッダはあるけど)
これで欲しい物が全部揃った。
あとはレスポンス用の配列にブチ込んで返すだけ。
PHPが不慣れで あーでもないこーでもない とえらく時間食ったけど。
返却値はこんな感じ。
これをRainmeterで分解するために
URL=※PHPファイルを置いたところ※
RegExp=(?siU)"Packageid0Temp":"(.*)".*Core0Temp":"(.*)".*Core1Temp":"(.*)".*Core2Temp":"(.*)".*Core3Temp":"(.*)".*CPUUsage":"(.*)".*HDDRemainingLife":"(.*)".*HDDTemp":"(.*)"
とすれば、
Measure=WebParser
URL=[MeasureJSON]
StringIndex=1
MinValue=0
MaxValue=100
とStringIndeが順番で降られて、MeasureCPUPackageTemp
等から各値が取得できる。
ちょっと苦労したけど無事取得できた。
取得間隔は、これのためにCPUの使用率が上がるというのは本末転倒なので
15秒に1回更新している。30秒でも良かったかな?
ひとまず完 成 !(゚Д゚)