001/* 002 * (C) Copyright 2006-2009 Nuxeo SAS (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * Nuxeo - initial API and implementation 016 * 017 * $Id$ 018 */ 019package org.nuxeo.ecm.admin.monitoring; 020 021import java.io.Serializable; 022import java.util.ArrayList; 023import java.util.List; 024 025import org.apache.commons.logging.Log; 026import org.apache.commons.logging.LogFactory; 027import org.jboss.seam.ScopeType; 028import org.jboss.seam.annotations.Factory; 029import org.jboss.seam.annotations.In; 030import org.jboss.seam.annotations.Name; 031import org.jboss.seam.annotations.Scope; 032import org.jboss.seam.annotations.web.RequestParameter; 033import org.nuxeo.ecm.core.api.NuxeoPrincipal; 034import org.nuxeo.ecm.core.management.api.AdministrativeStatus; 035import org.nuxeo.ecm.core.management.api.AdministrativeStatusManager; 036import org.nuxeo.ecm.core.management.api.GlobalAdministrativeStatusManager; 037import org.nuxeo.ecm.core.management.api.ProbeInfo; 038import org.nuxeo.ecm.core.management.api.ProbeManager; 039import org.nuxeo.runtime.api.Framework; 040 041/** 042 * Seam Bean that wraps {@link AdministrativeStatusManager} and {@link ProbeManager} services to provide a JSF UI. 043 * 044 * @author tiry 045 */ 046@Name("monitoringAction") 047@Scope(ScopeType.PAGE) 048public class MonitoringActionBean implements Serializable { 049 050 public static final String NUXEO_SERVER_IS_ACTIVE = "nuxeoServiceIsActive"; 051 052 public static final String NUXEO_SERVER_MESSAGE = "org.nuxeo.ecm.deactivatedServerMessage"; 053 054 protected static final Log log = LogFactory.getLog(MonitoringActionBean.class); 055 056 private static final long serialVersionUID = 1L; 057 058 @In(create = true) 059 protected NuxeoPrincipal currentNuxeoPrincipal; 060 061 @RequestParameter("serviceIdentifier") 062 protected String statusIdentifierToEdit; 063 064 @RequestParameter("probeName") 065 protected String probeName; 066 067 protected String newStatusMessage; 068 069 protected String newStatusValue; 070 071 protected AdministrativeStatus editableStatus; 072 073 public AdministrativeStatus getEditableStatus() { 074 return editableStatus; 075 } 076 077 protected AdministrativeStatusManager getStatusManager() { 078 return Framework.getLocalService(AdministrativeStatusManager.class); 079 } 080 081 public List<String> listNuxeoInstances() { 082 return Framework.getLocalService(GlobalAdministrativeStatusManager.class).listInstanceIds(); 083 } 084 085 @Factory(value = "isMultiServerInstallation", scope = ScopeType.EVENT) 086 public boolean isMultiServerInstallation() { 087 return listNuxeoInstances().size() > 1; 088 } 089 090 public List<AdministrativeStatus> getAdministrativeStatuses() { 091 List<AdministrativeStatus> statuses = getStatusManager().getAllStatuses(); 092 for (AdministrativeStatus status : statuses) { 093 log.info("Status : " + status.getLabel() + "=>" + status.getState()); 094 } 095 return statuses; 096 } 097 098 public void editStatus() { 099 editableStatus = getStatusManager().getStatus(statusIdentifierToEdit); 100 newStatusMessage = editableStatus.getMessage(); 101 if (editableStatus.isActive()) { 102 newStatusValue = AdministrativeStatus.PASSIVE; 103 } else { 104 newStatusValue = AdministrativeStatus.ACTIVE; 105 } 106 } 107 108 public void saveStatus() { 109 if (editableStatus != null) { 110 String serviceId = editableStatus.getServiceIdentifier(); 111 changeStatus(serviceId, newStatusMessage, newStatusValue); 112 resetEdit(); 113 } 114 } 115 116 public void cancelEdit() { 117 resetEdit(); 118 } 119 120 public void resetEdit() { 121 editableStatus = null; 122 newStatusMessage = null; 123 newStatusValue = null; 124 } 125 126 public void changeStatus(String serviceId, String message, String state) { 127 getStatusManager().setStatus(serviceId, state, message, currentNuxeoPrincipal.getName()); 128 } 129 130 public List<ProbeInfo> getProbeInfos() { 131 List<ProbeInfo> infos = new ArrayList<ProbeInfo>(); 132 ProbeManager pm = Framework.getLocalService(ProbeManager.class); 133 infos.addAll(pm.getAllProbeInfos()); 134 return infos; 135 } 136 137 public void runProbe() { 138 ProbeManager pm = Framework.getLocalService(ProbeManager.class); 139 pm.runProbe(probeName); 140 } 141 142 public void runAllProbes() { 143 ProbeManager pm = Framework.getLocalService(ProbeManager.class); 144 pm.runAllProbes(); 145 } 146 147 public String getNewStatusMessage() { 148 return newStatusMessage; 149 } 150 151 public void setNewStatusMessage(String newStatusMessage) { 152 this.newStatusMessage = newStatusMessage; 153 } 154 155 public String getNewStatusValue() { 156 return newStatusValue; 157 } 158 159 public void setNewStatusValue(String newStatusValue) { 160 this.newStatusValue = newStatusValue; 161 } 162 163}