/* * 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.brooklyn.entity.nosql.mongodb; import org.bson.BasicBSONObject; import org.apache.brooklyn.api.catalog.Catalog; import org.apache.brooklyn.api.entity.ImplementedBy; import org.apache.brooklyn.api.sensor.AttributeSensor; import org.apache.brooklyn.api.sensor.AttributeSensor.SensorPersistenceMode; import org.apache.brooklyn.config.ConfigKey; import org.apache.brooklyn.core.config.BasicConfigKey; import org.apache.brooklyn.core.config.ConfigKeys; import org.apache.brooklyn.core.sensor.PortAttributeSensorAndConfigKey; import org.apache.brooklyn.core.sensor.Sensors; import org.apache.brooklyn.util.core.flags.SetFromFlag; @Catalog(name="MongoDB Server", description="MongoDB (from \"humongous\") is a scalable, high-performance, open source NoSQL database", iconUrl="classpath:///mongodb-logo.png") @ImplementedBy(MongoDBServerImpl.class) public interface MongoDBServer extends AbstractMongoDBServer { @SetFromFlag("mongodbConfTemplateUrl") ConfigKey<String> MONGODB_CONF_TEMPLATE_URL = ConfigKeys.newConfigKeyWithDefault( AbstractMongoDBServer.MONGODB_CONF_TEMPLATE_URL, "classpath://org/apache/brooklyn/entity/nosql/mongodb/default-mongod.conf"); // See http://docs.mongodb.org/ecosystem/tools/http-interfaces/#http-console // This is *always* 1000 more than port. We disable if it is not available. PortAttributeSensorAndConfigKey HTTP_PORT = new PortAttributeSensorAndConfigKey("mongodb.server.httpPort", "HTTP port for the server (estimated)", "28017+"); @SetFromFlag("enableRestInterface") ConfigKey<Boolean> ENABLE_REST_INTERFACE = ConfigKeys.newBooleanConfigKey( "mongodb.config.enable_rest", "Adds --rest to server startup flags when true", Boolean.FALSE); @SetFromFlag("useClientMonitoring") ConfigKey<Boolean> USE_CLIENT_MONITORING = ConfigKeys.newConfigKey("clientMonitoring.enabled", "Monitoring via the MongoDB client enabled", Boolean.TRUE); AttributeSensor<String> HTTP_INTERFACE_URL = Sensors.newStringSensor( "mongodb.server.http_interface", "URL of the server's HTTP console"); AttributeSensor<BasicBSONObject> STATUS_BSON = Sensors.builder(BasicBSONObject.class, "mongodb.server.status.bson") .description("Server status (BSON/JSON map ojbect)") .persistence(SensorPersistenceMode.NONE) .build(); AttributeSensor<Double> UPTIME_SECONDS = Sensors.newDoubleSensor( "mongodb.server.uptime", "Server uptime in seconds"); AttributeSensor<Long> OPCOUNTERS_INSERTS = Sensors.newLongSensor( "mongodb.server.opcounters.insert", "Server inserts"); AttributeSensor<Long> OPCOUNTERS_QUERIES = Sensors.newLongSensor( "mongodb.server.opcounters.query", "Server queries"); AttributeSensor<Long> OPCOUNTERS_UPDATES = Sensors.newLongSensor( "mongodb.server.opcounters.update", "Server updates"); AttributeSensor<Long> OPCOUNTERS_DELETES = Sensors.newLongSensor( "mongodb.server.opcounters.delete", "Server deletes"); AttributeSensor<Long> OPCOUNTERS_GETMORE = Sensors.newLongSensor( "mongodb.server.opcounters.getmore", "Server getmores"); AttributeSensor<Long> OPCOUNTERS_COMMAND = Sensors.newLongSensor( "mongodb.server.opcounters.command", "Server commands"); AttributeSensor<Long> NETWORK_BYTES_IN = Sensors.newLongSensor( "mongodb.server.network.bytesIn", "Server incoming network traffic (in bytes)"); AttributeSensor<Long> NETWORK_BYTES_OUT = Sensors.newLongSensor( "mongodb.server.network.bytesOut", "Server outgoing network traffic (in bytes)"); AttributeSensor<Long> NETWORK_NUM_REQUESTS = Sensors.newLongSensor( "mongodb.server.network.numRequests", "Server network requests"); /** A single server's replica set configuration **/ ConfigKey<MongoDBReplicaSet> REPLICA_SET = new BasicConfigKey<MongoDBReplicaSet>(MongoDBReplicaSet.class, "mongodb.replicaset", "The replica set to which the server belongs. " + "Users should not set this directly when creating a new replica set."); AttributeSensor<ReplicaSetMemberStatus> REPLICA_SET_MEMBER_STATUS = Sensors.newSensor( ReplicaSetMemberStatus.class, "mongodb.server.replicaSet.memberStatus", "The status of this server in the replica set"); AttributeSensor<Boolean> IS_PRIMARY_FOR_REPLICA_SET = Sensors.newBooleanSensor( "mongodb.server.replicaSet.isPrimary", "True if this server is the write master for the replica set"); AttributeSensor<Boolean> IS_SECONDARY_FOR_REPLICA_SET = Sensors.newBooleanSensor( "mongodb.server.replicaSet.isSecondary", "True if this server is a secondary server in the replica set"); AttributeSensor<String> REPLICA_SET_PRIMARY_ENDPOINT = Sensors.newStringSensor( "mongodb.server.replicaSet.primary.endpoint", "The host:port of the server which is acting as primary (master) for the replica set"); AttributeSensor<String> MONGO_SERVER_ENDPOINT = Sensors.newStringSensor( "mongodb.server.endpoint", "The host:port where this server is listening"); /** * @return The replica set the server belongs to, or null if the server is a standalone instance. */ MongoDBReplicaSet getReplicaSet(); /** * @return True if the server is a child of {@link MongoDBReplicaSet}. */ boolean isReplicaSetMember(); /** * Initialises a replica set at the server the method is invoked on. * @param replicaSetName The name for the replica set. * @param id The id to be given to this server in the replica set configuration. * @return True if initialisation is successful. */ boolean initializeReplicaSet(String replicaSetName, Integer id); /** * Reconfigures the replica set that the server the method is invoked on is the primary member of * to include a new member. * <p/> * Note that this can cause long downtime (typically 10-20s, even up to a minute). * * @param secondary New member of the set. * @param id The id for the new set member. Must be unique within the set; its validity is not checked. * @return True if addition is successful. False if the server this is called on is not the primary * member of the replica set. */ boolean addMemberToReplicaSet(MongoDBServer secondary, Integer id); /** * Reconfigures the replica set that the server the method is invoked on is the primary member of * to remove the given server. * @param server The server to remove. * @return True if removal is successful. False if the server this is called on is not the primary * member of the replica set. */ boolean removeMemberFromReplicaSet(MongoDBServer server); }