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

com.microsoft.applicationinsights.telemetry.RequestTelemetry Maven / Gradle / Ivy

/*
 * ApplicationInsights-Java
 * Copyright (c) Microsoft Corporation
 * All rights reserved.
 *
 * MIT License
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this
 * software and associated documentation files (the ""Software""), to deal in the Software
 * without restriction, including without limitation the rights to use, copy, modify, merge,
 * publish, distribute, sublicense, and/or sell copies of the Software, and to permit
 * persons to whom the Software is furnished to do so, subject to the following conditions:
 * The above copyright notice and this permission notice shall be included in all copies or
 * substantial portions of the Software.
 * THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
 * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */

package com.microsoft.applicationinsights.telemetry;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
import java.util.concurrent.ConcurrentMap;

import com.microsoft.applicationinsights.internal.schemav2.RequestData;
import com.microsoft.applicationinsights.internal.util.LocalStringsUtils;

import com.google.common.base.Strings;
import com.microsoft.applicationinsights.internal.util.Sanitizer;
import org.apache.http.HttpStatus;

/**
 * Encapsulates information about a web request handled by the application.
 *
 * You can send information about requests processed by your web application to Application Insights by
 * passing an instance of this class to the 'trackRequest' method of the {@link com.microsoft.applicationinsights.TelemetryClient}
 */
public final class RequestTelemetry extends BaseTelemetry {
    private final RequestData data;

    /**
     * Initializes a new instance of the HttpRequestTelemetry class.
     */
    public RequestTelemetry() {
        this.data = new RequestData();
        initialize(this.data.getProperties());
        setId(LocalStringsUtils.generateRandomIntegerId());

        // Setting mandatory fields.
        setTimestamp(new Date());
        setResponseCode(Integer.toString(HttpStatus.SC_OK));
        setSuccess(true);
    }

    /**
     * Initializes a new instance of the HttpRequestTelemetry class with the given name,
     * time stamp, duration, HTTP response code and success property values.
     * @param name A user-friendly name for the request.
     * @param timestamp The time of the request.
     * @param duration The duration, in milliseconds, of the request processing.
     * @param responseCode The HTTP response code.
     * @param success 'true' if the request was a success, 'false' otherwise.
     */
    public RequestTelemetry(String name, Date timestamp, long duration, String responseCode, boolean success) {
        this(name, timestamp, new Duration(duration), responseCode, success);
    }

    /**
     * Initializes a new instance of the HttpRequestTelemetry class with the given name,
     * time stamp, duration, HTTP response code and success property values.
     * @param name A user-friendly name for the request.
     * @param timestamp The time of the request.
     * @param duration The duration, as an {@link com.microsoft.applicationinsights.telemetry.Duration} instance, of the request processing.
     * @param responseCode The HTTP response code.
     * @param success 'true' if the request was a success, 'false' otherwise.
     */
    public RequestTelemetry(String name, Date timestamp, Duration duration, String responseCode, boolean success) {
        this.data = new RequestData();
        initialize(this.data.getProperties());

        setId(LocalStringsUtils.generateRandomIntegerId());

        setTimestamp(timestamp);

        setName(name);
        setDuration(duration);
        setResponseCode(responseCode);
        setSuccess(success);
    }

    /**
     * Gets a map of application-defined request metrics.
     * @return The map of metrics
     */
    ConcurrentMap getMetrics() {
        return data.getMeasurements();
    }

    /**
     * Sets the StartTime. Uses the default behavior and sets the property on the 'data' start time
     * @param timestamp he timestamp as Date.
     */
    @Override
    public void setTimestamp(Date timestamp) {
        if (timestamp == null) {
            timestamp = new Date();
        }

        super.setTimestamp(timestamp);
        data.setStartTime(timestamp);
    }

    /**
     * Gets or human-readable name of the requested page.
     * @return A human-readable name
     */
    public String getName() {
        return data.getName();
    }

    /**
     * Sets or human-readable name of the requested page.
     * @param name A human-readable name
     */
    public void setName(String name) {
        if (Strings.isNullOrEmpty(name)) {
            throw new IllegalArgumentException("The event name cannot be null or empty");
        }
        data.setName(name);
    }

    /**
     * Gets the unique identifier of the request.
     * @return Unique identifier
     */
    public String getId()
    {
        return data.getId();
    }

    /**
     * Sets the unique identifier of the request.
     * @param id Unique identifier
     */
    public void setId(String id) {
        data.setId(id);
    }

    /**
     * Gets response code returned by the application after handling the request.
     * @return Application's response code
     */
    public String getResponseCode() {
        return data.getResponseCode();
    }

    /**
     * Sets response code returned by the application after handling the request.
     * @param responseCode Application's response code
     */
    public void setResponseCode(String responseCode) {
        data.setResponseCode(responseCode);
    }

    /**
     * Gets a value indicating whether application handled the request successfully.
     * @return Success indication
     */
    public boolean isSuccess() {
        return data.isSuccess();
    }

    /**
     * Sets a value indicating whether application handled the request successfully.
     * @param success Success indication
     */
    public void setSuccess(boolean success) {
        data.setSuccess(success);
    }

    /**
     * Gets the amount of time it took the application to handle the request.
     * @return Amount of time in milliseconds
     */
    public Duration getDuration() {
        return data.getDuration();
    }

    /**
     * Sets the amount of time it took the application to handle the request.
     * @param duration Amount of time in captured in a {@link com.microsoft.applicationinsights.telemetry.Duration}.
     */
    public void setDuration(Duration duration) {
        data.setDuration(duration);
    }

    /**
     * Gets request url (optional).
     * @return The url
     * @throws MalformedURLException if the url is malformed
     */
    public URL getUrl() throws MalformedURLException {
        if (LocalStringsUtils.isNullOrEmpty(data.getUrl())) {
            return null;
        }

        return new URL(data.getUrl());
    }

    /**
     * Sets request url
     * @param url The URL
     */
    public void setUrl(URL url) {
        data.setUrl(url.toString());
    }

    /**
     * Sets request url.
     * @param url The url to store
     * @throws MalformedURLException If the url is malformed
     */
    public void setUrl(String url) throws MalformedURLException {
        URL u = new URL(url); // to validate and normalize
        data.setUrl(u.toString());
    }

    /**
     * Gets the HTTP method of the request.
     * @return The HTTP method
     */
    public String getHttpMethod() {
        return data.getHttpMethod();
    }

    /**
     * Sets the HTTP method of the request.
     * @param httpMethod The HTTP method
     */
    public void setHttpMethod(String httpMethod) {
        data.setHttpMethod(httpMethod);
    }

    @Override
    protected void additionalSanitize() {
        data.setName(Sanitizer.sanitizeName(data.getName()));
        data.setId(Sanitizer.sanitizeName(data.getId()));
        Sanitizer.sanitizeMeasurements(getMetrics());
        Sanitizer.sanitizeUri(data.getUrl());
    }

    @Override
    protected RequestData getData() {
        return data;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy