Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/local/python3
- class Asgard:
- children = []
- # config = None
- abs_path = None
- socket = None
- process_queue = {}
- @staticmethod
- def initialize():
- Asgard.abs_path = __file__[:-len(os.path.basename(__file__))]
- os.chdir(Asgard.abs_path)
- # Set the cwd to [...]/Asgard/
- file = open(Asgard.abs_path + "config/asgard.yaml", "r")
- Asgard.config = yaml.load(file)
- Asgard.socket_start()
- Asgard.spawn_children()
- @staticmethod
- def spawn_children():
- from library.childcontainer import Child
- Asgard.socket.settimeout(Asgard.config['asgard']['socket']['accept_timeout'])
- for name, child in Asgard.config['asgard']['resources'].items():
- child['name'] = name
- Asgard.spawn_child(child)
- Asgard.socket.listen(5)
- try:
- while True:
- client = Asgard.socket.accept()[0] # Disregard the address,
- Child(client) # It will be b'' on UNIX sockets
- except socket.error:
- print("SOCKET ERROR") # do verify
- @staticmethod
- def spawn_child(child):
- process = Popen(
- [Asgard.abs_path + child['bin'].strip('/'),
- Asgard.config['asgard']['socket']['domain'],
- Asgard.config['asgard']['socket']['family'],
- Asgard.config['asgard']['socket']['type']]
- )
- Asgard.process_queue[process.pid] = process
- @staticmethod
- def socket_start():
- Asgard.socket = socket.socket(
- getattr(socket, Asgard.config['asgard']['socket']['family']),
- getattr(socket, Asgard.config['asgard']['socket']['type']))
- Asgard.socket.bind(Asgard.abs_path + Asgard.config['asgard']['socket']['domain'])
- Asgard.socket.listen(1)
- if __name__ == "__main__":
- import socket, os, yaml
- from select import epoll, EPOLLIN #@UnresolvedImport
- from subprocess import Popen
- Asgard.initialize()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement