|
1 | 1 | from importlib import import_module |
2 | 2 | from multiprocessing import Process |
3 | 3 | from os import getcwd, chdir |
4 | | -import run |
| 4 | +from modules.utils import git_clone |
5 | 5 | 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 |
6 | 12 |
|
7 | 13 | class Service(): |
8 | | - def __init__(self, service_name, service_conf): |
| 14 | + def __init__(self, service_name, service_conf, server): |
9 | 15 | self.name = service_name |
10 | 16 | self.directory = service_conf['directory'] |
| 17 | + self.services_directory = config.daemon['services_directory'] |
11 | 18 | self.keepAlive = service_conf['restart'] |
12 | 19 | self.main_method = service_conf['main_method'] |
| 20 | + self.repository = None |
| 21 | + if "repository" in service_conf.keys(): |
| 22 | + self.repository = service_conf['repository'] |
13 | 23 | self.process = Process(target=self.run, args=[]) |
14 | | - |
| 24 | + self.server = server |
| 25 | + |
15 | 26 | def setId(self, id): |
16 | 27 | self.id = id |
17 | 28 |
|
18 | 29 | 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) |
22 | 45 | if self.keepAlive: |
23 | 46 | while self.keepAlive: |
24 | 47 | eval(command)() |
|
0 commit comments