public getDependencyTelemetry()

in AutoCollection/HttpDependencyParser.ts [45:108]


    public getDependencyTelemetry(baseTelemetry?: Contracts.Telemetry, dependencyId?: string): Contracts.DependencyTelemetry {
        let dependencyName = this.method.toUpperCase();
        let remoteDependencyType = Contracts.RemoteDependencyDataConstants.TYPE_HTTP;
        let remoteDependencyTarget = "";
        try {
            let urlObject = new url.URL(this.url);
            urlObject.search = undefined;
            urlObject.hash = undefined;
            dependencyName += " " + urlObject.pathname;
            remoteDependencyTarget = urlObject.hostname;
            if (urlObject.port) {
                remoteDependencyTarget += ":" + urlObject.port;
            }

        }
        catch (ex) { // Invalid URL
        }
        if (this.correlationId) {
            remoteDependencyType = Contracts.RemoteDependencyDataConstants.TYPE_AI;
            if (this.correlationId !== CorrelationIdManager.correlationIdPrefix) {
                remoteDependencyTarget += " | " + this.correlationId;
            }
        } else {
            remoteDependencyType = Contracts.RemoteDependencyDataConstants.TYPE_HTTP;
        }

        var dependencyTelemetry: Contracts.DependencyTelemetry & Contracts.Identified = {
            id: dependencyId,
            name: dependencyName,
            data: this.url,
            duration: this.duration,
            success: this._isSuccess(),
            resultCode: this.statusCode ? this.statusCode.toString() : null,
            properties: this.properties || {},
            dependencyTypeName: remoteDependencyType,
            target: remoteDependencyTarget
        };

        if (baseTelemetry && baseTelemetry.time) {
            dependencyTelemetry.time = baseTelemetry.time;
        } else if (this.startTime) {
            dependencyTelemetry.time = new Date(this.startTime);
        }

        // We should keep any parameters the user passed in
        // Except the fields defined above in requestTelemetry, which take priority
        // Except the properties field, where they're merged instead, with baseTelemetry taking priority
        if (baseTelemetry) {
            // Copy missing fields
            for (let key in baseTelemetry) {
                if (!(<any>dependencyTelemetry)[key]) {
                    (<any>dependencyTelemetry)[key] = (<any>baseTelemetry)[key];
                }
            }
            // Merge properties
            if (baseTelemetry.properties) {
                for (let key in baseTelemetry.properties) {
                    dependencyTelemetry.properties[key] = baseTelemetry.properties[key];
                }
            }
        }

        return dependencyTelemetry;
    }