org.glassfish.jersey.server.internal.monitoring.ExceptionMapperStatisticsImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jaxrs-ri Show documentation
Show all versions of jaxrs-ri Show documentation
A bundle project producing JAX-RS RI bundles. The primary artifact is an "all-in-one" OSGi-fied JAX-RS RI bundle
(jaxrs-ri.jar).
Attached to that are two compressed JAX-RS RI archives. The first archive (jaxrs-ri.zip) consists of binary RI bits and
contains the API jar (under "api" directory), RI libraries (under "lib" directory) as well as all external
RI dependencies (under "ext" directory). The secondary archive (jaxrs-ri-src.zip) contains buildable JAX-RS RI source
bundle and contains the API jar (under "api" directory), RI sources (under "src" directory) as well as all external
RI dependencies (under "ext" directory). The second archive also contains "build.xml" ANT script that builds the RI
sources. To build the JAX-RS RI simply unzip the archive, cd to the created jaxrs-ri directory and invoke "ant" from
the command line.
/*
* Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package org.glassfish.jersey.server.internal.monitoring;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.glassfish.jersey.server.monitoring.ExceptionMapperStatistics;
/**
* Exception mapper statistics.
*
* @author Miroslav Fuksa
*/
final class ExceptionMapperStatisticsImpl implements ExceptionMapperStatistics {
/**
* Builder of exception mapper statistics.
*
* This builder does not need to be threadsafe since it's called only from the jersey-background-task-scheduler.
*/
static class Builder {
private Map, Long> exceptionMapperExecutionCountMap = new HashMap<>();
private long successfulMappings;
private long unsuccessfulMappings;
private long totalMappings;
private ExceptionMapperStatisticsImpl cached;
/**
* Add mappings.
*
* @param success True if mappings were successful.
* @param count Number of mappings.
*/
void addMapping(final boolean success, final int count) {
cached = null;
totalMappings++;
if (success) {
successfulMappings += count;
} else {
unsuccessfulMappings += count;
}
}
/**
* Add an execution of exception mapper.
*
* @param mapper Exception mapper.
* @param count Number of executions of the {@code mapper}.
*/
void addExceptionMapperExecution(final Class mapper, final int count) {
cached = null;
Long cnt = exceptionMapperExecutionCountMap.get(mapper);
cnt = cnt == null ? count : cnt + count;
exceptionMapperExecutionCountMap.put(mapper, cnt);
}
/**
* Build an instance of exception mapper statistics.
*
* @return New instance of exception mapper statistics.
*/
public ExceptionMapperStatisticsImpl build() {
if (cached == null) {
cached = new ExceptionMapperStatisticsImpl(new HashMap<>(this.exceptionMapperExecutionCountMap),
successfulMappings, unsuccessfulMappings, totalMappings);
}
return cached;
}
}
private final Map, Long> exceptionMapperExecutionCount;
private final long successfulMappings;
private final long unsuccessfulMappings;
private final long totalMappings;
private ExceptionMapperStatisticsImpl(final Map, Long> exceptionMapperExecutionCount, final long successfulMappings,
final long unsuccessfulMappings, final long totalMappings) {
this.exceptionMapperExecutionCount = Collections.unmodifiableMap(exceptionMapperExecutionCount);
this.successfulMappings = successfulMappings;
this.unsuccessfulMappings = unsuccessfulMappings;
this.totalMappings = totalMappings;
}
@Override
public Map, Long> getExceptionMapperExecutions() {
return exceptionMapperExecutionCount;
}
@Override
public long getSuccessfulMappings() {
return successfulMappings;
}
@Override
public long getUnsuccessfulMappings() {
return unsuccessfulMappings;
}
@Override
public long getTotalMappings() {
return totalMappings;
}
@Override
public ExceptionMapperStatistics snapshot() {
// snapshot functionality not yet implemented
return this;
}
}