def testInitFromCronObject(self): state = rdf_protodict.AttributedDict() state["quux"] = "norf" state["thud"] = "blargh" cron_job = rdf_cronjobs.CronJob() cron_job.cron_job_id = "foo" cron_job.current_run_id = "bar" cron_job.last_run_time = self._DATETIME("2001-01-01") cron_job.last_run_status = "FINISHED" cron_job.frequency = rdfvalue.Duration("1d") cron_job.lifetime = rdfvalue.Duration("30d") cron_job.enabled = False cron_job.forced_run_requested = True cron_job.state = state cron_job.description = "testdescription" api_cron_job = cron_plugin.ApiCronJob().InitFromCronObject(cron_job) self.assertEqual(api_cron_job.cron_job_id, "foo") self.assertEqual(api_cron_job.current_run_id, "bar") self.assertEqual(api_cron_job.description, "testdescription") self.assertEqual(api_cron_job.last_run_time, self._DATETIME("2001-01-01")) self.assertEqual(api_cron_job.last_run_status, "FINISHED") self.assertEqual(api_cron_job.frequency, rdfvalue.Duration("1d")) self.assertEqual(api_cron_job.lifetime, rdfvalue.Duration("30d")) self.assertFalse(api_cron_job.enabled) self.assertTrue(api_cron_job.forced_run_requested) api_state_items = {_.key: _.value for _ in api_cron_job.state.items} self.assertEqual(api_state_items, {"quux": "norf", "thud": "blargh"})
def testBaseSessionIdFlowRunnerArgumentIsNotRespected(self): args = cron_plugin.ApiCronJob( flow_name=standard.CreateAndRunGenericHuntFlow.__name__, flow_runner_args=rdf_flow_runner.FlowRunnerArgs( base_session_id="aff4:/foo")) result = self.handler.Handle(args, token=self.token) self.assertFalse(result.flow_runner_args.HasField("base_session_id"))
def AddJobStatus(self, job_id, status): if data_store.RelationalDBReadEnabled(): status = cron.ApiCronJob().status_map[status] data_store.REL_DB.UpdateCronJob( job_id, last_run_time=rdfvalue.RDFDatetime.Now(), last_run_status=status) else: urn = cronjobs.CronManager.CRON_JOBS_PATH.Add(job_id) with aff4.FACTORY.OpenWithLock(urn, token=self.token) as job: job.Set(job.Schema.LAST_RUN_TIME(rdfvalue.RDFDatetime.Now())) job.Set(job.Schema.LAST_RUN_STATUS(status=status))
def testInitFromAff4Object(self): state = rdf_protodict.AttributedDict() state["quux"] = "norf" state["thud"] = "blargh" with aff4.FACTORY.Create("aff4:/cron/foo", aff4_type=cronjobs.CronJob, mode="w", token=self.token) as fd: args = rdf_cronjobs.CreateCronJobFlowArgs() args.periodicity = rdfvalue.Duration("1d") args.lifetime = rdfvalue.Duration("30d") args.description = "testdescription" status = rdf_cronjobs.CronJobRunStatus(status="OK") fd.Set(fd.Schema.CURRENT_FLOW_URN, rdfvalue.RDFURN("aff4:/flow/bar")) fd.Set(fd.Schema.CRON_ARGS, args) fd.Set(fd.Schema.LAST_RUN_TIME, self._DATETIME("2001-01-01")) fd.Set(fd.Schema.LAST_RUN_STATUS, status) fd.Set(fd.Schema.DISABLED, rdfvalue.RDFBool(True)) fd.Set(fd.Schema.STATE_DICT, state) with aff4.FACTORY.Open("aff4:/cron/foo", mode="r", token=self.token) as fd: api_cron_job = cron_plugin.ApiCronJob().InitFromAff4Object(fd) self.assertEqual(api_cron_job.cron_job_id, "foo") self.assertEqual(api_cron_job.current_run_id, "bar") self.assertEqual(api_cron_job.description, "testdescription") self.assertEqual(api_cron_job.last_run_time, self._DATETIME("2001-01-01")) self.assertEqual(api_cron_job.last_run_status, "FINISHED") self.assertEqual(api_cron_job.frequency, rdfvalue.Duration("1d")) self.assertEqual(api_cron_job.lifetime, rdfvalue.Duration("30d")) self.assertFalse(api_cron_job.enabled) api_state_items = {_.key: _.value for _ in api_cron_job.state.items} self.assertEqual(api_state_items, {"quux": "norf", "thud": "blargh"})
def Run(self): def ReplaceCronJobUrn(): jobs = list(cronjobs.GetCronManager().ListJobs(token=self.token)) return {jobs[0]: "CreateAndRunGeneicHuntFlow_1234"} flow_args = standard.CreateGenericHuntFlowArgs() flow_args.hunt_args.flow_args = rdf_file_finder.FileFinderArgs( paths=["c:\\windows\\system32\\notepad.*"]) flow_args.hunt_args.flow_runner_args.flow_name = ( file_finder.FileFinder.__name__) flow_args.hunt_runner_args.client_rule_set.rules = [ foreman_rules.ForemanClientRule( os=foreman_rules.ForemanOsClientRule(os_windows=True)) ] flow_args.hunt_runner_args.description = "Foobar! (cron)" self.Check("CreateCronJob", args=cron_plugin.ApiCronJob( description="Foobar!", flow_name=standard.CreateAndRunGenericHuntFlow.__name__, periodicity=604800, lifetime=3600, flow_args=flow_args), replace=ReplaceCronJobUrn)
def AddJobStatus(self, job_id, status): status = cron.ApiCronJob().status_map[status] data_store.REL_DB.UpdateCronJob( job_id, last_run_time=rdfvalue.RDFDatetime.Now(), last_run_status=status)