Skip to content

Commit

Permalink
Service improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
Krystian Panek committed Nov 10, 2020
1 parent 8024322 commit 4b619a8
Show file tree
Hide file tree
Showing 12 changed files with 79 additions and 13 deletions.
1 change: 1 addition & 0 deletions src/asset/localInstance/defaults/service/systemd.conf
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ LimitNOFILE={{ instance.serviceOpts['limitNoFile'] }}
KillMode=none

ExecStart={{instance.dir}}/service/start.sh
ExecStartPost=/bin/sleep 5s
ExecStop=-{{instance.dir}}/service/stop.sh

[Install]
Expand Down
2 changes: 2 additions & 0 deletions src/asset/localInstance/defaults/start.bat
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
set JAVA_EXECUTABLE={{ java.executablePath }}

set CQ_PORT={{instance.httpPort}}
set CQ_RUNMODE={{instance.runModesString}}
set CQ_JVM_OPTS={{instance.jvmOptsString}}
Expand Down
2 changes: 2 additions & 0 deletions src/asset/localInstance/defaults/start.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#!/bin/sh

export JAVA_EXECUTABLE='{{ java.executablePath }}'

export CQ_PORT={{instance.httpPort}}
export CQ_RUNMODE='{{instance.runModesString}}'
export CQ_JVM_OPTS='{{instance.jvmOptsString}}'
Expand Down
2 changes: 2 additions & 0 deletions src/asset/localInstance/defaults/status.bat
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
set JAVA_EXECUTABLE={{ java.executablePath }}

call crx-quickstart\bin\status.bat
2 changes: 2 additions & 0 deletions src/asset/localInstance/defaults/status.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#!/bin/sh

export JAVA_EXECUTABLE='{{ java.executablePath }}'

chmod u+x crx-quickstart/bin/status
./crx-quickstart/bin/status
2 changes: 2 additions & 0 deletions src/asset/localInstance/defaults/stop.bat
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
set JAVA_EXECUTABLE={{ java.executablePath }}

call crx-quickstart/bin/stop.bat
2 changes: 2 additions & 0 deletions src/asset/localInstance/defaults/stop.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#!/bin/sh

export JAVA_EXECUTABLE='{{ java.executablePath }}'

chmod u+x crx-quickstart/bin/stop
./crx-quickstart/bin/stop
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.cognifide.gradle.aem.common

import com.cognifide.gradle.aem.AemExtension
import com.cognifide.gradle.aem.common.instance.JavaOptions
import com.cognifide.gradle.aem.common.utils.LineSeparator
import com.cognifide.gradle.common.utils.using
import org.gradle.internal.os.OperatingSystem

open class CommonOptions(private val aem: AemExtension) {
Expand Down Expand Up @@ -55,4 +57,11 @@ open class CommonOptions(private val aem: AemExtension) {
convention(aem.project.provider { if (OperatingSystem.current().isWindows) ".bat" else "" })
aem.prop.string("executableExtension")?.let { set(it) }
}

/**
* Configure Java for running AEM instance.
*/
val java by lazy { JavaOptions(aem) }

fun java(options: JavaOptions.() -> Unit) = java.using(options)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.cognifide.gradle.aem.common.instance

import com.cognifide.gradle.aem.AemExtension
import java.io.File

class JavaOptions(aem: AemExtension) {

val homeDir = aem.obj.dir {
set(File(System.getProperty("java.home")))
}

val homePath get() = homeDir.get().asFile.absolutePath

val executableFile = aem.obj.file {
set(homeDir.file("bin/java"))
}

val executablePath get() = executableFile.get().asFile.absolutePath
}
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ class LocalInstance private constructor(aem: AemExtension) : Instance(aem) {
return if (os.isWindows) {
Script(this, listOf("cmd", "/C"), dir.resolve("$name.bat"), quickstartDir.resolve("bin/$name.bat"))
} else {
Script(this, listOf("sh"), dir.resolve(name), quickstartDir.resolve("bin/$name"))
Script(this, listOf("sh"), dir.resolve("$name.sh"), quickstartDir.resolve("bin/$name"))
}
}

Expand Down Expand Up @@ -263,6 +263,18 @@ class LocalInstance private constructor(aem: AemExtension) : Instance(aem) {
result
}

// Use java executable path explicitly to make instance working even when running from non-interactive shells (e.g as systemd service).
aem.project.fileTree(dir)
.matching { it.include(localManager.executableFiles.get()) }
.forEach { file ->
FileOperations.amendFile(file) {
it.replace("java ", when (file.extension) {
"bat" -> "%JAVA_EXECUTABLE% "
else -> "\$JAVA_EXECUTABLE "
})
}
}

// Ensure that 'logs' directory exists
logsDir.mkdirs()
}
Expand Down Expand Up @@ -306,7 +318,11 @@ class LocalInstance private constructor(aem: AemExtension) : Instance(aem) {
}

private fun expandFiles() {
val propertiesAll = mapOf("instance" to this) + properties + localManager.expandProperties.get()
val propertiesAll = mapOf(
"instance" to this,
"java" to aem.commonOptions.java
) + properties + localManager.expandProperties.get()

aem.project.fileTree(dir)
.matching { it.include(localManager.expandFiles.get()) }
.forEach { file ->
Expand All @@ -332,7 +348,7 @@ class LocalInstance private constructor(aem: AemExtension) : Instance(aem) {

private fun makeFilesExecutable() {
aem.project.fileTree(dir)
.matching { it.include(localManager.executableFiles.get()) }
.matching { it.include(localManager.executableFiles.get()).exclude("**/*.bat") }
.forEach { FileOperations.makeExecutable(it) }
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,9 @@ class LocalInstanceManager(internal val aem: AemExtension) : Serializable {
/**
* System service related options.
*/
val service by lazy { Service(aem) }
val service by lazy { ServiceOptions(aem) }

fun service(options: Service.() -> Unit) = service.using(options)
fun service(options: ServiceOptions.() -> Unit) = service.using(options)

fun resolveFiles() {
logger.info("Resolving local instance files")
Expand Down Expand Up @@ -158,12 +158,15 @@ class LocalInstanceManager(internal val aem: AemExtension) : Serializable {
*/
val expandFiles = aem.obj.strings {
convention(listOf(
"start.bat",
"stop.bat",
"start.sh",
"stop.sh",
"*.sh",
"*.bat",
"service/*.sh",
"service/*.conf",
"service/*.sh"
"crx-quickstart/bin/*.sh",
"crx-quickstart/bin/*.bat",
"crx-quickstart/bin/start",
"crx-quickstart/bin/status",
"crx-quickstart/bin/stop"
))
}

Expand All @@ -173,7 +176,13 @@ class LocalInstanceManager(internal val aem: AemExtension) : Serializable {
val executableFiles = aem.obj.strings {
convention(listOf(
"*.sh",
"service/*.sh"
"*.bat",
"service/*.sh",
"crx-quickstart/bin/*.sh",
"crx-quickstart/bin/*.bat",
"crx-quickstart/bin/start",
"crx-quickstart/bin/status",
"crx-quickstart/bin/stop"
))
}

Expand Down Expand Up @@ -570,7 +579,7 @@ class LocalInstanceManager(internal val aem: AemExtension) : Serializable {
try {
logger.debug("Examining Java properly installed")

val result = ProcBuilder("java", "-version")
val result = ProcBuilder(aem.commonOptions.java.executablePath, "-version")
.withWorkingDirectory(rootDir.get().asFile.apply { mkdirs() })
.withTimeoutMillis(statusTimeout.get())
.withExpectedExitStatuses(0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import com.cognifide.gradle.aem.AemExtension
/**
* System service related options.
*/
class Service(private val aem: AemExtension) {
class ServiceOptions(private val aem: AemExtension) {

val user = aem.obj.string {
convention("aem")
Expand Down

0 comments on commit 4b619a8

Please sign in to comment.