def submission_visualizer(submission_id): """ Gets the visualizer url of a specific job. Raises: ex.BadRequestException -- Trying to search info about a job that has never being submitted in this Asperathos instance. Returns: dict -- Returns a dict with 'visualizer_url' as key and the url that gives access to the visualizer platform as value. """ if submission_id not in submissions: API_LOG.log("Wrong request") raise ex.BadRequestException() visualizer_url = "" # Check if the visualizer is active in this Asperathos instance # If true, call visualizer API to return the visualizer URL sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) address = api.visualizer_url.split('/')[-1] ip = address.split(':')[0] port = int(address.split(':')[1]) result = sock.connect_ex((ip, port)) if result == 0: API_LOG.log("Visualizing Running on port %s" % port) visualizer_url = visualizer.get_visualizer_url(api.visualizer_url, submission_id) else: API_LOG.log("There is no process running in the Visualizer address") raise ex.BadRequestException("There is no process running \ in the Visualizer address") return {"visualizer_url": visualizer_url}
def start_visualization(self, data): self.enable_visualizer = data['enable_visualizer'] if self.enable_visualizer: visualizer.start_visualization(api.visualizer_url, self.app_id, data['visualizer_info']) self.visualizer_url = visualizer.get_visualizer_url( api.visualizer_url, self.app_id) KUBEJOBS_LOG.log("Dashboard of the job created on: %s" % (self.visualizer_url))
def start_application(self, data): try: # Download files that contains the items jobs = requests.get(data['redis_workload']).text.\ split('\n')[:-1] # Provision a redis database for the job. Die in case of error. # TODO(clenimar): configure ``timeout`` via a request param, # e.g. api.redis_creation_timeout. redis_ip, redis_port = self.k8s.provision_redis_or_die(self.app_id) #agent_port = k8s.create_cpu_agent(self.app_id) # inject REDIS_HOST in the environment data['env_vars']['REDIS_HOST'] = 'redis-%s' % self.app_id # inject SCONE_CONFIG_ID in the environment # FIXME: make SCONE_CONFIG_ID optional in submission data['env_vars']['SCONE_CONFIG_ID'] = data['config_id'] # create a new Redis client and fill the work queue if (self.rds == None): self.rds = redis.StrictRedis(host=redis_ip, port=redis_port) queue_size = len(jobs) # Check if a visualizer will be created self.enable_visualizer = data['enable_visualizer'] # Create all visualizer components if self.enable_visualizer: # Specify the datasource to be used in the visualization datasource_type = data['visualizer_info']['datasource_type'] if datasource_type == "influxdb": database_data = k8s.create_influxdb(self.app_id) #TODO {javan} change name of redis_ip to node_ip in configuration file database_data.update({"url": api.redis_ip}) data['monitor_info'].update( {'database_data': database_data}) data['visualizer_info'].update( {'database_data': database_data}) data['monitor_info'].update( {'datasource_type': datasource_type}) print "Creating Visualization plataform" data['visualizer_info'].update({ 'enable_visualizer': data['enable_visualizer'], 'plugin': data['monitor_plugin'], 'visualizer_plugin': data['visualizer_plugin'], 'username': data['username'], 'password': data['password'] }) visualizer.start_visualization(api.visualizer_url, self.app_id, data['visualizer_info']) self.visualizer_url = visualizer.get_visualizer_url( api.visualizer_url, self.app_id) print "Dashboard of the job created on: %s" % ( self.visualizer_url) print "Creating Redis queue" for job in jobs: self.rds.rpush("job", job) print "Creating Job" self.k8s.create_job(self.app_id, data['cmd'], data['img'], data['init_size'], data['env_vars'], config_id=data["config_id"]) starting_time = datetime.datetime.now().\ strftime('%Y-%m-%dT%H:%M:%S.%fGMT') # Starting monitor data['monitor_info'].update({ 'count_jobs_url': api.count_queue, 'number_of_jobs': queue_size, 'submission_time': starting_time, 'redis_ip': redis_ip, 'redis_port': redis_port, 'enable_visualizer': self.enable_visualizer }) #, #'cpu_agent_port': agent_port}) monitor.start_monitor(api.monitor_url, self.app_id, data['monitor_plugin'], data['monitor_info'], 2) # Starting controller data.update({'redis_ip': redis_ip, 'redis_port': redis_port}) controller.start_controller_k8s(api.controller_url, self.app_id, data) while not self.job_completed and not self.terminated: self.update_application_state("ongoing") self.job_completed = self.k8s.completed(self.app_id) time.sleep(1) # Stop monitor, controller and visualizer if (self.get_application_state() == "ongoing"): self.update_application_state("completed") print "Job finished" time.sleep(float(30)) if self.enable_visualizer: visualizer.stop_visualization(api.visualizer_url, self.app_id, data['visualizer_info']) monitor.stop_monitor(api.monitor_url, self.app_id) controller.stop_controller(api.controller_url, self.app_id) print "Stoped services" # delete redis resources if not self.get_application_state() == 'terminated': self.k8s.delete_redis_resources(self.app_id) except Exception as ex: self.update_application_state("error") print "ERROR: %s" % ex print "Application finished."