ギガっていうの受け入れちゃったね*1。
数年前 IIJmio に乗り換え、以来便利に使っているのだけれど、最近は気がつくと月のデータ通信量を使い切って破滅、と言ったことが増えてきた*2。
それほど困っているわけではないが、一体いつ使い切ったのか調べようとすると、公式のアプリでは5日ほどしか遡れず、また1日単位でしか確認ができないのでよくわからない。
調べてみると API があるとのことなので、mackerel にサービスメトリックとして投稿することで可視化してみた。
IIJmioクーポンスイッチAPI | クーポンについて | IIJmio
これをみながら実装する。
認証周りをエイヤし、`/mobile/d/v2/coupon/` API を叩くとのようなレスポンスを得られる*3。
{ "returnCode": "OK", "couponInfo": [ { "hddServiceCode": "XXXXXX", "coupon": [ { "volume": 0, "expire": "202209", "type": "bundle" }, { "volume": 4000, "expire": "202210", "type": "bundle" }, { "volume": 0, "expire": "202209", "type": "topup" }, { "volume": 0, "expire": "202210", "type": "topup" }, { "volume": 0, "expire": "202211", "type": "topup" }, { "volume": 0, "expire": "202212", "type": "topup" } ], "hdoInfo": [ { "couponUse": true, "coupon": [ { "volume": 0, "expire": null, "type": "sim" } ], "hdoServiceCode": "XXXX", "sms": true, "number": "090XXXXXXXX", "regulation": false, "iccid": "XXXXXXXXXXXXXXXX", "voice": true } ], "plan": null } ] }
あとは好きな方法で mackerel に投稿できるフォーマットへ変換する。以下のようなコードを書いた。
const input = require("fs").readFileSync(process.stdin.fd, "utf8"); const couponResponse = JSON.parse(input) const targetServiceCode = 'XXXXXXXX' const coupon = couponResponse.couponInfo.find(e => e.hddServiceCode === targetServiceCode).coupon const body = coupon.map(c => {return {'name': `iijmio.${targetServiceCode}.${c.type}-${c.expire}`, "time": Math.floor(Number(new Date())/1000), 'value': c.volume}}) console.log(JSON.stringify(body))
最終的に、 `curl IIJmio APIリクエスト` | node format.js | `curl mackerel サービスメトリック投稿`
と言った風にパイプをつなげた shell script を cron で実行すれば終わり。
ここまでできれば、最初の画像のようなグラフが自動で生成されます。
さらに mackerel の機能を使うことで、例えば過剰に使っている時にアラートを出すなども簡単に実現できますね。
それでは皆様、よき監視ライフを!