Class: OsCtld::Daemon

Inherits:
Object
  • Object
show all
Includes:
OsCtl::Lib::Utils::Log, OsCtl::Lib::Utils::System, Assets::Definition
Defined in:
lib/osctld/daemon.rb

Defined Under Namespace

Classes: ClientHandler

Constant Summary collapse

SOCKET =
File.join(RunState::RUNDIR, 'osctld.sock')
@@instance =
nil

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Assets::Definition

#define_assets

Class Method Details

.getObject



57
58
59
# File 'lib/osctld/daemon.rb', line 57

def get
  @@instance ||= new
end

Instance Method Details

#assetsObject



114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/osctld/daemon.rb', line 114

def assets
  define_assets do |add|
    RunState.assets(add)

    add.socket(
      SOCKET,
      desc: 'Management socket',
      user: 0,
      group: 0,
      mode: 0600
    )
  end
end

#join_serverObject



140
141
142
# File 'lib/osctld/daemon.rb', line 140

def join_server
  @server_thread.join
end

#log_typeObject



159
160
161
# File 'lib/osctld/daemon.rb', line 159

def log_type
  'daemon'
end

#serveObject



128
129
130
131
132
133
134
135
136
137
138
# File 'lib/osctld/daemon.rb', line 128

def serve
  @server_thread = Thread.new do
    log(:info, "Listening on control socket at #{SOCKET}")

    socket = UNIXServer.new(SOCKET)
    File.chmod(0600, SOCKET)

    @server = Generic::Server.new(socket, Daemon::ClientHandler)
    @server.start
  end
end

#setupObject



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/osctld/daemon.rb', line 86

def setup
  # Setup /run/osctl
  RunState.create

  SystemLimits.instance

  # Increase allowed number of open files
  PrLimits.set(Process.pid, PrLimits::NOFILE, 16384, 16384)

  # Setup shared AppArmor files
  AppArmor.setup

  # Send/Receive hooks and server
  SendReceive.setup

  # Setup network interfaces
  NetInterface.setup

  # Start accepting client commands
  serve

  # Load data pools
  Commands::Pool::Import.run(all: true, autostart: true)

  # Wait for the server to finish
  join_server
end

#stopObject



144
145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/osctld/daemon.rb', line 144

def stop
  log(:info, 'Shutting down')
  Eventd.stop
  @server.stop if @server
  File.unlink(SOCKET) if File.exist?(SOCKET)
  UserControl.stop
  SendReceive.stop
  DB::Pools.get.each { |pool| pool.stop }
  ThreadReaper.stop
  Monitor::Master.stop
  LockRegistry.stop
  log(:info, 'Shutdown successful')
  exit(false)
end