Merge "Progress adjust metadata refactoring"
This commit is contained in:
commit
115f877fac
|
@ -1595,7 +1595,8 @@ APP_LIFECYCLE_OPERATION_MTC_ACTION = 'mtc-action'
|
||||||
|
|
||||||
# Application metadata constants
|
# Application metadata constants
|
||||||
APP_METADATA_MAINTAIN_USER_OVERRIDES = 'maintain_user_overrides'
|
APP_METADATA_MAINTAIN_USER_OVERRIDES = 'maintain_user_overrides'
|
||||||
APP_METADATA_HELM_TOOLKIT_REQUIRED = 'helm_toolkit_required'
|
APP_METADATA_APPLY_PROGRESS_ADJUST = 'apply_progress_adjust'
|
||||||
|
APP_METADATA_APPLY_PROGRESS_ADJUST_DEFAULT_VALUE = 0
|
||||||
APP_METADATA_APPS = 'apps'
|
APP_METADATA_APPS = 'apps'
|
||||||
APP_METADATA_BEHAVIOR = 'behavior'
|
APP_METADATA_BEHAVIOR = 'behavior'
|
||||||
APP_METADATA_EVALUATE_REAPPLY = 'evaluate_reapply'
|
APP_METADATA_EVALUATE_REAPPLY = 'evaluate_reapply'
|
||||||
|
|
|
@ -1927,6 +1927,10 @@ def find_metadata_file(path, metadata_file):
|
||||||
dictionary. If specified the filters are applied
|
dictionary. If specified the filters are applied
|
||||||
to trigger[filter_field] sub-dictionary instead
|
to trigger[filter_field] sub-dictionary instead
|
||||||
of the root trigger dictionary.
|
of the root trigger dictionary.
|
||||||
|
apply_progress_adjust: - optional: Positive integer value by which to adjust the
|
||||||
|
percentage calculations for the progress of
|
||||||
|
a monitoring task.
|
||||||
|
Default value is zero (no adjustment)
|
||||||
"""
|
"""
|
||||||
app_name = ''
|
app_name = ''
|
||||||
app_version = ''
|
app_version = ''
|
||||||
|
@ -2061,6 +2065,23 @@ def find_metadata_file(path, metadata_file):
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
apply_progress_adjust_value = doc[constants.APP_METADATA_APPLY_PROGRESS_ADJUST]
|
||||||
|
if not isinstance(apply_progress_adjust_value, six.integer_types):
|
||||||
|
raise exception.SysinvException(_(
|
||||||
|
"Invalid {}: {} should be {}."
|
||||||
|
"".format(metadata_file,
|
||||||
|
constants.APP_METADATA_APPLY_PROGRESS_ADJUST,
|
||||||
|
six.integer_types)))
|
||||||
|
if apply_progress_adjust_value < 0:
|
||||||
|
raise exception.SysinvException(_(
|
||||||
|
"Invalid {}: {} should be greater or equal to zero."
|
||||||
|
"".format(metadata_file,
|
||||||
|
constants.APP_METADATA_APPLY_PROGRESS_ADJUST)))
|
||||||
|
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
return app_name, app_version, patches
|
return app_name, app_version, patches
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1252,7 +1252,7 @@ class AppOperator(object):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
LOG.exception(e)
|
LOG.exception(e)
|
||||||
|
|
||||||
def _get_metadata_flag(self, app, flag, default):
|
def _get_metadata_value(self, app, flag, default):
|
||||||
# This function gets a boolean
|
# This function gets a boolean
|
||||||
# parameter from application metadata
|
# parameter from application metadata
|
||||||
flag_result = default
|
flag_result = default
|
||||||
|
@ -1363,20 +1363,14 @@ class AppOperator(object):
|
||||||
""" Progress monitoring task, to be run in a separate thread """
|
""" Progress monitoring task, to be run in a separate thread """
|
||||||
LOG.info("Starting progress monitoring thread for app %s" % app.name)
|
LOG.info("Starting progress monitoring thread for app %s" % app.name)
|
||||||
|
|
||||||
def _progress_adjust(app):
|
|
||||||
helm_toolkit_app = \
|
|
||||||
self._get_metadata_flag(app,
|
|
||||||
constants.APP_METADATA_HELM_TOOLKIT_REQUIRED,
|
|
||||||
True)
|
|
||||||
|
|
||||||
if helm_toolkit_app:
|
|
||||||
return 1
|
|
||||||
else:
|
|
||||||
return 0
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
adjust = self._get_metadata_value(app,
|
||||||
|
constants.APP_METADATA_APPLY_PROGRESS_ADJUST,
|
||||||
|
constants.APP_METADATA_APPLY_PROGRESS_ADJUST_DEFAULT_VALUE)
|
||||||
with Timeout(INSTALLATION_TIMEOUT,
|
with Timeout(INSTALLATION_TIMEOUT,
|
||||||
exception.KubeAppProgressMonitorTimeout()):
|
exception.KubeAppProgressMonitorTimeout()):
|
||||||
|
|
||||||
|
charts_count = len(app.charts)
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
monitor_flag.get_nowait()
|
monitor_flag.get_nowait()
|
||||||
|
@ -1386,19 +1380,27 @@ class AppOperator(object):
|
||||||
except queue.Empty:
|
except queue.Empty:
|
||||||
last, num = _get_armada_log_stats(pattern, logfile)
|
last, num = _get_armada_log_stats(pattern, logfile)
|
||||||
if last:
|
if last:
|
||||||
if app.system_app:
|
if charts_count == 0:
|
||||||
adjust = _progress_adjust(app)
|
percent = 100
|
||||||
percent = \
|
|
||||||
round(float(num) /
|
|
||||||
(len(app.charts) - adjust) * 100)
|
|
||||||
else:
|
else:
|
||||||
percent = round(float(num) / len(app.charts) * 100)
|
tadjust = 0
|
||||||
progress_str = 'processing chart: ' + str(last) +\
|
if app.system_app:
|
||||||
', overall completion: ' + str(percent) + '%'
|
tadjust = adjust
|
||||||
|
if tadjust >= charts_count:
|
||||||
|
LOG.error("Application metadata key '{}'"
|
||||||
|
"has an invalid value {} (too few charts)".
|
||||||
|
format(constants.APP_METADATA_APPLY_PROGRESS_ADJUST,
|
||||||
|
adjust))
|
||||||
|
tadjust = 0
|
||||||
|
|
||||||
|
percent = round((float(num) / (charts_count - tadjust)) * 100)
|
||||||
|
|
||||||
|
progress_str = "processing chart: {}, overall completion: {}%".\
|
||||||
|
format(last, percent)
|
||||||
|
|
||||||
if app.progress != progress_str:
|
if app.progress != progress_str:
|
||||||
LOG.info("%s" % progress_str)
|
LOG.info("%s" % progress_str)
|
||||||
self._update_app_status(
|
self._update_app_status(app, new_progress=progress_str)
|
||||||
app, new_progress=progress_str)
|
|
||||||
greenthread.sleep(1)
|
greenthread.sleep(1)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# timeout or subprocess error
|
# timeout or subprocess error
|
||||||
|
@ -2420,9 +2422,9 @@ class AppOperator(object):
|
||||||
result = False
|
result = False
|
||||||
if operation == constants.APP_APPLY_OP:
|
if operation == constants.APP_APPLY_OP:
|
||||||
reuse_overrides = \
|
reuse_overrides = \
|
||||||
self._get_metadata_flag(to_app,
|
self._get_metadata_value(to_app,
|
||||||
constants.APP_METADATA_MAINTAIN_USER_OVERRIDES,
|
constants.APP_METADATA_MAINTAIN_USER_OVERRIDES,
|
||||||
False)
|
False)
|
||||||
if reuse_user_overrides is not None:
|
if reuse_user_overrides is not None:
|
||||||
reuse_overrides = reuse_user_overrides
|
reuse_overrides = reuse_user_overrides
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue