def exec_guilnc(self, uid, app, args): self._propguilnc_semaphore.acquire() try: if self._propguilnc is not None: suid = str(uid) lnc = None if suid not in self._propguilnc: lnc = sharedmem.Property() fieldsdef = [] fieldsdef.append({"name": "pid", "size": 20}) fieldsdef.append( { "name": "state", "size": 20 } ) # ""=NESSUNA OPERAZIONE; "LNC"="ESEGUI"; "NUM"=PID ESEGUITO fieldsdef.append({"name": "app", "size": 100}) for i in range(GUILNC_ARG_MAX): fieldsdef.append({ "name": "arg" + str(i), "size": GUILNC_ARG_SIZE }) def fix_perm(fn): utils.path_change_owner(fn, uid, -1) utils.path_change_permissions( fn, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IWGRP) lnc.create("gui_launcher_" + suid, fieldsdef, fix_perm) self._propguilnc[suid] = lnc else: lnc = self._propguilnc[suid] cnt = 20.0 #PULISCE lnc.set_property("state", "") lnc.set_property("app", "") for i in range(GUILNC_ARG_MAX): lnc.set_property("arg" + str(i), "") #RICHIESTA lnc.set_property("app", app) for i in range(len(args)): lnc.set_property("arg" + str(i), args[i]) st = "LNC" lnc.set_property("state", st) while st == "LNC" and cnt > 0.0: st = lnc.get_property("state") time.sleep(0.2) cnt -= 0.2 if st == "LNC": lnc.set_property("state", "") raise Exception("GUI launcher timeout.") if st == "ERR": raise Exception("GUI launcher error.") return int(st) finally: self._propguilnc_semaphore.release() return None
def start_guilnc(self): self._propguilnc_stop = False signal.signal(signal.SIGTERM, self._signal_handler) bload = False suid = str(os.getuid()) spid = str(os.getpid()) lnc = sharedmem.Property() prcs = [] try: while not self._propguilnc_stop and utils.path_exists( "guilnc.run"): if not bload: if lnc.exists("gui_launcher_" + suid): try: lnc.open("gui_launcher_" + suid) lnc.set_property("pid", spid) bload = True except: time.sleep(1) else: time.sleep(1) if bload: if lnc.get_property("state") == "LNC": popenar = [] popenar.append(sys.executable) popenar.append(u'agent.pyc') popenar.append(u'app=' + lnc.get_property("app")) for i in range(GUILNC_ARG_MAX): a = lnc.get_property("arg" + str(i)) if a == "": break popenar.append(a) libenv = os.environ libenv["LD_LIBRARY_PATH"] = utils.path_absname( "runtime/lib") #print "Popen: " + " , ".join(popenar) try: p = subprocess.Popen(popenar, env=libenv) prcs.append(p) #print "PID: " + str(p.pid) if p.poll() is None: lnc.set_property("state", str(p.pid)) else: lnc.set_property("state", "ERR") except: lnc.set_property("state", "ERR") time.sleep(0.2) #Pulisce processi prcs = [p for p in prcs if p.poll() is None] finally: if bload: lnc.close()
def start(self): self._prop = sharedmem.Property() fieldsdef = [] fieldsdef.append({"name": "counter", "size": 30}) fieldsdef.append({"name": "state", "size": 5}) fieldsdef.append({"name": "connections", "size": 20}) fieldsdef.append({"name": "request_pid", "size": 20}) fieldsdef.append({"name": "request_data", "size": 1024 * 16}) fieldsdef.append({"name": "response_data", "size": 1024 * 16}) self._prop.create("status_config", fieldsdef, self._agent) self._prop.set_property("response_data", "") self._prop.set_property("request_data", "") self._prop.set_property("request_pid", "") self._status = Status(self._agent, self._prop) self._status.start() self._config = Config(self._agent, self._prop) self._config.start()
def start(self): self._prop = sharedmem.Property() fieldsdef = [] fieldsdef.append({"name": "counter", "size": 30}) fieldsdef.append({"name": "state", "size": 5}) fieldsdef.append({"name": "connections", "size": 20}) fieldsdef.append({"name": "request_pid", "size": 20}) fieldsdef.append({"name": "request_data", "size": 1024 * 16}) fieldsdef.append({"name": "response_data", "size": 1024 * 16}) def fix_perm(fn): self._agent.get_osmodule().set_file_permission_everyone(fn) self._prop.create("status_config", fieldsdef, fix_perm) self._prop.set_property("response_data", "") self._prop.set_property("request_data", "") self._prop.set_property("request_pid", "") self._status = SharedMemStatus(self._agent, self._prop) self._status.start() self._config = SharedMemConfig(self._agent, self._prop) self._config.start()
def __init__(self, path=None): self._prop = sharedmem.Property() self._prop.open("status_config", bpath=path)
def open_property(path=None): prop = sharedmem.Property() prop.open("status_config", bpath=path) return prop