def _broadcast(self, port): # continually sends out ping messages with omega ip addr and name. UDP msg=str(self.addr)+" "+str(self.jsonInfo["omega_tablereq"]) lu.log("Broadcasting omega address on : " + str(lu.getPort("OmegaBroadcast")) ) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) while self.alive: #lu.log("Broadcasting omega address on : " + str(lu.getPort("OmegaBroadcast"]) ) sock.sendto(msg.encode("UTF-8"), (lu.getBroadcast(), lu.getPort("OmegaBroadcast"))) time.sleep(1)
def _broadcast(self, port): # continually sends out ping messages with omega ip addr and name. UDP msg = str(self.addr) + " " + str(self.jsonInfo["omega_tablereq"]) lu.log("Broadcasting omega address on : " + str(lu.getPort("OmegaBroadcast"))) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) while self.alive: #lu.log("Broadcasting omega address on : " + str(lu.getPort("OmegaBroadcast"]) ) sock.sendto(msg.encode("UTF-8"), (lu.getBroadcast(), lu.getPort("OmegaBroadcast"))) time.sleep(1)
def _listen(self): sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind((self.addr, lu.getPort("OmegaListen"))) # UDP lu.log("Binded and listening on " + str((self.addr, lu.getPort("OmegaListen")))) while self.alive: data, addr = sock.recvfrom(1024) time.sleep(.1) if not self.readBuffer.full(): self.readBuffer.put(data.decode("UTF-8")) else: self.readBuffer.get() lu.log("Queue overflow. Dropping datagram.")
def main(): # make network Table global table table = networkTable() # get messages over UDP to update networkTable tableRequestObj = tableRequest() broadcastListener = OmegaNodeDiscovery( "omega", ("omega_tableReq", tableRequestObj.port)) # get UDP pings from network to create Network table entries lu.log("Getting UDP network pings on : " + str(broadcastListener.broadcastAddr) + ", from port : " + str(lu.getPort("OmegaListen"))) lu.log("Initialized") output = 5 outputCount = 0 while broadcastListener.alive: table.updateEntry(json.dumps(broadcastListener.jsonInfo)) msg = broadcastListener.getMsg() if msg: table.updateEntry(msg) else: outputCount = outputCount + 1 if (outputCount > output): outputCount = 0 print(table.getTable()) time.sleep(1)
def __init__(self, filePath, fileHash, folder): self.fileHash = fileHash self.folder = folder self.filePath = filePath self.dataBase = lu.getAddrOf("delta") + ":" + str( lu.getPort("delta")) + "/" self.executeSetup = threading.Thread(target=self._executeSetup).start()
def __init__(self): self.addr = lu.getAddr() self.OmegaAddr = lu.getOmegaAddr() self.ID = lu.getHTTP(self.OmegaAddr, lu.getPort("omega_tableReq"), lu.paths["omega_MinionTable"]) self.TCP_ScriptListener = lu.TCP_BackgroundProcess( self.addr, MinionTCP_Handler).listen()
def do_GET(self): # check if contained to directory lu.log("Get Request - " + self.path) filePath=re.sub("^/",os.getcwd()+"/",self.path) filePath=re.sub("%20"," ",filePath) filePath=re.sub("/+","/",filePath) pathSplit=[x for x in self.path.split("/") if x] # TODO : Restructure get using pathSplit # Get listing of nodes from omega. Returns JSON if (self.path == lu.paths["alpha_nodeListing"]): # node requestURL='http://'+str(lu.getOmegaAddr())+':'+str(lu.getPort("omega_tableReq"))+lu.paths["omega_Table"] lu.log("Requesting " + requestURL) msg=None try: with urllib.request.urlopen(requestURL) as response: self.setHeaders(200) try: msg = response.read().decode("UTF-8") self.wfile.write(msg.encode("UTF-8")) except: lu.error("Could not parse routing table") return 1 except: lu.log("Could not get network table from Omega.") # is file or directory reference elif os.path.isfile(filePath): self.setHeaders(200) self.writeFileToHandler(filePath) elif os.path.isdir(filePath): index=os.path.join(filePath,"index.html") if os.path.isfile(index): self.setHeaders(200) self.writeFileToHandler(index) else: if(len(os.listdir(filePath))): for i in os.listdir(filePath): i = "<a href=\'" + self.path + "/" + i + "\'>"+i+"</a></br>" self.wfile.write(i.encode("UTF-8")) else: self.wfile.write("directory empty".encode("UTF-8")) # get database entries for user elif pathSplit[0] == lu.paths["alpha_stdout"] or pathSplit[0] == lu.paths["alpha_stderr"]: msg = lu.deltaGetData(pathSplit) if(not msg): self.setHeaders(500) return self.setHeaders(200) self.wfile.write(msg.encode("UTF-8")) # no file could be found elif not os.path.exists(filePath): self.setHeaders(404) string="File : '" + filePath + "' not found." lu.log(string) self.wfile.write(string.encode("UTF-8")) else: self.setHeaders(500)
def do_POST(self): lu.log("Post Request - " + self.path) pathroot=self.path.split("/") while "" in pathroot: pathroot.remove("") if(pathroot[0] == lu.paths["alpha_scripts"]): # TEST THIS : This may be broken : file upload lu.log("Uploading Script - " + self.path) fp=self.rfile filePath=re.sub("^/",os.getcwd()+"/",self.path) filePath=re.sub("%20"," ",filePath) length = int(self.headers.get_all('content-length')[0]) self.setHeaders(200) if(length > 0): f = open(filePath, 'wb') f.write(fp.read(length)) f.close() elif(self.path == lu.paths["alpha_postScript"]): # post to master masterAddr = lu.getAddrOf("Lambda-M") if not masterAddr: lu.log("Could not get Master Addr.") self.setHeaders(500) length = int(self.headers.get_all('content-length')[0]) if(length > 0): # send json to master http post data = json.loads(self.rfile.read(length).decode("UTF-8")) data["FileLoc"]=lu.paths["alpha_scripts"] + "/" + data["script"] data["Hash"] = lu.getHash(data["FileLoc"]) lu.log("Hashed Program : " + data["Hash"]) lu.postHTTP(json.dumps(data),masterAddr,lu.getPort("Master_JSONpost"),lu.paths["master_postScript"]) # send binary data to socket lu.sendFile(data["FileLoc"],(masterAddr,int(lu.getPort("Master_programRec")))) # self.send(data["Hash"]) self.setHeaders(200) self.wfile.write(data["Hash"].encode("UTF-8")) else: lu.log("Nothing to send to master") self.setHeaders(500) else: lu.log("Could not post " + self.path)
def __init__(self, name, *ports): self.name=name self.addr=lu.getAddr() self.jsonInfo={} for i in ports: self.jsonInfo[i[0].lower()]=i[1] self.jsonInfo["name"]=self.name self.jsonInfo["addr"]=self.addr # only one listener per computer. This will be used by the omega server to broadcast its address. UDP # otherwise : " OSError: [Errno 98] Address already in use " self.readBuffer=queue.Queue(maxsize=self.queueSize) # listens to the broadcast messages and adds them to queue. UDP listenThread = threading.Thread(target=self._listen, args = ()) listenThread.start() # # broadcast the omega server's address on subnet broadcastThread = threading.Thread(target=self._broadcast, args = (lu.getPort("OmegaBroadcast"),)) broadcastThread.start()
def __init__(self, name, *ports): self.name = name self.addr = lu.getAddr() self.jsonInfo = {} for i in ports: self.jsonInfo[i[0].lower()] = i[1] self.jsonInfo["name"] = self.name self.jsonInfo["addr"] = self.addr # only one listener per computer. This will be used by the omega server to broadcast its address. UDP # otherwise : " OSError: [Errno 98] Address already in use " self.readBuffer = queue.Queue(maxsize=self.queueSize) # listens to the broadcast messages and adds them to queue. UDP listenThread = threading.Thread(target=self._listen, args=()) listenThread.start() # # broadcast the omega server's address on subnet broadcastThread = threading.Thread( target=self._broadcast, args=(lu.getPort("OmegaBroadcast"), )) broadcastThread.start()
def __init__(self): self.addr=lu.getAddr() self.OmegaAddr=lu.getOmegaAddr() self.ID = lu.getHTTP(self.OmegaAddr, lu.getPort("omega_tableReq"), lu.paths["omega_MinionTable"]) self.TCP_ScriptListener = lu.TCP_BackgroundProcess(self.addr, MinionTCP_Handler).listen()
def __init__(self, filePath,fileHash, folder): self.fileHash=fileHash self.folder=folder self.filePath=filePath self.dataBase=lu.getAddrOf("delta") + ":" + str(lu.getPort("delta")) + "/" self.executeSetup = threading.Thread(target=self._executeSetup).start()
import subprocess as subP # ========================== # Import lambdaUtils # ========================== filePath = os.path.abspath(os.path.join(os.path.dirname(__file__))) rootPath = os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)) sys.path.append(rootPath) import lambdaUtils as lu os.chdir(filePath) # ========================== # Init Setup # ========================== port = lu.getPort("delta") addr = lu.getAddr() urlToGet = "https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/zip/elasticsearch/2.3.4/elasticsearch-2.3.4.zip" databaseDir = filePath + "/elasticsearch-2.3.4" outputZip = filePath + "/master.zip" # ========================== # Elastic Sub Proc # ========================== def deltaStart(): command = "bash bin/elasticsearch --network.host " + addr with subP.Popen( shlex.split(command), cwd=databaseDir, stdout=subP.PIPE, stderr=subP.PIPE, universal_newlines=True ) as proc: for line in proc.stdout: print(line, end="")
def main(): # make network Table global table table = networkTable() # get messages over UDP to update networkTable tableRequestObj = tableRequest() broadcastListener = OmegaNodeDiscovery("omega", ("omega_tableReq", tableRequestObj.port)) # get UDP pings from network to create Network table entries lu.log("Getting UDP network pings on : " + str(broadcastListener.broadcastAddr) + ", from port : " + str(lu.getPort("OmegaListen"))) lu.log("Initialized") output=5 outputCount=0 while broadcastListener.alive: table.updateEntry(json.dumps(broadcastListener.jsonInfo)) msg = broadcastListener.getMsg() if msg: table.updateEntry(msg) else: outputCount = outputCount + 1 if (outputCount > output): outputCount = 0 print(table.getTable()) time.sleep(1)
<meta charset="UTF-8"> <script type="text/javascript"> window.location = " ''' html2=''' "; </script> </head> </html> ''' html = html1 + dest + html2 self.wfile.write(html.encode("UTF-8")) # deletes a script def do_DELETE(self): lu.log("Delete Request - " + self.path) self._setHeaders() self.wfile.write(b"<html><body><h1>delete!</h1></body></html>") # ========================== # Iniitialize # ========================== try: socketserver.TCPServer.allow_reuse_address = True httpd = socketserver.TCPServer((lu.getAddr(), lu.getPort("alpha")), HTTP_webpageHandler) broadcastListener = lu.nodeDiscovery("alpha") lu.log(" Serving @ " + str(lu.getAddr()) + ":" + str(lu.getPort("alpha"))) httpd.serve_forever() except OSError: lu.error("Port in use - " + str(lu.getPort("alpha"))) except KeyboardInterrupt: sys.exit(0)
import subprocess as subP # ========================== # Import lambdaUtils # ========================== filePath = os.path.abspath(os.path.join(os.path.dirname(__file__))) rootPath = os.path.abspath( os.path.join(os.path.dirname(__file__), os.path.pardir)) sys.path.append(rootPath) import lambdaUtils as lu os.chdir(filePath) # ========================== # Init Setup # ========================== port = lu.getPort("delta") addr = lu.getAddr() urlToGet = "https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/zip/elasticsearch/2.3.4/elasticsearch-2.3.4.zip" databaseDir = filePath + "/elasticsearch-2.3.4" outputZip = filePath + "/master.zip" # ========================== # Elastic Sub Proc # ========================== def deltaStart(): command = "bash bin/elasticsearch --network.host " + addr with subP.Popen(shlex.split(command), cwd=databaseDir, stdout=subP.PIPE, stderr=subP.PIPE,