def format_execution_status(instance): """ Augment instance "status" attribute with number of seconds which have elapsed for all the executions which are in running state and execution total run time for all the executions which have finished. """ start_timestamp = getattr(instance, 'start_timestamp', None) end_timestamp = getattr(instance, 'end_timestamp', None) if instance.status == LIVEACTION_STATUS_RUNNING and start_timestamp: start_timestamp = instance.start_timestamp start_timestamp = parse_isotime(start_timestamp) start_timestamp = calendar.timegm(start_timestamp.timetuple()) now = int(time.time()) elapsed_seconds = (now - start_timestamp) instance.status = '%s (%ss elapsed)' % (instance.status, elapsed_seconds) elif instance.status in LIVEACTION_COMPLETED_STATES and start_timestamp and end_timestamp: start_timestamp = parse_isotime(start_timestamp) start_timestamp = calendar.timegm(start_timestamp.timetuple()) end_timestamp = parse_isotime(end_timestamp) end_timestamp = calendar.timegm(end_timestamp.timetuple()) elapsed_seconds = (end_timestamp - start_timestamp) instance.status = '%s (%ss elapsed)' % (instance.status, elapsed_seconds) return instance
def _cache_auth_token(self, token_obj): """ Cache auth token in the config directory. :param token_obj: Token object. :type token_obj: ``object`` """ if not os.path.isdir(ST2_CONFIG_DIRECTORY): os.makedirs(ST2_CONFIG_DIRECTORY, mode=0o2770) # os.makedirs straight up ignores the setgid bit, so we have to set # it manually os.chmod(ST2_CONFIG_DIRECTORY, 0o2770) username = token_obj.user cached_token_path = self._get_cached_token_path_for_user(username=username) if not os.access(ST2_CONFIG_DIRECTORY, os.W_OK): # We don't have write access to the file with a cached token message = ( 'Unable to write token to "%s" (user %s doesn\'t have write ' "access to the parent directory). Subsequent requests won't use a " "cached token meaning they may be slower." % (cached_token_path, os.getlogin()) ) self.LOG.warn(message) return None if os.path.isfile(cached_token_path) and not os.access( cached_token_path, os.W_OK ): # We don't have write access to the file with a cached token message = ( 'Unable to write token to "%s" (user %s doesn\'t have write ' "access to this file). Subsequent requests won't use a " "cached token meaning they may be slower." % (cached_token_path, os.getlogin()) ) self.LOG.warn(message) return None token = token_obj.token expire_timestamp = parse_isotime(token_obj.expiry) expire_timestamp = calendar.timegm(expire_timestamp.timetuple()) data = {} data["token"] = token data["expire_timestamp"] = expire_timestamp data = json.dumps(data) # Note: We explictly use fdopen instead of open + chmod to avoid a security issue. # open + chmod are two operations which means that during a short time frame (between # open and chmod) when file can potentially be read by other users if the default # permissions used during create allow that. fd = os.open(cached_token_path, os.O_WRONLY | os.O_CREAT, 0o660) with os.fdopen(fd, "w") as fp: fp.write(data) os.chmod(cached_token_path, 0o660) self.LOG.debug('Token has been cached in "%s"' % (cached_token_path)) return True
def _cache_auth_token(self, token_obj): """ Cache auth token in the config directory. :param token_obj: Token object. :type token_obj: ``object`` """ if not os.path.isdir(ST2_CONFIG_DIRECTORY): os.makedirs(ST2_CONFIG_DIRECTORY, mode=0o2770) # os.makedirs straight up ignores the setgid bit, so we have to set # it manually os.chmod(ST2_CONFIG_DIRECTORY, 0o2770) username = token_obj.user cached_token_path = self._get_cached_token_path_for_user(username=username) if not os.access(ST2_CONFIG_DIRECTORY, os.W_OK): # We don't have write access to the file with a cached token message = ('Unable to write token to "%s" (user %s doesn\'t have write ' 'access to the parent directory). Subsequent requests won\'t use a ' 'cached token meaning they may be slower.' % (cached_token_path, os.getlogin())) self.LOG.warn(message) return None if os.path.isfile(cached_token_path) and not os.access(cached_token_path, os.W_OK): # We don't have write access to the file with a cached token message = ('Unable to write token to "%s" (user %s doesn\'t have write ' 'access to this file). Subsequent requests won\'t use a ' 'cached token meaning they may be slower.' % (cached_token_path, os.getlogin())) self.LOG.warn(message) return None token = token_obj.token expire_timestamp = parse_isotime(token_obj.expiry) expire_timestamp = calendar.timegm(expire_timestamp.timetuple()) data = {} data['token'] = token data['expire_timestamp'] = expire_timestamp data = json.dumps(data) # Note: We explictly use fdopen instead of open + chmod to avoid a security issue. # open + chmod are two operations which means that during a short time frame (between # open and chmod) when file can potentially be read by other users if the default # permissions used during create allow that. fd = os.open(cached_token_path, os.O_WRONLY | os.O_CREAT, 0o660) with os.fdopen(fd, 'w') as fp: fp.write(data) os.chmod(cached_token_path, 0o660) self.LOG.debug('Token has been cached in "%s"' % (cached_token_path)) return True
def format_execution_status(instance): """ Augment instance "status" attribute with number of seconds which have elapsed for all the executions which are in running state. """ if instance.status == LIVEACTION_STATUS_RUNNING and instance.start_timestamp: start_timestamp = instance.start_timestamp start_timestamp = parse_isotime(start_timestamp) start_timestamp = calendar.timegm(start_timestamp.timetuple()) now = int(time.time()) elapsed_seconds = (now - start_timestamp) instance.status = '%s (%ss elapsed)' % (instance.status, elapsed_seconds) return instance
def _cache_auth_token(self, token_obj): """ Cache auth token in the config directory. :param token_obj: Token object. :type token_obj: ``object`` """ if not os.path.isdir(ST2_CONFIG_DIRECTORY): os.makedirs(ST2_CONFIG_DIRECTORY) if not os.access(ST2_CONFIG_DIRECTORY, os.W_OK): # We don't have write access to the file with a cached token message = ( 'Unable to write token to "%s" (user %s doesn\'t have write' 'access to the parent directory). Subsequent requests won\'t use a ' 'cached token meaning they may be slower.' % (CACHED_TOKEN_PATH, os.getlogin())) LOG.warn(message) return None if os.path.isfile(CACHED_TOKEN_PATH) and not os.access( CACHED_TOKEN_PATH, os.W_OK): # We don't have write access to the file with a cached token message = ( 'Unable to write token to "%s" (user %s doesn\'t have write' 'access to this file). Subsequent requests won\'t use a ' 'cached token meaning they may be slower.' % (CACHED_TOKEN_PATH, os.getlogin())) LOG.warn(message) return None token = token_obj.token expire_timestamp = parse_isotime(token_obj.expiry) expire_timestamp = calendar.timegm(expire_timestamp.timetuple()) data = {} data['token'] = token data['expire_timestamp'] = expire_timestamp data = json.dumps(data) # Note: We explictly use fdopen instead of open + chmod to avoid a security issue. # open + chmod are two operations which means that during a short time frame (between # open and chmod) when file can potentially be read by other users if the default # permissions used during create allow that. fd = os.open(CACHED_TOKEN_PATH, os.O_WRONLY | os.O_CREAT, 0600) with os.fdopen(fd, 'w') as fp: fp.write(data) return True
def _cache_auth_token(self, token_obj): """ Cache auth token in the config directory. :param token_obj: Token object. :type token_obj: ``object`` """ if not os.path.isdir(ST2_CONFIG_DIRECTORY): os.makedirs(ST2_CONFIG_DIRECTORY) if not os.access(ST2_CONFIG_DIRECTORY, os.W_OK): # We don't have write access to the file with a cached token message = ('Unable to write token to "%s" (user %s doesn\'t have write' 'access to the parent directory). Subsequent requests won\'t use a ' 'cached token meaning they may be slower.' % (CACHED_TOKEN_PATH, os.getlogin())) LOG.warn(message) return None if os.path.isfile(CACHED_TOKEN_PATH) and not os.access(CACHED_TOKEN_PATH, os.W_OK): # We don't have write access to the file with a cached token message = ('Unable to write token to "%s" (user %s doesn\'t have write' 'access to this file). Subsequent requests won\'t use a ' 'cached token meaning they may be slower.' % (CACHED_TOKEN_PATH, os.getlogin())) LOG.warn(message) return None token = token_obj.token expire_timestamp = parse_isotime(token_obj.expiry) expire_timestamp = calendar.timegm(expire_timestamp.timetuple()) data = {} data['token'] = token data['expire_timestamp'] = expire_timestamp data = json.dumps(data) # Note: We explictly use fdopen instead of open + chmod to avoid a security issue. # open + chmod are two operations which means that during a short time frame (between # open and chmod) when file can potentially be read by other users if the default # permissions used during create allow that. fd = os.open(CACHED_TOKEN_PATH, os.O_WRONLY | os.O_CREAT, 0600) with os.fdopen(fd, 'w') as fp: fp.write(data) return True