7年放置した mqtt_topic_exporter を Copilot とともに書きかえた
mqtt_topic_exporter という mqtt ブローカーに接続して特定の topic を subscribe して prometheus 形式で出すというのを、7年前に書いたまま放置していた。
放置といっても(珍しく)使ってなかったわけではなく、ビルド済みバイナリをずっと使い続けていた。けどまぁ7年も経過すると何もかもかわっており (当時 go.mod すらなかった)、現行のツールチェインではビルドできなくなっていたので、なおすことにした。
- 現行ツールチェイン (go 1.22) でビルド可能に
- ついでに kingpin を使うには小粒ツールすぎるので標準の flag に置き換えた
- Dev Container に対応させた
- mqtt broker がないとデバッグできないので、Eclipse Mosquitto を docker-compose で同時に立ち上げてあげる感じに
- e2e テストを追加
- Dev Container 内部で、Mosquitto と接続してうまいこといくかのテスト
- graceful shutdown
- リファクタリング
全体的に Copilot Agent に分からんこと聞いたり、やりたいことを指示するだけでほぼ完了させることができた。特にテストは自力で書こうと思うとダルすぎてたぶん一生やらなかった。「どうしたらいいかねえ」ぐらいのふわっとした段階から壁打ちして方針 (e2eだけテストしようとか) 決めて、雑に初期実装してくれるのはありがたい……
ただ今回、普通に指示するだけだとベタ書きする感じだったので、分けてほしい部分は個別に指示する必要があった。あとやっぱり普通に嘘をつかれる。「version.NewCollector() はなくなりました (正しくは別パッケージに移動)」とか
関連エントリー
- MQTT のトピックを prometheus に登録する MQTT のトピックを subscribe して一時的に保持し、prometheus 向けに exporter として働くデーモンを書いた。...
- PromQL でラベル違いのメトリクス同士を演算して no data 例えば以下のようなメトリクスがあったとします。みての通り、名前は一緒でラベルだけが異なるメトリクスです。 mqtt_topic{instan...
- JavaScript で MQTT するなら MQTT.js が良い https://github.com/mqttjs/MQTT.js ブラウザ (MQTT over WebSocket) でも node.j...
- xatena-go (はてな記法のような記法フォーマットパーサー) を作った Text-Xatena というはてな記法に近い記法をパースしてフォーマットする Perl のモジュールがある (ややこしい言いかただが……)...
- Ubuntu LTS 16 → 18 → 20 一応バックアップ sudo parted -l Model: Virtio Block Device (virtblk) Disk /dev...