Skip to content

Commit

Permalink
Merge pull request #1 from keawe-software/database-option
Browse files Browse the repository at this point in the history
Added option `connect(MongoDatabase mongoDB)` to builder:
  • Loading branch information
Stephan Richter committed Jun 4, 2020
2 parents f3bd80b + 7ca5a4f commit 138b827
Showing 1 changed file with 44 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
* A reporter to publish metric values to a MongoDB server.
*
* @author aparna
* @author Stephan Richter
*/
public class MongoDBReporter extends ScheduledReporter {

Expand Down Expand Up @@ -72,6 +73,7 @@ public static class Builder {
private MongoClientOptions mongoClientOptions;
private String databaseName = "metricstore";
private Map<String, Object> additionalFields;
private MongoDatabase mongoDatabase;

private Builder(MetricRegistry registry) {
this.registry = registry;
Expand Down Expand Up @@ -105,6 +107,18 @@ public Builder prefixedWith(String prefix) {
return this;
}

/**
* Use existing databse connection instead of constructing a new one.
* This has preference over withDatabaseName, serverAddress,mongoCredentials and mongoClientOptions.
*
* @param mongoDB an existing mongo db connection
* @return {@code this}
*/
public Builder connect(final MongoDatabase mongoDB) {
mongoDatabase = mongoDB;
return this;
}

/**
* Convert all the rates to a certain TimeUnit, defaults to TimeUnit.SECONDS.
*
Expand Down Expand Up @@ -199,26 +213,15 @@ public Builder additionalFields(Map<String, Object> additionalFields) {
* @return a {@link MongoDBReporter}
*/
public MongoDBReporter build() {
return new MongoDBReporter(registry,
databaseName,
serverAddresses,
mongoCredentials,
mongoClientOptions,
clock,
prefix,
rateUnit,
durationUnit,
filter,
additionalFields);
if (mongoDatabase == null) {
mongoDatabase = getDB(serverAddresses, mongoCredentials, databaseName, mongoClientOptions);
}
return new MongoDBReporter(registry, clock, prefix, rateUnit, durationUnit, filter, additionalFields, mongoDatabase);
}
}

private static final Logger LOGGER = LoggerFactory.getLogger(MongoDBReporter.class);

private final ServerAddress[] serverAddresses;
private final MongoCredential[] mongoCredentials;
private final MongoClientOptions mongoClientOptions;
private final String databaseName;
private final Clock clock;
private final String prefix;
private final MongoDatabase mongoDatabase;
Expand All @@ -228,17 +231,21 @@ public MongoDBReporter(MetricRegistry registry, String databaseName, ServerAddre
MongoCredential[] mongoCredentials, MongoClientOptions mongoClientOptions,
Clock clock, String prefix, TimeUnit rateUnit, TimeUnit durationUnit,
MetricFilter filter, Map<String, Object> additionalFields) {
super(registry, "mongodb-reporter", filter, rateUnit, durationUnit);
this.databaseName = databaseName;
this.serverAddresses = serverAddresses;
this.mongoCredentials = mongoCredentials;
this.mongoClientOptions = mongoClientOptions;
this.clock = clock;
this.prefix = prefix;
this.additionalFields = additionalFields;
this.mongoDatabase = getDB();
this(registry, clock, prefix, rateUnit, durationUnit, filter, additionalFields, getDB(serverAddresses, mongoCredentials, databaseName, mongoClientOptions));
}


public MongoDBReporter(final MetricRegistry registry, final Clock clock, final String prefix, final TimeUnit rateUnit, final TimeUnit durationUnit,
final MetricFilter filter, final Map<String, Object> additionalFields, final MongoDatabase mongoDatabase) {
super(registry, "mongodb-reporter", filter, rateUnit, durationUnit);
this.clock = clock;
this.prefix = prefix;
this.additionalFields = additionalFields;
this.mongoDatabase = mongoDatabase;
}


@SuppressWarnings("rawtypes")
@Override
public void report(SortedMap<String, Gauge> gauges,
SortedMap<String, Counter> counters,
Expand Down Expand Up @@ -278,6 +285,7 @@ public void report(SortedMap<String, Gauge> gauges,

}

@SuppressWarnings("rawtypes")
private void reportGauge(final String name, final Gauge gauge, final Date timestamp) {
final MongoCollection coll = mongoDatabase.getCollection("gauge");
final Object value = gauge.getValue();
Expand All @@ -294,6 +302,7 @@ private void reportGauge(final String name, final Gauge gauge, final Date timest
}
}

@SuppressWarnings("rawtypes")
private void reportCounter(final String name, final Counter counter, final Date timestamp) {
final MongoCollection coll = mongoDatabase.getCollection("counter");

Expand All @@ -309,6 +318,8 @@ private void reportCounter(final String name, final Counter counter, final Date
}
}


@SuppressWarnings("rawtypes")
private void reportHistogram(final String name, final Histogram histogram, final Date timestamp) {
final MongoCollection coll = mongoDatabase.getCollection("histogram");

Expand All @@ -325,6 +336,8 @@ private void reportHistogram(final String name, final Histogram histogram, final
}
}


@SuppressWarnings("rawtypes")
private void reportMetered(final String name, final Metered meter, final Date timestamp) {
final MongoCollection coll = mongoDatabase.getCollection("metered");
final MeteredEntity entity = new MeteredEntity(meter);
Expand All @@ -337,6 +350,8 @@ private void reportMetered(final String name, final Metered meter, final Date ti
}
}


@SuppressWarnings("rawtypes")
private void reportTimer(final String name, final Timer timer, final Date timestamp) {
final MongoCollection coll = mongoDatabase.getCollection("timer");
final TimerEntity entity = new TimerEntity(timer);
Expand All @@ -350,6 +365,8 @@ private void reportTimer(final String name, final Timer timer, final Date timest
}
}


@SuppressWarnings({ "rawtypes", "unchecked" })
private void storeInMongo(MongoCollection coll, BaseEntity entity) {
final Document document = new Document(entity);

Expand All @@ -361,7 +378,9 @@ private void storeInMongo(MongoCollection coll, BaseEntity entity) {
coll.insertOne(document);
}

private MongoDatabase getDB() {

private static MongoDatabase getDB(final ServerAddress[] serverAddresses, final MongoCredential[] mongoCredentials,
final String databaseName, final MongoClientOptions mongoClientOptions) {
MongoClient mongoClient = null;
if (mongoCredentials == null) {
mongoClient = new MongoClient(Arrays.asList(serverAddresses), mongoClientOptions);
Expand Down

0 comments on commit 138b827

Please sign in to comment.