103 lines
2.2 KiB
C++
103 lines
2.2 KiB
C++
#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);
|
|
}
|