On Thu, Nov 13, 2025 at 11:35 AM Mark Thomas <[email protected]> wrote:
>
> On 13/11/2025 10:30, [email protected] wrote:
> > This is an automated email from the ASF dual-hosted git repository.
> >
> > markt pushed a commit to branch main
> > in repository https://gitbox.apache.org/repos/asf/tomcat.git
> >
> >
> > The following commit(s) were added to refs/heads/main by this push:
> >       new 3dca097687 Fix complete status output with a failed context
> > 3dca097687 is described below
> >
> > commit 3dca097687e935e57d28e9b915f8d8a4b3d3c0a5
> > Author: Mark Thomas <[email protected]>
> > AuthorDate: Thu Nov 13 10:29:49 2025 +0000
> >
> >      Fix complete status output with a failed context
>
> Before I back port this, what do folks think about adding stateName to
> the output?
>
> It changes the HTML output but no-one should be parsing that (that is
> what the JSON is for).
>
> It adds a property to the JSON output but that should be OK. Anyone
> parsing the JSON output should just ignore the new property.
>
> In summary, I think this is OK to back port but I wanted to see what
> other folks thought.

+1

Rémy

> Mark
>
>
> > ---
> >   .../apache/catalina/manager/StatusTransformer.java | 40 
> > ++++++++++++++++------
> >   webapps/docs/changelog.xml                         |  5 +++
> >   2 files changed, 34 insertions(+), 11 deletions(-)
> >
> > diff --git a/java/org/apache/catalina/manager/StatusTransformer.java 
> > b/java/org/apache/catalina/manager/StatusTransformer.java
> > index dd543520c1..bf0ab3d75c 100644
> > --- a/java/org/apache/catalina/manager/StatusTransformer.java
> > +++ b/java/org/apache/catalina/manager/StatusTransformer.java
> > @@ -34,6 +34,7 @@ import javax.management.ObjectName;
> >
> >   import jakarta.servlet.http.HttpServletResponse;
> >
> > +import org.apache.catalina.LifecycleState;
> >   import org.apache.tomcat.util.json.JSONFilter;
> >   import org.apache.tomcat.util.security.Escape;
> >
> > @@ -795,6 +796,8 @@ public class StatusTransformer {
> >               contextName = "";
> >           }
> >
> > +        Object stateName = mBeanServer.getAttribute(objectName, 
> > "stateName");
> > +
> >           if (mode == 0) {
> >
> >               writer.print("<h1>");
> > @@ -803,12 +806,19 @@ public class StatusTransformer {
> >               writer.print("</a>");
> >
> >               writer.print("<p>");
> > -            Object startTime = mBeanServer.getAttribute(objectName, 
> > "startTime");
> > -            writer.print(" Start time: " + new Date(((Long) 
> > startTime).longValue()));
> > -            writer.print(" Startup time: ");
> > -            writer.print(formatTime(mBeanServer.getAttribute(objectName, 
> > "startupTime"), false));
> > -            writer.print(" TLD scan time: ");
> > -            writer.print(formatTime(mBeanServer.getAttribute(objectName, 
> > "tldScanTime"), false));
> > +            writer.print("State: " + stateName);
> > +            if (!LifecycleState.FAILED.name().equals(stateName)) {
> > +                /*
> > +                 * If in the FAILED state, the context will be an instance 
> > of FailedContext so the attributes normally
> > +                 * requested for a running context won't be available.
> > +                 */
> > +                Object startTime = mBeanServer.getAttribute(objectName, 
> > "startTime");
> > +                writer.print(" Start time: " + new Date(((Long) 
> > startTime).longValue()));
> > +                writer.print(" Startup time: ");
> > +                
> > writer.print(formatTime(mBeanServer.getAttribute(objectName, 
> > "startupTime"), false));
> > +                writer.print(" TLD scan time: ");
> > +                
> > writer.print(formatTime(mBeanServer.getAttribute(objectName, 
> > "tldScanTime"), false));
> > +            }
> >               if (managerON != null) {
> >                   writeManager(writer, managerON, mBeanServer, mode);
> >               }
> > @@ -829,11 +839,19 @@ public class StatusTransformer {
> >           } else if (mode == 2) {
> >               indent(writer, 2).append('{').println();
> >               appendJSonValue(indent(writer, 3), "name", 
> > JSONFilter.escape(JSONFilter.escape(name))).append(',');
> > -            appendJSonValue(writer, "startTime",
> > -                    new Date(((Long) mBeanServer.getAttribute(objectName, 
> > "startTime")).longValue()).toString())
> > -                    .append(',');
> > -            appendJSonValue(writer, "startupTime", 
> > mBeanServer.getAttribute(objectName, "startupTime")).append(',');
> > -            appendJSonValue(writer, "tldScanTime", 
> > mBeanServer.getAttribute(objectName, "tldScanTime"));
> > +            appendJSonValue(writer, "stateName", stateName);
> > +            if (!LifecycleState.FAILED.name().equals(stateName)) {
> > +                /*
> > +                 * If in the FAILED state, the context will be an instance 
> > of FailedContext so the attributes normally
> > +                 * requested for a running context won't be available.
> > +                 */
> > +                writer.append(',');
> > +                appendJSonValue(writer, "startTime",
> > +                        new Date(((Long) 
> > mBeanServer.getAttribute(objectName, "startTime")).longValue()).toString())
> > +                        .append(',');
> > +                appendJSonValue(writer, "startupTime", 
> > mBeanServer.getAttribute(objectName, "startupTime")).append(',');
> > +                appendJSonValue(writer, "tldScanTime", 
> > mBeanServer.getAttribute(objectName, "tldScanTime"));
> > +            }
> >               if (managerON != null) {
> >                   writeManager(writer, managerON, mBeanServer, mode);
> >               }
> > diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
> > index 30cbe95124..0923e3c935 100644
> > --- a/webapps/docs/changelog.xml
> > +++ b/webapps/docs/changelog.xml
> > @@ -304,6 +304,11 @@
> >     <subsection name="Web applications">
> >       <changelog>
> >         <!-- Entries for backport and removal before 12.0.0-M1 below this 
> > line -->
> > +      <fix>
> > +        Manager: Fix abrupt truncation of the HTML and JSON complete server
> > +        status output if one or more of the web applications failed to 
> > start.
> > +        (markt)
> > +      </fix>
> >       </changelog>
> >     </subsection>
> >     <subsection name="Other">
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to