ruby-dtrace-consumer 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENCE +20 -0
- data/README.md +51 -0
- data/ext/Makefile +187 -0
- data/ext/dtrace_aggdata.c +132 -0
- data/ext/dtrace_aggdata.c~ +141 -0
- data/ext/dtrace_aggdata.o +0 -0
- data/ext/dtrace_api.bundle +0 -0
- data/ext/dtrace_api.c +102 -0
- data/ext/dtrace_api.c~ +113 -0
- data/ext/dtrace_api.h +138 -0
- data/ext/dtrace_api.h~ +155 -0
- data/ext/dtrace_api.o +0 -0
- data/ext/dtrace_bufdata.c +130 -0
- data/ext/dtrace_bufdata.c~ +139 -0
- data/ext/dtrace_bufdata.o +0 -0
- data/ext/dtrace_dropdata.c +121 -0
- data/ext/dtrace_dropdata.c~ +131 -0
- data/ext/dtrace_dropdata.o +0 -0
- data/ext/dtrace_errdata.c +100 -0
- data/ext/dtrace_errdata.c~ +110 -0
- data/ext/dtrace_errdata.o +0 -0
- data/ext/dtrace_hdl.c +677 -0
- data/ext/dtrace_hdl.c~ +689 -0
- data/ext/dtrace_hdl.o +0 -0
- data/ext/dtrace_probedata.c +273 -0
- data/ext/dtrace_probedata.c~ +283 -0
- data/ext/dtrace_probedata.o +0 -0
- data/ext/dtrace_probedesc.c +93 -0
- data/ext/dtrace_probedesc.c~ +78 -0
- data/ext/dtrace_probedesc.o +0 -0
- data/ext/dtrace_process.c +44 -0
- data/ext/dtrace_process.c~ +56 -0
- data/ext/dtrace_process.o +0 -0
- data/ext/dtrace_program.c +52 -0
- data/ext/dtrace_program.c~ +62 -0
- data/ext/dtrace_program.o +0 -0
- data/ext/dtrace_programinfo.c +70 -0
- data/ext/dtrace_programinfo.c~ +60 -0
- data/ext/dtrace_programinfo.o +0 -0
- data/ext/dtrace_recdesc.c +37 -0
- data/ext/dtrace_recdesc.c~ +46 -0
- data/ext/dtrace_recdesc.o +0 -0
- data/ext/dtrace_util.c +92 -0
- data/ext/dtrace_util.o +0 -0
- data/ext/extconf.rb +7 -0
- data/lib/dtrace.rb +95 -0
- data/lib/dtrace/aggregate.rb +40 -0
- data/lib/dtrace/aggregateset.rb +19 -0
- data/lib/dtrace/consumer.rb +174 -0
- data/lib/dtrace/data.rb +85 -0
- data/lib/dtrace/dof.rb +8 -0
- data/lib/dtrace/printfrecord.rb +10 -0
- data/lib/dtrace/probedata.rb +23 -0
- data/lib/dtrace/probedesc.rb +15 -0
- data/lib/dtrace/record.rb +11 -0
- data/lib/dtrace/stackrecord.rb +31 -0
- data/lib/dtrace/tracer.rb +35 -0
- data/lib/dtrace/version.rb +8 -0
- data/lib/dtrace/version.rb~ +8 -0
- data/lib/dtraceconsumer.rb +9 -0
- data/test/test_aggregates.rb +45 -0
- data/test/test_drops_errors.rb +166 -0
- data/test/test_dtrace.rb +155 -0
- data/test/test_gc.rb +11 -0
- data/test/test_helper.rb +20 -0
- data/test/test_helper.rb~ +16 -0
- data/test/test_legacy_consumer.rb +47 -0
- data/test/test_probedata.rb +30 -0
- data/test/test_processes.rb +66 -0
- data/test/test_profile.rb +198 -0
- data/test/test_repeat.rb +50 -0
- data/test/test_rubyprobe.rb +52 -0
- data/test/test_rubyprobe.rb~ +52 -0
- data/test/test_typefilter.rb +94 -0
- metadata +121 -0
Binary file
|
Binary file
|
data/ext/dtrace_api.c
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
/* Ruby-DTrace
|
2
|
+
* (c) 2007 Chris Andrews <chris@nodnol.org>
|
3
|
+
*/
|
4
|
+
|
5
|
+
#include "dtrace_api.h"
|
6
|
+
|
7
|
+
VALUE cDTrace;
|
8
|
+
VALUE cDTraceProbeDesc;
|
9
|
+
VALUE cDTraceProgram;
|
10
|
+
VALUE cDTraceProgramInfo;
|
11
|
+
VALUE cDTraceAggData;
|
12
|
+
VALUE cDTraceRecDesc;
|
13
|
+
VALUE cDTraceProbeData;
|
14
|
+
VALUE cDTraceBufData;
|
15
|
+
VALUE cDTraceProcess;
|
16
|
+
VALUE cDTraceDropData;
|
17
|
+
VALUE cDTraceErrData;
|
18
|
+
VALUE cDTraceProbe;
|
19
|
+
|
20
|
+
VALUE eDTraceException;
|
21
|
+
|
22
|
+
void Init_dtrace_api() {
|
23
|
+
|
24
|
+
cDTrace = rb_define_class("DTrace", rb_cObject);
|
25
|
+
rb_define_method(cDTrace, "close", dtrace_hdl_close, 0);
|
26
|
+
rb_define_method(cDTrace, "each_probe_all", dtrace_each_probe_all, 0);
|
27
|
+
rb_define_method(cDTrace, "each_probe_match", dtrace_each_probe_match, 4);
|
28
|
+
rb_define_method(cDTrace, "each_probe_prog", dtrace_each_probe_prog, 1);
|
29
|
+
rb_define_method(cDTrace, "compile", dtrace_strcompile, -1);
|
30
|
+
rb_define_method(cDTrace, "stop", dtrace_hdl_stop, 0);
|
31
|
+
rb_define_method(cDTrace, "status", dtrace_hdl_status, 0);
|
32
|
+
rb_define_method(cDTrace, "go", dtrace_hdl_go, 0);
|
33
|
+
rb_define_method(cDTrace, "error", dtrace_hdl_error, 0);
|
34
|
+
rb_define_method(cDTrace, "setopt", dtrace_hdl_setopt, 2);
|
35
|
+
rb_define_method(cDTrace, "sleep", dtrace_hdl_sleep, 0);
|
36
|
+
rb_define_method(cDTrace, "work", dtrace_hdl_work, -1);
|
37
|
+
rb_define_method(cDTrace, "buf_consumer", dtrace_hdl_buf_consumer, 1);
|
38
|
+
rb_define_method(cDTrace, "drop_consumer", dtrace_hdl_drop_consumer, 1);
|
39
|
+
rb_define_method(cDTrace, "err_consumer", dtrace_hdl_err_consumer, 1);
|
40
|
+
rb_define_method(cDTrace, "createprocess", dtrace_hdl_createprocess, 1);
|
41
|
+
rb_define_method(cDTrace, "grabprocess", dtrace_hdl_grabprocess, 1);
|
42
|
+
rb_define_alloc_func(cDTrace, dtrace_hdl_alloc);
|
43
|
+
|
44
|
+
cDTraceProcess = rb_define_class_under(cDTrace, "Process", rb_cObject);
|
45
|
+
rb_define_method(cDTraceProcess, "release", dtrace_process_release, 0);
|
46
|
+
rb_define_method(cDTraceProcess, "continue", dtrace_process_continue, 0);
|
47
|
+
|
48
|
+
cDTraceProbeDesc = rb_define_class_under(cDTrace, "ProbeDesc", rb_cObject);
|
49
|
+
rb_define_method(cDTraceProbeDesc, "probe_id", dtraceprobedesc_probe_id, 0);
|
50
|
+
rb_define_method(cDTraceProbeDesc, "provider", dtraceprobedesc_provider, 0);
|
51
|
+
rb_define_method(cDTraceProbeDesc, "mod", dtraceprobedesc_mod, 0);
|
52
|
+
rb_define_method(cDTraceProbeDesc, "func", dtraceprobedesc_func, 0);
|
53
|
+
rb_define_method(cDTraceProbeDesc, "name", dtraceprobedesc_name, 0);
|
54
|
+
|
55
|
+
cDTraceProbeData = rb_define_class_under(cDTrace, "ProbeData", rb_cObject);
|
56
|
+
rb_define_method(cDTraceProbeData, "epid", dtraceprobedata_epid, 0);
|
57
|
+
rb_define_method(cDTraceProbeData, "probe", dtraceprobedata_probe, 0);
|
58
|
+
rb_define_method(cDTraceProbeData, "cpu", dtraceprobedata_cpu, 0);
|
59
|
+
rb_define_method(cDTraceProbeData, "indent", dtraceprobedata_indent, 0);
|
60
|
+
rb_define_method(cDTraceProbeData, "prefix", dtraceprobedata_prefix, 0);
|
61
|
+
rb_define_method(cDTraceProbeData, "flow", dtraceprobedata_flow, 0);
|
62
|
+
rb_define_method(cDTraceProbeData, "each_record", dtraceprobedata_each_record, 0);
|
63
|
+
|
64
|
+
cDTraceBufData = rb_define_class_under(cDTrace, "BufData", rb_cObject);
|
65
|
+
rb_define_method(cDTraceBufData, "epid", dtracebufdata_epid, 0);
|
66
|
+
rb_define_method(cDTraceBufData, "probe", dtracebufdata_probe, 0);
|
67
|
+
rb_define_method(cDTraceBufData, "record", dtracebufdata_record, 0);
|
68
|
+
|
69
|
+
cDTraceProgram = rb_define_class_under(cDTrace, "Program", rb_cObject);
|
70
|
+
rb_define_method(cDTraceProgram, "execute", dtraceprogram_exec, 0);
|
71
|
+
rb_define_method(cDTraceProgram, "info", dtraceprogram_info, 0);
|
72
|
+
|
73
|
+
cDTraceProgramInfo = rb_define_class_under(cDTrace, "ProgramInfo", rb_cObject);
|
74
|
+
rb_define_method(cDTraceProgramInfo, "aggregates_count", dtraceprograminfo_aggregates_count, 0);
|
75
|
+
rb_define_method(cDTraceProgramInfo, "recgens_count", dtraceprograminfo_recgens_count, 0);
|
76
|
+
rb_define_method(cDTraceProgramInfo, "matches_count", dtraceprograminfo_matches_count, 0);
|
77
|
+
rb_define_method(cDTraceProgramInfo, "speculations_count", dtraceprograminfo_speculations_count, 0);
|
78
|
+
|
79
|
+
cDTraceAggData = rb_define_class_under(cDTrace, "AggData", rb_cObject);
|
80
|
+
rb_define_method(cDTraceAggData, "value", dtraceaggdata_value, 0);
|
81
|
+
rb_define_method(cDTraceAggData, "aggtype", dtraceaggdata_aggtype, 0);
|
82
|
+
|
83
|
+
cDTraceRecDesc = rb_define_class_under(cDTrace, "RecDesc", rb_cObject);
|
84
|
+
rb_define_method(cDTraceRecDesc, "action", dtracerecdesc_action, 0);
|
85
|
+
|
86
|
+
cDTraceDropData = rb_define_class_under(cDTrace, "DropData", rb_cObject);
|
87
|
+
rb_define_method(cDTraceDropData, "cpu", dtracedropdata_cpu, 0);
|
88
|
+
rb_define_method(cDTraceDropData, "drops", dtracedropdata_drops, 0);
|
89
|
+
rb_define_method(cDTraceDropData, "total", dtracedropdata_total, 0);
|
90
|
+
rb_define_method(cDTraceDropData, "msg", dtracedropdata_msg, 0);
|
91
|
+
rb_define_method(cDTraceDropData, "kind", dtracedropdata_kind, 0);
|
92
|
+
|
93
|
+
cDTraceErrData = rb_define_class_under(cDTrace, "ErrData", rb_cObject);
|
94
|
+
rb_define_method(cDTraceErrData, "cpu", dtraceerrdata_cpu, 0);
|
95
|
+
rb_define_method(cDTraceErrData, "action", dtraceerrdata_action, 0);
|
96
|
+
rb_define_method(cDTraceErrData, "offset", dtraceerrdata_offset, 0);
|
97
|
+
rb_define_method(cDTraceErrData, "fault", dtraceerrdata_fault, 0);
|
98
|
+
rb_define_method(cDTraceErrData, "addr", dtraceerrdata_addr, 0);
|
99
|
+
rb_define_method(cDTraceErrData, "msg", dtraceerrdata_msg, 0);
|
100
|
+
|
101
|
+
eDTraceException = rb_define_class_under(cDTrace, "Exception", rb_eStandardError);
|
102
|
+
}
|
data/ext/dtrace_api.c~
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
/* Ruby-DTrace
|
2
|
+
* (c) 2007 Chris Andrews <chris@nodnol.org>
|
3
|
+
*/
|
4
|
+
|
5
|
+
#include "dtrace_api.h"
|
6
|
+
|
7
|
+
VALUE cDTrace;
|
8
|
+
VALUE cDTraceProbeDesc;
|
9
|
+
VALUE cDTraceProgram;
|
10
|
+
VALUE cDTraceProgramInfo;
|
11
|
+
VALUE cDTraceAggData;
|
12
|
+
VALUE cDTraceRecDesc;
|
13
|
+
VALUE cDTraceProbeData;
|
14
|
+
VALUE cDTraceBufData;
|
15
|
+
VALUE cDTraceProcess;
|
16
|
+
VALUE cDTraceDropData;
|
17
|
+
VALUE cDTraceErrData;
|
18
|
+
VALUE cDTraceProbe;
|
19
|
+
|
20
|
+
VALUE eDTraceException;
|
21
|
+
|
22
|
+
void Init_dtrace_api() {
|
23
|
+
|
24
|
+
cDTrace = rb_define_class("DTrace", rb_cObject);
|
25
|
+
rb_define_method(cDTrace, "initialize", dtrace_init, 0);
|
26
|
+
rb_define_method(cDTrace, "close", dtrace_hdl_close, 0);
|
27
|
+
rb_define_method(cDTrace, "each_probe_all", dtrace_each_probe_all, 0);
|
28
|
+
rb_define_method(cDTrace, "each_probe_match", dtrace_each_probe_match, 4);
|
29
|
+
rb_define_method(cDTrace, "each_probe_prog", dtrace_each_probe_prog, 1);
|
30
|
+
rb_define_method(cDTrace, "compile", dtrace_strcompile, -1);
|
31
|
+
rb_define_method(cDTrace, "stop", dtrace_hdl_stop, 0);
|
32
|
+
rb_define_method(cDTrace, "status", dtrace_hdl_status, 0);
|
33
|
+
rb_define_method(cDTrace, "go", dtrace_hdl_go, 0);
|
34
|
+
rb_define_method(cDTrace, "error", dtrace_hdl_error, 0);
|
35
|
+
rb_define_method(cDTrace, "setopt", dtrace_hdl_setopt, 2);
|
36
|
+
rb_define_method(cDTrace, "sleep", dtrace_hdl_sleep, 0);
|
37
|
+
rb_define_method(cDTrace, "work", dtrace_hdl_work, -1);
|
38
|
+
rb_define_method(cDTrace, "buf_consumer", dtrace_hdl_buf_consumer, 1);
|
39
|
+
rb_define_method(cDTrace, "drop_consumer", dtrace_hdl_drop_consumer, 1);
|
40
|
+
rb_define_method(cDTrace, "err_consumer", dtrace_hdl_err_consumer, 1);
|
41
|
+
rb_define_method(cDTrace, "createprocess", dtrace_hdl_createprocess, 1);
|
42
|
+
rb_define_method(cDTrace, "grabprocess", dtrace_hdl_grabprocess, 1);
|
43
|
+
rb_define_alloc_func(cDTrace, dtrace_hdl_alloc);
|
44
|
+
|
45
|
+
cDTraceProcess = rb_define_class_under(cDTrace, "Process", rb_cObject);
|
46
|
+
rb_define_method(cDTraceProcess, "initialize", dtrace_process_init, 0);
|
47
|
+
rb_define_method(cDTraceProcess, "release", dtrace_process_release, 0);
|
48
|
+
rb_define_method(cDTraceProcess, "continue", dtrace_process_continue, 0);
|
49
|
+
|
50
|
+
cDTraceProbeDesc = rb_define_class_under(cDTrace, "ProbeDesc", rb_cObject);
|
51
|
+
rb_define_method(cDTraceProbeDesc, "initialize", dtraceprobedesc_init, 0);
|
52
|
+
rb_define_method(cDTraceProbeDesc, "probe_id", dtraceprobedesc_probe_id, 0);
|
53
|
+
rb_define_method(cDTraceProbeDesc, "provider", dtraceprobedesc_provider, 0);
|
54
|
+
rb_define_method(cDTraceProbeDesc, "mod", dtraceprobedesc_mod, 0);
|
55
|
+
rb_define_method(cDTraceProbeDesc, "func", dtraceprobedesc_func, 0);
|
56
|
+
rb_define_method(cDTraceProbeDesc, "name", dtraceprobedesc_name, 0);
|
57
|
+
|
58
|
+
cDTraceProbeData = rb_define_class_under(cDTrace, "ProbeData", rb_cObject);
|
59
|
+
rb_define_method(cDTraceProbeData, "initialize", dtraceprobedata_init, 0);
|
60
|
+
rb_define_method(cDTraceProbeData, "epid", dtraceprobedata_epid, 0);
|
61
|
+
rb_define_method(cDTraceProbeData, "probe", dtraceprobedata_probe, 0);
|
62
|
+
rb_define_method(cDTraceProbeData, "cpu", dtraceprobedata_cpu, 0);
|
63
|
+
rb_define_method(cDTraceProbeData, "indent", dtraceprobedata_indent, 0);
|
64
|
+
rb_define_method(cDTraceProbeData, "prefix", dtraceprobedata_prefix, 0);
|
65
|
+
rb_define_method(cDTraceProbeData, "flow", dtraceprobedata_flow, 0);
|
66
|
+
rb_define_method(cDTraceProbeData, "each_record", dtraceprobedata_each_record, 0);
|
67
|
+
|
68
|
+
cDTraceBufData = rb_define_class_under(cDTrace, "BufData", rb_cObject);
|
69
|
+
rb_define_method(cDTraceBufData, "initialize", dtracebufdata_init, 0);
|
70
|
+
rb_define_method(cDTraceBufData, "epid", dtracebufdata_epid, 0);
|
71
|
+
rb_define_method(cDTraceBufData, "probe", dtracebufdata_probe, 0);
|
72
|
+
rb_define_method(cDTraceBufData, "record", dtracebufdata_record, 0);
|
73
|
+
|
74
|
+
cDTraceProgram = rb_define_class_under(cDTrace, "Program", rb_cObject);
|
75
|
+
rb_define_method(cDTraceProgram, "initialize", dtraceprogram_init, 0);
|
76
|
+
rb_define_method(cDTraceProgram, "execute", dtraceprogram_exec, 0);
|
77
|
+
rb_define_method(cDTraceProgram, "info", dtraceprogram_info, 0);
|
78
|
+
|
79
|
+
cDTraceProgramInfo = rb_define_class_under(cDTrace, "ProgramInfo", rb_cObject);
|
80
|
+
rb_define_method(cDTraceProgramInfo, "initialize", dtraceprograminfo_init, 0);
|
81
|
+
rb_define_method(cDTraceProgramInfo, "aggregates_count", dtraceprograminfo_aggregates_count, 0);
|
82
|
+
rb_define_method(cDTraceProgramInfo, "recgens_count", dtraceprograminfo_recgens_count, 0);
|
83
|
+
rb_define_method(cDTraceProgramInfo, "matches_count", dtraceprograminfo_matches_count, 0);
|
84
|
+
rb_define_method(cDTraceProgramInfo, "speculations_count", dtraceprograminfo_speculations_count, 0);
|
85
|
+
|
86
|
+
cDTraceAggData = rb_define_class_under(cDTrace, "AggData", rb_cObject);
|
87
|
+
rb_define_method(cDTraceAggData, "initialize", dtraceaggdata_init, 0);
|
88
|
+
rb_define_method(cDTraceAggData, "value", dtraceaggdata_value, 0);
|
89
|
+
rb_define_method(cDTraceAggData, "aggtype", dtraceaggdata_aggtype, 0);
|
90
|
+
|
91
|
+
cDTraceRecDesc = rb_define_class_under(cDTrace, "RecDesc", rb_cObject);
|
92
|
+
rb_define_method(cDTraceRecDesc, "initialize", dtracerecdesc_init, 0);
|
93
|
+
rb_define_method(cDTraceRecDesc, "action", dtracerecdesc_action, 0);
|
94
|
+
|
95
|
+
cDTraceDropData = rb_define_class_under(cDTrace, "DropData", rb_cObject);
|
96
|
+
rb_define_method(cDTraceDropData, "initialize", dtracedropdata_init, 0);
|
97
|
+
rb_define_method(cDTraceDropData, "cpu", dtracedropdata_cpu, 0);
|
98
|
+
rb_define_method(cDTraceDropData, "drops", dtracedropdata_drops, 0);
|
99
|
+
rb_define_method(cDTraceDropData, "total", dtracedropdata_total, 0);
|
100
|
+
rb_define_method(cDTraceDropData, "msg", dtracedropdata_msg, 0);
|
101
|
+
rb_define_method(cDTraceDropData, "kind", dtracedropdata_kind, 0);
|
102
|
+
|
103
|
+
cDTraceErrData = rb_define_class_under(cDTrace, "ErrData", rb_cObject);
|
104
|
+
rb_define_method(cDTraceErrData, "initialize", dtraceerrdata_init, 0);
|
105
|
+
rb_define_method(cDTraceErrData, "cpu", dtraceerrdata_cpu, 0);
|
106
|
+
rb_define_method(cDTraceErrData, "action", dtraceerrdata_action, 0);
|
107
|
+
rb_define_method(cDTraceErrData, "offset", dtraceerrdata_offset, 0);
|
108
|
+
rb_define_method(cDTraceErrData, "fault", dtraceerrdata_fault, 0);
|
109
|
+
rb_define_method(cDTraceErrData, "addr", dtraceerrdata_addr, 0);
|
110
|
+
rb_define_method(cDTraceErrData, "msg", dtraceerrdata_msg, 0);
|
111
|
+
|
112
|
+
eDTraceException = rb_define_class_under(cDTrace, "Exception", rb_eStandardError);
|
113
|
+
}
|
data/ext/dtrace_api.h
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
/* Ruby-DTrace
|
2
|
+
* (c) 2007 Chris Andrews <chris@nodnol.org>
|
3
|
+
*/
|
4
|
+
|
5
|
+
/* this is a full path because the ruby-dtrace probes add a "dtrace.h"
|
6
|
+
* in the same directory as ruby.h, and we must avoid loading that...
|
7
|
+
*/
|
8
|
+
#include "/usr/include/dtrace.h"
|
9
|
+
|
10
|
+
/* undefine _FILE_OFFSET_BITS: we want the definition from ruby. */
|
11
|
+
#undef _FILE_OFFSET_BITS
|
12
|
+
|
13
|
+
#include "ruby.h"
|
14
|
+
|
15
|
+
/* Used to pass three Ruby VALUEs as the void *arg of dtrace_work() to
|
16
|
+
its callbacks: the dtrace handle, a Proc for the probe callback,
|
17
|
+
and a Proc for the recdesc callback. */
|
18
|
+
typedef struct dtrace_work_handlers {
|
19
|
+
VALUE handle;
|
20
|
+
VALUE probe;
|
21
|
+
VALUE rec;
|
22
|
+
} dtrace_work_handlers_t;
|
23
|
+
|
24
|
+
/* Used to wrap up the DTrace handle, so we can keep references to the
|
25
|
+
various callbacks: we must mark them from the dtrace_hdl_mark
|
26
|
+
routine, which only gets a pointer to this structure. */
|
27
|
+
typedef struct dtrace_handle {
|
28
|
+
dtrace_hdl_t *hdl;
|
29
|
+
VALUE probe;
|
30
|
+
VALUE rec;
|
31
|
+
VALUE buf;
|
32
|
+
VALUE err;
|
33
|
+
VALUE drop;
|
34
|
+
VALUE procs;
|
35
|
+
} dtrace_handle_t;
|
36
|
+
|
37
|
+
/* Used to keep a reference to a struct ps_prochandle and a reference
|
38
|
+
to the DTrace handle in a DTraceProcess object: we need to be able
|
39
|
+
to call dtrace_proc_release() when the DTraceProcess goes away, and
|
40
|
+
that requires the DTrace handle. */
|
41
|
+
typedef struct dtrace_process {
|
42
|
+
dtrace_handle_t *handle;
|
43
|
+
struct ps_prochandle *proc;
|
44
|
+
} dtrace_process_t;
|
45
|
+
|
46
|
+
/* Struct wrapping a probe, a handcrafted function created to be a
|
47
|
+
probe trigger point, and its corresponding is_enabled tracepoint.
|
48
|
+
|
49
|
+
This is actually a pointer to the is_enabled function (the probe
|
50
|
+
function is after) so it's declared to take no args, and return
|
51
|
+
int. */
|
52
|
+
typedef struct dtrace_probe {
|
53
|
+
int (*func)();
|
54
|
+
} dtrace_probe_t;
|
55
|
+
|
56
|
+
/* Handle missing RARRAY_LEN etc */
|
57
|
+
#ifdef RARRAY_LEN
|
58
|
+
static inline long rb_str_len(VALUE s) {return RSTRING_LEN(s);}
|
59
|
+
static inline char *rb_str_ptr(VALUE s) {return RSTRING_PTR(s);}
|
60
|
+
static inline long rb_ary_len(VALUE s) {return RARRAY_LEN(s);}
|
61
|
+
static inline VALUE *rb_ary_ptr(VALUE s) {return RARRAY_PTR(s);}
|
62
|
+
#else
|
63
|
+
static inline long rb_str_len(VALUE s) {return RSTRING(s)->len;}
|
64
|
+
static inline char *rb_str_ptr(VALUE s) {return RSTRING(s)->ptr;}
|
65
|
+
static inline long rb_ary_len(VALUE s) {return RARRAY(s)->len;}
|
66
|
+
static inline VALUE *rb_ary_ptr(VALUE s) {return RARRAY(s)->ptr;}
|
67
|
+
#endif // RARRAY_LEN
|
68
|
+
|
69
|
+
VALUE handle_bytedata(caddr_t addr, uint32_t nbytes);
|
70
|
+
|
71
|
+
void dtrace_process_free(dtrace_process_t *process);
|
72
|
+
VALUE dtrace_process_release(VALUE self);
|
73
|
+
VALUE dtrace_process_continue(VALUE self);
|
74
|
+
|
75
|
+
VALUE dtraceaggdata_value(VALUE self);
|
76
|
+
VALUE dtraceaggdata_aggtype(VALUE self);
|
77
|
+
|
78
|
+
VALUE dtrace_hdl_alloc(VALUE klass);
|
79
|
+
VALUE dtrace_hdl_close(VALUE self);
|
80
|
+
VALUE dtrace_each_probe_all(VALUE self);
|
81
|
+
VALUE dtrace_each_probe_match(VALUE self, VALUE provider, VALUE mod, VALUE func, VALUE name);
|
82
|
+
VALUE dtrace_each_probe_prog(VALUE self, VALUE program);
|
83
|
+
VALUE dtrace_strcompile(int argc, VALUE *argv, VALUE self);
|
84
|
+
VALUE dtrace_hdl_go(VALUE self);
|
85
|
+
VALUE dtrace_hdl_status(VALUE self);
|
86
|
+
VALUE dtrace_hdl_setopt(VALUE self, VALUE key, VALUE value);
|
87
|
+
VALUE dtrace_hdl_stop(VALUE self);
|
88
|
+
VALUE dtrace_hdl_error(VALUE self);
|
89
|
+
VALUE dtrace_hdl_sleep(VALUE self);
|
90
|
+
VALUE dtrace_hdl_work(int argc, VALUE *argv, VALUE self);
|
91
|
+
VALUE dtrace_hdl_buf_consumer(VALUE self, VALUE buf_consumer_proc);
|
92
|
+
VALUE dtrace_hdl_drop_consumer(VALUE self, VALUE drop_consumer_proc);
|
93
|
+
VALUE dtrace_hdl_err_consumer(VALUE self, VALUE err_consumer_proc);
|
94
|
+
VALUE dtrace_hdl_createprocess(VALUE self, VALUE rbargv);
|
95
|
+
VALUE dtrace_hdl_grabprocess(VALUE self, VALUE pid);
|
96
|
+
|
97
|
+
VALUE dtraceprobedesc_init(dtrace_probedesc_t *p);
|
98
|
+
VALUE dtraceprobedesc_probe_id(VALUE self);
|
99
|
+
VALUE dtraceprobedesc_provider(VALUE self);
|
100
|
+
VALUE dtraceprobedesc_mod(VALUE self);
|
101
|
+
VALUE dtraceprobedesc_func(VALUE self);
|
102
|
+
VALUE dtraceprobedesc_name(VALUE self);
|
103
|
+
|
104
|
+
VALUE dtraceprobedata_epid(VALUE self);
|
105
|
+
VALUE dtraceprobedata_probe(VALUE self);
|
106
|
+
VALUE dtraceprobedata_cpu(VALUE self);
|
107
|
+
VALUE dtraceprobedata_indent(VALUE self);
|
108
|
+
VALUE dtraceprobedata_prefix(VALUE self);
|
109
|
+
VALUE dtraceprobedata_flow(VALUE self);
|
110
|
+
VALUE dtraceprobedata_each_record(VALUE self);
|
111
|
+
|
112
|
+
VALUE dtracebufdata_epid(VALUE self);
|
113
|
+
VALUE dtracebufdata_probe(VALUE self);
|
114
|
+
VALUE dtracebufdata_record(VALUE self);
|
115
|
+
|
116
|
+
VALUE dtraceprogram_exec(VALUE self);
|
117
|
+
VALUE dtraceprogram_info(VALUE self);
|
118
|
+
|
119
|
+
VALUE dtraceprograminfo_init(dtrace_proginfo_t *proginfo);
|
120
|
+
VALUE dtraceprograminfo_aggregates_count(VALUE self);
|
121
|
+
VALUE dtraceprograminfo_recgens_count(VALUE self);
|
122
|
+
VALUE dtraceprograminfo_matches_count(VALUE self);
|
123
|
+
VALUE dtraceprograminfo_speculations_count(VALUE self);
|
124
|
+
|
125
|
+
VALUE dtracerecdesc_action(VALUE self);
|
126
|
+
|
127
|
+
VALUE dtracedropdata_cpu(VALUE self);
|
128
|
+
VALUE dtracedropdata_drops(VALUE self);
|
129
|
+
VALUE dtracedropdata_total(VALUE self);
|
130
|
+
VALUE dtracedropdata_msg(VALUE self);
|
131
|
+
VALUE dtracedropdata_kind(VALUE self);
|
132
|
+
|
133
|
+
VALUE dtraceerrdata_cpu(VALUE self);
|
134
|
+
VALUE dtraceerrdata_action(VALUE self);
|
135
|
+
VALUE dtraceerrdata_offset(VALUE self);
|
136
|
+
VALUE dtraceerrdata_fault(VALUE self);
|
137
|
+
VALUE dtraceerrdata_addr(VALUE self);
|
138
|
+
VALUE dtraceerrdata_msg(VALUE self);
|
data/ext/dtrace_api.h~
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
/* Ruby-DTrace
|
2
|
+
* (c) 2007 Chris Andrews <chris@nodnol.org>
|
3
|
+
*/
|
4
|
+
|
5
|
+
/* this is a full path because the ruby-dtrace probes add a "dtrace.h"
|
6
|
+
* in the same directory as ruby.h, and we must avoid loading that...
|
7
|
+
*/
|
8
|
+
#include "/usr/include/dtrace.h"
|
9
|
+
|
10
|
+
/* undefine _FILE_OFFSET_BITS: we want the definition from ruby. */
|
11
|
+
#undef _FILE_OFFSET_BITS
|
12
|
+
|
13
|
+
#include "ruby.h"
|
14
|
+
|
15
|
+
/* Used to pass three Ruby VALUEs as the void *arg of dtrace_work() to
|
16
|
+
its callbacks: the dtrace handle, a Proc for the probe callback,
|
17
|
+
and a Proc for the recdesc callback. */
|
18
|
+
typedef struct dtrace_work_handlers {
|
19
|
+
VALUE handle;
|
20
|
+
VALUE probe;
|
21
|
+
VALUE rec;
|
22
|
+
} dtrace_work_handlers_t;
|
23
|
+
|
24
|
+
/* Used to wrap up the DTrace handle, so we can keep references to the
|
25
|
+
various callbacks: we must mark them from the dtrace_hdl_mark
|
26
|
+
routine, which only gets a pointer to this structure. */
|
27
|
+
typedef struct dtrace_handle {
|
28
|
+
dtrace_hdl_t *hdl;
|
29
|
+
VALUE probe;
|
30
|
+
VALUE rec;
|
31
|
+
VALUE buf;
|
32
|
+
VALUE err;
|
33
|
+
VALUE drop;
|
34
|
+
VALUE procs;
|
35
|
+
} dtrace_handle_t;
|
36
|
+
|
37
|
+
/* Used to keep a reference to a struct ps_prochandle and a reference
|
38
|
+
to the DTrace handle in a DTraceProcess object: we need to be able
|
39
|
+
to call dtrace_proc_release() when the DTraceProcess goes away, and
|
40
|
+
that requires the DTrace handle. */
|
41
|
+
typedef struct dtrace_process {
|
42
|
+
dtrace_handle_t *handle;
|
43
|
+
struct ps_prochandle *proc;
|
44
|
+
} dtrace_process_t;
|
45
|
+
|
46
|
+
/* Struct wrapping a probe, a handcrafted function created to be a
|
47
|
+
probe trigger point, and its corresponding is_enabled tracepoint.
|
48
|
+
|
49
|
+
This is actually a pointer to the is_enabled function (the probe
|
50
|
+
function is after) so it's declared to take no args, and return
|
51
|
+
int. */
|
52
|
+
typedef struct dtrace_probe {
|
53
|
+
int (*func)();
|
54
|
+
} dtrace_probe_t;
|
55
|
+
|
56
|
+
/* Handle missing RARRAY_LEN etc */
|
57
|
+
#ifdef RARRAY_LEN
|
58
|
+
static inline long rb_str_len(VALUE s) {return RSTRING_LEN(s);}
|
59
|
+
static inline char *rb_str_ptr(VALUE s) {return RSTRING_PTR(s);}
|
60
|
+
static inline long rb_ary_len(VALUE s) {return RARRAY_LEN(s);}
|
61
|
+
static inline VALUE *rb_ary_ptr(VALUE s) {return RARRAY_PTR(s);}
|
62
|
+
#else
|
63
|
+
static inline long rb_str_len(VALUE s) {return RSTRING(s)->len;}
|
64
|
+
static inline char *rb_str_ptr(VALUE s) {return RSTRING(s)->ptr;}
|
65
|
+
static inline long rb_ary_len(VALUE s) {return RARRAY(s)->len;}
|
66
|
+
static inline VALUE *rb_ary_ptr(VALUE s) {return RARRAY(s)->ptr;}
|
67
|
+
#endif // RARRAY_LEN
|
68
|
+
|
69
|
+
VALUE handle_bytedata(caddr_t addr, uint32_t nbytes);
|
70
|
+
|
71
|
+
VALUE dtrace_process_init(VALUE self);
|
72
|
+
void dtrace_process_free(dtrace_process_t *process);
|
73
|
+
VALUE dtrace_process_release(VALUE self);
|
74
|
+
VALUE dtrace_process_continue(VALUE self);
|
75
|
+
|
76
|
+
VALUE dtraceaggdata_init(VALUE self);
|
77
|
+
VALUE dtraceaggdata_value(VALUE self);
|
78
|
+
VALUE dtraceaggdata_aggtype(VALUE self);
|
79
|
+
|
80
|
+
VALUE dtrace_init(VALUE self);
|
81
|
+
VALUE dtrace_hdl_alloc(VALUE klass);
|
82
|
+
VALUE dtrace_hdl_close(VALUE self);
|
83
|
+
VALUE dtrace_each_probe_all(VALUE self);
|
84
|
+
VALUE dtrace_each_probe_match(VALUE self, VALUE provider, VALUE mod, VALUE func, VALUE name);
|
85
|
+
VALUE dtrace_each_probe_prog(VALUE self, VALUE program);
|
86
|
+
VALUE dtrace_strcompile(int argc, VALUE *argv, VALUE self);
|
87
|
+
VALUE dtrace_hdl_go(VALUE self);
|
88
|
+
VALUE dtrace_hdl_status(VALUE self);
|
89
|
+
VALUE dtrace_hdl_setopt(VALUE self, VALUE key, VALUE value);
|
90
|
+
VALUE dtrace_hdl_stop(VALUE self);
|
91
|
+
VALUE dtrace_hdl_error(VALUE self);
|
92
|
+
VALUE dtrace_hdl_sleep(VALUE self);
|
93
|
+
VALUE dtrace_hdl_work(int argc, VALUE *argv, VALUE self);
|
94
|
+
VALUE dtrace_hdl_buf_consumer(VALUE self, VALUE buf_consumer_proc);
|
95
|
+
VALUE dtrace_hdl_drop_consumer(VALUE self, VALUE drop_consumer_proc);
|
96
|
+
VALUE dtrace_hdl_err_consumer(VALUE self, VALUE err_consumer_proc);
|
97
|
+
VALUE dtrace_hdl_createprocess(VALUE self, VALUE rbargv);
|
98
|
+
VALUE dtrace_hdl_grabprocess(VALUE self, VALUE pid);
|
99
|
+
|
100
|
+
VALUE dtraceprobedesc_init(VALUE self);
|
101
|
+
VALUE dtraceprobedesc_probe_id(VALUE self);
|
102
|
+
VALUE dtraceprobedesc_provider(VALUE self);
|
103
|
+
VALUE dtraceprobedesc_mod(VALUE self);
|
104
|
+
VALUE dtraceprobedesc_func(VALUE self);
|
105
|
+
VALUE dtraceprobedesc_name(VALUE self);
|
106
|
+
|
107
|
+
VALUE dtraceprobedata_init(VALUE self);
|
108
|
+
VALUE dtraceprobedata_epid(VALUE self);
|
109
|
+
VALUE dtraceprobedata_probe(VALUE self);
|
110
|
+
VALUE dtraceprobedata_cpu(VALUE self);
|
111
|
+
VALUE dtraceprobedata_indent(VALUE self);
|
112
|
+
VALUE dtraceprobedata_prefix(VALUE self);
|
113
|
+
VALUE dtraceprobedata_flow(VALUE self);
|
114
|
+
VALUE dtraceprobedata_each_record(VALUE self);
|
115
|
+
|
116
|
+
VALUE dtracebufdata_init(VALUE self);
|
117
|
+
VALUE dtracebufdata_epid(VALUE self);
|
118
|
+
VALUE dtracebufdata_probe(VALUE self);
|
119
|
+
VALUE dtracebufdata_record(VALUE self);
|
120
|
+
|
121
|
+
VALUE dtraceprogram_init(VALUE self);
|
122
|
+
VALUE dtraceprogram_exec(VALUE self);
|
123
|
+
VALUE dtraceprogram_info(VALUE self);
|
124
|
+
|
125
|
+
VALUE dtraceprograminfo_init(VALUE self);
|
126
|
+
VALUE dtraceprograminfo_aggregates_count(VALUE self);
|
127
|
+
VALUE dtraceprograminfo_recgens_count(VALUE self);
|
128
|
+
VALUE dtraceprograminfo_matches_count(VALUE self);
|
129
|
+
VALUE dtraceprograminfo_speculations_count(VALUE self);
|
130
|
+
|
131
|
+
VALUE dtracerecdesc_init(VALUE self);
|
132
|
+
VALUE dtracerecdesc_action(VALUE self);
|
133
|
+
|
134
|
+
VALUE dtracedropdata_init(VALUE self);
|
135
|
+
VALUE dtracedropdata_cpu(VALUE self);
|
136
|
+
VALUE dtracedropdata_drops(VALUE self);
|
137
|
+
VALUE dtracedropdata_total(VALUE self);
|
138
|
+
VALUE dtracedropdata_msg(VALUE self);
|
139
|
+
VALUE dtracedropdata_kind(VALUE self);
|
140
|
+
|
141
|
+
VALUE dtraceerrdata_init(VALUE self);
|
142
|
+
VALUE dtraceerrdata_cpu(VALUE self);
|
143
|
+
VALUE dtraceerrdata_action(VALUE self);
|
144
|
+
VALUE dtraceerrdata_offset(VALUE self);
|
145
|
+
VALUE dtraceerrdata_fault(VALUE self);
|
146
|
+
VALUE dtraceerrdata_addr(VALUE self);
|
147
|
+
VALUE dtraceerrdata_msg(VALUE self);
|
148
|
+
|
149
|
+
VALUE dtraceprobe_alloc(VALUE klass);
|
150
|
+
VALUE dtraceprobe_init(VALUE self, VALUE argc);
|
151
|
+
VALUE dtraceprobe_addr(VALUE self);
|
152
|
+
VALUE dtraceprobe_fire(int argc, VALUE *argv, VALUE self);
|
153
|
+
VALUE dtraceprobe_is_enabled(VALUE self);
|
154
|
+
VALUE dtraceprobe_probe_offset(VALUE self, VALUE rfile, VALUE argc);
|
155
|
+
VALUE dtraceprobe_is_enabled_offset(VALUE self, VALUE rfile);
|