From dde2a981b25d263c3964ae8fe746281e36e6bbe7 Mon Sep 17 00:00:00 2001 From: Erik Ziegler Date: Tue, 13 Jun 2017 14:15:44 +0200 Subject: [PATCH] Add Server-Timing header to WADO Proxy --- Packages/ohif-wadoproxy/package.js | 4 +++ Packages/ohif-wadoproxy/server/routes.js | 39 ++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/Packages/ohif-wadoproxy/package.js b/Packages/ohif-wadoproxy/package.js index 689acc31a..2a80c729a 100755 --- a/Packages/ohif-wadoproxy/package.js +++ b/Packages/ohif-wadoproxy/package.js @@ -4,6 +4,10 @@ Package.describe({ version: '0.0.1' }); +Npm.depends({ + 'performance-now': '2.1.0' +}); + Package.onUse(function(api) { api.versionsFrom('1.4'); diff --git a/Packages/ohif-wadoproxy/server/routes.js b/Packages/ohif-wadoproxy/server/routes.js index e3f4046e0..f802ef28b 100755 --- a/Packages/ohif-wadoproxy/server/routes.js +++ b/Packages/ohif-wadoproxy/server/routes.js @@ -7,7 +7,7 @@ import { OHIF } from 'meteor/ohif:core'; const url = require("url"); const http = require("http"); const https = require("https"); -const querystring = require("querystring"); +const now = require("performance-now") const doAuth = Meteor.users.find().count() ? true : false; @@ -34,6 +34,7 @@ Router.route(Settings.uri.replace(OHIF.utils.absoluteUrl(), ''), function() { const response = this.response; const params = this.params; + let start = now(); let user; if (doAuth) { user = authenticateUser(request); @@ -43,6 +44,10 @@ Router.route(Settings.uri.replace(OHIF.utils.absoluteUrl(), ''), function() { return; } } + let end = now(); + const authenticationTime = end - start; + + start = now(); // TODO: Merge this with ohif-study-list? There is a circular dependency now... const server = Servers.findOne(params.query.serverId); @@ -67,6 +72,7 @@ Router.route(Settings.uri.replace(OHIF.utils.absoluteUrl(), ''), function() { console.log(request.url); } + start = now(); if (requestOpt.logTiming) { console.time(request.url); } @@ -109,12 +115,28 @@ Router.route(Settings.uri.replace(OHIF.utils.absoluteUrl(), ''), function() { if (requestOpt.auth) { options.auth = requestOpt.auth; } + + end = now(); + const prepRequestTime = end - start; // Use Node's HTTP API to send a request to the PACS const proxyRequest = requester(options, proxyResponse => { + console.log(JSON.stringify(proxyResponse, null, 2)); // When we receive data from the PACS, stream it as the // response to the original request. // console.log(`Got response: ${proxyResponse.statusCode}`); + end = now(); + const proxyReqTime = end - start; + const totalProxyTime = authenticationTime + prepRequestTime + proxyReqTime; + const serverTimingHeaders = ` + auth=${authenticationTime}; "Authenticate User", + prep-req=${prepRequestTime}; "Prepare Request Headers", + proxy-req=${proxyReqTime}; "Request to WADO URI", + total-proxy=${totalProxyTime}; "Total", + `.replace(/\n/g, ''); + + proxyResponse.headers['Server-Timing'] = serverTimingHeaders; + response.writeHead(proxyResponse.statusCode, proxyResponse.headers); if (requestOpt.logTiming) { @@ -126,7 +148,20 @@ Router.route(Settings.uri.replace(OHIF.utils.absoluteUrl(), ''), function() { // If our request to the PACS fails, log the error message proxyRequest.on('error', error => { - response.writeHead(500); + end = now(); + const proxyReqTime = end - start; + const totalProxyTime = authenticationTime + prepRequestTime + proxyReqTime; + console.timeEnd(request.url); + const serverTimingHeaders = { + 'Server-Timing': ` + auth=${authenticationTime}; "Authenticate User", + prep-req=${prepRequestTime}; "Prepare Request Headers", + proxy-req=${proxyReqTime}; "Request to WADO URI", + total-proxy=${totalProxyTime}; "Total", + `.replace(/\n/g, '') + }; + + response.writeHead(500, serverTimingHeaders); response.end(`Error: Problem with request to PACS: ${error.message}\n`); });