コード例 #1
0
ファイル: browser.py プロジェクト: sweets421/test01
 def openbrowser(self, browser='Chrome', dr=None):
     if browser == 'Chrome' or browser == '':
         if dr == None or dr == '':
             dr = "./lib/chromedriver.exe"
         # 创建一个用来配置Chrome属性的变量
         Options = ChromeOptions()
         # 去掉"Chrome正受到自动测试软件的控制"字样
         Options.add_experimental_option("excludeSwitches", ['enable-automation'])
         # 加载缓存
         user_profile = os.environ['USERPROFILE']
         Options.add_argument(
             '--user-data-dir=' + user_profile + '\\AppData\\Local\\Google\\Chrome\\User Data\\')
         # 打开谷歌浏览器
         self.driver = Chrome(executable_path=dr, options=Options)
         self.writer.write(self.writer.row, 7, 'PASS')
         self.writer.write(self.writer.row, 8, 'Chrome浏览器打开成功')
     elif browser == 'Firefox':
         if dr == None or dr == '':
             dr = '../lib/geckodriver.exe'
         # 打开火狐浏览器
         self.driver = Firefox(executable_path=dr)
         self.writer.write(self.writer.row, 7, 'PASS')
         self.writer.write(self.writer.row, 8, 'Firefox浏览器打开成功')
     elif browser == 'ie':
         if dr == None or dr == '':
             dr = '../lib/IEDriverServer.exe'
         # 打开ie浏览器
         self.driver = Ie(executable_path=dr)
         self.writer.write(self.writer.row, 7, 'PASS')
         self.writer.write(self.writer.row, 8, 'IE浏览器打开成功')
     else:
         logger.warn("该浏览器暂未实现自动化功能!")
         self.writer.write(self.writer.row, 7, 'FAIL')
         self.writer.write(self.writer.row, 8, '该浏览器暂未实现自动化功能')
     return
コード例 #2
0
 def __get_data1(self, s):
     """
     默认标准参数s是以key=value&key1=value2的格式,如果不是,就原样返回
     :param s:
     :return:
     """
     flg = False
     param = {}
     p = s.split('&')
     try:
         for pp in p:
             ppp = pp.split("=")
             # if ppp[1].isdigit():
             #     param[ppp[0]] = int(ppp[1])
             # else:
             ppp_value = ''
             ppp_value = '='.join(ppp[1:])
             param[ppp[0]] = ppp_value
     except Exception as e:
         flg = True
         logger.warn("url参数格式不标准!")
         print("url参数格式不标准!")
         logger.exception(e)
         print(e)
     # print(param)
     # 如果符合标准格式返回处理后的param,否则,返回原样s
     if flg:
         s = s.encode('utf-8')
         return s
     else:
         return param
コード例 #3
0
ファイル: wxbot.py プロジェクト: zgf123456/ns4_chatbot
        def on_message(msg):
            message = msg.text

            logger.debug("接收到微信消息:type=%s,message=%s", msg.type, msg.text)

            if msg.type == "TEXT":
                logger.debug("从微信端接收的raw消息:%s", message)

                # 把聊天内容保存到文章中
                logger.history(self.type, msg.chat.name, msg.member.name,
                               message)

            #如果不是群聊,不理他
            if not isinstance(msg.chat, Group):
                logger.warn("目前,只支持群聊天")
                return "目前只支持群聊天"

            # 如果是群聊,但没有被 @,则不回复
            # msg.chat:
            #   消息所在的聊天会话,即:
            #   对于自己发送的消息,为消息的接收者
            #   对于别人发送的消息,为消息的发送者

            str_msg = ""
            if msg.type.upper() == "TEXT" and msg.is_at:
                pass
            else:
                logger.debug("不是@给自己的消息,忽略:%s", message)
                return

            #如果录音的话,就不管@没@了,直接接受语音转成文字,作为消息
            if msg.type == "Recording":
                logger.debug("消息格式为声音,使用科大讯飞或百度转化")
                str_msg = "FAILED"  #voice2txt.v2t(msg.get_file())
                logger.debug("科大讯飞转化结果为:%s", str_msg)
                if str_msg is None:
                    logger.error("语音转化失败")
                    return
                else:
                    msg.reply("您说:[" + str_msg + "]")
            elif msg.type.upper() == "TEXT":
                str_msg = self.remove_at(message)

            logger.debug("接收到发给我(bot)的消息:%s", str_msg)

            user = msg.member.name
            group = msg.chat.name

            # 得到我们的业务处理组件 | route(self, client, user, group, msg):
            biz_comp, context = self.bizManager.route(self.type, user, group,
                                                      str_msg)
            # 调用业务组件的接口方法来处理消息
            logger.debug("调用业务组件bot2system:type=%s,user=%s,group=%s,msg=%s",
                         self.type, user, group, str_msg)
            returnMsg = biz_comp.bot2system(self, self.type, context, user,
                                            group, str_msg)

            self.random_wait()  # 间隔一下,防止被封

            return returnMsg
コード例 #4
0
ファイル: mainrunner.py プロジェクト: LeeWJ97/LeeAutoTest
def runcase(obj, line):
    """
    用例执行
    :param obj: 对象
    :param line: 包含所有行的列表
    :return:
    """
    if len(line[0]) > 0 or len((line[1])) > 0:
        # 分组信息不执行,第一列或第二列有文字的说明是分组信息
        return

    func = getfunc(obj, line[3])
    if func is None:
        logger.warn(f'关键字{line[3]}不存在')
        return

    if func[1] == 0:
        func[0]()
    elif func[1] == 1:
        func[0](line[4])
    elif func[1] == 2:
        func[0](line[4], line[5])
    elif func[1] == 3:
        func[0](line[4], line[5], line[6])
    else:
        logger.warn("关键字暂不支持超过3个参数")
コード例 #5
0
 def post(self, path, data=None):
     '''
     :param path: url路径
     :param data: 键值对传参
     :return: 无返回值
     '''
     if not path.startswith('http'):
         path = self.url + '/' + path
     try:
         # 判断data是否需要传参数
         result = None
         if data is None or data == '':
             result = self.session.post(path)
         else:
             # 替换参数
             data = self.__getparms(data)
             logger.info(data)
             # 转为字典
             data = self.__todict(data)
             logger.info(data)
             # 发送请求
             result = self.session.post(path, data)
         self.jsonres = json.loads(result.text)
         self.writer.write(self.writer.row, self.writer.clo, 'PASS')
         self.writer.write(self.writer.row, self.writer.clo + 1,
                           str(self.jsonres))
     except Exception as e:
         self.writer.write(self.writer.row, self.writer.clo, 'FAIL')
         self.writer.write(self.writer.row, self.writer.clo + 1,
                           str(self.jsonres))
         logger.warn(e)
コード例 #6
0
    def send_image(self, group_id, user, img_path):
        logger.debug("发送图片到QQ服务器,群[%s],图片[%s]", group_id, img_path)
        if group_id is None:
            logger.error("错误发送图片到QQ服务器,群名字为空")
            return False
        #./coolq/data/image/CJKunlGo.jpg ==> CJKunlGo.jpg
        #只需要文件名,因为文件已经放到酷Q约定的目录里了,是在bot.conf coolq[cache_path]定义的
        img_name = img_path[img_path.rfind("/") + 1:]

        src = img_path
        dst = self.conf.coolq_cache_path + "/" + img_name

        if src != dst:
            logger.debug("复制QQ图片到酷Q目录,src:%s => det:%s", src, dst)
            copyfile(src, dst)
        else:
            logger.debug("QQ图片源目标相同,忽略:%s", src)

        try:

            self.random_wait()
            #[CQ:image,file=file:///C:\Users\richard\Pictures\1.png]
            if user:
                msg = "[CQ:image,file={}] \n@{}".format(img_name, user)
            else:
                msg = "[CQ:image,file={}]".format(img_name)
            logger.debug(u"发送图片[%s]给QQ群[%s]", msg, group_id)
            return self.send_group_msg(group_id, msg)
        except Exception as e:
            logger.warn(u"发送图片到QQ失败,原因:%s", str(e))
            return False
コード例 #7
0
    def main_loop(self):
        rlist = []
        rlist.append(self.__pipe.inform)
        timeout = 10
        try:
            while self.__running:
                readable, _, _ = select.select(rlist, [], [], timeout)
                if not readable:
                    continue

                if self.__pipe.inform in readable:
                    try:
                        message = self.__pipe.read(256)
                    except OSError, exc:
                        logger.warn("[Error %d] appeared at reading pipe" %
                                    exc.errno)
                        continue

                    if len(message) == 0:
                        continue

                    self.handle_message(message)
        except KeyboardInterrupt:
            logger.error("Break by user.")
        except Exception, ex:
            logger.error("{0}: {1}".format(sys._getframe().f_code.co_name, ex))
コード例 #8
0
 def proto_inst(self):
     protocol_inst = self.protocol_ref()
     if protocol_inst is None:
         msg = '[%d] 连接REF为空, 已断开' % self.chip_id
         logger.warn(msg)
         raise DeviceDisconnected(msg)
     return protocol_inst
コード例 #9
0
ファイル: wxbot.py プロジェクト: zgf123456/ns4_chatbot
    def send(self,
             group_name,
             user_name,
             message,
             html=None):  #html type is "Content"

        groups = self.bot.search(group_name)
        if groups is None or len(groups) == 0:
            logger.warn("无法找到微信群[%s]", group_name)
            logger.warn("因此,    发送消息到微信群失败:%s", message)
            return

        for group in groups:

            self.__send_html(group, html)

            # http://wxpy.readthedocs.io/zh/latest/faq.html,
            # 此api项目不支持@,这里@,只是一个字符串消息而已
            try:
                self.random_wait()
                if user_name:
                    group.send(message + "\n\n@" + user_name)
                else:
                    group.send(message)
            except ResponseError as e:
                logger.exception(e, "发送消息给微信服务失败,原因:%s", str(e))
                return

            logger.debug("成功发给[%s]消息:%s", group_name, message)
コード例 #10
0
ファイル: bot_manager.py プロジェクト: zgf123456/ns4_chatbot
    def send_image(self, groups, user, img_path):
        if not isinstance(groups, dict):
            logger.warn("send_image参数groups不合法,需要字典类型:%r", groups)
            return
        logger.debug("发送图片send_image,groups=%r", groups)
        qq_group = groups.get('qq_group', None)
        wechat_group = groups.get('wechat_group', None)
        email = groups.get('email', None)  #这个设计有些诡异,为了统一,暂时先这样吧

        params = {}
        params["user"] = user
        params["msg_type"] = "image"
        params["img_path"] = img_path
        if qq_group:
            params["group"] = qq_group
            self.send_qq_queue(params)
        if wechat_group:
            params["group"] = wechat_group
            self.send_wechat_queue(params)

        for bot in self.bots:  # bots是qqbot和wxbot的实例
            # if bot.type == "qq" and qq_group:
            #     bot.send_image(qq_group,user,img_path)
            # if bot.type == "wechat" and wechat_group:
            #     bot.send_image(wechat_group,user,img_path)
            if bot.type == "email" and email:
                bot.send_image(email, user, img_path)
コード例 #11
0
ファイル: config.py プロジェクト: caoruitian/StudyPro
def get_config(path):
    """
    powered by Mr Will
               at 2018-12-22
            用来格式化打印日志到文件和控制台
    :param path:配置文件路径
    :return:返回配置文件dict
    """
    global config
    # 重新获取时,先清空配置
    config.clear()
    txt = Txt(path)
    data = txt.read()

    for s in data:
        # 跳过注释
        if s.startswith('#'):
            continue

        if not s.find('=') > 0:
            logger.warn('配置文件格式错误,请检查:' + str(s))
            continue
        try:
            key = s[0:s.find('=')]
            value = s[s.find('=') + 1:s.__len__()]
            config[key] = value
        except Exception as e:
            logger.warn('配置文件格式错误,请检查:' + str(s))
            logger.exception(e)
    return config
コード例 #12
0
ファイル: slurm_utils.py プロジェクト: ljlu1504/EHPC
def update_queues_info_with_nodes_change(queues_info):
    # get addition, deletion node_id, then update queues_info
    #   remove deleted node_id from queues_info
    #   add new node_id to default queues_info
    last_cmpnode_list = get_last_cmpnode_list()
    current_sid = get_current_cmpnode_list()
    for node in last_cmpnode_list:
        if node not in list(current_sid):
            node_in_queue = False
            for _, queue in queues_info.iteritems():
                if node in list(queue[NODEID_LIST]):
                    # remove node from queue nodeid_list
                    logger.warn("remove [%s%s] from queue [%s]",
                                COMPUTE_HOSTNAME_PREFIX, node,
                                queue[PARTITION_NAME])
                    queues_info[NODEID_LIST].remove(node)
                    node_in_queue = True
            if not node_in_queue:
                logger.warn("%s%s doesn't belong to any queue",
                            COMPUTE_HOSTNAME_PREFIX, node)
        else:
            current_sid.remove(node)
    # add new node to default queue
    for node in current_sid:
        for _, queue in queues_info.iteritems():
            if queue[DEFAULT]:
                queue[NODEID_LIST].append(node)

    # update queue Nodes for each Partition in queues_info
    update_queues_node_from_nodeid(queues_info)
コード例 #13
0
ファイル: config.py プロジェクト: sweets421/test01
def get_config(path):
    """
    powered by Jhx at 2020/1/27
    用来将配置文件转换为字典,方便后续使用
    :param path:配置文件路径
    :return:返回配置文件dict
    """
    global config
    config.clear()  # 重新获取时,先清空配置
    txt = Txt(path)
    data = txt.read()
    for s in data:
        if s.startswith('#'):  # 跳过注释
            continue
        if not s.find('='):
            logger.warn('配置文件格式错误,请检查:' + str(s))
            continue
        try:
            key = s[0:s.find('=')]
            value = s[s.find('=') + 1:s.__len__()]
            config[key] = value
        except Exception as e:
            logger.warn('配置文件格式错误,请检查:' + str(s))
            logger.exception(e)

    return config
コード例 #14
0
ファイル: appkeys.py プロジェクト: caoruitian/StudyPro
    def runapp(self, c, t):

        conf = {
            'platformName': 'Android',
            'platformVersion': '6.0.1',
            'deviceName': '127.0.0.1:7555',
            'appPackage': 'com.Glaciwaker.SmithStory',
            'appActivity': 'com.unity3d.player.UnityPlayerActivity',
            'noReset': 'true',
        }

        try:
            c = eval(c)
            for key in c:
                conf[key] = c[key]
        except Exception as e:
            logger.warn('app配置错误,请检查')
            logger.exception(e)

        #多个设备需要指定连接设备
        conf['udid'] = conf['deviceName']
        #确保设备是连上的
        try:
            os.system('adb connect ' + conf['deviceName'])
            os.system('adb devices')
        except:
            pass

        #连接appium并且启动app
        self.driver = webdriver.Remote(
            'http://localhost:' + self.port + '/wd/hub', conf)
        # self.driver = webdriver.Remote('http://127.0.0.1:4777/wd/hub', conf)
        #隐式等待
        self.wait(t)
        return self.driver
コード例 #15
0
    def __send_msg(self, action, target_type, target_id, msg):

        super(QQBot, self).random_wait()  #随机等待3秒

        url = self.conf.coolq_url + action
        qq = self.conf.coolq_qq
        data = {target_type: target_id, "message": msg, "auto_escape": False}

        logger.debug("消息发往酷Q:url=%s,user_id=%s,message=%r", url, qq, data)
        result = http_helper.do_request_json(url, data)
        logger.debug("HTTP返回结果:%r", result)
        if result is None: return False
        '''
        {
            "status": "ok",
            "retcode": 0,
            "data": {
                "id": 123456,
                "nickname": "滑稽"
            }
        }
        '''
        status = result['status']
        retcode = result['retcode']
        error_msg = ERROR_CODE.get(str(retcode), "未知错误码")
        if retcode != 0:
            logger.warn("调用酷Q HTTP接口失败:status=[%s],retcode=[%d],error=[%s]",
                        status, retcode, error_msg)
            return False

        return True
コード例 #16
0
ファイル: router.py プロジェクト: wuwx/espush_server
 def render_GET(self, request):
     apps = request.args.get('app')
     if not apps:
         logger.warn('通过接口查询在线设备,未指定appid')
         request.setResponseCode(400)
         return request.write(json.dumps({"msg": "args error."}))
     dev_objs = []
     for _appid in apps:
         appid = to_int(_appid)
         if not appid:
             logger.warn('接口参数错误,app需为整形')
             request.setResponseCode(400)
             return request.write(json.dumps({"msg": "args type error."}))
         app_devs = gl_routetable.find_devs_appid(appid)
         dev_objs.extend([{
             'appid':
             dev.appid,
             'devid':
             dev.chipid,
             'chipid':
             dev.chipid,
             'latest':
             dev.regtime.strftime('%Y-%m-%d %H:%M:%S'),
             'vertype':
             (0 if 'vertype' not in dev.kwargs else dev.kwargs['vertype']),
             'devkey':
             ('' if 'devkey' not in dev.kwargs else dev.kwargs['devkey']),
         } for dev in app_devs])
     return json.dumps(dev_objs)
コード例 #17
0
def runCases(http, line):
    """
    执行每一行用例的方法
    :param line: 参数列表
    :return: 无
    """
    if len(line[0]) > 0 or len(line[1]) > 0:
        # 分组信息不用执行
        pass
    else:
        func = getattr(http, line[3])
        p = inspect.getfullargspec(func).__str__()
        p = p[p.find('args=') + 5:p.find(', varargs')]
        p = eval(p)
        p.remove('self')

        if len(p) == 0:
            func()
        elif len(p) == 1:
            func(line[4])
        elif len(p) == 2:
            func(line[4], line[5])
        elif len(p) == 3:
            func(line[4], line[5], line[6])
        else:
            logger.warn("框架暂时只支持3个参数!")
コード例 #18
0
ファイル: vipiapp.py プロジェクト: xiar/vpduserv
    def main_loop(self):
        rlist = []
        rlist.append(self.__pipe.inform)
        timeout = 10
        print "Total threads: {0}".format(threading.activeCount())
        try:
            while self.__running:
                readable, _, _ = select.select(rlist, [], [], timeout)
                if not readable:
                    continue

                if self.__pipe.inform in readable:
                    try:
                        message = self.__pipe.read(256)
                    except OSError, exc:
                        logger.warn("[Error %d] appeared at reading pipe" %
                                    exc.errno)
                        continue

                    if len(message) == 0:
                        continue

                    pdu_id = message.split()[0].split('.')[-2]
                    pdu_index = self.to_index(int(pdu_id))
                    logger.info("Assign message to pdu {0}".format(pdu_id))
                    self.__pdus[pdu_index].handle_message(message)
        except KeyboardInterrupt:
            logger.error("Break by user.")
        except Exception, ex:
            logger.error("{0}: {1}".format(sys._getframe().f_code.co_name, ex))
コード例 #19
0
 def _request(self, target, shell, isPost, headers, payload, rsa=0):
     logger.debug("[#] Request _request...")
     if not shell.startswith("/"):
         shell = "/" + shell
     url = "http://" + target + shell
     logger.debug("[#] Request [%s]  ..." % url)
     try:
         if isPost:
             resp = requests.post(url,
                                  headers=headers,
                                  data=payload,
                                  timeout=3)
         else:
             resp = requests.get(url,
                                 headers=headers,
                                 params=payload,
                                 timeout=3)
         if resp.status_code == 200:
             obj = resp.text if not rsa else rsa_decrypt(resp.text)
             obj = obj.strip()
             logger.debug("[#] Is RSA : %d" % rsa)
             logger.debug("[#] Resp : %s" % obj)
             if obj and self.callback and isinstance(self.callback, list):
                 for cb in self.callback:
                     if callable(cb):
                         cb(target, obj)
             elif obj and callable(self.callback):
                 self.callback(target, obj)
         return True
     except Exception as e:
         logger.warn("[!] %s" % e)
         return False
コード例 #20
0
ファイル: merge.py プロジェクト: Betawolf/identity-sampler
def merge(runnames, outname):
  dup_count = 0
  missing_count = 0
  recount = 0
  iterum = 0
  logger = common.logger.getLogger('merger',output='merge.log',level='info')
  dstdir = outname+'-profiles'
  if not os.path.exists(dstdir):
    os.mkdir(dstdir)
  dstps = common.profilestore.ProfileStore(outname+'-db.csv', logger)
  for name in runnames:
    ps = common.profilestore.ProfileStore(name+'-db.csv')
    srcdir = name+'-profiles'
    iterum = dstps.curuid
    for record in ps.records:
      uid = int(record['uid'])
      fname = str(uid)+'.pickle'
      if not os.path.exists(srcdir+os.sep+fname):
        logger.warn("Record {} in '{}' does not have a file.".format(uid, name))
        missing_count += 1
      else:
        tmp = int(dstps.add_record(record))
        if tmp <= recount:
          logger.warn("Record {} in '{}' is not new.".format(uid, name))
          dup_count += 1
        recount = tmp
        shutil.copyfile(srcdir+os.sep+fname, dstdir+os.sep+fname)
    for fromuid in ps.matches:
      for touid in ps.matches[fromuid]:
        dstps.add_match((iterum+int(fromuid)), (iterum+int(touid)))
  print('Total of {} records copied. {} duplicates were discarded. {} records had no corresponding file.'.format(dstps.curuid, dup_count, missing_count))
コード例 #21
0
ファイル: router.py プロジェクト: wuwx/espush_server
 def render_POST(self, request):
     msgtypes = request.args.get('msgtype')
     if not msgtypes:
         logger.info('数据直接推送接口,缺少msgtype')
         request.setResponseCode(400)
         return json.dumps({'msg': 'msgtype empty, ignored.'})
     msgtype = to_int(msgtypes[0])
     content = request.content.read()
     apps = request.args.get('app')
     if not apps:
         logger.info('通用数据推送接口 未获得app编号')
         request.setResponseCode(400)
         return json.dumps({'msg': 'devs empty'})
     if len(apps) > 1:
         logger.info('不可以推送到多个APP')
         request.setResponseCode(400)
         return json.dumps({'msg': 'devs largger than one.'})
     appid = to_int(apps[0])
     chipids = gl_routetable.online_dev_appid(appid)
     if not chipids:
         logger.warn('app 无在线设备')
         request.setResponseCode(400)
         return json.dumps({'msg': 'apps has not online dev.'})
     logger.info('找到在线设备 %s', pprint.pformat(chipids))
     for chipid in chipids:
         logger.info('数据推送至 %d', chipid)
         gl_routetable.msg_dispatch(msgtype, content, chipid, None)
     return json.dumps({'msg': 'OK'})
コード例 #22
0
ファイル: vsentry.py プロジェクト: InfraSIM/vpduserv
    def main_loop(self):
        rlist = []
        rlist.append(self.__pipe.inform)
        timeout = 10
        try:
            while self.__running:
                readable, _, _ = select.select(rlist, [], [], timeout)
                if not readable:
                    continue

                if self.__pipe.inform in readable:
                    try:
                        message = self.__pipe.read(256)
                    except OSError, exc:
                        logger.warn("[Error %d] appeared at reading pipe" %
                                    exc.errno)
                        continue

                    if len(message) == 0:
                        continue

                    self.handle_message(message)
        except KeyboardInterrupt:
            logger.error("Break by user.")
        except Exception, ex:
            logger.error("{0}: {1}".format(sys._getframe().f_code.co_name, ex))
コード例 #23
0
ファイル: monitor.py プロジェクト: shunanya/Redis_monitor
 def send(self, data):
     res, resa = self.compacting(data)
     now = int(time.time() * 1000)
     #        logger.info('Monitor results: %s', str(res))
     addResults = self.__api.addMonitorResults(self.__monitorId, now, res)
     if isinstance(addResults, dict):
         logger.info('Result.Response: %s', str(addResults))
     if 'error' in addResults:
         if addResults.get('errorCode',
                           0) == 4:  #Invalid or expired auth token
             logger.warn(
                 'Result.Response: %s; refresh token and try again..',
                 str(addResults))
             self.__api.updateAuthToken()
             addResults = self.__api.addMonitorResults(
                 self.__monitorId, now, res)
         else:
             logger.error('Undefined error: %s', str(addResults))
     logger.info('Result.Response: %s', json.dumps(addResults))
     if isinstance(resa, basestring) and len(
             resa
     ) > 2 and 'status' in addResults and addResults['status'] == 'ok':
         #           logger.info('addAdditionalResults: %s', json.dumps(resa))
         addResults = self.__api.addMonitorAdditionalResults(
             self.__monitorId, now, resa)
         logger.info('AdResult.Response: %s', json.dumps(addResults))
コード例 #24
0
    def add_dev(self, app_id, app_key, chip_id, **kwargs):
        '''新增设备时在工厂里注册信息

        :type app_id: int
        :type chip_id: int
        :type proto_ref: _weakref.ref
        '''
        assert ('protocol_ref' in kwargs)
        assert ('devkey' in kwargs)
        assert ('vertype' in kwargs)
        assert ('conn_hash' in kwargs)
        dev = EspushDevice(appid=app_id,
                           appkey=app_key,
                           chipid=chip_id,
                           devkey=kwargs['devkey'],
                           vertype=kwargs['vertype'],
                           protocol_ref=kwargs['protocol_ref'],
                           conn_hash=kwargs['conn_hash'])
        # 如果此devices.chipid在本进程内有重复,则检查前者
        for devobj in self._devices:
            if devobj.chipid == chip_id:
                logger.warn('重复设备编号,手动刷新前者。')
                self.check_online_manual(devobj)
        self._devices.append(dev)
        router_facotry.new_dev_online(app_id,
                                      app_key,
                                      chip_id,
                                      devkey=kwargs['devkey'],
                                      vertype=kwargs['vertype'],
                                      conn_hash=kwargs['conn_hash'])
コード例 #25
0
    def __send_html(self, group_id, user, html):
        #还要把大的html消息转成图片发送过去
        if html is None: return

        #这里传入coolq的图片路径,是为了直接生成,不用再拷贝了
        content = html.get_content("qq")
        img_path = ''
        if content:
            img_path = super(QQBot, self).html2img(content,
                                                   self.conf.coolq_cache_path)

        super(QQBot, self).random_wait()

        if img_path is None:
            logger.debug("图片生成失败,发送纯文本给QQ用户:%s", html)
            if content:
                r = self.send_group_msg(group_id, html.get_plain_content())
                logger.debug("CoolQ API调用结果:%r", r)
            return False

        try:
            logger.debug("发送本地HTML生成图片[%s]给QQ用户", img_path)
            r = self.send_image(group_id, user, img_path)
            logger.debug("CoolQ API调用:%r", r)
        except Exception as e:
            logger.warn("发送图片到QQ服务器失败,改为发送文本消息,图片发送失败原因:%s", str(e))
            logger.debug("发送HTML文本给QQ用户:%s", html)
            r = self.send_group_msg(group_id, html.get_plain_content())
            logger.debug("CoolQ API调用结果:%r", r)

        return r
コード例 #26
0
    def preprocessing(self, path, event):
        if not (os.path.exists(path) and os.path.isfile(path)):
            logger.warn('path is not exist '+str(path))
            return

        logger.info("file: %s, %s" % (path, event))
        if event != 'removed' :
            time.sleep(15) #sleeping for sure
            new_path = path+"_"
            logger.info('Move to '+new_path)
            os.rename(path, new_path) #new_path = path #
#            processing
            param = ''
#             details = ''
            lines = tuple(open(new_path, 'r'))
            result = {}
            ad_result = []
            for line in lines :
                worker = 'w?'
                if 'worker' in line :
                    pos = line.find('worker:')+len('worker:')
                    endpos = line.find(';', pos)
                    worker = line[pos:endpos]
#                 logger.info('processing worker '+str(worker)+ '\n' +line)
                wpos = -1
                if result.has_key('worker') and worker in result['worker'] :
                    wpos = result['worker'].index(worker)
#                 logger.info('wpos = '+str(wpos))
                l = line.split('|', 2)
                if len(l) > 0 : #result
                    for item in l[0].split(';') :
                        i = item.split(':')
                        if not i[0] in result :
                            result[i[0]] = []
                        t = self.getCorrectValue(i[1])
                        if wpos >= 0 :
                            result[i[0]][wpos] = t
                        else :
                            result[i[0]].append(t)
                resa = []
                if len(l) > 1 : #additional result
#                    ad_result[worker] = str(l[1])
#                     ll = l[1].split("+");
#                     if len(ll) > 0 :
                    for k,v in simplejson.loads(l[1]).iteritems():
                        val = str(k)+":"+str(v)
                        self.addAdditionalData(val.strip(), resa)
                    ad_result.append(resa)
                        
#             for worker in ad_result :
#                 if len(details) > 0 :
#                     details += ' + '
#                 details += "worker: "+worker+" + "+str(ad_result[worker]).strip('{').rstrip('}').replace(' ','').replace('},', '} + ').replace("'",'').replace('"','')
                    
            param = str(result).strip('{').rstrip('}').replace(' ','').replace("'",'').replace('"','').replace('],', '];')
            return_value=param +';additionalResults:'+str(ad_result).replace("'","").replace("\"","")
#             logger.info('Returns: '+str(return_value))

            return return_value 
コード例 #27
0
 def reset(self):
     if self.waiting_step:
         logger.warn(
             'Called reset() while waiting for the step to complete')
         self.step_wait()
     for pipe in self.parent_pipes:
         pipe.send(('reset', None))
     return self._decode_obses([pipe.recv() for pipe in self.parent_pipes])
コード例 #28
0
ファイル: vsentry.py プロジェクト: InfraSIM/vpduserv
    def handle_outlet(self, args):
        '''
        1. Get current outlet state
        2. Get the current outlet action
        '''
        # self.logger.info("handle outlet {0}/{1}".format(outlet, self.pdu))
        outlet = args[0]
        action = args[1]
        logger.info("handle outlet {0}/{1}, action: {2}"
                    .format(outlet, self.pdu, self.actions[int(action)]))
        vmname = self.__node_control_handler.get_node_name(1, int(outlet))
        if vmname is None:
            self.set_outlet_field(self.outlet_action_oid_offset, outlet, 0)
            logger.error("No virtual node found for outlet {0}".format(outlet))
            return

        datastore = self.__node_control_handler.get_node_datastore(vmname)
        if datastore is None:
            self.set_outlet_field(self.outlet_action_oid_offset, outlet, 0)
            logger.error("No datastore found for virtual node {0}"
                         .format(vmname))
            return

        # action = self.get_outlet_field(self.outlet_action_oid_offset, outlet)
        state = self.get_outlet_field(self.outlet_state_oid_offset, outlet)
        if self.actions[int(action)] == 'none' or \
                self.actions[int(action)] == self.states[int(state)]:
            logger.warn("No need to execute the action: {}"
                        .format(self.actions[int(action)]))
            return

        # restore the action default to "none"
        if self.actions[int(action)] == 'on':
            # 'on' state
            self.set_outlet_field(self.outlet_state_oid_offset, outlet, 5)
            status = self.__node_control_handler.power_on_node(datastore,
                                                               vmname)
        elif self.actions[int(action)] == 'off':
            # 'off' state
            self.set_outlet_field(self.outlet_state_oid_offset, outlet, 4)
            status = self.__node_control_handler.power_off_node(datastore,
                                                                vmname)
        elif self.actions[int(action)] == 'reboot':
            # 'off' state
            self.set_outlet_field(self.outlet_state_oid_offset, outlet, 8)
            status = self.__node_control_handler.reboot_node(datastore, vmname)
            # 'on' state
            self.set_outlet_field(self.outlet_state_oid_offset, outlet, 5)
        else:
            logger.error("Unknown action: {0}".format(action))
            return

        if status != 0:
            logger.error("Failed to {0} virtual node."
                         .format(self.actions[int(action)]))
            return
        self.set_outlet_field(self.outlet_action_oid_offset, outlet, 0)
コード例 #29
0
 def find_devs(self, chipid):
     devs = [dev for dev in self._devices if dev.chipid == chipid]
     if not devs:
         logger.warn('未找到设备 [%d]', chipid)
         raise DeviceNotFound('Device [%d] not found.' % chipid)
     if len(devs) > 2:
         logger.warn('发现 [%d] 个设备连接 [%d]', len(devs), chipid)
         raise MultiDeviceFound('MultiDevice found.')
     return devs[0]
コード例 #30
0
ファイル: router.py プロジェクト: wuwx/espush_server
 def msgfromid(self, msgid):
     msgs = [msg for msg in self.__msgs if msg.msgid == msgid]
     if not msgs:
         logger.info('收到来自服务进程 的数据但未找到源请求')
         raise Exception("data from svc, but msgid not found")
     if len(msgs) > 1:
         logger.warn('收到来自服务进程的数据,找到超过一个来源请求,异常')
         raise Exception('data from svc, but multi msgid')
     return msgs[0]
コード例 #31
0
    def handle_outlet(self, args):
        '''
        1. Get current outlet state
        2. Get the current outlet action
        '''
        # self.logger.info("handle outlet {0}/{1}".format(outlet, self.pdu))
        outlet = args[0]
        action = args[1]
        logger.info("handle outlet {0}/{1}, action: {2}".format(
            outlet, self.pdu, self.actions[int(action)]))
        vmname = self.__node_control_handler.get_node_name(1, int(outlet))
        if vmname is None:
            self.set_outlet_field(self.outlet_action_oid_offset, outlet, 0)
            logger.error("No virtual node found for outlet {0}".format(outlet))
            return

        datastore = self.__node_control_handler.get_node_datastore(vmname)
        if datastore is None:
            self.set_outlet_field(self.outlet_action_oid_offset, outlet, 0)
            logger.error(
                "No datastore found for virtual node {0}".format(vmname))
            return

        # action = self.get_outlet_field(self.outlet_action_oid_offset, outlet)
        state = self.get_outlet_field(self.outlet_state_oid_offset, outlet)
        if self.actions[int(action)] == 'none' or \
                self.actions[int(action)] == self.states[int(state)]:
            logger.warn("No need to execute the action: {}".format(
                self.actions[int(action)]))
            return

        # restore the action default to "none"
        if self.actions[int(action)] == 'on':
            # 'on' state
            self.set_outlet_field(self.outlet_state_oid_offset, outlet, 5)
            status = self.__node_control_handler.power_on_node(
                datastore, vmname)
        elif self.actions[int(action)] == 'off':
            # 'off' state
            self.set_outlet_field(self.outlet_state_oid_offset, outlet, 4)
            status = self.__node_control_handler.power_off_node(
                datastore, vmname)
        elif self.actions[int(action)] == 'reboot':
            # 'off' state
            self.set_outlet_field(self.outlet_state_oid_offset, outlet, 8)
            status = self.__node_control_handler.reboot_node(datastore, vmname)
            # 'on' state
            self.set_outlet_field(self.outlet_state_oid_offset, outlet, 5)
        else:
            logger.error("Unknown action: {0}".format(action))
            return

        if status != 0:
            logger.error("Failed to {0} virtual node.".format(
                self.actions[int(action)]))
            return
        self.set_outlet_field(self.outlet_action_oid_offset, outlet, 0)
コード例 #32
0
ファイル: vsentry.py プロジェクト: InfraSIM/vpduserv
 def handle_message(self, message):
     logger.info("Got new message {0}".format(message))
     oid = message.split()[0]
     outlet = oid.split('.')[-1]
     value = message.split()[1]
     if oid.startswith(self.outlet_action_oid_offset):
         self.add_task("handle outlet {0}".format(outlet),
                       self.handle_outlet, int(outlet), value)
     else:
         logger.warn("{0} is not handled now.".format(message))
コード例 #33
0
    def send(self, group_id, user, message, html=None):
        msg = message
        if user:
            msg = message + "\n@" + user
        r = self.send_group_msg(group_id, msg)

        if not r:
            logger.warn("CoolQ调用API失败")

        self.__send_html(group_id, user, html)
コード例 #34
0
ファイル: httpkeys.py プロジェクト: caoruitian/StudyPro
 def removeheader(self,key):
     try:
         self.session.headers.pop(key)
         # logger.debug(self.session.headers)
         self.write.write(self.write.row, self.write.clo, 'PASS')
         self.write.write(self.write.row, self.write.clo + 1, self.session.headers)
     except Exception as e:
         logger.warn("warn:没有可删除的头")
         self.write.write(self.write.row, self.write.clo, 'PASS')
         self.write.write(self.write.row, self.write.clo + 1, 'warn:没有可删除的头')
コード例 #35
0
 def handle_message(self, message):
     logger.info("Got new message {0}".format(message))
     oid = message.split()[0]
     outlet = oid.split('.')[-1]
     value = message.split()[1]
     if oid.startswith(self.outlet_action_oid_offset):
         self.add_task("handle outlet {0}".format(outlet),
                       self.handle_outlet, int(outlet), value)
     else:
         logger.warn("{0} is not handled now.".format(message))
コード例 #36
0
ファイル: vhawk.py プロジェクト: InfraSIM/vpduserv
    def handle_outlet(self, args):
        outlet = args[0]
        action = args[1]

        logger.info("handle outlet {0}/{1}, action: {2}".
                    format(outlet, self.pdu, self.actions[int(action)]))

        on_offset = self.pduouton_oid_offset + "." + str(self.to_oid_pdu(self.pdu))
        action_in_oid = self.extract(self.get_outlet_field(on_offset, outlet))

        logger.warn("action: {0}, action_in_oid: {1}".
                    format(self.actions[int(action)],
                           self.actions[int(action_in_oid)]))

        vmname = self.__node_control_handler.get_node_name(int(self.pdu),
                                                           int(outlet))
        if vmname is None:
            logger.error("No virtual node found for outlet {0}".format(outlet))
            return

        datastore = self.__node_control_handler.get_node_datastore(vmname)
        if datastore is None:
            logger.error("No datastore found for virtual node {0}".
                         format(vmname))
            return

        # Make sure the action as the last one
        logger.info("last action: {0}, current action: {1}".
                    format(self.action_list[int(outlet) - 1],
                           self.actions[int(action)]))
        if self.action_list[int(outlet) - 1] == self.actions[int(action)]:
            logger.warn("No need to execute action for {0}/{1}".
                        format(outlet, self.pdu))
            return

        if self.actions[int(action)] == 'on':
            status = self.__node_control_handler.power_on_node(datastore,
                                                               vmname)
        elif self.actions[int(action)] == 'off':
            status = self.__node_control_handler.power_off_node(datastore,
                                                                vmname)
        elif self.actions[int(action)] == 'reboot':
            status = self.__node_control_handler.reboot(datastore, vmname)
        else:
            logger.error("Unknown action: {0}".format(action))

        if status != 0:
            logger.error("Failed to {0} virtual node.".
                         format(self.actions[int(action)]))
            return
        self.action_list[int(outlet) - 1] = self.actions[int(action)]
コード例 #37
0
    def send(self, res):
#         res, resa = self.compacting(data)
        now = int(time.time()*1000)
        logger.info('Monitor results: %s', str(res))
        addResults = self.__api.addMonitorResults(self.__monitorId, now, res )
        if isinstance(addResults, dict):
            logger.info('Result.Response: %s', str(addResults))                      
            if 'error' in addResults :
                if addResults.get('errorCode', 0) == 4 : #Invalid or expired auth token
                    logger.warn('Result.Response: %s; refresh token and try again..', str(addResults))
                    self.__api.updateAuthToken()
                    addResults = self.__api.addMonitorResults(self.__monitorId, now, res )
                else :
                    logger.error('Undefined error: %s', str(addResults))
コード例 #38
0
ファイル: vhawk.py プロジェクト: InfraSIM/vpduserv
 def handle_message(self, message):
     oid = message.split()[0]
     outlet = oid.split('.')[-1]
     value = message.split()[1]
     logger.info("Handle message {0}".format(message))
     if message.startswith(self.pduouton_oid_offset):
         self.add_task("handle_outlet-{0}".
                       format(outlet), self.handle_outlet,
                       int(outlet), value)
     elif message.startswith(self.pduoutpwd_oid_offset):
         self.add_task("handle_password-{0}".
                       format(outlet), self.handle_password,
                       int(outlet), value)
     else:
         logger.warn("{0} is not handled now.".format(message))
コード例 #39
0
def prune_cache (*links):
    """
    Prunes 404ed entries from the internal WebEntity.webcache.

    This function accepts only links to boards and pages.
    If no links are given every board on 4chan is checked.
    """
    pool = Pool(num_threads=parameters.num_threads)

    def work (unit):
        if isinstance(unit, Thread):
            return unit

        logger.info('working %r', unit)
        for e in unit.process():
            pool.push(work, e)

        return unit

    if not links:
        links = all_boards

    for link in map(classify, links):
        if isinstance(link, Thread):
            logger.warn('ignoring %s', link)

        pool.push(work, link)

    pool.join()
    logger.info('Join complete, pruning cache.')

    live = pool.get_results()
    pool.close()

    live = map(lambda alive : alive.apiurl  , live)
    live = map(WebEntity.webcache.url_to_key, live)
    live = set(live)

    keys = WebEntity.webcache.keys()
    keys = filter (
        lambda key : key not in live,
        keys
    )

    for key in keys:
        logger.info('pruning %s', key)
        WebEntity.webcache.remove_key(key)
コード例 #40
0
if not filename :
    logger.critical('Cannot find monitoring file')
    sys.exit
    
logger.info('monitoring file: '+filename)

tm = -1
while True : # watching for changes in monitoring file
    try :
        ntm = path.getmtime(filename)
    except os.error :
        ntm = -1
        
    if ntm != tm :
        if tm >= 0 and ntm < 0 :
            action = 'removed'
#         elif tm < 0 and ntm >= 0 :
#             logger.info('new tm = '+str(ntm))
#             action = 'created'
        else :
            action = 'updated' #or created
            data = custom.preprocessing(filename, action)
            if data and len(data) > 0 :
                custom.send(data)
            else :
                logger.warn('No data to send.')   
        tm = ntm      
              
    time.sleep(1) # watching every second

logger.info('FINISHED')
コード例 #41
0
 def __call__(self):
     info("this is info slf4j")
     error("error=%s" % (grinder.processNumber))
     warn("warn=%s" % (grinder.processNumber))
     debug("debug=%s" % (grinder.processNumber))