コード例 #1
0
 def prepare(self):
     from utils import log_setting
     log_setting(CONFIG.LOGGING_INI, CONFIG.DATA_ROOT)
     self.logger = logging.getLogger("index_daemon")
     self.logger.path = CONFIG.DATA_ROOT
     import lucene
     os.environ['JAVA_HOME'] = '/usr/local/jdk1.6.0_17'
     lucene.initVM(lucene.CLASSPATH)
     
     self.svnclient = CliClient(work_path=CONFIG.TESTCASE_ROOT)
     self.new_updated_version = None
     self.updated_items = None
     self.last_index_trigger = CONFIG.LAST_UPDATED
     self.last_index_version = None
     
     self.logger.info("test case path:%s" % CONFIG.TESTCASE_ROOT)
     #self.logger.removeHandler(hdlr)
     
     self.run = self.update_subversion
     os.chdir(CONFIG.DATA_ROOT)
コード例 #2
0
class TestCaseIndexer(ControllableDaemon):
    def __init__(self):
        print "work dir:%s" % CONFIG.DATA_ROOT
        ControllableDaemon.__init__(self, 'testcase indexer daemon', 
                                    CONFIG.RUNNING_FLAG, 
                                    CONFIG.CLOSING_FLAG,
                                    CONFIG.RUN_DAEMON)
    
    def prepare(self):
        from utils import log_setting
        log_setting(CONFIG.LOGGING_INI, CONFIG.DATA_ROOT)
        self.logger = logging.getLogger("index_daemon")
        self.logger.path = CONFIG.DATA_ROOT
        import lucene
        os.environ['JAVA_HOME'] = '/usr/local/jdk1.6.0_17'
        lucene.initVM(lucene.CLASSPATH)
        
        self.svnclient = CliClient(work_path=CONFIG.TESTCASE_ROOT)
        self.new_updated_version = None
        self.updated_items = None
        self.last_index_trigger = CONFIG.LAST_UPDATED
        self.last_index_version = None
        
        self.logger.info("test case path:%s" % CONFIG.TESTCASE_ROOT)
        #self.logger.removeHandler(hdlr)
        
        self.run = self.update_subversion
        os.chdir(CONFIG.DATA_ROOT)
            
    def update_subversion(self):        
        if CONFIG.AUTO_UPDATE:
            self.logger.info("auto updating testcase from subversion")
            self.new_updated_version = self.svnclient.update()
        else:
            self.logger.info("ignore update testcase...")
            self.logger.info("checking local svn info...")
            local_info = self.svnclient.info()
            self.new_updated_version = local_info['revision']
        
        self.run = self.diff_last_updated
        
    def diff_last_updated(self):
        self.last_index_version = None
        if not os.path.isdir(CONFIG.INDEX_PATH):
            self.logger.info("Not found index data...")
            self.run = self.init_index_data
            return
        
        if os.path.isfile(self.last_index_trigger):
            self.last_index_version = read_from_file(self.last_index_trigger)
            self.last_index_version = self.last_index_version.strip()
            self.logger.info("last index version:%s" % self.last_index_version)
            
            self.updated_items = None
            if self.last_index_version != self.new_updated_version:
                self.updated_items = self.svnclient.diff_summarize(old_revision=self.last_index_version)
            
            if not self.updated_items:
                self.logger.info("No updating from last index.")
                self.run = self.update_index_trigger
            else:
                self.run = self.update_testcase_index
        else:
            self.logger.info("Not found last index version...")
            self.run = self.init_index_data
            
    def update_index_trigger(self):
        #self.logger.info("update...")
        if self.last_index_version != self.new_updated_version:
            self.logger.info("update index trigger to %s" % 
                             self.new_updated_version)
            write_to_file(self.last_index_trigger, self.new_updated_version)
        
        self.run = self.waiting_polling_interval
    
    def waiting_polling_interval(self):
        self.logger.info('Waiting %d seconds for next round' % CONFIG.POLLING_INTERVAL)
            
        for i in range(0, CONFIG.POLLING_INTERVAL + 5, 5):
            if self.is_closing(): break
            time.sleep(5)
        
        self.run = self.update_subversion
    
    def update_testcase_index(self):
        self.logger.info("updating testcase index...")
        indexer = self._create_indexer()
    
        for item in self.updated_items:
            if self.is_closing(): break
            if item['kind'] != 'file': continue
            name, ext = os.path.splitext(item['path'])
            if ext not in ['.html', '.htm', '.tsv']:
                self.logger.warning("ignore not supported file '%s'" % item['path'])
                continue
            
            #'modified', 'added', 'deleted', 'conflicted'
            status = {"modified": "U",
                      "added": "A",
                      "deleted": "D",
                      "conflicted":"C",
                      }.get(item['status'], "C")
            if status == "C":
                self.logger.warning("Conflicted file '%s'" % item['path'])
                continue
            if not os.path.isfile(item['path']):
                self.logger.warning("not exists file '%s' in local!" % item['path'])
                continue
            indexer.index_robot_script(status, item['path'])
            self._update_test_case_db(status, os.path.join(CONFIG.TESTCASE_ROOT,
                                                           item['path']))
                        
        indexer.optimize()
        indexer.close()
            
        self.run = self.update_index_trigger
        
    def init_index_data(self):
        self.logger.info("initialization  testcase index...")
        remove_path(CONFIG.INDEX_PATH)
        logger = self.logger
        
        indexer = self._create_indexer()
        gst = time.time()
        def walker(arg, dirname, names):
            if self.is_closing(): raise Exception, "closing"
            if dirname.count(".svn"): return
            for f in names:
                path = os.path.join(dirname, f)
                if not f.endswith(".html"): continue
                try:
                    tt = time.time()
                    indexer.index_robot_script("A", path)
                    logger.info("elaspe time:%s" % (time.time() - tt))
                except Exception, e:
                    logger.error("error path:%s" % path)
                    logger.exception(e)
        
        try:        
            os.path.walk(CONFIG.TESTCASE_ROOT, walker, None)
        except Exception, e:
            if str(e) != "closing":raise