Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
ce9b2b82
Commit
ce9b2b82
authored
Feb 13, 2018
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Auto-configure Micrometer’s Tomcat metrics
Closes gh-11916
parent
01b1c1d9
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
212 additions
and
0 deletions
+212
-0
TomcatMetricsAutoConfiguration.java
...re/metrics/web/tomcat/TomcatMetricsAutoConfiguration.java
+74
-0
spring.factories
...utoconfigure/src/main/resources/META-INF/spring.factories
+1
-0
TomcatMetricsAutoConfigurationTests.java
...trics/web/tomcat/TomcatMetricsAutoConfigurationTests.java
+137
-0
No files found.
spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/web/tomcat/TomcatMetricsAutoConfiguration.java
0 → 100644
View file @
ce9b2b82
/*
* Copyright 2012-2018 the original author or authors.
*
* 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
.
springframework
.
boot
.
actuate
.
autoconfigure
.
metrics
.
web
.
tomcat
;
import
java.util.Collections
;
import
io.micrometer.core.instrument.binder.tomcat.TomcatMetrics
;
import
org.apache.catalina.Container
;
import
org.apache.catalina.Context
;
import
org.apache.catalina.Manager
;
import
org.springframework.boot.autoconfigure.EnableAutoConfiguration
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication
;
import
org.springframework.boot.web.context.WebServerApplicationContext
;
import
org.springframework.boot.web.embedded.tomcat.TomcatWebServer
;
import
org.springframework.boot.web.server.WebServer
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.annotation.Bean
;
/**
* {@link EnableAutoConfiguration Auto-configuration} for {@link TomcatMetrics}.
*
* @author Andy Wilkinson
* @since 2.0.0
*/
@ConditionalOnWebApplication
@ConditionalOnClass
({
TomcatMetrics
.
class
,
Manager
.
class
})
public
class
TomcatMetricsAutoConfiguration
{
@Bean
@ConditionalOnMissingBean
(
TomcatMetrics
.
class
)
public
TomcatMetrics
tomcatMetrics
(
ApplicationContext
applicationContext
)
{
Context
context
=
findContext
(
applicationContext
);
return
new
TomcatMetrics
(
context
==
null
?
null
:
context
.
getManager
(),
Collections
.
emptyList
());
}
private
Context
findContext
(
ApplicationContext
context
)
{
if
(!(
context
instanceof
WebServerApplicationContext
))
{
return
null
;
}
WebServer
webServer
=
((
WebServerApplicationContext
)
context
).
getWebServer
();
if
(!(
webServer
instanceof
TomcatWebServer
))
{
return
null
;
}
return
findContext
((
TomcatWebServer
)
webServer
);
}
private
Context
findContext
(
TomcatWebServer
webServer
)
{
for
(
Container
child
:
webServer
.
getTomcat
().
getHost
().
findChildren
())
{
if
(
child
instanceof
Context
)
{
return
(
Context
)
child
;
}
}
return
null
;
}
}
spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring.factories
View file @
ce9b2b82
...
...
@@ -52,6 +52,7 @@ org.springframework.boot.actuate.autoconfigure.metrics.integration.MetricsIntegr
org.springframework.boot.actuate.autoconfigure.metrics.web.client.RestTemplateMetricsAutoConfiguration,\
org.springframework.boot.actuate.autoconfigure.metrics.web.reactive.WebFluxMetricsAutoConfiguration,\
org.springframework.boot.actuate.autoconfigure.metrics.web.servlet.WebMvcMetricsAutoConfiguration,\
org.springframework.boot.actuate.autoconfigure.metrics.web.tomcat.TomcatMetricsAutoConfiguration,\
org.springframework.boot.actuate.autoconfigure.mongo.MongoHealthIndicatorAutoConfiguration,\
org.springframework.boot.actuate.autoconfigure.neo4j.Neo4jHealthIndicatorAutoConfiguration,\
org.springframework.boot.actuate.autoconfigure.redis.RedisHealthIndicatorAutoConfiguration,\
...
...
spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/tomcat/TomcatMetricsAutoConfigurationTests.java
0 → 100644
View file @
ce9b2b82
/*
* Copyright 2012-2018 the original author or authors.
*
* 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
.
springframework
.
boot
.
actuate
.
autoconfigure
.
metrics
.
web
.
tomcat
;
import
java.util.Collections
;
import
io.micrometer.core.instrument.binder.tomcat.TomcatMetrics
;
import
io.micrometer.core.instrument.simple.SimpleMeterRegistry
;
import
org.junit.Test
;
import
org.springframework.boot.autoconfigure.AutoConfigurations
;
import
org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner
;
import
org.springframework.boot.test.context.runner.WebApplicationContextRunner
;
import
org.springframework.boot.web.embedded.tomcat.TomcatReactiveWebServerFactory
;
import
org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory
;
import
org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext
;
import
org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.http.server.reactive.HttpHandler
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
mockito
.
Mockito
.
mock
;
/**
* Tests for {@link TomcatMetricsAutoConfiguration}.
*
* @author Andy Wilkinson
*/
public
class
TomcatMetricsAutoConfigurationTests
{
@Test
public
void
autoConfiguresTomcatMetricsWithEmbeddedServletTomcat
()
{
new
WebApplicationContextRunner
(
AnnotationConfigServletWebServerApplicationContext:
:
new
)
.
withConfiguration
(
AutoConfigurations
.
of
(
TomcatMetricsAutoConfiguration
.
class
))
.
withUserConfiguration
(
ServletWebServerConfiguration
.
class
)
.
run
((
context
)
->
{
assertThat
(
context
).
hasSingleBean
(
TomcatMetrics
.
class
);
SimpleMeterRegistry
registry
=
new
SimpleMeterRegistry
();
context
.
getBean
(
TomcatMetrics
.
class
).
bindTo
(
registry
);
assertThat
(
registry
.
find
(
"tomcat.sessions.active.max"
).
meter
())
.
isNotNull
();
assertThat
(
registry
.
find
(
"tomcat.threads.current"
).
meter
())
.
isNotNull
();
});
}
@Test
public
void
autoConfiguresTomcatMetricsWithEmbeddedReactiveTomcat
()
{
new
ReactiveWebApplicationContextRunner
(
AnnotationConfigReactiveWebServerApplicationContext:
:
new
)
.
withConfiguration
(
AutoConfigurations
.
of
(
TomcatMetricsAutoConfiguration
.
class
))
.
withUserConfiguration
(
ReactiveWebServerConfiguration
.
class
)
.
run
((
context
)
->
{
assertThat
(
context
).
hasSingleBean
(
TomcatMetrics
.
class
);
SimpleMeterRegistry
registry
=
new
SimpleMeterRegistry
();
context
.
getBean
(
TomcatMetrics
.
class
).
bindTo
(
registry
);
assertThat
(
registry
.
find
(
"tomcat.sessions.active.max"
).
meter
())
.
isNotNull
();
assertThat
(
registry
.
find
(
"tomcat.threads.current"
).
meter
())
.
isNotNull
();
});
}
@Test
public
void
autoConfiguresTomcatMetricsWithStandaloneTomcat
()
{
new
WebApplicationContextRunner
()
.
withConfiguration
(
AutoConfigurations
.
of
(
TomcatMetricsAutoConfiguration
.
class
))
.
run
((
context
)
->
assertThat
(
context
).
hasSingleBean
(
TomcatMetrics
.
class
));
}
@Test
public
void
allowsCustomTomcatMetricsToBeUsed
()
{
new
WebApplicationContextRunner
()
.
withConfiguration
(
AutoConfigurations
.
of
(
TomcatMetricsAutoConfiguration
.
class
))
.
withUserConfiguration
(
CustomTomcatMetrics
.
class
)
.
run
((
context
)
->
assertThat
(
context
).
hasSingleBean
(
TomcatMetrics
.
class
)
.
hasBean
(
"customTomcatMetrics"
));
}
@Configuration
static
class
ServletWebServerConfiguration
{
@Bean
public
TomcatServletWebServerFactory
tomcatFactory
()
{
return
new
TomcatServletWebServerFactory
(
0
);
}
}
@Configuration
static
class
ReactiveWebServerConfiguration
{
@Bean
public
TomcatReactiveWebServerFactory
tomcatFactory
()
{
return
new
TomcatReactiveWebServerFactory
(
0
);
}
@Bean
public
HttpHandler
httpHandler
()
{
return
mock
(
HttpHandler
.
class
);
}
}
@Configuration
static
class
CustomTomcatMetrics
{
@Bean
public
TomcatMetrics
customTomcatMetrics
()
{
return
new
TomcatMetrics
(
null
,
Collections
.
emptyList
());
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment