oneapm_ci 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Mzg5ZDc5ZDMwZDJlZmEyMDhhNzUzNzI4NzYxMzQ5ODliYjFiNTUxYQ==
5
+ data.tar.gz: !binary |-
6
+ MjgyMmE4NjU4YTIyOTdkZDQ5MzA5OWQwZGYzZmI1NzkwMDkzNDljZg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ Njg1OWUwZGQ0MWY2MzgzOWI2MTMzYmI4ODIxMTVjNjNjYzA1MmQzY2M2ODlk
10
+ OWJmMWE3NDc0OTM2MjUyMjJjYTg5OGYyODk3ZGQ5MTBjNDZkZThmODAwM2Yy
11
+ MDhjMzk2NDEzN2U2YWIwMjgwYzVmN2FiODkxNmU4YzJmZmFmMTM=
12
+ data.tar.gz: !binary |-
13
+ MjA2ZWZlMGY4YzM0OTE1Nzg4NzM0NWUxYzI0ZDRlY2NiMTNiOWZjOGY0ZDhi
14
+ NjU5MWM0NWQ1OTQ1NzYzMjUyYTE3ZmJlZjMzNDc0NTg5ZTcxZmU5ZGE1MmNj
15
+ YzkyMzBiYTIxNTQ4MjFkNGUwZDBmOWE1YmJlNjZkZWM4NWU5YTI=
data/.gitignore ADDED
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.gem
11
+ .ruby-version
12
+ .ruby-gemset
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # source 'https://rubygems.org'
2
+ source 'https://ruby.taobao.org'
3
+
4
+ # Specify your gem's dependencies in oneapm_ci.gemspec
5
+ gemspec
data/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # OneapmCi
2
+
3
+ Sdk for oneapm ci.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'oneapm_ci'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install oneapm_ci
20
+
21
+
22
+ ## Quick Start Guide
23
+
24
+ ```ruby
25
+ require 'oneapm_ci'
26
+
27
+ statsd = OneapmCi::Statsd.new
28
+
29
+ # Increment a counter.
30
+ statsd.increment('page.views')
31
+
32
+ #Record a gauge 50% of the time.
33
+ statsd.gauge('users.online', 100, ['users.onapm'], 0.5)
34
+ end
@@ -0,0 +1,119 @@
1
+ # encoding: utf-8
2
+
3
+ require 'socket'
4
+ require 'logger'
5
+
6
+ module OneapmCi
7
+ class Statsd
8
+
9
+ attr_reader :socket, :buffer
10
+
11
+ ENCODING = 'utf-8'.freeze
12
+
13
+ #Init Statsd
14
+ # @statsd = OneapmCi::Statsd.new
15
+ #<String> host: the host of the OneStatsd server (default: 'localhost')
16
+ #<Fixnum> port: the port of the OneStatsd server (default: 8251)
17
+ #<Hash> option:
18
+ # <Fixnum> option[:max_buffer_size]: Maximum number of metrics to buffer before sending to the server (default: 50)
19
+ # <Array> option[:constant_tags]: Tags to attach to every metric reported by this client (default: [])
20
+ # <Boolean> option[:use_ms]: Report timed values in milliseconds instead of seconds (default: false)
21
+ def initialize host='localhost', port=8251, option={}
22
+ @host = host
23
+ @port = port
24
+ @buffer = []
25
+ @socket = nil
26
+ @max_buffer_size = option[:max_buffer_size] || 50
27
+ @constant_tags = option[:constant_tags] || []
28
+ @use_ms = option[:use_ms] || false
29
+ exit_handler
30
+ end
31
+
32
+ #Record the value of a gauge, optionally setting a list of tags and a sample rate.
33
+ # @statsd.gauge('test.online', 8080)
34
+ # @statsd.gauge('test.online', 8080, ['test:online'], 0.8)
35
+ def gauge metric, value=1, tags=[], sample_rate=1
36
+ report(metric, 'g', value, tags, sample_rate)
37
+ end
38
+
39
+ #Increment a counter, optionally setting a value, tags and a sample rate.
40
+ # @statsd.increment('test.online', 1)
41
+ # @statsd.increment('test.online', 1, ['test:online'], 0.8)
42
+ def increment metric, value=1, tags=[], sample_rate=1
43
+ report(metric, 'c', value, tags, sample_rate)
44
+ end
45
+
46
+ #Decrement a counter, optionally setting a value, tags and a sample rate.
47
+ # @statsd.decrement('test.online', 1)
48
+ # @statsd.decrement('test.online', 1, ['test:online'], 0.8)
49
+ def decrement metric, value=1, tags=[], sample_rate=1
50
+ report(metric, 'c', -value, tags, sample_rate)
51
+ end
52
+
53
+ private
54
+
55
+ def report metric, mtype, value, tags, sample_rate
56
+ return if sample_rate.to_f != 1.0 && rand() > sample_rate.to_f
57
+ data = convert(metric, mtype, value, tags, sample_rate)
58
+ store_to_buffer data if data
59
+ end
60
+
61
+ def convert metric, mtype, value, tags, sample_rate
62
+ data = []
63
+ data << "#{metric}:#{value}"
64
+ data << "#{mtype}"
65
+ data << "@#{sample_rate.to_f}"
66
+ data << "##{tags.join(',')}" unless (tags += @constant_tags).empty?
67
+ data.join("|").encode(ENCODING) rescue nil
68
+ end
69
+
70
+ def store_to_buffer data
71
+ @buffer << data
72
+ flush_buffer if @buffer.size >= @max_buffer_size
73
+ end
74
+
75
+ def flush_buffer
76
+ buffer_old = @buffer
77
+ @buffer = []
78
+ send_to_agent{|socket| socket.send(buffer_old.join("\n"), 0)} if buffer_old.size > 0
79
+ end
80
+
81
+ def send_to_agent
82
+ begin
83
+ yield socket
84
+ rescue => e
85
+ logger.error "send to agent server error: #{e.inspect}"
86
+ end
87
+ end
88
+
89
+ def socket
90
+ @socket ||= begin
91
+ _socket_ = UDPSocket.new
92
+ _socket_.connect @host, @port
93
+ _socket_
94
+ end
95
+ end
96
+
97
+ def logger
98
+ @logger ||= begin
99
+ log = Logger.new(STDOUT)
100
+ log.level = Logger::INFO
101
+ log.datetime_format = "%Y-%m-%d %H:%M:%S"
102
+ log
103
+ end
104
+ end
105
+
106
+ #flush buffer on exit
107
+ def exit_handler
108
+ at_exit do
109
+ begin
110
+ flush_buffer
111
+ socket.close
112
+ rescue => e
113
+ logger.error "close sokcet error: #{e.inspect}"
114
+ end
115
+ end
116
+ end
117
+
118
+ end
119
+ end
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+
3
+ module OneapmCi
4
+ VERSION = "0.0.1"
5
+ end
data/lib/oneapm_ci.rb ADDED
@@ -0,0 +1,4 @@
1
+ # encoding: utf-8
2
+
3
+ require 'oneapm_ci/version'
4
+ require 'oneapm_ci/statsd'
data/oneapm_ci.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+
3
+ $:.push "#{File.expand_path('..', __FILE__)}/lib"
4
+
5
+ require 'oneapm_ci/version'
6
+
7
+ Gem::Specification.new do |gem|
8
+ gem.name = 'oneapm_ci'
9
+ gem.version = OneapmCi::VERSION
10
+ gem.authors = 'oneapm'
11
+ gem.email = 'support@oneapm.com'
12
+
13
+ gem.summary = 'OneApm Cloud Insight SDK'
14
+ gem.description = 'OneApm Cloud Insight SDK. (http://www.oneapm.com/ci/feature.html)'
15
+ gem.homepage = 'http://www.oneapm.com/ci/feature.html'
16
+
17
+ gem.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test\/|bin\/|Rakefile)}) }
18
+
19
+ gem.require_paths = ['lib']
20
+ gem.required_ruby_version = '>= 1.9'
21
+ gem.add_development_dependency 'rake', '~> 10.1'
22
+ gem.add_development_dependency 'minitest', '~> 5.0'
23
+ gem.add_development_dependency 'minitest-reporters', '~> 1.0'
24
+ gem.add_development_dependency 'mocha', '~> 0.13'
25
+ gem.add_development_dependency 'pry', '~> 0.9'
26
+ end
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: oneapm_ci
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - oneapm
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-01-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '10.1'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '10.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '5.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '5.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest-reporters
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mocha
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '0.13'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '0.13'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '0.9'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '0.9'
83
+ description: OneApm Cloud Insight SDK. (http://www.oneapm.com/ci/feature.html)
84
+ email: support@oneapm.com
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files: []
88
+ files:
89
+ - .gitignore
90
+ - .travis.yml
91
+ - Gemfile
92
+ - README.md
93
+ - lib/oneapm_ci.rb
94
+ - lib/oneapm_ci/statsd.rb
95
+ - lib/oneapm_ci/version.rb
96
+ - oneapm_ci.gemspec
97
+ homepage: http://www.oneapm.com/ci/feature.html
98
+ licenses: []
99
+ metadata: {}
100
+ post_install_message:
101
+ rdoc_options: []
102
+ require_paths:
103
+ - lib
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '1.9'
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ requirements: []
115
+ rubyforge_project:
116
+ rubygems_version: 2.4.5
117
+ signing_key:
118
+ specification_version: 4
119
+ summary: OneApm Cloud Insight SDK
120
+ test_files: []