async def runCmdOpts(self, opts): line = opts.get('line') if line is None: self.printf(self.__doc__) return core = self.getCmdItem() argv = s_syntax.Parser(line).stormcmd() # Currently, using an argparser is overkill for this command. Using for future extensibility (and help). try: opts = self._make_argparser().parse_args(argv) except s_exc.ParserExit: return query = None consumed_next = False tslist = [] # TODO: retrieve time from cortex in case of wrong cmdr time now = time.time() for pos, arg in enumerate(opts.args): try: if consumed_next: consumed_next = False continue if arg.startswith('{'): if query is not None: self.printf('Error: only a single query is allowed') return query = arg[1:-1] continue if arg.startswith('+'): if arg[-1].isdigit(): if pos == len(opts.args) - 1: self.printf('Time delta missing unit') return arg = f'{arg} {opts.args[pos + 1]}' consumed_next = True ts = now + s_time.delta(arg) / 1000.0 tslist.append(ts) continue ts = s_time.parse(arg) / 1000.0 tslist.append(ts) except (ValueError, s_exc.BadTypeValu): self.printf(f'Error: Trouble parsing "{arg}"') return if query is None: self.printf('Error: Missing query argument') return def _ts_to_reqdict(ts): dt = datetime.datetime.fromtimestamp(ts, datetime.timezone.utc) return { 'minute': dt.minute, 'hour': dt.hour, 'dayofmonth': dt.day, 'month': dt.month, 'year': dt.year } if not tslist: self.printf('Error: at least one requirement must be provided') return reqdicts = [_ts_to_reqdict(ts) for ts in tslist] iden = await core.addCronJob(query, reqdicts, None, None) self.printf(f'Created cron job {iden}')
def test_time_delta(self): self.eq(s_time.delta('3days'), 259200000) self.eq(s_time.delta('3 days'), 259200000) self.eq(s_time.delta(' 3days'), 259200000) self.eq(s_time.delta(' 3 days'), 259200000) self.eq(s_time.delta('+3days'), 259200000) self.eq(s_time.delta('+3 days'), 259200000) self.eq(s_time.delta('+ 3days'), 259200000) self.eq(s_time.delta('+ 3 days'), 259200000) self.eq(s_time.delta('-3days'), -259200000) self.eq(s_time.delta('-3 days'), -259200000) self.eq(s_time.delta('- 3days'), -259200000) self.eq(s_time.delta('- 3 days'), -259200000)