1
0
mirror of https://github.com/thingsboard/thingsboard-gateway synced 2025-10-26 22:31:42 +08:00

thingsboard-gateway was failing to call __send_data_pack_to_storage in multiple scenarios

This commit is contained in:
Kevin Poole
2022-05-27 15:47:47 -04:00
parent 788682148e
commit 2bae7d7f63

View File

@@ -634,23 +634,25 @@ class TBGatewayService:
max_data_size = self.__config["thingsboard"].get("maxPayloadSizeBytes", 1024)
if self.__get_data_size(data) >= max_data_size:
# Data is too large, so we will attempt to send in pieces
adopted_data = {"deviceName": data['deviceName'],
"deviceType": data['deviceType'],
"attributes": {},
"telemetry": []}
# First, loop through the attributes
for attribute in data['attributes']:
adopted_data['attributes'].update({attribute: data['attributes'][attribute]})
adopted_data_size = self.__get_data_size(adopted_data)
if adopted_data_size >= max_data_size:
# We have surpassed the max_data_size, so send what we have and clear attributes
self.__send_data_pack_to_storage(adopted_data, connector_name)
adopted_data['attributes'] = {}
adopted_data['attributes'].update({attribute: data['attributes'][attribute]})
# Now, loop through telemetry. Possibly have some unsent attributes that have been adopted.
for ts_kv_list in data['telemetry']:
ts = ts_kv_list['ts']
for kv in ts_kv_list['values']:
adopted_data_size = self.__get_data_size(adopted_data)
if adopted_data_size >= max_data_size:
self.__send_data_pack_to_storage(adopted_data, connector_name)
adopted_data['telemetry'] = []
if len(adopted_data['telemetry']) == 0:
adopted_data['telemetry'] = [
{'ts': ts, 'values': {kv: ts_kv_list['values'][kv]}}]
@@ -659,6 +661,21 @@ class TBGatewayService:
if adopted_kv['ts'] == ts:
adopted_kv['values'].update({kv: ts_kv_list['values'][kv]})
adopted_data_size = self.__get_data_size(adopted_data)
if adopted_data_size >= max_data_size:
# we have surpassed the max_data_size, so send what we have and clear attributes and telemetry
self.__send_data_pack_to_storage(adopted_data, connector_name)
adopted_data['telemetry'] = []
adopted_data['attributes'] = {}
# It is possible that we get here and have some telemetry or attributes not yet sent, so check for that.
if len(adopted_data['telemetry']) > 0 or len(adopted_data['attributes']) > 0:
self.__send_data_pack_to_storage(adopted_data, connector_name)
# technically unnecessary to clear here, but leaving for consistency.
adopted_data['telemetry'] = []
adopted_data['attributes'] = {}
else:
self.__send_data_pack_to_storage(data, connector_name)