Skip to content

Commit 3772fff

Browse files
committed
added git repository handling
1 parent acebe04 commit 3772fff

File tree

6 files changed

+61
-14
lines changed

6 files changed

+61
-14
lines changed

daemon.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ def __init__():
1818
global server
1919
# log.basicConfig(filename=LOG_FILENAME,level=log.DEBUG)
2020
log.basicConfig(level=log.DEBUG)
21-
worker.init()
2221
server = Server(config.daemon, worker)
22+
worker.init(server)
2323

2424
def main():
2525
__init__()

modules/commands.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
available_commands = ["quit", "list", "start", "kill", "status", "restart"]
1+
available_commands = ["quit", "list", "start", "kill", "status", "restart", "clear"]
22

33
def handle_input(command, worker, server=None):
44
command = command.strip()
@@ -13,6 +13,9 @@ def handle_input(command, worker, server=None):
1313
def restart(worker, args=None, server=None):
1414
worker.restart()
1515
return "Worker restarted"
16+
17+
def clear(worker, args=None, server=None):
18+
return "\033[H\033[2J"
1619

1720
def quit(worker, args=None, server=None):
1821
print("Quitting server")

modules/server.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ def __init__(self, config, worker):
1313
self.BUFFER_SIZE = 1024
1414
self.worker = worker
1515
self.hello = "### Python Manager\nHello !\n#> "
16-
16+
self.socket = None
17+
1718
def start(self):
1819
print("Server starting")
1920
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
21+
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
2022
self.socket.bind((self.host, self.port))
2123
self.socket.listen(5)
2224
self.inputs.append(self.socket)
@@ -46,4 +48,17 @@ def start(self):
4648

4749
def stop(self):
4850
print("Exiting...")
49-
self.socket.close()
51+
if self.socket is not None:
52+
try:
53+
self.socket.shutdown(socket.SHUT_RDWR)
54+
except OSError as e:
55+
pass
56+
self.socket.close()
57+
58+
def restart(self):
59+
print("Restarting...")
60+
if self.socket is not None:
61+
self.socket.shutdown(socket.SHUT_RDWR)
62+
self.socket.close()
63+
self.__init__(self.config, self.worker)
64+
self.stop()

modules/service.py

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,47 @@
11
from importlib import import_module
22
from multiprocessing import Process
33
from os import getcwd, chdir
4-
import run
4+
from modules.utils import git_clone
55
from sys import path
6+
from time import sleep
7+
import run
8+
import sys
9+
import os
10+
import logging as log
11+
import config
612

713
class Service():
8-
def __init__(self, service_name, service_conf):
14+
def __init__(self, service_name, service_conf, server):
915
self.name = service_name
1016
self.directory = service_conf['directory']
17+
self.services_directory = config.daemon['services_directory']
1118
self.keepAlive = service_conf['restart']
1219
self.main_method = service_conf['main_method']
20+
self.repository = None
21+
if "repository" in service_conf.keys():
22+
self.repository = service_conf['repository']
1323
self.process = Process(target=self.run, args=[])
14-
24+
self.server = server
25+
1526
def setId(self, id):
1627
self.id = id
1728

1829
def run(self):
19-
path.insert(0, getcwd()+"/run/"+self.directory)
20-
import_module("run.%s.%s" %(self.directory, self.name))
21-
command = "run.%s.%s.%s" %(self.directory, self.name, self.main_method)
30+
try:
31+
path.insert(0, getcwd()+"/%s/"%self.services_directory+self.directory)
32+
import_module("%s.%s.%s" %(self.services_directory, self.directory, self.name))
33+
except ImportError as e:
34+
log.warn("Module %s not found" %self.name)
35+
if self.repository is not None:
36+
git_clone(self.repository, self.directory)
37+
log.info("Successfully cloned %s. Restarting..." %self.repository)
38+
self.server.restart()
39+
sleep(2)
40+
os.execv(sys.executable, ['python'] + sys.argv)
41+
import_module("%s.%s.%s" %(self.services_directory, self.directory, self.name))
42+
else:
43+
log.err("The module %s is not found cannot be cloned from a repository")
44+
command = "%s.%s.%s.%s" %(self.services_directory, self.directory, self.name, self.main_method)
2245
if self.keepAlive:
2346
while self.keepAlive:
2447
eval(command)()

modules/utils.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import config
22
import logging as log
33
from sys import exit
4-
4+
from git import Repo
5+
56
def check_config():
67
mandatory_in_services = ["restart", "directory", "main_method"]
78
mandatory_in_daemon = ["host", "port"]
@@ -19,3 +20,7 @@ def check_config():
1920
except AttributeError as e:
2021
log.error("Your config.py hasn't a correct format : [%s]" %str(e))
2122
exit(-1)
23+
24+
def git_clone(url, name):
25+
Repo.clone_from(url, config.daemon['services_directory'] + "/" + name)
26+

modules/worker.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from modules.utils import check_config
1+
from modules.utils import check_config, git_clone
22
from modules.service import Service
33
from importlib import reload
44
import logging as log
@@ -21,12 +21,13 @@ def start(self):
2121
log.info("Starting service %s" %service.name)
2222
service.start()
2323

24-
def init(self):
24+
def init(self, server):
2525
self.__init__()
26+
self.server = server
2627
check_config()
2728
for service_name in config.run.keys():
2829
service_conf = config.run[service_name]
29-
self.add(Service(service_name, service_conf))
30+
self.add(Service(service_name, service_conf, self.server))
3031
return
3132

3233
def stop(self):

0 commit comments

Comments
 (0)