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

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

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

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

import com.google.api.core.ApiFuture;
import com.google.common.base.Function;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import com.google.logging.v2.LogSink;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Objects;

/**
 * Cloud Logging sinks can be used to control the export of your logs. Each sink specifies the
 * export of a set of log entries to a certain destination. A sink consists of a name, unique to the
 * project, a filter for choosing the log entries to export and a destination for the log entries.
 *
 * 

Sink destination can either be a Google Cloud Storage bucket (see {@link * SinkInfo.Destination.BucketDestination}, a Google Cloud BigQuery dataset (see {@link * SinkInfo.Destination.DatasetDestination}) or a Google CloudPub/Sub topic (see {@link * SinkInfo.Destination.TopicDestination}). * *

{@code Sink} adds a layer of service-related functionality over {@link SinkInfo}. Objects of * this class are immutable. To get a {@code Sink} object with the most recent information use * {@link #reload} or {@link #reloadAsync}. * * @see About * Sinks */ public class Sink extends SinkInfo { private static final long serialVersionUID = -1549310461066853001L; private final LoggingOptions options; private transient Logging logging; /** A builder for {@code Sink} objects. */ public static final class Builder extends SinkInfo.Builder { private final Logging logging; private final BuilderImpl delegate; private Builder(Sink sink) { logging = sink.logging; delegate = new BuilderImpl(sink); } @Override @CanIgnoreReturnValue public Builder setName(String name) { delegate.setName(name); return this; } @Override @CanIgnoreReturnValue public Builder setDestination(Destination destination) { delegate.setDestination(destination); return this; } @Override @CanIgnoreReturnValue public Builder setFilter(String filter) { delegate.setFilter(filter); return this; } @Override @CanIgnoreReturnValue public Builder setVersionFormat(VersionFormat versionFormat) { delegate.setVersionFormat(versionFormat); return this; } @Override public Sink build() { return new Sink(this.logging, this.delegate); } } Sink(Logging logging, BuilderImpl builder) { super(builder); this.logging = checkNotNull(logging); options = logging.getOptions(); } @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 instanceof Sink)) { return false; } Sink other = (Sink) obj; return baseEquals(other) && Objects.equals(options, other.options); } /** Returns the sinks's {@code Logging} object used to issue requests. */ public Logging getLogging() { return logging; } /** * Deletes this sink. * *

Example of deleting the sink. * *

{@code
   * boolean deleted = sink.delete();
   * if (deleted) {
   *   // the sink was deleted
   * } else {
   *   // the sink was not found
   * }
   * }
* * @return {@code true} if the sink was deleted, {@code false} if it was not found * @throws LoggingException upon failure */ public boolean delete() { return logging.deleteSink(getName()); } /** * Sends a request for deleting this sink. This method returns a {@code ApiFuture} object to * consume the result. {@link ApiFuture#get()} returns {@code true} if the sink was deleted, * {@code false} if it was not found. * *

Example of asynchronously deleting the sink. * *

{@code
   * ApiFuture future = sink.deleteAsync();
   * // ...
   * boolean deleted = future.get();
   * if (deleted) {
   *   // the sink was deleted
   * } else {
   *   // the sink was not found
   * }
   * }
* * @throws LoggingException upon failure */ public ApiFuture deleteAsync() { return logging.deleteSinkAsync(getName()); } /** * Fetches current sink's latest information. Returns {@code null} if the sink does not exist. * *

Example of getting the sink's latest information. * *

{@code
   * Sink latestSink = sink.reload();
   * if (latestSink == null) {
   *   // the sink was not found
   * }
   * }
* * @return a {@code Sink} object with latest information or {@code null} if not found * @throws LoggingException upon failure */ public Sink reload() { return logging.getSink(getName()); } /** * Sends a request to fetch current sink's latest information. This method returns a {@code * ApiFuture} object to consume the result. {@link ApiFuture#get()} returns a {@code Sink} object * with latest information or {@code null} if not found. * *

Example of asynchronously getting the sink's latest information. * *

{@code
   * ApiFuture future = sink.reloadAsync();
   * // ...
   * Sink latestSink = future.get();
   * if (latestSink == null) {
   *   // the sink was not found
   * }
   * }
* * @throws LoggingException upon failure */ public ApiFuture reloadAsync() { return logging.getSinkAsync(getName()); } /** * Updates current sink. If the sink does not exist, it is created. * *

Example of updating the sink's information. * *

{@code
   * Sink updatedSink = sink.toBuilder()
   *     .setFilter("severity<=ERROR")
   *     .build()
   *     .update();
   * }
* * @return a {@code Sink} object with updated information * @throws LoggingException upon failure */ public Sink update() { return logging.update(this); } /** * Sends a request to update current sink. If the sink does not exist, it is created. This method * returns a {@code ApiFuture} object to consume the result. {@link ApiFuture#get()} returns a * {@code Sink} object with updated information. * *

Example of asynchronously updating the sink's information. * *

{@code
   * ApiFuture future = sink.toBuilder()
   *     .setFilter("severity<=ERROR")
   *     .build()
   *     .updateAsync();
   * // ...
   * Sink updatedSink = future.get();
   * }
* * @throws LoggingException upon failure */ public ApiFuture updateAsync() { return logging.updateAsync(this); } private void readObject(ObjectInputStream input) throws IOException, ClassNotFoundException { input.defaultReadObject(); this.logging = options.getService(); } static Sink fromPb(Logging logging, LogSink sinkPb) { SinkInfo sinkInfo = SinkInfo.fromPb(sinkPb); return new Sink(logging, new BuilderImpl(sinkInfo)); } static Function fromPbFunction(final Logging logging) { return (LogSink sinkPb) -> { return sinkPb != null ? fromPb(logging, sinkPb) : null; }; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy