Monitoring.java
- /*
- * Copyright (c) 2019 Matthias Sohn <matthias.sohn@sap.com>
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0 which is available at
- * https://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- package org.eclipse.jgit.util;
- import java.io.IOException;
- import java.lang.management.ManagementFactory;
- import javax.management.InstanceAlreadyExistsException;
- import javax.management.InstanceNotFoundException;
- import javax.management.MBeanRegistrationException;
- import javax.management.MBeanServer;
- import javax.management.MalformedObjectNameException;
- import javax.management.NotCompliantMBeanException;
- import javax.management.ObjectInstance;
- import javax.management.ObjectName;
- import org.eclipse.jgit.annotations.Nullable;
- import org.eclipse.jgit.errors.ConfigInvalidException;
- import org.eclipse.jgit.lib.ConfigConstants;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- /**
- * Enables monitoring JGit via JMX
- *
- * @since 5.1.13
- */
- public class Monitoring {
- private static final Logger LOG = LoggerFactory.getLogger(Monitoring.class);
- /**
- * Register a MBean with the platform MBean server
- *
- * @param mbean
- * the mbean object to register
- * @param metricName
- * name of the JGit metric, will be prefixed with
- * "org.eclipse.jgit/"
- * @return the registered mbean's object instance
- */
- public static @Nullable ObjectInstance registerMBean(Object mbean,
- String metricName) {
- boolean register = false;
- try {
- Class<?>[] interfaces = mbean.getClass().getInterfaces();
- for (Class<?> i : interfaces) {
- register = SystemReader.getInstance().getUserConfig()
- .getBoolean(
- ConfigConstants.CONFIG_JMX_SECTION,
- i.getSimpleName(), false);
- if (register) {
- break;
- }
- }
- } catch (IOException | ConfigInvalidException e) {
- LOG.error(e.getMessage(), e);
- return null;
- }
- if (!register) {
- return null;
- }
- MBeanServer server = ManagementFactory.getPlatformMBeanServer();
- try {
- ObjectName mbeanName = objectName(mbean.getClass(), metricName);
- if (server.isRegistered(mbeanName)) {
- server.unregisterMBean(mbeanName);
- }
- return server.registerMBean(mbean, mbeanName);
- } catch (MalformedObjectNameException | InstanceAlreadyExistsException
- | MBeanRegistrationException | NotCompliantMBeanException
- | InstanceNotFoundException e) {
- LOG.error(e.getMessage(), e);
- return null;
- }
- }
- private static ObjectName objectName(Class mbean, String metricName)
- throws MalformedObjectNameException {
- return new ObjectName(String.format("org.eclipse.jgit/%s:type=%s", //$NON-NLS-1$
- metricName, mbean.getSimpleName()));
- }
- }