def post(self): current_config = get_network_config() try: data = tornado.escape.json_decode(self.request.body) print("data", data) except Exception as e: rlog(e.__repr__()) self.write(json.dumps({'status': 'error', 'alert': '请输入有效的网络配置'})) self.finish if data == current_config: self.write( json.dumps({ 'status': 'not ok', 'data': 'Config remain the same as before' })) else: # try: set_network_config(dict(data)) defer_reboot(3) self.write( json.dumps({ 'status': 'ok', 'alert': "即将重启设备。请到新的ip登录。" })) self.finish()
def post(self): try: data = tornado.escape.json_decode(self.request.body) except Exception as e: rlog(e) # print(e) self.set_status(400) self.write(json.dumps({"error": "unable to parse"})) self.finish() module_id = data.get("module_id") index=data.get("index") print("module_id",module_id) print("index",index) if not module_id or not index: self.set_status(400) self.write(json.dumps({"error": "need module_id and index to proceed"})) self.finish() v=validate(module_id,index,dataCenter.vanila_status) if not v[0]: self.set_status(400) self.write(json.dumps({"error": v[1]})) self.finish() # 检查信息的有效性。至少不能死机啊。要健壮。不管上头feed什么都不能挂。 else: code=AlertOffCode(module_id,index,dataCenter.vanila_status) dataFeeder.run_command([code]) self.set_status(200) self.write(json.dumps({"success":True})) self.finish()
def recover_blink(dataCenter): # 尝试recover:如果没有文件,就建一个新文件。 if not os.path.exists(setting.backup_blink): with open(setting.backup_blink, 'w') as file: file.write("") rlog("没有找到闪灯频率的备份") return with open(setting.backup_blink, 'r') as file: try: self.blink_freq = json.loads(file.read()) print("成功载入闪灯频率") print(self.blink_freq) except Exception as e: print("没有载入闪灯频率==>") elog(e)
def recover_light(dataCenter): # 尝试recover:如果没有文件,就建一个新文件。 if not os.path.exists(setting.backup_light): with open(setting.backup_light, 'w') as file: file.write("") rlog("没有找到远程平台备份") return with open(setting.backup_light, 'r') as file: try: dataCenter.vanila_light = purify_light(json.loads(file.read())) print("成功载入灯光缓存") print(dataCenter.vanila_light) except Exception as e: print("没有载入灯光缓存==>") print(e)
def recover_host(dataCenter): # 尝试recover:如果没有文件,就建一个新文件。 if not os.path.exists(setting.backup_host): with open(setting.backup_host, 'w') as file: file.write("") rlog("没有找到远程平台备份") return with open(setting.backup_host, 'r') as file: try: file = file.read() print("file read===>", file) dataCenter.host = json.loads(file) print("成功载入上位机缓存") print(dataCenter.host) except Exception as e: print("没有载入上位机缓存==>") print(e)
def upload(uri, address, content): # print("<%s:%s>==><content: %s>"%(uri,address,content)) client = AsyncHTTPClient() h = HTTPHeaders({"Content-Type": "application/json"}) req = HTTPRequest(url="http://" + uri + address, method="POST", body=json.dumps(content), headers=h) try: t0 = time() yield client.fetch(req) t1 = time() t = t1 - t0 rlog("uploaded success!!<%s:%s><content %s><in %s s>" % (uri, address, content, t)) except Exception as e: rlog("upload failed!!<%s:%s><content %s><error %s>" % (uri, address, content, e))
def update_temp(temp, temp_cache, failure_cache, allow_failure): # temp是一个list,里边有n个t.每个t有三个元素。 # 会用temp更新temp_cache和failure_cache.并返回1,0表示缓存数据是否有更新。 # temp_cache和failure_cache传进来是dict,所以会被更新。 # 这个函数里 temp_cache, failure_cache会被改写 def valid(t): result = 0 if t[2] > 0: result = 1 # print("%s is valid? %s"%(t,result)) return result # return 1 if t[2]>0 else 0 updated = 0 l = len(temp) # # try: # print("temp",temp) # print("temp_cache",temp_cache) for i in range(l): if valid(temp[i]): # print(temp[i],"is valid") # print("comparing",temp[i],temp_cache[i]) if temp[i] != temp_cache[i]: updated = 1 temp_cache[i] = temp[i] failure_cache[i] = 0 else: # 如果已经not valid了,而且与上次一样。就跳过。不再累加updated.最终将返回0 if not valid(temp_cache[i]): continue failure_cache[i] += 1 rlog("failure_cache %s times for %s" % (failure_cache[i], temp_cache[i])) if failure_cache[i] > allow_failure: rlog("no more cache!") temp_cache[i] = temp[i] updated = 1 # except Exception as e: # elogger.exception(e) # print("updated",updated) return updated
def _runCommand(self, all_loaded_required=True): "never call it directly. Call it by modifying feeders's command List.传入一个codeList,会按顺序执行。然后清空command_list." if not self.commandList: return if all_loaded_required: if not dataCenter.all_loaded: rlog("not fully loaded.See you next time.") return n = 0 while self.commandList: n += 1 if n > setting.write_bunch: break i = self.commandList.pop() rlog("enquirying: %s" % i) feedback = write_enquiry_fast(self._ser, i.code, setting.write_delay) if not feedback == i.code: rlog("feedback<%s>||code<%s>" % (map_long(feedback), map_long(i.code))) rlog("added <%s> to list.will do it again." % i) self.run_command([i]) else: dataCenter.update_light(i)
def run_command(self, codes): rlog("new commands included==>%s" % codes) self.commandList.extend(codes)
def post(self): self.set_header("Content-Type", "application/json") try: apikey = self.get_argument("apikey") apikey = apikey.lower() except Exception as e: self.write(json.dumps({"err_code": -2})) self.finish() return if not apikey == "f6fdffe48c908deb0f4c3bd36c032e72": self.write(json.dumps({"err_code": -1})) self.finish() return try: action = self.get_argument("action") action = action.lower() # print(action) except Exception as e: self.write(json.dumps({"err_code": -2})) self.finish() elogger.exception(e) return if action == "set_status": try: data = tornado.escape.json_decode(self.request.body) print(data) except Exception as e: elog(e) # print(e) self.write(json.dumps({"err_code": -3})) self.finish() error_data, codes_to_execute = dataCenter.parse_setting(data) # print("parsing result", results) rlog("error_data:%s" % error_data) rlog("codes_to_execute:%s" % codes_to_execute) self.write(json.dumps(error_data)) dataFeeder.run_command(codes_to_execute) dataCenter.save() self.finish() elif action == "set_blinkfreq": try: data = tornado.escape.json_decode(self.request.body) print(data) except Exception as e: self.write( json.dumps({ "err_code": -3, "message": "failed to parse input as json" })) # self.return() elog(e) print(e) self.finish() codes_to_execute, cache_dic, error_data = dataCenter.parse_blink_freq( data) dataFeeder.blink_freq = cache_dic dataCenter.save_blink() dataFeeder.run_command(codes_to_execute) self.write(json.dumps(error_data)) self.finish() else: self.write(json.dumps({"err_code": -4})) self.finish() return