Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DPS 3 - Quarkus #269

Merged
merged 9 commits into from
Jan 31, 2023
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
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