def test_cron_event1(self): cron1 = CronEvent("0 1 * * *") #print cron1.numerical_tab self.assertTrue(cron1.numerical_tab[0] == set([0])) self.assertTrue(cron1.numerical_tab[1] == set([1])) self.assertTrue(cron1.numerical_tab[2] == set(xrange(1, 32))) self.assertTrue(cron1.numerical_tab[3] == set(xrange(1, 13))) self.assertTrue(cron1.numerical_tab[4] == set(xrange(0, 7))) self.assertFalse(cron1.check_trigger((2015, 6, 16, 10, 0)))
def test_cron_event2(self): cron2 = CronEvent("0 */5 * * 0-4") #print cron2.numerical_tab self.assertTrue(cron2.numerical_tab[0] == set([0])) self.assertTrue(cron2.numerical_tab[1] == set([0, 10, 20, 5, 15])) self.assertTrue(cron2.numerical_tab[2] == set([])) self.assertTrue(cron2.numerical_tab[3] == set(xrange(1, 13))) self.assertTrue(cron2.numerical_tab[4] == set(xrange(0, 5))) self.assertTrue(cron2.check_trigger((2015, 6, 16, 10, 0)))
def test_cron_event3(self): cron3 = CronEvent("*/2 * * * *") #print cron1.numerical_tab self.assertTrue(cron3.numerical_tab[0] == set([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58 ])) self.assertTrue(cron3.numerical_tab[1] == set(xrange(0, 24))) self.assertTrue(cron3.numerical_tab[2] == set(xrange(1, 32))) self.assertTrue(cron3.numerical_tab[3] == set(xrange(1, 13))) self.assertTrue(cron3.numerical_tab[4] == set(xrange(0, 7))) self.assertTrue(cron3.check_trigger((2015, 6, 17, 9, 40)))
def __init__(self, collector_name, config, output, tailer=None): threading.Thread.__init__(self, name=collector_name) self.__collector_name=collector_name self.__config=config self.__sleep_time=self.__config['input'].get('frequency',10) self.__cron=self.__config['input'].get('schedule',None) self.__schedule=None if self.__cron is not None: self.__schedule=CronEvent(self.__cron) log.debug("job scheduled at %s"%self.__schedule.numerical_tab) self.__input=None self.__parser=None self.__output=output if self.__config['input']['type']=='command': self.__input=CommandRunner(self.__config['input']['source']) elif self.__config['input']['type']=='file': self.__input=FileReader(self.__config['input']['path']) elif self.__config['input']['type']=='http': #log.debug('input %s'%self.__config['input']) url=self.__config['input']['url'] headers=self.__config['input'].get('headers', {}) #log.debug('headers %s'%headers) auth=self.__config['input'].get('auth', None) self.__input=HTTPReader(url, headers, auth) elif self.__config['input']['type']=='class': arguments={} if 'arguments' in self.__config['input']: arguments=self.__config['input']['arguments'] self.__input=init_object(self.__config['input']['name'], **arguments) elif self.__config['input']['type']=='tailer': if tailer is None: raise AttributeError("Missing tailer in config file for tailer type input") self.__input=tailer assert(self.__input) if 'parser' in self.__config: if self.__config['parser']['type']=='match': self.__parser=MatchParser(self.__config['parser']['pattern'].strip(), self.__config['parser']['transform'].strip()) elif self.__config['parser']['type']=='split': self.__parser=SplitParser(self.__config['parser']['delimiter'].strip(), self.__config['parser']['transform'].strip()) elif self.__config['parser']['type']=='dummy': self.__parser=DummyParser() elif self.__config['parser']['type']=='json': arguments={} if 'arguments' in self.__config['parser']: arguments=self.__config['parser']['arguments'] self.__parser=JsonGrepParser(**arguments) elif self.__config['parser']['type']=='class': arguments={} if 'arguments' in self.__config['parser']: arguments=self.__config['parser']['arguments'] self.__parser=init_object(self.__config['parser']['name'], **arguments) self.__running=True self.__session_id=str(uuid.uuid4()) self.__max_error_count=self.__config['input'].get('max_error_count', -1) self.__current_data=None self.__number_collected=0 self.__number_failed=0 self.__sleep_count=0 self.__error_count=0 self.__last_check_minute=-1