package com.splunk.logging; /** * @copyright * * Copyright 2013-2015 Splunk, Inc. * * 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. */ import java.util.List; /** * @brief Splunk http event collector middleware implementation. * * @details * A user application can utilize HttpEventCollectorMiddleware to customize the behavior * of sending events to Splunk. A user application plugs middleware components to * the HttpEventCollectorSender by calling addMiddleware method. * * HttpEventCollectorResendMiddleware.java is an example of how middleware can be used. */ public class HttpEventCollectorMiddleware { private HttpSenderMiddleware httpSenderMiddleware = null; /** * An interface that describes an abstract events sender working asynchronously. */ public interface IHttpSender { public void postEvents(final List<HttpEventCollectorEventInfo> events, IHttpSenderCallback callback); } /** * Callback methods invoked by events sender. */ public interface IHttpSenderCallback { public void completed(int statusCode, final String reply); public void failed(final Exception ex); } /** * An abstract middleware component. */ public static abstract class HttpSenderMiddleware { private HttpSenderMiddleware next; public abstract void postEvents( final List<HttpEventCollectorEventInfo> events, IHttpSender sender, IHttpSenderCallback callback); protected void callNext(final List<HttpEventCollectorEventInfo> events, IHttpSender sender, IHttpSenderCallback callback) { if (next != null) { next.postEvents(events, sender, callback); } else { sender.postEvents(events, callback); } } } /** * Post http event collector data * @param events list * @param sender is http sender * @param callback async callback */ public void postEvents(final List<HttpEventCollectorEventInfo> events, IHttpSender sender, IHttpSenderCallback callback) { if (httpSenderMiddleware == null) { sender.postEvents(events, callback); } else { httpSenderMiddleware.postEvents(events, sender, callback); } } /** * Plug a middleware component to the middleware chain. * @param middleware is a new middleware */ public void add(final HttpSenderMiddleware middleware) { if (httpSenderMiddleware == null) { httpSenderMiddleware = middleware; } else { middleware.next = httpSenderMiddleware; httpSenderMiddleware = middleware; } } }