コード例 #1
0
    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
コード例 #2
0
 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()
コード例 #3
0
    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()
コード例 #4
0
ファイル: listener.py プロジェクト: hilbernate/agent
    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()
コード例 #5
0
ファイル: listener.py プロジェクト: hilbernate/agent
 def __init__(self, path=None):
     self._prop = sharedmem.Property()
     self._prop.open("status_config", bpath=path)
コード例 #6
0
def open_property(path=None):
    prop = sharedmem.Property()
    prop.open("status_config", bpath=path)
    return prop