/** * Copyright (C) 2010 EdgyTech LLC. * * 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 com.edgytech.umongo; import com.mongodb.BasicDBObject; import com.mongodb.Bytes; import com.mongodb.CommandResult; import com.mongodb.DB; import com.mongodb.Mongo; import com.mongodb.MongoClient; import com.mongodb.MongoClientOptions; import com.mongodb.ServerAddress; import java.net.UnknownHostException; import java.util.logging.Level; /** * * @author antoine */ public class ServerNode extends BaseTreeNode { String host; ServerAddress serverAddress; MongoClient serverMongo; BasicDBObject stats; boolean isReplica = false; boolean isConfig = false; public ServerNode(MongoClient mongo, boolean isReplica, boolean isConfig) { serverMongo = mongo; serverAddress = mongo.getAddress(); setLabel(serverAddress != null ? serverAddress.toString() : "?"); this.isReplica = isReplica; this.isConfig = isConfig; try { xmlLoad(Resource.getXmlDir(), Resource.File.serverNode, null); } catch (Exception ex) { getLogger().log(Level.SEVERE, null, ex); } markStructured(); } public ServerNode(ServerAddress serverAddress, MongoClientOptions opts, boolean isReplica, boolean isConfig) { setLabel(serverAddress.toString()); this.serverAddress = serverAddress; serverMongo = new MongoClient(serverAddress, opts); serverMongo.addOption( Bytes.QUERYOPTION_SLAVEOK ); this.isReplica = isReplica; this.isConfig = isConfig; try { xmlLoad(Resource.getXmlDir(), Resource.File.serverNode, null); } catch (Exception ex) { getLogger().log(Level.SEVERE, null, ex); } markStructured(); } public ServerNode(String host, MongoClientOptions opts, boolean isReplica, boolean isConfig) throws UnknownHostException { setLabel(host); this.host = host; this.serverAddress = new ServerAddress(host); serverMongo = new MongoClient(serverAddress, opts); serverMongo.addOption( Bytes.QUERYOPTION_SLAVEOK ); this.isReplica = isReplica; this.isConfig = isConfig; try { xmlLoad(Resource.getXmlDir(), Resource.File.serverNode, null); } catch (Exception ex) { getLogger().log(Level.SEVERE, null, ex); } markStructured(); } public ServerAddress getServerAddress() { return serverAddress; } public MongoClient getServerMongoClient() { return serverMongo; } public DB getServerDB() { return serverMongo.getDB("admin"); } @Override protected void populateChildren() { } @Override protected void updateNode() { boolean isArbiter = false; if (stats != null) { isArbiter = stats.getBoolean("arbiterOnly", false); if (isArbiter) { icon = "a.png"; } else if (stats.getBoolean("ismaster", false)) { if (!isConfig) addOverlay("overlay/tick_circle_tiny.png"); } else if (!stats.getBoolean("secondary")) { addOverlay("overlay/error.png"); } if (stats.getBoolean("hidden", false)) { addOverlay("overlay/hidden.png"); } // if (res.containsField("dur")) { // overlays.add(SwingFast.createIcon("overlay/shield_blue_tiny.png", iconGroup)); // } } if (isConfig) label = "ConfigDB"; else if (isArbiter) label = "Arbiter"; else label = "MongoD"; label += ": "; if (host != null) label += host; else if (serverAddress != null) label += serverAddress.toString(); else label += "?"; } @Override protected void refreshNode() { CommandResult res = getServerMongoClient().getDB("local").command("isMaster"); res.throwOnError(); stats = res; } boolean isReplica() { return isReplica; } boolean isConfig() { return isConfig; } }