Skip to content

Commit

Permalink
Merge pull request #269 from mageddo/dps-3-quarkus
Browse files Browse the repository at this point in the history
DPS 3 - Quarkus
  • Loading branch information
mageddo authored Jan 31, 2023
2 parents 63a302d + 9c41d79 commit 18b6099
Show file tree
Hide file tree
Showing 31 changed files with 546 additions and 2,538 deletions.
5 changes: 5 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
**/node_modules
#*
#!build/*-runner
#!build/*-runner.jar
#!build/lib/*
#!build/quarkus-app/*
9 changes: 6 additions & 3 deletions README.alpha.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@

Binary using Native Image
```bash
$ ./gradlew build nativeCompile &&\
build/native/nativeCompile/dns-proxy-server
$ ./gradlew build -Dquarkus.package.type=native &&\
./build/dns-proxy-server-*-runner
```

# Drafts

## Run a container for testing

Expand All @@ -26,5 +27,7 @@ $ ./gradlew shadowJar
$ mkdir reflect &&\
$JAVA_HOME/bin/java -agentlib:native-image-agent=config-output-dir=./reflect -jar build/libs/dns-proxy-server*all.jar
```
/home/typer/Downloads/dns-proxy-server-linux-amd64-2.19.5/dns-proxy-server -default-dns=false -server-port=5481
```
68 changes: 14 additions & 54 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ buildscript {
}
plugins {
id "java"
id 'org.graalvm.buildtools.native' version '0.9.19'
id "com.github.johnrengelman.shadow" version "7.1.2"
id 'io.quarkus'
}

repositories {
Expand All @@ -20,76 +19,37 @@ repositories {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17

def className = "com.mageddo.dnsproxyserver.App"


// https://graalvm.github.io/native-build-tools/latest/gradle-plugin.html
graalvmNative {
binaries {
main {
javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(17)
requiredVersion = '22.3'
vendor = JvmVendorSpec.matching("GraalVM Community")
}
imageName = project.name
mainClass = className
verbose = false
fallback = false
buildArgs.add('-J-Xmx5G')
}
}
}

dependencies {
compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.+'
annotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.+'

implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}")

implementation 'com.google.dagger:dagger:2.44.+'
annotationProcessor 'com.google.dagger:dagger-compiler:2.44.+'

implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.8.+'
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.14.+'
implementation group: "ch.qos.logback", name: "logback-classic", version: "1.2.+"

implementation group: 'com.mageddo.tinyserver', name: 'tinyserver', version: '1.0.+'
implementation 'io.quarkus:quarkus-arc'
implementation 'io.quarkus:quarkus-resteasy'
implementation 'io.quarkus:quarkus-resteasy-jsonb'

implementation group: 'dnsjava', name: 'dnsjava', version: '3.5.2'

implementation group: 'com.github.docker-java', name: 'docker-java-core', version: '3.2.14'
implementation group: 'com.github.docker-java', name: 'docker-java-transport-httpclient5', version: '3.2.14'

compileOnly(group: "com.mageddo.nativeimage", name: "reflection-config-generator", version: "2.4.+")
annotationProcessor(group: "com.mageddo.nativeimage", name: "reflection-config-generator", version: "2.4.+")

testCompileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.+'
testAnnotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.+'
testImplementation(group: "org.junit.jupiter", name: "junit-jupiter", version: "5.8.+")
testImplementation 'io.quarkus:quarkus-junit5'
testImplementation 'io.rest-assured:rest-assured'
testImplementation(group: "org.mockito", name: "mockito-junit-jupiter", version: "4.2.+")

}

test {
useJUnitPlatform()
testLogging {
events "passed", "skipped", "failed"
}
systemProperty "java.util.logging.manager", "org.jboss.logmanager.LogManager"
}


def mainClassName = "com.mageddo.dnsproxyserver.App"

jar {
manifest {
attributes(
"Main-Class": mainClassName
)
}
compileJava {
options.encoding = 'UTF-8'
options.compilerArgs << '-parameters'
}

shadowJar {
mergeServiceFiles()
transform(com.github.jengelman.gradle.plugins.shadow.transformers.PropertiesFileTransformer) {
mergeStrategy = "append"
}
compileTestJava {
options.encoding = 'UTF-8'
}
6 changes: 6 additions & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
version=3.0.0-alpha
quarkusPluginId=io.quarkus
quarkusPluginVersion=2.16.0.Final
quarkusPlatformGroupId=io.quarkus.platform
quarkusPlatformArtifactId=quarkus-bom
quarkusPlatformVersion=2.16.0.Final
10 changes: 10 additions & 0 deletions settings.gradle
Original file line number Diff line number Diff line change
@@ -1 +1,11 @@
pluginManagement {
repositories {
mavenCentral()
gradlePluginPortal()
mavenLocal()
}
plugins {
id "${quarkusPluginId}" version "${quarkusPluginVersion}"
}
}
rootProject.name = "dns-proxy-server"
16 changes: 16 additions & 0 deletions src/main/java/com/mageddo/HelloWorld.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.mageddo;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/hello")
public class HelloWorld {

@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "Hello RESTEasy";
}
}
22 changes: 15 additions & 7 deletions src/main/java/com/mageddo/dnsproxyserver/App.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
package com.mageddo.dnsproxyserver;

import com.mageddo.dnsproxyserver.dagger.Factory;
import com.mageddo.dnsproxyserver.server.dns.ServerStarter;
import io.quarkus.runtime.Quarkus;
import io.quarkus.runtime.StartupEvent;
import io.quarkus.runtime.annotations.QuarkusMain;
import lombok.extern.slf4j.Slf4j;

public class App {
public static void main(String[] args) throws InterruptedException {
final var factory = Factory.factory();
import javax.enterprise.event.Observes;

// start dns server
factory.dnsServerStarter().start();
@Slf4j
@QuarkusMain
public class App {
public static void main(String[] args) {

// start webserver

Expand All @@ -17,7 +21,11 @@ public static void main(String[] args) throws InterruptedException {

// install as service

Thread.currentThread().join();
Quarkus.run(args);

}

void onStart(@Observes StartupEvent ev, ServerStarter dnsServer) {
dnsServer.start();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.mageddo.dnsproxyserver.config.vo;

import lombok.Data;
import lombok.experimental.Accessors;

import java.util.List;

@Data
@Accessors(chain = true)
public class ConfigurationV2 {
private int version = 2;
private List<String> remoteDnsServers; // dns servers formatted like 192.168.0.1:53

private String activeEnv;
private List<Env> envs;

private int webServerPort;
private int dnsServerPort;

private Boolean defaultDns;

private String logLevel;
private String logFile;

private Boolean registerContainerNames;

private String hostMachineHostname;

private String domain;

private boolean dpsNetwork;

private boolean dpsNetworkAutoConnect;

@Data
@Accessors(chain = true)
public static class Env {
private String name;
private List<Hostname> hostnames;
}

@Data
@Accessors(chain = true)
public static class Hostname {
private Long id;
private String hostname;
private String ip;
private String target; // target hostname when type=CNAME

private Integer ttl;
private EntryType type;
}

public enum EntryType {
A,
CNAME
}
}
24 changes: 0 additions & 24 deletions src/main/java/com/mageddo/dnsproxyserver/dagger/Factory.java

This file was deleted.

30 changes: 0 additions & 30 deletions src/main/java/com/mageddo/dnsproxyserver/dagger/MainModule.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.InspectContainerResponse;
import io.quarkus.arc.DefaultBean;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.StopWatch;
Expand All @@ -17,6 +18,7 @@

@Slf4j
@Singleton
@DefaultBean
@AllArgsConstructor(onConstructor = @__({@Inject}))
public class DockerRepositoryDefault implements DockerRepository {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,17 @@
package com.mageddo.dnsproxyserver.dagger;
package com.mageddo.dnsproxyserver.quarkus;

import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.core.DefaultDockerClientConfig;
import com.github.dockerjava.core.DockerClientImpl;
import com.github.dockerjava.httpclient5.ApacheDockerHttpClient;
import com.mageddo.dnsproxyserver.docker.DockerRepository;
import com.mageddo.dnsproxyserver.docker.DockerRepositoryDefault;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;

import javax.enterprise.inject.Produces;
import java.time.Duration;

@Module
public interface DockerModule {
public class DockerConfig {


@Binds
DockerRepository bind(DockerRepositoryDefault m);

@Provides
static DockerClient dockerClient() {
@Produces
public DockerClient dockerClient() {
final var config = DefaultDockerClientConfig.createDefaultConfigBuilder()
.withDockerHost("unix:///var/run/docker.sock")
.withDockerTlsVerify(false)
Expand Down
22 changes: 22 additions & 0 deletions src/main/java/com/mageddo/dnsproxyserver/quarkus/Instances.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.mageddo.dnsproxyserver.quarkus;

import javax.enterprise.inject.Instance;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class Instances {
public static <T> List<T> toList(Instance<T> instance) {
return instance
.stream()
.toList()
;
}

public static <T> Set<T> toSet(Instance<T> instance) {
return instance
.stream()
.collect(Collectors.toSet())
;
}
}
Loading

0 comments on commit 18b6099

Please sign in to comment.