Skip to content

Commit a567711

Browse files
authored
Merge pull request #61 from Cognifide/await-delay-with-progress
Await delay with instance states visible
2 parents c07bedf + 4a0acd4 commit a567711

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66
}
77

88
group 'com.cognifide.gradle'
9-
version '2.0.4'
9+
version '2.0.5'
1010
description = 'Gradle AEM Plugin'
1111
defaultTasks = ['clean', 'publishToMavenLocal']
1212

src/main/kotlin/com/cognifide/gradle/aem/AemConfig.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import org.gradle.util.ConfigureUtil
1616
import java.io.File
1717
import java.io.Serializable
1818
import java.util.*
19+
import java.util.concurrent.TimeUnit
1920

2021
/**
2122
* Aggregated collection of AEM related configuration.
@@ -263,14 +264,14 @@ open class AemConfig(project: Project) : Serializable {
263264
* actual operation being performed on AEM like starting JCR package installation or even creating launchpad.
264265
*/
265266
@Input
266-
var awaitDelay: Int = 5000
267+
var awaitDelay: Long = TimeUnit.SECONDS.toMillis(3)
267268

268269
/**
269270
* Time in milliseconds used as interval between next instance stability checks being performed.
270271
* Optimization could be necessary only when instance is heavily loaded.
271272
*/
272273
@Input
273-
var awaitInterval: Int = 1000
274+
var awaitInterval: Long = TimeUnit.SECONDS.toMillis(1)
274275

275276
/**
276277
* After each await interval, instance stability check is being performed.

src/main/kotlin/com/cognifide/gradle/aem/instance/InstanceActions.kt

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,17 @@ object InstanceActions {
1818

1919
if (config.awaitDelay > 0) {
2020
logger.info("Delaying due to pending operations on instance(s).")
21+
2122
Behaviors.waitUntil(config.awaitInterval, { timer ->
23+
val instanceStates = instances.map { InstanceState(project, it) }
24+
progressLogger.progress(progressFor(instanceStates, timer))
25+
2226
return@waitUntil (timer.elapsed < config.awaitDelay)
2327
})
2428
}
2529

30+
logger.info("Checking stability of instance(s).")
31+
2632
var lastInstanceStates = -1
2733
Behaviors.waitUntil(config.awaitInterval, { timer ->
2834
val instanceStates = instances.map { InstanceState(project, it) }
@@ -31,8 +37,7 @@ object InstanceActions {
3137
timer.reset()
3238
}
3339

34-
val instanceProgress = instanceStates.joinToString(" | ") { progressFor(it, timer.ticks, config.awaitTimes) }
35-
progressLogger.progress(instanceProgress)
40+
progressLogger.progress(progressFor(instanceStates, config, timer))
3641

3742
if (config.awaitTimes > 0 && timer.ticks > config.awaitTimes) {
3843
logger.warn("Instance(s) are not stable. Timeout reached after ${Formats.duration(timer.elapsed)}")
@@ -50,6 +55,12 @@ object InstanceActions {
5055
progressLogger.completed()
5156
}
5257

58+
private fun progressFor(instanceStates: List<InstanceState>, timer: Behaviors.Timer) =
59+
instanceStates.joinToString(" | ") { progressFor(it, timer.ticks, 0) }
60+
61+
private fun progressFor(instanceStates: List<InstanceState>, config: AemConfig, timer: Behaviors.Timer) =
62+
instanceStates.joinToString(" | ") { progressFor(it, timer.ticks, config.awaitTimes) }
63+
5364
private fun progressFor(it: InstanceState, tick: Long, maxTicks: Long): String {
5465
return "${it.instance.name}: ${progressIndicator(it, tick, maxTicks)} ${it.bundleState.statsWithLabels} [${it.bundleState.stablePercent}]"
5566
}
@@ -61,7 +72,7 @@ object InstanceActions {
6172
" "
6273
}
6374

64-
if (tick.toDouble() / maxTicks.toDouble() > 0.1) {
75+
if (maxTicks > 0 && (tick.toDouble() / maxTicks.toDouble() > 0.1)) {
6576
indicator += " [$tick/$maxTicks tt]"
6677
}
6778

0 commit comments

Comments
 (0)