om/node_modules/dtrace-provider/src/dtrace_provider.h

103 lines
2.2 KiB
C
Raw Normal View History

#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);
}