gobblin.cluster.ContainerMetrics.java Source code

Java tutorial

Introduction

Here is the source code for gobblin.cluster.ContainerMetrics.java

Source

/*
 * 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 gobblin.cluster;

import java.util.List;
import java.util.concurrent.Callable;

import com.google.common.collect.ImmutableList;

import gobblin.annotation.Alpha;
import gobblin.configuration.State;
import gobblin.metrics.GobblinMetrics;
import gobblin.metrics.Tag;

/**
 * Extension of {@link GobblinMetrics} specifically for {@link GobblinTaskRunner}s.
 */
@Alpha
public class ContainerMetrics extends GobblinMetrics {

    protected ContainerMetrics(State containerState, String applicationName, String taskRunnerId) {
        super(name(taskRunnerId), null, tagsForContainer(containerState, applicationName, taskRunnerId));
    }

    /**
     * Get a {@link ContainerMetrics} instance given the {@link State} of a container, the name of the application the
     * container belongs to, and the workerId of the container.
     *
     * @param containerState the {@link State} of the container
     * @param applicationName a {@link String} representing the name of the application the container belongs to
     * @return a {@link ContainerMetrics} instance
     */
    public static ContainerMetrics get(final State containerState, final String applicationName,
            final String workerId) {
        return (ContainerMetrics) GOBBLIN_METRICS_REGISTRY.getOrDefault(name(workerId),
                new Callable<GobblinMetrics>() {
                    @Override
                    public GobblinMetrics call() throws Exception {
                        return new ContainerMetrics(containerState, applicationName, workerId);
                    }
                });
    }

    private static String name(String workerId) {
        return "gobblin.metrics." + workerId;
    }

    private static List<Tag<?>> tagsForContainer(State containerState, String applicationName,
            String taskRunnerId) {
        ImmutableList.Builder<Tag<?>> tags = new ImmutableList.Builder<>();
        tags.add(new Tag<>(GobblinClusterMetricTagNames.APPLICATION_NAME, applicationName));
        tags.add(new Tag<>(GobblinClusterMetricTagNames.TASK_RUNNER_ID, taskRunnerId));
        tags.addAll(getCustomTagsFromState(containerState));
        return tags.build();
    }
}