From 7634069614ea38e38458e4c3a3c3e17d8bc4137e Mon Sep 17 00:00:00 2001 From: Dave Pacheco Date: Thu, 28 Mar 2013 13:52:43 -0700 Subject: [PATCH] dtrace: pass more arguments to probes OSX and other DTrace implementations don't support dereferencing structs in probes. To accomodate that pass members from the struct as arguments so that DTrace is useful on those systems. --- src/node_dtrace.cc | 18 ++++++++++-------- src/node_provider.d | 34 ++++++++++++++++++---------------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/src/node_dtrace.cc b/src/node_dtrace.cc index 99bc3002d7..3e531644dc 100644 --- a/src/node_dtrace.cc +++ b/src/node_dtrace.cc @@ -139,7 +139,7 @@ Handle DTRACE_NET_SERVER_CONNECTION(const Arguments& args) { NODE_NET_SERVER_CONNECTION(conn.fd, conn.remote, conn.port, \ conn.buffered); #else - NODE_NET_SERVER_CONNECTION(&conn); + NODE_NET_SERVER_CONNECTION(&conn, conn.remote, conn.port); #endif return Undefined(node_isolate); @@ -157,7 +157,7 @@ Handle DTRACE_NET_STREAM_END(const Arguments& args) { #ifdef HAVE_SYSTEMTAP NODE_NET_STREAM_END(conn.fd, conn.remote, conn.port, conn.buffered); #else - NODE_NET_STREAM_END(&conn); + NODE_NET_STREAM_END(&conn, conn.remote, conn.port); #endif return Undefined(node_isolate); @@ -181,7 +181,7 @@ Handle DTRACE_NET_SOCKET_READ(const Arguments& args) { "argument 1 to be number of bytes")))); } int nbytes = args[1]->Int32Value(); - NODE_NET_SOCKET_READ(&conn, nbytes); + NODE_NET_SOCKET_READ(&conn, nbytes, conn.remote, conn.port); #endif return Undefined(node_isolate); @@ -205,7 +205,7 @@ Handle DTRACE_NET_SOCKET_WRITE(const Arguments& args) { "argument 1 to be number of bytes")))); } int nbytes = args[1]->Int32Value(); - NODE_NET_SOCKET_WRITE(&conn, nbytes); + NODE_NET_SOCKET_WRITE(&conn, nbytes, conn.remote, conn.port); #endif return Undefined(node_isolate); @@ -247,7 +247,8 @@ Handle DTRACE_HTTP_SERVER_REQUEST(const Arguments& args) { NODE_HTTP_SERVER_REQUEST(&req, conn.fd, conn.remote, conn.port, \ conn.buffered); #else - NODE_HTTP_SERVER_REQUEST(&req, &conn); + NODE_HTTP_SERVER_REQUEST(&req, &conn, conn.remote, conn.port, req.method, \ + req.url); #endif return Undefined(node_isolate); } @@ -264,7 +265,7 @@ Handle DTRACE_HTTP_SERVER_RESPONSE(const Arguments& args) { #ifdef HAVE_SYSTEMTAP NODE_HTTP_SERVER_RESPONSE(conn.fd, conn.remote, conn.port, conn.buffered); #else - NODE_HTTP_SERVER_RESPONSE(&conn); + NODE_HTTP_SERVER_RESPONSE(&conn, conn.remote, conn.port); #endif return Undefined(node_isolate); @@ -310,7 +311,8 @@ Handle DTRACE_HTTP_CLIENT_REQUEST(const Arguments& args) { NODE_HTTP_CLIENT_REQUEST(&req, conn.fd, conn.remote, conn.port, \ conn.buffered); #else - NODE_HTTP_CLIENT_REQUEST(&req, &conn); + NODE_HTTP_CLIENT_REQUEST(&req, &conn, conn.remote, conn.port, req.method, \ + req.url); #endif return Undefined(node_isolate); } @@ -326,7 +328,7 @@ Handle DTRACE_HTTP_CLIENT_RESPONSE(const Arguments& args) { #ifdef HAVE_SYSTEMTAP NODE_HTTP_CLIENT_RESPONSE(conn.fd, conn.remote, conn.port, conn.buffered); #else - NODE_HTTP_CLIENT_RESPONSE(&conn); + NODE_HTTP_CLIENT_RESPONSE(&conn, conn.remote, conn.port); #endif return Undefined(node_isolate); diff --git a/src/node_provider.d b/src/node_provider.d index 646e21a22d..4c526d477e 100644 --- a/src/node_provider.d +++ b/src/node_provider.d @@ -52,24 +52,26 @@ typedef struct { } node_http_request_t; provider node { - probe net__server__connection(node_dtrace_connection_t *c) : - (node_connection_t *c); - probe net__stream__end(node_dtrace_connection_t *c) : - (node_connection_t *c); - probe net__socket__read(node_dtrace_connection_t *c, int b) : - (node_connection_t *c, int b); - probe net__socket__write(node_dtrace_connection_t *c, int b) : - (node_connection_t *c, int b); + probe net__server__connection(node_dtrace_connection_t *c, + const char *a, int p) : (node_connection_t *c, string a, int p); + probe net__stream__end(node_dtrace_connection_t *c, const char *a, + int p) : (node_connection_t *c, string a, int p); + probe net__socket__read(node_dtrace_connection_t *c, int b, + const char *a, int p) : (node_connection_t *c, int b, string a, int p); + probe net__socket__write(node_dtrace_connection_t *c, int b, + const char *a, int p) : (node_connection_t *c, int b, string a, int p); probe http__server__request(node_dtrace_http_server_request_t *h, - node_dtrace_connection_t *c) : - (node_http_request_t *h, node_connection_t *c); - probe http__server__response(node_dtrace_connection_t *c) : - (node_connection_t *c); + node_dtrace_connection_t *c, const char *a, int p, const char *m, + const char *u) : (node_http_request_t *h, node_connection_t *c, + string a, int p, string m, string u); + probe http__server__response(node_dtrace_connection_t *c, const char *a, + int p) : (node_connection_t *c, string a, int p); probe http__client__request(node_dtrace_http_client_request_t *h, - node_dtrace_connection_t *c) : - (node_http_request_t *h, node_connection_t *c); - probe http__client__response(node_dtrace_connection_t *c) : - (node_connection_t *c); + node_dtrace_connection_t *c, const char *a, int p, const char *m, + const char *u) : (node_http_request_t *h, node_connection_t *c, string a, + int p, string m, string u); + probe http__client__response(node_dtrace_connection_t *c, const char *a, + int p) : (node_connection_t *c, string a, int p); probe gc__start(int t, int f); probe gc__done(int t, int f); };