Add Server-Timing header to WADO Proxy

This commit is contained in:
Erik Ziegler 2017-06-13 14:15:44 +02:00
parent 27296a8bca
commit dde2a981b2
2 changed files with 41 additions and 2 deletions

View File

@ -4,6 +4,10 @@ Package.describe({
version: '0.0.1' version: '0.0.1'
}); });
Npm.depends({
'performance-now': '2.1.0'
});
Package.onUse(function(api) { Package.onUse(function(api) {
api.versionsFrom('1.4'); api.versionsFrom('1.4');

View File

@ -7,7 +7,7 @@ import { OHIF } from 'meteor/ohif:core';
const url = require("url"); const url = require("url");
const http = require("http"); const http = require("http");
const https = require("https"); const https = require("https");
const querystring = require("querystring"); const now = require("performance-now")
const doAuth = Meteor.users.find().count() ? true : false; 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 response = this.response;
const params = this.params; const params = this.params;
let start = now();
let user; let user;
if (doAuth) { if (doAuth) {
user = authenticateUser(request); user = authenticateUser(request);
@ -43,6 +44,10 @@ Router.route(Settings.uri.replace(OHIF.utils.absoluteUrl(), ''), function() {
return; return;
} }
} }
let end = now();
const authenticationTime = end - start;
start = now();
// TODO: Merge this with ohif-study-list? There is a circular dependency now... // TODO: Merge this with ohif-study-list? There is a circular dependency now...
const server = Servers.findOne(params.query.serverId); const server = Servers.findOne(params.query.serverId);
@ -67,6 +72,7 @@ Router.route(Settings.uri.replace(OHIF.utils.absoluteUrl(), ''), function() {
console.log(request.url); console.log(request.url);
} }
start = now();
if (requestOpt.logTiming) { if (requestOpt.logTiming) {
console.time(request.url); console.time(request.url);
} }
@ -110,11 +116,27 @@ Router.route(Settings.uri.replace(OHIF.utils.absoluteUrl(), ''), function() {
options.auth = requestOpt.auth; options.auth = requestOpt.auth;
} }
end = now();
const prepRequestTime = end - start;
// Use Node's HTTP API to send a request to the PACS // Use Node's HTTP API to send a request to the PACS
const proxyRequest = requester(options, proxyResponse => { const proxyRequest = requester(options, proxyResponse => {
console.log(JSON.stringify(proxyResponse, null, 2));
// When we receive data from the PACS, stream it as the // When we receive data from the PACS, stream it as the
// response to the original request. // response to the original request.
// console.log(`Got response: ${proxyResponse.statusCode}`); // 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); response.writeHead(proxyResponse.statusCode, proxyResponse.headers);
if (requestOpt.logTiming) { 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 // If our request to the PACS fails, log the error message
proxyRequest.on('error', error => { 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`); response.end(`Error: Problem with request to PACS: ${error.message}\n`);
}); });