示例#1
0
  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"})
示例#2
0
 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"))
示例#3
0
 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))
示例#4
0
    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"})
示例#5
0
    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)
示例#6
0
 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)