Exemplo n.º 1
0
 def read_status_cfg(self):
     try:
         readcfg = open("/td01/status.json", "r").read()
         if readcfg:
             cfg = json.loads(readcfg)
         else:
             self.msg = "配置文件解析错误!"
             return False, {}
         upgrade_url = str(cfg.get("upgrade_url")).replace(" ", "")
         result = urlparse.urlsplit(upgrade_url)
         scheme = result.scheme
         netloc = result.netloc
         query = result.query
         if scheme in ["ftp", "http", "https"]:
             self.mode = scheme
         else:
             self.msg = "意外的工作模式,检查upgrade_url!"
             return False, {}
         content = {
             "scheme": scheme,
             "netloc": netloc,
         }
         if scheme == "ftp":
             query_list = query.split("&")
             for data in query_list:
                 temp = data.split("=")
                 key = temp[0]
                 value = temp[1]
                 content[key] = value
         return True, content
     except Exception as e:
         logger.error(str(e))
         return False, {}
Exemplo n.º 2
0
 def instauto(self):
     while True:
         status, cfg = self.read_status_cfg()
         if not status:
             logger.error("配置读取失败!")
         else:
             scheme = cfg.get("scheme")
             if tupdate1.status == tupdate1.ST_INIT or tupdate1.status == tupdate1.ST_INSTALLFINISH or tupdate1.status == tupdate1.ST_INSTALLFAIL or tupdate1.ST_DOWNFAILED:
                 try:
                     if scheme == "http" or scheme == "https":
                         res = self.compare_versions()
                         r = json.loads(res)
                         state = r.get("success", "")
                         if state == True:
                             tupdate()
                     elif scheme == "ftp":
                         print "------->ftp updata start"
                         ftp_ip = cfg.get("netloc")
                         ftp_port = int(cfg.get("port"))
                         ftp_user = cfg.get("user")
                         ftp_pass = cfg.get("pass")
                         ftp_path = "/td01/update"
                         if not os.path.exists(ftp_path):
                             os.makedirs(ftp_path)
                         filename = ""
                         ftp = Ftp()
                         ftp.connect_ftp(ftp_ip, ftp_port, ftp_user,
                                         ftp_pass)
                         for file in ftp.lst_file():
                             if os.path.splitext(file)[1] == '.pkt':
                                 filename = file
                                 break
                         else:
                             continue
                         filepath = ftp.downloadfile(ftp_path, filename)
                         ftp.delete(filename)
                         ftp.close()
                         self.packet_install(filepath)
                         print self.msg
                 except Exception as e:
                     logger.error(str(e))
         time.sleep(self.starttime * 30)
Exemplo n.º 3
0
    def packet_install(self, package_path, version="", version_type=""):
        if not os.path.exists(package_path):
            self.status = self.ST_INSTALLFAIL
            self.msg = "文件不存在!"
        filename = package_path
        try:
            logger.info("installing start!")
            self.msg = "安装阶段,安装中!"

            if install_pkt.td01_install_pkt(filename, version,
                                            version_type) == True:
                self.version = version
                self.status = self.ST_INSTALLFINISH
                self.msg = "安装阶段,安装成功!"
            else:
                self.status = self.ST_INSTALLFAIL
                self.msg = "安装阶段,安装失败!"

            logger.info("installing end!")
            logger.info(self.msg)
        except Exception, e:
            self.msg = "安装阶段,安装失败!"
            logger.error("install failure!" + str(e))
            self.status = self.ST_INSTALLFAIL
Exemplo n.º 4
0
 def compare_versions(self):
     # if request.method == "POST":
     try:
         f = open(config.STATUS_FILE_PATH, 'r')
         content = json.loads(f.read())
         f.close()
         upgrade_url = content.get("upgrade_url", "")
         code_version = content.get("code_version", "")
         poc_version = content.get("poc_version", "")
         rule_version = content.get("rule_version", "")
         url = "%s/version/compare?code_version=%s&poc_version=%s&rule_version=%s" % (
             upgrade_url, code_version, poc_version, rule_version)
         logger.info(url)
         try:
             res = requests.get(url, timeout=10, verify=False)
             html = cgi.escape(res.text)
             res = json.loads(html)
             print res
         except:
             res = {"success": False, "msg": "服务器连接失败!请检查网址是否正确!"}
         is_update = res.get("is_update", 0)
         success = res.get("success", False)
         scan_status = "STOP"  # 默认d01不在扫描状态
         '''
         try:
             content = os.popen('td01_status_path').read().rstrip()
             print('td01_status=======', content)
             status_dict = json.loads(content.replace("'","\""))
             scan_status = status_dict.get("status","STOP")
         except:
             scan_status = "STOP"
         '''
         if scan_status == "RUNING":
             content = {
                 "success": False,
                 "state": 0,
                 "msg": "正在扫描资产中,无法获取升级状态!",
                 "version": ""
             }
         else:
             if success:
                 if is_update == 1:
                     version = res.get("version", "")
                     version_type = res.get("type", "code")
                     state = self.get_state(version_type)
                     content = {
                         "success": True,
                         "state": state,
                         "msg": "",
                         "version": version,
                         "version_type": version_type,
                         "is_update": is_update,
                         "upgrade_url": upgrade_url,
                     }
                 elif is_update == 0:
                     version_type = res.get("type", "code")
                     state = self.get_state(version_type)
                     content = {
                         "success": False,
                         "state": state,
                         "version_type": version_type,
                         "msg": "版本还没有更新,请耐心等待!",
                         "version": ""
                     }
                 else:
                     content = {
                         "success": False,
                         "state": 0,
                         "msg": "更新状态获取失败!",
                         "version": ""
                     }
             else:
                 content = {
                     "success": False,
                     "state": 0,
                     "msg": res.get("msg", ""),
                     "version": "1.1"
                 }
     except Exception, e:
         logger.error(str(e))
         content = {"success": False, "state": 0, "msg": "获取版本对比信息失败!"}
Exemplo n.º 5
0
    def get_file(self, version, url, filename, version_type):
        """
        下载文件,并记录下载进度等内容
        :param url:
        :param filename:
        :return:
        """
        try:
            update_path = url
            with closing(requests.get(url, stream=True)) as response:
                chunk_size = 1024
                content_size = int(response.headers['Content-Length'])
                content_disposition = response.headers['Content-Disposition']
                reg = re.search('filename=(?P<filename>[^\s]*)',
                                content_disposition)
                if reg:
                    filename = reg.group("filename")
                else:
                    # get file failed
                    return
                data_count = 0
                filename = os.path.join(config.UPDATE_PATH, filename)
                logger.info("download file store:" + filename)
                with open(filename, "wb") as file:
                    for data in response.iter_content(chunk_size=chunk_size):
                        file.write(data)
                        data_count = data_count + len(data)
                        # print(data_count)
                        self.progress = (float(data_count) /
                                         float(content_size)) * 100
                        self.progress = round(self.progress, 3)
                        if self.progress == 100:
                            self.msg = "下载阶段,下载成功!"
                            self.status = self.ST_DOWNSUCCESS
                        else:
                            self.status = self.ST_DOWNING
                            self.msg = "下载阶段,下载中!"
            logger.info(self.msg)
            if self.progress != 100.0:
                self.msg = "下载阶段:下载失败!"
                self.status = self.ST_DOWNFAILED
                logger.info(self.msg)
                return
            try:
                logger.info("installing start!")
                self.msg = "安装阶段,安装中!"
                if install_pkt.td01_install_pkt(filename, version,
                                                version_type) == True:
                    self.version = version
                    self.status = self.ST_INSTALLFINISH
                    self.msg = "安装阶段,安装成功!"

                else:
                    self.status = self.ST_INSTALLFAIL
                    self.msg = "安装阶段,安装失败!"

                logger.info("installing end!")
                logger.info(self.msg)
            except Exception, e:
                self.msg = "安装阶段,安装失败!"
                logger.error("install failure!" + str(e))
                self.status = self.ST_INSTALLFAIL
        except Exception, e:
            logger.error(str(e))