def test_registration_build(self): tmpdir = tempfile.gettempdir() ver_dir = os.path.join(tmpdir, "infra") app_ver = "1.0.0" config = AgentConfig(tmpdir, ver_dir) config.set('agent', 'prefix', tmpdir) config.set('agent', 'current_ping_port', '33777') register = Register(config) data = register.build(State.INIT, State.INIT, {}, {}, app_ver, "tag", 1) #print ("Register: " + pprint.pformat(data)) self.assertEquals(data['label'] != "", True, "hostname should not be empty") self.assertEquals(data['publicHostname'] != "", True, "publicHostname should not be empty") self.assertEquals(data['responseId'], 1) self.assertEquals(data['timestamp'] > 1353678475465L, True, "timestamp should not be empty") self.assertEquals(data['agentVersion'], '1', "agentVersion should not be empty") self.assertEquals(data['actualState'], State.INIT, "actualState should not be empty") self.assertEquals(data['expectedState'], State.INIT, "expectedState should not be empty") self.assertEquals(data['allocatedPorts'], {}, "allocatedPorts should be empty") self.assertEquals(data['logFolders'], {}, "allocated log should be empty") self.assertEquals(data['appVersion'], app_ver, "app version should match") self.assertEquals(data['tags'], "tag", "tags should be tag") self.assertEquals(len(data), 11) self.assertEquals(posixpath.join(tmpdir, "app/definition"), config.getResolvedPath("app_pkg_dir")) self.assertEquals(posixpath.join(tmpdir, "app/install"), config.getResolvedPath("app_install_dir")) self.assertEquals(posixpath.join(ver_dir, "."), config.getResolvedPath("app_log_dir")) self.assertEquals(posixpath.join(ver_dir, "."), config.getResolvedPath("log_dir")) self.assertEquals(posixpath.join(ver_dir, "."), config.getResolvedPath("app_task_dir"))
def test_registration_build(self): tmpdir = tempfile.gettempdir() ver_dir = os.path.join(tmpdir, "infra") config = AgentConfig(tmpdir, ver_dir) config.set("agent", "prefix", tmpdir) config.set("agent", "current_ping_port", "33777") register = Register(config) data = register.build(State.INIT, State.INIT, {}, {}, "tag", 1) # print ("Register: " + pprint.pformat(data)) self.assertEquals(data["label"] != "", True, "hostname should not be empty") self.assertEquals(data["publicHostname"] != "", True, "publicHostname should not be empty") self.assertEquals(data["responseId"], 1) self.assertEquals(data["timestamp"] > 1353678475465L, True, "timestamp should not be empty") self.assertEquals(data["agentVersion"], "1", "agentVersion should not be empty") self.assertEquals(data["actualState"], State.INIT, "actualState should not be empty") self.assertEquals(data["expectedState"], State.INIT, "expectedState should not be empty") self.assertEquals(data["allocatedPorts"], {}, "allocatedPorts should be empty") self.assertEquals(data["logFolders"], {}, "allocated log should be empty") self.assertEquals(data["tags"], "tag", "tags should be tag") self.assertEquals(len(data), 10) self.assertEquals(posixpath.join(tmpdir, "app/definition"), config.getResolvedPath("app_pkg_dir")) self.assertEquals(posixpath.join(tmpdir, "app/install"), config.getResolvedPath("app_install_dir")) self.assertEquals(posixpath.join(ver_dir, "."), config.getResolvedPath("app_log_dir")) self.assertEquals(posixpath.join(ver_dir, "."), config.getResolvedPath("log_dir")) self.assertEquals(posixpath.join(ver_dir, "."), config.getResolvedPath("app_task_dir"))
class Controller(threading.Thread): def __init__(self, config): threading.Thread.__init__(self) logger.debug('Initializing Controller RPC thread.') self.lock = threading.Lock() self.safeMode = True self.credential = None self.config = config self.hostname = socket.gethostname() server_secured_url = 'https://' + config.get( 'server', 'hostname') + ':' + config.get('server', 'secured_url_port') self.registerUrl = server_secured_url + '/agent/register/' + self.hostname self.heartbeatUrl = server_secured_url + '/agent/heartbeat/' + self.hostname self.netutil = NetUtil() def start(self): self.actionQueue = ActionQueue(self.config) self.actionQueue.start() self.register = Register() self.heartbeat = Heartbeat(self.actionQueue) pass def __del__(self): logger.info("Server connection disconnected.") pass def registerWithServer(self): retry = False firstTime = True registered = False id = -1 ret = {} while registered == False: try: data = json.dumps(self.register.build(id)) logger.info("Registering with the server " + pprint.pformat(data)) req = urllib2.Request(self.registerUrl, data, {'Content-Type': 'application/json'}) stream = security.secured_url_open(req) response = stream.read() stream.close() ret = json.loads(response) logger.info("Registered with the server with " + pprint.pformat(ret)) registered = True pass except Exception, err: delay = self.netutil.CONNECT_SERVER_RETRY_INTERVAL_SEC logger.info("Unable to connect to: " + self.registerUrl, exc_info=True) """ Sleeping for {0} seconds and then retrying again """.format( delay) time.sleep(delay) pass pass return ret
def test_registration_build(self): tmpdir = tempfile.gettempdir() ver_dir = os.path.join(tmpdir, "infra") config = AgentConfig(tmpdir, ver_dir) config.set('agent', 'prefix', tmpdir) config.set('agent', 'current_ping_port', '33777') try: os.mkdir(ver_dir) except OSError as exception: if exception.errno != errno.EEXIST: raise pass ver_file = os.path.join(ver_dir, "version") with open(ver_file, "w") as text_file: text_file.write("1.3.0") register = Register(config) data = register.build(State.INIT, State.INIT, {}, 1) #print ("Register: " + pprint.pformat(data)) self.assertEquals(data['hostname'] != "", True, "hostname should not be empty") self.assertEquals(data['publicHostname'] != "", True, "publicHostname should not be empty") self.assertEquals(data['responseId'], 1) self.assertEquals(data['timestamp'] > 1353678475465L, True, "timestamp should not be empty") self.assertEquals(data['agentVersion'], '1.3.0', "agentVersion should not be empty") self.assertEquals(data['actualState'], State.INIT, "actualState should not be empty") self.assertEquals(data['expectedState'], State.INIT, "expectedState should not be empty") self.assertEquals(data['allocatedPorts'], {}, "allocatedPorts should be empty") self.assertEquals(len(data), 8) self.assertEquals(os.path.join(tmpdir, "app/definition"), config.getResolvedPath("app_pkg_dir")) self.assertEquals(os.path.join(tmpdir, "app/install"), config.getResolvedPath("app_install_dir")) self.assertEquals(os.path.join(ver_dir, "."), config.getResolvedPath("app_log_dir")) self.assertEquals(os.path.join(ver_dir, "."), config.getResolvedPath("log_dir")) self.assertEquals(os.path.join(ver_dir, "."), config.getResolvedPath("app_task_dir")) os.remove(ver_file) os.removedirs(ver_dir)
def test_registration_build(self): tmpdir = tempfile.gettempdir() ver_dir = os.path.join(tmpdir, "infra") config = AgentConfig(tmpdir, ver_dir) config.set('agent', 'prefix', tmpdir) config.set('agent', 'current_ping_port', '33777') register = Register(config) data = register.build(State.INIT, State.INIT, {}, {}, "tag", 1) #print ("Register: " + pprint.pformat(data)) self.assertEquals(data['label'] != "", True, "hostname should not be empty") self.assertEquals(data['publicHostname'] != "", True, "publicHostname should not be empty") self.assertEquals(data['responseId'], 1) self.assertEquals(data['timestamp'] > 1353678475465L, True, "timestamp should not be empty") self.assertEquals(data['agentVersion'], '1', "agentVersion should not be empty") self.assertEquals(data['actualState'], State.INIT, "actualState should not be empty") self.assertEquals(data['expectedState'], State.INIT, "expectedState should not be empty") self.assertEquals(data['allocatedPorts'], {}, "allocatedPorts should be empty") self.assertEquals(data['logFolders'], {}, "allocated log should be empty") self.assertEquals(data['tags'], "tag", "tags should be tag") self.assertEquals(len(data), 10) self.assertEquals(posixpath.join(tmpdir, "app/definition"), config.getResolvedPath("app_pkg_dir")) self.assertEquals(posixpath.join(tmpdir, "app/install"), config.getResolvedPath("app_install_dir")) self.assertEquals(posixpath.join(ver_dir, "."), config.getResolvedPath("app_log_dir")) self.assertEquals(posixpath.join(ver_dir, "."), config.getResolvedPath("log_dir")) self.assertEquals(posixpath.join(ver_dir, "."), config.getResolvedPath("app_task_dir"))
def test_registration_build(self): tmpdir = tempfile.gettempdir() ver_dir = os.path.join(tmpdir, "infra") config = AgentConfig(tmpdir, ver_dir) config.set('agent', 'prefix', tmpdir) config.set('agent', 'current_ping_port', '33777') try: os.mkdir(ver_dir) except OSError as exception: if exception.errno != errno.EEXIST: raise pass ver_file = os.path.join(ver_dir, "version") with open(ver_file, "w") as text_file: text_file.write("1.3.0") register = Register(config) data = register.build(State.INIT, State.INIT, {}, 1) #print ("Register: " + pprint.pformat(data)) self.assertEquals(data['hostname'] != "", True, "hostname should not be empty") self.assertEquals(data['publicHostname'] != "", True, "publicHostname should not be empty") self.assertEquals(data['responseId'], 1) self.assertEquals(data['timestamp'] > 1353678475465L, True, "timestamp should not be empty") self.assertEquals(data['agentVersion'], '1.3.0', "agentVersion should not be empty") self.assertEquals(data['actualState'], State.INIT, "actualState should not be empty") self.assertEquals(data['expectedState'], State.INIT, "expectedState should not be empty") self.assertEquals(data['allocatedPorts'], {}, "allocatedPorts should be empty") self.assertEquals(len(data), 8) self.assertEquals(os.path.join(tmpdir, "app/definition"), config.getResolvedPath("app_pkg_dir")) self.assertEquals(os.path.join(tmpdir, "app/install"), config.getResolvedPath("app_install_dir")) self.assertEquals(os.path.join(ver_dir, "."), config.getResolvedPath("app_log_dir")) self.assertEquals(os.path.join(ver_dir, "."), config.getResolvedPath("log_dir")) self.assertEquals(os.path.join(ver_dir, "."), config.getResolvedPath("app_task_dir")) os.remove(ver_file) os.removedirs(ver_dir)
class Controller(threading.Thread): def __init__(self, config, range=30): threading.Thread.__init__(self) logger.debug('Initializing Controller RPC thread.') self.lock = threading.Lock() self.safeMode = True self.credential = None self.config = config self.hostname = hostname.hostname() server_secured_url = 'https://' + config.get( 'server', 'hostname') + ':' + config.get('server', 'secured_url_port') self.registerUrl = server_secured_url + '/agent/v1/register/' + self.hostname self.unregisterUrl = server_secured_url + '/agent/v1/unregister/' + self.hostname self.heartbeatUrl = server_secured_url + '/agent/v1/heartbeat/' + self.hostname self.netutil = NetUtil() self.responseId = -1 self.repeatRegistration = False self.cachedconnect = None self.range = range self.hasMappedComponents = True self.actionQueue = ActionQueue(self.config) self.actionQueue.start() self.register = Register(self.config) self.unregister = Unregister(self.config) self.heartbeat = Heartbeat(self.actionQueue, self.config) def __del__(self): logger.info("Server connection disconnected.") pass def unregisterWithServer(self): id = -1 ret = self.retriedRequest(self.unregisterUrl, lambda: self.unregister.build(id)) if ret["response"] == "OK": logger.info("Unregistered with the server") print("Unregistered with the server") else: logMsg = "Error while unregistering with server: %s" % ret[ "errorMessage"] logger.info(logMsg) print(logMsg) return ret def registerWithServer(self): id = -1 ret = self.retriedRequest(self.registerUrl, lambda: self.register.build(id)) logger.info("Registered with the server") print("Registered with the server") return ret def retriedRequest(self, requestUrl, payloadBuilder): successfulRequest = False id = -1 ret = {} while not successfulRequest: try: data = json.dumps(payloadBuilder()) logger.info("Sending request to url " + requestUrl + " " + pprint.pformat(data)) response = self.sendRequest(requestUrl, data) ret = json.loads(response) logger.info("Request successful " + pprint.pformat(ret)) self.responseId = int(ret['responseId']) successfulRequest = True if 'statusCommands' in ret.keys(): logger.info("Got status commands on registration " + pprint.pformat(ret['statusCommands'])) self.addToQueue(ret['statusCommands']) pass else: self.hasMappedComponents = False pass except ssl.SSLError: self.repeatRegistration = False return except Exception, err: # try a reconnect only after a certain amount of random time delay = randint(0, self.range) logger.info("Unable to connect to: " + requestUrl, exc_info=True) """ Sleeping for {0} seconds and then retrying again """.format( delay) time.sleep(delay) pass pass return ret
class Controller(threading.Thread): def __init__(self, config, range=30): threading.Thread.__init__(self) logger.debug('Initializing Controller RPC thread.') self.lock = threading.Lock() self.safeMode = True self.credential = None self.config = config self.hostname = hostname.hostname() server_secured_url = 'https://' + config.get('server', 'hostname') + ':' + config.get('server', 'secured_url_port') self.registerUrl = server_secured_url + '/agent/v1/register/' + self.hostname self.unregisterUrl = server_secured_url + '/agent/v1/unregister/' + self.hostname self.heartbeatUrl = server_secured_url + '/agent/v1/heartbeat/' + self.hostname self.netutil = NetUtil() self.responseId = -1 self.repeatRegistration = False self.cachedconnect = None self.range = range self.hasMappedComponents = True self.actionQueue = ActionQueue(self.config) self.actionQueue.start() self.register = Register(self.config) self.unregister = Unregister(self.config) self.heartbeat = Heartbeat(self.actionQueue, self.config) def __del__(self): logger.info("Server connection disconnected.") pass def unregisterWithServer(self): id = -1 ret = self.retriedRequest(self.unregisterUrl, lambda: self.unregister.build(id)) if ret["response"] == "OK": logger.info("Unregistered with the server") print("Unregistered with the server") else: logMsg = "Error while unregistering with server: %s" % ret["errorMessage"] logger.info(logMsg) print(logMsg) return ret def registerWithServer(self): id = -1 ret = self.retriedRequest(self.registerUrl, lambda: self.register.build(id)) logger.info("Registered with the server") print("Registered with the server") return ret def retriedRequest(self, requestUrl, payloadBuilder): successfulRequest=False id = -1 ret = {} while not successfulRequest: try: data = json.dumps(payloadBuilder()) logger.info("Sending request to url " + requestUrl + " " + pprint.pformat(data)) response = self.sendRequest(requestUrl, data) ret = json.loads(response) logger.info("Request successful " + pprint.pformat(ret)) self.responseId= int(ret['responseId']) successfulRequest = True if 'statusCommands' in ret.keys(): logger.info("Got status commands on registration " + pprint.pformat(ret['statusCommands']) ) self.addToQueue(ret['statusCommands']) pass else: self.hasMappedComponents = False pass except ssl.SSLError: self.repeatRegistration=False return except Exception, err: # try a reconnect only after a certain amount of random time delay = randint(0, self.range) logger.info("Unable to connect to: " + requestUrl, exc_info = True) """ Sleeping for {0} seconds and then retrying again """.format(delay) time.sleep(delay) pass pass return ret