Skip to content

Commit 96ac018

Browse files
committed
Evaluator image stub
1 parent b53415a commit 96ac018

File tree

6 files changed

+138
-0
lines changed

6 files changed

+138
-0
lines changed

eval/evaluator/Dockerfile

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
FROM amazon/aws-lambda-java:latest
2+
3+
COPY build/libs/jprof_by_bot-eval-evaluator-all.jar ${LAMBDA_TASK_ROOT}/lib/
4+
5+
RUN yum -y install unzip tar gzip xz && \
6+
yum -y clean all && \
7+
rm -rf /var/cache
8+
9+
RUN curl -L https://github.com/JetBrains/kotlin/releases/download/v1.5.31/kotlin-compiler-1.5.31.zip --output /tmp/kotlin.zip --silent && \
10+
unzip /tmp/kotlin.zip -d /tmp && \
11+
mv /tmp/kotlinc /opt/kotlin && \
12+
rm /tmp/kotlin.zip
13+
14+
RUN curl -L https://download.java.net/java/GA/jdk17/0d483333a00540d886896bac774ff48b/35/GPL/openjdk-17_linux-x64_bin.tar.gz --output /tmp/java.tar.gz --silent && \
15+
mkdir /opt/java && \
16+
tar -xf /tmp/java.tar.gz -C /opt/java --strip-components 1 && \
17+
rm /tmp/java.tar.gz
18+
19+
RUN curl -L https://nodejs.org/dist/v16.11.0/node-v16.11.0-linux-x64.tar.xz --output /tmp/node.tar.xz --silent && \
20+
mkdir /opt/node && \
21+
tar -xf /tmp/node.tar.xz -C /opt/node --strip-components 1 && \
22+
rm /tmp/node.tar.xz
23+
24+
ENV PATH="/opt/node/bin:${PATH}"
25+
RUN npm install -g [email protected]
26+
27+
RUN curl -L https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tar.xz --output /tmp/python.tar.xz --silent && \
28+
mkdir /opt/python && \
29+
tar -xf /tmp/python.tar.xz -C /opt/python --strip-components 1 && \
30+
rm /tmp/python.tar.xz
31+
32+
RUN curl -L https://golang.org/dl/go1.17.2.linux-amd64.tar.gz --output /tmp/go.tar.gz --silent && \
33+
mkdir /opt/go && \
34+
tar -xf /tmp/go.tar.gz -C /opt/go --strip-components 1 && \
35+
rm /tmp/go.tar.gz
36+
37+
CMD [ "by.jprof.telegram.bot.eval.evaluator.Evaluator::handleRequest" ]

eval/evaluator/build.gradle.kts

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
plugins {
2+
kotlin("jvm")
3+
id("com.github.johnrengelman.shadow")
4+
}
5+
6+
dependencies {
7+
api(project.projects.eval.dto)
8+
implementation(libs.bundles.aws.lambda)
9+
implementation(libs.koin.core)
10+
implementation(libs.kotlinx.serialization.json)
11+
implementation(libs.bundles.log4j)
12+
13+
testImplementation(libs.junit.jupiter.api)
14+
testImplementation(libs.junit.jupiter.params)
15+
testRuntimeOnly(libs.junit.jupiter.engine)
16+
testRuntimeOnly(libs.log4j.core)
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package by.jprof.telegram.bot.eval.evaluator
2+
3+
import by.jprof.telegram.bot.eval.dto.EvalEvent
4+
import by.jprof.telegram.bot.eval.dto.EvalResponse
5+
import by.jprof.telegram.bot.eval.dto.Language
6+
import by.jprof.telegram.bot.eval.evaluator.config.jsonModule
7+
import com.amazonaws.services.lambda.runtime.Context
8+
import com.amazonaws.services.lambda.runtime.RequestStreamHandler
9+
import kotlinx.serialization.ExperimentalSerializationApi
10+
import kotlinx.serialization.decodeFromString
11+
import kotlinx.serialization.json.Json
12+
import kotlinx.serialization.json.encodeToStream
13+
import org.apache.logging.log4j.LogManager
14+
import org.koin.core.component.KoinComponent
15+
import org.koin.core.component.inject
16+
import org.koin.core.context.startKoin
17+
import java.io.InputStream
18+
import java.io.OutputStream
19+
20+
@ExperimentalSerializationApi
21+
@Suppress("unused")
22+
class Evaluator : RequestStreamHandler, KoinComponent {
23+
companion object {
24+
private val logger = LogManager.getLogger(Evaluator::class.java)
25+
}
26+
27+
init {
28+
startKoin {
29+
modules(
30+
jsonModule
31+
)
32+
}
33+
}
34+
35+
private val json: Json by inject()
36+
37+
override fun handleRequest(input: InputStream, output: OutputStream, context: Context) {
38+
val payload = input.bufferedReader().use { it.readText() }
39+
40+
logger.debug("Payload: {}", payload)
41+
42+
val evalEvent = json.decodeFromString<EvalEvent>(payload)
43+
44+
logger.debug("Parsed event: {}", evalEvent)
45+
46+
val evalResponse = EvalResponse(Language.UNKNOWN)
47+
48+
output.buffered().use { json.encodeToStream(evalResponse, it) }
49+
}
50+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package by.jprof.telegram.bot.eval.evaluator.config
2+
3+
import kotlinx.serialization.json.Json
4+
import org.koin.dsl.module
5+
6+
val jsonModule = module {
7+
single {
8+
Json {
9+
encodeDefaults = false
10+
ignoreUnknownKeys = true
11+
}
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Configuration status="WARN" packages="com.amazonaws.services.lambda.runtime.log4j2">
3+
<Appenders>
4+
<Lambda name="Lambda">
5+
<JsonLayout>
6+
<Complete>false</Complete>
7+
<Compact>true</Compact>
8+
<KeyValuePair key="AWSRequestId" value="$${ctx:AWSRequestId}"/>
9+
</JsonLayout>
10+
</Lambda>
11+
</Appenders>
12+
<Loggers>
13+
<Logger name="by.jprof.telegram.bot" level="${env:LOG_THRESHOLD:-INFO}" additivity="false">
14+
<AppenderRef ref="Lambda"/>
15+
</Logger>
16+
<Root level="${env:LOG_ROOT_THRESHOLD:-WARN}">
17+
<AppenderRef ref="Lambda"/>
18+
</Root>
19+
</Loggers>
20+
</Configuration>

settings.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@ include(":quizoji")
2222
include(":quizoji:dynamodb")
2323
include(":eval")
2424
include(":eval:dto")
25+
include(":eval:evaluator")
2526
include(":runners:lambda")

0 commit comments

Comments
 (0)