def __persistConnection(self, direction, headers=dict()): headers['persistent-connection'] = direction #message body is actually irrellevant and is not read on the other # side. #we just need to conform to the http protocol fields = [] fields.append(Input('cmd', "persist-connection")) #sending along the connection parameters for this server conf = ServerConf() connectionParams = dict() connectionParams['serverId'] = conf.getServerId() connectionParams['hostname'] = conf.getHostName() connectionParams['fqdn'] = conf.getFqdn() connectionParams['client_secure_port'] = conf\ .getClientSecurePort() connectionParams['server_secure_port'] = conf\ .getServerSecurePort() input2 = Input( 'connectionParams', json.dumps(connectionParams, default=json_serializer.toJson, indent=4)) # a json structure that needs to be dumped fields.append(input2) response = self.putRequest( ServerRequest.prepareRequest(fields, [], headers)) return response
def __persistConnection(self,direction,headers = dict()): headers['persistent-connection'] = direction #message body is actually irrellevant and is not read on the other # side. #we just need to conform to the http protocol fields = [] fields.append(Input('cmd', "persist-connection")) #sending along the connection parameters for this server conf = ServerConf() connectionParams = dict() connectionParams['serverId'] = conf.getServerId() connectionParams['hostname'] = conf.getHostName() connectionParams['fqdn'] = conf.getFqdn() connectionParams['client_secure_port'] = conf\ .getClientSecurePort() connectionParams['server_secure_port'] = conf\ .getServerSecurePort() input2 = Input('connectionParams', json.dumps(connectionParams,default = json_serializer.toJson, indent=4)) # a json structure that needs to be dumped fields.append(input2) response= self.putRequest(ServerRequest.prepareRequest(fields, [], headers)) return response
def sendAddNodeRequest(self, host): """ """ conf = ServerConf() cmdstring = 'connect-server-request' fields = [] input = Input('cmd', cmdstring) inf = open(conf.getCACertFile(), "r") key = inf.read() nodeConnectRequest = NodeConnectRequest(conf.getServerId(), conf.getClientSecurePort(), conf.getServerSecurePort(), key, conf.getFqdn(), conf.getHostName()) input2 = Input( 'nodeConnectRequest', json.dumps(nodeConnectRequest, default=json_serializer.toJson, indent=4)) input3 = Input('unqalifiedDomainName', host) fields.append(input) fields.append(input2) fields.append(input3) fields.append(Input('version', "1")) # this goes over the client Secure Port, and we don't want the server to use # cookies response = self.postRequest(ServerRequest.prepareRequest(fields), require_certificate_authentication=False, disable_cookies=True) return response
def workerReadyForwardedRequest(self, workerID, archdata, topology, originatingServer, heartbeatInterval, originatingClient=None): cmdstring = 'worker-ready-forward' fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) fields.append(Input('worker', archdata)) fields.append(Input('worker-id', workerID)) fields.append(Input('heartbeat-interval', str(heartbeatInterval))) topologyInput = Input( 'topology', # a json structure that needs to be dumped json.dumps(topology, default=json_serializer.toJson, indent=4)) fields.append(topologyInput) headers = dict() headers['originating-server-id'] = originatingServer if originatingClient is not None: headers['originating-client'] = originatingClient response = self.putRequest( ServerRequest.prepareRequest(fields, [], headers)) return response
def addNodeAccepted(self): conf = ServerConf() inf = open(conf.getCACertFile(), "r") key = inf.read() #only sending fqdn the requesting should already know the unqualified # hostname node = NodeConnectRequest(conf.getServerId(), conf.getClientSecurePort(), conf.getServerSecurePort(), key, conf.getFqdn(), None) cmdstring = 'node-connection-accepted' fields = [] input = Input('cmd', cmdstring) input2 = Input( 'connectRequest', json.dumps(node, default=json_serializer.toJson, indent=4)) fields.append(input) fields.append(input2) fields.append(Input('version', "1")) # this goes over client secure port , and we don't want the server to use # cookies response = self.postRequest(ServerRequest.prepareRequest(fields), require_certificate_authentication=False, disable_cookies=True) return response
def commandFinishedForwardedRequest(self, cmdID, workerServer, projectServer, returncode, cputime, haveData): """A server-to-sever request doing command-finished. Used in forwarding non-local command-finished requests.""" cmdstring='command-finished-forward' fields = [] input = Input('cmd', cmdstring) fields.append(input) fields.append(Input('cmd_id', cmdID)) fields.append(Input('version', "1")) fields.append(Input('worker_server', workerServer)) fields.append(Input('project_server', projectServer)) if returncode is not None: fields.append(Input('return_code', returncode)) fields.append(Input('used_cpu_time', cputime)) if haveData: fields.append(Input('run_data', 1)) #the files are not sent in this message, instead they are pulled # from the project server upon receiving this message (for now) files = [] headers = dict() #headers['end-node'] = self.host #headers['end-node-port'] = self.port #self.connect() #log.debug("forwarding command finished to %s"%self.endNode) response= self.putRequest(ServerRequest.prepareRequest(fields, files, headers)) return response
def commandFinishedForwardedRequest(self, cmdID, workerServer, projectServer, returncode, cputime, haveData): """A server-to-sever request doing command-finished. Used in forwarding non-local command-finished requests.""" cmdstring = 'command-finished-forward' fields = [] input = Input('cmd', cmdstring) fields.append(input) fields.append(Input('cmd_id', cmdID)) fields.append(Input('version', "1")) fields.append(Input('worker_server', workerServer)) fields.append(Input('project_server', projectServer)) if returncode is not None: fields.append(Input('return_code', returncode)) fields.append(Input('used_cpu_time', cputime)) if haveData: fields.append(Input('run_data', 1)) #the files are not sent in this message, instead they are pulled # from the project server upon receiving this message (for now) files = [] headers = dict() #headers['end-node'] = self.host #headers['end-node-port'] = self.port #self.connect() #log.debug("forwarding command finished to %s"%self.endNode) response = self.putRequest( ServerRequest.prepareRequest(fields, files, headers)) return response
def addNodeAccepted(self): conf = ServerConf() inf = open(conf.getCACertFile(), "r") key = inf.read() #only sending fqdn the requesting should already know the unqualified # hostname node = NodeConnectRequest(conf.getServerId(), conf.getClientSecurePort(), conf.getServerSecurePort(), key, conf.getFqdn(), None) cmdstring ='node-connection-accepted' fields = [] input=Input('cmd',cmdstring) input2=Input('connectRequest', json.dumps(node,default=json_serializer.toJson,indent=4)) fields.append(input) fields.append(input2) fields.append(Input('version', "1")) # this goes over client secure port , and we don't want the server to use # cookies response= self.postRequest(ServerRequest.prepareRequest(fields), require_certificate_authentication=False, disable_cookies=True) return response
def projectGetDefaultRequest(self): """Get the default project project name""" cmdstring = "project-get-default" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) response = self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def projectGetDefaultRequest(self): """Get the default project project name""" cmdstring="project-get-default" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) response= self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def projectsRequest(self): """List all projects""" cmdstring = "projects" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) response = self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def listModules(self): cmdString = "list-modules" fields = [] input = Input('cmd',cmdString) fields.append(input) fields.append(Input('version', "1")) msg = ServerRequest.prepareRequest(fields,[]) return self.postRequest(msg)
def projectRollbackRequest(self, project): """Cancel a series of previously scheduled set&connect requests.""" cmdstring="project-rollback" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) response= self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def projectsRequest(self): """List all projects""" cmdstring="projects" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) response= self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def projectRollbackRequest(self, project): """Cancel a series of previously scheduled set&connect requests.""" cmdstring = "project-rollback" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) response = self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def listModules(self): cmdString = "list-modules" fields = [] input = Input('cmd', cmdString) fields.append(input) fields.append(Input('version', "1")) msg = ServerRequest.prepareRequest(fields, []) return self.postRequest(msg)
def deleteUser(self, user): cmdstring = "delete-user" fields = [] input = Input('cmd', cmdstring) fields.append(input) fields.append(Input('user', user)) msg = ServerRequest.prepareRequest(fields, []) response = self.postRequest(msg) return response
def revokeNode(self, serverId): cmdString = "revoke-node" fields = [] input = Input('cmd', cmdString) fields.append(input) fields.append(Input('version', "1")) fields.append(Input('serverId', serverId)) msg = ServerRequest.prepareRequest(fields, []) return self.postRequest(msg)
def stopRequest(self): cmdstring = "stop" fields = [] input = Input('cmd', cmdstring) fields.append(input) fields.append(Input('version', "1")) response = self.postRequest(ServerRequest.prepareRequest(fields, [])) #response= self.putRequest(ServerRequest.prepareRequest(fields, [])) return response
def readConfRequest(self): """Tell the server to re-read its configuration.""" cmdstring = "readconf" fields = [] input = Input('cmd', cmdstring) fields.append(input) fields.append(Input('version', "1")) response = self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def projectCommitRequest(self, project): """Commit a series of previously scheduled set&connect requests, atomically.""" cmdstring = "project-commit" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) response = self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def saveStateRequest(self): """Tell the server to save its state now.""" cmdstring = "save-state" fields = [] input = Input('cmd', cmdstring) fields.append(input) fields.append(Input('version', "1")) response = self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def projectStartRequest(self, name): """Start a new empty project """ cmdstring = "project-start" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) fields.append(Input('name', name)) response = self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def grantAccess(self, user): cmdstring="grant-access" fields = [] input = Input('cmd', cmdstring) fields.append(input) fields.append(Input('name', user)) msg = ServerRequest.prepareRequest(fields,[]) response = self.postRequest(msg) return response
def projectStartRequest(self, name): """Start a new empty project """ cmdstring="project-start" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) fields.append(Input('name',name)) response= self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def readConfRequest(self): """Tell the server to re-read its configuration.""" cmdstring="readconf" fields = [] input = Input('cmd', cmdstring) fields.append(input) fields.append(Input('version', "1")) response= self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def serverInfo(self): cmdstring='server-info' fields = [] input = Input('cmd', cmdstring) fields.append(input) fields.append(Input('version', "1")) msg = ServerRequest.prepareRequest(fields,[]) response= self.postRequest(msg) return response
def revokeNode(self,serverId): cmdString = "revoke-node" fields = [] input = Input('cmd',cmdString) fields.append(input) fields.append(Input('version', "1")) fields.append(Input('serverId',serverId)) msg = ServerRequest.prepareRequest(fields,[]) return self.postRequest(msg)
def projectCommitRequest(self, project): """Commit a series of previously scheduled set&connect requests, atomically.""" cmdstring="project-commit" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) response= self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def serverInfo(self): cmdstring = 'server-info' fields = [] input = Input('cmd', cmdstring) fields.append(input) fields.append(Input('version', "1")) msg = ServerRequest.prepareRequest(fields, []) response = self.postRequest(msg) return response
def stopRequest(self): cmdstring="stop" fields = [] input = Input('cmd', cmdstring) fields.append(input) fields.append(Input('version', "1")) response= self.postRequest(ServerRequest.prepareRequest(fields, [])) #response= self.putRequest(ServerRequest.prepareRequest(fields, [])) return response
def deleteUser(self, user): cmdstring="delete-user" fields = [] input = Input('cmd', cmdstring) fields.append(input) fields.append(Input('user', user)) msg = ServerRequest.prepareRequest(fields,[]) response = self.postRequest(msg) return response
def saveStateRequest(self): """Tell the server to save its state now.""" cmdstring="save-state" fields = [] input = Input('cmd', cmdstring) fields.append(input) fields.append(Input('version', "1")) response= self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def grantAccess(self, user): cmdstring = "grant-access" fields = [] input = Input('cmd', cmdstring) fields.append(input) fields.append(Input('name', user)) msg = ServerRequest.prepareRequest(fields, []) response = self.postRequest(msg) return response
def grantAllNodeConnections(self): cmdString = "grant-all-node-connections" input = Input('cmd',cmdString) fields = [] fields.append(input) fields.append(Input('version', "1")) msg = ServerRequest.prepareRequest(fields,[]) return self.postRequest(msg)
def grantNodeConnection(self,serverId): cmdString = "grant-node-connection" input = Input('cmd',cmdString) fields = [] fields.append(input) fields.append(Input('version', "1")) fields.append(Input('serverId',serverId)) msg = ServerRequest.prepareRequest(fields,[]) return self.postRequest(msg)
def projectDebugRequest(self, project, item): """Get debug info for project items""" cmdstring = "project-debug" fields = [] fields.append(Input('cmd', cmdstring)) if project is not None: fields.append(Input('project', project)) fields.append(Input('item', item)) response = self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def workerRequest(self, workerID, archdata): cmdstring = "worker-ready" fields = [] fields.append(Input("cmd", cmdstring)) fields.append(Input("version", "1")) fields.append(Input("worker", archdata)) fields.append(Input("worker-id", workerID)) headers = dict() response = self.putRequest(ServerRequest.prepareRequest(fields, [], headers)) return response
def projectSaveRequest(self, project): """Get a data item from a project.""" cmdstring="project-save" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) #if project is not None: fields.append(Input('project', project)) response= self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def projectDebugRequest(self, project, item): """Get debug info for project items""" cmdstring="project-debug" fields = [] fields.append(Input('cmd', cmdstring)) if project is not None: fields.append(Input('project', project)) fields.append(Input('item', item)) response= self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def grantNodeConnection(self, serverId): cmdString = "grant-node-connection" input = Input('cmd', cmdString) fields = [] fields.append(input) fields.append(Input('version', "1")) fields.append(Input('serverId', serverId)) msg = ServerRequest.prepareRequest(fields, []) return self.postRequest(msg)
def projectSaveRequest(self, project): """Get a data item from a project.""" cmdstring = "project-save" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) #if project is not None: fields.append(Input('project', project)) response = self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def grantAllNodeConnections(self): cmdString = "grant-all-node-connections" input = Input('cmd', cmdString) fields = [] fields.append(input) fields.append(Input('version', "1")) msg = ServerRequest.prepareRequest(fields, []) return self.postRequest(msg)
def addUser(self, user, password): cmdstring="add-user" fields = [] input = Input('cmd', cmdstring) fields.append(input) fields.append(Input('user', user)) fields.append(Input('password', password)) msg = ServerRequest.prepareRequest(fields,[]) response = self.postRequest(msg) return response
def projectHoldRequest(self, project, item): """List all projects""" cmdstring = "project-deactivate" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) if project is not None: fields.append(Input('project', project)) fields.append(Input('item', item)) response = self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def projectGraphRequest(self, project, item): """Graph item's network in a project""" cmdstring = "project-graph" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) if project is not None: fields.append(Input('project', project)) fields.append(Input('item', item)) response = self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def projectImportRequest(self, project, module): """Import a module in a network""" cmdstring="project-import" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) if project is not None: fields.append(Input('project', project)) fields.append(Input('module', module)) response= self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def statusRequest(self, project): """Fetches an aggregated general information about the server and and its projects. The argument project is optional""" cmdstring="status" fields = [] fields.append(Input('cmd', cmdstring)) if project is not None: fields.append(Input('project', project)) fields.append(Input('version', "1")) response= self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def projectUploadRequest(self, project, file): """Upload project file""" cmdstring="project-upload" fields = [] if project is not None: fields.append(Input('project', project)) fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) files = [FileInput('upload','project.xml',open(file,'r'))] response= self.postRequest(ServerRequest.prepareRequest(fields, files)) return response
def projectHoldRequest(self, project, item): """List all projects""" cmdstring="project-deactivate" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) if project is not None: fields.append(Input('project', project)) fields.append(Input('item', item)) response= self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def projectGraphRequest(self, project, item): """Graph item's network in a project""" cmdstring="project-graph" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) if project is not None: fields.append(Input('project', project)) fields.append(Input('item', item)) response= self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def workerRequest(self, workerID, archdata): cmdstring='worker-ready' fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) fields.append(Input('worker', archdata)) fields.append(Input('worker-id', workerID)) headers = dict() response= self.putRequest(ServerRequest.prepareRequest(fields, [], headers)) return response
def projectImportRequest(self, project, module): """Import a module in a network""" cmdstring = "project-import" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) if project is not None: fields.append(Input('project', project)) fields.append(Input('module', module)) response = self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def projectDeleteRequest(self, project, deleteDir): """Delete a project and optionally also its directory """ cmdstring="project-delete" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) fields.append(Input('project',project)) if deleteDir: fields.append(Input('delete-dir',1)) response= self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def projectInfoRequest(self, project, item): """List descriptions of project items""" cmdstring = "project-info" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) if project is not None: fields.append(Input('project', project)) fields.append(Input('item', item)) response = self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def _sendMessage(self,node,fields,files = [],headers=dict()): self.node = node #TODO find nicer way to do this #a bit backwards to initialize the parent object here. ServerToServerMessage.__init__(self,node.getId()) #self.initialize(node.server_id) headers['end-node'] = node.getHostname() headers['end-node-port'] = node.getServerSecurePort() msg = ServerRequest.prepareRequest(fields,[],headers) resp = self.putRequest(msg)
def projectDeleteRequest(self, project, deleteDir): """Delete a project and optionally also its directory """ cmdstring = "project-delete" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) fields.append(Input('project', project)) if deleteDir: fields.append(Input('delete-dir', 1)) response = self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def projectInfoRequest(self, project, item): """List descriptions of project items""" cmdstring="project-info" fields = [] fields.append(Input('cmd', cmdstring)) fields.append(Input('version', "1")) if project is not None: fields.append(Input('project', project)) fields.append(Input('item', item)) response= self.postRequest(ServerRequest.prepareRequest(fields, [])) return response
def addUser(self, user, password): cmdstring = "add-user" fields = [] input = Input('cmd', cmdstring) fields.append(input) fields.append(Input('user', user)) fields.append(Input('password', password)) msg = ServerRequest.prepareRequest(fields, []) response = self.postRequest(msg) return response