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}