Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
* [x] Criar vo que serve para parsear do json e yaml ao mesmo tempo
* [ ] Criar os parsers
* [x] YAML
* [x] JSON
* [ ] ENV
* [ ] Testar o merge dos 3 parsers no `ConfigParseService`
* [ ] Parsers precisam saber ler arquivo do diretorio de configuração e só ler se a versão for 3, senão retornar nulo
* [ ] Testar que ConfigService vai tentar ler a v1,v2,v3 e usar o que achar primeiro nessa ordem
* [ ] Criar a config na v3 se não encontrar nenhuma, caso encontre, mantém na versão encontrada
* [ ] Update the docs
* [ ] Env
* [ ] JSON
* [ ] Yaml support

.
3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ dependencies {
implementation('com.github.docker-java:docker-java-transport-httpclient5:3.3.4')

implementation('info.picocli:picocli:4.7.6')
implementation('com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.17.1')
implementation('com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3')
implementation('com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.18.3')

implementation('com.github.ben-manes.caffeine:caffeine:3.1.8')

Expand Down
39 changes: 39 additions & 0 deletions src/main/java/com/mageddo/dataformat/yaml/YamlUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.mageddo.dataformat.yaml;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;

import java.io.UncheckedIOException;

public class YamlUtils {

public static final YAMLMapper mapper = YAMLMapper
.builder()
.enable(SerializationFeature.INDENT_OUTPUT)
.build();

public static String format(String yaml) {
try {
return mapper.writeValueAsString(mapper.readTree(yaml));
} catch (JsonProcessingException e) {
throw new UncheckedIOException(e);
}
}

public static String writeValueAsString(Object o) {
try {
return mapper.writeValueAsString(o);
} catch (JsonProcessingException e) {
throw new UncheckedIOException(e);
}
}

public static <T> T readValue(String yaml, Class<T> clazz) {
try {
return mapper.readValue(yaml, clazz);
} catch (JsonProcessingException e) {
throw new UncheckedIOException(e);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.mageddo.dnsproxyserver.config.provider.dataformatv3;

import com.mageddo.dnsproxyserver.config.Config;
import com.mageddo.dnsproxyserver.config.dataprovider.ConfigDAO;

public class ConfigDAODataFormatV3 implements ConfigDAO {
@Override
public Config find() {
return null;
}

@Override
public int priority() {
return 0;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.mageddo.dnsproxyserver.config.provider.dataformatv3;

import com.mageddo.dnsproxyserver.config.Config;
import com.mageddo.dnsproxyserver.config.mapper.ConfigMapper;
import com.mageddo.dnsproxyserver.config.provider.dataformatv3.mapper.ConfigV3Mapper;
import com.mageddo.dnsproxyserver.config.provider.dataformatv3.parser.Converter;
import lombok.RequiredArgsConstructor;

import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.List;

@Singleton
@RequiredArgsConstructor(onConstructor_ = @Inject)
public class ConfigParseService {

private final List<Converter> unorderedConverters;
private final ConfigMapper configMapper;

public Config parseMerging(){
final var parsers = this.findParsersInOrder();
final var configs = this.findConfigs(parsers);
return this.configMapper.mapFrom(configs);
}

private List<Config> findConfigs(List<Converter> converters) {
return converters.stream()
.map(Converter::parse)
.map(ConfigV3Mapper::toConfig)
.toList();
}

public List<Converter> findParsersInOrder() {
throw new UnsupportedOperationException();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
package com.mageddo.dnsproxyserver.config.provider.dataformatv3;

import lombok.Data;

import java.util.List;

@Data
public class ConfigV3 {

public int version;
public Server server;
public Solver solver;
public DefaultDns defaultDns;
public Log log;

@Data
public static class CircuitBreaker {
public String name;
}

@Data
public static class DefaultDns {
public Boolean active;
public ResolvConf resolvConf;
}

@Data
public static class Dns {
public Integer port;
public Integer noEntriesResponseCode;
}

@Data
public static class Docker {
public Boolean registerContainerNames;
public String domain;
public Boolean hostMachineFallback;
public DpsNetwork dpsNetwork;
// public Networks networks;
public String dockerDaemonUri;
}

@Data
public static class DpsNetwork {
public String name;
public Boolean autoCreate;
public Boolean autoConnect;
}

@Data
public static class Env {
public String name;
public List<Hostname> hostnames;
}

@Data
public static class Hostname {
public String type;
public String hostname;
public String ip;
public Integer ttl;
}

@Data
public static class Local {
public String activeEnv;
public List<Env> envs;
}

@Data
public static class Log {
public String level;
public String file;
}

@Data
public static class Networks {
public List<String> preferredNetworkNames;
}

@Data
public static class Remote {
public Boolean active;
public List<String> dnsServers;
public CircuitBreaker circuitBreaker;
}

@Data
public static class ResolvConf {
public String paths;
public Boolean overrideNameServers;
}

@Data
public static class Server {
public Dns dns;
public Web web;
public String protocol;
}

@Data
public static class Solver {
public Remote remote;
public Docker docker;
public System system;
public Local local;
public Stub stub;
}

@Data
public static class Stub {
public String domainName;
}

@Data
public static class System {
public String hostMachineHostname;
}

@Data
public static class Web {
public Integer port;
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.mageddo.dnsproxyserver.config.provider.dataformatv3.mapper;

import com.mageddo.dnsproxyserver.config.Config;
import com.mageddo.dnsproxyserver.config.provider.dataformatv3.ConfigV3;

public class ConfigV3Mapper {
public static Config toConfig(ConfigV3 configV3) {
throw new UnsupportedOperationException();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.mageddo.dnsproxyserver.config.provider.dataformatv3.parser;

import com.mageddo.dnsproxyserver.config.provider.dataformatv3.ConfigV3;

public interface Converter {

ConfigV3 parse();

String serialize(ConfigV3 config);

int priority();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.mageddo.dnsproxyserver.config.provider.dataformatv3.parser;

import com.mageddo.dnsproxyserver.config.provider.dataformatv3.ConfigV3;

public class EnvConverter implements Converter {
@Override
public ConfigV3 parse() {
return null;
}

@Override
public String serialize(ConfigV3 config) {
return "";
}

@Override
public int priority() {
return 0;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.mageddo.dnsproxyserver.config.provider.dataformatv3.parser;

import com.mageddo.dnsproxyserver.config.provider.dataformatv3.ConfigV3;
import com.mageddo.json.JsonUtils;
import lombok.NoArgsConstructor;

import javax.inject.Inject;
import javax.inject.Singleton;

@Singleton
@NoArgsConstructor(onConstructor_ = @Inject)
public class JsonConverter implements Converter {

@Override
public ConfigV3 parse() {
return parse("");
}

public ConfigV3 parse(String json) {
return JsonUtils.readValue(json, ConfigV3.class);
}

@Override
public String serialize(ConfigV3 config) {
return JsonUtils.prettyWriteValueAsString(config);
}

@Override
public int priority() {
return 1;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.mageddo.dnsproxyserver.config.provider.dataformatv3.parser;

import com.mageddo.dataformat.yaml.YamlUtils;
import com.mageddo.dnsproxyserver.config.provider.dataformatv3.ConfigV3;

public class YamlConverter implements Converter {

@Override
public ConfigV3 parse() {
return null;
}

public ConfigV3 parse(String yaml) {
return YamlUtils.readValue(yaml, ConfigV3.class);
}

@Override
public String serialize(ConfigV3 config) {
return YamlUtils.writeValueAsString(config);
}

@Override
public int priority() {
return 2;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.mageddo.dnsproxyserver.config.provider.dataformatv3.parser;

import com.mageddo.dnsproxyserver.config.provider.dataformatv3.templates.ConfigV3Templates;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

class ConverterTest {

private final JsonConverter jsonParser = new JsonConverter();
private final YamlConverter yamlParser = new YamlConverter();

@Test
void yamlAndJsonParsingMustGenerateSameVo(){

final var json = ConfigV3Templates.buildJson();
final var yaml = ConfigV3Templates.buildYaml();

final var jsonParsed = this.jsonParser.parse(json);
final var yamlParsed = this.yamlParser.parse(yaml);

assertEquals(jsonParsed, yamlParsed);

}

}
Loading