Skip to content

Commit

Permalink
[#10114] Add YmlMapper
Browse files Browse the repository at this point in the history
  • Loading branch information
emeroad committed Jul 11, 2023
1 parent 65b7d0b commit 7266fdc
Show file tree
Hide file tree
Showing 9 changed files with 120 additions and 56 deletions.
8 changes: 8 additions & 0 deletions commons-server/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,10 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
Expand All @@ -117,6 +121,10 @@
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* Copyright 2023 NAVER Corp.
*
* 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 com.navercorp.pinpoint.common.server.config;

import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
import com.navercorp.pinpoint.common.server.util.json.Jackson;
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@Import({JacksonAutoConfiguration.class})
public class YamlConfiguration {

Check warning on line 29 in commons-server/src/main/java/com/navercorp/pinpoint/common/server/config/YamlConfiguration.java

View check run for this annotation

Codecov / codecov/patch

commons-server/src/main/java/com/navercorp/pinpoint/common/server/config/YamlConfiguration.java#L29

Added line #L29 was not covered by tests
@Bean
public YAMLMapper yamlMapper() {
return Jackson.newYamlMapper();

Check warning on line 32 in commons-server/src/main/java/com/navercorp/pinpoint/common/server/config/YamlConfiguration.java

View check run for this annotation

Codecov / codecov/patch

commons-server/src/main/java/com/navercorp/pinpoint/common/server/config/YamlConfiguration.java#L32

Added line #L32 was not covered by tests
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.util.ClassUtils;
Expand Down Expand Up @@ -65,4 +66,13 @@ public static Jackson2ObjectMapperBuilder newBuilder() {
}


public static YAMLMapper newYamlMapper() {
YAMLMapper mapper = new YAMLMapper();

Check warning on line 70 in commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/json/Jackson.java

View check run for this annotation

Codecov / codecov/patch

commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/json/Jackson.java#L70

Added line #L70 was not covered by tests

Jackson2ObjectMapperBuilder builder = Jackson.newBuilder();
builder.configure(mapper);

Check warning on line 73 in commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/json/Jackson.java

View check run for this annotation

Codecov / codecov/patch

commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/json/Jackson.java#L72-L73

Added lines #L72 - L73 were not covered by tests

return mapper;

Check warning on line 75 in commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/json/Jackson.java

View check run for this annotation

Codecov / codecov/patch

commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/json/Jackson.java#L75

Added line #L75 was not covered by tests
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,21 @@

package com.navercorp.pinpoint.inspector.web;

import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
import com.navercorp.pinpoint.common.server.config.YamlConfiguration;
import com.navercorp.pinpoint.inspector.web.config.InspectorWebPinotDaoConfiguration;
import com.navercorp.pinpoint.inspector.web.definition.Mappings;
import com.navercorp.pinpoint.inspector.web.definition.YMLInspectorManager;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportResource;
import org.springframework.context.annotation.Profile;
import org.springframework.core.io.Resource;

import java.io.IOException;
import java.io.InputStream;

/**
* @author minwoo.jung
Expand All @@ -31,8 +40,20 @@
"com.navercorp.pinpoint.inspector.web"
})
@Import({
InspectorWebPinotDaoConfiguration.class
InspectorWebPinotDaoConfiguration.class,
YamlConfiguration.class
})
@Profile("inspector")
public class InspectorWebApp {

@Bean
public Mappings inspectorDefinition(@Value(YMLInspectorManager.DEFINITION_YML)
Resource inspectorMetric,
YAMLMapper mapper) throws IOException {

InputStream stream = inspectorMetric.getInputStream();

Check warning on line 54 in inspector-module/inspector-web/src/main/java/com/navercorp/pinpoint/inspector/web/InspectorWebApp.java

View check run for this annotation

Codecov / codecov/patch

inspector-module/inspector-web/src/main/java/com/navercorp/pinpoint/inspector/web/InspectorWebApp.java#L54

Added line #L54 was not covered by tests

return mapper.readValue(stream, Mappings.class);

Check warning on line 56 in inspector-module/inspector-web/src/main/java/com/navercorp/pinpoint/inspector/web/InspectorWebApp.java

View check run for this annotation

Codecov / codecov/patch

inspector-module/inspector-web/src/main/java/com/navercorp/pinpoint/inspector/web/InspectorWebApp.java#L56

Added line #L56 was not covered by tests
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,26 +16,20 @@

package com.navercorp.pinpoint.inspector.web.definition;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;

import com.navercorp.pinpoint.common.util.Assert;
import com.navercorp.pinpoint.inspector.web.definition.metric.field.Field;
import com.navercorp.pinpoint.metric.web.mapping.Metric;
import com.navercorp.pinpoint.metric.web.model.MetricInfo;
import com.navercorp.pinpoint.metric.web.model.basic.metric.group.MatchingRule;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.BiFunction;
import java.util.stream.Collectors;

/**
* @author minwoo.jung
Expand All @@ -44,33 +38,25 @@
// TODO : (minwoo) It seems that it can be integrated with the metric's com.navercorp.pinpoint.metric.web.service.YMLSystemMetricBasic GroupManager.
public class YMLInspectorManager {

public static final String TELEGRAF_METRIC = "/inspector/web/inspector-definition.yml";
public static final String DEFINITION_YML = "classpath:/inspector/web/inspector-definition.yml";
private final Map<String, MetricDefinition> definitionIdMap;
private final Map<String, List<String>> metricIdMap;
private final Comparator<MetricInfo> metricInfoComparator;

public YMLInspectorManager() throws IOException {
this(new ClassPathResource(TELEGRAF_METRIC));
}

public YMLInspectorManager(ClassPathResource inspectorDefinitionFile) throws IOException {
Objects.requireNonNull(inspectorDefinitionFile, "inspectorDefinitionFile");
public YMLInspectorManager(Mappings metricDefinitions) {
Objects.requireNonNull(metricDefinitions, "metricDefinitions");

Check warning on line 47 in inspector-module/inspector-web/src/main/java/com/navercorp/pinpoint/inspector/web/definition/YMLInspectorManager.java

View check run for this annotation

Codecov / codecov/patch

inspector-module/inspector-web/src/main/java/com/navercorp/pinpoint/inspector/web/definition/YMLInspectorManager.java#L46-L47

Added lines #L46 - L47 were not covered by tests

InputStream stream = inspectorDefinitionFile.getInputStream();

ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
Mappings mappings = mapper.readValue(stream, Mappings.class);
List<MetricDefinition> metricDefinitions = mappings.getMappings();
final List<MetricDefinition> mappings = metricDefinitions.getMappings();

Check warning on line 49 in inspector-module/inspector-web/src/main/java/com/navercorp/pinpoint/inspector/web/definition/YMLInspectorManager.java

View check run for this annotation

Codecov / codecov/patch

inspector-module/inspector-web/src/main/java/com/navercorp/pinpoint/inspector/web/definition/YMLInspectorManager.java#L49

Added line #L49 was not covered by tests

Map<String, MetricDefinition> definitionIdMap = new HashMap<>();
for (MetricDefinition metric : metricDefinitions) {
for (MetricDefinition metric : mappings) {
MetricDefinition exist = definitionIdMap.put(metric.getDefinitionId(), metric);
Assert.state(exist == null, "duplicated metric " + metric + " / " + exist);
}
this.definitionIdMap = definitionIdMap;

Map<String, List<String>> metricIdMap = new HashMap<>();
for (MetricDefinition metric : metricDefinitions) {
for (MetricDefinition metric : mappings) {
String definitionId = metric.getDefinitionId();
metricIdMap.compute(metric.getMetricName(), new BiFunction<String, List<String>, List<String>>() {
@Override
Expand All @@ -85,10 +71,11 @@ public List<String> apply(String metricId, List<String> definitionIdList) {
}
this.metricIdMap = metricIdMap;

List<String> metricIdSortOrder = new ArrayList<>(metricDefinitions.size());
for (MetricDefinition metric : metricDefinitions) {
metricIdSortOrder.add(metric.getDefinitionId());
}
List<String> metricIdSortOrder = mappings
.stream()
.map(MetricDefinition::getDefinitionId)
.collect(Collectors.toList());

Check warning on line 77 in inspector-module/inspector-web/src/main/java/com/navercorp/pinpoint/inspector/web/definition/YMLInspectorManager.java

View check run for this annotation

Codecov / codecov/patch

inspector-module/inspector-web/src/main/java/com/navercorp/pinpoint/inspector/web/definition/YMLInspectorManager.java#L74-L77

Added lines #L74 - L77 were not covered by tests

metricInfoComparator = Comparator.comparing(metricInfo -> metricIdSortOrder.indexOf(metricInfo.getMetricDefinitionId()));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.navercorp.pinpoint.metric.web;


import com.navercorp.pinpoint.common.server.config.YamlConfiguration;
import com.navercorp.pinpoint.metric.web.config.MetricWebPinotDaoConfiguration;
import com.navercorp.pinpoint.pinot.config.PinotConfiguration;
import org.springframework.context.annotation.ComponentScan;
Expand All @@ -14,7 +15,9 @@
@Import({
WebMetricPropertySources.class,
MetricWebPinotDaoConfiguration.class,
PinotConfiguration.class
PinotConfiguration.class,

YamlConfiguration.class
})
@Profile("metric")
public class MetricWebApp {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package com.navercorp.pinpoint.metric.web.config;

import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
import com.navercorp.pinpoint.metric.collector.config.MyBatisRegistryHandler;
import com.navercorp.pinpoint.metric.web.mapping.Mappings;
import com.navercorp.pinpoint.metric.web.service.YMLSystemMetricBasicGroupManager;
import com.navercorp.pinpoint.pinot.mybatis.MyBatisConfiguration;
import com.navercorp.pinpoint.pinot.mybatis.PinotAsyncTemplate;
import org.apache.ibatis.session.Configuration;
Expand All @@ -20,6 +23,8 @@
import org.springframework.transaction.TransactionManager;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;

/**
* @author Woonduk Kang(emeroad)
Expand Down Expand Up @@ -78,4 +83,14 @@ public PinotAsyncTemplate pinotAsyncTemplate(
@Qualifier("sqlPinotSessionFactory") SqlSessionFactory sessionFactory) {
return new PinotAsyncTemplate(sessionFactory);
}

@Bean
public Mappings telegrafMetricDefinition(@Value(YMLSystemMetricBasicGroupManager.TELEGRAF_METRIC)
Resource telegrafMetric,
YAMLMapper mapper) throws IOException {

InputStream stream = telegrafMetric.getInputStream();

Check warning on line 92 in metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/config/MetricWebPinotDaoConfiguration.java

View check run for this annotation

Codecov / codecov/patch

metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/config/MetricWebPinotDaoConfiguration.java#L92

Added line #L92 was not covered by tests

return mapper.readValue(stream, Mappings.class);

Check warning on line 94 in metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/config/MetricWebPinotDaoConfiguration.java

View check run for this annotation

Codecov / codecov/patch

metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/config/MetricWebPinotDaoConfiguration.java#L94

Added line #L94 was not covered by tests
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,14 @@

package com.navercorp.pinpoint.metric.web.service;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.navercorp.pinpoint.common.util.Assert;
import com.navercorp.pinpoint.metric.web.mapping.Mappings;
import com.navercorp.pinpoint.metric.web.mapping.Metric;
import com.navercorp.pinpoint.metric.web.model.MetricInfo;
import com.navercorp.pinpoint.metric.web.model.basic.metric.group.GroupingRule;
import com.navercorp.pinpoint.metric.web.model.basic.metric.group.MatchingRule;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
Expand All @@ -38,41 +32,34 @@
import java.util.Map;
import java.util.Objects;
import java.util.function.BiFunction;
import java.util.stream.Collectors;

/**
* @author minwoo.jung
*/
@Service
public class YMLSystemMetricBasicGroupManager {

public static final String TELEGRAF_METRIC = "/pinot-web/telegraf-metric.yml";
public static final String TELEGRAF_METRIC = "classpath:/pinot-web/telegraf-metric.yml";
private final Map<String, Metric> definitionIdMap;
private final Map<String, List<String>> metricIdMap;
private final Comparator<MetricInfo> metricInfoComparator;

public YMLSystemMetricBasicGroupManager() throws IOException {
this(new ClassPathResource(TELEGRAF_METRIC));
}

public YMLSystemMetricBasicGroupManager(Resource telegrafMetric) throws IOException {
Objects.requireNonNull(telegrafMetric, "telegrafMetric");

InputStream stream = telegrafMetric.getInputStream();
public YMLSystemMetricBasicGroupManager(Mappings metrics) {
Objects.requireNonNull(metrics, "metrics");

Check warning on line 49 in metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/service/YMLSystemMetricBasicGroupManager.java

View check run for this annotation

Codecov / codecov/patch

metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/service/YMLSystemMetricBasicGroupManager.java#L48-L49

Added lines #L48 - L49 were not covered by tests

ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
Mappings mappings = mapper.readValue(stream, Mappings.class);
List<Metric> metrics = mappings.getMappings();
List<Metric> mappings = metrics.getMappings();

Check warning on line 51 in metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/service/YMLSystemMetricBasicGroupManager.java

View check run for this annotation

Codecov / codecov/patch

metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/service/YMLSystemMetricBasicGroupManager.java#L51

Added line #L51 was not covered by tests

Map<String, Metric> definitionIdMap = new HashMap<>();
for (Metric metric : metrics) {
for (Metric metric : mappings) {
Metric exist = definitionIdMap.put(metric.getDefinitionId(), metric);
Assert.state(exist == null, "duplicated metric " + metric + " / " + exist);
}
this.definitionIdMap = definitionIdMap;


Map<String, List<String>> metricIdMap = new HashMap<>();
for (Metric metric : metrics) {
for (Metric metric : mappings) {
String definitionId = metric.getDefinitionId();
metricIdMap.compute(metric.getName(), new BiFunction<String, List<String>, List<String>>() {
@Override
Expand All @@ -87,11 +74,10 @@ public List<String> apply(String metricId, List<String> definitionIdList) {
}
this.metricIdMap = metricIdMap;


List<String> metricIdSortOrder = new ArrayList<>(metrics.size());
for (Metric metric : metrics) {
metricIdSortOrder.add(metric.getDefinitionId());
}
List<String> metricIdSortOrder = mappings
.stream()
.map(Metric::getDefinitionId)
.collect(Collectors.toList());

Check warning on line 80 in metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/service/YMLSystemMetricBasicGroupManager.java

View check run for this annotation

Codecov / codecov/patch

metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/service/YMLSystemMetricBasicGroupManager.java#L77-L80

Added lines #L77 - L80 were not covered by tests
metricInfoComparator = Comparator.comparing(metricInfo -> metricIdSortOrder.indexOf(metricInfo.getMetricDefinitionId()));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@

package com.navercorp.pinpoint.metric.web.mapping;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
import com.navercorp.pinpoint.common.server.util.json.Jackson;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

Expand All @@ -31,7 +31,7 @@ public class MappingsTest {
public void test2() throws IOException {
InputStream resource = getClass().getResourceAsStream("/pinot-web/telegraf-metric.yml");

ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
YAMLMapper mapper = Jackson.newYamlMapper();

Mappings mappings = mapper.readValue(resource, Mappings.class);
Metric metric = mappings.getMappings().get(0);
Expand Down

0 comments on commit 7266fdc

Please sign in to comment.