protected String getStatusString()

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"));
    }