rbbcc 0.3.0 → 0.3.1

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: a1911b0a6e9450e76b3fda2c56c45bfc17846638e1ca99e64e983d99f99dff64
4
- data.tar.gz: e4841d103a87ee45ced700ea7dff562a305e1cbf1172ef35da40be063d4ee698
3
+ metadata.gz: 162758633aea60cbe4979dd77f61603a7f2032d624594b523f990d703d9fc0e6
4
+ data.tar.gz: 39b9b0b9fd390f45a5a242d6182197d9e39de0fb0444f06c94872a42b5dd4d5a
5
5
  SHA512:
6
- metadata.gz: fd3aba48720c19d46efa02eac50fd758e883306616bb14068e13c4062f8d8efd4f9852b2b5d7f8eded678a9954e36070cb13f2be99c271b6983ab8ec75e53807
7
- data.tar.gz: 63170a77e06d0c15d5dac6eed68112232b475259fcce7a07f4c99ba21baf9df0e85faa307fa2c868afc4aea9888ac7b4779188f03e0cd40d0cbedfab28c41873
6
+ metadata.gz: e807d4903cbd8683eb58b073700a24993824e23027de3445d2729728e9cbe7d556a7948a15efaf5c5e7462521675854ec40e32e9776d64c637778fcbad4ad79c
7
+ data.tar.gz: fcecb00f5eb34f247987b445c59daa221b99ed477ffcd5355e965ac20c97cbe748b3650f2066de1b6575e4ffaf97c7cf21bf9751a7e55ec02cfb0a1837f3e7be
data/.gitignore CHANGED
@@ -10,4 +10,8 @@
10
10
 
11
11
  .ruby-version
12
12
 
13
- /examples/work/*
13
+ /examples/work/*
14
+
15
+ /bin
16
+ !/bin/setup
17
+ !/bin/console
@@ -0,0 +1,19 @@
1
+ version: v1.0
2
+ name: Ruby Test
3
+ agent:
4
+ machine:
5
+ type: e1-standard-2
6
+ os_image: ubuntu1804
7
+ blocks:
8
+ - name: Basic Test
9
+ task:
10
+ jobs:
11
+ - name: ruby test
12
+ matrix:
13
+ - env_var: LIBBCC_VERSION
14
+ values: [ "0.12.0", "0.11.0", "0.10.0" ]
15
+ commands:
16
+ - sem-version c 7
17
+ - sem-version ruby 2.6.5
18
+ - checkout
19
+ - ./semaphore.sh
data/Gemfile.lock CHANGED
@@ -1,13 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rbbcc (0.2.0)
4
+ rbbcc (0.3.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  coderay (1.1.2)
10
10
  method_source (0.9.2)
11
+ minitest (5.14.0)
11
12
  pry (0.12.2)
12
13
  coderay (~> 1.1.0)
13
14
  method_source (~> 0.9.0)
@@ -18,6 +19,7 @@ PLATFORMS
18
19
 
19
20
  DEPENDENCIES
20
21
  bundler (~> 2.0)
22
+ minitest
21
23
  pry
22
24
  rake (~> 10.0)
23
25
  rbbcc!
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # RbBCC
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/rbbcc.svg)](https://badge.fury.io/rb/rbbcc)
3
+ [![Gem Version](https://badge.fury.io/rb/rbbcc.svg)](https://badge.fury.io/rb/rbbcc) [![CI status](https://udzura.semaphoreci.com/badges/rbbcc.svg)](https://udzura.semaphoreci.com/projects/rbbcc)
4
4
 
5
5
  RbBCC is a port of [BCC](https://github.com/iovisor/bcc) in MRI. See iovisor project page.
6
6
 
data/Rakefile CHANGED
@@ -1,2 +1,9 @@
1
1
  require "bundler/gem_tasks"
2
- task :default => :spec
2
+
3
+ require "rake/testtask"
4
+ Rake::TestTask.new do |t|
5
+ t.test_files = FileList['test/**/*_test.rb']
6
+ end
7
+ desc "Run tests"
8
+
9
+ task :default => :test
data/lib/rbbcc/clib.rb CHANGED
@@ -25,15 +25,22 @@ module RbBCC
25
25
  end
26
26
 
27
27
  extend Fiddle::Importer
28
- begin
29
- default_load = ENV['LIBBCC_VERSION'] || "0.11.0"
30
-
31
- dlload "libbcc.so.#{default_load}"
32
- self.libbcc_version = default_load
33
- rescue Fiddle::DLError => e
34
- warn "Fall back to libbcc 0.10.0: #{e.inspect}"
35
- dlload "libbcc.so.0.10.0"
36
- self.libbcc_version = "0.10.0"
28
+ targets = %w(0.12.0 0.11.0 0.10.0)
29
+ if default_load = ENV['LIBBCC_VERSION']
30
+ targets.unshift(default_load)
31
+ targets.uniq!
32
+ end
33
+
34
+ targets.each do |to_load|
35
+ begin
36
+ dlload "libbcc.so.#{to_load}"
37
+ self.libbcc_version = to_load
38
+ break
39
+ rescue Fiddle::DLError => e
40
+ if targets.last == to_load
41
+ raise LoadError, "no target libbcc to load"
42
+ end
43
+ end
37
44
  end
38
45
  typealias "size_t", "int"
39
46
 
@@ -70,6 +77,7 @@ module RbBCC
70
77
  extern 'char * bpf_table_key_desc(void *, char *)'
71
78
  extern 'char * bpf_table_leaf_desc(void *, char *)'
72
79
  extern 'int bpf_update_elem(int fd, void *key, void *value, unsigned long long flags)'
80
+ extern 'int bpf_delete_elem(int fd, void *key)'
73
81
 
74
82
  extern 'int bpf_attach_kprobe(int, int, char *, char *, unsigned long, int)'
75
83
  extern 'int bpf_detach_kprobe(char *)'
data/lib/rbbcc/table.rb CHANGED
@@ -96,6 +96,14 @@ module RbBCC
96
96
  if res < 0
97
97
  raise SystemCallError.new("Could not update table", Fiddle.last_error)
98
98
  end
99
+ leaf
100
+ end
101
+
102
+ def delete(key)
103
+ res = Clib.bpf_delete_elem(self.map_fd, key)
104
+ if res < 0
105
+ raise KeyError, "key not found"
106
+ end
99
107
  res
100
108
  end
101
109
 
@@ -127,6 +135,11 @@ module RbBCC
127
135
  enum_for(:each_pair).to_a
128
136
  end
129
137
 
138
+ def clear
139
+ each_key {|key| self.delete(key) }
140
+ return items # reload contents
141
+ end
142
+
130
143
  def print_log2_hist(val_type="value",
131
144
  section_header: "Bucket ptr",
132
145
  section_print_fn: nil,
@@ -198,6 +211,19 @@ module RbBCC
198
211
  super(normalize_key(key))
199
212
  end
200
213
 
214
+ def []=(key, value)
215
+ super(normalize_key(key), value)
216
+ end
217
+
218
+ def clearitem(key)
219
+ self[key] = byref(0, @leafsize)
220
+ end
221
+
222
+ def delete(key)
223
+ # Delete in Array type does not have an effect, so zero out instead
224
+ clearitem(key)
225
+ end
226
+
201
227
  def each(&b)
202
228
  each_value do |v|
203
229
  b.call(v.to_bcc_value)
data/lib/rbbcc/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RbBCC
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
data/rbbcc.gemspec CHANGED
@@ -24,4 +24,5 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "bundler", "~> 2.0"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
26
  spec.add_development_dependency "pry"
27
+ spec.add_development_dependency "minitest"
27
28
  end
data/semaphore.sh ADDED
@@ -0,0 +1,73 @@
1
+ #!/bin/bash
2
+
3
+ # packages
4
+
5
+ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4052245BD4284CDD
6
+ echo "deb https://repo.iovisor.org/apt/$(lsb_release -cs) $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/iovisor.list
7
+ sudo apt -y update
8
+ sudo apt -y install libbcc
9
+
10
+ # build libbcc 0.11/0.12
11
+ ORIG_DIR=$(pwd)
12
+ sudo mkdir -p /opt/bcc
13
+
14
+ cd /
15
+ sudo chown $(whoami) /opt/bcc
16
+ cache has_key libbcc-so && cache restore libbcc-so
17
+ sudo chown -R root /opt/bcc
18
+ cd -
19
+
20
+ if test "$(ls /opt/bcc | wc -l)" -le "0"; then
21
+ sudo apt -y install bison build-essential cmake flex git libedit-dev \
22
+ libllvm6.0 llvm-6.0-dev libclang-6.0-dev python zlib1g-dev libelf-dev
23
+
24
+ sudo mkdir -p /opt/bcc-work
25
+ sudo chown $(whoami) /opt/bcc-work
26
+ cd /opt/bcc-work
27
+ git clone https://github.com/iovisor/bcc.git
28
+ mkdir bcc/build
29
+ cd bcc
30
+
31
+ git checkout v0.11.0
32
+ git submodule init
33
+ git submodule sync
34
+ git submodule update
35
+ cd build
36
+ cmake .. -DCMAKE_INSTALL_PREFIX=/opt/bcc
37
+ make -j$(nproc)
38
+ sudo make install
39
+ make clean
40
+ cd ..
41
+
42
+ V0_12_HASH=2d099cd8c5cb1598d6e911c0b389132ebc7c101b
43
+ git checkout $V0_12_HASH
44
+ git submodule init
45
+ git submodule sync
46
+ git submodule update
47
+ cd build
48
+ cmake .. -DCMAKE_INSTALL_PREFIX=/opt/bcc
49
+ make -j$(nproc)
50
+ sudo make install
51
+
52
+ cd /
53
+ cache has_key libbcc-so && cache clear libbcc-so
54
+ cache store libbcc-so opt/bcc
55
+ cd -
56
+ fi
57
+ cd $ORIG_DIR
58
+
59
+ # link all tha objects under /lib from /opt/bcc
60
+ sudo ln -sf /opt/bcc/lib/libbcc.so.0.11.0 /opt/bcc/lib/libbcc.so.0.12.0 /usr/lib/x86_64-linux-gnu/
61
+
62
+ # Doing tests
63
+ set -e
64
+
65
+ bundle install --path vendor/bundle
66
+
67
+ bundle exec ruby -e "require 'rbbcc'; puts 'Using rbbcc: %s && libbcc: %s' % [RbBCC::VERSION, RbBCC::Clib.libbcc_version.to_s]"
68
+ if test "$(bundle exec ruby -e 'require %q(rbbcc); print RbBCC::Clib.libbcc_version.to_s')" != "${LIBBCC_VERSION}"; then
69
+ echo "Test target mismatch"
70
+ exit 127
71
+ fi
72
+
73
+ sudo -E env PATH=$PATH bundle exec rake test
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbcc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uchio Kondo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-20 00:00:00.000000000 Z
11
+ date: 2020-02-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description: BCC port for MRI. See https://github.com/iovisor/bcc
56
70
  email:
57
71
  - udzura@udzura.jp
@@ -60,6 +74,7 @@ extensions: []
60
74
  extra_rdoc_files: []
61
75
  files:
62
76
  - ".gitignore"
77
+ - ".semaphore/semaphore.yml"
63
78
  - Dockerfile
64
79
  - Dockerfile.dfm-example
65
80
  - Gemfile
@@ -103,6 +118,7 @@ files:
103
118
  - lib/rbbcc/version.rb
104
119
  - misc/rbbcc-dfm-ruby
105
120
  - rbbcc.gemspec
121
+ - semaphore.sh
106
122
  homepage: https://github.com/udzura/rbbcc
107
123
  licenses: []
108
124
  metadata: {}