Пример #1
0
    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()
Пример #2
0
    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()
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
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))
Пример #7
0
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
Пример #8
0
 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)
Пример #9
0
 def run_command(self, codes):
     rlog("new commands included==>%s" % codes)
     self.commandList.extend(codes)
Пример #10
0
    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