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

Updater improvements

This commit is contained in:
zbeacon
2020-05-18 18:32:41 +03:00
parent 88820a03c9
commit f2edcff689
3 changed files with 33 additions and 13 deletions

View File

@@ -64,10 +64,10 @@ class TBGatewayService:
log = logging.getLogger('service') log = logging.getLogger('service')
log.info("Gateway starting...") log.info("Gateway starting...")
self.__updater = TBUpdater() self.__updater = TBUpdater()
self.__updates_check_period_ms = 3000 self.__updates_check_period_ms = 300000
self.__updates_check_time = 0 self.__updates_check_time = 0
self.version = self.__updater.get_version() self.version = self.__updater.get_version()
log.info("ThingsBoard IoT gateway version: %s", self.version) log.info("ThingsBoard IoT gateway version: %s", self.version["current_version"])
self.available_connectors = {} self.available_connectors = {}
self.__connector_incoming_messages = {} self.__connector_incoming_messages = {}
self.__connected_devices = {} self.__connected_devices = {}
@@ -107,6 +107,7 @@ class TBGatewayService:
"ping": self.__rpc_ping, "ping": self.__rpc_ping,
"stats": self.__form_statistics, "stats": self.__form_statistics,
"devices": self.__rpc_devices, "devices": self.__rpc_devices,
"update": self.__rpc_update,
} }
self.__sheduled_rpc_calls = [] self.__sheduled_rpc_calls = []
self.__self_rpc_sheduled_methods_functions = { self.__self_rpc_sheduled_methods_functions = {
@@ -177,9 +178,6 @@ class TBGatewayService:
if cur_time - self.__updates_check_time >= self.__updates_check_period_ms: if cur_time - self.__updates_check_time >= self.__updates_check_period_ms:
self.__updates_check_time = time()*1000 self.__updates_check_time = time()*1000
self.version = self.__updater.get_version() self.version = self.__updater.get_version()
if self.version.get("latest_version") is not None:
log.info("\n\n[===UPDATE===]\n\n New version %s is available! \n\n[===UPDATE===]\n",
self.version["latest_version"])
except KeyboardInterrupt: except KeyboardInterrupt:
self.__stop_gateway() self.__stop_gateway()
except Exception as e: except Exception as e:
@@ -480,7 +478,7 @@ class TBGatewayService:
log.info("Gateway %s sheduled in %i seconds", method_to_call, seconds_to_restart/1000) log.info("Gateway %s sheduled in %i seconds", method_to_call, seconds_to_restart/1000)
result = {"success": True} result = {"success": True}
elif arguments is not None: elif arguments is not None:
result = self.__gateway_rpc_methods[method_to_call]() result = self.__gateway_rpc_methods[method_to_call](arguments)
else: else:
result = self.__gateway_rpc_methods[method_to_call]() result = self.__gateway_rpc_methods[method_to_call]()
log.debug(result) log.debug(result)
@@ -496,6 +494,17 @@ class TBGatewayService:
data_to_send[device] = self.__connected_devices[device]["connector"].get_name() data_to_send[device] = self.__connected_devices[device]["connector"].get_name()
return {"code": 200, "resp": data_to_send} return {"code": 200, "resp": data_to_send}
def __rpc_update(self, *args):
try:
result = {"resp": self.__updater.update(),
"code": 200,
}
except Exception as e:
result = {"error": str(e),
"code": 500
}
return result
def rpc_with_reply_processing(self, topic, content): def rpc_with_reply_processing(self, topic, content):
req_id = self.__rpc_requests_in_progress[topic][0]["data"]["id"] req_id = self.__rpc_requests_in_progress[topic][0]["data"]["id"]
device = self.__rpc_requests_in_progress[topic][0]["device"] device = self.__rpc_requests_in_progress[topic][0]["device"]

View File

@@ -21,10 +21,12 @@ from threading import Thread
from time import time, sleep from time import time, sleep
from simplejson import loads from simplejson import loads
from thingsboard_gateway.tb_utility.tb_utility import TBUtility
log = getLogger("service") log = getLogger("service")
# UPDATE_SERVICE_BASE_URL = "https://updates.thingsboard.io" UPDATE_SERVICE_BASE_URL = "https://updates.thingsboard.io"
UPDATE_SERVICE_BASE_URL = "http://127.0.0.1:8090" # UPDATE_SERVICE_BASE_URL = "http://127.0.0.1:8090"
class TBUpdater(Thread): class TBUpdater(Thread):
@@ -66,8 +68,9 @@ class TBUpdater(Thread):
if content is not None and content.get("updateAvailable", False): if content is not None and content.get("updateAvailable", False):
new_version = content["message"].replace("New version ", "").replace(" is available!", "") new_version = content["message"].replace("New version ", "").replace(" is available!", "")
log.info(content["message"]) log.info(content["message"])
if new_version != self.__version: self.__version["latest_version"] = new_version
self.__version["latest_version"] = new_version log.info("\n\n[===UPDATE===]\n\n New version %s is available! \n\n[===UPDATE===]\n",
self.__version["latest_version"])
except ConnectionRefusedError: except ConnectionRefusedError:
log.warning("Cannot connect to the update service. PLease check your internet connection.") log.warning("Cannot connect to the update service. PLease check your internet connection.")
except Exception as e: except Exception as e:
@@ -89,6 +92,12 @@ class TBUpdater(Thread):
} }
return request_args return request_args
def update(self):
if self.__version["latest_version"] is not None:
result = TBUtility.install_package("thingsboard-gateway", self.__version["latest_version"])
else:
result = "Congratulations! You have the latest version."
return result
if __name__ == '__main__': if __name__ == '__main__':
updater = TBUpdater() updater = TBUpdater()

View File

@@ -154,8 +154,9 @@ class TBUtility:
def install_package(package, version="upgrade"): def install_package(package, version="upgrade"):
from sys import executable from sys import executable
from subprocess import check_call from subprocess import check_call
result = False
if version.lower() == "upgrade": if version.lower() == "upgrade":
check_call([executable, "-m", "pip", "install", package, "--upgrade", "--user"]) result = check_call([executable, "-m", "pip", "install", package, "--upgrade", "--user"])
else: else:
from pkg_resources import get_distribution from pkg_resources import get_distribution
current_package_version = None current_package_version = None
@@ -164,4 +165,5 @@ class TBUtility:
except Exception: except Exception:
pass pass
if current_package_version is None or current_package_version != version: if current_package_version is None or current_package_version != version:
check_call([executable, "-m", "pip", "install", package + "==" + version, "--user"]) result = check_call([executable, "-m", "pip", "install", package + "==" + version, "--user"])
return result