Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
89cdda5
migration(micronauts): servlets migrated to controllers
DarkWeird Sep 24, 2020
99a6d23
migration(micronauts): fix tests
DarkWeird Sep 25, 2020
1f2066f
migration(micronauts): remove JettyMain, edit Readme.
DarkWeird Sep 25, 2020
c6fa408
migration(micronauts): remove jax-rs and jersey libs from dependencies
DarkWeird Sep 25, 2020
07130d1
migration(micronauts): move packages to more common places.
DarkWeird Sep 25, 2020
dcceec0
migration(micronauts): DI Service Renaming
DarkWeird Sep 25, 2020
5d8e5df
migration(micronauts): remove retrofit. prefer micronaut's client
DarkWeird Sep 25, 2020
e91071d
migration(micronauts): remove data for postgres
DarkWeird Sep 25, 2020
f67c4e0
migration(micronauts): add test property for tests.
DarkWeird Sep 25, 2020
cdd5d23
migration(micronauts): export Module api to separate controller
DarkWeird Sep 25, 2020
77ae6c1
migration(micronauts): export Server api to separate controller
DarkWeird Sep 25, 2020
b972042
chore(micronauts): Fix CheckStyle, Idea's and Sonar's issues
DarkWeird Sep 25, 2020
c6de7e2
chore(micronauts): remove Jetty references. change Readme.md
DarkWeird Nov 30, 2021
dfa3338
build(micronauts): add possible to runs meta-server with test profile…
DarkWeird Nov 30, 2021
646c5b7
build(micronauts): fix docker build and provide deploy and local run …
DarkWeird Nov 30, 2021
8c36103
fix(micronauts): fix server/add form data handling
DarkWeird Nov 30, 2021
e388c69
fix(micronauts): fix artifact repositories registration loading
DarkWeird Nov 30, 2021
d3bd309
fix(micronauts): fix metadata loading for modules
DarkWeird Nov 30, 2021
ebccbea
refactor(micronauts): Provide data-driven configs for repository hand…
DarkWeird Nov 30, 2021
e5e2398
Merge remote-tracking branch 'moving/develop' into topic/micronauts
DarkWeird Oct 18, 2022
987c6f4
refactor(micronauts): bump up micronauts version
DarkWeird Oct 18, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 10 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
FROM gradle:6.6.1-jdk11 as builder
CMD mkdir /build
COPY . /build
WORKDIR /build
RUN gradle shadowJar

FROM openjdk:14-alpine
COPY --from=builder build/build/libs/meta-server-*-all.jar meta-server.jar
EXPOSE 80
CMD ["java", "-Dcom.sun.management.jmxremote", "-Xmx128m", "-jar", "meta-server.jar"]
51 changes: 36 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,30 +1,51 @@
meta-server
=========

A Jetty-based servlet that serves meta-information about Terasology.
Micronauts web application that serves meta-information about Terasology.
It is available for in-game use in JSON format and in HTML format for web browsers.

The server is available at
**http://meta.terasology.org**

hosted by [@msteiger](http://github.com/msteiger).
The list of online game servers is hosted on a Amazon EC2 PostgreSQL instance (through Heroku credentials).
The server code is mirrored on two backup instances hosted on Heroku:

https://meta-server.herokuapp.com

https://meta-server-test.herokuapp.com (a debug DB also hosted on Amazon)
Features
-------------
* Save and provide information about Terasology modules
* Receive and provide information about Terasology servers (Looking for game)
* Using https://db-ip.com/ for providing additional info about servers.
* Use PostgresDB via Jooq for persistence
* Use Micronauts for core Frameworks

Run locally
-------------
Gradle-way:
1. Clone
2. Go to Project Dir
3. Set environment variable `MICRONAUT_ENVIRONMENTS` to `dev` (local h2 database)
4. `./gradlew run` at Linux/Macos or `gradlew run` at Windows
5. found at logs entry like `[main] INFO io.micronaut.runtime.Micronaut - Startup completed in 624ms. Server Running: http://localhost:39195`
6. Go To url described at logs with your browser

Docker-way:
1. Clone
2. Go To Project Dir
3. Run `docker build . -t test-meta-server`
4. Run `docker run --env "MICRONAUT_ENVIRONMENTS=dev" test-meta-server`

Deployment
-------------

Heroku: Clone the repository and push the content to Heroku on branch `master`. Some details must be provided through environment variables:

DATABASE_URL=postgres://name:pw@host:port/database
PORT=8080
DBIP_API_KEY=<get one from db-ip.com>
EDIT_SECRET=<a password only known for admins with write access>
Docker:
1. Clone repository
2. Go To project directory
3. `docker build . -t <tag>`
4. `docker push` image whatever you want

You can setup what you want with [Micronaut's configs](https://docs.micronaut.io/latest/guide/index.html#config):
Common (ENVIRONMENT_VARIABLES):

MICRONAUT_SERVER_PORT - port (example - 80)
DATASOURCES_DEFAULT_URL - url to PG database (example - postgres://name:pw@host:port/database
META_SERVER_DBIP_API_KEY=<get one from db-ip.com>
META_SERVER_EDIT_SECRET=<a password only known for admins with write access>

Geo-Location
-------------
Expand Down
107 changes: 79 additions & 28 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@ plugins {
id 'pmd'
id 'checkstyle'
id 'com.github.spotbugs' version '4.7.1'

id "com.diffplug.eclipse.apt" version "3.22.0"
id "com.github.johnrengelman.shadow" version "6.0.0"
}

apply from: 'config/gradle/versioning.gradle'

mainClassName = "org.terasology.web.JettyMain"
mainClassName = "org.terasology.Application"
applicationName = "meta-server"

group = 'org.terasology.web'

targetCompatibility = '11'
sourceCompatibility = '11'

repositories {
mavenCentral()

Expand All @@ -28,56 +28,76 @@ repositories {
}
}

ext {
jettyVersion = '9.4.48.v20220622'
java {
sourceCompatibility = JavaVersion.toVersion('11')
targetCompatibility = JavaVersion.toVersion('11')
}

def codeMetricsDir = "${buildDir}/codeMetrics"

configurations {
codeMetrics
// for dependencies that are needed for development only
developmentOnly
}

dependencies {
implementation group: 'org.eclipse.jetty', name: 'jetty-servlet', version: jettyVersion
implementation group: 'org.eclipse.jetty', name: 'jetty-servlets', version: jettyVersion
implementation 'javax.servlet:javax.servlet-api:3.1.0'
annotationProcessor(platform("io.micronaut:micronaut-bom:$micronautVersion"))
annotationProcessor("io.micronaut:micronaut-inject-java")
annotationProcessor("io.micronaut:micronaut-validation")
implementation(platform("io.micronaut:micronaut-bom:$micronautVersion"))
implementation("io.micronaut:micronaut-inject")
implementation("io.micronaut:micronaut-validation")
implementation("io.micronaut:micronaut-runtime")
implementation("javax.annotation:javax.annotation-api")
implementation("io.micronaut:micronaut-http-server-netty")
implementation("io.micronaut.views:micronaut-views-freemarker")
implementation("io.micronaut:micronaut-http-client")
implementation("io.micronaut.sql:micronaut-jdbc-hikari")
implementation("io.micronaut.sql:micronaut-jooq")
runtimeOnly("ch.qos.logback:logback-classic")
runtimeOnly("org.postgresql:postgresql")

implementation 'org.slf4j:slf4j-api:1.7.30'

// For `@ThreadSafe`
implementation 'javax.annotation:javax.annotation-api:1.3.2'
implementation 'com.google.code.findbugs:jsr305:3.0.0'

implementation 'com.sun.xml.bind:jaxb-impl:2.3.3'
implementation group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '2.1.1'

implementation 'org.glassfish.jersey.containers:jersey-container-jetty-servlet:2.25'
implementation 'org.glassfish.jersey.ext:jersey-mvc-freemarker:2.25'

implementation 'com.google.code.gson:gson:2.9.1'
implementation 'com.google.guava:guava:31.1-jre'

implementation 'org.jooq:jooq:3.14.16'
implementation 'org.postgresql:postgresql:42.4.1'

implementation 'com.squareup.retrofit:retrofit:1.9.0'
// Module working
implementation 'com.google.code.gson:gson:2.4'
implementation 'org.terasology:gestalt-module:4.1.2'

implementation 'com.zaxxer:HikariCP:5.0.1'
implementation 'com.google.guava:guava:18.0'

implementation 'org.terasology:gestalt-module:4.1.2'
//// Tests
testAnnotationProcessor(enforcedPlatform("io.micronaut:micronaut-bom:$micronautVersion"))
testAnnotationProcessor("io.micronaut:micronaut-inject-java")
testImplementation(enforcedPlatform("io.micronaut:micronaut-bom:$micronautVersion"))

implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
//Junit 5
testImplementation("org.junit.jupiter:junit-jupiter-api")
testImplementation("org.junit.jupiter:junit-jupiter-params")
testImplementation("io.micronaut.test:micronaut-test-junit5")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")

// html validation
testImplementation 'org.jsoup:jsoup:1.15.2'
testImplementation 'com.jcabi:jcabi-w3c:1.4.0'
testImplementation 'com.jcabi:jcabi-matchers:1.5.3'
testImplementation 'junit:junit:4.13.2'
testImplementation 'com.h2database:h2:1.4.190'

// loggin and database
testImplementation 'org.slf4j:slf4j-api:1.7.30'
implementation 'com.h2database:h2'

// Code analyzers
pmd 'net.sourceforge.pmd:pmd-core:6.48.0'
pmd 'net.sourceforge.pmd:pmd-java:6.48.0'

codeMetrics group: 'org.terasology.config', name: 'codemetrics', version: '1.3.2', ext: 'zip'
}

test.classpath += configurations.developmentOnly

task unpackConfig(type: Sync, dependsOn: configurations.codeMetrics) {
from zipTree(configurations.codeMetrics.singleFile)
into codeMetricsDir
Expand All @@ -104,7 +124,38 @@ spotbugs {
excludeFilter = resources.text.fromFile("${codeMetricsDir}/findbugs/findbugs-exclude.xml").asFile()
}


tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
options.compilerArgs.addAll([
'-parameters',
// enables incremental compilation
'-Amicronaut.processing.incremental=true',
'-Amicronaut.processing.annotations=org.terasology.*',
"-Amicronaut.processing.group=$project.group",
"-Amicronaut.processing.module=$project.name",
])
}

shadowJar {
mergeServiceFiles()
}

tasks.withType(JavaExec) {
classpath += configurations.developmentOnly
jvmArgs('-XX:TieredStopAtLevel=1', '-Dcom.sun.management.jmxremote')
if (gradle.startParameter.continuous) {
systemProperties(
'micronaut.io.watch.restart':'true',
'micronaut.io.watch.enabled':'true',
"micronaut.io.watch.paths":"src/main"
)
}
}


test {
useJUnitPlatform()
// ignoreFailures: Specifies whether the build should break when the verifications performed by this task fail.
ignoreFailures = true

Expand Down
3 changes: 2 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#Mon Apr 20 18:44:42 CEST 2015
version=2.8.0-SNAPSHOT
version=3.0.0
versioneye.projectkey=maven2_master_server_1
versioneye.projectid=55352d6edc39815abf0007ad
micronautVersion=3.7.2
6 changes: 6 additions & 0 deletions micronaut-cli.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
applicationType: default
defaultPackage: org.terasology
testFramework: junit
sourceLanguage: java
buildTool: gradle
features: [ annotation-api, app-name, docker, file-watch, gradle, http-client, java, java-application, jdbc-hikari, jooq, junit, logback, netty-server, postgres, readme, shade, testcontainers, views-freemarker, yaml ]
15 changes: 15 additions & 0 deletions src/main/java/org/terasology/Application.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Copyright 2020 The Terasology Foundation
// SPDX-License-Identifier: Apache-2.0

package org.terasology;

import io.micronaut.runtime.Micronaut;

public final class Application {
private Application() {
}

public static void main(String[] args) {
Micronaut.run(Application.class, args);
}
}
18 changes: 9 additions & 9 deletions src/main/java/org/terasology/module/RemoteModuleExtension.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,19 +31,11 @@ public enum RemoteModuleExtension {
private final String key;
private final Class<?> valueType;

private RemoteModuleExtension(String key, Class<?> valueType) {
RemoteModuleExtension(String key, Class<?> valueType) {
this.key = key;
this.valueType = valueType;
}

public String getKey() {
return key;
}

public Class<?> getValueType() {
return valueType;
}

public static URL getDownloadUrl(ModuleMetadata meta) {
return meta.getExtension(DOWNLOAD_URL.getKey(), URL.class);
}
Expand All @@ -67,4 +59,12 @@ public static long getArtifactSize(ModuleMetadata meta) {
public static void setArtifactSize(ModuleMetadata meta, long size) {
meta.setExtension(ARTIFACT_SIZE.getKey(), size);
}

public String getKey() {
return key;
}

public Class<?> getValueType() {
return valueType;
}
}
Loading