/*
 * 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
/** * 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
Params:
  • mbean – the mbean object to register
  • metricName – name of the JGit metric, will be prefixed with "org.eclipse.jgit/"
Returns:the registered mbean's object instance
/** * 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())); } }