pyroscope 0.0.16 → 0.0.23

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: 76993115eef4fc1b362e927bebb25727ec82ff9fb7015e344da5746f9c4c76bb
4
- data.tar.gz: be474b604626cb0c1818a9f0348bb95941721e4c4ad7fa78c0b50cff7ce52e3d
3
+ metadata.gz: 6d225c19f37a67a395be38c34385f64890b39a2a62b4e0d2e2fb33ee6ea339bd
4
+ data.tar.gz: 16c2204608dd53eab9252c90188347524e90c7fa854dd0a51686129127193777
5
5
  SHA512:
6
- metadata.gz: be636ff348bf2ee331acf07f14ea260de35b0f1e78a2265733a9952124fc0588cc96b286ba0e362c118d17f1085946cb054a9f24feb90e4ae8590ead6b338db8
7
- data.tar.gz: 050e2d247e3b5742035f7c0957243d272230d08111927af81d1a638e01ad0334dca886b3c9673d3544b1acaef5f4cdbc2b9bcef6dd61dd301c4370149cae8ce8
6
+ metadata.gz: 182168268e38e12e25101c30b508c550daa50c3b3406ba8f9409fbdd268b06f584ae28bd92dd73067e288029f962075bff7e4e7fe8446767ab047c70798ea7d4
7
+ data.tar.gz: daccec7b3a6c262ac4a0d03fd6459907fa4b450c7e0598180d58c4983d9c2148260a04198b7c7da25c962cdc5209e5c9af49748331915d1a3a9e23e89b7b8bed
data/Rakefile CHANGED
@@ -42,16 +42,8 @@ task :build => [:clean, :compile]
42
42
  task :default => [:build, :spec]
43
43
 
44
44
  task :test do
45
- # system "rsync -a /home/dmitry/rbspy/ /home/dmitry/pyroscope/third_party/local-clones/rbspy"
46
- # # system "cd ../pyroscope && DOCKER_BUILDKIT=1 docker build -f Dockerfile.static-libs --output type=local,dest=out ." if RUBY_PLATFORM.include?("linux")
47
- # system "cd ../pyroscope && rm out/*.a"
48
- # system "cd ../pyroscope && ENABLED_SPIES=rbspy make build-rust-dependencies"
49
- # system "cd ../pyroscope && make build-rbspy-static-library"
50
- # system "cd ../pyroscope && cp third_party/rustdeps/target/x86_64-unknown-linux-gnu/release/librustdeps.a ./out/librustdeps.a"
51
- extra_env = "PYROSCOPE_RUBY_LOCAL=1"
52
- extra_env = ""
53
-
54
- system "#{extra_env} rake build && #{extra_env} sudo -E gem install pkg/pyroscope-#{Pyroscope::VERSION}.gem && sudo -E ruby test.rb"
45
+ sudo = RUBY_PLATFORM =~ /darwin/ ? "sudo -E" : ""
46
+ system "rake build && #{sudo} gem install pkg/pyroscope-#{Pyroscope::VERSION}.gem && #{sudo} ruby test.rb"
55
47
  end
56
48
 
57
49
  task :test_exec do
@@ -9,7 +9,7 @@ HEADER_DIRS = [INCLUDEDIR]
9
9
 
10
10
  LIB_DIRS = [LIBDIR, File.expand_path(File.join(File.dirname(__FILE__), "lib"))]
11
11
 
12
- COMMIT = "3ad06ea"
12
+ COMMIT = "df45c48"
13
13
 
14
14
  # TODO: this is not very accurate, but it works for now
15
15
  OS = RUBY_PLATFORM.include?("darwin") ? "mac" : "linux"
@@ -19,10 +19,18 @@ PREFIX = "/static-libs/#{COMMIT}/#{OS}-#{ARCH}"
19
19
 
20
20
  ROOT = File.expand_path("..", __FILE__)
21
21
 
22
+ def run(str)
23
+ system(str) || fail("command failed: #{str}")
24
+ end
25
+
22
26
  if ENV["PYROSCOPE_RUBY_LOCAL"]
23
27
  puts "PYROSCOPE_RUBY_LOCAL yes"
24
- system "cp #{ENV["HOME"]}/pyroscope/out/libpyroscope.rbspy.a #{File.join(ROOT, "lib/libpyroscope.rbspy.a")}"
25
- system "cp #{ENV["HOME"]}/pyroscope/out/librustdeps.a #{File.join(ROOT, "lib/librustdeps.a")}"
28
+ # TODO: make configurable
29
+ pyroscope_path = "#{ENV["HOME"]}/pyroscope"
30
+ run("rm -rf #{File.join(ROOT, "build")}")
31
+ run("cd #{pyroscope_path} && make build-rust-dependencies-docker")
32
+ run("cp #{pyroscope_path}/out/libpyroscope.rbspy.a #{File.join(ROOT, "lib/libpyroscope.rbspy.a")}")
33
+ run("cp #{pyroscope_path}/out/librustdeps.a #{File.join(ROOT, "lib/librustdeps.a")}")
26
34
  else
27
35
  Net::HTTP.start("dl.pyroscope.io", 443, :use_ssl => true) do |http|
28
36
  ["libpyroscope.rbspy.a", "librustdeps.a"].each do |name|
Binary file
Binary file
@@ -6,46 +6,90 @@ static VALUE rb_Pyroscope;
6
6
  #include <stdio.h>
7
7
  #include <string.h>
8
8
 
9
- int Start(char*, int, char*, char*);
10
- int Stop(int);
11
- int ChangeName(char*, int);
9
+ int Start(char*, char*, char*, char*, int, int, char*);
10
+ int Stop();
11
+ int ChangeName(char*);
12
+ int SetTag(char*, char*);
13
+ int TestLogger();
14
+ int SetLoggerLevel(int);
15
+ char* BuildSummary();
12
16
 
13
17
  static VALUE
14
- pyroscope_start(VALUE self, VALUE appName, VALUE pid, VALUE serverAddress) {
18
+ pyroscope_start(VALUE self, VALUE appName, VALUE serverAddress, VALUE authToken, VALUE sampleRate, VALUE withSubprocesses, VALUE logLevel) {
15
19
  VALUE r_appName = StringValue(appName);
16
20
  char *c_appName = RSTRING_PTR(r_appName);
17
21
 
18
- int c_pid = FIX2INT(pid);
22
+ int c_sampleRate = FIX2INT(sampleRate);
23
+ int c_withSubprocesses = FIX2INT(withSubprocesses);
19
24
 
20
25
  VALUE r_serverAddress = StringValue(serverAddress);
21
26
  char *c_serverAddress = RSTRING_PTR(r_serverAddress);
22
27
 
23
- int res = Start(c_appName, c_pid, "rbspy", c_serverAddress);
28
+ VALUE r_authToken = StringValue(authToken);
29
+ char *c_authToken = RSTRING_PTR(r_authToken);
30
+
31
+ VALUE r_logLevel = StringValue(logLevel);
32
+ char *c_logLevel = RSTRING_PTR(r_logLevel);
33
+
34
+ int res = Start(c_appName, "rbspy", c_serverAddress, c_authToken, c_sampleRate, c_withSubprocesses, c_logLevel);
24
35
 
25
36
  return INT2FIX(res);
26
37
  }
27
38
 
28
39
  static VALUE
29
- pyroscope_stop(VALUE self, VALUE pid) {
30
- int c_pid = FIX2INT(pid);
31
- int res = Stop(c_pid);
40
+ pyroscope_stop(VALUE self) {
41
+ int res = Stop();
32
42
  return INT2FIX(res);
33
43
  }
34
44
 
35
45
  static VALUE
36
- pyroscope_change_name(VALUE self, VALUE appName, VALUE pid) {
46
+ pyroscope_change_name(VALUE self, VALUE appName) {
37
47
  VALUE r_appName = StringValue(appName);
38
48
  char *c_appName = RSTRING_PTR(r_appName);
39
- int c_pid = FIX2INT(pid);
40
49
 
41
- int res = ChangeName(c_appName, c_pid);
50
+ int res = ChangeName(c_appName);
51
+ return INT2FIX(res);
52
+ }
53
+
54
+ static VALUE
55
+ pyroscope_set_tag(VALUE self, VALUE key, VALUE val) {
56
+ VALUE r_key = StringValue(key);
57
+ char *c_key = RSTRING_PTR(r_key);
58
+ VALUE r_val = StringValue(val);
59
+ char *c_val = RSTRING_PTR(r_val);
60
+
61
+ int res = SetTag(c_key, c_val);
62
+ return INT2FIX(res);
63
+ }
64
+
65
+ static VALUE
66
+ pyroscope_test_logger(VALUE self) {
67
+ int res = TestLogger();
42
68
  return INT2FIX(res);
43
69
  }
44
70
 
71
+ static VALUE
72
+ pyroscope_set_logger_level(VALUE self, VALUE level) {
73
+ int res = SetLoggerLevel(FIX2INT(level));
74
+ return INT2FIX(res);
75
+ }
76
+
77
+ static VALUE
78
+ pyroscope_build_summary(VALUE self) {
79
+ char *c_summary = BuildSummary();
80
+ VALUE r_summary = rb_str_new_cstr(c_summary);
81
+ free(c_summary);
82
+ return r_summary;
83
+ }
84
+
45
85
  void
46
86
  Init_pyroscope_c() {
47
87
  rb_Pyroscope = rb_define_module("Pyroscope");
48
- rb_define_module_function(rb_Pyroscope, "_start", pyroscope_start, 3);
49
- rb_define_module_function(rb_Pyroscope, "_stop", pyroscope_stop, 1);
50
- rb_define_module_function(rb_Pyroscope, "_change_name", pyroscope_change_name, 2);
88
+ rb_define_module_function(rb_Pyroscope, "_start", pyroscope_start, 6);
89
+ rb_define_module_function(rb_Pyroscope, "_stop", pyroscope_stop, 0);
90
+ rb_define_module_function(rb_Pyroscope, "_change_name", pyroscope_change_name, 1);
91
+ rb_define_module_function(rb_Pyroscope, "_set_tag", pyroscope_set_tag, 2);
92
+ rb_define_module_function(rb_Pyroscope, "_test_logger", pyroscope_test_logger, 0);
93
+ rb_define_module_function(rb_Pyroscope, "_set_logger_level", pyroscope_set_logger_level, 1);
94
+ rb_define_module_function(rb_Pyroscope, "_build_summary", pyroscope_build_summary, 0);
51
95
  }
@@ -1,3 +1,3 @@
1
1
  module Pyroscope
2
- VERSION = "0.0.16".freeze
2
+ VERSION = "0.0.23".freeze
3
3
  end
data/lib/pyroscope.rb CHANGED
@@ -2,23 +2,49 @@ require "pyroscope/version"
2
2
  require "pyroscope_c"
3
3
 
4
4
  module Pyroscope
5
- Config = Struct.new(:app_name, :server_address)
6
-
7
- def self.configure
8
- @configuration = Config.new
9
- yield @configuration
10
- _start(
11
- @configuration.app_name,
12
- Process.pid,
13
- @configuration.server_address,
14
- )
15
- end
5
+ Config = Struct.new(:app_name, :server_address, :auth_token, :sample_rate, :with_subprocesses, :log_level)
16
6
 
17
- def self.stop
18
- _stop(Process.pid)
19
- end
7
+ class << self
8
+ def configure
9
+ @configuration = Config.new
10
+ yield @configuration
11
+ _start(
12
+ @configuration.app_name,
13
+ @configuration.server_address,
14
+ @configuration.auth_token || "",
15
+ @configuration.sample_rate || 100,
16
+ @configuration.with_subprocesses || 0,
17
+ @configuration.log_level || "error",
18
+ )
19
+ end
20
+
21
+ def stop
22
+ _stop
23
+ end
24
+
25
+ def change_name(new_name)
26
+ _change_name(new_name)
27
+ end
28
+
29
+ def set_tag(key, val)
30
+ _set_tag(key, val)
31
+ end
32
+
33
+ def test_logger()
34
+ _test_logger
35
+ end
36
+
37
+ VALID_LOG_LEVELS = %i[none error info debug]
38
+
39
+ def set_logger_level(level)
40
+ i = VALID_LOG_LEVELS.index(level)
41
+ raise "Unknown log level (#{level.inspect}), valid values are #{VALID_LOG_LEVELS.inspect}" unless i
42
+
43
+ _set_logger_level(i - 1)
44
+ end
20
45
 
21
- def self.change_name(new_name)
22
- _change_name(new_name, Process.pid)
46
+ def build_summary
47
+ _build_summary
48
+ end
23
49
  end
24
50
  end
data/test.rb CHANGED
@@ -5,11 +5,17 @@ puts "prestart #{Process.pid}"
5
5
  Pyroscope.configure do |config|
6
6
  config.app_name = "test.ruby.app{}"
7
7
  config.server_address = "http://localhost:4040/"
8
+ config.log_level = "debug"
8
9
  end
9
10
 
10
11
  puts "start"
11
- iteration=0
12
- st = Time.new
12
+
13
+ puts "Pyroscope.test_logger 1"
14
+ Pyroscope.test_logger
15
+ Pyroscope.set_logger_level(:debug)
16
+ puts "Pyroscope.test_logger 2"
17
+ Pyroscope.test_logger
18
+
13
19
 
14
20
  def work(n)
15
21
  i = 0
@@ -30,22 +36,57 @@ def sleep_job
30
36
  sleep(rand()*10)
31
37
  end
32
38
 
33
-
34
- while true
35
- iteration+=1
36
-
37
- r = rand
38
- if r < 0.1
39
- sleep_job
40
- elsif r < 0.5
41
- puts(" * test.ruby.app{job=0}")
42
- Pyroscope.change_name("test.ruby.app{job=0}")
43
- job_0
44
- Pyroscope.change_name("test.ruby.app{}")
45
- else
46
- puts(" * test.ruby.app{job=1}")
47
- Pyroscope.change_name("test.ruby.app{job=1}")
48
- job_1
49
- Pyroscope.change_name("test.ruby.app{}")
39
+ def main_loop(b)
40
+ puts "Starting main loop from: #{Process.pid}"
41
+ Pyroscope.set_tag("pid", Process.pid.to_s) if b
42
+ while true
43
+ r = rand
44
+ # if r > 0.9
45
+ # Pyroscope.set_logger_level(:test)
46
+ # end
47
+ if r < 0.1
48
+ sleep_job
49
+ elsif r < 0.5
50
+ puts(" * test.ruby.app{job=0} #{Process.pid}")
51
+ Pyroscope.set_tag("job", "0") if b
52
+ job_0
53
+ Pyroscope.set_tag("job", "") if b
54
+ else
55
+ puts(" * test.ruby.app{job=1} #{Process.pid}")
56
+ Pyroscope.set_tag("job", "1") if b
57
+ job_1
58
+ Pyroscope.set_tag("job", "") if b
59
+ end
50
60
  end
51
61
  end
62
+
63
+ fork do
64
+ puts "build_summary:"
65
+ puts Pyroscope.build_summary
66
+ # Pyroscope.configure do |config|
67
+ # config.app_name = "test.ruby.app2{}"
68
+ # config.server_address = "http://localhost:4040/"
69
+ # end
70
+
71
+ puts "Hello from fork pid: #{Process.pid}"
72
+ sleep 15
73
+ main_loop(false)
74
+ end
75
+
76
+ # sleep 5
77
+ # if ARGV.first == "subprocess"
78
+ # main_loop(true)
79
+ # else
80
+ # ssh_pid = Kernel.spawn("ruby", "test.rb", "subprocess")
81
+ # puts "spawned #{ssh_pid}"
82
+
83
+ # sleep(30)
84
+ # puts "killing #{ssh_pid}"
85
+ # Process.kill("TERM", ssh_pid)
86
+
87
+
88
+ # end
89
+
90
+ sleep 15
91
+ puts "The parent process just skips over it: #{Process.pid}"
92
+ main_loop(true)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pyroscope
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.16
4
+ version: 0.0.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pyroscope Team
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-30 00:00:00.000000000 Z
11
+ date: 2021-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -107,7 +107,7 @@ homepage: http://rubygems.org/gems/pyroscope
107
107
  licenses:
108
108
  - Apache-2.0
109
109
  metadata: {}
110
- post_install_message:
110
+ post_install_message:
111
111
  rdoc_options: []
112
112
  require_paths:
113
113
  - lib
@@ -123,8 +123,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  requirements: []
126
- rubygems_version: 3.2.15
127
- signing_key:
126
+ rubygems_version: 3.2.22
127
+ signing_key:
128
128
  specification_version: 4
129
129
  summary: pyroscope
130
130
  test_files: []