Skip to content

Commit

Permalink
add metrics for some fcrepo-kernel methods
Browse files Browse the repository at this point in the history
  • Loading branch information
cbeer committed Mar 20, 2013
1 parent 5f84e3e commit 67316f1
Show file tree
Hide file tree
Showing 7 changed files with 105 additions and 21 deletions.
3 changes: 2 additions & 1 deletion fcrepo-kernel/pom.xml
Expand Up @@ -65,8 +65,9 @@
<dependency>
<groupId>com.yammer.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>2.2.0</version>
<version>3.0.0-SNAPSHOT</version>
</dependency>

</dependencies>

<build>
Expand Down
31 changes: 20 additions & 11 deletions fcrepo-kernel/src/main/java/org/fcrepo/Datastream.java
Expand Up @@ -33,13 +33,13 @@
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import com.yammer.metrics.Metrics;
import com.yammer.metrics.core.Counter;
import com.yammer.metrics.core.Histogram;
import com.yammer.metrics.core.Timer;
import com.yammer.metrics.core.TimerContext;
import com.yammer.metrics.Counter;
import com.yammer.metrics.Histogram;
import com.yammer.metrics.MetricRegistry;
import com.yammer.metrics.Timer;
import org.fcrepo.exception.InvalidChecksumException;
import org.fcrepo.services.LowLevelStorageService;
import org.fcrepo.services.RepositoryService;
import org.fcrepo.utils.ContentDigest;
import org.fcrepo.utils.FixityResult;
import org.fcrepo.utils.LowLevelCacheEntry;
Expand All @@ -65,6 +65,13 @@ public class Datastream extends JcrTools {
private final static Logger logger = LoggerFactory
.getLogger(Datastream.class);


final static Histogram contentSizeHistogram = RepositoryService.metrics.histogram(MetricRegistry.name(Datastream.class, "content-size"));
final static Counter fixityCheckCounter = RepositoryService.metrics.counter(MetricRegistry.name(Datastream.class, "fixity-check-counter"));
final static Timer timer = RepositoryService.metrics.timer(MetricRegistry.name(Datastream.class, "fixity-check-time"));
final static Counter fixityRepairedCounter = RepositoryService.metrics.counter(MetricRegistry.name(Datastream.class, "fixity-repaired-counter"));
final static Counter fixityErrorCounter = RepositoryService.metrics.counter(MetricRegistry.name(Datastream.class, "fixity-error-counter"));

Node node;

public Datastream(Node n) {
Expand Down Expand Up @@ -139,7 +146,6 @@ public void setContent(InputStream content, String checksumType, String checksum
}
}

final Histogram contentSizeHistogram = Metrics.newHistogram(Datastream.class, "content-size");
contentSizeHistogram.update(dataProperty.getLength());

contentNode.setProperty(CONTENT_SIZE, dataProperty.getLength());
Expand Down Expand Up @@ -188,8 +194,7 @@ public Collection<FixityResult> runFixityAndFixProblems() throws RepositoryExcep
MessageDigest digest = null;


final Counter contentSizeHistogram = Metrics.newCounter(Datastream.class, "fixity-check-counter");
contentSizeHistogram.inc();
fixityCheckCounter.inc();


try {
Expand All @@ -199,9 +204,8 @@ public Collection<FixityResult> runFixityAndFixProblems() throws RepositoryExcep
}


final Timer timer = Metrics.newTimer(Datastream.class, "fixity-check-time", TimeUnit.MILLISECONDS, TimeUnit.SECONDS);

final TimerContext context = timer.time();
final Timer.Context context = timer.time();

try {
fixityResults = new HashSet<FixityResult>(
Expand Down Expand Up @@ -238,7 +242,12 @@ public boolean apply(FixityResult result) {
try {
result.getEntry().storeValue(anyGoodCacheEntry.getInputStream());
FixityResult newResult = result.getEntry().checkFixity(digestUri, size, digest);
if (newResult.status == FixityResult.SUCCESS) result.status |= FixityResult.REPAIRED;
if (newResult.status == FixityResult.SUCCESS) {
result.status |= FixityResult.REPAIRED;
fixityRepairedCounter.inc();
} else {
fixityErrorCounter.inc();
}
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
Expand Down
12 changes: 12 additions & 0 deletions fcrepo-kernel/src/main/java/org/fcrepo/FedoraObject.java
Expand Up @@ -16,6 +16,9 @@
import javax.jcr.nodetype.NoSuchNodeTypeException;
import javax.jcr.version.VersionException;

import com.yammer.metrics.MetricRegistry;
import com.yammer.metrics.Timer;
import org.fcrepo.services.RepositoryService;
import org.modeshape.jcr.api.JcrTools;

/**
Expand All @@ -29,20 +32,29 @@ public class FedoraObject extends JcrTools {

private Node node;

final static Timer timer = RepositoryService.metrics.timer(MetricRegistry.name(FedoraObject.class, "FedoraObject"));

public FedoraObject(Node n) {
this.node = n;
}

public FedoraObject(Session session, String path)
throws NoSuchNodeTypeException, VersionException,
ConstraintViolationException, LockException, RepositoryException {

final Timer.Context context = timer.time();

try {
this.node = findOrCreateNode(session, path, NT_FOLDER);
node.addMixin("fedora:object");
node.addMixin("fedora:owned");
node.setProperty("fedora:ownerId", session.getUserID());
node.setProperty("jcr:lastModified", Calendar.getInstance());
node.setProperty("dc:identifier", new String[] {node.getIdentifier(),
node.getName()});
} finally {
context.stop();
}
}

/**
Expand Down
@@ -1,5 +1,9 @@
package org.fcrepo.identifiers;

import com.yammer.metrics.MetricRegistry;
import com.yammer.metrics.Timer;
import org.fcrepo.services.RepositoryService;

import static java.util.UUID.randomUUID;

/**
Expand All @@ -10,9 +14,19 @@
*/
public class UUIDPidMinter implements PidMinter {

final static Timer timer = RepositoryService.metrics.timer(MetricRegistry.name(UUIDPidMinter.class, "mint"));

@Override
public String mintPid() {
return randomUUID().toString();


final Timer.Context context = timer.time();

try {
return randomUUID().toString();
} finally {
context.stop();
}
}

}
Expand Up @@ -11,6 +11,9 @@
import javax.jcr.observation.EventIterator;
import javax.jcr.observation.EventListener;

import com.yammer.metrics.Counter;
import com.yammer.metrics.MetricRegistry;
import org.fcrepo.services.RepositoryService;
import org.modeshape.jcr.api.Repository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -43,6 +46,8 @@ public class SimpleObserver implements EventListener {

static final private Logger logger = LoggerFactory.getLogger(SimpleObserver.class);

static final Counter eventCounter = RepositoryService.metrics.counter(MetricRegistry.name(SimpleObserver.class, "onEvent"));

@PostConstruct
public void buildListener() throws RepositoryException {
Session session = repository.login();
Expand All @@ -58,8 +63,12 @@ public void buildListener() throws RepositoryException {
@SuppressWarnings("unchecked")
@Override
public void onEvent(EventIterator events) {

for (Event e : filter(new Builder<Event>().addAll(events).build(),
eventFilter)) {

eventCounter.inc();

logger.debug("Putting event: " + e.toString() + " on the bus.");
eventBus.post(new FedoraEvent(e));
}
Expand Down
@@ -0,0 +1,37 @@
package org.fcrepo.services;

import com.yammer.metrics.Clock;
import com.yammer.metrics.ConsoleReporter;
import com.yammer.metrics.MetricFilter;
import com.yammer.metrics.MetricRegistry;

import java.io.PrintStream;
import java.util.Locale;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;

public class RepositoryService {
public final static MetricRegistry metrics = new MetricRegistry("fcrepo");

public static MetricRegistry getMetrics() {
return metrics;
}

public static void dumpMetrics(PrintStream os) {

final MetricRegistry registry = RepositoryService.metrics;
final MetricFilter filter = MetricFilter.ALL;
final ConsoleReporter reporter = new ConsoleReporter(registry,
os, Locale.getDefault(), new Clock.UserTimeClock(), TimeZone.getDefault(), TimeUnit.SECONDS,
TimeUnit.MILLISECONDS,
filter);

reporter.report(registry.getGauges(filter),
registry.getCounters(filter),
registry.getHistograms(filter),
registry.getMeters(filter),
registry.getTimers(filter));

}

}
18 changes: 10 additions & 8 deletions fcrepo-kernel/src/test/java/org/fcrepo/integration/AbstractIT.java
@@ -1,15 +1,21 @@
package org.fcrepo.integration;

import com.yammer.metrics.Metrics;
import com.yammer.metrics.core.MetricPredicate;
import com.yammer.metrics.reporting.ConsoleReporter;
import com.yammer.metrics.Clock;
import com.yammer.metrics.ConsoleReporter;
import com.yammer.metrics.MetricFilter;
import com.yammer.metrics.MetricRegistry;
import org.fcrepo.services.RepositoryService;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.Locale;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;

@RunWith(SpringJUnit4ClassRunner.class)
public abstract class AbstractIT {

Expand All @@ -24,11 +30,7 @@ public void setLogger() {

@AfterClass
public static void dumpMetrics() {
final ConsoleReporter reporter = new ConsoleReporter(Metrics.defaultRegistry(),
System.out,
MetricPredicate.ALL);

reporter.run();
RepositoryService.dumpMetrics(System.out);
}

}

0 comments on commit 67316f1

Please sign in to comment.