Skip to content

Commit

Permalink
Merge pull request #457 from Microsoft/develop
Browse files Browse the repository at this point in the history
Merge develop to master for 1.0.7
  • Loading branch information
OsvaldoRosado authored Nov 19, 2018
2 parents de8679a + 24441e5 commit e0c1505
Show file tree
Hide file tree
Showing 13 changed files with 114 additions and 34 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ obj/
# Ignore Node files
node_modules/**
Tests/BackCompatibility/OldTSC/node_modules/**
Tests/BackCompatibility/Node10Types/node_modules/**
Tests/FunctionalTests/Runner/node_modules/**
Tests/FunctionalTests/TestApp/node_modules/**

Expand Down
15 changes: 8 additions & 7 deletions AutoCollection/HttpRequestParser.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import http = require("http");
import url = require("url");
import net = require("net");

import Contracts = require("../Declarations/Contracts");
import TelemetryClient = require("../Library/TelemetryClient");
Expand Down Expand Up @@ -27,17 +28,17 @@ class HttpRequestParser extends RequestParser {

private correlationContextHeader: string;

constructor(request: http.ServerRequest, requestId?: string) {
constructor(request: http.IncomingMessage, requestId?: string) {
super();
if (request) {
this.method = request.method;
this.url = this._getAbsoluteUrl(request);
this.startTime = +new Date();
this.socketRemoteAddress = (<any>request).socket && (<any>request).socket.remoteAddress;
this.parseHeaders(request, requestId);
if (request.connection) {
this.connectionRemoteAddress = request.connection.remoteAddress;
this.legacySocketRemoteAddress = (<any>request.connection)["socket"] && (<any>request.connection)["socket"].remoteAddress;
if ((<any>request).connection) {
this.connectionRemoteAddress = ((<any>request).connection as net.Socket).remoteAddress;
this.legacySocketRemoteAddress = (<any>(<any>request).connection)["socket"] && (<any>(<any>request).connection)["socket"].remoteAddress;
}
}
}
Expand Down Expand Up @@ -136,12 +137,12 @@ class HttpRequestParser extends RequestParser {
return this.correlationContextHeader;
}

private _getAbsoluteUrl(request: http.ServerRequest): string {
private _getAbsoluteUrl(request: http.IncomingMessage): string {
if (!request.headers) {
return request.url;
}

var encrypted = <any>request.connection ? (<any>request.connection).encrypted : null;
var encrypted = (<any>request).connection ? ((<any>request).connection as any).encrypted : null;
var requestUrl = url.parse(request.url);

var pathName = requestUrl.pathname;
Expand Down Expand Up @@ -195,7 +196,7 @@ class HttpRequestParser extends RequestParser {
return value;
}

private parseHeaders(request: http.ServerRequest, requestId?: string) {
private parseHeaders(request: http.IncomingMessage, requestId?: string) {
this.rawHeaders = request.headers || (<any>request).rawHeaders;
this.userAgent = request.headers && request.headers["user-agent"];
this.sourceCorrelationId = Util.getCorrelationContextTarget(request, RequestResponseHeaders.requestContextSourceKey);
Expand Down
53 changes: 33 additions & 20 deletions AutoCollection/HttpRequests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ import AutoCollectPerformance = require("./Performance");

class AutoCollectHttpRequests {

public static INSTANCE:AutoCollectHttpRequests;
public static INSTANCE: AutoCollectHttpRequests;

private static alreadyAutoCollectedFlag = '_appInsightsAutoCollected';

private _client: TelemetryClient;
private _isEnabled: boolean;
Expand Down Expand Up @@ -82,28 +84,39 @@ class AutoCollectHttpRequests {
throw new Error('onRequest handler must be a function');
}
return (request:http.ServerRequest, response:http.ServerResponse) => {
// Set up correlation context
const requestParser = new HttpRequestParser(request);
const correlationContext = this._generateCorrelationContext(requestParser);

// Note: Check for if correlation is enabled happens within this method.
// If not enabled, function will directly call the callback.
CorrelationContextManager.runWithContext(correlationContext, () => {
if (this._isEnabled) {
// Auto collect request
AutoCollectHttpRequests.trackRequest(this._client, {request: request, response: response}, requestParser);
}

// Add this request to the performance counter
// Note: Check for if perf counters are enabled happens within this method.
// TODO: Refactor common bits between trackRequest and countRequest so they can
// be used together, even when perf counters are on, and request tracking is off
AutoCollectPerformance.countRequest(request, response);

const shouldCollect: boolean = request && !(<any>request)[AutoCollectHttpRequests.alreadyAutoCollectedFlag];

if (request && shouldCollect) {
// Set up correlation context
const requestParser = new HttpRequestParser(request);
const correlationContext = this._generateCorrelationContext(requestParser);

// Note: Check for if correlation is enabled happens within this method.
// If not enabled, function will directly call the callback.
CorrelationContextManager.runWithContext(correlationContext, () => {
if (this._isEnabled) {
// Mark as auto collected
(<any>request)[AutoCollectHttpRequests.alreadyAutoCollectedFlag] = true;

// Auto collect request
AutoCollectHttpRequests.trackRequest(this._client, {request: request, response: response}, requestParser);
}

// Add this request to the performance counter
// Note: Check for if perf counters are enabled happens within this method.
// TODO: Refactor common bits between trackRequest and countRequest so they can
// be used together, even when perf counters are on, and request tracking is off
AutoCollectPerformance.countRequest(request, response);

if (typeof onRequest === "function") {
onRequest(request, response);
}
});
} else {
if (typeof onRequest === "function") {
onRequest(request, response);
}
});
}
}
}

Expand Down
5 changes: 1 addition & 4 deletions AutoCollection/Performance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,8 @@ class AutoCollectPerformance {
}

private _trackMemory() {
var totalMem = os.totalmem();
var freeMem = os.freemem();
var usedMem = totalMem - freeMem;
var percentUsedMem = usedMem / (totalMem || 1);
var percentAvailableMem = freeMem / (totalMem || 1);
var usedMem = process.memoryUsage().rss;
this._client.trackMetric({name:"\\Process(??APP_WIN32_PROC??)\\Private Bytes", value: usedMem});
this._client.trackMetric({name: "\\Memory\\Available Bytes", value: freeMem});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export interface NodeHttpRequestTelemetry extends Telemetry
/**
* HTTP request object
*/
request: http.ServerRequest;
request: http.IncomingMessage;

/**
* HTTP response object
Expand Down
2 changes: 1 addition & 1 deletion Library/Util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import RequestResponseHeaders = require("./RequestResponseHeaders");


class Util {
public static MAX_PROPERTY_LENGTH = 1024;
public static MAX_PROPERTY_LENGTH = 8192;
public static tlsRestrictedAgent: https.Agent = new https.Agent(<any>{
secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3 |
constants.SSL_OP_NO_TLSv1 | constants.SSL_OP_NO_TLSv1_1
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@ function startMeasuringEventLoop() {
// Measure event loop scheduling delay
setInterval(() => {
var elapsed = process.hrtime(startTime);
startTime = process.hrtime();
sampleSum += elapsed[0] * 1e9 + elapsed[1];
sampleCount++;
}, 0);
Expand Down
6 changes: 6 additions & 0 deletions Tests/BackCompatibility/Node10Types/main.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import appInsights = require("applicationinsights");
import http = require("http");

appInsights.setup().start();
appInsights.defaultClient.trackEvent({name: "Test event"});
appInsights.defaultClient.trackNodeHttpDependency({options: {}, request: http.request({})});
20 changes: 20 additions & 0 deletions Tests/BackCompatibility/Node10Types/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions Tests/BackCompatibility/Node10Types/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "oldtsc",
"version": "1.0.0",
"description": ".",
"private": true,
"main": "index.js",
"scripts": {
"build": "tsc"
},
"author": "",
"license": "UNLICENSED",
"devDependencies": {
"@types/node": "^10.12.9",
"typescript": "^3.1.0"
},
"dependencies": {}
}
8 changes: 8 additions & 0 deletions Tests/BackCompatibility/Node10Types/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"noEmit": true
}
}
16 changes: 16 additions & 0 deletions Tests/BackCompatibility/RunBackCompatTests.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,22 @@ function main() {
console.error("Test FAILED!")
return 1;
}

// Node10Types
console.info("Testing compilation in app with TSC 3.1.0 and node 10 types...");
run("npm uninstall applicationinsights", "./Node10Types");
if (run("npm install", "./Node10Types").code !== 0) {
console.error("Could not install OldTSC dependencies!")
return 1;
}
if (run("npm install --no-save " + path, "./Node10Types").code !== 0) {
console.error("Could not install SDK in Node10Types!");
return 1;
}
if(runLive("npm run build", "./Node10Types").code !== 0) {
console.error("Test FAILED!")
return 1;
}


return 0;
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "applicationinsights",
"license": "MIT",
"bugs": "https://github.com/Microsoft/ApplicationInsights-node.js/issues",
"version": "1.0.6",
"version": "1.0.7",
"description": "Microsoft Application Insights module for Node.js",
"repository": {
"type": "git",
Expand Down

0 comments on commit e0c1505

Please sign in to comment.