blob: 1cbf359a1d8ea9dd88717dc28f35fa2c4ec99df0 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a
* copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.geode.metrics.internal;
import java.util.Collection;
import io.micrometer.core.instrument.MeterRegistry;
import org.apache.geode.distributed.internal.InternalDistributedSystem;
import org.apache.geode.metrics.MetricsSession;
/**
* A metrics session that can be started and stopped, and that manages a meter registry.
*/
public interface MetricsService extends MetricsSession {
/**
* Starts this metrics service and configures its meter registry. How this metrics service
* configures its meter registry is defined by the implementation.
*/
void start();
/**
* Stops this metrics service, freeing any resources.
*/
void stop();
/**
* Returns this service's meter registry. The registry may be {@code null} before the service
* is started or after it is stopped.
*
* @return the meter registry
*/
MeterRegistry getMeterRegistry();
/**
* Returns the builder that built this metrics service. The builder can be used during reconnect
* to create a metrics service configured similarly to this one.
* <p>
* Before calling this method, call {@link #stop()}.
*
* @return the builder that built this metrics service
*/
Builder getRebuilder();
interface Builder {
/**
* Adds the given meter registry to the eventually built metrics service. In the event of a
* reconnect, this registry will be removed from the metrics service in the disconnected
* system and added to the metrics service in the reconnected system.
*
* @return this builder
*/
Builder addPersistentMeterRegistry(MeterRegistry registry);
/**
* Adds the given meter registries to the eventually built metrics service. In the event of a
* reconnect, these registries will be removed from metrics service in the disconnected
* system added to the metrics service in the reconnected system.
*
* @return this builder
*/
Builder addPersistentMeterRegistries(Collection<MeterRegistry> registries);
/**
* Informs this builder whether it is building a metrics service on behalf of a client.
*
* @return this builder
*/
Builder setIsClient(boolean isClient);
/**
* Builds a metrics service associated with the given system.
*/
MetricsService build(InternalDistributedSystem system);
}
}