コード例 #1
0
ファイル: client.py プロジェクト: GeorgeAtwell/alertR
	def _sensorAlertHandler(self, incomingMessage):

		logging.debug("[%s]: Received sensor alert." % self.fileName)
		
		# extract sensor alert values
		try:
			alertLevels = incomingMessage["payload"]["alertLevels"]
			# check if alertLevels is a list
			if not isinstance(alertLevels, list):
				# send error message back
				try:
					message = {"clientTime": int(time.time()),
						"message": message["message"],
						"error": "alertLevels not of type list"}
					self.client.send(json.dumps(message))
				except Exception as e:
					pass

				return False
			# check if all elements of the alertLevels list 
			# are of type int
			if not all(isinstance(item, int) for item in alertLevels):
				# send error message back
				try:
					message = {"clientTime": int(time.time()),
						"message": message["message"],
						"error": "alertLevels items not of type int"}
					self.client.send(json.dumps(message))
				except Exception as e:
					pass

				return False

			description = str(incomingMessage["payload"]["description"])

			# parse received data (if data transfer is activated)
			data = None
			dataTransfer = bool(incomingMessage["payload"]["dataTransfer"])
			if dataTransfer:
				data = incomingMessage["payload"]["data"]

				# check if data is of type dict
				# => if not ignore it
				if not isinstance(data, dict):
					logging.warning("[%s]: Received data in sensor alert "
						% self.fileName
						+ "not valid. Ignoring it.")

					data = None
					dataTransfer = False

		except Exception as e:
			logging.exception("[%s]: Received sensor alert " % self.fileName
				+ "invalid.")

			# send error message back
			try:
				message = {"clientTime": int(time.time()),
					"message": incomingMessage["message"],
					"error": "received sensor alert invalid"}
				self.client.send(json.dumps(message))
			except Exception as e:
				pass

			return False

		# sending sensor alert response
		logging.debug("[%s]: Sending sensor alert " % self.fileName
			+ "response message.")
		try:

			payload = {"type": "response", "result": "ok"}
			message = {"clientTime": int(time.time()),
				"message": "sensoralert", "payload": payload}
			self.client.send(json.dumps(message))

		except Exception as e:
			logging.exception("[%s]: Sending sensor alert " % self.fileName
				+ "response failed.")

			return False

		# trigger all alerts that have the same alert level
		for alert in self.alerts:
			for alertLevel in alertLevels:
				if alertLevel in alert.alertLevels:
					# trigger alert in an own thread to not block this one
					alertTriggerProcess = AsynchronousAlertExecuter(alert)
					alertTriggerProcess.sensorDescription = description
					alertTriggerProcess.dataTransfer = dataTransfer
					alertTriggerProcess.data = data
					# set thread to daemon
					# => threads terminates when main thread terminates	
					alertTriggerProcess.daemon = True
					alertTriggerProcess.triggerAlert = True
					alertTriggerProcess.start()

		return True
コード例 #2
0
ファイル: client.py プロジェクト: kakeman/alertR
    def _sensorAlertHandler(self, incomingMessage):

        logging.debug("[%s]: Received sensor alert." % self.fileName)

        # extract sensor alert values
        try:
            alertLevels = incomingMessage["payload"]["alertLevels"]
            # check if alertLevels is a list
            if not isinstance(alertLevels, list):
                # send error message back
                try:
                    message = {
                        "clientTime": int(time.time()),
                        "message": message["message"],
                        "error": "alertLevels not of type list"
                    }
                    self.client.send(json.dumps(message))
                except Exception as e:
                    pass

                return False
            # check if all elements of the alertLevels list
            # are of type int
            if not all(isinstance(item, int) for item in alertLevels):
                # send error message back
                try:
                    message = {
                        "clientTime": int(time.time()),
                        "message": message["message"],
                        "error": "alertLevels items not of type int"
                    }
                    self.client.send(json.dumps(message))
                except Exception as e:
                    pass

                return False

            state = int(incomingMessage["payload"]["state"])
            description = str(incomingMessage["payload"]["description"])

            # parse received data (if data transfer is activated)
            data = None
            dataTransfer = bool(incomingMessage["payload"]["dataTransfer"])
            if dataTransfer:
                data = incomingMessage["payload"]["data"]

                # check if data is of type dict
                # => if not ignore it
                if not isinstance(data, dict):
                    logging.warning("[%s]: Received data in sensor alert " %
                                    self.fileName + "not valid. Ignoring it.")

                    data = None
                    dataTransfer = False

        except Exception as e:
            logging.exception("[%s]: Received sensor alert " % self.fileName +
                              "invalid.")

            # send error message back
            try:
                message = {
                    "clientTime": int(time.time()),
                    "message": incomingMessage["message"],
                    "error": "received sensor alert invalid"
                }
                self.client.send(json.dumps(message))
            except Exception as e:
                pass

            return False

        # sending sensor alert response
        logging.debug("[%s]: Sending sensor alert " % self.fileName +
                      "response message.")
        try:

            payload = {"type": "response", "result": "ok"}
            message = {
                "clientTime": int(time.time()),
                "message": "sensoralert",
                "payload": payload
            }
            self.client.send(json.dumps(message))

        except Exception as e:
            logging.exception("[%s]: Sending sensor alert " % self.fileName +
                              "response failed.")

            return False

        # trigger all alerts that have the same alert level
        for alert in self.alerts:
            for alertLevel in alertLevels:
                if alertLevel in alert.alertLevels:
                    # trigger alert in an own thread to not block this one
                    alertTriggerProcess = AsynchronousAlertExecuter(alert)
                    alertTriggerProcess.sensorDescription = description
                    alertTriggerProcess.state = state
                    alertTriggerProcess.dataTransfer = dataTransfer
                    alertTriggerProcess.data = data
                    # set thread to daemon
                    # => threads terminates when main thread terminates
                    alertTriggerProcess.daemon = True
                    alertTriggerProcess.triggerAlert = True
                    alertTriggerProcess.start()

        return True