in core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java [593:683]
protected String getStatusString(int verbosity) {
StatusStringData data = new StatusStringData();
if (submitTimeUtc <= 0) data.setSummary("Not submitted");
else if (!isCancelled() && startTimeUtc <= 0) {
data.setSummary("Submitted for execution");
if (verbosity>0) {
data.appendToSummary(" "+Time.makeTimeStringRoundedSince(submitTimeUtc)+" ago");
}
if (verbosity >= 2 && getExtraStatusText()!=null) {
data.multiLineData.add(""+getExtraStatusText());
}
} else if (isDone()) {
long elapsed = endTimeUtc - submitTimeUtc;
boolean allDone = isDone(true);
String duration = (elapsed>=0 ? " after "+Time.makeTimeStringRounded(elapsed) : allDone ? " but no end time" : "");
if (!allDone) duration += " but not ended";
if (isCancelled()) {
data.setSummary("Cancelled");
if (verbosity >= 1) data.appendToSummary(duration);
computeStatusStringError(verbosity, data);
computeStatusStringActive(verbosity, data);
} else if (isError()) {
data.setSummary("Failed");
if (verbosity >= 1) data.appendToSummary(duration);
computeStatusStringError(verbosity, data);
computeStatusStringActive(verbosity, data);
} else {
data.setSummary("Completed");
if (verbosity>=1) {
Callable<String> valueGetter = () -> {
Object v = get();
if (v == null) {
return null;
} else if (v instanceof String) {
// ensure anything map-like is multiline so sanitization works
if (Strings.isMultiLine((String) v) || ((String) v).contains(": ") || ((String) v).contains("="))
return "\n" + Strings.indent(2, (String) v);
return (String) v;
} else if (Boxing.isPrimitiveOrBoxedObject(v)) {
return ""+v;
} else {
String vs;
try {
vs = BeanWithTypeUtils.newYamlMapper(null, false, null, false).writeValueAsString(v);
if (vs.trim().startsWith("---")) vs = Strings.removeFromStart(vs.trim(), "---").trim();
} catch (Exception e) {
Exceptions.propagateIfFatal(e);
vs = v.toString();
}
return "\n"+Strings.indent(2, vs);
}
};
if (verbosity==1) {
try {
String v = valueGetter.call();
data.appendToSummary(", " +(v==null ? "no return value (null)" : "result: "+abbreviate(v)));
} catch (Exception e) {
data.appendToSummary(", but error accessing result ["+Exceptions.collapseText(e)+"]"); //shouldn't happen
}
} else {
if (verbosity >= 1) data.appendToSummary(duration);
try {
String v = valueGetter.call();
data.multiLineData.add(v==null ? "No return value (null)" : "Result: "+abbreviate(v, 512, true));
} catch (Exception e) {
data.appendToSummary(", but error accessing result"); //shouldn't happen
data.multiLineData.add("Error accessing result: "+e);
}
}
computeStatusStringError(verbosity, data);
computeStatusStringActive(verbosity, data);
}
}
} else {
computeStatusStringActive(verbosity, data);
}
if (Strings.isBlank(data.mainShortSummary)) data.setSummary("Unknown"); //shouldn't happen
if (verbosity<=0) return data.mainShortSummary;
String result = data.mainShortSummary + Strings.join(data.oneLineData, "");
if (verbosity==1) return result;
return MutableList.of(result).appendAll(data.multiLineData).stream().filter(Strings::isNonBlank).map(String::trim)
.collect(Collectors.joining("\n\n"));
}