Class: Kogno::ServerCtl

Inherits:
Object
  • Object
show all
Defined in:
lib/core/bin_helpers/server_ctl.rb

Class Method Summary collapse

Class Method Details

.alive?(service) ⇒ Boolean

Returns:

  • (Boolean)


44
45
46
47
48
# File 'lib/core/bin_helpers/server_ctl.rb', line 44

def alive?(service)
   pid = get_pid(service)
   return false if pid == 0
   Process.getpgid(pid) rescue false
end

.delete_pid(service) ⇒ Object



31
32
33
# File 'lib/core/bin_helpers/server_ctl.rb', line 31

def delete_pid(service)
  save_pid("",service)
end

.get_pid(service) ⇒ Object



35
36
37
# File 'lib/core/bin_helpers/server_ctl.rb', line 35

def get_pid(service)
  File.read(File.join(pid_file(service))).to_i
end

.kill_process(pid) ⇒ Object



39
40
41
42
# File 'lib/core/bin_helpers/server_ctl.rb', line 39

def kill_process(pid)
  return false if pid.to_i == 0
  Process.kill("KILL",pid) rescue nil
end

.log_environment_infoObject



5
6
7
# File 'lib/core/bin_helpers/server_ctl.rb', line 5

def log_environment_info
  logger.write "Kogno #{Gem.loaded_specs["kogno"].version.version} server starting in #{Kogno::Application.config.environment}", :bright
end

.options(option) ⇒ Object



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/core/bin_helpers/server_ctl.rb', line 110

def options(option)
  case option.to_sym
    when :start
      start
    when :stop
      stop
    when :status
      status
    when :restart
      stop
      start
    else
      puts "usage: server stop|start|restart|status"
  end
end

.pid_file(service) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/core/bin_helpers/server_ctl.rb', line 9

def pid_file(service)
  case service
    when 'webhook'
      return Application.file_path(File.join(Application.project_path,"tmp","webhook.pid"))
    when 'sequence'
      return Application.file_path(File.join(Application.project_path,"tmp","sequence.pid"))
    when 'scheduled_messages'  
      return Application.file_path(File.join(Application.project_path,"tmp","scheduled_messages.pid"))
    else
      return 0
  end
  
end

.save_pid(pid, service) ⇒ Object



27
28
29
# File 'lib/core/bin_helpers/server_ctl.rb', line 27

def save_pid(pid, service)
  File.write(pid_file(service), pid)      
end

.startObject



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/core/bin_helpers/server_ctl.rb', line 50

def start
  log_environment_info()
  if get_pid('webhook') > 0
    logger.write "Http: daemon already started..", :red
  else
    logger.write "Http: starting daemon..", :green
    system(%{
      RACK_ENV=#{Kogno::Application.config.environment} ruby #{self.webhook_server_file} daemon > /dev/null&
      echo $! > "#{self.pid_file('webhook')}"
    })
  end

  if get_pid('sequence') > 0
    logger.write "Sequence: daemon already started..", :red
  else
    logger.write "Sequence: starting daemon..", :green
    pid = fork do
      Logger.set(:sequences)
      require File.join(Kogno::Application.project_path,'application.rb')
      Sequence.process_all
    end
    save_pid(pid, 'sequence')
  end

  if get_pid('scheduled_messages') > 0
    logger.write "Scheduled Messages: daemon already started..", :red
  else
    logger.write "Scheduled Messages: starting daemon..", :green
    pid = fork do
      Logger.set(:scheduled_messages)
      require File.join(Kogno::Application.project_path,'application.rb')
      ScheduledMessage.process_all
    end
    save_pid(pid, 'scheduled_messages')
  end

end

.statusObject



104
105
106
107
108
# File 'lib/core/bin_helpers/server_ctl.rb', line 104

def status
  alive?('webhook') ? logger.write("Http running | Pid: #{get_pid('webhook')}..", :green) : logger.write("Http stopped", :red)
  alive?('sequence') ? logger.write("Sequences running | Pid: #{get_pid('sequence')}..", :green) : logger.write("Sequence stopped", :red)
  alive?('scheduled_messages') ? logger.write("Scheduled Messages running | Pid: #{get_pid('scheduled_messages')}..", :green) : logger.write("Scheduled Messages stopped", :red)      
end

.stopObject



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/core/bin_helpers/server_ctl.rb', line 88

def stop
  sequence_pid = get_pid('sequence')
  kill_process(sequence_pid)
  delete_pid('sequence')

  webhook_pid = get_pid('webhook')
  kill_process(webhook_pid)
  delete_pid('webhook')

  scheduled_messages_pid = get_pid('scheduled_messages')
  kill_process(scheduled_messages_pid)
  delete_pid('scheduled_messages')

  logger.write "STOP", :red
end

.webhook_server_fileObject



23
24
25
# File 'lib/core/bin_helpers/server_ctl.rb', line 23

def webhook_server_file
  File.join(Application.core_path,"lib/core/web/webhook.rb")
end