Skip to content

Commit

Permalink
Refactor structure of advisors.yaml (apache#22958)
Browse files Browse the repository at this point in the history
  • Loading branch information
terrymanu authored Dec 18, 2022
1 parent a61343e commit 50f743f
Show file tree
Hide file tree
Showing 7 changed files with 27 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,7 @@ public final class YamlAdvisorConfiguration {

private String target;

private String instanceAdvice;

private String staticAdvice;

private String constructAdvice;
private String advice;

private Collection<YamlPointcutConfiguration> pointcuts = new LinkedList<>();
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,17 @@ public final class YamlAdvisorConfigurationSwapper {
*/
public AdvisorConfiguration swapToObject(final YamlAdvisorConfiguration yamlAdvisorConfig, final String type) {
AdvisorConfiguration result = AdvisorConfigurationRegistryFactory.getRegistry(type).getAdvisorConfiguration(yamlAdvisorConfig.getTarget());
if (null != yamlAdvisorConfig.getConstructAdvice() && !("".equals(yamlAdvisorConfig.getConstructAdvice()))) {
result.getConstructorAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.isConstructor(), yamlAdvisorConfig.getConstructAdvice()));
String[] constructPointcuts = yamlAdvisorConfig.getPointcuts().stream().filter(each -> "construct".equals(each.getType())).map(YamlPointcutConfiguration::getName).toArray(String[]::new);
if (constructPointcuts.length > 0) {
result.getConstructorAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.isConstructor(), yamlAdvisorConfig.getAdvice()));
}
String[] instanceMethodPointcuts = yamlAdvisorConfig.getPointcuts().stream().filter(each -> "instance".equals(each.getType())).map(YamlPointcutConfiguration::getName).toArray(String[]::new);
if (instanceMethodPointcuts.length > 0) {
result.getInstanceMethodAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.namedOneOf(instanceMethodPointcuts), yamlAdvisorConfig.getInstanceAdvice()));
result.getInstanceMethodAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.namedOneOf(instanceMethodPointcuts), yamlAdvisorConfig.getAdvice()));
}
String[] staticMethodPointcuts = yamlAdvisorConfig.getPointcuts().stream().filter(each -> "static".equals(each.getType())).map(YamlPointcutConfiguration::getName).toArray(String[]::new);
if (staticMethodPointcuts.length > 0) {
result.getStaticMethodAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.namedOneOf(staticMethodPointcuts), yamlAdvisorConfig.getStaticAdvice()));
result.getStaticMethodAdvisors().add(new MethodAdvisorConfiguration(ElementMatchers.namedOneOf(staticMethodPointcuts), yamlAdvisorConfig.getAdvice()));
}
return result;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,26 +41,24 @@ public void assertUnmarshal() {
List<YamlAdvisorConfiguration> actualYamlAdvisorConfigs = new ArrayList<>(actual.getAdvisors());
assertYamlAdvisorConfiguration(actualYamlAdvisorConfigs.get(0), createExpectedYamlAdvisorConfiguration("org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask",
"org.apache.shardingsphere.agent.metrics.api.advice.CommandExecutorTaskAdvice",
null, null, Arrays.asList(createExpectedYamlPointcutConfiguration("run", "instance"), createExpectedYamlPointcutConfiguration("processException", "instance"))));
Arrays.asList(createExpectedYamlPointcutConfiguration("run", "instance"), createExpectedYamlPointcutConfiguration("processException", "instance"))));
assertYamlAdvisorConfiguration(actualYamlAdvisorConfigs.get(1), createExpectedYamlAdvisorConfiguration("org.apache.shardingsphere.proxy.frontend.netty.FrontendChannelInboundHandler",
"org.apache.shardingsphere.agent.metrics.api.advice.ChannelHandlerAdvice",
null, null, Arrays.asList(createExpectedYamlPointcutConfiguration("channelActive", "instance"),
Arrays.asList(createExpectedYamlPointcutConfiguration("channelActive", "instance"),
createExpectedYamlPointcutConfiguration("channelRead", "instance"), createExpectedYamlPointcutConfiguration("channelInactive", "instance"))));
assertYamlAdvisorConfiguration(actualYamlAdvisorConfigs.get(2), createExpectedYamlAdvisorConfiguration("org.apache.shardingsphere.infra.route.engine.SQLRouteEngine",
"org.apache.shardingsphere.agent.metrics.api.advice.SQLRouteEngineAdvice", null, null, Collections.singleton(createExpectedYamlPointcutConfiguration("route", "instance"))));
"org.apache.shardingsphere.agent.metrics.api.advice.SQLRouteEngineAdvice", Collections.singleton(createExpectedYamlPointcutConfiguration("route", "instance"))));
assertYamlAdvisorConfiguration(actualYamlAdvisorConfigs.get(3), createExpectedYamlAdvisorConfiguration(
"org.apache.shardingsphere.proxy.backend.communication.jdbc.transaction.BackendTransactionManager",
"org.apache.shardingsphere.agent.metrics.api.advice.TransactionAdvice",
null, null, Arrays.asList(createExpectedYamlPointcutConfiguration("commit", "instance"), createExpectedYamlPointcutConfiguration("rollback", "instance"))));
Arrays.asList(createExpectedYamlPointcutConfiguration("commit", "instance"), createExpectedYamlPointcutConfiguration("rollback", "instance"))));
assertYamlAdvisorConfiguration(actualYamlAdvisorConfigs.get(4), createExpectedYamlAdvisorConfiguration("org.apache.shardingsphere.infra.config.datasource.JDBCParameterDecoratorHelper",
null, "org.apache.shardingsphere.agent.metrics.api.advice.DataSourceAdvice", null, Collections.singleton(createExpectedYamlPointcutConfiguration("decorate", "static"))));
"org.apache.shardingsphere.agent.metrics.api.advice.DataSourceAdvice", Collections.singleton(createExpectedYamlPointcutConfiguration("decorate", "static"))));
}

private void assertYamlAdvisorConfiguration(final YamlAdvisorConfiguration actual, final YamlAdvisorConfiguration expected) {
assertThat(actual.getTarget(), is(expected.getTarget()));
assertThat(actual.getInstanceAdvice(), is(expected.getInstanceAdvice()));
assertThat(actual.getStaticAdvice(), is(expected.getStaticAdvice()));
assertThat(actual.getConstructAdvice(), is(expected.getConstructAdvice()));
assertThat(actual.getAdvice(), is(expected.getAdvice()));
assertThat(actual.getPointcuts().isEmpty(), is(expected.getPointcuts().isEmpty()));
Iterator<YamlPointcutConfiguration> expectedYamlPointcutConfigs = expected.getPointcuts().iterator();
for (YamlPointcutConfiguration each : actual.getPointcuts()) {
Expand All @@ -70,13 +68,10 @@ private void assertYamlAdvisorConfiguration(final YamlAdvisorConfiguration actua
}
}

private YamlAdvisorConfiguration createExpectedYamlAdvisorConfiguration(final String target, final String instanceAdvice,
final String staticAdvice, final String constructAdvice, final Collection<YamlPointcutConfiguration> yamlPointcutConfigs) {
private YamlAdvisorConfiguration createExpectedYamlAdvisorConfiguration(final String target, final String advice, final Collection<YamlPointcutConfiguration> yamlPointcutConfigs) {
YamlAdvisorConfiguration result = new YamlAdvisorConfiguration();
result.setTarget(target);
result.setInstanceAdvice(instanceAdvice);
result.setStaticAdvice(staticAdvice);
result.setConstructAdvice(constructAdvice);
result.setAdvice(advice);
result.setPointcuts(yamlPointcutConfigs);
return result;
}
Expand Down
10 changes: 5 additions & 5 deletions agent/core/src/test/resources/advisors.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@

advisors:
- target: org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask
instanceAdvice: org.apache.shardingsphere.agent.metrics.api.advice.CommandExecutorTaskAdvice
advice: org.apache.shardingsphere.agent.metrics.api.advice.CommandExecutorTaskAdvice
pointcuts:
- name: run
type: instance
- name: processException
type: instance
- target: org.apache.shardingsphere.proxy.frontend.netty.FrontendChannelInboundHandler
instanceAdvice: org.apache.shardingsphere.agent.metrics.api.advice.ChannelHandlerAdvice
advice: org.apache.shardingsphere.agent.metrics.api.advice.ChannelHandlerAdvice
pointcuts:
- name: channelActive
type: instance
Expand All @@ -33,19 +33,19 @@ advisors:
- name: channelInactive
type: instance
- target: org.apache.shardingsphere.infra.route.engine.SQLRouteEngine
instanceAdvice: org.apache.shardingsphere.agent.metrics.api.advice.SQLRouteEngineAdvice
advice: org.apache.shardingsphere.agent.metrics.api.advice.SQLRouteEngineAdvice
pointcuts:
- name: route
type: instance
- target: org.apache.shardingsphere.proxy.backend.communication.jdbc.transaction.BackendTransactionManager
instanceAdvice: org.apache.shardingsphere.agent.metrics.api.advice.TransactionAdvice
advice: org.apache.shardingsphere.agent.metrics.api.advice.TransactionAdvice
pointcuts:
- name: commit
type: instance
- name: rollback
type: instance
- target: org.apache.shardingsphere.infra.config.datasource.JDBCParameterDecoratorHelper
staticAdvice: org.apache.shardingsphere.agent.metrics.api.advice.DataSourceAdvice
advice: org.apache.shardingsphere.agent.metrics.api.advice.DataSourceAdvice
pointcuts:
- name: decorate
type: static
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,11 @@ public final class PrometheusWrapperFactory implements MetricsWrapperFactory {
private static List<Map<String, Object>> metrics;

static {
parseMetricsYaml();
parseMetricsYAML();
}

@SuppressWarnings("unchecked")
private static void parseMetricsYaml() {
private static void parseMetricsYAML() {
InputStream inputStream = PrometheusWrapperFactory.class.getResourceAsStream("/prometheus/metrics.yaml");
Map<String, List<Map<String, Object>>> metricsMap = new Yaml().loadAs(inputStream, LinkedHashMap.class);
metrics = metricsMap.get("metrics");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@

advisors:
- target: org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask
instanceAdvice: org.apache.shardingsphere.agent.metrics.api.advice.CommandExecutorTaskAdvice
advice: org.apache.shardingsphere.agent.metrics.api.advice.CommandExecutorTaskAdvice
pointcuts:
- name: run
type: instance
- name: processException
type: instance
- target: org.apache.shardingsphere.proxy.frontend.netty.FrontendChannelInboundHandler
instanceAdvice: org.apache.shardingsphere.agent.metrics.api.advice.ChannelHandlerAdvice
advice: org.apache.shardingsphere.agent.metrics.api.advice.ChannelHandlerAdvice
pointcuts:
- name: channelActive
type: instance
Expand All @@ -33,19 +33,19 @@ advisors:
- name: channelInactive
type: instance
- target: org.apache.shardingsphere.infra.route.engine.SQLRouteEngine
instanceAdvice: org.apache.shardingsphere.agent.metrics.api.advice.SQLRouteEngineAdvice
advice: org.apache.shardingsphere.agent.metrics.api.advice.SQLRouteEngineAdvice
pointcuts:
- name: route
type: instance
- target: org.apache.shardingsphere.proxy.backend.communication.jdbc.transaction.JDBCBackendTransactionManager
instanceAdvice: org.apache.shardingsphere.agent.metrics.api.advice.TransactionAdvice
advice: org.apache.shardingsphere.agent.metrics.api.advice.TransactionAdvice
pointcuts:
- name: commit
type: instance
- name: rollback
type: instance
- target: org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine
instanceAdvice: org.apache.shardingsphere.agent.metrics.api.advice.SQLParserEngineAdvice
advice: org.apache.shardingsphere.agent.metrics.api.advice.SQLParserEngineAdvice
pointcuts:
- name: parse
type: instance
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
#

metrics:
- id: proxy_request_total
- id: proxy_request_total
type: COUNTER
name: proxy_request_total
help: the shardingsphere proxy request total
Expand Down

0 comments on commit 50f743f

Please sign in to comment.