/* * RHQ Management Platform * Copyright (C) 2005-2008 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.rhq.enterprise.gui.inventory.resource; import org.rhq.core.domain.resource.Agent; import org.rhq.core.gui.util.FacesContextUtility; import org.rhq.enterprise.gui.legacy.ParamConstants; import org.rhq.enterprise.server.agentclient.AgentClient; import org.rhq.enterprise.server.auth.SubjectManagerLocal; import org.rhq.enterprise.server.core.AgentManagerLocal; import org.rhq.enterprise.server.util.LookupUtil; /** * A JSF managed bean that can ping an agent managing a RHQ resource. * * @author John Mazzitelli */ public class PingAgentUIBean { public static final String MANAGED_BEAN_NAME = "PingAgentUIBean"; private Boolean pingResults = null; private Agent agent = null; private AgentManagerLocal agentManager = LookupUtil.getAgentManager(); private SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager(); public PingAgentUIBean() { } public Agent getAgent() { if (agent == null) { getData(); } return agent; } public boolean getPingResults() { if (pingResults == null) { getData(); } return pingResults; } public String getRemoteEndpointWrapped() { // some browsers (firefox in particular) won't wrap unless you put breaks in the string Agent theAgent = getAgent(); if (theAgent != null) { String remoteEndpoint = theAgent.getRemoteEndpoint(); if (remoteEndpoint != null) { return remoteEndpoint.replaceAll("&", " &"); } else { return "!no remote endpoint associated with this resource!"; } } else { return "!no agent associated with this resource!"; } } private void getData() { try { int resourceId = FacesContextUtility.getRequiredRequestParameter(ParamConstants.RESOURCE_ID_PARAM, Integer.class); agent = agentManager.getAgentByResourceId(subjectManager.getOverlord(), resourceId); if (agent == null) { throw new IllegalStateException("No agent is associated with the resource with id " + resourceId + "."); } AgentClient client = agentManager.getAgentClient(agent); pingResults = client.ping(5000L); } catch (Throwable t) { pingResults = Boolean.FALSE; } } }