diff --git a/build.gradle b/build.gradle index 5fc11a06..28d84a5c 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ subprojects { } wrapper { - gradleVersion = '4.8' + gradleVersion = '6.9' distributionType = Wrapper.DistributionType.ALL } @@ -25,4 +25,4 @@ dependencyUpdates.resolutionStrategy = { } } } -} \ No newline at end of file +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 29953ea1..e708b1c0 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3cd8500c..7665b0fa 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index cccdd3d5..4f906e0c 100755 --- a/gradlew +++ b/gradlew @@ -1,5 +1,21 @@ #!/usr/bin/env sh +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + ############################################################################## ## ## Gradle start up script for UN*X @@ -28,7 +44,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -66,6 +82,7 @@ esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -109,10 +126,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath @@ -138,19 +156,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -159,14 +177,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index e95643d6..ac1b06f9 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -35,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -45,28 +64,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/server/build.gradle b/server/build.gradle index aa297ebb..fa973bba 100644 --- a/server/build.gradle +++ b/server/build.gradle @@ -3,8 +3,10 @@ buildscript { mavenCentral() } dependencies { - classpath 'io.spring.gradle:dependency-management-plugin:1.0.6.RELEASE' - classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.5.22.RELEASE' + classpath 'io.spring.gradle:dependency-management-plugin:1.0.11.RELEASE' + classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.6.1' + +// Updating to gradle 7, means moving from this plugin to something else classpath 'se.transmode.gradle:gradle-docker:1.2' } } @@ -13,15 +15,18 @@ plugins { id 'java' id 'idea' id 'eclipse' - id 'org.springframework.boot' version '1.5.22.RELEASE' + id 'org.springframework.boot' version '2.6.1' } apply plugin: 'docker' apply plugin: 'io.spring.dependency-management' +//apply plugin: 'spring-boot-gradle-plugin' -jar { - baseName = 'extender' - version = '0.1.0' +configurations { + // A configuration meant for consumers that need the API of this component + implementation { + canBeResolved = true + } } repositories { @@ -45,20 +50,23 @@ dependencies { exclude module: 'spring-boot-starter-tomcat' } implementation('org.springframework.boot:spring-boot-starter-jetty') - implementation 'org.springframework.boot:spring-boot-starter-security' - implementation 'org.springframework.security:spring-security-test' - implementation('com.samskivert:jmustache:1.14') + implementation('org.springframework.boot:spring-boot-starter-security') + implementation('org.springframework.boot:spring-boot-starter-web') + implementation('org.springframework.boot:spring-boot-starter-data-rest') + implementation('org.springframework.security:spring-security-test') + implementation('com.samskivert:jmustache:1.15') implementation('com.google.guava:guava:27.0-jre') implementation('org.apache.httpcomponents:httpclient:4.5.13') implementation('org.apache.httpcomponents:httpmime:4.5.13') implementation('org.apache.commons:commons-lang3:3.8.1') - implementation 'org.apache.commons:commons-compress:1.21' - implementation('commons-io:commons-io:2.6') + implementation('org.apache.commons:commons-compress:1.21') + implementation('commons-io:commons-io:2.11.0') implementation('commons-fileupload:commons-fileupload:1.3.3') implementation('commons-chain:commons-chain:1.2') implementation('org.springframework.boot:spring-boot-starter-actuator') implementation('org.influxdb:influxdb-java:2.10') implementation('com.amazonaws:aws-java-sdk-s3:1.11.438') + implementation('io.micrometer:micrometer-core:1.8.1') testImplementation('junit:junit:4.12') testImplementation('org.springframework:spring-test') @@ -75,6 +83,40 @@ compileJava { dependsOn createVersionFile } +jar { + baseName = 'extender' + version = '0.1.0' + //enabled = true + archiveClassifier = '' // use empty string to avoid the 'plain' suffix + + manifest { + attributes( + 'Class-Path': configurations.implementation.collect { it.getName() }.join(' '), + 'Main-Class': 'com.defold.extender.ExtenderApplication' + ) + } + from { configurations.implementation.collect { it.isDirectory() ? it : zipTree(it) } } +} + +// task fatJar(type: Jar) { +// baseName = 'extender' +// version = '0.1.0' + +// manifest { +// attributes( +// //'Class-Path': configurations.compile.collect { it.getName() }.join(' '), +// 'Implementation-Title': 'Defold Extender', +// 'Main-Class': 'com.defold.extender.ExtenderApplication' +// ) +// } +// from { +// configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } +// } + +// //from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } +// with jar +// } + task buildDocker(type: Docker) { dependsOn 'build', ':manifestmergetool:mainJar' push = false diff --git a/server/docker-base/Dockerfile b/server/docker-base/Dockerfile index 893b6414..a43961ff 100644 --- a/server/docker-base/Dockerfile +++ b/server/docker-base/Dockerfile @@ -1,24 +1,55 @@ -FROM ubuntu:16.04 - -# We updated to use clang-9 for linux in 1.2.171 -# So once that is the last supported version, we can remove support for GCC5 etc +FROM ubuntu:20.04 # Base stuff +# RUN \ +# echo "LINUX TOOLS + COMPILER" && \ +# dpkg --add-architecture i386 && \ +# apt-get update && \ +# apt-get install -y software-properties-common && \ +# add-apt-repository ppa:openjdk-r/ppa && \ +# apt-get update && \ +# apt-get install -y --no-install-recommends \ +# wget \ +# locales \ +# openjdk-17-jdk \ +# # gcc \ +# # g++ \ +# # gcc-multilib \ +# # g++-multilib \ +# libssl-dev \ +# openssl \ +# libtool \ +# autoconf \ +# automake \ +# uuid-dev \ +# libxi-dev \ +# libopenal-dev \ +# libgl1-mesa-dev \ +# libglw1-mesa-dev \ +# freeglut3-dev \ +# zlib1g:i386 && \ +# unzip \ +# # for use when debugging +# tree \ +# silversearcher-ag \ +# less \ +# nano \ +# # cleanup +# rm -rf /var/lib/apt/lists/* + RUN \ echo "LINUX TOOLS + COMPILER" && \ - dpkg --add-architecture i386 && \ apt-get update && \ apt-get install -y software-properties-common && \ - add-apt-repository ppa:openjdk-r/ppa && \ apt-get update && \ apt-get install -y --no-install-recommends \ wget \ locales \ - openjdk-11-jdk \ - gcc \ - g++ \ - gcc-multilib \ - g++-multilib \ + openjdk-17-jdk \ + # gcc \ + # g++ \ + # gcc-multilib \ + # g++-multilib \ libssl-dev \ openssl \ libtool \ @@ -31,44 +62,46 @@ RUN \ libglw1-mesa-dev \ freeglut3-dev \ unzip \ + # for use when debugging tree \ silversearcher-ag \ less \ nano \ - zlib1g:i386 && \ + && \ # cleanup - rm -rf /var/lib/apt/lists/* + apt-get clean autoclean autoremove -ENV JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64 -# To avoid the mysterious error "Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty" -# # From https://github.com/docker-library/openjdk/blob/master/11/jdk/slim/Dockerfile -RUN \ - apt-get update; \ - apt-get install -y --no-install-recommends \ -# utilities for keeping Debian and OpenJDK CA certificates in sync - ca-certificates p11-kit \ - ; \ -# update "cacerts" bundle to use Debian's CA certificates (and make sure it stays up-to-date with changes to Debian's store) -# see https://github.com/docker-library/openjdk/issues/327 -# http://rabexc.org/posts/certificates-not-working-java#comment-4099504075 -# https://salsa.debian.org/java-team/ca-certificates-java/blob/3e51a84e9104823319abeb31f880580e46f45a98/debian/jks-keystore.hook.in -# https://git.alpinelinux.org/aports/tree/community/java-cacerts/APKBUILD?id=761af65f38b4570093461e6546dcf6b179d2b624#n29 - { \ - echo '#!/usr/bin/env bash'; \ - echo 'set -Eeuo pipefail'; \ - echo 'if ! [ -d "$JAVA_HOME" ]; then echo >&2 "error: missing JAVA_HOME environment variable"; exit 1; fi'; \ -# 8-jdk uses "$JAVA_HOME/jre/lib/security/cacerts" and 8-jre and 11+ uses "$JAVA_HOME/lib/security/cacerts" directly (no "jre" directory) - echo 'cacertsFile=; for f in "$JAVA_HOME/lib/security/cacerts" "$JAVA_HOME/jre/lib/security/cacerts"; do if [ -e "$f" ]; then cacertsFile="$f"; break; fi; done'; \ - echo 'if [ -z "$cacertsFile" ] || ! [ -f "$cacertsFile" ]; then echo >&2 "error: failed to find cacerts file in $JAVA_HOME"; exit 1; fi'; \ - echo 'trust extract --overwrite --format=java-cacerts --filter=ca-anchors --purpose=server-auth "$cacertsFile"'; \ - } > /etc/ca-certificates/update.d/docker-openjdk; \ - chmod +x /etc/ca-certificates/update.d/docker-openjdk; \ - /etc/ca-certificates/update.d/docker-openjdk; \ - \ -# https://github.com/docker-library/openjdk/issues/331#issuecomment-498834472 - find "$JAVA_HOME/lib" -name '*.so' -exec dirname '{}' ';' | sort -u > /etc/ld.so.conf.d/docker-openjdk.conf; \ - ldconfig; +# ENV JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64 + +# # To avoid the mysterious error "Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty" +# # # From https://github.com/docker-library/openjdk/blob/master/11/jdk/slim/Dockerfile +# RUN \ +# apt-get update; \ +# apt-get install -y --no-install-recommends \ +# # utilities for keeping Debian and OpenJDK CA certificates in sync +# ca-certificates p11-kit \ +# ; \ +# # update "cacerts" bundle to use Debian's CA certificates (and make sure it stays up-to-date with changes to Debian's store) +# # see https://github.com/docker-library/openjdk/issues/327 +# # http://rabexc.org/posts/certificates-not-working-java#comment-4099504075 +# # https://salsa.debian.org/java-team/ca-certificates-java/blob/3e51a84e9104823319abeb31f880580e46f45a98/debian/jks-keystore.hook.in +# # https://git.alpinelinux.org/aports/tree/community/java-cacerts/APKBUILD?id=761af65f38b4570093461e6546dcf6b179d2b624#n29 +# { \ +# echo '#!/usr/bin/env bash'; \ +# echo 'set -Eeuo pipefail'; \ +# echo 'if ! [ -d "$JAVA_HOME" ]; then echo >&2 "error: missing JAVA_HOME environment variable"; exit 1; fi'; \ +# # 8-jdk uses "$JAVA_HOME/jre/lib/security/cacerts" and 8-jre and 11+ uses "$JAVA_HOME/lib/security/cacerts" directly (no "jre" directory) +# echo 'cacertsFile=; for f in "$JAVA_HOME/lib/security/cacerts" "$JAVA_HOME/jre/lib/security/cacerts"; do if [ -e "$f" ]; then cacertsFile="$f"; break; fi; done'; \ +# echo 'if [ -z "$cacertsFile" ] || ! [ -f "$cacertsFile" ]; then echo >&2 "error: failed to find cacerts file in $JAVA_HOME"; exit 1; fi'; \ +# echo 'trust extract --overwrite --format=java-cacerts --filter=ca-anchors --purpose=server-auth "$cacertsFile"'; \ +# } > /etc/ca-certificates/update.d/docker-openjdk; \ +# chmod +x /etc/ca-certificates/update.d/docker-openjdk; \ +# /etc/ca-certificates/update.d/docker-openjdk; \ +# \ +# # https://github.com/docker-library/openjdk/issues/331#issuecomment-498834472 +# find "$JAVA_HOME/lib" -name '*.so' -exec dirname '{}' ';' | sort -u > /etc/ld.so.conf.d/docker-openjdk.conf; \ +# ldconfig; # Add extender user @@ -86,7 +119,8 @@ RUN mkdir $PLATFORMSDK_DIR # These packages are downloaded from here: https://github.com/llvm/llvm-project/releases/ # and then uploaded as-is to S3 -RUN wget -q -O - ${DM_PACKAGES_URL}/clang%2Bllvm-10.0.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz | tar xJ -C /usr/local --strip-components=1 +RUN wget -q -O - ${DM_PACKAGES_URL}/clang%2Bllvm-13.0.0-x86_64-linux-gnu-ubuntu-20.04.tar.xz | tar xJ -C /usr/local --strip-components=1 +#RUN wget -q -O - ${DM_PACKAGES_URL}/clang%2Bllvm-10.0.1-x86_64-linux-gnu-ubuntu-20.04.tar.xz | tar xJ -C /usr/local --strip-components=1 # Darwin RUN locale-gen en_US.UTF-8 @@ -114,36 +148,36 @@ RUN \ ENV EMCC_SKIP_SANITY_CHECK 1 -## Emscripten 1.39.16 (from version 1.2.170) -ENV EMSCRIPTEN_SDK_1_39_16 ${PLATFORMSDK_DIR}/emsdk-1.39.16 -ENV EMSCRIPTEN_HOME_1_39_16 ${EMSCRIPTEN_SDK_1_39_16} -ENV EMSCRIPTEN_CONFIG_1_39_16 ${EMSCRIPTEN_HOME_1_39_16}/.emscripten -ENV EMSCRIPTEN_BIN_1_39_16 ${EMSCRIPTEN_HOME_1_39_16}/upstream/emscripten -ENV EMSCRIPTEN_CACHE_1_39_16 /var/extender/emcache_1_39_16 -# Setup a special env variable that will be prefixed to PATH if requested version is 1.39.16 -ENV EMSCRIPTEN_PATH_1_39_16 ${EMSCRIPTEN_HOME_1_39_16}:${EMSCRIPTEN_HOME_1_39_16}/upstream/bin:${EMSCRIPTEN_HOME_1_39_16}/node/12.9.1_64bit/bin:${EMSCRIPTEN_BIN_1_39_16} - -RUN \ - mkdir ${EMSCRIPTEN_SDK_1_39_16} && \ - wget -q -O - ${DM_PACKAGES_URL}/emsdk-1.39.16-linux.tar.gz | tar xz -C ${EMSCRIPTEN_SDK_1_39_16} --strip-components=1 - -RUN \ - ${EMSCRIPTEN_HOME_1_39_16}/emsdk activate sdk-1.39.16-64bit --embedded && \ - EM_CONFIG=$EMSCRIPTEN_CONFIG_1_39_16 EM_CACHE=${EMSCRIPTEN_CACHE_1_39_16} python ${EMSCRIPTEN_BIN_1_39_16}/embuilder.py build SYSTEM MINIMAL && \ - chmod -R 755 ${EMSCRIPTEN_HOME_1_39_16} && \ - chown -R extender: ${EMSCRIPTEN_CACHE_1_39_16} && \ - chown -R extender: ${EMSCRIPTEN_CACHE_1_39_16}.lock +# ## Emscripten 1.39.16 (from version 1.2.170) +# ENV EMSCRIPTEN_SDK_1_39_16 ${PLATFORMSDK_DIR}/emsdk-1.39.16 +# ENV EMSCRIPTEN_HOME_1_39_16 ${EMSCRIPTEN_SDK_1_39_16} +# ENV EMSCRIPTEN_CONFIG_1_39_16 ${EMSCRIPTEN_HOME_1_39_16}/.emscripten +# ENV EMSCRIPTEN_BIN_1_39_16 ${EMSCRIPTEN_HOME_1_39_16}/upstream/emscripten +# ENV EMSCRIPTEN_CACHE_1_39_16 /var/extender/emcache_1_39_16 +# # Setup a special env variable that will be prefixed to PATH if requested version is 1.39.16 +# ENV EMSCRIPTEN_PATH_1_39_16 ${EMSCRIPTEN_HOME_1_39_16}:${EMSCRIPTEN_HOME_1_39_16}/upstream/bin:${EMSCRIPTEN_HOME_1_39_16}/node/12.9.1_64bit/bin:${EMSCRIPTEN_BIN_1_39_16} + +# RUN \ +# mkdir ${EMSCRIPTEN_SDK_1_39_16} && \ +# wget -q -O - ${DM_PACKAGES_URL}/emsdk-1.39.16-linux.tar.gz | tar xz -C ${EMSCRIPTEN_SDK_1_39_16} --strip-components=1 + +# RUN \ +# ${EMSCRIPTEN_HOME_1_39_16}/emsdk activate sdk-1.39.16-64bit --embedded && \ +# EM_CONFIG=$EMSCRIPTEN_CONFIG_1_39_16 EM_CACHE=${EMSCRIPTEN_CACHE_1_39_16} python ${EMSCRIPTEN_BIN_1_39_16}/embuilder.py build SYSTEM MINIMAL && \ +# chmod -R 755 ${EMSCRIPTEN_HOME_1_39_16} && \ +# chown -R extender: ${EMSCRIPTEN_CACHE_1_39_16} && \ +# chown -R extender: ${EMSCRIPTEN_CACHE_1_39_16}.lock ## Emscripten 2.0.11 (from version 1.2.178) RUN \ - add-apt-repository ppa:deadsnakes/ppa && \ - apt-get autoclean && \ - apt-get update && \ - apt-get clean autoclean autoremove && \ - apt-get install -y --no-install-recommends python3.9 && \ - update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1 && \ - update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2 && \ + # add-apt-repository ppa:deadsnakes/ppa && \ + # apt-get autoclean && \ + # apt-get update && \ + # apt-get clean autoclean autoremove && \ + # apt-get install -y --no-install-recommends python3.9 && \ + # update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1 && \ + # update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2 && \ python3 --version ENV EMSCRIPTEN_SDK_2_0_11 ${PLATFORMSDK_DIR}/emsdk-2.0.11 @@ -174,12 +208,13 @@ RUN chmod -R 755 ${EMSCRIPTEN_TEMP_DIR} && chown extender: ${EMSCRIPTEN_TEMP_DIR # The "sed" command below removes the /TEMP_DIR line from the generated configs # We replace it with a folder of our own RUN sed '/TEMP_DIR =/d' ${EMSCRIPTEN_CONFIG_2_0_11} && \ - echo TEMP_DIR = \'${EMSCRIPTEN_TEMP_DIR}\' >> ${EMSCRIPTEN_CONFIG_2_0_11} && \ - sed '/TEMP_DIR =/d' ${EMSCRIPTEN_CONFIG_1_39_16} && \ - echo TEMP_DIR = \'${EMSCRIPTEN_TEMP_DIR}\' >> ${EMSCRIPTEN_CONFIG_1_39_16} + echo TEMP_DIR = \'${EMSCRIPTEN_TEMP_DIR}\' >> ${EMSCRIPTEN_CONFIG_2_0_11} + # && \ + # sed '/TEMP_DIR =/d' ${EMSCRIPTEN_CONFIG_1_39_16} && \ + # echo TEMP_DIR = \'${EMSCRIPTEN_TEMP_DIR}\' >> ${EMSCRIPTEN_CONFIG_1_39_16} -RUN \ - update-alternatives --set python3 /usr/bin/python3.5 +# RUN \ +# update-alternatives --set python3 /usr/bin/python3.5 # @@ -386,7 +421,7 @@ RUN \ apt-add-repository "deb https://dl.winehq.org/wine-builds/ubuntu/ xenial main" && \ dpkg --add-architecture i386 && \ apt-get update && \ - DEBIAN_FRONTEND="noninteractive" apt-get install -y --install-recommends winehq-stable && \ + DEBIAN_FRONTEND="noninteractive" apt-get install -y --install-recommends winehq-stable winetricks && \ apt-get clean autoclean autoremove && \ rm winehq.key @@ -410,8 +445,9 @@ ENV DISPLAY=":1" RUN \ set -xe && \ WINEDLLOVERRIDES="mscoree,mshtml=" xvfb-run wine wineboot && \ - xvfb-run wineserver -w && \ - xvfb-run winetricks -q vcrun2015 + xvfb-run wineserver -w + # xvfb-run wineserver -w && \ + # xvfb-run winetricks -q vcrun2015 RUN \ chown -R extender: $WINEPREFIX @@ -464,13 +500,13 @@ ENV SWIFT_5_VERSION 5.0 # The updated install flow RUN \ apt-get update && \ - apt-get install -y git cmake && \ + apt-get install -y git cmake build-essential && \ cd /tmp && \ TAPITMP=/usr/local/tapi1.6 && \ mkdir $TAPITMP && \ git clone https://github.com/tpoechtrager/apple-libtapi.git && \ cd apple-libtapi && \ - git checkout a66284251b46d591ee4a0cb4cf561b92a0c138d8 && \ + git checkout 664b8414f89612f2dfd35a9b679c345aa5389026 && \ INSTALLPREFIX=$TAPITMP ./build.sh && \ ./install.sh && \ cd .. && \ diff --git a/server/manifestmergetool/build.gradle b/server/manifestmergetool/build.gradle index df71a022..d580abaa 100644 --- a/server/manifestmergetool/build.gradle +++ b/server/manifestmergetool/build.gradle @@ -8,6 +8,16 @@ apply plugin: 'java-library' jar { baseName = '_manifestmergetool' + enabled = true + archiveClassifier = '' // use empty string to avoid the 'plain' suffix +} + + +configurations { + // A configuration meant for consumers that need the API of this component + implementation { + canBeResolved = true + } } task mainJar(type: Jar) { @@ -17,7 +27,7 @@ task mainJar(type: Jar) { attributes 'Main-Class': 'com.defold.manifestmergetool.ManifestMergeTool' } from { - configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } + configurations.implementation.collect { it.isDirectory() ? it : zipTree(it) } } { exclude "META-INF/*.SF" exclude "META-INF/*.DSA" diff --git a/server/scripts/debug_defoldsdk.py b/server/scripts/debug_defoldsdk.py index f94c067c..bfd03c01 100755 --- a/server/scripts/debug_defoldsdk.py +++ b/server/scripts/debug_defoldsdk.py @@ -17,7 +17,10 @@ def get_latest_version(): def download_file(url): print("Downloading %s" % url) tmpfile = '_dl.zip' - os.system("wget -O %s %s" % (tmpfile, url)) + cmd="wget -O %s %s" % (tmpfile, url) + result = os.system(cmd) + if result: + return None return tmpfile def find_or_download_sdk(sha1): @@ -33,8 +36,23 @@ def find_or_download_sdk(sha1): print("Created directory %s" % dirpath) os.makedirs(dirpath) - url = "http://d.defold.com/archive/%s/engine/defoldsdk.zip" % sha1 - tmpfile = download_file(url) + domain=os.environ.get("DM_ARCHIVE_DOMAIN", "d.defold.com") + urls = [ + "http://%s/archive/stable/%s/engine/defoldsdk.zip" % (domain, sha1), + "http://%s/archive/beta/%s/engine/defoldsdk.zip" % (domain, sha1), + "http://%s/archive/dev/%s/engine/defoldsdk.zip" % (domain, sha1), + "http://%s/archive/%s/engine/defoldsdk.zip" % (domain, sha1), + ] + + for url in urls: + tmpfile = download_file(url) + if tmpfile is not None: + break + print("Downloaded from", url.replace(domain, '***')) + + if tmpfile is None or os.stat(tmpfile).st_size == 0: + print("Downloaded file was empty. Are the credentials ok?") + sys.exit(1) shutil.move(tmpfile, path) print("Downloaded %s" % path) diff --git a/server/src/main/java/com/defold/extender/ExtenderApplication.java b/server/src/main/java/com/defold/extender/ExtenderApplication.java index 5b6f1ba7..7f06c26c 100644 --- a/server/src/main/java/com/defold/extender/ExtenderApplication.java +++ b/server/src/main/java/com/defold/extender/ExtenderApplication.java @@ -10,15 +10,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; -import org.springframework.boot.actuate.autoconfigure.ExportMetricWriter; -import org.springframework.boot.actuate.endpoint.MetricsEndpoint; -import org.springframework.boot.actuate.endpoint.MetricsEndpointMetricReader; -import org.springframework.boot.actuate.metrics.writer.GaugeWriter; +//import org.springframework.boot.actuate.autoconfigure.ExportMetricWriter; +// import org.springframework.boot.actuate.endpoint.MetricsEndpoint; +// import org.springframework.boot.actuate.endpoint.MetricsEndpointMetricReader; +//import org.springframework.boot.actuate.metrics.writer.GaugeWriter; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; -import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; -import org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory; -import org.springframework.boot.context.embedded.jetty.JettyServerCustomizer; + +// renamed in 2.x +import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryCustomizer; // previously EmbeddedServletContainerCustomizer +import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; // previously ConfigurableEmbeddedServletContainer +import org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory; // previously JettyEmbeddedServletContainerFactory +import org.springframework.boot.web.embedded.jetty.JettyServerCustomizer; + import org.springframework.context.annotation.Bean; import org.springframework.core.env.Environment; import org.springframework.web.client.RestTemplate; @@ -32,87 +35,90 @@ public class ExtenderApplication { private static final Logger LOGGER = LoggerFactory.getLogger(ExtenderApplication.class); private final Environment environment; - private final int idleTimeout; + //private final int idleTimeout; @Autowired - public ExtenderApplication(Environment environment, @Value("${extender.server.http.idle-timeout}") int idleTimeout) { + //public ExtenderApplication(Environment environment, @Value("${extender.server.http.idle-timeout}") int idleTimeout) { + public ExtenderApplication(Environment environment) { this.environment = environment; - this.idleTimeout = idleTimeout; + //this.idleTimeout = idleTimeout; } public static void main(String[] args) { SpringApplication.run(ExtenderApplication.class, args); } - @Bean - @ExportMetricWriter - GaugeWriter influxMetricsWriter() { - - try { - InfluxDB influxDB = InfluxDBFactory.connect("http://metrics.defold.com:8086", "root", "root"); - - String dbName = "myMetricsDB"; // the name of the datastore you choose - influxDB.createDatabase(dbName); - - InfluxDBMetricWriter.Builder builder = new InfluxDBMetricWriter.Builder(influxDB); - - String hostName; - try { - hostName = InetAddress.getLocalHost().getHostName(); - } catch (UnknownHostException e) { - hostName = "Unknown"; - } - - String environmentString = "local"; - if (this.environment.getActiveProfiles().length > 0) { - environmentString = environment.getActiveProfiles()[0]; - } - - builder - .withDatabaseName(dbName) - .withBatchActions(500) - .withReportingEnvironment(environmentString) - .withReportingHostname(hostName) - .withReportingService("Extender"); - - return builder.build(); - } catch (Exception e) { - LOGGER.warn("Failed to create metrics writer. No metrics will be reported."); - return value -> { /* Just ignore metrics */ }; - } - } - - @Bean - public MetricsEndpointMetricReader metricsEndpointMetricReader(MetricsEndpoint metricsEndpoint) { - return new MetricsEndpointMetricReader(metricsEndpoint); - } - +// TODO: Let's replace with AWS events instead + // @Bean + // @ExportMetricWriter + // GaugeWriter influxMetricsWriter() { + + // try { + // InfluxDB influxDB = InfluxDBFactory.connect("http://metrics.defold.com:8086", "root", "root"); + + // String dbName = "myMetricsDB"; // the name of the datastore you choose + // influxDB.createDatabase(dbName); + + // InfluxDBMetricWriter.Builder builder = new InfluxDBMetricWriter.Builder(influxDB); + + // String hostName; + // try { + // hostName = InetAddress.getLocalHost().getHostName(); + // } catch (UnknownHostException e) { + // hostName = "Unknown"; + // } + + // String environmentString = "local"; + // if (this.environment.getActiveProfiles().length > 0) { + // environmentString = environment.getActiveProfiles()[0]; + // } + + // builder + // .withDatabaseName(dbName) + // .withBatchActions(500) + // .withReportingEnvironment(environmentString) + // .withReportingHostname(hostName) + // .withReportingService("Extender"); + + // return builder.build(); + // } catch (Exception e) { + // LOGGER.warn("Failed to create metrics writer. No metrics will be reported."); + // return value -> { /* Just ignore metrics */ }; + // } + // } + + // @Bean + // public MetricsEndpointMetricReader metricsEndpointMetricReader(MetricsEndpoint metricsEndpoint) { + // return new MetricsEndpointMetricReader(metricsEndpoint); + // } + +//TODO: Let's try to use the jetty property from application.yml instead? // Spring Boot only supports a subset of Jetty configuration props, so configure idle timeout programatically - @Bean - public EmbeddedServletContainerCustomizer customizer() { - return new EmbeddedServletContainerCustomizer() { - - @Override - public void customize(ConfigurableEmbeddedServletContainer container) { - if (container instanceof JettyEmbeddedServletContainerFactory) { - customizeJetty((JettyEmbeddedServletContainerFactory) container); - } - } - - private void customizeJetty(JettyEmbeddedServletContainerFactory jetty) { - jetty.addServerCustomizers((JettyServerCustomizer) server -> { - for (Connector connector : server.getConnectors()) { - if (connector instanceof ServerConnector) { - HttpConnectionFactory connectionFactory = connector - .getConnectionFactory(HttpConnectionFactory.class); - connectionFactory.getHttpConfiguration() - .setIdleTimeout(idleTimeout); - } - } - }); - } - }; - } + // @Bean + // public ServletWebServerFactoryCustomizer customizer() { + // return new ServletWebServerFactoryCustomizer() { + + // @Override + // public void customize(ConfigurableServletWebServerFactory container) { + // if (container instanceof JettyServletWebServerFactory) { + // customizeJetty((JettyServletWebServerFactory) container); + // } + // } + + // private void customizeJetty(JettyServletWebServerFactory jetty) { + // jetty.addServerCustomizers((JettyServerCustomizer) server -> { + // for (Connector connector : server.getConnectors()) { + // if (connector instanceof ServerConnector) { + // HttpConnectionFactory connectionFactory = connector + // .getConnectionFactory(HttpConnectionFactory.class); + // connectionFactory.getHttpConfiguration() + // .setIdleTimeout(idleTimeout); + // } + // } + // }); + // } + // }; + // } @Bean public RestTemplate restTemplate() { diff --git a/server/src/main/java/com/defold/extender/ExtenderController.java b/server/src/main/java/com/defold/extender/ExtenderController.java index 0a170caa..b3315d10 100644 --- a/server/src/main/java/com/defold/extender/ExtenderController.java +++ b/server/src/main/java/com/defold/extender/ExtenderController.java @@ -19,7 +19,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.actuate.metrics.GaugeService; +//import org.springframework.boot.actuate.metrics.GaugeService; +import io.micrometer.core.instrument.MeterRegistry; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -50,7 +51,7 @@ public class ExtenderController { private final DefoldSdkService defoldSdkService; private final DataCacheService dataCacheService; private final GradleService gradleService; - private final GaugeService gaugeService; + private final MeterRegistry gaugeService; private final UserUpdateService userUpdateService; private final RemoteEngineBuilder remoteEngineBuilder; @@ -85,7 +86,7 @@ public ExtenderController(DefoldSdkService defoldSdkService, DataCacheService dataCacheService, GradleService gradleService, UserUpdateService userUpdateService, - @Qualifier("gaugeService") GaugeService gaugeService, + @Qualifier("gaugeService") MeterRegistry gaugeService, RemoteEngineBuilder remoteEngineBuilder, @Value("${extender.remote-builder.enabled}") boolean remoteBuilderEnabled, @Value("${extender.remote-builder.platforms}") String[] remoteBuilderPlatforms, diff --git a/server/src/main/java/com/defold/extender/InfluxDBMetricWriter.java b/server/src/main/java/com/defold/extender/InfluxDBMetricWriter.java index aa027c2b..96fbee1f 100644 --- a/server/src/main/java/com/defold/extender/InfluxDBMetricWriter.java +++ b/server/src/main/java/com/defold/extender/InfluxDBMetricWriter.java @@ -2,12 +2,14 @@ import org.influxdb.InfluxDB; import org.influxdb.dto.Point; -import org.springframework.boot.actuate.metrics.Metric; -import org.springframework.boot.actuate.metrics.writer.GaugeWriter; +// import org.springframework.boot.actuate.metrics.Metric; +// import org.springframework.boot.actuate.metrics.writer.GaugeWriter; +import io.micrometer.core.instrument.MeterRegistry; import java.util.concurrent.TimeUnit; -public class InfluxDBMetricWriter implements GaugeWriter { +/* +public class InfluxDBMetricWriter implements MeterRegistry { private static final String DEFAULT_DATABASE_NAME = "metrics"; private static final int DEFAULT_BATCH_ACTIONS = 500; @@ -93,3 +95,5 @@ Builder withReportingService(String reportingService) { } } } + +*/ diff --git a/server/src/main/java/com/defold/extender/metrics/MetricsWriter.java b/server/src/main/java/com/defold/extender/metrics/MetricsWriter.java index 597ef637..4c9607eb 100644 --- a/server/src/main/java/com/defold/extender/metrics/MetricsWriter.java +++ b/server/src/main/java/com/defold/extender/metrics/MetricsWriter.java @@ -1,34 +1,39 @@ package com.defold.extender.metrics; -import com.defold.extender.Timer; -import org.springframework.boot.actuate.metrics.GaugeService; +//import com.defold.extender.Timer; +//import org.springframework.boot.actuate.metrics.GaugeService; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.util.List; import java.util.Map; import java.util.TreeMap; +import java.util.concurrent.TimeUnit; + +import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.instrument.Counter; +import io.micrometer.core.instrument.Timer; public class MetricsWriter { - private final GaugeService gaugeService; - private final Timer timer; + private final MeterRegistry registry; + private final com.defold.extender.Timer timer; private final Map metrics = new TreeMap<>(); - public MetricsWriter(GaugeService gaugeService, Timer timer) { - this.gaugeService = gaugeService; + public MetricsWriter(MeterRegistry registry, com.defold.extender.Timer timer) { + this.registry = registry; this.timer = timer; this.timer.start(); } - public MetricsWriter(final GaugeService gaugeService) { - this(gaugeService, new Timer()); + public MetricsWriter(final MeterRegistry registry) { + this(registry, new com.defold.extender.Timer()); } private void addMetric(final String name, final long value) { - gaugeService.submit(name, value); + registry.gauge(name, value); metrics.put(name, value); } @@ -77,6 +82,20 @@ public void measureCacheDownload(long downloadSize) { addMetric("job.cache.downloadSize", downloadSize); } + public static void metricsGauge(MeterRegistry registry, String id, long value) { + registry.gauge(id, value); + } + + public static void metricsTimer(MeterRegistry registry, String id, long millis) { + Timer timer = registry.timer(id); + timer.record(millis, TimeUnit.SECONDS); + } + + public static void metricsCounterIncrement(MeterRegistry registry, String id) { + Counter counter = registry.counter(id); + counter.increment(); + } + @Override public String toString() { return "metrics=" + metrics; diff --git a/server/src/main/java/com/defold/extender/services/DefoldSdkService.java b/server/src/main/java/com/defold/extender/services/DefoldSdkService.java index 17cb2a54..f55bf23f 100644 --- a/server/src/main/java/com/defold/extender/services/DefoldSdkService.java +++ b/server/src/main/java/com/defold/extender/services/DefoldSdkService.java @@ -2,13 +2,16 @@ import com.defold.extender.ExtenderException; import com.defold.extender.ZipUtils; +import com.defold.extender.metrics.MetricsWriter; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.actuate.metrics.CounterService; -import org.springframework.boot.actuate.metrics.GaugeService; +//import org.springframework.boot.actuate.metrics.CounterService; +//import org.springframework.boot.actuate.metrics.GaugeService; +import io.micrometer.core.instrument.MeterRegistry; +//import io.micrometer.core.instrument.Counter; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.client.ClientHttpRequest; @@ -42,18 +45,20 @@ public class DefoldSdkService { private final File dynamoHome; private final int cacheSize; - private final CounterService counterService; - private final GaugeService gaugeService; + private final MeterRegistry meterRegistry; + // private final Counter counterSdkGet; + // private final Counter counterSdkGetDownload; @Autowired DefoldSdkService(@Value("${extender.sdk.location}") String baseSdkDirectory, @Value("${extender.sdk.cache-size}") int cacheSize, - CounterService counterService, - GaugeService gaugeService) throws IOException { + MeterRegistry meterRegistry) throws IOException { this.baseSdkDirectory = new File(baseSdkDirectory).toPath(); this.cacheSize = cacheSize; - this.counterService = counterService; - this.gaugeService = gaugeService; + this.meterRegistry = meterRegistry; + // this.counterSdkGet = gaugeService.counter("counter.service.sdk.get"); + // this.counterSdkGetDownload = gaugeService.counter("counter.service.sdk.get.download"); + this.dynamoHome = System.getenv("DYNAMO_HOME") != null ? new File(System.getenv("DYNAMO_HOME")) : null; LOGGER.info("SDK service using directory {} with cache size {}", baseSdkDirectory, cacheSize); @@ -149,7 +154,8 @@ public File getRemoteSdk(String hash) throws IOException, URISyntaxException, Ex .skip(cacheSize) .forEach(this::deleteCachedSdk); - counterService.increment("counter.service.sdk.get.download"); + //counterSdkGetDownload.increment(); + MetricsWriter.metricsCounterIncrement(meterRegistry, "counter.service.sdk.get.download"); } finally { lockFile.delete(); } @@ -176,8 +182,9 @@ public File getRemoteSdk(String hash) throws IOException, URISyntaxException, Ex LOGGER.info("Using Defold SDK version {}", hash); - gaugeService.submit("gauge.service.sdk.get", System.currentTimeMillis() - methodStart); - counterService.increment("counter.service.sdk.get"); + MetricsWriter.metricsTimer(meterRegistry, "gauge.service.sdk.get", System.currentTimeMillis() - methodStart); + MetricsWriter.metricsCounterIncrement(meterRegistry, "counter.service.sdk.get"); + //counterSdkGet.increment(); return new File(sdkDirectory, "defoldsdk"); } diff --git a/server/src/main/java/com/defold/extender/services/GradleService.java b/server/src/main/java/com/defold/extender/services/GradleService.java index 66220a64..239822e1 100644 --- a/server/src/main/java/com/defold/extender/services/GradleService.java +++ b/server/src/main/java/com/defold/extender/services/GradleService.java @@ -5,13 +5,15 @@ import com.defold.extender.ProcessExecutor; import com.defold.extender.TemplateExecutor; import com.defold.extender.ZipUtils; +import com.defold.extender.metrics.MetricsWriter; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.actuate.metrics.CounterService; -import org.springframework.boot.actuate.metrics.GaugeService; +//import org.springframework.boot.actuate.metrics.CounterService; +//import org.springframework.boot.actuate.metrics.GaugeService; +import io.micrometer.core.instrument.MeterRegistry; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.client.ClientHttpRequest; @@ -56,8 +58,7 @@ public class GradleService { private final String gradleHome; private final File baseDirectory; - private final CounterService counterService; - private final GaugeService gaugeService; + private final MeterRegistry meterRegistry; private final String buildGradleTemplateContents; private final String gradlePropertiesTemplateContents; private final String localPropertiesTemplateContents; @@ -72,8 +73,7 @@ private String readFile(String filePath) throws IOException { @Autowired GradleService(@Value("${extender.gradle.cache-size}") int cacheSize, - CounterService counterService, - GaugeService gaugeService) throws IOException { + MeterRegistry meterRegistry) throws IOException { if (GRADLE_USER_HOME != null) { this.gradleHome = GRADLE_USER_HOME; } else { @@ -85,8 +85,7 @@ private String readFile(String filePath) throws IOException { } this.cacheSize = cacheSize; - this.counterService = counterService; - this.gaugeService = gaugeService; + this.meterRegistry = meterRegistry; System.out.println(String.format("GradleService")); @@ -277,7 +276,7 @@ private List downloadDependencies(File cwd) throws IOException, ExtenderEx List unpackedDependencies = unpackDependencies(dependencies); - gaugeService.submit("gauge.service.gradle.get", System.currentTimeMillis() - methodStart); + MetricsWriter.metricsTimer(meterRegistry, "gauge.service.gradle.get", System.currentTimeMillis() - methodStart); return unpackedDependencies; } diff --git a/server/src/main/resources/application.yml b/server/src/main/resources/application.yml index 691af514..cf1cf090 100644 --- a/server/src/main/resources/application.yml +++ b/server/src/main/resources/application.yml @@ -2,6 +2,9 @@ server: port: 9000 + jetty: + connection-idle-timeout: 600000 + extender: sdk: location: /var/extender/sdk diff --git a/server/src/test/java/com/defold/extender/metrics/MetricsWriterTest.java b/server/src/test/java/com/defold/extender/metrics/MetricsWriterTest.java index a86717f3..8e28ab88 100644 --- a/server/src/test/java/com/defold/extender/metrics/MetricsWriterTest.java +++ b/server/src/test/java/com/defold/extender/metrics/MetricsWriterTest.java @@ -3,7 +3,8 @@ import com.defold.extender.Timer; import org.junit.Before; import org.junit.Test; -import org.springframework.boot.actuate.metrics.GaugeService; +//import org.springframework.boot.actuate.metrics.GaugeService; +import io.micrometer.core.instrument.MeterRegistry; import javax.servlet.http.HttpServletRequest; @@ -18,12 +19,12 @@ public class MetricsWriterTest { private MetricsWriter metricsWriter; - private GaugeService gaugeService; + private MeterRegistry gaugeService; private Timer timer; @Before public void setUp() { - gaugeService = mock(GaugeService.class); + gaugeService = mock(MeterRegistry.class); timer = mock(Timer.class); metricsWriter = new MetricsWriter(gaugeService, timer); @@ -98,4 +99,4 @@ public void measureCacheDownload() { verify(gaugeService).submit("job.cache.download", 12345L); verify(gaugeService).submit("job.cache.downloadSize", 987234L); } -} \ No newline at end of file +} diff --git a/server/src/test/java/com/defold/extender/services/DefoldSDKServiceTest.java b/server/src/test/java/com/defold/extender/services/DefoldSDKServiceTest.java index dfa32f69..7496500e 100644 --- a/server/src/test/java/com/defold/extender/services/DefoldSDKServiceTest.java +++ b/server/src/test/java/com/defold/extender/services/DefoldSDKServiceTest.java @@ -5,7 +5,8 @@ import org.junit.Ignore; import org.junit.Test; import org.springframework.boot.actuate.metrics.CounterService; -import org.springframework.boot.actuate.metrics.GaugeService; +//import org.springframework.boot.actuate.metrics.GaugeService; +import io.micrometer.core.instrument.MeterRegistry; import java.io.File; import java.io.IOException; @@ -25,7 +26,7 @@ public class DefoldSDKServiceTest { @Test @Ignore("SDK too large to download on every test round.") public void t() throws IOException, URISyntaxException, ExtenderException { - DefoldSdkService defoldSdkService = new DefoldSdkService("/tmp/defoldsdk", 3, mock(CounterService.class), mock(GaugeService.class)); + DefoldSdkService defoldSdkService = new DefoldSdkService("/tmp/defoldsdk", 3, mock(CounterService.class), mock(MeterRegistry.class)); File sdk = defoldSdkService.getSdk("f7778a8f59ef2a8dda5d445f471368e8bd1cb1ac"); System.out.println(sdk.getCanonicalFile()); } @@ -34,7 +35,7 @@ public void t() throws IOException, URISyntaxException, ExtenderException { @Ignore("SDK too large to download on every test round.") public void onlyStoreTheNewest() throws IOException, URISyntaxException, ExtenderException { int cacheSize = 3; - DefoldSdkService defoldSdkService = new DefoldSdkService("/tmp/defoldsdk", cacheSize, mock(CounterService.class), mock(GaugeService.class)); + DefoldSdkService defoldSdkService = new DefoldSdkService("/tmp/defoldsdk", cacheSize, mock(CounterService.class), mock(MeterRegistry.class)); String[] sdksToDownload = { "fe2b689302e79b7cf8c0bc7d934f23587b268c8a", @@ -58,7 +59,7 @@ public void onlyStoreTheNewest() throws IOException, URISyntaxException, Extende @Test public void testGetSDK() throws IOException, URISyntaxException, ExtenderException { - DefoldSdkService defoldSdkService = new DefoldSdkService("/tmp/defoldsdk", 3, mock(CounterService.class), mock(GaugeService.class)); + DefoldSdkService defoldSdkService = new DefoldSdkService("/tmp/defoldsdk", 3, mock(CounterService.class), mock(MeterRegistry.class)); File dir = new File("/tmp/defoldsdk/notexist"); assertFalse(Files.exists(dir.toPath()));