Class: Rex::Job

Inherits:
Object
  • Object
show all
Defined in:
lib/rex/job_container.rb

Overview

This class is the concrete representation of an abstract job.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(container, jid, name, ctx, run_proc, clean_proc) ⇒ Job

Creates an individual job instance and initializes it with the supplied parameters.



15
16
17
18
19
20
21
22
23
# File 'lib/rex/job_container.rb', line 15

def initialize(container, jid, name, ctx, run_proc, clean_proc)
	self.container  = container
	self.jid        = jid
	self.name       = name
	self.run_proc   = run_proc
	self.clean_proc = clean_proc
	self.ctx        = ctx
	self.start_time = nil
end

Instance Attribute Details

#ctxObject

Some job context.



83
84
85
# File 'lib/rex/job_container.rb', line 83

def ctx
  @ctx
end

#jidObject

The job identifier as assigned by the job container.



73
74
75
# File 'lib/rex/job_container.rb', line 73

def jid
  @jid
end

#nameObject

The name of the job.



68
69
70
# File 'lib/rex/job_container.rb', line 68

def name
  @name
end

#start_timeObject

The time at which this job was started.



78
79
80
# File 'lib/rex/job_container.rb', line 78

def start_time
  @start_time
end

Instance Method Details

#start(async = false) ⇒ Object

Runs the job in the context of its own thread if the async flag is false. Otherwise, the job is run inline.



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/rex/job_container.rb', line 29

def start(async = false)
	self.start_time = Time.now
	if (async)
		self.job_thread = Rex::ThreadFactory.spawn("JobID(#{jid})-#{name}", false) {
			# Deschedule our thread momentarily
			::IO.select(nil, nil, nil, 0.01)

			begin
				run_proc.call(ctx)
			ensure
				clean_proc.call(ctx)
				container.remove_job(self)
			end
		}
	else
		begin
			run_proc.call(ctx)
		rescue ::Exception
			container.stop_job(jid)
			raise $!
		end
	end
end

#stopObject

Stops the job if it’s currently running and calls its cleanup procedure



56
57
58
59
60
61
62
63
# File 'lib/rex/job_container.rb', line 56

def stop
	if (self.job_thread)
		self.job_thread.kill
		self.job_thread = nil
	end

	clean_proc.call(ctx) if (clean_proc)
end