Class: Borg::Server

Inherits:
EM::Connection
  • Object
show all
Includes:
EM::P::ObjectProtocol
Defined in:
lib/borg/borg_server.rb

Constant Summary collapse

@@workers =
{}
@@requester =
{}
@@status_count =
0
@@status_reports =
[]

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#client_typeObject

Returns the value of attribute client_type.



9
10
11
# File 'lib/borg/borg_server.rb', line 9

def client_type
  @client_type
end

Instance Method Details

#add_tests_to_redisObject



39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/borg/borg_server.rb', line 39

def add_tests_to_redis
  begin
    TestUnit.new().add_to_redis(@@workers.size * 3)
    CucumberRunner.new().add_to_redis(@@workers.size * 3)
    true
  rescue
    puts $!.message
    puts $!.backtrace
    send_error_to_requester("Error adding files to redis")
    false
  end
end

#check_for_workersObject



28
29
30
31
32
# File 'lib/borg/borg_server.rb', line 28

def check_for_workers
  return true unless @@workers.empty?
  send_error_to_requester("No worker found running")
  false
end

#collect_status_response(ruby_object) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/borg/borg_server.rb', line 52

def collect_status_response(ruby_object)
  @@status_reports << ruby_object
  @@status_count -= 1
  puts "Status count is #{@@status_count}"
  if(@@status_count == 0)
    error_status = @@status_reports.any? {|x| x.exit_status != 0 }
    @@status_reports = []
    if(error_status)
      send_to_requester(BuildStatus.new(1))
    else
      send_to_requester(BuildStatus.new(0))
    end
  end
end

#receive_object(ruby_object) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/borg/borg_server.rb', line 11

def receive_object(ruby_object)
  case ruby_object
  when BuildOutput
    send_to_requester(ruby_object)
  when BuildStatus
    puts "Received object #{ruby_object.inspect}"
    collect_status_response(ruby_object)
  when WorkerConnected
    @@workers[self.signature] = self
    @client_type = :worker
  when BuildRequester
    @@requester[self.signature] = self
    @client_type = :requestor
    check_for_workers && add_tests_to_redis && start_build
  end
end

#send_error_to_requester(message) ⇒ Object



34
35
36
37
# File 'lib/borg/borg_server.rb', line 34

def send_error_to_requester(message)
  send_to_requester(BuildOutput.new(message))
  send_to_requester(BuildStatus.new(1))
end

#send_to_requester(ruby_object) ⇒ Object



83
84
85
86
87
# File 'lib/borg/borg_server.rb', line 83

def send_to_requester(ruby_object)
  @@requester.each do |key,requester|
    requester.send_object(ruby_object)
  end
end

#start_buildObject



76
77
78
79
80
81
# File 'lib/borg/borg_server.rb', line 76

def start_build
  @@workers.each do |key,worker|
    @@status_count += 1
    worker.send_object(StartBuild.new())
  end
end

#unbindObject



67
68
69
70
71
72
73
74
# File 'lib/borg/borg_server.rb', line 67

def unbind
  @@workers.delete(self.signature)
  @@requester.delete(self.signature)
  if(client_type == :requestor)
    @@status_count = 0
    @@status_reports = []
  end
end