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 1847666 commit a7754cf
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 {
@Bean
public YAMLMapper yamlMapper() {
return Jackson.newYamlMapper();
}
}
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();

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

return mapper;
}

}
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();

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

}
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");

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();

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());

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();

return mapper.readValue(stream, Mappings.class);
}
}
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");

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

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());
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 a7754cf

Please sign in to comment.