소스 검색

replace 'Popen' in dict for pid, add name and status report

David 10 년 전
부모
커밋
b102c500c8
1개의 변경된 파일23개의 추가작업 그리고 10개의 파일을 삭제
  1. 23 10
      pmanager/pmanager.py

+ 23 - 10
pmanager/pmanager.py

@@ -1,6 +1,4 @@
 #!/usr/bin/env python3
-
-
 import json
 import os
 import signal
@@ -39,9 +37,12 @@ class PManager:
     p_list = {}
     ptable = {}
     log_list = {}
-    def __init__(self, ptable):
+    name = ""
+    def __init__(self, name, ptable):
         self.ptable = ptable
         self.conn(self.ip)
+        self.name = name
+
         signal.signal(signal.SIGINT, self.sighandler)
         signal.signal(signal.SIGCHLD, signal.SIG_IGN) #To kill zombies
         while True:
@@ -63,7 +64,7 @@ class PManager:
                 log("Dropping: %s" % j)
                 continue
         
-            log(j)
+            #log(j)
             if j["command"] == "launch":
                 opts = None
                 if "options" in j:
@@ -75,6 +76,17 @@ class PManager:
             
             if j["command"] == "netcat":
                 sendmsg(j["key"])
+            if j["command"] == "status": #and j["key"] == self.name:
+                self.send({"name": self.name, "data":self.p_list})
+
+    def send(self, data):
+        try:
+            if type(data) is dict:
+                data = json.dumps(data)
+            print(data)
+            self.ws.send(data)
+        except Exception as e:
+            print(e)
 
     def conn(self, target):
         if self.ws is None:
@@ -103,9 +115,9 @@ class PManager:
             log("key %s doesn't exist! not killing!" % (key))
             return
         try:
-            os.killpg(os.getpgid(self.p_list[key].pid), signal.SIGTERM)
+            os.killpg(os.getpgid(self.p_list[key]), signal.SIGTERM)
         except Exception as e:
-            log("This process (%d) can't be killed! Why?" % self.p_list[key].pid)
+            log("This process (%d) can't be killed! Why?" % self.p_list[key])
             log(e)
     
         try:
@@ -141,7 +153,7 @@ class PManager:
             log(e)
             sys.exit(1)
 
-        self.p_list[key] = proc
+        self.p_list[key] = proc.pid
         return proc.pid
 
 if __name__ == "__main__":
@@ -149,10 +161,11 @@ if __name__ == "__main__":
         print("Usage: ./%s <file.json>" % (sys.argv[0]))
         sys.exit(1)
     try:
-        ptable = json.loads(open(sys.argv[1]).read())
+        data = json.loads(open(sys.argv[1]).read())
     except Exception as e:
         print(e)
         sys.exit(2)
     
-    print(ptable)
-    m = PManager(ptable)
+    ptable = data["data"]
+    name = data["name"]
+    m = PManager(name, ptable)