modules/plugins/jboss-as-7/pom.xml | 13 modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ModClusterContextComponent.java | 2 modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ModClusterContextDiscoveryComponent.java | 2 modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/modcluster/ProxyInfo.java | 349 ++++++++++ 4 files changed, 351 insertions(+), 15 deletions(-)
New commits: commit 3ad5f3a16684cbdc02bce1d75a1606a85f99ef5c Author: Simeon Pinder spinder@redhat.com Date: Wed May 23 16:52:33 2012 -0400
[BZ 823624] refactor to no longer depend upon presence or components from mod_cluster for various reasons.
diff --git a/modules/plugins/jboss-as-7/pom.xml b/modules/plugins/jboss-as-7/pom.xml index 865042b..f0a7f3d 100644 --- a/modules/plugins/jboss-as-7/pom.xml +++ b/modules/plugins/jboss-as-7/pom.xml @@ -65,14 +65,6 @@ <version>${jboss.sasl.version}</version> </dependency>
- <!-- Earlier AS4/5 modcluster components --> - <dependency> - <groupId>${rhq.groupId}</groupId> - <artifactId>modcluster-plugin</artifactId> - <version>${project.version}</version> - <scope>provided</scope> - </dependency> - <!-- === Test Deps === -->
<dependency> @@ -128,11 +120,6 @@ <artifactId>jboss-sasl</artifactId> </artifactItem>
- <artifactItem> - <groupId>${rhq.groupId}</groupId> - <artifactId>modcluster-plugin</artifactId> - <version>${project.version}</version> - </artifactItem> </artifactItems> <outputDirectory>${project.build.outputDirectory}/lib</outputDirectory> </configuration> diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ModClusterContextComponent.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ModClusterContextComponent.java index 5239e1a..836b6a7 100644 --- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ModClusterContextComponent.java +++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ModClusterContextComponent.java @@ -6,7 +6,7 @@ import org.rhq.core.pluginapi.availability.AvailabilityFacet; import org.rhq.modules.plugins.jbossas7.json.Address; import org.rhq.modules.plugins.jbossas7.json.Operation; import org.rhq.modules.plugins.jbossas7.json.Result; -import org.rhq.plugins.modcluster.model.ProxyInfo; +import org.rhq.modules.plugins.jbossas7.modcluster.ProxyInfo;
/** * Component class for ModCluster Webapp Context diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ModClusterContextDiscoveryComponent.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ModClusterContextDiscoveryComponent.java index 02a7e68..eed0c3b 100644 --- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ModClusterContextDiscoveryComponent.java +++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ModClusterContextDiscoveryComponent.java @@ -30,7 +30,7 @@ import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext; import org.rhq.modules.plugins.jbossas7.json.Address; import org.rhq.modules.plugins.jbossas7.json.Operation; import org.rhq.modules.plugins.jbossas7.json.Result; -import org.rhq.plugins.modcluster.model.ProxyInfo; +import org.rhq.modules.plugins.jbossas7.modcluster.ProxyInfo;
/** * Discovers mod_cluster contexts using the proxyInfo details from as7. diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/modcluster/ProxyInfo.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/modcluster/ProxyInfo.java new file mode 100644 index 0000000..3a57a1b --- /dev/null +++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/modcluster/ProxyInfo.java @@ -0,0 +1,349 @@ +package org.rhq.modules.plugins.jbossas7.modcluster; + +/* + * 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. + */ + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/**This is a clone of org.rhq.plugins.modcluster.model.ProxyInfo from modules/plugins/mod-cluster/... pulled + * into this plugin to avoid complicated build/install/deploy/runtime dependency issues + * between the two plugins. + * + * Simple parser for the raw proxy information provided by mod_cluster. + * + * @author Simeon Pinder + */ +public class ProxyInfo { + + private Map<String, Node> availableNodes = new HashMap<String, Node>(); + private Map<String, Vhost> availableVhosts = new HashMap<String, Vhost>(); + private List<Context> availableContexts = new ArrayList<ProxyInfo.Context>(); + + public ProxyInfo(String rawProxyInfo) { + parseNodes(rawProxyInfo); + parseVhosts(rawProxyInfo); + parseContexts(rawProxyInfo); + } + + private void parseNodes(String rawProxyInfo) { + Pattern nodePattern = Pattern.compile("Node:.*\n"); + Matcher nodeMatcher = nodePattern.matcher(rawProxyInfo); + while (nodeMatcher.find()) { + String rawNode = nodeMatcher.group(); + String[] nodePieces = rawNode.split(","); + + String identifier = nodePieces[0]; + identifier = identifier.substring(identifier.indexOf("[") + 1, identifier.indexOf("]")); + + String jvmRoute = nodePieces[1]; + jvmRoute = jvmRoute.substring(jvmRoute.indexOf(':') + 1).trim(); + + availableNodes.put(identifier, new Node(jvmRoute, identifier)); + } + } + + private void parseVhosts(String rawProxyInfo) { + Pattern vhostPattern = Pattern.compile("Vhost:.*\n"); + Matcher vhostMatcher = vhostPattern.matcher(rawProxyInfo); + while (vhostMatcher.find()) { + String rawVhost = vhostMatcher.group(); + String[] vhostPieces = rawVhost.split(","); + + String identifier = vhostPieces[0].trim(); + identifier = identifier.substring(identifier.indexOf("[") + 1, identifier.indexOf("]")); + identifier = identifier.substring(0, identifier.lastIndexOf(":")); + + String host = vhostPieces[1].trim(); + host = host.substring(host.indexOf(":") + 1).trim(); + + availableVhosts.put(identifier, new Vhost(identifier, host)); + } + } + + private void parseContexts(String rawProxyInfo) { + Pattern contextPattern = Pattern.compile("Context:.*[\n|}]"); + Matcher contextMatcher = contextPattern.matcher(rawProxyInfo); + while (contextMatcher.find()) { + String rawContext = contextMatcher.group(); + String[] contextPieces = rawContext.split(","); + String actualContext = contextPieces[1].substring(contextPieces[1].indexOf("/")).trim(); + + String identifier = contextPieces[0]; + identifier = identifier.substring(identifier.indexOf("[") + 1, identifier.indexOf("]")); + identifier = identifier.substring(0, identifier.lastIndexOf(":")); + + String nodeIdentifier = contextPieces[0]; + nodeIdentifier = nodeIdentifier.substring(nodeIdentifier.indexOf("[") + 1, nodeIdentifier.indexOf("]")); + nodeIdentifier = nodeIdentifier.substring(0, nodeIdentifier.indexOf(":")); + String jvmRoute = availableNodes.get(nodeIdentifier).getJvmRoute(); + + String rawIsEnabled = contextPieces[2]; + rawIsEnabled = rawIsEnabled.substring(rawIsEnabled.indexOf(':') + 1).trim(); + boolean isEnabled = rawIsEnabled.equals("ENABLED") ? true : false; + + Vhost relatedVhost = availableVhosts.get(identifier); + + availableContexts.add(new Context(jvmRoute, relatedVhost.getHost(), actualContext, isEnabled)); + } + } + + public List<Context> getAvailableContexts() { + return Collections.unmodifiableList(availableContexts); + } + + public List<Vhost> getAvailableVhosts() { + return Collections.unmodifiableList(new ArrayList<Vhost>(availableVhosts.values())); + } + + public List<Node> getAvailableNodes() { + return Collections.unmodifiableList(new ArrayList<Node>(availableNodes.values())); + } + + public static class Node { + private String jvmRoute; + private String nodeId; + + public Node(String jvmRoute, String nodeId) { + this.jvmRoute = jvmRoute; + this.nodeId = nodeId; + } + + public String getNodeId() { + return nodeId; + } + + public String getJvmRoute() { + return jvmRoute; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((jvmRoute == null) ? 0 : jvmRoute.hashCode()); + result = prime * result + ((nodeId == null) ? 0 : nodeId.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Node other = (Node) obj; + if (jvmRoute == null) { + if (other.jvmRoute != null) + return false; + } else if (!jvmRoute.equals(other.jvmRoute)) + return false; + if (nodeId == null) { + if (other.nodeId != null) + return false; + } else if (!nodeId.equals(other.nodeId)) + return false; + return true; + } + } + + public static class Vhost { + private String identifier; + private String host; + + public Vhost(String identifier, String host) { + this.identifier = identifier; + this.host = host; + } + + public String getIdentifier() { + return identifier; + } + + public String getHost() { + return host; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((host == null) ? 0 : host.hashCode()); + result = prime * result + ((identifier == null) ? 0 : identifier.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Vhost other = (Vhost) obj; + if (host == null) { + if (other.host != null) + return false; + } else if (!host.equals(other.host)) + return false; + if (identifier == null) { + if (other.identifier != null) + return false; + } else if (!identifier.equals(other.identifier)) + return false; + return true; + } + } + + public static class Context { + private String path; + private String host; + private String jvmRoute; + private boolean isEnabled; + + public Context(String jvmRoute, String host, String path) { + this(jvmRoute, host, path, false); + } + + public Context(String jvmRoute, String host, String path, boolean isEnabled) { + this.jvmRoute = jvmRoute; + this.host = host; + this.path = path; + this.isEnabled = isEnabled; + } + + public String getPath() { + return path; + } + + public String getHost() { + return host; + } + + public String getJvmRoute() { + return jvmRoute; + } + + public boolean isEnabled() { + return isEnabled; + } + + public String createKey() { + return jvmRoute + ":" + host + ":" + path; + } + + public String createName() { + return host + ":" + path; + } + + @Override + public String toString() { + return createKey(); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((host == null) ? 0 : host.hashCode()); + result = prime * result + ((jvmRoute == null) ? 0 : jvmRoute.hashCode()); + result = prime * result + ((path == null) ? 0 : path.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Context other = (Context) obj; + if (host == null) { + if (other.host != null) + return false; + } else if (!host.equals(other.host)) + return false; + if (jvmRoute == null) { + if (other.jvmRoute != null) + return false; + } else if (!jvmRoute.equals(other.jvmRoute)) + return false; + if (path == null) { + if (other.path != null) + return false; + } else if (!path.equals(other.path)) + return false; + return true; + } + + public static Context fromString(String stringRepresentation) throws Exception { + String parts[] = stringRepresentation.trim().split(":"); + if (parts.length < 3) { + throw new Exception("Parsing error. Not enough information to create a context."); + } + + return new Context(parts[0], parts[1], parts[2]); + } + } + + public static void main(String[] args) { + String as7ProxyInfo = ""; + as7ProxyInfo += "Node: [1],Name: asterixA-0502-3305-8ff3-fad7fee8b516,Balancer: mycluster,LBGroup: ,Host: 192.168.1.9,Port: 8009,Type: ajp,Flushpackets: Off,Flushwait: 10,Ping: 10,Smax: 26,Ttl: 60,Elected: 0,Read: 0,Transfered: 0,Connected: 0,Load: 100\n"; + as7ProxyInfo += "Node: [2],Name: 00fa6bff-83a2-3bde-9e76-998b1a4a8c2c,Balancer: mycluster,LBGroup: ,Host: 192.168.1.3,Port: 8009,Type: ajp,Flushpackets: Off,Flushwait: 10,Ping: 10,Smax: 26,Ttl: 60,Elected: 0,Read: 0,Transfered: 0,Connected: 0,Load: 98\n"; + as7ProxyInfo += "Vhost: [1:1:1], Alias: example.com\n"; + as7ProxyInfo += "Vhost: [1:1:2], Alias: localhost\n"; + as7ProxyInfo += "Vhost: [1:1:3], Alias: default-host\n"; + as7ProxyInfo += "Vhost: [2:1:4], Alias: default-host\n"; + as7ProxyInfo += "Vhost: [2:1:5], Alias: 192.168.1.3\n"; + as7ProxyInfo += "Vhost: [2:1:6], Alias: example1.com\n"; + as7ProxyInfo += "Context: [1:1:1], Context: /helloworld, Status: ENABLED\n"; + as7ProxyInfo += "Context: [2:1:2], Context: /helloworld, Status: ENABLED\n"; + + //test out proxyInfo + ProxyInfo pi = new ProxyInfo(as7ProxyInfo); + //list nodes + for (Node n : pi.getAvailableNodes()) { + System.out.println("Node jvmRoute:" + n.getJvmRoute() + " nodeId:" + n.getNodeId()); + } + System.out.println(""); + //list VHosts + for (Vhost v : pi.getAvailableVhosts()) { + System.out.println("VHost host:" + v.getHost() + " identifier:" + v.getIdentifier()); + } + System.out.println(""); + + //list Contexts + for (Context c : pi.getAvailableContexts()) { + System.out.println("VHost host:" + c.getHost() + " jvmRoute:" + c.getJvmRoute() + " path:" + c.getPath()); + System.out.println("\t createKey:" + c.createKey() + " createName:" + c.createName()); + } + System.out.println(""); + + } +}
rhq-commits@lists.fedorahosted.org