Skip to content
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
13 changes: 9 additions & 4 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,13 @@ allprojects {
}

ext {
floggerVersion = '0.6'
junitPlatformVersion = '5.7.2'
protobufJavaVersion = '3.17.3'
micrometerVersion = 'latest.integration'
curatorVersion = '5.2.0'
grpcVersion = '1.41.0'
floggerVersion = '0.7.1'
junitPlatformVersion = '5.8.1'
protobufJavaVersion = '3.18.1'
micrometerVersion = '1.7.4'
consuleClientVersion = '1.4.5'
javaxAnnotationVersion = '1.3.2'
recordBuilderVersion = '28'
}
4 changes: 4 additions & 0 deletions deploy/kubernetes/namespace.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: jsheets
56 changes: 56 additions & 0 deletions deploy/kubernetes/server.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: server
namespace: jsheets
labels:
app: server
spec:
selector:
matchLabels:
app: server
replicas: 3
template:
metadata:
name: server
labels:
app: server
spec:
containers:
- name: server
image: ehenoma/jsheets:latest
ports:
- containerPort: 8080
hostPort: 8080
env:
- name: JSHEETS_SERVER_PORT
value: "8080"
---
apiVersion: v1
kind: Service
metadata:
name: server-service
namespace: jsheets
spec:
selector:
app: server
clusterIP: None
ports:
- name: http
port: 8080
targetPort: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: server-ingress
namespace: jsheets
spec:
rules:
- http:
paths:
- path: "/"
pathType: Prefix
backend:
service:
name: server-service
5 changes: 5 additions & 0 deletions deploy/minimal/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Minimal Deployment

Contains the server itself and a document store.
The server is responsible for evaluating snippets, which is not
ideal for public/highly frequented websites.
66 changes: 66 additions & 0 deletions deploy/minimal/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
version: '3.7'
services:
server:
image: ehenoma/jsheets:latest
build:
context: ../../
dockerfile: ./server/deploy/Dockerfile
restart: always
environment:
JSHEETS_SERVER_PORT: 8080
JSHEETS_MONGODB_URI: mongodb://root:root@document-store/jsheets
JSHEETS_ZOOKEEPER_CONNECTION_STRING: zookeeper:2181
ports:
- "8080:8080"
networks:
- document-store
- zookeeper
- runtime
document-store:
image: mongo:latest
container_name: document-store
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: root
networks:
- document-store
zookeeper:
image: zookeeper
restart: always
hostname: zookeeper
ports:
- "2181:2181"
environment:
ZOO_MY_ID: 1
ZOO_PORT: 2181
networks:
- zookeeper
zookeeper-web:
image: elkozmon/zoonavigator:latest
restart: unless-stopped
environment:
HTTP_PORT: 9000
ports:
- "9000:9000"
networks:
- zookeeper
runtime:
image: ehenoma/jsheets-runtime:latest
build:
context: ../../
dockerfile: ./runtime/deploy/Dockerfile
restart: always
container_name: runtime
hostname: runtime
environment:
JSHEETS_RUNTIME_SERVER_PORT: 8080
JSHEETS_RUNTIME_ZOOKEEPER_CONNECTION_STRING: zookeeper:2181
JSHEETS_RUNTIME_SERVICE_ADVERTISED_HOST: runtime:8080
networks:
- zookeeper
- runtime
networks:
document-store:
zookeeper:
runtime:
13 changes: 13 additions & 0 deletions docker-compose.build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Make sure to run 'gradle build copyDependencies' before building this
version: '3.7'
services:
server:
image: ehenoma/jsheets:latest
build:
dockerfile: server/deploy/Dockerfile
context: .
runtime:
image: ehenoma/jsheets-latest:latest
build:
dockerfile: runtime/deploy/Dockerfile
context: .
27 changes: 0 additions & 27 deletions docker-compose.dev.yml

This file was deleted.

22 changes: 0 additions & 22 deletions docker-compose.yml

This file was deleted.

34 changes: 34 additions & 0 deletions evaluation/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
plugins {
id 'java'
}

group 'dev.jsheets'
version '0.1.0'

sourceCompatibility = 16
targetCompatibility = 16

repositories {
mavenCentral()
}

ext {
asmVersion = '9.2'
}

dependencies {
implementation project(':protocol')
implementation "org.ow2.asm:asm:$asmVersion"
implementation "com.google.protobuf:protobuf-java-util:$protobufJavaVersion"
implementation "com.google.flogger:flogger:$floggerVersion"
testImplementation "org.junit.jupiter:junit-jupiter-api:$junitPlatformVersion"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitPlatformVersion"
testRuntimeOnly "com.google.flogger:flogger-slf4j-backend:$floggerVersion"
compileOnly "io.soabase.record-builder:record-builder-core:$recordBuilderVersion"
annotationProcessor "io.soabase.record-builder:record-builder-processor:$recordBuilderVersion"
}

test {
useJUnitPlatform()
jvmArgs += ['--add-opens', 'jdk.jshell/jdk.jshell=ALL-UNNAMED']
}
55 changes: 55 additions & 0 deletions evaluation/src/main/java/jsheets/config/CamelCase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package jsheets.config;

public final class CamelCase {
private CamelCase() {}

@FunctionalInterface
public interface Case {
static Case upper() {
return Character::toUpperCase;
}

static Case lower() {
return Character::toLowerCase;
}

static Case same() {
return character -> character;
}

char apply(char character);
}

public static String convert(
String input,
String separator,
Case characterCase
) {
return switch (input.length()) {
case 0 -> input;
case 1 -> String.valueOf(characterCase.apply(input.charAt(0)));
default -> convertWithSufficientLength(input, separator, characterCase);
};
}

private static String convertWithSufficientLength(
String input,
String separator,
Case characterCase
) {
var output = new StringBuilder(input.length());
char firstCharacter = input.charAt(0);
boolean lastCapitalized = Character.isUpperCase(firstCharacter);
output.append(characterCase.apply(firstCharacter));
for (int index = 1; index < input.length(); index++) {
char character = input.charAt(index);
boolean capitalized = Character.isUpperCase(character);
if (capitalized && !lastCapitalized) {
output.append(separator);
}
lastCapitalized = capitalized;
output.append(characterCase.apply(character));
}
return output.toString();
}
}
43 changes: 43 additions & 0 deletions evaluation/src/main/java/jsheets/config/CombinedConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package jsheets.config;

import java.util.Arrays;
import java.util.Objects;

public final class CombinedConfig implements Config {
/**
* Combines the {@code configs}, prioritized based on descending order.
* <p>
* If config {@code Ci} contains a value for any given key, then it is
* returned, otherwise config {@code Ci+1} is queried until no configs remain
* and a <italic>missing field</italic> is returned.
*
* @param configs Ordered set of sources.
* @return Config that merges the values of all {@code configs}.
*/
public static Config of(Config... configs) {
Objects.requireNonNull(configs);
return new CombinedConfig(configs.clone());
}

private final Config[] configs;

private CombinedConfig(Config[] configs) {
this.configs = configs;
}

@Override
public <T> Field<T> lookup(Key<T> key) {
for (var config : configs) {
var field = config.lookup(key);
if (field.exists()) {
return field;
}
}
return new MissingField<>(key);
}

@Override
public String toString() {
return "CombinedSource(%s)".formatted(Arrays.toString(configs));
}
}
Loading