This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

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.
  • Loading branch information...
1 parent fe7440c commit 7634069614ea38e38458e4c3a3c3e17d8bc4137e @davepacheco davepacheco committed with bnoordhuis Mar 28, 2013
Showing with 28 additions and 24 deletions.
  1. +10 −8 src/node_dtrace.cc
  2. +18 −16 src/node_provider.d
View
@@ -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(node_isolate);
@@ -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(node_isolate);
@@ -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(node_isolate);
@@ -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(node_isolate);
@@ -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(node_isolate);
}
@@ -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(node_isolate);
@@ -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(node_isolate);
}
@@ -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(node_isolate);
View
@@ -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);
};

0 comments on commit 7634069

Please sign in to comment.