summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Pacheco <dap@joyent.com>2013-03-28 13:52:43 -0700
committerisaacs <i@izs.me>2013-04-03 09:52:56 -0700
commitbf22f99f3a17e33b78df5c8f85fab5372c032143 (patch)
tree3115c6004ed3f8ed0d77cd5a659a22d3929c351d
parentec69fcf4256dfe6b8c90e96e71c2dff570fd36c3 (diff)
downloadnode-bf22f99f3a17e33b78df5c8f85fab5372c032143.tar.gz
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.
-rw-r--r--src/node_dtrace.cc18
-rw-r--r--src/node_provider.d34
2 files changed, 28 insertions, 24 deletions
diff --git a/src/node_dtrace.cc b/src/node_dtrace.cc
index df42af2a9..85583905d 100644
--- a/src/node_dtrace.cc
+++ b/src/node_dtrace.cc
@@ -139,7 +139,7 @@ Handle<Value> 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();
@@ -157,7 +157,7 @@ Handle<Value> 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();
@@ -181,7 +181,7 @@ Handle<Value> 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();
@@ -205,7 +205,7 @@ Handle<Value> 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();
@@ -247,7 +247,8 @@ Handle<Value> 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();
}
@@ -264,7 +265,7 @@ Handle<Value> 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();
@@ -310,7 +311,8 @@ Handle<Value> 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();
}
@@ -326,7 +328,7 @@ Handle<Value> 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();
diff --git a/src/node_provider.d b/src/node_provider.d
index 646e21a22..4c526d477 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);
};