Skip to content
Permalink
Browse files
[JENKINS-29705] Exposed thread dump over HTTP
Originally-Committed-As: 5e8fdbdc91f9539324a7a57e1e97ef70f813351f
  • Loading branch information
kohsuke committed Nov 16, 2015
1 parent 64e33a0 commit 69810b1cb27155de32698c43f9e61ff70a1a15e9
@@ -76,6 +76,7 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -99,11 +100,14 @@
import java.beans.Introspector;
import java.util.LinkedHashMap;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.annotation.concurrent.GuardedBy;

import org.acegisecurity.Authentication;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.jboss.marshalling.reflect.SerializableClassRegistry;

import static java.util.Arrays.asList;
import static org.jenkinsci.plugins.workflow.cps.persistence.PersistenceContext.*;
import org.jenkinsci.plugins.workflow.flow.FlowExecutionList;
import org.kohsuke.accmod.restrictions.DoNotUse;
@@ -367,9 +371,9 @@ private CpsScript parseScript() throws IOException {
s.execution = this;
if (false) {
System.out.println("scriptName="+s.getClass().getName());
System.out.println(Arrays.asList(s.getClass().getInterfaces()));
System.out.println(Arrays.asList(s.getClass().getDeclaredFields()));
System.out.println(Arrays.asList(s.getClass().getDeclaredMethods()));
System.out.println(asList(s.getClass().getInterfaces()));
System.out.println(asList(s.getClass().getDeclaredFields()));
System.out.println(asList(s.getClass().getDeclaredMethods()));
}
return s;
}
@@ -813,6 +817,12 @@ void notifyListeners(FlowNode node) {
}
}

@Nonnull
@Override
public Collection<? extends Action> createActions() {
return asList(new CpsThreadDumpAction());
}

@Override public String toString() {
return "CpsFlowExecution[" + owner + "]";
}
@@ -0,0 +1,25 @@
package org.jenkinsci.plugins.workflow.cps;

import hudson.model.Action;

/**
* Shows thread dump for {@link CpsFlowExecution}
*
* @author Kohsuke Kawaguchi
*/
public final class CpsThreadDumpAction implements Action {
@Override
public String getIconFileName() {
return "gear.png";
}

@Override
public String getDisplayName() {
return "Thread Dump";
}

@Override
public String getUrlName() {
return "threadDump";
}
}
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<?jelly escape-by-default='true'?>
<!--
~ The MIT License
~
~ Copyright (c) 2013-2014, CloudBees, Inc.
~
~ Permission is hereby granted, free of charge, to any person obtaining a copy
~ of this software and associated documentation files (the "Software"), to deal
~ in the Software without restriction, including without limitation the rights
~ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
~ copies of the Software, and to permit persons to whom the Software is
~ furnished to do so, subject to the following conditions:
~
~ The above copyright notice and this permission notice shall be included in
~ all copies or substantial portions of the Software.
~
~ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
~ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
~ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
~ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
~ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
~ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
~ THE SOFTWARE.
-->

<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:i="jelly:fmt">
<l:layout title="${%Thread Dump}">
<l:main-panel>
<j:set var="td" value="${it.toString()}"/>

<h1>
${%Thread Dump}
<l:copyButton text="${td}" message="${%Thread dump copied to clipboard}"/>
</h1>

<pre class="console">
${td}
</pre>
</l:main-panel>
</l:layout>
</j:jelly>

0 comments on commit 69810b1

Please sign in to comment.