Ejemplo n.º 1
0
    def run(self):
        while True:
            try:
                task = self.que_manager.getQue(self.get_que_name)
                if task is None:
                    time.sleep(0.5)
                    continue
                
                image_dir = task['image_dir']
                for f in os.listdir(image_dir):
                    img_path = os.path.join(image_dir, f)
                    md5 = utils.calc_md5(img_path)
                    if utils.get_key(md5, rcli=utils.g_md5_redis) is Not None:
                        # md5 duplicated, remove image and process next
                        utils.remove_file(img_path)
                        continue
                    
                    # md5 unique, record to redis
                    utils.set_key(md5, 1, rcli=utils.g_md5_redis)

                    # image quality check
                    score = image_util.calc_quality(img_path)
                    if score < quality_thres:
                        utils.remove_file(img_path)
                        continue
                    
                    # put to feature detect que
                    task = {}
                    task['img_path'] = img_path
                    self.que_manager.putQue(json.dumps(task), utils.msg_queues['feature_detect'])
            except Exception as e:
                log_util.error("ImageETL run error: %s", str(e))
                time.sleep(0.5)
Ejemplo n.º 2
0
def getWeixinData(openID, accessToken):  #获得微信信息
    url = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s" % (
        accessToken, openID)
    message = getUrlMessage(url)
    if 'errcode' in message:
        log_util.error('weixin get player data error: %s' % message)
        return False
    else:
        return message
Ejemplo n.º 3
0
def checkWeixinCode4fish(code):  #捕鱼校验微信code
    url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code"\
            %(APPID_FISH, SECRET_FISH, code)
    message = getUrlMessage(url)
    if 'errcode' in message:
        log_util.error('weixin check code error:[%s]' % message)
        return False
    else:
        return message
Ejemplo n.º 4
0
def getUrlMessage(getUrl):
    socket.setdefaulttimeout(WAIT_WEB_TIME)
    try:
        url = urllib.urlopen(getUrl)
        data = url.read()
        message = json.loads(data)
    except Exception, e:
        log_util.error('get weixin message error: %s' % e)
        message = {'errcode': 123}
Ejemplo n.º 5
0
def checkAccessToken(openID, access_token):  #校验accessToken
    url = "https://api.weixin.qq.com/sns/auth?access_token=%s&openid=%s" % (
        access_token, openID)
    message = getUrlMessage(url)
    if message['errcode']:
        log_util.error('weixin check access token error: %s' % message)
        return False
    else:
        return True
Ejemplo n.º 6
0
 def connect(self):
     try:
         return pymysql.connect(host='rm-j6c4883wd5345860apo.mysql.rds.aliyuncs.com',
                          user='******',
                          password='******',
                          db='image_db',
                          cursorclass=pymysql.cursors.DictCursor)
     except Exception as e:
         log_util.error("DBOperation::connect fail: %s", str(e))
Ejemplo n.º 7
0
def onRefreshToken(refreshToken):  #刷新accessToken
    url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=%s&grant_type=refresh_token&refresh_token=%s" % (
        APPID, refreshToken)
    message = getUrlMessage(url)
    if 'access_token' in message:
        return message['access_token']
    else:
        log_util.error('weixin refresh token error: %s' % message)
        return False
Ejemplo n.º 8
0
 def execute(self, sql):
     try:
         # check connection alive (if not, ping will reconnect)
         self.connection.ping()
         cursor = self.connection.cursor()
         log_util.debug("DBOperation::execute [%s]", sql)
         cursor.execute(sql)
         self.connection.commit()
     except Exception as e:
         log_util.error("DBOperation::execute fail: %s", str(e))
Ejemplo n.º 9
0
def deleteMsg(redis,msgId,memberId):
    """
    从玩家列表中移除
    """
    userMsgBox = FORMAT_USER_MESSAGE_LIST%(memberId)
    readList   = redis.smembers(FORMAT_MSG_READ_SET%(msgId))
    pipe = redis.pipeline()

    try:
        pipe.lrem(userMsgBox,msgId)
    except Exception,e:
        log_util.error('[try deleteMsg] ERROR msgId[%s] memberId[%s] errReason[%s]'%(msgId,memberId,e))
        return
Ejemplo n.º 10
0
def do_take_benefit(redis,session):
    """ 救济金补领接口 """

    fields = ('sid','token')
    for field in fields:
        exec(consts.FORMAT_PARAMS_POST_STR%(field,field))

    SessionTable,account,uid,verfiySid = getInfoBySid(redis,sid)
    check_code,check_msg,user_table,osid = check_session_verfiy(redis,'/fish/getRewardInfo/',SessionTable,account,sid,verfiySid)

    # ----------暂时可无限领取弹头救济金-----------------
    '''
    warhead = redis.hget('users:%s'%uid,'warhead') 
    warhead = int(warhead or 0)
    if warhead < 1000:
        redis.hincrby('users:%s'%uid,20000)
        sendProtocol2AllGameService(redis, HEAD_SERVICE_PROTOCOL_MEMBER_REFRESH%(account),game="FISH")
        return {'code':0,'msg':'领取救济金成功'}
    '''
    # ----------暂时可无限领取弹头救济金-----------------

    log_util.debug('[try do_refresh] check_code[%s] check_msg[%s]'%(check_code,check_msg))
    if int(check_code)<0:
        if check_code == -4:
            return {'code':check_code,'msg':check_msg,'osid':osid}
        return {'code':check_code,'msg':check_msg}

    server_token = redis.get(USER_BENEFIT_TOKEN%(uid))
    if token != server_token:
        log_util.info('[do_take_benefit] client_token[%s] server_token[%s]'%(token,server_token))
        return {'code':-9003,'msg':'不能重复领取!'}

    code,msg,benefit_info = can_take_benefit(redis,uid,user_table)
    if code < 0:
        log_util.debug('[do_take_benefit] can\'t take benefit code[%s] msg[%s]'%(code,msg))
        return {'code':code,'msg':msg}


    _datetime = time.strftime("%Y-%m-%d", time.localtime())
    try:
        #领取救济金
        pipe = redis.pipeline()
        pipe.hincrby(FISH_BENEFIT_COIN_TABLE % _datetime ,uid,1)
        pipe.hincrby(user_table,'coin',benefit_info['benefit_coin'])

    except Exception,e:
        log_util.error('[do_take_benefit] take benefit error[%s]'%(e))
        return {'code':-9000,'msg':'领取救济金失败!'}
Ejemplo n.º 11
0
        def before_request_check():
            req_path = request.path
            req_ip = web_util.get_ip()

            if req_path in self.check_urls:
                sid = request.params.sid
                log_util.debug('before req_ip[%s] request_path[%s] sid[%s] redis[%s]'%(req_ip,req_path,sid,self.redis_inst))
                # if not sid:
                #     """ 在接口请求中不携带SID的都是非法 """
                #     log_util.error('req_ip[%s] req_path[%s] sid[%s] is illg request...'%(req_ip,req_path,sid))
                #     bottle.abort(503,'Invalid Request')

                if not web_util.api_limit_checker(self.redis_inst,sid,req_ip,req_path):
                    """ 检查是否恶意访问 """
                    log_util.error('req_ip[%s] req_path[%s] sid[%s] is attack...'%(req_ip,req_path,sid))
                    bottle.abort(503,'Invalid Request')
Ejemplo n.º 12
0
def create_fish_room(redis,roomInfo):
    """
    创建捕鱼房间
    :params: redis,
    :params: roomInfo(创建的房间信息)
    """
    channel_id = roomInfo['room_id']
    room_table = FISH_ROOM_TABLE%(channel_id)
    log_util.debug('[try create_fish_room] room_id[%s] room_table[%s]'%(channel_id,room_table))
    pipe  =  redis.pipeline()
    try:
        pipe.hmset(room_table,roomInfo)
        pipe.sadd(FISH_ROOM_ID_SETS,channel_id)
        pipe.sadd(GAMEID_SET,channel_id)
        pipe.lpush(FISH_ROOM_LIST,channel_id)
    except Exception,e:
        log_util.error('[try create_fish_room] room_id[%s] create error.reason[%s]'%(channel_id,e))
        return
Ejemplo n.º 13
0
    def ingest_one(self, img_path, im_type):
        try:
            log_util.debug("start to ingest one image: %s", img_path)
            ret = False
            retry = 0
            # upload to oss. img in table is a relative oss storage path
            # retry 3 times
            target = oss2util.get_oss_path(img_path)
            while ret is False and retry < 3:
                ret = oss2util.uploadFile(img_path, target)
                retry += 1

            if ret:
                # move file to correct place, named by md5
                file_name = target.split('/')[-1]
                sub_folder = self.get_sub_folder(img_path)
                dest_file_path = os.path.join(utils.MEDIA_ROOT, sub_folder,
                                              file_name)

                utils.move_file(img_path, dest_file_path)
                relative_path = os.path.join(sub_folder, file_name)
                # insert image meta to database
                meta = image_util.get_image_meta(img_path)

                # insert into db
                table = 'static_image'
                if im_type == 'gif':
                    table = 'animated_image'

                params = []
                values = []
                for k, v in meta.items():
                    params.append(k)
                    values.append(v)
                params.append('create_time')
                values.append(
                    datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
                #TODO add iamge original name to description

                sql = "insert into %s %s values %s" % (table, str(params),
                                                       str(values))
                self.db_con.execute(sql)
        except Exception as e:
            log_util.error("ingest image[%s] fail: %s", img_path, str(e))
Ejemplo n.º 14
0
def do_create_game(redis,game_id,gameInfo):
    """
    创建新游戏
    @param:
        redis      redis链接实例
        gameInfo   游戏信息
    """

    if game_id in GAMEID_SET:
        return None

    game_table = GAME_TABLE%(game_id)
    pipe = redis.pipeline()
    try:
        pipe.hmset(game_table,gameInfo)
        pipe.sadd(GAMEID_SET,game_id)
        pipe.lpush(GAME_LIST,game_id)
    except Exception,e:
        log_util.error('[try do_create_game] reason[%s]'%(e))
        return None
Ejemplo n.º 15
0
def delete_fishroom(redis,room_id):
    """
    删除捕鱼房间
    :params redis 数据库实例
    :params room_id 捕鱼房间ID
    """
    room_table = FISH_ROOM_TABLE%(room_id)
    if not redis.exists(room_table):
        log_util.debug('[try delete_fishroom] room_table[%s] already delete.'%(room_table))
        return
    pipe = redis.pipeline()
    try:
        pipe.delete(room_table)
        pipe.delete(FISH_BET_DATA4ROOM%(room_table))
        pipe.lrem(FISH_ROOM_LIST,room_id)
        pipe.srem(GAMEID_SET,room_id)
        for day_key in redis.keys(FISH_BET_DATA4DAY4ROOM%(room_id,'*')):
            pipe.delete(day_key)
    except Exception,e:
        log_util.error('[try delete_fishroom] delete room[%s] error.reason[%s]'%(room_id,e))
        return
Ejemplo n.º 16
0
def do_reward_deleteCall(redis,session):
    """
    删除奖品信息接口
    :params reward_id 兑换奖品ID
    """
    fields = {
            ('reward_id','奖品ID','')
    }
    for field in fields:
        exec('%s = web_util.get_form("%s","%s","%s")'%(field[0],field[0],field[1],field[2]))

    reward_table = FISH_REWARD_TABLE%(reward_id)
    if not redis.exists(reward_table):
        return web_util.do_response(1,'商品不存在.')

    reward_status = convert_util.to_int(redis.hget(reward_table,'reward_status'))
    if reward_status == REWARD_ONLINE:
        return web_util.do_response(1,'不能删除已上架的商品.')

    try:
        do_reward_delete(redis,reward_id)
    except Exception,e:
        log_util.error('[do_reward_delete] reward_id[%s] delete error.reason[%s]'%(reward_id,e))
        return web_util.do_response(1,msg="删除奖品失败!")
Ejemplo n.º 17
0
    def run(self):
        while True:
            try:
                # get task from finish que
                task = self.que_manager.getQue(self.get_que_name)
                if task is None:
                    time.sleep(0.5)
                    continue

                log_util.debug("get one task from ingest queue: %s", task)
                # ingest or delete image
                task = json.loads(task.decode())
                if task['ingest']:
                    # ingest image
                    im_type = 'jpg'
                    if image_util.is_gif(task['img_path']):
                        im_type = 'gif'

                    self.ingest_one(task['img_path'], im_type)
                else:
                    # delete image
                    utils.remove_file(task['img_path'])
            except Exception as e:
                log_util.error("Ingestor run error: %s", str(e))
Ejemplo n.º 18
0
import os
import sys
import time
sys.path.append(os.path.join(os.path.dirname(__file__)))
sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir))
from common import utils, log_util
from common.msg_que import MsgQueue
from . import image_etl, ingestor

log_util.debug("Starting ingest main service...")
# declare msg queues
mq = MsgQueue()
for v in utils.msg_queues.values():
    mq.createQueue(v)

# crawler notify queue handler
img_etl = image_etl.ImageETL(mq, utils.msg_queues['crawler_notify'], utils.msg_queues['feature_detect'])
img_etl.start()

# feature detect handler
ingestor_service = ingestor.Ingestor(mq, utils.msg_queues['detect_finish'])
ingestor_service.start()

img_etl.join()
ingestor_service.join()


log_util.error("!!! Ingest main service exited.")
Ejemplo n.º 19
0
def remove_file(file_path):
    try:
        cmd = "rm " + "\"" + file_path + "\""
        os.system(cmd)
    except Exception as e:
        log_util.error("remove file[%s] error: %s", file_path, str(e))
Ejemplo n.º 20
0
def move_file(src_file, dest_file):
    try:
        cmd = "mv " + "\"" + src_file + "\"" + dest_file
        os.system(cmd)
    except Exception as e:
        log_util.error("move file[%s] error: %s", cmd, str(e))