ギガっていうの受け入れちゃったね*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 の機能を使うことで、例えば過剰に使っている時にアラートを出すなども簡単に実現できますね。
それでは皆様、よき監視ライフを!