Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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円[H033円[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+
frommodules.utilsimport 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)

AltStyle によって変換されたページ (->オリジナル) /