All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.swirlds.common.metrics.platform.prometheus.StringAdapter Maven / Gradle / Ivy

Go to download

Swirlds is a software platform designed to build fully-distributed applications that harness the power of the cloud without servers. Now you can develop applications with fairness in decision making, speed, trust and reliability, at a fraction of the cost of traditional server-based platforms.

There is a newer version: 0.56.6
Show newest version
/*
 * Copyright (C) 2022-2024 Hedera Hashgraph, LLC
 *
 * Licensed 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 com.swirlds.common.metrics.platform.prometheus;

import static com.swirlds.common.metrics.platform.prometheus.PrometheusEndpoint.AdapterType.GLOBAL;
import static com.swirlds.common.metrics.platform.prometheus.PrometheusEndpoint.AdapterType.PLATFORM;
import static com.swirlds.common.metrics.platform.prometheus.PrometheusEndpoint.NODE_LABEL;

import com.swirlds.common.metrics.platform.prometheus.PrometheusEndpoint.AdapterType;
import com.swirlds.common.platform.NodeId;
import com.swirlds.metrics.api.Metric;
import com.swirlds.metrics.api.snapshot.Snapshot;
import io.prometheus.client.Collector;
import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.Info;
import java.util.Objects;

/**
 * Adapter that synchronizes a {@link Metric} with a single value of {@link Metric#getDataType() type} {@code String}
 * with the corresponding Prometheus {@link Collector}.
 */
public class StringAdapter extends AbstractMetricAdapter {

    private final Info info;

    /**
     * Constructor of {@code StringAdapter}.
     *
     * @param registry
     * 		The {@link CollectorRegistry} with which the Prometheus {@link Collector} should be registered
     * @param metric
     * 		The {@link Metric} which value should be reported to Prometheus
     * @param adapterType
     * 		Scope of the {@link Metric}, either {@link AdapterType#GLOBAL} or {@link AdapterType#PLATFORM}
     * @throws NullPointerException if any of the following parameters are {@code null}.
     *     
    *
  • {@code registry}
  • *
  • {@code metric}
  • *
*/ public StringAdapter(final CollectorRegistry registry, final Metric metric, final AdapterType adapterType) { super(adapterType, metric, false); Objects.requireNonNull(registry, "registry must not be null"); Objects.requireNonNull(metric, "metric must not be null"); final Info.Builder builder = assignCommonValues(new Info.Builder()); if (adapterType == PLATFORM) { builder.labelNames(NODE_LABEL); } this.info = builder.register(registry); } /** * {@inheritDoc} */ @Override public void update(final Snapshot snapshot, final NodeId nodeId) { Objects.requireNonNull(snapshot, "snapshot must not be null"); final String newValue = Objects.toString(snapshot.getValue()); if (adapterType == GLOBAL) { info.info("value", newValue); } else { Objects.requireNonNull(nodeId, "nodeId must not be null"); final Info.Child child = info.labels(nodeId.toString()); child.info("value", newValue); } } /** * {@inheritDoc} */ @Override public void unregister(final CollectorRegistry registry) { registry.unregister(info); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy