pyroscope 0.0.16 → 0.0.23

Sign up to get free protection for your applications and to get access to all the features.
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: []