|
#include <nan.h> |
|
#include <node_object_wrap.h> |
|
|
|
extern "C" { |
|
#include <usdt.h> |
|
} |
|
|
|
#include <sys/dtrace.h> |
|
#include <sys/types.h> |
|
#include <sys/mman.h> |
|
|
|
#include <errno.h> |
|
#include <string.h> |
|
#include <fcntl.h> |
|
#include <unistd.h> |
|
|
|
#ifndef __APPLE__ |
|
#include <stdlib.h> |
|
#ifndef __FreeBSD__ |
|
#include <malloc.h> |
|
#endif |
|
#endif |
|
|
|
namespace node { |
|
|
|
using namespace v8; |
|
|
|
class DTraceArgument { |
|
public: |
|
virtual const char *Type() = 0; |
|
virtual void *ArgumentValue(v8::Local<Value>) = 0; |
|
virtual void FreeArgument(void *) = 0; |
|
virtual ~DTraceArgument() { }; |
|
}; |
|
|
|
class DTraceIntegerArgument : public DTraceArgument { |
|
public: |
|
const char *Type(); |
|
void *ArgumentValue(v8::Local<Value>); |
|
void FreeArgument(void *); |
|
}; |
|
|
|
class DTraceStringArgument : public DTraceArgument { |
|
public: |
|
const char *Type(); |
|
void *ArgumentValue(v8::Local<Value>); |
|
void FreeArgument(void *); |
|
}; |
|
|
|
class DTraceJsonArgument : public DTraceArgument { |
|
public: |
|
const char *Type(); |
|
void *ArgumentValue(v8::Local<Value>); |
|
void FreeArgument(void *); |
|
DTraceJsonArgument(); |
|
~DTraceJsonArgument(); |
|
private: |
|
Nan::Persistent<Object> JSON; |
|
Nan::Persistent<Function> JSON_stringify; |
|
}; |
|
|
|
class DTraceProbe : public Nan::ObjectWrap { |
|
|
|
public: |
|
static void Initialize(v8::Local<v8::Object> target); |
|
usdt_probedef_t *probedef; |
|
size_t argc; |
|
DTraceArgument *arguments[USDT_ARG_MAX]; |
|
|
|
static NAN_METHOD(New); |
|
static NAN_METHOD(Fire); |
|
|
|
v8::Local<Value> _fire(Nan::NAN_METHOD_ARGS_TYPE, size_t); |
|
|
|
static Nan::Persistent<FunctionTemplate> constructor_template; |
|
|
|
DTraceProbe(); |
|
~DTraceProbe(); |
|
private: |
|
}; |
|
|
|
class DTraceProvider : public Nan::ObjectWrap { |
|
|
|
public: |
|
static void Initialize(v8::Local<v8::Object> target); |
|
usdt_provider_t *provider; |
|
|
|
static NAN_METHOD(New); |
|
static NAN_METHOD(AddProbe); |
|
static NAN_METHOD(RemoveProbe); |
|
static NAN_METHOD(Enable); |
|
static NAN_METHOD(Disable); |
|
static NAN_METHOD(Fire); |
|
|
|
DTraceProvider(); |
|
~DTraceProvider(); |
|
private: |
|
static Nan::Persistent<FunctionTemplate> constructor_template; |
|
}; |
|
|
|
void InitDTraceProvider(v8::Local<v8::Object> target); |
|
} |
|
|