From ed205880ef102e0dea1f811a8ab2fe8963d52b6b Mon Sep 17 00:00:00 2001 From: yma Date: Fri, 22 Mar 2019 00:33:06 +0800 Subject: [PATCH 1/3] Add configurable envars under mdc logging --- .../indy/conf/IndyLoggingConfig.java | 164 ++++++++++++++++++ core/src/main/conf/conf.d/logging.conf | 5 + core/src/main/resources/default-logging.conf | 5 + .../indy/core/conf/IndyLoggingConfigTest.java | 54 ++++++ .../indy/bind/jaxrs/MDCManager.java | 24 +++ .../bind/jaxrs/RequestContextConstants.java | 2 + .../bind/jaxrs/ResourceManagementFilter.java | 2 + 7 files changed, 256 insertions(+) create mode 100644 api/src/main/java/org/commonjava/indy/conf/IndyLoggingConfig.java create mode 100644 core/src/main/conf/conf.d/logging.conf create mode 100644 core/src/main/resources/default-logging.conf create mode 100644 core/src/test/java/org/commonjava/indy/core/conf/IndyLoggingConfigTest.java diff --git a/api/src/main/java/org/commonjava/indy/conf/IndyLoggingConfig.java b/api/src/main/java/org/commonjava/indy/conf/IndyLoggingConfig.java new file mode 100644 index 0000000000..d9f6c5fbb8 --- /dev/null +++ b/api/src/main/java/org/commonjava/indy/conf/IndyLoggingConfig.java @@ -0,0 +1,164 @@ +/** + * Copyright (C) 2011-2018 Red Hat, Inc. (https://github.com/Commonjava/indy) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.commonjava.indy.conf; + +import org.commonjava.web.config.ConfigurationException; +import org.commonjava.web.config.annotation.ConfigName; +import org.commonjava.web.config.annotation.SectionName; +import org.commonjava.web.config.section.MapSectionListener; + +import javax.enterprise.context.ApplicationScoped; +import java.io.File; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by yma on 2019/3/19. + */ + +@ApplicationScoped +@SectionName( IndyLoggingConfig.SECTION_NAME ) +public class IndyLoggingConfig + extends MapSectionListener + implements IndyConfigInfo +{ + + public static final String SECTION_NAME = "logging"; + + public static final String HOST_NAME_KEY = "HOSTNAME"; + + public static final String BUILD_COMMIT_KEY = "OPENSHIFT_BUILD_COMMIT"; + + public static final String BUILD_NAME_KEY = "OPENSHIFT_BUILD_NAME"; + + public static final String BUILD_NAMESPACE_KEY = "OPENSHIFT_BUILD_NAMESPACE"; + + private String hostname; + + private String openshiftBuildCommit; + + private String openshiftBuildName; + + private String openshiftBuildNamespace; + + public IndyLoggingConfig() + { + } + + @Override + public String getDefaultConfigFileName() + { + return new File( IndyConfigInfo.CONF_INCLUDES_DIR, "logging.conf" ).getPath(); + } + + @Override + public InputStream getDefaultConfig() + { + return Thread.currentThread().getContextClassLoader().getResourceAsStream( "default-logging.conf" ); + } + + @Override + public synchronized void parameter( final String name, final String value ) + throws ConfigurationException + { + switch ( name ) + { + case HOST_NAME_KEY: + { + this.hostname = value; + break; + } + case BUILD_COMMIT_KEY: + { + this.openshiftBuildCommit = value; + break; + } + case BUILD_NAME_KEY: + { + this.openshiftBuildName = value; + break; + } + case BUILD_NAMESPACE_KEY: + { + this.openshiftBuildNamespace = value; + break; + } + default: + { + throw new ConfigurationException( + "Invalid value: '{}' for parameter: '{}', they are not accepted for section: '{}'.", value, + name, SECTION_NAME ); + } + + } + } + + public String getHostname() + { + return hostname == null ? System.getenv( HOST_NAME_KEY ) : hostname; + } + + @ConfigName( HOST_NAME_KEY ) + public void setHostname( String host ) + { + this.hostname = host; + } + + public String getOpenshiftBuildCommit() + { + return openshiftBuildCommit == null ? System.getenv( BUILD_COMMIT_KEY ) : openshiftBuildCommit; + } + + @ConfigName( BUILD_COMMIT_KEY ) + public void setOpenshiftBuildCommit( String buildCommit ) + { + this.openshiftBuildCommit = buildCommit; + } + + public String getOpenshiftBuildName() + { + return openshiftBuildName == null ? System.getenv( BUILD_NAME_KEY ) : openshiftBuildName; + } + + @ConfigName( BUILD_NAME_KEY ) + public void setOpenshiftBuildName( String buildName ) + { + this.openshiftBuildName = buildName; + } + + public String getOpenshiftBuildNamespace() + { + return openshiftBuildNamespace == null ? System.getenv( BUILD_NAMESPACE_KEY ) : openshiftBuildNamespace; + } + + @ConfigName( BUILD_NAMESPACE_KEY ) + public void setOpenshiftBuildNamespace( String buildNamespace ) + { + this.openshiftBuildNamespace = buildNamespace; + } + + public Map getEnvars() + { + Map result = new HashMap<>(); + result.put( HOST_NAME_KEY, getHostname() ); + result.put( BUILD_COMMIT_KEY, getOpenshiftBuildCommit() ); + result.put( BUILD_NAME_KEY, getOpenshiftBuildName() ); + result.put( BUILD_NAMESPACE_KEY, getOpenshiftBuildNamespace() ); + return result; + } + +} diff --git a/core/src/main/conf/conf.d/logging.conf b/core/src/main/conf/conf.d/logging.conf new file mode 100644 index 0000000000..a084849fd2 --- /dev/null +++ b/core/src/main/conf/conf.d/logging.conf @@ -0,0 +1,5 @@ +[logging] +HOSTNAME=indy-120-vhxrk +OPENSHIFT_BUILD_COMMIT=6c17716d024f360164e9461b783da65212fb54b3 +OPENSHIFT_BUILD_NAME=indy-100 +OPENSHIFT_BUILD_NAMESPACE=newcastle \ No newline at end of file diff --git a/core/src/main/resources/default-logging.conf b/core/src/main/resources/default-logging.conf new file mode 100644 index 0000000000..a084849fd2 --- /dev/null +++ b/core/src/main/resources/default-logging.conf @@ -0,0 +1,5 @@ +[logging] +HOSTNAME=indy-120-vhxrk +OPENSHIFT_BUILD_COMMIT=6c17716d024f360164e9461b783da65212fb54b3 +OPENSHIFT_BUILD_NAME=indy-100 +OPENSHIFT_BUILD_NAMESPACE=newcastle \ No newline at end of file diff --git a/core/src/test/java/org/commonjava/indy/core/conf/IndyLoggingConfigTest.java b/core/src/test/java/org/commonjava/indy/core/conf/IndyLoggingConfigTest.java new file mode 100644 index 0000000000..fe10143a4d --- /dev/null +++ b/core/src/test/java/org/commonjava/indy/core/conf/IndyLoggingConfigTest.java @@ -0,0 +1,54 @@ +/** + * Copyright (C) 2011-2018 Red Hat, Inc. (https://github.com/Commonjava/indy) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.commonjava.indy.core.conf; + +import org.commonjava.indy.conf.IndyLoggingConfig; +import org.commonjava.indy.test.utils.WeldJUnit4Runner; +import org.commonjava.web.config.ConfigUtils; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.enterprise.inject.Instance; +import javax.inject.Inject; +import java.util.ArrayList; +import java.util.List; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertThat; + +/** + * Created by yma on 2019/3/21. + */ +@RunWith( WeldJUnit4Runner.class ) +public class IndyLoggingConfigTest +{ + @Inject + private Instance instance; + + @Test + public void weldInjection_IterateIndyLoggingConfigurators() + { + List sections = new ArrayList<>(); + instance.iterator().forEachRemaining( ( instance)->{ + String section = ConfigUtils.getSectionName( instance ); + System.out.printf( "Got instance: %s with section: %s\n", instance, section ); + sections.add( section ); + } ); + + System.out.println(sections); + assertThat( sections.contains( IndyLoggingConfig.SECTION_NAME ), equalTo( true ) ); + } +} diff --git a/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/MDCManager.java b/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/MDCManager.java index 650a4a657e..18e5aebe4d 100644 --- a/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/MDCManager.java +++ b/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/MDCManager.java @@ -15,9 +15,12 @@ */ package org.commonjava.indy.bind.jaxrs; +import com.fasterxml.jackson.core.JsonProcessingException; import org.apache.http.Header; import org.apache.http.HttpRequest; import org.commonjava.indy.conf.IndyConfiguration; +import org.commonjava.indy.conf.IndyLoggingConfig; +import org.commonjava.indy.model.core.io.IndyObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; @@ -35,6 +38,7 @@ import static org.commonjava.indy.bind.jaxrs.RequestContextConstants.CLIENT_ADDR; import static org.commonjava.indy.bind.jaxrs.RequestContextConstants.COMPONENT_ID; +import static org.commonjava.indy.bind.jaxrs.RequestContextConstants.ENVIRONMENT; import static org.commonjava.indy.bind.jaxrs.RequestContextConstants.EXTERNAL_ID; import static org.commonjava.indy.bind.jaxrs.RequestContextConstants.INTERNAL_ID; import static org.commonjava.indy.bind.jaxrs.RequestContextConstants.PREFERRED_ID; @@ -47,6 +51,12 @@ public class MDCManager @Inject private IndyConfiguration config; + @Inject + private IndyLoggingConfig loggingConfig; + + @Inject + private IndyObjectMapper objectMapper; + public MDCManager() {} public void clear() @@ -114,4 +124,18 @@ public void putExtraHeaders( HttpRequest httpRequest ) } } ); } + + public void putEnvironment() + { + objectMapper = new IndyObjectMapper( true ); + try + { + MDC.put( ENVIRONMENT, objectMapper.writeValueAsString( loggingConfig.getEnvars() ) ); + } + catch ( JsonProcessingException e ) + { + MDC.put( ENVIRONMENT, "{error: \"Envars could not be processed by Jackson.\"}"); + logger.error( String.format( "Failed to create environment mdc. Reason: %s", e.getMessage() ), e ); + } + } } diff --git a/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/RequestContextConstants.java b/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/RequestContextConstants.java index d9f17ac0e1..33e6985c15 100644 --- a/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/RequestContextConstants.java +++ b/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/RequestContextConstants.java @@ -61,4 +61,6 @@ public class RequestContextConstants @Thread @MDC public static final String PREFERRED_ID = "preferred-id"; + @Thread @MDC + public static final String ENVIRONMENT = "environment"; } diff --git a/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/ResourceManagementFilter.java b/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/ResourceManagementFilter.java index 068fc339d8..a879bdfa84 100644 --- a/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/ResourceManagementFilter.java +++ b/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/ResourceManagementFilter.java @@ -132,6 +132,8 @@ public void doFilter( final ServletRequest request, final ServletResponse respon mdcManager.putExtraHeaders( hsr ); + mdcManager.putEnvironment(); + logger.debug( "START request: {} (from: {})", tn, clientAddr ); Thread.currentThread().setName( tn ); From e9610c80d19a0771deb58435b0b89e5d2da21692 Mon Sep 17 00:00:00 2001 From: yma Date: Fri, 22 Mar 2019 18:55:23 +0800 Subject: [PATCH 2/3] ADD static SYSTEM_ OPENSHIFT ENV --- .../commonjava/indy/conf/IndyLoggingConfig.java | 16 ++++++++++++---- .../commonjava/indy/bind/jaxrs/MDCManager.java | 1 - 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/org/commonjava/indy/conf/IndyLoggingConfig.java b/api/src/main/java/org/commonjava/indy/conf/IndyLoggingConfig.java index d9f6c5fbb8..42d3ec73f8 100644 --- a/api/src/main/java/org/commonjava/indy/conf/IndyLoggingConfig.java +++ b/api/src/main/java/org/commonjava/indy/conf/IndyLoggingConfig.java @@ -47,6 +47,14 @@ public class IndyLoggingConfig public static final String BUILD_NAMESPACE_KEY = "OPENSHIFT_BUILD_NAMESPACE"; + public static final String SYSTEM_HOST_NAME = System.getenv( HOST_NAME_KEY ); + + public static final String SYSTEM_BUILD_COMMIT = System.getenv( BUILD_COMMIT_KEY ); + + public static final String SYSTEM_BUILD_NAME = System.getenv( BUILD_NAME_KEY ); + + public static final String SYSTEM_BUILD_NAMESPACE = System.getenv( BUILD_NAMESPACE_KEY ); + private String hostname; private String openshiftBuildCommit; @@ -109,7 +117,7 @@ public synchronized void parameter( final String name, final String value ) public String getHostname() { - return hostname == null ? System.getenv( HOST_NAME_KEY ) : hostname; + return hostname == null ? SYSTEM_HOST_NAME : hostname; } @ConfigName( HOST_NAME_KEY ) @@ -120,7 +128,7 @@ public void setHostname( String host ) public String getOpenshiftBuildCommit() { - return openshiftBuildCommit == null ? System.getenv( BUILD_COMMIT_KEY ) : openshiftBuildCommit; + return openshiftBuildCommit == null ? SYSTEM_BUILD_COMMIT : openshiftBuildCommit; } @ConfigName( BUILD_COMMIT_KEY ) @@ -131,7 +139,7 @@ public void setOpenshiftBuildCommit( String buildCommit ) public String getOpenshiftBuildName() { - return openshiftBuildName == null ? System.getenv( BUILD_NAME_KEY ) : openshiftBuildName; + return openshiftBuildName == null ? SYSTEM_BUILD_NAME : openshiftBuildName; } @ConfigName( BUILD_NAME_KEY ) @@ -142,7 +150,7 @@ public void setOpenshiftBuildName( String buildName ) public String getOpenshiftBuildNamespace() { - return openshiftBuildNamespace == null ? System.getenv( BUILD_NAMESPACE_KEY ) : openshiftBuildNamespace; + return openshiftBuildNamespace == null ? SYSTEM_BUILD_NAMESPACE : openshiftBuildNamespace; } @ConfigName( BUILD_NAMESPACE_KEY ) diff --git a/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/MDCManager.java b/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/MDCManager.java index 18e5aebe4d..2468bdd82a 100644 --- a/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/MDCManager.java +++ b/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/MDCManager.java @@ -127,7 +127,6 @@ public void putExtraHeaders( HttpRequest httpRequest ) public void putEnvironment() { - objectMapper = new IndyObjectMapper( true ); try { MDC.put( ENVIRONMENT, objectMapper.writeValueAsString( loggingConfig.getEnvars() ) ); From 87444a7cd1732592d8c696002db2c95f48022086 Mon Sep 17 00:00:00 2001 From: yma Date: Tue, 26 Mar 2019 20:16:50 +0800 Subject: [PATCH 3/3] EnvironmentConfig refactor, make it focusing on variable keys extracting, add MDC entry by JsonLayout extender --- .../indy/conf/EnvironmentConfig.java | 97 ++++++++++ .../indy/conf/IndyLoggingConfig.java | 172 ------------------ core/src/main/conf/conf.d/environment.conf | 5 + core/src/main/conf/conf.d/logging.conf | 5 - .../main/resources/default-environment.conf | 5 + core/src/main/resources/default-logging.conf | 5 - ...igTest.java => EnvironmentConfigTest.java} | 8 +- .../indy/bind/jaxrs/CustomJsonLayout.java | 61 +++++++ .../indy/bind/jaxrs/MDCManager.java | 22 +-- .../bind/jaxrs/ResourceManagementFilter.java | 2 - 10 files changed, 173 insertions(+), 209 deletions(-) create mode 100644 api/src/main/java/org/commonjava/indy/conf/EnvironmentConfig.java delete mode 100644 api/src/main/java/org/commonjava/indy/conf/IndyLoggingConfig.java create mode 100644 core/src/main/conf/conf.d/environment.conf delete mode 100644 core/src/main/conf/conf.d/logging.conf create mode 100644 core/src/main/resources/default-environment.conf delete mode 100644 core/src/main/resources/default-logging.conf rename core/src/test/java/org/commonjava/indy/core/conf/{IndyLoggingConfigTest.java => EnvironmentConfigTest.java} (89%) create mode 100644 subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/CustomJsonLayout.java diff --git a/api/src/main/java/org/commonjava/indy/conf/EnvironmentConfig.java b/api/src/main/java/org/commonjava/indy/conf/EnvironmentConfig.java new file mode 100644 index 0000000000..cafacaf9ae --- /dev/null +++ b/api/src/main/java/org/commonjava/indy/conf/EnvironmentConfig.java @@ -0,0 +1,97 @@ +/** + * Copyright (C) 2011-2018 Red Hat, Inc. (https://github.com/Commonjava/indy) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.commonjava.indy.conf; + +import org.commonjava.web.config.ConfigurationException; +import org.commonjava.web.config.annotation.SectionName; +import org.commonjava.web.config.section.MapSectionListener; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.enterprise.context.ApplicationScoped; +import java.io.File; +import java.io.InputStream; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by yma on 2019/3/19. + */ + +@ApplicationScoped +@SectionName( EnvironmentConfig.SECTION_NAME ) +public class EnvironmentConfig + extends MapSectionListener + implements IndyConfigInfo +{ + public static final String SECTION_NAME = "environment"; + + public static final String ENV_PREFIX = "mdc.env"; + + public static final String HOSTNAME = "HOSTNAME"; + + public static final String UNKNOWN = "UNKNOWN"; + + private final Logger logger = LoggerFactory.getLogger( getClass() ); + + private Map envars = new HashMap<>(); + + public EnvironmentConfig() + { + } + + @Override + public String getDefaultConfigFileName() + { + return new File( IndyConfigInfo.CONF_INCLUDES_DIR, "environment.conf" ).getPath(); + } + + @Override + public InputStream getDefaultConfig() + { + return Thread.currentThread().getContextClassLoader().getResourceAsStream( "default-environment.conf" ); + } + + @Override + public synchronized void parameter( final String name, final String value ) + throws ConfigurationException + { + if ( name.startsWith( ENV_PREFIX ) ) + { + String envKey = name.substring( ENV_PREFIX.length() ); + String enValue = System.getenv( envKey ); + if ( envKey.equals( HOSTNAME ) && enValue == null ) + { + try + { + enValue = InetAddress.getLocalHost().getHostName(); + } + catch ( UnknownHostException e ) + { + logger.error( String.format( "Unknown host. Reason: %s", e.getMessage() ), e ); + } + } + envars.put( value, enValue == null ? UNKNOWN : enValue ); + } + } + + public Map getEnvars() + { + return envars; + } +} diff --git a/api/src/main/java/org/commonjava/indy/conf/IndyLoggingConfig.java b/api/src/main/java/org/commonjava/indy/conf/IndyLoggingConfig.java deleted file mode 100644 index 42d3ec73f8..0000000000 --- a/api/src/main/java/org/commonjava/indy/conf/IndyLoggingConfig.java +++ /dev/null @@ -1,172 +0,0 @@ -/** - * Copyright (C) 2011-2018 Red Hat, Inc. (https://github.com/Commonjava/indy) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.commonjava.indy.conf; - -import org.commonjava.web.config.ConfigurationException; -import org.commonjava.web.config.annotation.ConfigName; -import org.commonjava.web.config.annotation.SectionName; -import org.commonjava.web.config.section.MapSectionListener; - -import javax.enterprise.context.ApplicationScoped; -import java.io.File; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; - -/** - * Created by yma on 2019/3/19. - */ - -@ApplicationScoped -@SectionName( IndyLoggingConfig.SECTION_NAME ) -public class IndyLoggingConfig - extends MapSectionListener - implements IndyConfigInfo -{ - - public static final String SECTION_NAME = "logging"; - - public static final String HOST_NAME_KEY = "HOSTNAME"; - - public static final String BUILD_COMMIT_KEY = "OPENSHIFT_BUILD_COMMIT"; - - public static final String BUILD_NAME_KEY = "OPENSHIFT_BUILD_NAME"; - - public static final String BUILD_NAMESPACE_KEY = "OPENSHIFT_BUILD_NAMESPACE"; - - public static final String SYSTEM_HOST_NAME = System.getenv( HOST_NAME_KEY ); - - public static final String SYSTEM_BUILD_COMMIT = System.getenv( BUILD_COMMIT_KEY ); - - public static final String SYSTEM_BUILD_NAME = System.getenv( BUILD_NAME_KEY ); - - public static final String SYSTEM_BUILD_NAMESPACE = System.getenv( BUILD_NAMESPACE_KEY ); - - private String hostname; - - private String openshiftBuildCommit; - - private String openshiftBuildName; - - private String openshiftBuildNamespace; - - public IndyLoggingConfig() - { - } - - @Override - public String getDefaultConfigFileName() - { - return new File( IndyConfigInfo.CONF_INCLUDES_DIR, "logging.conf" ).getPath(); - } - - @Override - public InputStream getDefaultConfig() - { - return Thread.currentThread().getContextClassLoader().getResourceAsStream( "default-logging.conf" ); - } - - @Override - public synchronized void parameter( final String name, final String value ) - throws ConfigurationException - { - switch ( name ) - { - case HOST_NAME_KEY: - { - this.hostname = value; - break; - } - case BUILD_COMMIT_KEY: - { - this.openshiftBuildCommit = value; - break; - } - case BUILD_NAME_KEY: - { - this.openshiftBuildName = value; - break; - } - case BUILD_NAMESPACE_KEY: - { - this.openshiftBuildNamespace = value; - break; - } - default: - { - throw new ConfigurationException( - "Invalid value: '{}' for parameter: '{}', they are not accepted for section: '{}'.", value, - name, SECTION_NAME ); - } - - } - } - - public String getHostname() - { - return hostname == null ? SYSTEM_HOST_NAME : hostname; - } - - @ConfigName( HOST_NAME_KEY ) - public void setHostname( String host ) - { - this.hostname = host; - } - - public String getOpenshiftBuildCommit() - { - return openshiftBuildCommit == null ? SYSTEM_BUILD_COMMIT : openshiftBuildCommit; - } - - @ConfigName( BUILD_COMMIT_KEY ) - public void setOpenshiftBuildCommit( String buildCommit ) - { - this.openshiftBuildCommit = buildCommit; - } - - public String getOpenshiftBuildName() - { - return openshiftBuildName == null ? SYSTEM_BUILD_NAME : openshiftBuildName; - } - - @ConfigName( BUILD_NAME_KEY ) - public void setOpenshiftBuildName( String buildName ) - { - this.openshiftBuildName = buildName; - } - - public String getOpenshiftBuildNamespace() - { - return openshiftBuildNamespace == null ? SYSTEM_BUILD_NAMESPACE : openshiftBuildNamespace; - } - - @ConfigName( BUILD_NAMESPACE_KEY ) - public void setOpenshiftBuildNamespace( String buildNamespace ) - { - this.openshiftBuildNamespace = buildNamespace; - } - - public Map getEnvars() - { - Map result = new HashMap<>(); - result.put( HOST_NAME_KEY, getHostname() ); - result.put( BUILD_COMMIT_KEY, getOpenshiftBuildCommit() ); - result.put( BUILD_NAME_KEY, getOpenshiftBuildName() ); - result.put( BUILD_NAMESPACE_KEY, getOpenshiftBuildNamespace() ); - return result; - } - -} diff --git a/core/src/main/conf/conf.d/environment.conf b/core/src/main/conf/conf.d/environment.conf new file mode 100644 index 0000000000..7c64d72b46 --- /dev/null +++ b/core/src/main/conf/conf.d/environment.conf @@ -0,0 +1,5 @@ +[environment] +mdc.env.OPENSHIFT_BUILD_NAMESPACE = NAMESPACE +mdc.env.OPENSHIFT_BUILD_NAME = BUILD_NAME +mdc.env.OPENSHIFT_BUILD_COMMIT = BUILD_COMMIT +mdc.env.HOSTNAME = HOSTNAME \ No newline at end of file diff --git a/core/src/main/conf/conf.d/logging.conf b/core/src/main/conf/conf.d/logging.conf deleted file mode 100644 index a084849fd2..0000000000 --- a/core/src/main/conf/conf.d/logging.conf +++ /dev/null @@ -1,5 +0,0 @@ -[logging] -HOSTNAME=indy-120-vhxrk -OPENSHIFT_BUILD_COMMIT=6c17716d024f360164e9461b783da65212fb54b3 -OPENSHIFT_BUILD_NAME=indy-100 -OPENSHIFT_BUILD_NAMESPACE=newcastle \ No newline at end of file diff --git a/core/src/main/resources/default-environment.conf b/core/src/main/resources/default-environment.conf new file mode 100644 index 0000000000..7c64d72b46 --- /dev/null +++ b/core/src/main/resources/default-environment.conf @@ -0,0 +1,5 @@ +[environment] +mdc.env.OPENSHIFT_BUILD_NAMESPACE = NAMESPACE +mdc.env.OPENSHIFT_BUILD_NAME = BUILD_NAME +mdc.env.OPENSHIFT_BUILD_COMMIT = BUILD_COMMIT +mdc.env.HOSTNAME = HOSTNAME \ No newline at end of file diff --git a/core/src/main/resources/default-logging.conf b/core/src/main/resources/default-logging.conf deleted file mode 100644 index a084849fd2..0000000000 --- a/core/src/main/resources/default-logging.conf +++ /dev/null @@ -1,5 +0,0 @@ -[logging] -HOSTNAME=indy-120-vhxrk -OPENSHIFT_BUILD_COMMIT=6c17716d024f360164e9461b783da65212fb54b3 -OPENSHIFT_BUILD_NAME=indy-100 -OPENSHIFT_BUILD_NAMESPACE=newcastle \ No newline at end of file diff --git a/core/src/test/java/org/commonjava/indy/core/conf/IndyLoggingConfigTest.java b/core/src/test/java/org/commonjava/indy/core/conf/EnvironmentConfigTest.java similarity index 89% rename from core/src/test/java/org/commonjava/indy/core/conf/IndyLoggingConfigTest.java rename to core/src/test/java/org/commonjava/indy/core/conf/EnvironmentConfigTest.java index fe10143a4d..d41e25499a 100644 --- a/core/src/test/java/org/commonjava/indy/core/conf/IndyLoggingConfigTest.java +++ b/core/src/test/java/org/commonjava/indy/core/conf/EnvironmentConfigTest.java @@ -15,7 +15,7 @@ */ package org.commonjava.indy.core.conf; -import org.commonjava.indy.conf.IndyLoggingConfig; +import org.commonjava.indy.conf.EnvironmentConfig; import org.commonjava.indy.test.utils.WeldJUnit4Runner; import org.commonjava.web.config.ConfigUtils; import org.junit.Test; @@ -33,10 +33,10 @@ * Created by yma on 2019/3/21. */ @RunWith( WeldJUnit4Runner.class ) -public class IndyLoggingConfigTest +public class EnvironmentConfigTest { @Inject - private Instance instance; + private Instance instance; @Test public void weldInjection_IterateIndyLoggingConfigurators() @@ -49,6 +49,6 @@ public void weldInjection_IterateIndyLoggingConfigurators() } ); System.out.println(sections); - assertThat( sections.contains( IndyLoggingConfig.SECTION_NAME ), equalTo( true ) ); + assertThat( sections.contains( EnvironmentConfig.SECTION_NAME ), equalTo( true ) ); } } diff --git a/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/CustomJsonLayout.java b/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/CustomJsonLayout.java new file mode 100644 index 0000000000..c910ab3ced --- /dev/null +++ b/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/CustomJsonLayout.java @@ -0,0 +1,61 @@ +/** + * Copyright (C) 2011-2018 Red Hat, Inc. (https://github.com/Commonjava/indy) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.commonjava.indy.bind.jaxrs; + +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.contrib.json.classic.JsonLayout; +import com.fasterxml.jackson.core.JsonProcessingException; +import org.commonjava.indy.conf.EnvironmentConfig; +import org.commonjava.indy.model.core.io.IndyObjectMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.enterprise.inject.spi.CDI; +import java.util.Map; + +import static org.commonjava.indy.bind.jaxrs.RequestContextConstants.ENVIRONMENT; + +/** + * Created by yma on 2019/3/26. + */ +public class CustomJsonLayout + extends JsonLayout +{ + private final Logger logger = LoggerFactory.getLogger( getClass() ); + + @Override + protected void addCustomDataToJsonMap( Map map, ILoggingEvent iLoggingEvent ) + { + IndyObjectMapper objectMapper = new IndyObjectMapper( true ); + super.addCustomDataToJsonMap( map, iLoggingEvent ); + + if ( !iLoggingEvent.getMDCPropertyMap().isEmpty() ) + { + Map mdcs = (Map) map.get( MDC_ATTR_NAME ); + try + { + Map envars = CDI.current().select( EnvironmentConfig.class ).get().getEnvars(); + mdcs.put( ENVIRONMENT, objectMapper.writeValueAsString( envars ) ); + } + catch ( JsonProcessingException e ) + { + mdcs.put( ENVIRONMENT, "{error: \"Envars could not be processed by Jackson.\"}" ); + logger.error( String.format( "Failed to create environment mdc. Reason: %s", e.getMessage() ), e ); + } + map.put( MDC_ATTR_NAME, mdcs ); + } + } +} diff --git a/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/MDCManager.java b/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/MDCManager.java index 2468bdd82a..0f231dc542 100644 --- a/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/MDCManager.java +++ b/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/MDCManager.java @@ -19,7 +19,7 @@ import org.apache.http.Header; import org.apache.http.HttpRequest; import org.commonjava.indy.conf.IndyConfiguration; -import org.commonjava.indy.conf.IndyLoggingConfig; +import org.commonjava.indy.conf.EnvironmentConfig; import org.commonjava.indy.model.core.io.IndyObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,7 +38,6 @@ import static org.commonjava.indy.bind.jaxrs.RequestContextConstants.CLIENT_ADDR; import static org.commonjava.indy.bind.jaxrs.RequestContextConstants.COMPONENT_ID; -import static org.commonjava.indy.bind.jaxrs.RequestContextConstants.ENVIRONMENT; import static org.commonjava.indy.bind.jaxrs.RequestContextConstants.EXTERNAL_ID; import static org.commonjava.indy.bind.jaxrs.RequestContextConstants.INTERNAL_ID; import static org.commonjava.indy.bind.jaxrs.RequestContextConstants.PREFERRED_ID; @@ -51,12 +50,6 @@ public class MDCManager @Inject private IndyConfiguration config; - @Inject - private IndyLoggingConfig loggingConfig; - - @Inject - private IndyObjectMapper objectMapper; - public MDCManager() {} public void clear() @@ -124,17 +117,4 @@ public void putExtraHeaders( HttpRequest httpRequest ) } } ); } - - public void putEnvironment() - { - try - { - MDC.put( ENVIRONMENT, objectMapper.writeValueAsString( loggingConfig.getEnvars() ) ); - } - catch ( JsonProcessingException e ) - { - MDC.put( ENVIRONMENT, "{error: \"Envars could not be processed by Jackson.\"}"); - logger.error( String.format( "Failed to create environment mdc. Reason: %s", e.getMessage() ), e ); - } - } } diff --git a/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/ResourceManagementFilter.java b/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/ResourceManagementFilter.java index a879bdfa84..068fc339d8 100644 --- a/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/ResourceManagementFilter.java +++ b/subsys/jaxrs/src/main/java/org/commonjava/indy/bind/jaxrs/ResourceManagementFilter.java @@ -132,8 +132,6 @@ public void doFilter( final ServletRequest request, final ServletResponse respon mdcManager.putExtraHeaders( hsr ); - mdcManager.putEnvironment(); - logger.debug( "START request: {} (from: {})", tn, clientAddr ); Thread.currentThread().setName( tn );