rbbcc 0.3.0 → 0.3.1

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: 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: {}