Beispiel #1
0
    def default(self):
        config = Configuration()

        if self.app.pargs.qldir is not None:
            config.set('dir', 'ql', os.path.expanduser(self.app.pargs.qldir))

        if self.app.pargs.steamdir is not None:
            config.set('dir', 'steamcmd',
                       os.path.expanduser(self.app.pargs.steamdir))

        if self.app.pargs.servers is not None:
            config.set('config', 'servers',
                       os.path.expanduser(self.app.pargs.servers))

        if self.app.pargs.supervisor is not None:
            config.set('supervisor', 'supervisor',
                       os.path.expanduser(self.app.pargs.supervisor))

        if self.app.pargs.supervisorctl is not None:
            config.set('supervisor', 'supervisorctl',
                       os.path.expanduser(self.app.pargs.supervisorctl))

        if self.app.pargs.rcon is not None:
            config.set('config', 'rcon',
                       os.path.expanduser(self.app.pargs.rcon))

        config.update()

        data = [('QLDS dir', config.get('dir', 'ql')),
                ('SteamCMD dir', config.get('dir', 'steamcmd')),
                ('Supervisor', config.get('supervisor', 'supervisor')),
                ('Supervisorctl', config.get('supervisor', 'supervisorctl')),
                ('Servers config', config.get('config', 'servers')),
                ('Rcon config', config.get('config', 'rcon'))]

        for d in data:
            print('%s:\n    %s' % d)

        print('Configuration updated')
Beispiel #2
0
    def default(self):
        config = Configuration()

        if self.app.pargs.qldir is not None:
            config.set('dir', 'ql', os.path.expanduser(self.app.pargs.qldir))

        if self.app.pargs.steamdir is not None:
            config.set('dir', 'steamcmd', os.path.expanduser(self.app.pargs.steamdir))

        if self.app.pargs.servers is not None:
            config.set('config', 'servers', os.path.expanduser(self.app.pargs.servers))

        if self.app.pargs.supervisor is not None:
            config.set('supervisor', 'supervisor', os.path.expanduser(self.app.pargs.supervisor))

        if self.app.pargs.supervisorctl is not None:
            config.set('supervisor', 'supervisorctl', os.path.expanduser(self.app.pargs.supervisorctl))

        if self.app.pargs.rcon is not None:
            config.set('config', 'rcon', os.path.expanduser(self.app.pargs.rcon))

        config.update()

        data = [
            ('QLDS dir', config.get('dir', 'ql')),
            ('SteamCMD dir', config.get('dir', 'steamcmd')),

            ('Supervisor', config.get('supervisor', 'supervisor')),
            ('Supervisorctl', config.get('supervisor', 'supervisorctl')),

            ('Servers config', config.get('config', 'servers')),
            ('Rcon config', config.get('config', 'rcon'))
        ]

        for d in data:
            print('%s:\n    %s' % d)

        print('Configuration updated')
Beispiel #3
0
    except ImportError:
        return False
    else:
        return True

commands = [
    default.ManagerBaseController,
    version.VersionController,
    configure.ConfigureController,
    download.DownloadController,
    #download.DownloadWorkshopController,
]

config = Configuration()

supervisor_fs = FSCheck(config.get('supervisor', 'supervisor'))
supervisorctl_fs = FSCheck(config.get('supervisor', 'supervisorctl'))

if (
        supervisor_fs.exists(error=False) and supervisor_fs.access('x', error=False) and
        supervisorctl_fs.exists(error=False) and supervisorctl_fs.access('x', error=False)
   ):
    from qldsmanager.command import server
    from qldsmanager.command import supervisor

    commands.append(server.ServerController)
    commands.append(supervisor.SupervisorController)


if module_exists('zmq'):
    from qldsmanager.command import rcon
Beispiel #4
0
        return False
    else:
        return True


commands = [
    default.ManagerBaseController,
    version.VersionController,
    configure.ConfigureController,
    download.DownloadController,
    #download.DownloadWorkshopController,
]

config = Configuration()

supervisor_fs = FSCheck(config.get('supervisor', 'supervisor'))
supervisorctl_fs = FSCheck(config.get('supervisor', 'supervisorctl'))

if (supervisor_fs.exists(error=False)
        and supervisor_fs.access('x', error=False)
        and supervisorctl_fs.exists(error=False)
        and supervisorctl_fs.access('x', error=False)):
    from qldsmanager.command import server
    from qldsmanager.command import supervisor

    commands.append(server.ServerController)
    commands.append(supervisor.SupervisorController)

if module_exists('zmq'):
    from qldsmanager.command import rcon
    commands.append(rcon.RconController)
Beispiel #5
0
class Supervisor:
    def __init__(self):
        self.__config = Configuration()
        self.process_prefix = 'qlds_'

        self.__config_file = self.__config.get_config_dir() + '/supervisor.conf'

    def generate_config(self, servers):
        parser = ConfigParser()

        config_dir = self.__config.get_config_dir()

        parser.add_section('unix_http_server')
        parser.set('unix_http_server', 'file', config_dir + '/supervisor.sock')
        parser.set('unix_http_server', 'chmod', '0700')

        parser.add_section('supervisord')
        parser.set('supervisord', 'logfile', config_dir + '/supervisor_error.log')
        parser.set('supervisord', 'pidfile', config_dir + '/supervisor.pid')

        parser.add_section('rpcinterface:supervisor')
        parser.set('rpcinterface:supervisor', 'supervisor.rpcinterface_factory', 'supervisor.rpcinterface:make_main_rpcinterface')

        parser.add_section('supervisorctl')
        parser.set('supervisorctl', 'serverurl', 'unix://' + config_dir + '/supervisor.sock')

        ql_executable = self.get_ql_executable()

        for sid,data in servers.items():
            name = self.process_prefix + sid
            section = 'program:' + name
            parser.add_section(section)
            parser.set(section, 'command', self.build_command_line(sid, data, ql_executable))
            parser.set(section, 'process_name', name)
            parser.set(section, 'autorestart', 'true')

        if os.path.isfile(self.__config_file) and not os.access(self.__config_file, os.W_OK):
            raise IOError('Cannot write to file ' + self.__config_file)

        with (open(self.__config_file, 'w+')) as config_fp:
            parser.write(config_fp)

    def build_command_line(self, sid, server, executable):
        command_line = [
            executable,
            '+set fs_homepath %s/%s' % (os.path.expanduser('~/.quakelive/'), sid)
        ]

        for k,v in sorted(server.items()):
            command_line.append('+set %s %s' % (k, v))

        return ' '.join(command_line)

    def get_ql_executable(self):
        if platform.architecture()[0] == '64bit':
            executable = 'run_server_x64.sh'
        else:
            executable = 'run_server_x86.sh'

        return os.path.expanduser(self.__config.get('dir', 'ql')) + '/' + executable

    def get_config_location(self):
        return self.__config_file

    def start(self):
        supervisor_executable = self.__config.get('supervisor', 'supervisor')
        supervisor_executable_fs = FSCheck(supervisor_executable)

        supervisor_executable_fs.exists()
        supervisor_executable_fs.access('x')

        return call([supervisor_executable, '-c', self.__config_file])

    def ctl(self, args: list):
        args = list(args)

        ctl_executable = self.__config.get('supervisor', 'supervisorctl')
        ctl_executable_fs = FSCheck(ctl_executable)

        ctl_executable_fs.exists()
        ctl_executable_fs.access('x')

        call_args = [ctl_executable, '-c', self.__config_file] + args

        return call(call_args)
Beispiel #6
0
class Supervisor:
    def __init__(self):
        self.__config = Configuration()
        self.process_prefix = 'qlds_'

        self.__config_file = self.__config.get_config_dir(
        ) + '/supervisor.conf'

    def generate_config(self, servers):
        parser = ConfigParser()

        config_dir = self.__config.get_config_dir()

        parser.add_section('unix_http_server')
        parser.set('unix_http_server', 'file', config_dir + '/supervisor.sock')
        parser.set('unix_http_server', 'chmod', '0700')

        parser.add_section('supervisord')
        parser.set('supervisord', 'logfile',
                   config_dir + '/supervisor_error.log')
        parser.set('supervisord', 'pidfile', config_dir + '/supervisor.pid')

        parser.add_section('rpcinterface:supervisor')
        parser.set('rpcinterface:supervisor',
                   'supervisor.rpcinterface_factory',
                   'supervisor.rpcinterface:make_main_rpcinterface')

        parser.add_section('supervisorctl')
        parser.set('supervisorctl', 'serverurl',
                   'unix://' + config_dir + '/supervisor.sock')

        ql_executable = self.get_ql_executable()

        for sid, data in servers.items():
            name = self.process_prefix + sid
            section = 'program:' + name
            parser.add_section(section)
            parser.set(section, 'command',
                       self.build_command_line(sid, data, ql_executable))
            parser.set(section, 'process_name', name)
            parser.set(section, 'autorestart', 'true')

        if os.path.isfile(self.__config_file) and not os.access(
                self.__config_file, os.W_OK):
            raise IOError('Cannot write to file ' + self.__config_file)

        with (open(self.__config_file, 'w+')) as config_fp:
            parser.write(config_fp)

    def build_command_line(self, sid, server, executable):
        command_line = [
            executable,
            '+set fs_homepath %s/%s' %
            (os.path.expanduser('~/.quakelive/'), sid)
        ]

        for k, v in sorted(server.items()):
            command_line.append('+set %s %s' % (k, v))

        return ' '.join(command_line)

    def get_ql_executable(self):
        if platform.architecture()[0] == '64bit':
            executable = 'run_server_x64.sh'
        else:
            executable = 'run_server_x86.sh'

        return os.path.expanduser(self.__config.get('dir',
                                                    'ql')) + '/' + executable

    def get_config_location(self):
        return self.__config_file

    def start(self):
        supervisor_executable = self.__config.get('supervisor', 'supervisor')
        supervisor_executable_fs = FSCheck(supervisor_executable)

        supervisor_executable_fs.exists()
        supervisor_executable_fs.access('x')

        return call([supervisor_executable, '-c', self.__config_file])

    def ctl(self, args: list):
        args = list(args)

        ctl_executable = self.__config.get('supervisor', 'supervisorctl')
        ctl_executable_fs = FSCheck(ctl_executable)

        ctl_executable_fs.exists()
        ctl_executable_fs.access('x')

        call_args = [ctl_executable, '-c', self.__config_file] + args

        return call(call_args)