Class: Baleen::Server

Inherits:
Object
  • Object
show all
Includes:
Default, Celluloid::IO
Defined in:
lib/baleen/server.rb

Instance Method Summary collapse

Methods included from Default

#default_baleen_server, #default_before_command, #default_branch, #default_ci_port, #default_concurrency, #default_daemon, #default_dir, #default_docker_host, #default_docker_port, #default_features, #default_log_level, #default_port, #default_project_file, #default_work_dir

Constructor Details

#initialize(docker_host, docker_port, port, project_file) ⇒ Server

Returns a new instance of Server.



15
16
17
18
19
20
# File 'lib/baleen/server.rb', line 15

def initialize(docker_host, docker_port, port, project_file)
  Docker.url = "http://#{docker_host}:#{docker_port}"
  Baleen::Project.load_project(project_file)
  @server = TCPServer.new("0.0.0.0", port)
  async.run
end

Instance Method Details

#find_project(name, conn) ⇒ Object



76
77
78
79
80
81
82
83
84
85
# File 'lib/baleen/server.rb', line 76

def find_project(name, conn)
  project = Baleen::Project.find_project_by_name(name.to_sym)

  unless project
    conn.notify_exception("No project found: #{name}")
    raise Baleen::Error::ProjectNotFound
  end

  project
end

#handle_connection(socket) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/baleen/server.rb', line 34

def handle_connection(socket)
  loop { handle_request(socket) }

rescue Exception => ex
  case ex
    when IOError; nil # when trying to close already closed socket
    else
      puts ex.inspect
      raise ex
  end
end

#handle_request(socket) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/baleen/server.rb', line 46

def handle_request(socket)
  json_request = socket.gets

  if json_request.nil?
    socket.close
    return
  end

  conn = Connection.new(socket)
  request = parse_request(json_request)

  begin
    if request.is_a? Baleen::Task::RunProject
      task = find_project(request.project, conn).task
    else
      task = request # request itself is a task
    end
  rescue Baleen::Error::ProjectNotFound
    return
  end

  RunnerManager.new(conn, task).run do |response|
    conn.respond(response)
  end
end

#parse_request(request) ⇒ Object



72
73
74
# File 'lib/baleen/server.rb', line 72

def parse_request(request)
  Serializable.deserialize(request)
end

#runObject



22
23
24
# File 'lib/baleen/server.rb', line 22

def run
  loop { async.handle_connection @server.accept }
end

#shutdownObject



26
27
28
29
30
31
32
# File 'lib/baleen/server.rb', line 26

def shutdown
  begin
    @server.close
  rescue IOError
    BL.info "Shutting down baleen-server..."
  end
end