pingツールを作った


はじめに

ping監視ツール的なものを漁っていたらdeadmanというツールを見つけた。
ちょっと古かったので参考にしてpython3で自分でも作ってみた。

本家deadmanはマルチスレッドで実装してるみたいだったけれど、とりあえずシングルスレッドで実装

インストール

pypi経由でインストール

$ pip install ppping

github経由でインストール

$ pip install git+https://github.com/johejo/ppping.git

使い方

$ ppping hoge.com fuga.jp WW.XX.YY.ZZ

詳しいオプションは--help

UI

古より伝わりしcurses

ロジック

  • subprocessでpingコマンドを実行して、結果を無理やり力技でパース
  • 整形して表示

工夫

pingコマンドの実行エラーへの対処

存在しないホスト等をpingで実行するとstderrにエラーが表示されてそれがcursesの画面に割り込んでくる

stderrにDEVNULLを指定してエラーを無視

out = subprocess.run(['ping', host, '-c1'], check=True, stdout=subprocess.PIPE,
                     stderr=subprocess.DEVNULL, timeout=self.timeout).stdout.decode()

見た目

合間にtime.sleep(INTERVAL)をいれることでなんかかっこよさげに見える

ホストやIPアドレスの長さが変わってもUIを無理やり調整

  • ドキュメントによるとcureses.window.getmaxyx()で画面サイズが取得できるっぽい v0.1.3でこの調整機能は削除しました。
  • 取得したホスト名の長さの最大値を保存して再利用

今後

configファイル読み込み対応
2018/1/12 v0.1.4にて対応しました。

リポジトリ

johejo/ppping: Petty Plain Ping