From 12bf088bad5b44146f9eae83b3815fbc200e5368 Mon Sep 17 00:00:00 2001 From: Robert Patrick Date: Tue, 14 Feb 2023 19:50:03 -0600 Subject: [PATCH 1/3] adding new log levels and cleaning up the totals line --- .../deploy/logging/NotificationLevel.java | 14 +++++ .../deploy/logging/PlatformLogger.java | 54 ++++++++++++++++++- .../deploy/logging/SummaryHandler.java | 38 +++++++++++-- .../weblogic/deploy/logging/ToDoLevel.java | 15 ++++++ .../deploy/messages/wlsdeploy_rb.properties | 2 +- 5 files changed, 117 insertions(+), 6 deletions(-) create mode 100644 core/src/main/java/oracle/weblogic/deploy/logging/NotificationLevel.java create mode 100644 core/src/main/java/oracle/weblogic/deploy/logging/ToDoLevel.java diff --git a/core/src/main/java/oracle/weblogic/deploy/logging/NotificationLevel.java b/core/src/main/java/oracle/weblogic/deploy/logging/NotificationLevel.java new file mode 100644 index 0000000000..72be6cf69e --- /dev/null +++ b/core/src/main/java/oracle/weblogic/deploy/logging/NotificationLevel.java @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2023, Oracle Corporation and/or its affiliates. + * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. + */ +package oracle.weblogic.deploy.logging; + +import java.util.logging.Level; + +public class NotificationLevel extends Level { + public static final Level NOTIFICATION = new NotificationLevel("NOTIFICATION", 840); + protected NotificationLevel(String name, int value) { + super(name, value); + } +} diff --git a/core/src/main/java/oracle/weblogic/deploy/logging/PlatformLogger.java b/core/src/main/java/oracle/weblogic/deploy/logging/PlatformLogger.java index 79d957238f..7886a0b98d 100644 --- a/core/src/main/java/oracle/weblogic/deploy/logging/PlatformLogger.java +++ b/core/src/main/java/oracle/weblogic/deploy/logging/PlatformLogger.java @@ -66,7 +66,40 @@ public void config(String msg, Object... params) { logger.logp(Level.CONFIG, details.clazz, details.method, msg, params); } } - + + /** + * Logs a message which requires parameters at the TODO level. + * + * @param msg the message + * @param params the objects to use to fill in the message + */ + @SuppressWarnings("java:S1135") + public void todo(String msg, Object... params) { + if (isToDoEnabled()) { + CallerDetails details = inferCaller(); + logger.logp(ToDoLevel.TODO, details.clazz, details.method, msg, params); + } + } + + /** + * Logs a message which requires parameters at the NOTIFICATION level. + * + * @param msg the message + * @param params the objects to use to fill in the message + */ + public void notification(String msg, Object... params) { + if (isNotificationEnabled()) { + CallerDetails details = inferCaller(); + logger.logp(NotificationLevel.NOTIFICATION, details.clazz, details.method, msg, params); + } + } + + /** + * Logs a message which requires parameters at the DEPRECATION level. + * + * @param msg the message + * @param params the objects to use to fill in the message + */ public void deprecation(String msg, Object... params) { if (isDeprecationEnabled()) { CallerDetails details = inferCaller(); @@ -316,6 +349,25 @@ public boolean isConfigEnabled() { return logger.isLoggable(Level.CONFIG); } + /** + * Checks if a message at TODO level would actually be logged. + * + * @return whether the TODO level is enabled + */ + @SuppressWarnings("java:S1135") + public boolean isToDoEnabled() { + return logger.isLoggable(ToDoLevel.TODO); + } + + /** + * Checks if a message at NOTIFICATION level would actually be logged. + * + * @return whether the NOTIFICATION level is enabled + */ + public boolean isNotificationEnabled() { + return logger.isLoggable(NotificationLevel.NOTIFICATION); + } + /** * Checks if a message at DEPRECATION level would actually be logged. * diff --git a/core/src/main/java/oracle/weblogic/deploy/logging/SummaryHandler.java b/core/src/main/java/oracle/weblogic/deploy/logging/SummaryHandler.java index ffcf2fad4e..ab202d88ec 100644 --- a/core/src/main/java/oracle/weblogic/deploy/logging/SummaryHandler.java +++ b/core/src/main/java/oracle/weblogic/deploy/logging/SummaryHandler.java @@ -5,6 +5,7 @@ package oracle.weblogic.deploy.logging; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Properties; import java.util.logging.Formatter; @@ -59,6 +60,8 @@ public SummaryHandler() { this.bufferSize = getMemoryBufferSize(CLASS + SIZE_PROPERTY); + addLevelHandler(ToDoLevel.TODO); + addLevelHandler(NotificationLevel.NOTIFICATION); addLevelHandler(DeprecationLevel.DEPRECATION); addLevelHandler(Level.WARNING); addLevelHandler(Level.SEVERE); @@ -130,10 +133,16 @@ public synchronized void logEnd(WLSDeployContext modelContext) { LOGGER.entering(modelContext, CLASS, METHOD); this.context = modelContext; summaryHead(outputTargetHandler); + LevelHandler todoHandler = null; for (LevelHandler handler : handlers) { - handler.push(); + if (handler.getLevel() != ToDoLevel.TODO) { + handler.push(); + } else { + todoHandler = handler; + } } summaryTail(outputTargetHandler); + summaryToDo(outputTargetHandler, todoHandler); LOGGER.exiting(CLASS, METHOD); } @@ -220,15 +229,36 @@ private void summaryHead(Handler handler) { private void summaryTail(Handler handler) { StringBuilder buffer = new StringBuilder(); try (java.util.Formatter fmt = new java.util.Formatter(buffer)) { - for (LevelHandler levelHandler : handlers) { - if (levelHandler.getTotalRecords() >= 0) { - fmt.format(" %1$s : %2$,5d", levelHandler.getLevel().getName(), levelHandler.getTotalRecords()); + List priorityOrderHandlers = new ArrayList<>(handlers); + Collections.reverse(priorityOrderHandlers); + + for (LevelHandler levelHandler : priorityOrderHandlers) { + Level handlerLevel = levelHandler.getLevel(); + + if (handlerLevel == Level.WARNING || handlerLevel == Level.SEVERE) { + if (levelHandler.getTotalRecords() >= 0) { + fmt.format(" %1$s : %2$,4d", levelHandler.getLevel().getName(), levelHandler.getTotalRecords()); + } + } else if (handlerLevel == DeprecationLevel.DEPRECATION || + handlerLevel == NotificationLevel.NOTIFICATION) { + if (levelHandler.getTotalRecords() > 0) { + fmt.format(" %1$s : %2$,4d", levelHandler.getLevel().getName(), levelHandler.getTotalRecords()); + } } } } handler.publish(getLogRecord("WLSDPLY-21002", buffer)); } + private void summaryToDo(Handler handler, LevelHandler todoHandler) { + if (todoHandler == null || todoHandler.getTotalRecords() == 0) { + return; + } + // Format the report to tell the user what they need to do... + // Add heading + todoHandler.push(); + } + private int getMemoryBufferSize(String sizePropertyName) { String sizePropertyValue = LogManager.getLogManager().getProperty(sizePropertyName); diff --git a/core/src/main/java/oracle/weblogic/deploy/logging/ToDoLevel.java b/core/src/main/java/oracle/weblogic/deploy/logging/ToDoLevel.java new file mode 100644 index 0000000000..a62c5052fd --- /dev/null +++ b/core/src/main/java/oracle/weblogic/deploy/logging/ToDoLevel.java @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2023, Oracle Corporation and/or its affiliates. + * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. + */ +package oracle.weblogic.deploy.logging; + +import java.util.logging.Level; + +public class ToDoLevel extends Level { + public static final Level TODO = new ToDoLevel("TODO", 820); + + protected ToDoLevel(String name, int value) { + super(name, value); + } +} diff --git a/core/src/main/resources/oracle/weblogic/deploy/messages/wlsdeploy_rb.properties b/core/src/main/resources/oracle/weblogic/deploy/messages/wlsdeploy_rb.properties index 4eb7b72c4a..0b7ba6787c 100644 --- a/core/src/main/resources/oracle/weblogic/deploy/messages/wlsdeploy_rb.properties +++ b/core/src/main/resources/oracle/weblogic/deploy/messages/wlsdeploy_rb.properties @@ -1772,7 +1772,7 @@ WLSDPLY-20203={0} entries "{1}" and "{2}" in {3} "{4}" have different {5} values # Common messages used for tool exit and clean-up WLSDPLY-21000={0} Messages: WLSDPLY-21001= {0} total : {1} -WLSDPLY-21002= Total: {0} +WLSDPLY-21002=Total: {0} WLSDPLY-21003=Issue Log for {0} version {1} running WebLogic version {2} {3} mode: # RCUDbinfo From 378ca7722dfcd1021faae0a63936759a73f83d7f Mon Sep 17 00:00:00 2001 From: Robert Patrick Date: Wed, 15 Feb 2023 12:12:32 -0600 Subject: [PATCH 2/3] sonar cleanup --- .../java/oracle/weblogic/deploy/logging/SummaryHandler.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/oracle/weblogic/deploy/logging/SummaryHandler.java b/core/src/main/java/oracle/weblogic/deploy/logging/SummaryHandler.java index ab202d88ec..93da83f141 100644 --- a/core/src/main/java/oracle/weblogic/deploy/logging/SummaryHandler.java +++ b/core/src/main/java/oracle/weblogic/deploy/logging/SummaryHandler.java @@ -239,11 +239,9 @@ private void summaryTail(Handler handler) { if (levelHandler.getTotalRecords() >= 0) { fmt.format(" %1$s : %2$,4d", levelHandler.getLevel().getName(), levelHandler.getTotalRecords()); } - } else if (handlerLevel == DeprecationLevel.DEPRECATION || - handlerLevel == NotificationLevel.NOTIFICATION) { - if (levelHandler.getTotalRecords() > 0) { + } else if ((handlerLevel == DeprecationLevel.DEPRECATION || + handlerLevel == NotificationLevel.NOTIFICATION) && levelHandler.getTotalRecords() > 0) { fmt.format(" %1$s : %2$,4d", levelHandler.getLevel().getName(), levelHandler.getTotalRecords()); - } } } } From 6917af8194fc78c065d9df55906dcf6d6951899e Mon Sep 17 00:00:00 2001 From: Robert Patrick Date: Wed, 15 Feb 2023 14:39:36 -0600 Subject: [PATCH 3/3] switching remote report to use logger --- .../deploy/logging/SummaryHandler.java | 3 +- core/src/main/python/discover.py | 57 +++++++------------ .../wlsdeploy/logging/platform_logger.py | 22 +++++++ .../wlsdeploy/tool/discover/discoverer.py | 5 ++ .../deploy/messages/wlsdeploy_rb.properties | 2 + 5 files changed, 51 insertions(+), 38 deletions(-) diff --git a/core/src/main/java/oracle/weblogic/deploy/logging/SummaryHandler.java b/core/src/main/java/oracle/weblogic/deploy/logging/SummaryHandler.java index 93da83f141..0c62062835 100644 --- a/core/src/main/java/oracle/weblogic/deploy/logging/SummaryHandler.java +++ b/core/src/main/java/oracle/weblogic/deploy/logging/SummaryHandler.java @@ -252,8 +252,7 @@ private void summaryToDo(Handler handler, LevelHandler todoHandler) { if (todoHandler == null || todoHandler.getTotalRecords() == 0) { return; } - // Format the report to tell the user what they need to do... - // Add heading + handler.publish(getLogRecord("WLSDPLY-06031")); todoHandler.push(); } diff --git a/core/src/main/python/discover.py b/core/src/main/python/discover.py index b959fa70a2..7680754673 100644 --- a/core/src/main/python/discover.py +++ b/core/src/main/python/discover.py @@ -539,48 +539,33 @@ def __check_and_customize_model(model, model_context, aliases, credential_inject return model -def __remote_report(model_context): +def __generate_remote_report_json(model_context): _method_name = '__remote_report' - if not model_context.is_remote(): + if not model_context.is_remote() or not os.environ.has_key(_store_result_environment_variable): return - remote_map = discoverer.remote_dict - # write JSON output if the __WLSDEPLOY_STORE_RESULT__ environment variable is set. # write to the file before the stdout so any logging messages come first. - if os.environ.has_key(_store_result_environment_variable): - store_path = os.environ.get(_store_result_environment_variable) - __logger.info('WLSDPLY-06034', store_path, class_name=_class_name, method_name=_method_name) - missing_archive_entries = [] - for key in remote_map: - archive_map = remote_map[key] - missing_archive_entries.append({ - 'sourceFile': key, - 'path': archive_map[discoverer.REMOTE_ARCHIVE_PATH], - 'type': archive_map[discoverer.REMOTE_TYPE] - }) - result_root = PyOrderedDict() - result_root['missingArchiveEntries'] = missing_archive_entries - try: - json_translator.PythonToJson(result_root).write_to_json_file(store_path) - except JsonException, ex: - __logger.warning('WLSDPLY-06035', _store_result_environment_variable, ex.getLocalizedMessage(), - class_name=_class_name, method_name=_method_name) - - # write to stdout - print('') - if len(remote_map) == 0: - message = exception_helper.get_message('WLSDPLY-06030') - else: - message = exception_helper.get_message('WLSDPLY-06031') - print(message) - print('') + remote_map = discoverer.remote_dict + + store_path = os.environ.get(_store_result_environment_variable) + __logger.info('WLSDPLY-06034', store_path, class_name=_class_name, method_name=_method_name) + missing_archive_entries = [] for key in remote_map: - other_map = remote_map[key] - wls_archive = other_map[discoverer.REMOTE_ARCHIVE_PATH] - print(key, ' ', wls_archive) - print('') + archive_map = remote_map[key] + missing_archive_entries.append({ + 'sourceFile': key, + 'path': archive_map[discoverer.REMOTE_ARCHIVE_PATH], + 'type': archive_map[discoverer.REMOTE_TYPE] + }) + result_root = PyOrderedDict() + result_root['missingArchiveEntries'] = missing_archive_entries + try: + json_translator.PythonToJson(result_root).write_to_json_file(store_path) + except JsonException, ex: + __logger.warning('WLSDPLY-06035', _store_result_environment_variable, ex.getLocalizedMessage(), + class_name=_class_name, method_name=_method_name) def main(model_context): @@ -623,7 +608,7 @@ def main(model_context): model = __check_and_customize_model(model, model_context, aliases, credential_injector, extra_tokens) - __remote_report(model_context) + __generate_remote_report_json(model_context) except DiscoverException, ex: __logger.severe('WLSDPLY-06011', _program_name, model_context.get_domain_name(), model_context.get_domain_home(), ex.getLocalizedMessage(), diff --git a/core/src/main/python/wlsdeploy/logging/platform_logger.py b/core/src/main/python/wlsdeploy/logging/platform_logger.py index e8b8725cdf..4b6c9522fc 100644 --- a/core/src/main/python/wlsdeploy/logging/platform_logger.py +++ b/core/src/main/python/wlsdeploy/logging/platform_logger.py @@ -12,6 +12,8 @@ import java.util.logging.LogRecord as JLogRecord import oracle.weblogic.deploy.logging.DeprecationLevel as DeprecationLevel +import oracle.weblogic.deploy.logging.NotificationLevel as NotificationLevel +import oracle.weblogic.deploy.logging.ToDoLevel as ToDoLevel import wlsdeploy.exception.exception_helper as exception_helper import wlsdeploy.util.unicode_helper as str_helper @@ -58,6 +60,12 @@ def is_config_enabled(self): """ return self.logger.isLoggable(JLevel.CONFIG) + def is_todo_enabled(self): + return self.logger.isLoggable(ToDoLevel.TODO) + + def is_notification_enabled(self): + return self.logger.isLoggable(NotificationLevel.NOTIFICATION) + def is_deprecation_enabled(self): return self.logger.isLoggable(DeprecationLevel.DEPRECATION) @@ -124,6 +132,20 @@ def config(self, message, *args, **kwargs): record = self._get_log_record(JLevel.CONFIG, clazz, method, message, error, *args) self.logger.log(record) + def todo(self, message, *args, **kwargs): + method = kwargs.pop('method_name', None) + clazz = kwargs.pop('class_name', None) + error = kwargs.pop('error', None) + record = self._get_log_record(ToDoLevel.TODO, clazz, method, message, error, *args) + self.logger.log(record) + + def notification(self, message, *args, **kwargs): + method = kwargs.pop('method_name', None) + clazz = kwargs.pop('class_name', None) + error = kwargs.pop('error', None) + record = self._get_log_record(NotificationLevel.NOTIFICATION, clazz, method, message, error, *args) + self.logger.log(record) + def deprecation(self, message, *args, **kwargs): method = kwargs.pop('method_name', None) clazz = kwargs.pop('class_name', None) diff --git a/core/src/main/python/wlsdeploy/tool/discover/discoverer.py b/core/src/main/python/wlsdeploy/tool/discover/discoverer.py index 7cb8d11a7e..7e4b77daca 100644 --- a/core/src/main/python/wlsdeploy/tool/discover/discoverer.py +++ b/core/src/main/python/wlsdeploy/tool/discover/discoverer.py @@ -75,6 +75,11 @@ def add_to_remote_map(self, local_name, archive_name, file_type): remote_dict[local_name][REMOTE_TYPE] = file_type remote_dict[local_name][REMOTE_ARCHIVE_PATH] = archive_name + if file_type == 'FILE_STORE' or file_type == 'COHERENCE_PERSISTENCE_DIR': + _logger.todo('WLSDPLY-06042', file_type, archive_name) + else: + _logger.todo('WLSDPLY-06041', file_type, local_name, archive_name) + def discover_domain_mbean(self, model_top_folder_name): """ Discover the domain specific MBean and its configuration attributes. diff --git a/core/src/main/resources/oracle/weblogic/deploy/messages/wlsdeploy_rb.properties b/core/src/main/resources/oracle/weblogic/deploy/messages/wlsdeploy_rb.properties index 4ee2dc85f5..f47b2de242 100644 --- a/core/src/main/resources/oracle/weblogic/deploy/messages/wlsdeploy_rb.properties +++ b/core/src/main/resources/oracle/weblogic/deploy/messages/wlsdeploy_rb.properties @@ -633,6 +633,8 @@ WLSDPLY-06037=Target directory for model file argument {0} does not exist WLSDPLY-06038=Unable to determine if secure mode is enabled for the domain: {0} WLSDPLY-06039=This model was created using the WebLogic Deploy Tooling {0} {1} tool WLSDPLY-06040=running in {0} mode against a domain using WebLogic Server {1}. +WLSDPLY-06041=Please collect the {0} from the remote file system location {1} and place it into the archive file at {2}. +WLSDPLY-06042=Please create the {0} in the archive file at {1}. # discoverer.py WLSDPLY-06100=Find attributes at location {0}