/* * * Licensed to the Apache Software Foundation (ASF) under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional information regarding * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the License. You may obtain a * copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. * */ package org.apache.geode.tools.pulse.testbed; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Properties; import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS; /** * * TODO 0. SystemAlerts 1. Operations like member-up/down/crash, region create/destroy [7.5 scope] * 2. Read events like member-up/down/crash, region create/destroy [7.5 scope] 3. PropFile Writing * 4. Link to other remote systems, topology - multi-cluster [7.5] * * */ public class GemFireDistributedSystem { private static final String SERVERS = "servers"; private static final String LOCATORS_NAME = LOCATORS; private static final String PEERS = "peers"; private static final String HOSTS = "hosts"; private static final String REGIONS = "regions"; private static final String CLIENTS = "clients"; private static final String SEP = "."; private static final String FUNCTIONS = null; private static final String CQS = null; List<Server> servers = new ArrayList<Server>(); List<Client> clients = new ArrayList<Client>(); List<Locator> locators = new ArrayList<Locator>(); List<Peer> peers = new ArrayList<Peer>(); List<Host> hosts = new ArrayList<Host>(); List<Region> regions = new ArrayList<Region>(); List<Function> functions = new ArrayList<Function>(); List<CQ> cqs = new ArrayList<CQ>(); String dsName = null; public GemFireDistributedSystem(String name, Properties pr) { PropFileHelper propertiesFile = new PropFileHelper(pr); this.dsName = name; readGemfireDS(propertiesFile); } public GemFireDistributedSystem(String name, String fileName) throws IOException { PropFileHelper propertiesFile = new PropFileHelper(fileName); this.dsName = name; readGemfireDS(propertiesFile); } private void readGemfireDS(PropFileHelper propertiesFile) { String serverStrings[] = propertiesFile.readValues(dsName + SEP + SERVERS); System.out.println("Servers = " + serverStrings.length); for (String serverName : serverStrings) { Server server = new Server(); server.init(propertiesFile, dsName, serverName); servers.add(server); } String clientStrings[] = propertiesFile.readValues(dsName + SEP + CLIENTS); System.out.println("Clients = " + clientStrings.length); for (String clientName : clientStrings) { Client client = new Client(); client.init(propertiesFile, dsName, clientName); clients.add(client); } String locatorStrings[] = propertiesFile.readValues(dsName + SEP + LOCATORS); System.out.println("Locators = " + locatorStrings.length); for (String locatorName : locatorStrings) { Locator locator = new Locator(); locator.init(propertiesFile, dsName, locatorName); locators.add(locator); } String peerStrings[] = propertiesFile.readValues(dsName + SEP + PEERS); System.out.println("Peers = " + peerStrings.length); for (String peerName : peerStrings) { Peer peer = new Peer(); peer.init(propertiesFile, dsName, peerName); peers.add(peer); } String hostsStrings[] = propertiesFile.readValues(dsName + SEP + HOSTS); for (String hostName : hostsStrings) { Host host = new Host(); host.init(propertiesFile, dsName, hostName); hosts.add(host); } String regionsStrings[] = propertiesFile.readValues(dsName + SEP + REGIONS); for (String regionName : regionsStrings) { Region region = new Region(); region.init(propertiesFile, dsName, regionName); regions.add(region); } String functionStrings[] = propertiesFile.readValues(dsName + SEP + FUNCTIONS); for (String functionName : functionStrings) { Function function = new Function(); function.init(propertiesFile, dsName, functionName); functions.add(function); } String cqStrings[] = propertiesFile.readValues(dsName + SEP + CQS); for (String cqName : cqStrings) { CQ cq = new CQ(); cq.init(propertiesFile, dsName, cqName); cqs.add(cq); } } public List<Region> getRegions(String memberName) { List<Region> list = new ArrayList<Region>(); for (Region r : regions) { if (r.getMembers().contains(memberName)) list.add(r); } return list; } public Region getRegion(String regionName) { Region r = null; for (Region rn : getRegions()) { if (rn.getName().equals(regionName)) { r = rn; break; } } return r; } public List<Region> getRegions() { return regions; } public List<Function> getFunction() { return functions; } public List<CQ> getCQs() { return cqs; } public List<Server> getServers() { return servers; } public List<Client> getClients() { return clients; } public List<Peer> getPeers() { return peers; } public List<Locator> getLocators() { return locators; } public List<Host> getPhysicalHosts() { return hosts; } public static class Base { protected Map<String, String> properties = null; protected String name; public void init(PropFileHelper propertiesFile, String dsName, String name) { this.name = name; String leadingkey = dsName + SEP + name; Map<String, String> map = propertiesFile.readObject(leadingkey); map.put("name", name); this.properties = map; } public String getName() { return properties.get("name"); } public String key(String string) { return properties.get(string); } public int keyInt(String string) { String str = properties.get(string); try { int index = Integer.parseInt(str); return index; } catch (Exception e) { return -1; } } public List<String> values(String string) { String values = properties.get(string); String array[] = values.split(","); List<String> list = new ArrayList<String>(); for (String s : array) list.add(s); return list; } } public static class Host extends Base { } public static class Server extends Base { public String toString() { return properties.get("name") + "[on host=" + properties.get("host"); } public String getHost() { return properties.get("host"); } } public static class Client extends Base { public String toString() { return properties.get("name");// + "[on host=" + properties.get("host"); } public String getHost() { return properties.get("host"); } } public static class Locator extends Base { public String getHost() { return properties.get("host"); } } public static class Peer extends Base { public String getHost() { return properties.get("host"); } } public static class Region extends Base { public String toString() { return properties.get("name") + "[type=" + properties.get("type"); } public String getType() { return key("type"); } public int getEntryCount() { return keyInt("entryCount"); } public List<String> getWanSenders() { return values("wanSenders"); } public List<String> getMembers() { return values("members"); } } public static class WanSender extends Base { } public static class Function extends Base { public String getMemberId() { return key("memberId"); } } public static class CQ extends Base { public String getQuery() { return key("query"); } public String getClient() { return key("client"); } } public static class SystemAlert extends Base { // TODO } public static void main(String[] args) throws IOException { GemFireDistributedSystem ds = new GemFireDistributedSystem("t1", "config/testbed.properties"); System.out.println("Servers = " + ds.getServers()); System.out.println("Regions = " + ds.getRegions()); System.out.println("Clients = " + ds.getClients()); } }