/**
* Copyright (C) 2013 Arman Gal
*
* Licensed 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.clevermore.monitor.server.model;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.clevermore.monitor.shared.certificate.Certificate;
import org.clevermore.monitor.shared.servers.ConnectedServer;
import org.clevermore.monitor.shared.smartpool.PoolsFeed;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class AbstractConnectedServersState<SS extends ServerStatus, DS extends DatabaseServer>
implements IConnectedServersState<SS, DS> {
private static Logger logger = LoggerFactory.getLogger(AbstractConnectedServersState.class);
private ConcurrentHashMap<Integer, SS> connectedServersMap = new ConcurrentHashMap<Integer, SS>();
private Map<Integer, ConnectedServer> serversMap = new HashMap<Integer, ConnectedServer>();
private ConcurrentHashMap<String, DS> databases = new ConcurrentHashMap<String, DS>(0);
private HashMap<String, PoolsFeed> poolFeedMap;
private HashMap<String, List<Certificate>> certificates = new HashMap<>();
/**
* to be overridden in case of extension project is interested to merge it's data
*
* @param ss
*/
public void mergeExtraData(SS ss) {}
public SS getServerStataus(final Integer serverCode) {
return connectedServersMap.get(serverCode);
}
public List<SS> getAllServers() {
return new ArrayList<SS>(connectedServersMap.values());
}
public SS removeServer(final Integer serevrCode) {
return connectedServersMap.remove(serevrCode);
}
public SS addServer(SS serverStataus) {
return connectedServersMap.put(serverStataus.getServerConfig().getServerCode(), serverStataus);
}
/**
* might be overridden to initiate additional result objects
*
* @param servers
*/
public void mergeStats(ArrayList<ConnectedServer> servers) {
HashMap<String, PoolsFeed> poolFeedMap = new HashMap<String, PoolsFeed>();
logger.info("Merging stats");
for (SS ss : connectedServersMap.values()) {
if (ss.isConnected()) {
// for (PoolsFeed pf : ss.getPoolFeedMap().values()) {
// // go over all pools in each server
// if (poolFeedMap.containsKey(pf.getPoolName())) {
// poolFeedMap.get(pf.getPoolName()).merge(pf);
// } else {
// poolFeedMap.put(pf.getPoolName(), pf);
// }
// }
mergeExtraData(ss);
}
}
for (ConnectedServer server : servers) {
serversMap.put(server.getServerCode(), server);
}
this.poolFeedMap = poolFeedMap;
}
public ArrayList<ConnectedServer> getServers() {
return new ArrayList<ConnectedServer>(serversMap.values());
}
public HashMap<String, PoolsFeed> getPoolFeedMap() {
return poolFeedMap;
}
public ArrayList<DS> getDatabases() {
return new ArrayList<DS>(databases.values());
}
public DS getDatabaseServer(String name) {
return databases.get(name);
}
public void addDatabaseServer(DS ds) {
databases.put(ds.getDatabaseConfig().getName(), ds);
}
public ConnectedServer getConnectedServer(Integer serverCode) {
return serversMap.get(serverCode);
}
public String getExtraServerDetails(Integer serverCode) {
return "---";
}
public HashMap<String, List<Certificate>> getCertificates() {
return certificates;
}
public void addCertificate(String domain, List<Certificate> certs) {
certificates.put(domain, certs);
}
}