Skip to content

Commit

Permalink
Move to Kotlin and have more config support
Browse files Browse the repository at this point in the history
  • Loading branch information
blootsvoets committed Oct 6, 2022
1 parent 400513d commit b21cc82
Show file tree
Hide file tree
Showing 48 changed files with 1,008 additions and 1,427 deletions.
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ VOLUME /schema/conf
VOLUME /etc/confluent/

# Copy bash file
COPY docker/specifications.exclude /etc/radar-schemas/specifications.exclude
COPY docker/config.yaml /etc/radar-schemas-tools/
COPY docker/topic_init.sh ./docker/init.sh ./docker/list_aggregated.sh ./docker/list_raw.sh /usr/bin/

USER 101
Expand Down
8 changes: 8 additions & 0 deletions docker/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
kafka: {}

topics: {}

sources: {}

schemas: {}

9 changes: 0 additions & 9 deletions docker/init.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,6 @@ set -e
rsync -a /schema/original/commons /schema/original/specifications /schema/merged
rsync -a /schema/conf/ /schema/merged

EXCLUDE_FILE=${EXCLUDE_FILE:-/etc/radar-schemas/specifications.exclude}
if [ -e "$EXCLUDE_FILE" ]; then
echo "Excluding unnecessary files"
while read -r exclude; do
rm -vf /schema/merged/specifications/$exclude
done < "$EXCLUDE_FILE"
echo "Excluding unnecessary files DONE."
fi

if [ $# != 0 ]; then
exec "$@"
fi
Empty file removed docker/specifications.exclude
Empty file.
8 changes: 4 additions & 4 deletions java-sdk/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
org.gradle.jvmargs=-XX:MaxMetaspaceSize=512m

kotlinVersion=1.7.10
kotlinVersion=1.7.20
dokkaVersion=1.7.10
nexusPluginVersion=1.1.0
dependencyUpdateVersion=0.42.0
Expand All @@ -11,11 +11,11 @@ avroVersion=1.11.1
argparseVersion=0.9.0
radarJerseyVersion=0.9.0
junitVersion=5.9.1
confluentVersion=7.2.1
kafkaVersion=7.2.1-ce
confluentVersion=7.2.2
kafkaVersion=7.2.2-ce
okHttpVersion=4.10.0
radarCommonsVersion=0.15.0
slf4jVersion=2.0.2
slf4jVersion=2.0.3
javaxValidationVersion=2.0.1.Final
jsoupVersion=1.15.3
log4j2Version=2.19.0
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.radarbase.schema.service

import jakarta.inject.Singleton
import org.glassfish.jersey.internal.inject.AbstractBinder
import org.glassfish.jersey.server.ResourceConfig
import org.radarbase.jersey.enhancer.JerseyResourceEnhancer
import org.radarbase.jersey.filter.Filters.logResponse
import org.radarbase.schema.specification.SourceCatalogue

class SourceCatalogueJerseyEnhancer(private val sourceCatalogue: SourceCatalogue) :
JerseyResourceEnhancer {
override val classes: Array<Class<*>> = arrayOf(
logResponse,
SourceCatalogueService::class.java
)

override val packages: Array<String> = emptyArray()

override fun AbstractBinder.enhance() {
bindFactory { sourceCatalogue }
.to(SourceCatalogue::class.java)
.`in`(Singleton::class.java)
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
package org.radarbase.schema.service

import net.sourceforge.argparse4j.ArgumentParsers
import net.sourceforge.argparse4j.helper.HelpScreenException
import net.sourceforge.argparse4j.inf.ArgumentParserException
import net.sourceforge.argparse4j.inf.Namespace
import org.radarbase.jersey.GrizzlyServer
import org.radarbase.jersey.config.ConfigLoader.createResourceConfig
import org.radarbase.jersey.enhancer.Enhancers.exception
import org.radarbase.jersey.enhancer.Enhancers.health
import org.radarbase.jersey.enhancer.Enhancers.mapper
import org.radarbase.jersey.enhancer.Enhancers.okhttp
import org.radarbase.schema.specification.SourceCatalogue
import org.radarbase.schema.specification.SourceCatalogue.Companion.load
import org.radarbase.schema.specification.config.ToolConfig
import org.radarbase.schema.specification.config.loadToolConfig
import org.slf4j.LoggerFactory
import java.io.Closeable
import java.io.IOException
import java.net.URI
import java.nio.file.Paths
import kotlin.system.exitProcess

/**
* This server provides a webservice to share the SourceType Catalogues provided in *.yml files as
* [org.radarbase.schema.service.SourceCatalogueService.SourceTypeResponse]
*/
class SourceCatalogueServer(private val serverPort: Int) : Closeable {
private lateinit var server: GrizzlyServer

fun start(sourceCatalogue: SourceCatalogue) {
val config = createResourceConfig(
listOf(
mapper,
okhttp,
exception,
health,
SourceCatalogueJerseyEnhancer(sourceCatalogue)
)
)
server = GrizzlyServer(URI.create("http://0.0.0.0:$serverPort/"), config, false)
server.listen()
}

override fun close() {
server.shutdown()
}

companion object {
private val logger = LoggerFactory.getLogger(SourceCatalogueServer::class.java)

init {
System.setProperty(
"java.util.logging.manager",
"org.apache.logging.log4j.jul.LogManager"
)
}

@JvmStatic
fun main(args: Array<String>) {
val logger = LoggerFactory.getLogger(SourceCatalogueServer::class.java)
val parser = ArgumentParsers.newFor("radar-catalog-server")
.addHelp(true)
.build()
.description("RADAR catalog server for source types")
parser.addArgument("-p", "--port")
.help("server port")
.type(Int::class.java).default = 9010
parser.addArgument("-c", "--config")
.help("Configuration YAML")
.type(String::class.java)
parser.addArgument("root")
.help("Root path of the source catalogue")

val parsedArgs: Namespace = try {
parser.parseArgs(args)
} catch (e: HelpScreenException) {
parser.printHelp()
exitProcess(0)
} catch (e: ArgumentParserException) {
logger.error("Failed to parse arguments: {}", e.message)
logger.error(parser.formatUsage())
exitProcess(1)
}
val config = loadConfig(parsedArgs.getString("config"))
val sourceCatalogue: SourceCatalogue = try {
load(Paths.get(parsedArgs.getString("root")), config.schemas)
} catch (e: IOException) {
logger.error("Failed to load source catalogue", e)
logger.error(parser.formatUsage())
exitProcess(1)
}

// Processing state cannot be imported by ManagementPortal at this time.
sourceCatalogue.passiveSources.stream()
.flatMap { s -> s.data.stream() }
.forEach { d -> d.processingState = null }

SourceCatalogueServer(parsedArgs.getInt("port")).use { server ->
server.start(sourceCatalogue)
}
}

private fun loadConfig(fileName: String): ToolConfig = try {
loadToolConfig(fileName)
} catch (ex: IOException) {
logger.error("Cannot configure radar-catalog-server from config file {}: {}",
fileName, ex.message)
exitProcess(1)
}
}
}
Loading

0 comments on commit b21cc82

Please sign in to comment.