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

com.google.cloud.logging.Metric Maven / Gradle / Ivy

There is a newer version: 0.2.8
Show newest version
/*
 * Copyright 2016 Google Inc. All Rights Reserved.
 *
 * 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.google.cloud.logging;

import static com.google.common.base.Preconditions.checkNotNull;

import com.google.common.base.Function;
import com.google.logging.v2.LogMetric;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Objects;
import java.util.concurrent.Future;

/**
 * Stackdriver Logging metrics describe logs-based metric. The value of the metric is the number of
 * log entries that match a logs filter (see {@link #filter()}).
 *
 * 

{@code Metric} adds a layer of service-related functionality over {@link MetricInfo}. Objects * of this class are immutable. To get a {@code Metric} object with the most recent information use * {@link #reload} or {@link #reloadAsync}. * * @see Logs-based Metrics * */ public class Metric extends MetricInfo { private static final long serialVersionUID = -1549310461066853001L; private final LoggingOptions options; private transient Logging logging; /** * A builder for {@code Metric} objects. */ public static final class Builder extends MetricInfo.Builder { private final Logging logging; private final BuilderImpl delegate; private Builder(Metric metric) { logging = metric.logging; delegate = new BuilderImpl(metric); } @Override public Builder name(String name) { delegate.name(name); return this; } @Override public Builder description(String description) { delegate.description(description); return this; } @Override public Builder filter(String filter) { delegate.filter(filter); return this; } @Override public Metric build() { return new Metric(this.logging, this.delegate); } } Metric(Logging logging, BuilderImpl builder) { super(builder); this.logging = checkNotNull(logging); options = logging.options(); } @Override public Builder toBuilder() { return new Builder(this); } @Override public final int hashCode() { return Objects.hash(options, super.hashCode()); } @Override public final boolean equals(Object obj) { if (obj == this) { return true; } if (obj == null || !obj.getClass().equals(Metric.class)) { return false; } Metric other = (Metric) obj; return baseEquals(other) && Objects.equals(options, other.options); } /** * Returns the metrics's {@code Logging} object used to issue requests. */ public Logging logging() { return logging; } /** * Deletes this metric. * * @return {@code true} if the metric was deleted, {@code false} if it was not found * @throws LoggingException upon failure */ public boolean delete() { return logging.deleteMetric(name()); } /** * Sends a request for deleting this metric. This method returns a {@code Future} object to * consume the result. {@link Future#get()} returns {@code true} if the metric was deleted, * {@code false} if it was not found. * * @throws LoggingException upon failure */ public Future deleteAsync() { return logging.deleteMetricAsync(name()); } /** * Fetches current metric's latest information. Returns {@code null} if the metric does not exist. * * @return a {@code Metric} object with latest information or {@code null} if not found * @throws LoggingException upon failure */ public Metric reload() { return logging.getMetric(name()); } /** * Sends a request to fetch current metric's latest information. This method returns a * {@code Future} object to consume the result. {@link Future#get()} returns a {@code Metric} * object with latest information or {@code null} if not found. * * @throws LoggingException upon failure */ public Future reloadAsync() { return logging.getMetricAsync(name()); } /** * Updates current metric. If the metric does not exist, it is created. * * @return a {@code Metric} object with updated information * @throws LoggingException upon failure */ public Metric update(MetricInfo metricInfo) { return logging.update(metricInfo); } /** * Sends a request to update current metric. If the metric does not exist, it is created. This * method returns a {@code Future} object to consume the result. {@link Future#get()} returns a * {@code Metric} object with updated information. * * @throws LoggingException upon failure */ public Future updateAsync(MetricInfo metricInfo) { return logging.updateAsync(metricInfo); } private void readObject(ObjectInputStream input) throws IOException, ClassNotFoundException { input.defaultReadObject(); this.logging = options.service(); } static Metric fromPb(Logging logging, LogMetric metricPb) { MetricInfo metricInfo = MetricInfo.fromPb(metricPb); return new Metric(logging, new BuilderImpl(metricInfo)); } static Function fromPbFunction(final Logging logging) { return new Function() { @Override public Metric apply(LogMetric metricPb) { return metricPb != null ? fromPb(logging, metricPb) : null; } }; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy