ruby-static-tracing 0.0.14 → 0.0.15

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7ac00c672308f4c2f3f12935d4a64ed1a0ac190c09a32f0b6ef5f684bd05d4d1
4
- data.tar.gz: c1ea10f2f75a1f230789d4dd093af6760a2f949be0cec0b5f30fe66c8b1dc8ad
3
+ metadata.gz: 1a43ab444f18179cf5d5cdcd677d5a2043a0849adaa4df605920f9869ed0191e
4
+ data.tar.gz: 49086fa125a903a9f48923ba22de6999fa01f87dde54e35dc5064941155135d1
5
5
  SHA512:
6
- metadata.gz: d619816b75f523a10ef9e7f4ecfbc5d5067483661a9931d0199a012406313ab8fa3092ca71bf65fcfdc3e89ac222e6fa7b8848f66d965ab042c0eb4a73c0edcc
7
- data.tar.gz: c1c98d614ec92e106a08b83492ec5f9a8c8017a749d394950ee633148927277a470111b5f918eaa16053fc5099e391807baa5ff5cf6c56c32420f193b11bb806
6
+ metadata.gz: 0d987dcb22dd0fbcf4294f6ba33792d383c289c52a241fd2579f36669330fc6935b928de947c9e51e48f9b22f751a79cb0a22be6ec7005605ebcb2e209f6c9f5
7
+ data.tar.gz: f11c5777711c104064de7664ce784a7e84fb1924b539011cf4bde22572eb62d432f31c83b024d4fe7401753a0621ce03fcb29d1ed5e42955f00e31b5ff83c414
@@ -6,7 +6,6 @@ require 'ruby-static-tracing/version'
6
6
  require 'ruby-static-tracing/platform'
7
7
  require 'ruby-static-tracing/provider'
8
8
  require 'ruby-static-tracing/tracepoint'
9
- require 'ruby-static-tracing/tracepoints'
10
9
  require 'ruby-static-tracing/configuration'
11
10
  require 'ruby-static-tracing/tracer'
12
11
  require 'ruby-static-tracing/tracers'
@@ -9,7 +9,7 @@ module StaticTracing
9
9
  attr_accessor :name
10
10
 
11
11
  # Provider couldn't be found in collection
12
- class ProviderNotFound < StandardError; end
12
+ class ProviderMissingError < StandardError; end
13
13
 
14
14
  class << self
15
15
  # Gets a provider by name
@@ -21,7 +21,7 @@ module StaticTracing
21
21
  # Gets a provider instance by name
22
22
  def fetch(namespace)
23
23
  providers.fetch(namespace) do
24
- raise ProviderNotFound
24
+ raise ProviderMissingError
25
25
  end
26
26
  end
27
27
 
@@ -37,11 +37,6 @@ module StaticTracing
37
37
  providers.values.each(&:disable)
38
38
  end
39
39
 
40
- def clean
41
- # FIXME: this should free first
42
- @providers = {}
43
- end
44
-
45
40
  private
46
41
 
47
42
  # A global collection of providers
@@ -58,9 +53,8 @@ module StaticTracing
58
53
  if tracepoint.is_a?(String)
59
54
  tracepoint = Tracepoint.new(namespace, tracepoint, *args)
60
55
  elsif tracepoint.is_a?(Tracepoint)
61
- @tracepoints << tracepoint
56
+ @tracepoints[tracepoint.name] = tracepoint
62
57
  end
63
- tracepoint
64
58
  end
65
59
 
66
60
  # Enable the provider, loading it into memory
@@ -82,6 +76,7 @@ module StaticTracing
82
76
  # Only supported on systems (linux) where backed by file
83
77
  def path; end
84
78
 
79
+ # Completely removes the provider
85
80
  def destroy; end
86
81
 
87
82
  private
@@ -95,7 +90,7 @@ module StaticTracing
95
90
  StaticTracing.issue_disabled_tracepoints_warning
96
91
  end
97
92
  @namespace = namespace
98
- @tracepoints = []
93
+ @tracepoints = {}
99
94
  end
100
95
  end
101
96
  end
@@ -2,6 +2,17 @@
2
2
 
3
3
  module StaticTracing
4
4
  class Tracepoint
5
+ class TracepointMissingError < StandardError; end
6
+
7
+ class << self
8
+ # Gets a trace instance by provider name and name
9
+ def fetch(provider, name)
10
+ Provider.fetch(provider).tracepoints.fetch(name.to_s) do
11
+ raise TracepointMissingError
12
+ end
13
+ end
14
+ end
15
+
5
16
  class InvalidArgumentError < StandardError
6
17
  def initialize(argument, expected_type)
7
18
  error_message = <<~ERROR_MESSAGE
@@ -45,6 +56,7 @@ module StaticTracing
45
56
  _fire_tracepoint(values)
46
57
  end
47
58
 
59
+ # The provider this tracepoint is defined on
48
60
  def provider
49
61
  Provider.fetch(@provider_name)
50
62
  end
@@ -12,7 +12,8 @@ module StaticTracing
12
12
  include Tracer::Helpers
13
13
 
14
14
  def register(klass, *method_names, provider: nil)
15
- provider ||= underscore(klass.name)
15
+ provider_name ||= underscore(klass.name)
16
+ provider = Provider.register(provider_name)
16
17
  method_overrides = function_wrapper.new(provider, @wrapping_function, @data_types)
17
18
  modified_classes[klass] ||= method_overrides
18
19
  modified_classes[klass].add_override(method_names.flatten)
@@ -42,10 +43,12 @@ module StaticTracing
42
43
 
43
44
  def add_override(methods)
44
45
  methods.each do |method|
45
- Tracepoints.add(@provider, method, @data_types)
46
+ Tracepoint.new(@provider.namespace, method.to_s, *@data_types)
46
47
  define_method(method.to_s, @wrapping_function)
47
48
  end
48
49
  end
50
+
51
+ attr_reader :provider
49
52
  end
50
53
  end
51
54
 
@@ -9,7 +9,9 @@ module StaticTracing
9
9
  duration = StaticTracing.nsec - start_time
10
10
  method_name = __method__.to_s
11
11
  provider = Tracer::Helpers.underscore(self.class.name)
12
- Tracepoints.get(provider, method_name).fire(method_name, duration)
12
+ # FIXME: benchmark this, we may need to cache the provider instance on the object
13
+ # This lookup is a bit of a hack
14
+ Tracepoint.fetch(provider, method_name).fire(method_name, duration)
13
15
  result
14
16
  }
15
17
 
@@ -9,7 +9,8 @@ module StaticTracing
9
9
  current_stack = send(:caller).join("\n")
10
10
  method_name = __method__.to_s
11
11
  provider = Tracer::Helpers.underscore(self.class.name)
12
- Tracepoints.get(provider, method_name).fire(method_name, current_stack)
12
+ Tracepoint.fetch(provider, method_name).fire(method_name, current_stack)
13
+
13
14
  super(*args, &block)
14
15
  }
15
16
 
@@ -2,5 +2,5 @@
2
2
 
3
3
  module StaticTracing
4
4
  # The current version of this gem
5
- VERSION = '0.0.14'
5
+ VERSION = '0.0.15'
6
6
  end
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Quick helpers to get a dev env set up
4
+ namespace :docker do
5
+ desc 'Builds the development docker image'
6
+ task :build do
7
+ system("docker build -f #{File.join(DOCKER_DIR, 'Dockerfile.ci')} #{DOCKER_DIR} -t quay.io/dalehamel/ruby-static-tracing")
8
+ end
9
+
10
+ desc 'Runs the development docker image'
11
+ task :run do
12
+ `docker run --privileged --name ruby-static-tracing-#{Time.now.getutc.to_i} -v $(pwd):/app -d quay.io/dalehamel/ruby-static-tracing:latest /bin/sh -c "sleep infinity"`.strip
13
+ system("docker exec -ti #{latest_running_container_id} /app/vagrant/debugfs.sh")
14
+ end
15
+
16
+ desc 'Provides a shell within the development docker image'
17
+ task :shell do
18
+ system("docker exec -ti #{latest_running_container_id} bash")
19
+ end
20
+
21
+ desc 'Build and install the gem'
22
+ task :install do
23
+ system("docker exec -ti #{latest_running_container_id} bash -c 'bundle install && bundle exec rake install'")
24
+ end
25
+ desc 'Runs integration tests within the development docker image'
26
+ task :integration do
27
+ system("docker exec -ti #{latest_running_container_id} bash -c 'bundle install && bundle exec rake clean && bundle exec rake build && bundle exec rake integration'")
28
+ end
29
+
30
+ desc 'Wrap running test in docker'
31
+ task :test do
32
+ exit system("docker exec -ti #{latest_running_container_id} \
33
+ bash -c 'mv vendor vendor.bak; bundle install && \
34
+ bundle exec rake test; err=$?;
35
+ rm -rf vendor; mv vendor.bak vendor;
36
+ exit $err'")
37
+ end
38
+
39
+ desc 'Wrap running Rubocop in docker'
40
+ task :rubocop do
41
+ exit system("docker exec -ti #{latest_running_container_id} \
42
+ bash -c 'mv vendor ../vendor.bak; bundle install && \
43
+ bundle exec rake clean;
44
+ bundle exec rake rubocop; err=$?;
45
+ rm -rf vendor; mv ../vendor.bak vendor;
46
+ exit $err'")
47
+ end
48
+
49
+ desc 'Check C files for linting issues'
50
+ task :clangfmt do
51
+ exit system("docker exec -ti #{latest_running_container_id} \
52
+ bash -c 'mv vendor vendor.bak; bundle install && \
53
+ bundle exec rake clangfmt; err=$?;
54
+ rm -rf vendor; mv vendor.bak vendor;
55
+ exit $err'")
56
+ end
57
+
58
+ desc 'Cleans up all development docker images for this project'
59
+ task :clean do
60
+ system('docker container ls --quiet --filter name=ruby-static-tracing* | xargs -I@ docker container kill @')
61
+ end
62
+
63
+ desc 'Pulls development image'
64
+ task :pull do
65
+ system('docker pull quay.io/dalehamel/ruby-static-tracing')
66
+ end
67
+
68
+ desc 'Push development image'
69
+ task :push do
70
+ system('docker push quay.io/dalehamel/ruby-static-tracing')
71
+ end
72
+
73
+ desc 'Fully set up a development docker image, and get a shell'
74
+ task up: %i[build run shell]
75
+
76
+ def latest_running_container_id
77
+ container_id = `docker container ls --latest --quiet --filter status=running --filter name=ruby-static-tracing*`.strip
78
+ if container_id.empty?
79
+ raise 'No containers running, please run rake docker:run and then retry this task'
80
+ else
81
+ container_id
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :vagrant do
4
+ desc 'Sets up a vagrant VM, needed for our development environment.'
5
+ task :up do
6
+ system('vagrant up')
7
+ end
8
+
9
+ desc 'Provides a shell within vagrant.'
10
+ task :ssh do
11
+ system('vagrant ssh')
12
+ end
13
+
14
+ desc 'Enters a shell within our development docker image, within vagrant.'
15
+ task :shell do
16
+ system("vagrant ssh -c 'cd /vagrant && bundle exec rake docker:shell'")
17
+ end
18
+
19
+ desc 'Runs tests within the development docker image, within vagrant'
20
+ task :tests do
21
+ system("vagrant ssh -c 'cd /vagrant && bundle exec rake docker:tests'")
22
+ end
23
+
24
+ desc 'Runs integration tests within the development docker image, within vagrant'
25
+ task :integration do
26
+ system("vagrant ssh -c 'cd /vagrant && bundle exec rake docker:integration'")
27
+ end
28
+
29
+ desc 'Cleans up the vagrant VM'
30
+ task :clean do
31
+ system('vagrant destroy')
32
+ end
33
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-static-tracing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dale Hamel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-22 00:00:00.000000000 Z
11
+ date: 2019-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: unmixer
@@ -188,7 +188,6 @@ files:
188
188
  - lib/ruby-static-tracing/platform.rb
189
189
  - lib/ruby-static-tracing/provider.rb
190
190
  - lib/ruby-static-tracing/tracepoint.rb
191
- - lib/ruby-static-tracing/tracepoints.rb
192
191
  - lib/ruby-static-tracing/tracer.rb
193
192
  - lib/ruby-static-tracing/tracer/base.rb
194
193
  - lib/ruby-static-tracing/tracer/concerns/latency_tracer.rb
@@ -197,6 +196,8 @@ files:
197
196
  - lib/ruby-static-tracing/tracer/stack.rb
198
197
  - lib/ruby-static-tracing/tracers.rb
199
198
  - lib/ruby-static-tracing/version.rb
199
+ - lib/tasks/docker.rb
200
+ - lib/tasks/vagrant.rb
200
201
  homepage: https://github.com/dalehamel/ruby-static-tracing
201
202
  licenses:
202
203
  - MIT
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module StaticTracing
4
- # FIXME: - why do we need this class? We should store tracepoints
5
- # on providers, and get the list of all tracepoints from the list of providers
6
- class Tracepoints
7
- class ProviderMissingError < StandardError; end
8
- class TracepointMissingError < StandardError; end
9
-
10
- class << self
11
- def add(provider, name, data_types)
12
- tracepoints[provider][name.to_s] ||= begin
13
- StaticTracing::Tracepoint.new(provider, name.to_s, *data_types)
14
- end
15
- end
16
-
17
- def get(provider, name)
18
- tracepoints
19
- .fetch(provider) { raise_error(ProviderMissingError) }
20
- .fetch(name) { raise_error(TracepointMissingError) }
21
- end
22
-
23
- def clean
24
- @tracepoints ||= Hash.new { |hash, key| hash[key] = {} }
25
- end
26
-
27
- private
28
-
29
- def tracepoints
30
- @tracepoints ||= Hash.new { |hash, key| hash[key] = {} }
31
- end
32
-
33
- def raise_error(error)
34
- raise error
35
- end
36
- end
37
- end
38
- end