示例#1
0
def fetch_job(game_id=1007039):
    fetcher.info('start fetch job,gameid:%s...' % game_id)
    host, port = get_router(modid, cmdid)
    if not (host and port):
        print 'l5 get error'
        return

    udp_client = UDPClient(host=host, port=port)
    hero_adjuster = HeroAdjuster(udp_client)
    b = BaseDao()
    video_dao = Video(b)
    batch = 5
    batch_num = 10
    from_num = 0
    try:
        obj_arr = hero_adjuster.adjust(batch=batch,
                                       batch_num=batch_num,
                                       from_num=from_num,
                                       game_id=game_id)
        for item in obj_arr:
            video_dao.add_item(item)
            video_dao.add_video_game(item['vid'], game_id)

        fetcher.info('fetch job finish, game_id:%s' % game_id)
    except:
        fetcher.info('fetch job error:%s, game_id:%s' %
                     (traceback.format_exc(), game_id))
    finally:
        udp_client.close()
        b.close()
示例#2
0
            game_id = item['cmd']['game_id']
            merge_info = processor.work(candidates)

            if not (merge_info and merge_info.get('file_path')):
                print 'merge fail, exit'
                sys.exit(1)

            file_path = merge_info.get('file_path')

            up = Uploader(file_path, 'mp4', udp_client)
            up_info = up.upload(addrtype=2, game_id=game_id)

            if up_info['status'] != 0:
                print 'upload merge_file fail'
                sys.exit(1)

            logger.info('sleep.....15s')
            time.sleep(15)
            assemble_obj = assemble(candidates, up_info, udp_client)
            if assemble_obj and valid(assemble_obj):
                #print assemble_obj
                video_dao = Video(b)
                video_dao.add_item(assemble_obj)
                video_dao.add_video_game(assemble_obj['vid'], game_id)

    except:
        print traceback.format_exc()
    finally:
        udp_client.close()
        b.close()
示例#3
0
class ChuanService(object):
 
    def __init__(self, base=None):
        self.b = base or BaseDao()
        self.chuan_dao = Chuan(self.b)
        self.video_dao = Video(self.b)

    def close(self):
        if self.b:
            self.b.close()
            self.b = None

    def get_urls(self, vids, video_infos):
        from lib.config import read_l5_info
        from l5.get_router import get_router
        from transport.client import UDPClient
        from adjuster.adjuster_tool import get_download_url_and_definition
        modid,cmdid = read_l5_info()
        host,port = get_router(modid, cmdid)
        udp_client = UDPClient(host, port)
        tmp = []
        if video_infos and len(video_infos) and vids and len(vids):
            for vid in vids:
                filters = filter(lambda o:o.video_id == vid, video_infos)
                if not len(filters):
                    continue
                item    = filters[0]
                vid     = item.video_id
                game_id = item.game_id
                if not (vid and game_id):
                    logger.warn("vid:%s or game_id:%s is null, skip.."%(vid, game_id))
                    continue
                url,definition = get_download_url_and_definition(vid.encode('utf8'), int(game_id), udp_client=udp_client)
                if url:
                    item.url = url
                    item.definition = definition
                    logger.info('get download url:%s of vid:%s, game_id:%s'%(url, vid, game_id))
                    tmp.append(item)
                else:
                    logger.warn("vid:%s game_id:%s get download url is null, skip.."% (vid, game_id))

        return tmp

    def createJob(self, uid='', vids=[], title=''):
        data = {'jobid' : -1}
        if not (uid and vids and len(vids)):
            logger.error('uid:%s or vids:%s is null'%(uid, vids))
            raise Exception('uid:%s or vids:%s is null'%(uid, vids))

        jid = self.chuan_dao.createJob(uid=uid, vids=vids)
        video_infos = self.video_dao.get_videoInfo_by_vids(vids=vids)
        game_id = 0
        for item in video_infos:
            if item.video_id == vids[0]:
                game_id = item.game_id
                break

        video_infos = self.get_urls(vids, video_infos)
        if not (video_infos and len(video_infos)):
            logger.error('video info is null,vids:%s'% vids)
            raise Exception('video info is null,vids:%s'% vids)

        userinfo = self.chuan_dao.get_userinfo_by_uid(uid)
        if not userinfo:
            logger.error('user info is null,uid:%s'% uid)
            raise Exception('user info is null,uid:%s'% uid)
        #p = Process(target=self.work, args=(video_infos, jid,))
        #p.start()
        #self.work(video_infos, jid)
        thread.start_new_thread(self.work, (video_infos, jid, title, userinfo, int(game_id),))
        data['jobid'] = jid
        logger.info('jid:%s start..'% jid)

        return data

    def queryJob(self, jid=None):
        data = {'jobid' : jid, 'status': -1, 'vid':''}
        if jid is None:
            logger.error('jid:%s is null'%(jid))
            raise Exception('jid:%s is null'%(jid))

        status,vid     = self.chuan_dao.query_chuan_status(jid=jid)

        data['status'] = status
        data['vid']    = vid

        return data

    def queryDoingJob(self, uid=None):
        data = {'jobids' : [] }
        if uid is None:
            logger.error('uid:%s is null'%(uid))
            raise Exception('uid:%s is null'%(uid))

        for vid in self.chuan_dao.query_chuan_doing_jobs(uid=uid):
            data['jobids'].append(vid)

        return data


    def work(self, video_infos, jid, title, userinfo, game_id):
        b =  BaseDao()
        try:
            self.chuan_dao = Chuan(b)
            succ, vid = self._merge_and_up(video_infos, jid, b, title, userinfo, game_id)
            if succ:
                self.chuan_dao.update_chuan_status(jid=jid, status=1, vid=vid)
            else:
                self.chuan_dao.update_chuan_status(jid=jid, status=-1)
        except:
            logger.error( traceback.format_exc() )
        finally:
            if b:
                b.close()

    def _merge_and_up(self, video_infos, jid, b, title, userinfo, game_id):
        from video_processor.processor import VideoProcessor
        from uploader.uploader import Uploader
        from lib.config import read_l5_info
        from l5.get_router import get_router
        from transport.client import UDPClient
        from busi.dao.common import assemble
        from busi.dao.common import valid
        vid = ''
        fail_res = (False, vid)
        succ_res = (True, vid)
        if not (video_infos and len(video_infos)):
            logger.error('video infos is null, jid:%s fail.'% jid)
            return fail_res
        try:
            processor = VideoProcessor()
            modid,cmdid = read_l5_info()
            host,port = get_router(modid, cmdid)
            if not (host and port):
                logger.error('l5 get error')
                return
            merge_info  = processor.work(video_infos)
            file_path = merge_info.get('file_path')
            workspace   = merge_info.get('workspace')
            if not (merge_info and file_path):
                logger.error('merge fail, jid:%s fail.'% jid)
                return fail_res

            udp_client = UDPClient(host=host, port=port)
            up = Uploader(file_path, 'mp4', udp_client)
            up_info = up.upload(addrtype=2, game_id=game_id)
            #up_info = up.upload(addrtype=2)
            if workspace:
                import shutil
                logger.info('delete workspace:%s'%workspace)
                shutil.rmtree(workspace)

            if up_info['status'] != 0:
                logger.error('upload merge_file fail, jid:%s fail.'%jid)
                return fail_res 

            vid = up_info['vid']
            if not vid:
                logger.error('upload merge_file fail, jid:%s fail.'%jid)
                return fail_res

            assemble_obj = assemble(video_infos, up_info, udp_client)
            if assemble_obj and valid(assemble_obj):
                #assemble_obj['nickname'] = userinfo[0]
                assemble_obj['uid']      = userinfo[1]
                assemble_obj['title'] = title or assemble_obj['title']
                self.video_dao = Video(b)

                #print assemble_obj
                self.video_dao.add_item(assemble_obj)
                self.video_dao.add_video_game(vid, game_id)
                #self.chuan_dao.update_chuan_status(jid=jid, status=1, vid=vid)
            else:
                logger.info('jid:%s assemble fail.'%jid)
                return fail_res

            logger.info('jid:%s finish success.'%jid)
            succ_res = (True, vid)
            return succ_res
        except:
            logger.error(traceback.format_exc())
            return fail_res