Class: Marv::Server::Actions

Inherits:
Object
  • Object
show all
Defined in:
lib/marv/server/actions.rb

Instance Method Summary collapse

Constructor Details

#initialize(server, debug = false) ⇒ Actions

Initialize actions



9
10
11
12
13
14
15
# File 'lib/marv/server/actions.rb', line 9

def initialize(server, debug=false)
  @server = server
  @task = server.task
  @path = server.path
  @name = server.name
  @debug = debug
end

Instance Method Details

#abort_noexistObject

Abort if not exists



106
107
108
109
110
111
# File 'lib/marv/server/actions.rb', line 106

def abort_noexist
  unless @server.exists?
    @task.say_error("Server #{@name} does not exist!")
    abort
  end
end

#abort_noexist_cmd(exec_name, text = nil) ⇒ Object

Abort if command does no exist



114
115
116
117
118
119
120
121
# File 'lib/marv/server/actions.rb', line 114

def abort_noexist_cmd(exec_name, text=nil)
  unless @task.exec_exixts?(exec_name)
    text ||= exec_name.upcase

    @task.say_error("#{text} is not installed on your system!")
    abort
  end
end

#change_server_portObject

Change server port



135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/marv/server/actions.rb', line 135

def change_server_port
  @task.say_info "Use another port to run the server.", true
  port = @task.ask_input "Which port would you like to use?"

  # Check if port available
  if is_port_available?(@server.host, port)
    # Write port to server config
    @task.shell.mute do
      @task.gsub_file @server.config_file, "#{@server.port}", "#{port}"
    end

    @server.port = port
  else
    change_server_port
  end
end

#is_port_available?(host = @server.host, port = @server.port) ⇒ Boolean

Check if port is available

Returns:

  • (Boolean)


169
170
171
172
173
174
175
176
177
178
179
# File 'lib/marv/server/actions.rb', line 169

def is_port_available?(host=@server.host, port=@server.port)
  begin
    url = URI.parse("http://#{host}:#{port}/")
    req = Net::HTTP.new(url.host, url.port)
    req.request_head(url)

    return false
  rescue
    return true
  end
end

#is_server_running?(server = @server) ⇒ Boolean

Check if port is available

Returns:

  • (Boolean)


153
154
155
156
157
158
159
160
161
162
163
164
165
166
# File 'lib/marv/server/actions.rb', line 153

def is_server_running?(server=@server)
  begin
    pid_file = ::File.join(server.path, 'php.pid')

    if ::File.exists?(pid_file)
      pid = ::File.read(pid_file).to_i
      return ::Process.kill(0, pid) == 1
    end

    return false
  rescue
    return false
  end
end

#removeObject

Remove server



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/marv/server/actions.rb', line 58

def remove
  abort_noexist
  @task.say_warning("This will remove server #{@name} and all data will be lost.")

  if @task.said_yes?("Are you sure you want to remove server?")
    begin
      @server.remove_database

      @task.shell.mute do
        stop(false)
        remove_hotel_server
        @task.remove_dir @path
      end
    rescue Exception => e
      @task.say_error "Error while removing server:", e.message
      abort
    end

    @task.say_success "Server successfully removed.", false, true
  end
end

#remove_hotel_serverObject

Remove hotel server if it exists



124
125
126
127
128
129
130
131
132
# File 'lib/marv/server/actions.rb', line 124

def remove_hotel_server
  if @task.exec_exixts?('hotel')
    begin
      `cd #{@path} && hotel rm`
    rescue ExceptionName
      return true
    end
  end
end

#restartObject

Initialize server restart



50
51
52
53
54
55
# File 'lib/marv/server/actions.rb', line 50

def restart
  stop(false)
  @task.say_info "Restarting server #{@name}...", true
  sleep 3
  start
end

#run_server(from_command = true) ⇒ Object

Run server



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/marv/server/actions.rb', line 81

def run_server(from_command=true)
  abort_noexist_cmd('php')
  ::Dir.chdir @path

  unless @debug
    @php = ChildProcess.build 'php', '-S', "#{@server.host}:#{@server.port}", 'router.php'
    @php.start

    # Write PHP proccess id to file
    @task.shell.mute do
      @task.create_file ::File.join(@path, 'php.pid'), @php.pid, :force => true
    end
  end

  @task.say_success "Server #{@server.name} is running.", false, !from_command
  @task.say_message "✔ http://#{@server.host}:#{@server.port}", false, false

  # Start server in debug mode
  if @debug
    @task.say_empty
    system "php -S #{@server.host}:#{@server.port} router.php"
  end
end

#start(from_command = true) ⇒ Object

Initialize server start



18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/marv/server/actions.rb', line 18

def start(from_command=true)
  if is_server_running?
    @task.say_warning "Server is already running.", false
    abort
  end

  unless is_port_available?(@server.host, @server.port)
    @task.say_warning "Port is not available!", false, true
    change_server_port
  end

  run_server(from_command)
end

#stop(message = true) ⇒ Object

Initialize server stop



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/marv/server/actions.rb', line 33

def stop(message=true)
  abort_noexist
  pid_file = ::File.join(@path, 'php.pid')

  begin
    if ::File.exists?(pid_file)
      pid = ::File.read(pid_file).to_i

      ::Process.kill('KILL', pid)
      @task.say_warning("Server #{@name} stopped.", false) if message
    end
  rescue
    @task.say_warning("Server #{@name} is not running.", false) if message
  end
end