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

com.microsoft.windowsazure.tracing.CloudTracing Maven / Gradle / Ivy

/**
 * Copyright Microsoft Corporation
 * 
 * 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.microsoft.windowsazure.tracing;

import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;

/**
 * Provides tracing utilities that insight into all aspects of client operations
 * via implementations of the ICloudTracingInterceptor interface. All tracing is
 * global.
 */
public abstract class CloudTracing {
    private CloudTracing() {
    }

    /**
     * The collection of tracing interceptors to notify.
     */
    private static List interceptors;

    /**
     * Gets the collection of tracing interceptors to notify.
     * 
     * @return the collection of tracing interceptors.
     */
    public static List getInterceptors() {
        return interceptors;
    }

    /**
     * Gets a value indicating whether tracing is enabled. Tracing can be
     * disabled for performance.
     */
    private static boolean isEnabled;

    /**
     * Gets the value indicating whether tracing is enabled.
     * 
     * @return Boolean value indicating if tracing is enabled.
     */
    public static boolean getIsEnabled() {
        return isEnabled;
    }

    /**
     * Sets the value indicating whether tracing is enabled.
     * 
     * @param enabled
     *            Boolean value indicating if tracing is enabled.
     */
    public static void setIsEnabled(final boolean enabled) {
        isEnabled = enabled;
    }

    static {
        isEnabled = true;
        interceptors = Collections
                .synchronizedList(new ArrayList());
    }

    /**
     * Add a tracing interceptor to be notified of changes.
     * 
     * @param cloudTracingInterceptor
     *            The tracing interceptor.
     */
    public static void addTracingInterceptor(
            final CloudTracingInterceptor cloudTracingInterceptor) {
        if (cloudTracingInterceptor == null) {
            throw new NullPointerException();
        }

        interceptors.add(cloudTracingInterceptor);
    }

    /**
     * Remove a tracing interceptor from change notifications.
     * 
     * @param cloudTracingInterceptor
     *            The tracing interceptor.
     * @return True if the tracing interceptor was found and removed; false
     *         otherwise.
     */
    public static boolean removeTracingInterceptor(
            CloudTracingInterceptor cloudTracingInterceptor) {
        if (cloudTracingInterceptor == null) {
            throw new NullPointerException();
        }

        return interceptors.remove(cloudTracingInterceptor);
    }

    private static long nextInvocationId = 0;

    public static long getNextInvocationId() {
        return ++nextInvocationId;
    }

    public static void information(String message, Object... parameters) {
        if (isEnabled) {
            information(String.format(message, parameters));
        }
    }

    public static void configuration(String source, String name, String value) {
        if (isEnabled) {
            synchronized (interceptors) {
                for (CloudTracingInterceptor writer : interceptors) {
                    writer.configuration(source, name, value);
                }
            }
        }
    }

    public static void information(String message) {
        if (isEnabled) {
            synchronized (interceptors) {
                for (CloudTracingInterceptor writer : interceptors) {
                    writer.information(message);
                }
            }
        }
    }

    public static void enter(String invocationId, Object instance,
            String method, HashMap parameters) {
        if (isEnabled) {
            synchronized (interceptors) {
                for (CloudTracingInterceptor writer : interceptors) {
                    writer.enter(invocationId, instance, method, parameters);
                }
            }
        }
    }

    public static void sendRequest(String invocationId, HttpRequest request) {
        if (isEnabled) {
            synchronized (interceptors) {
                for (CloudTracingInterceptor writer : interceptors) {
                    writer.sendRequest(invocationId, request);
                }
            }
        }
    }

    public static void receiveResponse(String invocationId,
            HttpResponse response) {
        if (isEnabled) {
            synchronized (interceptors) {
                for (CloudTracingInterceptor writer : interceptors) {
                    writer.receiveResponse(invocationId, response);
                }
            }
        }
    }

    public static void error(String invocationId, Exception ex) {
        if (isEnabled) {
            synchronized (interceptors) {
                for (CloudTracingInterceptor writer : interceptors) {
                    writer.error(invocationId, ex);
                }
            }
        }
    }

    public static void exit(String invocationId, Object result) {
        if (isEnabled) {
            synchronized (interceptors) {
                for (CloudTracingInterceptor writer : interceptors) {
                    writer.exit(invocationId, result);
                }
            }
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy