Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
spring-cloud-netflix
Project
Overview
Details
Activity
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
openSource
spring-cloud-netflix
Commits
27da0bc1
Commit
27da0bc1
authored
Dec 11, 2014
by
Dave Syer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Simplify implementation of servo metrics
parent
64c447f0
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
21 additions
and
52 deletions
+21
-52
EurekaClientAutoConfiguration.java
...k/cloud/netflix/eureka/EurekaClientAutoConfiguration.java
+4
-3
ServoMetricCollector.java
...ngframework/cloud/netflix/servo/ServoMetricCollector.java
+14
-46
ServoMetricsAutoConfiguration.java
...rk/cloud/netflix/servo/ServoMetricsAutoConfiguration.java
+3
-3
No files found.
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java
View file @
27da0bc1
...
...
@@ -18,12 +18,12 @@ package org.springframework.cloud.netflix.eureka;
import
javax.annotation.PostConstruct
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.actuate.metrics.reader.MetricReader
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnExpression
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.cloud.netflix.servo.ServoMetricReader
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
...
...
@@ -69,8 +69,9 @@ public class EurekaClientAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public
EurekaHealthIndicator
eurekaHealthIndicator
(
EurekaInstanceConfig
config
)
{
return
new
EurekaHealthIndicator
(
discoveryClient
,
new
ServoMetricReader
(),
config
);
@ConditionalOnBean
(
MetricReader
.
class
)
public
EurekaHealthIndicator
eurekaHealthIndicator
(
EurekaInstanceConfig
config
,
MetricReader
metrics
)
{
return
new
EurekaHealthIndicator
(
discoveryClient
,
metrics
,
config
);
}
}
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/servo/ServoMetric
Reade
r.java
→
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/servo/ServoMetric
Collecto
r.java
View file @
27da0bc1
...
...
@@ -17,15 +17,13 @@
package
org
.
springframework
.
cloud
.
netflix
.
servo
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.TimeUnit
;
import
org.springframework.boot.actuate.metrics.Metric
;
import
org.springframework.boot.actuate.metrics.reader.MetricReader
;
import
org.springframework.boot.actuate.metrics.writer.MetricWriter
;
import
com.netflix.servo.monitor.MonitorConfig
;
import
com.netflix.servo.publish.BaseMetricObserver
;
...
...
@@ -37,23 +35,19 @@ import com.netflix.servo.publish.PollScheduler;
/**
* {@link MetricReader} implementation that registers a {@link MetricObserver} with the
* Netflix Servo library and exposes Servo metrics to the <code>/metric</code> endpoint.
* Netflix Servo library and exposes Servo metrics to the <code>/metric</code> endpoint.
*
* @author Dave Syer
* @author Christian Dupuis
*/
public
class
ServoMetric
Reader
implements
MetricReade
r
{
public
class
ServoMetric
Collecto
r
{
private
static
final
Object
monitor
=
new
Object
();
private
final
Map
<
String
,
Metric
<?>>
metrics
=
new
HashMap
<
String
,
Metric
<?>>();
public
ServoMetricReader
()
{
public
ServoMetricCollector
(
MetricWriter
metrics
)
{
List
<
MetricObserver
>
observers
=
new
ArrayList
<
MetricObserver
>();
observers
.
add
(
new
ServoMetricObserver
(
this
.
metrics
));
observers
.
add
(
new
ServoMetricObserver
(
metrics
));
PollRunnable
task
=
new
PollRunnable
(
new
MonitorRegistryMetricPoller
(),
BasicMetricFilter
.
MATCH_ALL
,
true
,
observers
);
if
(!
PollScheduler
.
getInstance
().
isStarted
())
{
PollScheduler
.
getInstance
().
start
();
}
...
...
@@ -61,58 +55,32 @@ public class ServoMetricReader implements MetricReader {
PollScheduler
.
getInstance
().
addPoller
(
task
,
5
,
TimeUnit
.
SECONDS
);
}
@Override
public
Metric
<?>
findOne
(
String
metricName
)
{
synchronized
(
monitor
)
{
return
this
.
metrics
.
get
(
metricName
);
}
}
@Override
public
Iterable
<
Metric
<?>>
findAll
()
{
synchronized
(
monitor
)
{
return
Collections
.
unmodifiableCollection
(
this
.
metrics
.
values
());
}
}
@Override
public
long
count
()
{
synchronized
(
monitor
)
{
return
this
.
metrics
.
size
();
}
}
/**
* {@link MetricObserver} to convert Servo metrics into Spring Boot {@link Metric} instances.
* {@link MetricObserver} to convert Servo metrics into Spring Boot {@link Metric}
* instances.
*/
private
static
final
class
ServoMetricObserver
extends
BaseMetricObserver
{
private
final
M
ap
<
String
,
Metric
<?>>
metrics
;
private
final
M
etricWriter
metrics
;
public
ServoMetricObserver
(
M
ap
<
String
,
Metric
<?>>
metrics
)
{
public
ServoMetricObserver
(
M
etricWriter
metrics
)
{
super
(
"spring-boot"
);
this
.
metrics
=
metrics
;
}
@Override
public
void
updateImpl
(
List
<
com
.
netflix
.
servo
.
Metric
>
servoMetrics
)
{
Map
<
String
,
Metric
<?>>
newMetrics
=
new
HashMap
<
String
,
Metric
<?>>();
for
(
com
.
netflix
.
servo
.
Metric
servoMetric
:
servoMetrics
)
{
MonitorConfig
config
=
servoMetric
.
getConfig
();
String
type
=
config
.
getTags
().
getValue
(
"type"
);
String
key
=
new
StringBuilder
(
type
).
append
(
".servo."
)
.
append
(
config
.
getName
())
.
toString
().
toLowerCase
();
String
key
=
new
StringBuilder
(
type
).
append
(
".servo."
)
.
append
(
config
.
getName
()).
toString
().
toLowerCase
();
if
(
servoMetric
.
hasNumberValue
())
{
newMetrics
.
put
(
key
,
new
Metric
<
Number
>(
key
,
servoMetric
.
getNumberValue
(),
metrics
.
set
(
new
Metric
<
Number
>(
key
,
servoMetric
.
getNumberValue
(),
new
Date
(
servoMetric
.
getTimestamp
())));
}
}
synchronized
(
monitor
)
{
this
.
metrics
.
clear
();
this
.
metrics
.
putAll
(
newMetrics
);
}
}
}
...
...
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/servo/ServoMetricsAutoConfiguration.java
View file @
27da0bc1
...
...
@@ -18,8 +18,8 @@ package org.springframework.cloud.netflix.servo;
import
org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration
;
import
org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration
;
import
org.springframework.boot.actuate.endpoint.MetricReaderPublicMetrics
;
import
org.springframework.boot.actuate.metrics.reader.MetricReader
;
import
org.springframework.boot.actuate.metrics.writer.MetricWriter
;
import
org.springframework.boot.autoconfigure.AutoConfigureAfter
;
import
org.springframework.boot.autoconfigure.AutoConfigureBefore
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnBean
;
...
...
@@ -45,7 +45,7 @@ public class ServoMetricsAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public
MetricReaderPublicMetrics
servoPublicMetrics
(
)
{
return
new
MetricReaderPublicMetrics
(
new
ServoMetricReader
()
);
public
ServoMetricCollector
servoMetricCollector
(
MetricWriter
metrics
)
{
return
new
ServoMetricCollector
(
metrics
);
}
}
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