diff --git a/core/src/main/java/jenkins/management/AdministrativeMonitorsDecorator.java b/core/src/main/java/jenkins/management/AdministrativeMonitorsDecorator.java index 1c4b1f01cf69fc3d1c5fa40d73e258c96f2fd931..5d88cf74b97e7526c4b6cc5b9f2570f61d9be947 100644 --- a/core/src/main/java/jenkins/management/AdministrativeMonitorsDecorator.java +++ b/core/src/main/java/jenkins/management/AdministrativeMonitorsDecorator.java @@ -28,12 +28,16 @@ import hudson.Functions; import hudson.diagnosis.ReverseProxySetupMonitor; import hudson.model.AdministrativeMonitor; import hudson.model.PageDecorator; +import hudson.util.HttpResponses; import hudson.util.HudsonIsLoading; import hudson.util.HudsonIsRestarting; import jenkins.model.Jenkins; +import net.sf.json.JSON; +import net.sf.json.JSONObject; import org.kohsuke.accmod.Restricted; import org.kohsuke.accmod.restrictions.NoExternalUse; import org.kohsuke.stapler.Ancestor; +import org.kohsuke.stapler.HttpResponse; import org.kohsuke.stapler.Stapler; import org.kohsuke.stapler.StaplerRequest; @@ -57,6 +61,9 @@ public class AdministrativeMonitorsDecorator extends PageDecorator { // otherwise this would be added to every internal context menu building request ignoredJenkinsRestOfUrls.add("contextMenu"); + + // don't show here to allow admins to disable malfunctioning monitors via AdministrativeMonitorsDecorator + ignoredJenkinsRestOfUrls.add("configure"); } @Override @@ -94,10 +101,6 @@ public class AdministrativeMonitorsDecorator extends PageDecorator { return false; } - if (getActiveAdministrativeMonitorsCount() == 0) { - return false; - } - StaplerRequest req = Stapler.getCurrentRequest(); if (req == null) { @@ -131,6 +134,10 @@ public class AdministrativeMonitorsDecorator extends PageDecorator { } } + if (getActiveAdministrativeMonitorsCount() == 0) { + return false; + } + return true; } } \ No newline at end of file diff --git a/core/src/main/resources/jenkins/management/AdministrativeMonitorsDecorator/footer.jelly b/core/src/main/resources/jenkins/management/AdministrativeMonitorsDecorator/footer.jelly index 76f3406f5dd5915d7d6d6eda8f5c7087582c5a8b..c4809218dec257646ce9985d08ce84fb10a3dd5f 100644 --- a/core/src/main/resources/jenkins/management/AdministrativeMonitorsDecorator/footer.jelly +++ b/core/src/main/resources/jenkins/management/AdministrativeMonitorsDecorator/footer.jelly @@ -24,121 +24,9 @@ THE SOFTWARE. - - +
- + ${it.activeAdministrativeMonitorsCount}
diff --git a/core/src/main/resources/jenkins/management/AdministrativeMonitorsDecorator/footer.properties b/core/src/main/resources/jenkins/management/AdministrativeMonitorsDecorator/footer.properties new file mode 100644 index 0000000000000000000000000000000000000000..60f6fe569480c5a58b2b391b1c5c96d075c485c8 --- /dev/null +++ b/core/src/main/resources/jenkins/management/AdministrativeMonitorsDecorator/footer.properties @@ -0,0 +1 @@ +tooltip=There are {0} active administrative monitors. \ No newline at end of file diff --git a/core/src/main/resources/jenkins/management/AdministrativeMonitorsDecorator/resources.css b/core/src/main/resources/jenkins/management/AdministrativeMonitorsDecorator/resources.css new file mode 100644 index 0000000000000000000000000000000000000000..21aad475e01a8b3548446f09f89c929633250ddd --- /dev/null +++ b/core/src/main/resources/jenkins/management/AdministrativeMonitorsDecorator/resources.css @@ -0,0 +1,70 @@ +#visible-am-container { + float: right; +} +#visible-am-button { + text-align: center; + font-size: 20px; + font-weight: bold; + background-color: #e01716; + color: #fff;; + margin: 0; + line-height: 40px; + text-decoration: none; + min-width: 2em; + display: inline-block; + position: relative; + transition: all .1s; +} +#visible-am-button:hover, #visible-am-button:focus, #visible-am-button:active { + background: #e23635; +} +#visible-am-container.visible #visible-am-button { + box-shadow: inset 0px 1px 14px rgba(0,0,0,.5); +} +#visible-am-container div#visible-am-list { + position: absolute; + top: 35px; + right: 2%; + margin-left:2%; + height: auto; + z-index: 0; + padding: 2em; + border: 1px solid #aa; + text-align: left; + display: block; + background-color: #fff; + border-radius: 5px; + box-shadow: 0 7px 20px rgba(0,0,0,.1); + transition: all .15s cubic-bezier(.84,.03,.21,.96); + opacity: 0; + transform: scale(0); +} +#visible-am-container.visible div#visible-am-list { + opacity: 1; + transform: scale(1); + z-index: 1000; +} +#visible-am-container #visible-am-button:after { + content: ''; + display: inline-block; + position: absolute; + bottom: -5px; + left: 32%; + width: 0; + height: 0; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #fff; + opacity: 0; + transition: all .05s; +} +#visible-am-container.visible #visible-am-button:after { + opacity: 1; + bottom: 4px; + transition: all .25s; +} +#visible-am-container .am-message { + display: block; + line-height: 1.4em; + margin-bottom: 1.4em; +} \ No newline at end of file diff --git a/core/src/main/resources/jenkins/management/AdministrativeMonitorsDecorator/resources.js b/core/src/main/resources/jenkins/management/AdministrativeMonitorsDecorator/resources.js new file mode 100644 index 0000000000000000000000000000000000000000..a11957cfea9b6c21110dca0a74d70437d7487edf --- /dev/null +++ b/core/src/main/resources/jenkins/management/AdministrativeMonitorsDecorator/resources.js @@ -0,0 +1,39 @@ +function amCloser(e) { + var list = document.getElementById('visible-am-list'); + var el = e.target; + while (el) { + if (el === list) { + return; // clicked in the list + } + el = el.parentElement; + } + hideVisibleAmList(); +}; +function amEscCloser(e) { + if (e.keyCode == 27) { + amCloser(e); + } +}; +function amContainer() { + return document.getElementById('visible-am-container'); +}; +function hideVisibleAmList(e) { + amContainer().classList.remove('visible'); + document.removeEventListener('click', amCloser); + document.removeEventListener('keydown', amEscCloser); +} +function showVisibleAmList(e) { + amContainer().classList.add('visible'); + setTimeout(function() { + document.addEventListener('click', amCloser); + document.addEventListener('keydown', amEscCloser); + }, 1); +} +function toggleVisibleAmList(e) { + if (amContainer().classList.contains('visible')) { + hideVisibleAmList(e); + } else { + showVisibleAmList(e); + } + e.preventDefault(); +} \ No newline at end of file