Wanted: vmstat over ADB Visualization

High memory pressure 環境下でのアプリの挙動を調べたりしている。Android は、すくなくとも userdebug build なら top や vmstat が入っているのでその結果を眺めているのだが、vmstat の結果はチャートでみたいなあ。要件としては:

  • vmstat のみならず /proc/meminfo もチャートにできるとなお良い。特定プロセスの /proc/pid/status も。
  • 事後的に生成でなく、1 秒間隔の疑似リアルタイム表示はしてほしい。
  • グラフを、できれば HTML で欲しい。画像ファイルでも良い。とにかくファイルに保存して  URL addressable な場所に置いてバグトラッカーなどから参照したい。

非機能要件/非要件としては

  • どっかのサーバで動かすのは NG. 手元の ADB にアクセスする必要があるから。あとサーバは保守するのがめんどいので。手元で agent だけ動かしてサーバはリモート、とか理論上は可能だけど overkill.
  • インストールが面倒なのはナシ。npm とか同僚に頼めないので不可。single binary か、社内のツリーにコードをホストしてビルド方法共有くらいが限度。
  • 手元のマシンは超はやい。localhost で動かすならネットワークも(あたりまえだが)超速い。
  • デバイスへの負担は少なくしたい。一方でデバイスにバイナリを置くのも面倒なのでできれば避けたい。adb shell でやれる範囲から始めたい。

条件反射で考えたのは Electron で直にコマンドを実行しつ結果を描くか何らかのローカルサーバから websocket だったが、一秒に一回なら iframe なりに SVG を毎回再読込でよくね?と気づく。20 世紀方式とも言える。そんな昔じゃないか。Pre-Ajax とも言える。これは static HTML を S3 的な場所に置いてシェアするのとも相性が良い、かもしれない。

というわけで

  • サーバはメトリクスごとに json で timeline を返す endpoint を持つ。
  • ページの JS はその endpoint を叩いて SVG なり canvas なりに書く。
  • HTML のダンプは、指示があったタイミングで最新の snapshot の json を埋め込んだファイルをどこかに書き出す。

というかんじでいけるかな。これだけシンプルなら plain JS を HTML に埋め込む形で開発してもなんとかなるでしょう。

なあローカルサーバを何で書くか。反射的に考えると Python だが、社内は python 事情がよくないうえに若干性能が心配であることを考えると Go かなあ。Go よくわかんないので勉強しないとね・・・。