LoginSignup
1
0

More than 3 years have passed since last update.

Ambientで413 Payload Too Largeでエラーになってしまう

Last updated at Posted at 2021-02-23

(2021/5/10追記)
本件、Ambientサービス側で、1日の送信回数制限を超過した時のエラーコードを413:Payload Too Largeから429:Too Many Requestsに変更していただいたようです。ありがとうございます!

データが切れちゃう

Gravio 4からCO2データをAmbientに送って可視化する」でGravioからAmbientに毎日CO2データを送るようにしたんですが、他のPowerBIやMachinistへはちゃんと送れてるのにAmbientだけはなんだか毎日朝の8時半前くらいに途切れてしまうんです。。。

image.png
image.png
image.png

どうもおかしいと思って、アクションを実行してみたらAPIからPayload Too Largeとのエラーが返ってきているみたい。

image.png

調査してみた

リクエストのペイロードはそんなに大きくないんだがと思いつつ、少し詳しく調べてみることに。ダンプをログに出してみる。

image.png

[2021-02-22 06:53:41.487] INFO (action) [652bdc0f] Starting Action: CO2-Ambient
[2021-02-22 06:53:41.488] INFO (action) [652bdc0f] S POST /api/v2/channels/32659/data HTTP/1.1
[2021-02-22 06:53:41.488] INFO (action) [652bdc0f] S Host: ambidata.io
[2021-02-22 06:53:41.488] INFO (action) [652bdc0f] S User-Agent: Go-http-client/1.1
[2021-02-22 06:53:41.488] INFO (action) [652bdc0f] S Content-Length: 40
[2021-02-22 06:53:41.488] INFO (action) [652bdc0f] S Content-Type: application/json
[2021-02-22 06:53:41.488] INFO (action) [652bdc0f] S Accept-Encoding: gzip
[2021-02-22 06:53:41.488] INFO (action) [652bdc0f] S
[2021-02-22 06:53:41.489] INFO (action) [652bdc0f] S {"d1":414,"writeKey":"xxxxxxxxxxxxxxxx"}
[2021-02-22 06:53:41.606] INFO (action) [652bdc0f] R HTTP/1.1 413 Payload Too Large
[2021-02-22 06:53:41.606] INFO (action) [652bdc0f] R Connection: close
[2021-02-22 06:53:41.606] INFO (action) [652bdc0f] R Content-Length: 17
[2021-02-22 06:53:41.606] INFO (action) [652bdc0f] R Content-Type: text/plain; charset=utf-8
[2021-02-22 06:53:41.606] INFO (action) [652bdc0f] R Date: Mon, 22 Feb 2021 06:53:41 GMT
[2021-02-22 06:53:41.606] INFO (action) [652bdc0f] R Etag: W/"11-5Cz16jijtGT0sGOMKrOipQ"
[2021-02-22 06:53:41.606] INFO (action) [652bdc0f] R X-Powered-By: Express
[2021-02-22 06:53:41.606] INFO (action) [652bdc0f] R
[2021-02-22 06:53:41.607] INFO (action) [652bdc0f] R Payload Too Large
[2021-02-22 06:53:41.607] INFO (action) [652bdc0f] Action Ended
[2021-02-22 06:53:41.607] INFO (action) action executed: "CO2-Ambient"
[2021-02-22 06:53:42.577] INFO (action) [0dfd5214] Action Ended

リクエストのContent-Length40。中身を見ても大したデータじゃない。
だけどレスポンスは HTTP/1.1 413 Payload Too Large

HTTPレスポンスの413はリクエストペイロードが大きすぎるときとWikipedia先生もおっしゃってます。

で、仕方ないので「Ambientの諸元/制限」を調べてみることに。すると下記のように書いてある。

image.png

1チャネルあたり1日3,000件までデーターを登録できます。平均すると28.8秒に1回のペースです。

おお。今のペースは10秒に1回なので完全にオーバーペースです。しかも、

件数のカウントは0時に0クリアされます。

なるほど。毎日0時以降はチャートが描画されていたのはそのせい?
で、計算してみる。

3000件 × 10秒 = 30000秒 = 約8.3時間

ビンゴ!
というわけで、

送信間隔の調整

とりあえず28.8秒に1件と書いてあるので余裕を見て1分単位くらいにしてみる。
一番簡単な方法は、トリガーの間隔で調整。59000 を指定して、59秒以内の場合は無視されるようにする。
60秒にしないのは、60秒ちょうどでデータを受信した場合、余計に間隔があいてしまうから。

image.png

データ削除

あとは、Ambientのチャネル一覧からデータを削除して待ってみる。

image.png

諸元のところには、

チャネルデーターを削除しても1日の登録件数のカウントは0クリアされません。

と書いてあったけど、データを削除すると1分間隔で受信はじめました。

image.png

結果

無事丸一日のデータが取得できました。めでたしめでたし。
image.png

最後に

今回はチャネルあたりのデータが1種類なのでこれでいけましたが、データ1~8まで使ってる場合、別々にAPI呼んでると要注意かも。逆に、1回のAPIコールで複数種類のデータを包んで送信すれば大丈夫なのかは要検証。

あと、HTTPレスポンスに413は適切じゃないと思うので直してほしいなぁ。正しくは 429 Too Many Requestsあたりなのかなぁ。だったらもっと早く気付けたはず。^^;

参考

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0