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
9c20ada9
Commit
9c20ada9
authored
Dec 01, 2016
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '1.4.x' into 1.5.x
parents
fdccd8aa
356edc72
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
65 additions
and
6 deletions
+65
-6
MetricsFilter.java
...ngframework/boot/actuate/autoconfigure/MetricsFilter.java
+4
-6
MetricFilterAutoConfigurationTests.java
...ate/autoconfigure/MetricFilterAutoConfigurationTests.java
+61
-0
No files found.
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricsFilter.java
View file @
9c20ada9
...
...
@@ -20,7 +20,6 @@ import java.io.IOException;
import
java.util.Collections
;
import
java.util.LinkedHashSet
;
import
java.util.Set
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
javax.servlet.FilterChain
;
...
...
@@ -67,7 +66,7 @@ final class MetricsFilter extends OncePerRequestFilter {
static
{
Set
<
PatternReplacer
>
replacements
=
new
LinkedHashSet
<
PatternReplacer
>();
replacements
.
add
(
new
PatternReplacer
(
"
[{}]"
,
0
,
"
-"
));
replacements
.
add
(
new
PatternReplacer
(
"
\\{(.+?)(?::.+)?\\}"
,
0
,
"-$1
-"
));
replacements
.
add
(
new
PatternReplacer
(
"**"
,
Pattern
.
LITERAL
,
"-star-star-"
));
replacements
.
add
(
new
PatternReplacer
(
"*"
,
Pattern
.
LITERAL
,
"-star-"
));
replacements
.
add
(
new
PatternReplacer
(
"/-"
,
Pattern
.
LITERAL
,
"/"
));
...
...
@@ -140,13 +139,13 @@ final class MetricsFilter extends OncePerRequestFilter {
private
void
recordMetrics
(
HttpServletRequest
request
,
String
path
,
int
status
,
long
time
)
{
String
suffix
=
getFinalStatus
(
request
,
path
,
status
);
String
suffix
=
determineMetricNameSuffix
(
request
,
path
,
status
);
submitMetrics
(
MetricsFilterSubmission
.
MERGED
,
request
,
status
,
time
,
suffix
);
submitMetrics
(
MetricsFilterSubmission
.
PER_HTTP_METHOD
,
request
,
status
,
time
,
suffix
);
}
private
String
getFinalStatus
(
HttpServletRequest
request
,
String
path
,
int
status
)
{
private
String
determineMetricNameSuffix
(
HttpServletRequest
request
,
String
path
,
int
status
)
{
Object
bestMatchingPattern
=
request
.
getAttribute
(
HandlerMapping
.
BEST_MATCHING_PATTERN_ATTRIBUTE
);
if
(
bestMatchingPattern
!=
null
)
{
...
...
@@ -242,8 +241,7 @@ final class MetricsFilter extends OncePerRequestFilter {
}
public
String
apply
(
String
input
)
{
return
this
.
pattern
.
matcher
(
input
)
.
replaceAll
(
Matcher
.
quoteReplacement
(
this
.
replacement
));
return
this
.
pattern
.
matcher
(
input
).
replaceAll
(
this
.
replacement
);
}
}
...
...
spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfigurationTests.java
View file @
9c20ada9
...
...
@@ -129,6 +129,51 @@ public class MetricFilterAutoConfigurationTests {
context
.
close
();
}
@Test
public
void
recordsHttpInteractionsWithRegexTemplateVariable
()
throws
Exception
{
AnnotationConfigApplicationContext
context
=
new
AnnotationConfigApplicationContext
(
Config
.
class
,
MetricFilterAutoConfiguration
.
class
);
Filter
filter
=
context
.
getBean
(
Filter
.
class
);
MockMvc
mvc
=
MockMvcBuilders
.
standaloneSetup
(
new
MetricFilterTestController
())
.
addFilter
(
filter
).
build
();
mvc
.
perform
(
get
(
"/templateVarRegexTest/foo"
)).
andExpect
(
status
().
isOk
());
verify
(
context
.
getBean
(
CounterService
.
class
))
.
increment
(
"status.200.templateVarRegexTest.someVariable"
);
verify
(
context
.
getBean
(
GaugeService
.
class
))
.
submit
(
eq
(
"response.templateVarRegexTest.someVariable"
),
anyDouble
());
context
.
close
();
}
@Test
public
void
recordsHttpInteractionsWithWilcardMapping
()
throws
Exception
{
AnnotationConfigApplicationContext
context
=
new
AnnotationConfigApplicationContext
(
Config
.
class
,
MetricFilterAutoConfiguration
.
class
);
Filter
filter
=
context
.
getBean
(
Filter
.
class
);
MockMvc
mvc
=
MockMvcBuilders
.
standaloneSetup
(
new
MetricFilterTestController
())
.
addFilter
(
filter
).
build
();
mvc
.
perform
(
get
(
"/wildcardMapping/foo"
)).
andExpect
(
status
().
isOk
());
verify
(
context
.
getBean
(
CounterService
.
class
))
.
increment
(
"status.200.wildcardMapping.star"
);
verify
(
context
.
getBean
(
GaugeService
.
class
))
.
submit
(
eq
(
"response.wildcardMapping.star"
),
anyDouble
());
context
.
close
();
}
@Test
public
void
recordsHttpInteractionsWithDoubleWildcardMapping
()
throws
Exception
{
AnnotationConfigApplicationContext
context
=
new
AnnotationConfigApplicationContext
(
Config
.
class
,
MetricFilterAutoConfiguration
.
class
);
Filter
filter
=
context
.
getBean
(
Filter
.
class
);
MockMvc
mvc
=
MockMvcBuilders
.
standaloneSetup
(
new
MetricFilterTestController
())
.
addFilter
(
filter
).
build
();
mvc
.
perform
(
get
(
"/doubleWildcardMapping/foo/bar/baz"
)).
andExpect
(
status
().
isOk
());
verify
(
context
.
getBean
(
CounterService
.
class
))
.
increment
(
"status.200.doubleWildcardMapping.star-star.baz"
);
verify
(
context
.
getBean
(
GaugeService
.
class
))
.
submit
(
eq
(
"response.doubleWildcardMapping.star-star.baz"
),
anyDouble
());
context
.
close
();
}
@Test
public
void
recordsKnown404HttpInteractionsAsSingleMetricWithPathAndTemplateVariable
()
throws
Exception
{
...
...
@@ -429,6 +474,22 @@ public class MetricFilterAutoConfigurationTests {
return
someVariable
;
}
@RequestMapping
(
"wildcardMapping/*"
)
public
String
testWildcardMapping
()
{
return
"wildcard"
;
}
@RequestMapping
(
"doubleWildcardMapping/**/baz"
)
public
String
testDoubleWildcardMapping
()
{
return
"doubleWildcard"
;
}
@RequestMapping
(
"templateVarRegexTest/{someVariable:[a-z]+}"
)
public
String
testTemplateVariableRegexResolution
(
@PathVariable
String
someVariable
)
{
return
someVariable
;
}
@RequestMapping
(
"knownPath/{someVariable}"
)
@ResponseStatus
(
HttpStatus
.
NOT_FOUND
)
@ResponseBody
...
...
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