前提条件
- 当環境のサーバーは専用機ではなく旧式のデスクトップPC
- 業務開始と終了時に手動で電源On/シャットダウンを行う(電源ONは物理ボタン、シャットダウンはSSH経由)
- 機体が静かでランプの類もないため一見稼働状態が分からず業務開始後に電源が入っていないことに気づくことも稀ではない
必要要件
- WindowsPC上でサーバーの疎通確認ができること
- リアルタイム性は問われない(誤差5分程度)
- 確認のたびにコマンド実行やアプリ起動の手間はかけたくない
- 視覚的に状態を確認したい
設計
- 電源の有無が確認できれば良いので疎通確認はシンプルなPing送信で行う
- 状態表示はタスクトレイアイコンで行う
コード
import java.awt.*
import java.net.InetAddress
import kotlin.system.exitProcess
var status:Boolean = false // 疎通状態
val popup = PopupMenu().apply { // トレイアイコン右クリックで終了するためのメニュー
this.add(MenuItem("Exit").apply {
this.addActionListener { exitProcess(0) }
})
}
// ON/OFF状態を表示する画像(16*16推奨)
val off: Image = Toolkit.getDefaultToolkit().createImage(ClassLoader.getSystemResource("off.png"))
val on: Image = Toolkit.getDefaultToolkit().createImage(ClassLoader.getSystemResource("on.png"))
val icon = TrayIcon(off,"ServerCheck", popup).apply { this.isImageAutoSize=true }
// 画像とツールチップの表示切り替え
fun set(){
icon.image=if (status){on}else{off}
icon.toolTip=if (status){"オンライン"}else{"オフライン"}
}
// 肝心の疎通確認関数
fun check(){
val st = InetAddress.getByName("LANサーバーのIP").isReachable(1000)
if (status!=st){
status=st
set()
}
}
fun main() {
SystemTray.getSystemTray().add(icon)
while (true){
Thread.sleep(30000) // 30000ms(30秒)ごとに疎通確認実行
check()
}
実行結果
スタートアップ時に起動する
スタートアップフォルダ(スタートメニュー右クリ→ファイル名を指定して実行→「shell:startup」)に起動するバッチファイル入れとけばいい
java -jar .\\PATH\\TO\\fatjar.jar
感想
書きなぐりのウンコードになってしまったが動くのでヨシ