ruby-dtrace 0.0.6 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. data/History.txt +21 -0
  2. data/Manifest.txt +86 -19
  3. data/README.txt +48 -6
  4. data/Rakefile +61 -20
  5. data/examples/scsi.rb +1 -1
  6. data/ext/dof/Makefile +154 -0
  7. data/ext/dof/constants.c +57 -0
  8. data/ext/dof/dof.h +56 -0
  9. data/ext/dof/dof_api.c +58 -0
  10. data/ext/dof/dof_helper.c +82 -0
  11. data/ext/dof/extconf.rb +4 -0
  12. data/ext/dof/file.c +90 -0
  13. data/ext/dof/generator.c +9 -0
  14. data/ext/dof/header.c +79 -0
  15. data/ext/dof/mkmf.log +10 -0
  16. data/ext/dof/parser.c +415 -0
  17. data/ext/dof/parser.h +10 -0
  18. data/ext/dof/section.c +312 -0
  19. data/ext/dtrace_aggdata.c +2 -2
  20. data/ext/dtrace_api.c +46 -34
  21. data/ext/dtrace_api.h +31 -7
  22. data/ext/dtrace_bufdata.c +3 -3
  23. data/ext/dtrace_hdl.c +66 -3
  24. data/ext/dtrace_probedata.c +4 -4
  25. data/ext/{dtrace_probe.c → dtrace_probedesc.c} +7 -7
  26. data/ext/extconf.rb +25 -0
  27. data/ext/i386-darwin/dtrace_probe.c +278 -0
  28. data/ext/i386-solaris/dtrace_probe.c +225 -0
  29. data/ext/stubs.txt +78 -0
  30. data/lib/dtrace.rb +34 -13
  31. data/lib/dtrace/aggregate.rb +40 -0
  32. data/lib/dtrace/aggregateset.rb +19 -0
  33. data/lib/dtrace/consumer.rb +174 -0
  34. data/lib/dtrace/data.rb +82 -0
  35. data/lib/dtrace/dof.rb +8 -0
  36. data/lib/dtrace/dof/file.rb +64 -0
  37. data/lib/dtrace/dof/section.rb +75 -0
  38. data/lib/dtrace/dof/section/strtab.rb +28 -0
  39. data/lib/{dtraceprintfrecord.rb → dtrace/printfrecord.rb} +4 -2
  40. data/lib/dtrace/probe.rb +3 -6
  41. data/lib/dtrace/probedata.rb +23 -0
  42. data/lib/dtrace/probedesc.rb +15 -0
  43. data/lib/dtrace/provider.rb +190 -169
  44. data/lib/dtrace/provider/klass.rb +33 -0
  45. data/lib/dtrace/provider/probedef.rb +24 -0
  46. data/lib/{dtracerecord.rb → dtrace/record.rb} +4 -2
  47. data/lib/{dtracestackrecord.rb → dtrace/stackrecord.rb} +10 -8
  48. data/lib/dtrace/version.rb +9 -0
  49. data/lib/dtraceconsumer.rb +3 -167
  50. data/plugin/dtrace/lib/dtracer.rb +4 -4
  51. data/test/apple-dof +0 -0
  52. data/test/disabled_probe_effect.txt +19 -0
  53. data/test/dof +0 -0
  54. data/test/dof2 +0 -0
  55. data/test/test_disabled_probe_effect.rb +56 -0
  56. data/test/test_dof_generator.rb +142 -0
  57. data/test/test_dof_helper.rb +106 -0
  58. data/test/test_dof_parser.rb +27 -0
  59. data/test/test_dof_providers.rb +278 -0
  60. data/test/test_dof_strtabs.rb +98 -0
  61. data/test/test_dtrace.rb +67 -1
  62. data/test/test_dtrace_aggregates.rb +5 -5
  63. data/test/test_dtrace_drops_errors.rb +5 -5
  64. data/test/test_dtrace_probe.rb +385 -0
  65. data/test/test_dtrace_probes.rb +414 -0
  66. data/test/test_dtrace_processes.rb +2 -2
  67. data/test/test_dtrace_profile.rb +12 -12
  68. data/test/test_dtrace_provider.rb +138 -0
  69. data/test/test_dtrace_repeat.rb +1 -1
  70. data/test/test_dtrace_rubyprobe.rb +3 -1
  71. data/test/test_dtrace_typefilter.rb +9 -9
  72. data/test/test_legacy_consumer.rb +56 -0
  73. metadata +112 -71
  74. data/lib/dtrace/provider/osx.rb +0 -25
  75. data/lib/dtrace/provider/solaris.rb +0 -29
  76. data/lib/dtraceaggregate.rb +0 -37
  77. data/lib/dtraceaggregateset.rb +0 -17
  78. data/lib/dtracedata.rb +0 -80
  79. data/lib/dtraceprobe.rb +0 -13
  80. data/lib/dtraceprobedata.rb +0 -21
  81. data/test/test_dynusdt.rb +0 -135
@@ -1,25 +0,0 @@
1
- #
2
- # Ruby-Dtrace
3
- # (c) 2007 Chris Andrews <chris@nodnol.org>
4
- #
5
-
6
- class Dtrace
7
- class Provider
8
- class OSX < Provider
9
-
10
- # build the .bundle
11
- def ruby_object
12
- run "#{Config::CONFIG['LDSHARED']} -I #{hdrdir} -o #{@tempdir}/#{@name}.bundle #{@tempdir}/probes.c"
13
- end
14
-
15
- def dtrace_object
16
- # no-op on OSX
17
- end
18
-
19
- def link
20
- # no-op on OSX
21
- end
22
-
23
- end
24
- end
25
- end
@@ -1,29 +0,0 @@
1
- #
2
- # Ruby-Dtrace
3
- # (c) 2007 Chris Andrews <chris@nodnol.org>
4
- #
5
-
6
- require 'rbconfig'
7
-
8
- class Dtrace
9
- class Provider
10
- class Solaris < Provider
11
-
12
- # build the .o
13
- def ruby_object
14
- run "#{Config::CONFIG['CC']} -I#{hdrdir} -o #{@tempdir}/#{@name}.o -c #{@tempdir}/probes.c"
15
- end
16
-
17
- # build the dtrace.o (dtrace -G)
18
- def dtrace_object
19
- run "/usr/sbin/dtrace -G -s #{@tempdir}/probes.d -o #{@tempdir}/probes.o #{@tempdir}/#{@name}.o"
20
- end
21
-
22
- # build the .so
23
- def link
24
- run "#{Config::CONFIG['CC']} -shared -o #{@tempdir}/#{@name}.so #{@tempdir}/#{@name}.o #{@tempdir}/probes.o"
25
- end
26
-
27
- end
28
- end
29
- end
@@ -1,37 +0,0 @@
1
- #
2
- # Ruby-Dtrace
3
- # (c) 2007 Chris Andrews <chris@nodnol.org>
4
- #
5
-
6
- # Represents an aggregation record built from a series of
7
- # DtraceAggData records.
8
- #
9
- # Intended to to built up by calling +add_record+ repeatedly with
10
- # DtraceAggData objects until a completed DtraceAggregate is returned.
11
- # (until a complete record is available, +add_record+ returns nil).
12
- #
13
- # See dtraceconsumer.rb for an example of this.
14
- class DtraceAggregate
15
- attr_reader :value, :tuple
16
-
17
- # Create an empty DtraceAggregate: use +add_record+ to add data.
18
- def initialize
19
- @tuple = Array.new
20
- end
21
-
22
- # Add a DtraceAggData record to this aggregate. Returns nil until it
23
- # receives a record of aggtype "last", when it returns the complete
24
- # DtraceAggregate.
25
- def add_record(r)
26
- case r.aggtype
27
- when "tuple"
28
- @tuple << r.value
29
- when "value"
30
- @value = r.value
31
- when "last"
32
- return self
33
- end
34
- nil
35
- end
36
-
37
- end
@@ -1,17 +0,0 @@
1
- #
2
- # Ruby-Dtrace
3
- # (c) 2007 Chris Andrews <chris@nodnol.org>
4
- #
5
-
6
- class DtraceAggregateSet
7
- attr_reader :data
8
-
9
- def initialize
10
- @data = Array.new
11
- end
12
-
13
- def add_aggregate(agg)
14
- @data << agg
15
- end
16
-
17
- end
@@ -1,80 +0,0 @@
1
- #
2
- # Ruby-Dtrace
3
- # (c) 2007 Chris Andrews <chris@nodnol.org>
4
- #
5
- # The object returned from a consumer when a probe fires. Accumulates
6
- # records from the callbacks, and is yielded when the data is complete.
7
- class DtraceData
8
- attr_reader :data
9
- attr_reader :probe
10
- attr_reader :cpu, :indent, :prefix, :flow
11
-
12
- def initialize(types)
13
- @types = types
14
- @data = []
15
- @curraggset = nil
16
- @curragg = nil
17
- end
18
-
19
- def add_data(d)
20
- if @types.length == 0 || @types.include?(d.class)
21
- @data << d
22
- end
23
- end
24
-
25
- def finish
26
- if @curraggset
27
- add_data(@curraggset)
28
- @curraggset = nil
29
- end
30
- end
31
-
32
- def add_recdata(rec)
33
- if @curraggset
34
- add_data(@curraggset)
35
- @curraggset = nil
36
- end
37
- if rec.action == "printa"
38
- @curraggset = DtraceAggregateSet.new
39
- end
40
- end
41
-
42
- def add_probedata(probedata)
43
- probedata.each_record do |p|
44
- add_data(p)
45
- end
46
-
47
- # Record the probe that fired, and CPU/indent/prefix/flow
48
- @probe = probedata.probe
49
- @cpu = probedata.cpu
50
- @indent = probedata.indent
51
- @prefix = probedata.prefix
52
- @flow = probedata.flow
53
- end
54
-
55
- def add_bufdata(buf)
56
- r = buf.record
57
- # buf records can be empty (trace();)
58
- if r
59
- case r.class.to_s
60
- when DtraceStackRecord.to_s
61
- add_data(r)
62
- when DtraceRecord.to_s
63
- add_data(r)
64
- when DtracePrintfRecord.to_s
65
- add_data(r)
66
- when DtraceAggData.to_s
67
- if @curragg == nil
68
- @curragg = DtraceAggregate.new
69
- end
70
- if agg = @curragg.add_record(r)
71
- if @curraggset
72
- @curraggset.add_aggregate(@curragg)
73
- end
74
- @curragg = nil
75
- end
76
- end
77
- end
78
- end
79
-
80
- end
@@ -1,13 +0,0 @@
1
- #
2
- # Ruby-Dtrace
3
- # (c) 2007 Chris Andrews <chris@nodnol.org>
4
- #
5
-
6
- class DtraceProbe
7
-
8
- def to_s
9
- "#{provider}:#{mod}:#{func}:#{name}"
10
- end
11
-
12
- end
13
-
@@ -1,21 +0,0 @@
1
- #
2
- # Ruby-Dtrace
3
- # (c) 2007 Chris Andrews <chris@nodnol.org>
4
- #
5
-
6
- class DtraceProbeData
7
-
8
- def records
9
- records = Array.new
10
- self.each_record do |rec|
11
- records << rec
12
- end
13
- records
14
- end
15
-
16
- def to_s
17
- rs = self.records
18
- rs.map {|r| r.value }.join ', '
19
- end
20
-
21
- end
@@ -1,135 +0,0 @@
1
- #
2
- # Ruby-Dtrace
3
- # (c) 2007 Chris Andrews <chris@nodnol.org>
4
- #
5
-
6
- require 'dtrace'
7
- require 'dtrace/provider'
8
- require 'test/unit'
9
- require 'rbconfig'
10
-
11
- # Tests for the Dtrace "dynamic USDT" library
12
-
13
- class TestDynUsdt < Test::Unit::TestCase
14
-
15
- def test_create_usdt
16
- Dtrace::Provider.create :test_provider_create_usdt do |p|
17
- p.probe :test_probe, :string
18
- end
19
-
20
- t = Dtrace.new
21
- t.setopt("bufsize", "4m")
22
-
23
- progtext = 'test_provider_create_usdt*:::test-probe { trace(copyinstr(arg0)); }'
24
-
25
- prog = t.compile progtext
26
- prog.execute
27
- t.go
28
-
29
- c = DtraceConsumer.new(t)
30
-
31
- Dtrace::Probe::TestProviderCreateUsdt.test_probe do |p|
32
- p.fire "test_argument"
33
- end
34
-
35
- i = 0
36
- c.consume_once do |d|
37
- i = i + 1
38
- assert d
39
- assert_not_nil d.probe
40
- assert_equal "test_provider_create_usdt#{$$.to_s}:test_provider_create_usdt.#{Config::CONFIG['DLEXT']}:test_probe:test-probe", d.probe.to_s
41
- assert_equal 1, d.data.length
42
- assert_equal "test_argument", d.data[0].value
43
- end
44
- assert_equal 1, i
45
- end
46
-
47
- def test_create_usdt_argtypes
48
- Dtrace::Provider.create :test_provider_create_usdt_argtypes do |p|
49
- p.probe :test_probe_string, :string
50
- p.probe :test_probe_int, :integer
51
- end
52
-
53
- t = Dtrace.new
54
- t.setopt("bufsize", "4m")
55
-
56
- progtext = <<EOD
57
- test_provider_create_usdt_argtypes*:::test-probe-string { trace(copyinstr(arg0)); }
58
- test_provider_create_usdt_argtypes*:::test-probe-int { trace(arg0); }
59
- EOD
60
-
61
- prog = t.compile progtext
62
- prog.execute
63
- t.go
64
-
65
- c = DtraceConsumer.new(t)
66
-
67
- Dtrace::Probe::TestProviderCreateUsdtArgtypes.test_probe_string do |p|
68
- p.fire "test_argument"
69
- end
70
-
71
- Dtrace::Probe::TestProviderCreateUsdtArgtypes.test_probe_int do |p|
72
- p.fire 42
73
- end
74
-
75
- i = 0
76
- c.consume_once do |d|
77
- assert d
78
- assert_not_nil d.probe
79
- if d.probe.name == 'test-probe-string'
80
- assert_equal "test_argument", d.data[0].value
81
- i = i + 1
82
- elsif d.probe.name == 'test-probe-int'
83
- assert_equal 42, d.data[0].value
84
- i = i + 1
85
- end
86
- end
87
- assert_equal 2, i
88
- end
89
-
90
- def test_create_usdt_manyargs
91
- Dtrace::Provider.create :test_provider_create_usdt_manyargs do |p|
92
- p.probe :test_probe, :string, :string, :string, :string, :string, :string, :string, :string
93
- end
94
-
95
- t = Dtrace.new
96
- t.setopt("bufsize", "4m")
97
-
98
- progtext = <<EOD
99
- test_provider_create_usdt_manyargs*:::test-probe
100
- {
101
- trace(copyinstr(arg0));
102
- trace(copyinstr(arg1));
103
- trace(copyinstr(arg2));
104
- trace(copyinstr(arg3));
105
- trace(copyinstr(arg4));
106
- trace(copyinstr(arg5));
107
- trace(copyinstr(arg6));
108
- trace(copyinstr(arg7));
109
- }
110
- EOD
111
-
112
- prog = t.compile progtext
113
- prog.execute
114
- t.go
115
-
116
- c = DtraceConsumer.new(t)
117
-
118
- Dtrace::Probe::TestProviderCreateUsdtManyargs.test_probe do |p|
119
- values_list = (0..7).map {|i| "value #{i.to_s}" }
120
- p.fire(*values_list)
121
- end
122
-
123
- i = 0
124
- c.consume_once do |d|
125
- i = i + 1
126
- assert_equal 8, d.data.length
127
- (0..7).each do |j|
128
- assert_equal "value #{j.to_s}", d.data[j].value
129
- end
130
- end
131
- assert_equal 1, i
132
- end
133
-
134
- end
135
-