Ambientで413 Payload Too Largeでエラーになってしまう
(2021/5/10追記)
本件、Ambientサービス側で、1日の送信回数制限を超過した時のエラーコードを413:Payload Too Largeから429:Too Many Requestsに変更していただいたようです。ありがとうございます!
データが切れちゃう
「Gravio 4からCO2データをAmbientに送って可視化する」でGravioからAmbientに毎日CO2データを送るようにしたんですが、他のPowerBIやMachinistへはちゃんと送れてるのにAmbientだけはなんだか毎日朝の8時半前くらいに途切れてしまうんです。。。
どうもおかしいと思って、アクションを実行してみたらAPIからPayload Too Large
とのエラーが返ってきているみたい。
調査してみた
リクエストのペイロードはそんなに大きくないんだがと思いつつ、少し詳しく調べてみることに。ダンプをログに出してみる。
[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-Length
は40
。中身を見ても大したデータじゃない。
だけどレスポンスは HTTP/1.1 413 Payload Too Large
。
HTTPレスポンスの413はリクエストペイロードが大きすぎるときとWikipedia先生もおっしゃってます。
で、仕方ないので「Ambientの諸元/制限」を調べてみることに。すると下記のように書いてある。
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秒ちょうどでデータを受信した場合、余計に間隔があいてしまうから。
データ削除
あとは、Ambientのチャネル一覧からデータを削除して待ってみる。
諸元のところには、
チャネルデーターを削除しても1日の登録件数のカウントは0クリアされません。
と書いてあったけど、データを削除すると1分間隔で受信はじめました。
結果
最後に
今回はチャネルあたりのデータが1種類なのでこれでいけましたが、データ1~8まで使ってる場合、別々にAPI呼んでると要注意かも。逆に、1回のAPIコールで複数種類のデータを包んで送信すれば大丈夫なのかは要検証。
あと、HTTPレスポンスに413
は適切じゃないと思うので直してほしいなぁ。正しくは 429 Too Many Requests
あたりなのかなぁ。だったらもっと早く気付けたはず。^^;
参考
Author And Source
この問題について(Ambientで413 Payload Too Largeでエラーになってしまう), 我々は、より多くの情報をここで見つけました https://qiita.com/zrock/items/b1d6fd35066b7fc84174著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .