liquid-ext 1.2.6 → 2.0.0

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
  SHA1:
3
- metadata.gz: de07920fe9812a1175330442c78423682738194e
4
- data.tar.gz: a85070567b1a1f111c26321b900be5e2279bda6a
3
+ metadata.gz: 0f7d145d1f48227703e304c99775bac339161231
4
+ data.tar.gz: 7f9cb4dc4191cfb32a0f5ee100f2ff53aa6f0a66
5
5
  SHA512:
6
- metadata.gz: f42212fd4f6ddd1baa9d58f5ad288c663cb45eba279a97ce37a74b13eb32186fae19ace1f3a52868b50d973d9069455884d1614b119dc432d9b4ab440aa33529
7
- data.tar.gz: 7a1caac0680abee5784515232eb02ed693083f7b5e4d0710215b52313f158c63f5031f47e440582736ac6491ae0e106a10ad67147c8d37026d818b8b1b71a74e
6
+ metadata.gz: 0bc4029f4c802e501359f96fdb0e1336a4153ef927c8154357dcd00d6ba257a1294ed47c0bd870b9ca429b7ed55ddc9b7f6f5a662687b503a53ad1c09ab8d6e3
7
+ data.tar.gz: e955589d37421c4a257154a617514ceda2b7ff44c06947e78195c072203d52b44a5877e193fcc4dd9132f3d09ab260a5f9eafa451f5928e09f3281a3d4f48aca
data/.gitignore CHANGED
@@ -2,8 +2,8 @@
2
2
  *.rbc
3
3
  .bundle
4
4
  .config
5
+ .jbundler/
5
6
  .yardoc
6
- Gemfile.lock
7
7
  InstalledFiles
8
8
  _yardoc
9
9
  coverage
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ jruby
data/.travis.yml CHANGED
@@ -1,8 +1,13 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - jruby
4
- - 2.0.0
5
- - 1.9.3
4
+ env:
5
+ - JRUBY_OPTS="--debug -J-Xmx4g -J-XX:MaxPermSize=1g"
6
+ install:
7
+ - bundle install --without development --deployment
8
+ - bundle exec lockjar install
9
+ script:
10
+ - bundle exec rspec --format documentation
6
11
  notifications:
7
12
  email: false
8
13
  hipchat:
data/Gemfile CHANGED
@@ -1,7 +1,6 @@
1
- source 'https://rubygems.org'
1
+ source 'http://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- group :development, :test do
6
- gem "liquid-development"
7
- end
5
+ gem 'lock_jar'
6
+ gem 'liquid-development'
data/Gemfile.lock ADDED
@@ -0,0 +1,133 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ liquid-ext (2.0.0)
5
+ activesupport
6
+ erubis
7
+ liquid-logging (>= 2.0.0)
8
+ mixlib-cli
9
+ terminal-table
10
+
11
+ GEM
12
+ remote: http://rubygems.org/
13
+ specs:
14
+ activesupport (4.0.2)
15
+ i18n (~> 0.6, >= 0.6.4)
16
+ minitest (~> 4.2)
17
+ multi_json (~> 1.3)
18
+ thread_safe (~> 0.1)
19
+ tzinfo (~> 0.3.37)
20
+ atomic (1.1.14-java)
21
+ awesome_print (1.2.0)
22
+ bond (0.4.3-java)
23
+ brice (0.2.9)
24
+ ruby-nuggets (>= 0.5.2)
25
+ cane (2.6.1)
26
+ parallel
27
+ coderay (1.1.0)
28
+ columnize (0.3.6)
29
+ diff-lcs (1.2.5)
30
+ docile (1.1.2)
31
+ erubis (2.7.0)
32
+ ffi (1.9.3-java)
33
+ fuubar (1.3.2)
34
+ rspec (>= 2.14.0, < 3.1.0)
35
+ ruby-progressbar (~> 1.3)
36
+ i18n (0.6.9)
37
+ liquid-development (0.1.2)
38
+ awesome_print
39
+ brice
40
+ cane
41
+ fuubar
42
+ pry
43
+ rake
44
+ reek
45
+ ripl
46
+ rspec
47
+ ruby-debug
48
+ simplecov
49
+ tailor
50
+ timecop
51
+ yard
52
+ liquid-logging (2.0.1-java)
53
+ log4jruby (~> 1.0.0.rc1)
54
+ slyphon-log4j (~> 1.2.15)
55
+ lock_jar (0.7.5)
56
+ naether (~> 0.10.1)
57
+ thor (~> 0.18.1)
58
+ log4jruby (1.0.0.rc1-java)
59
+ log_switch (0.4.0)
60
+ method_source (0.8.2)
61
+ mini_portile (0.5.2)
62
+ minitest (4.7.5)
63
+ mixlib-cli (1.4.0)
64
+ multi_json (1.8.4)
65
+ naether (0.10.1-java)
66
+ nokogiri (1.6.1-java)
67
+ mini_portile (~> 0.5.0)
68
+ parallel (0.9.2)
69
+ pry (0.9.12.6-java)
70
+ coderay (~> 1.0)
71
+ method_source (~> 0.8)
72
+ slop (~> 3.4)
73
+ spoon (~> 0.0)
74
+ rake (10.1.1)
75
+ reek (1.3.6)
76
+ ruby2ruby (~> 2.0.7)
77
+ ruby_parser (~> 3.2)
78
+ sexp_processor
79
+ ripl (0.7.0)
80
+ bond (~> 0.4.2)
81
+ rspec (2.14.1)
82
+ rspec-core (~> 2.14.0)
83
+ rspec-expectations (~> 2.14.0)
84
+ rspec-mocks (~> 2.14.0)
85
+ rspec-core (2.14.7)
86
+ rspec-expectations (2.14.4)
87
+ diff-lcs (>= 1.1.3, < 2.0)
88
+ rspec-mocks (2.14.4)
89
+ ruby-debug (0.10.4)
90
+ columnize (>= 0.1)
91
+ ruby-debug-base (~> 0.10.4.0)
92
+ ruby-debug-base (0.10.4-java)
93
+ ruby-nuggets (0.9.6)
94
+ ruby-progressbar (1.4.1)
95
+ ruby2ruby (2.0.7)
96
+ ruby_parser (~> 3.1)
97
+ sexp_processor (~> 4.0)
98
+ ruby_parser (3.3.0)
99
+ sexp_processor (~> 4.1)
100
+ sexp_processor (4.4.1)
101
+ simplecov (0.8.2)
102
+ docile (~> 1.1.0)
103
+ multi_json
104
+ simplecov-html (~> 0.8.0)
105
+ simplecov-html (0.8.0)
106
+ slop (3.4.7)
107
+ slyphon-log4j (1.2.15)
108
+ spoon (0.0.4)
109
+ ffi
110
+ tailor (1.4.0)
111
+ log_switch (>= 0.3.0)
112
+ nokogiri (>= 1.6.0)
113
+ term-ansicolor (>= 1.0.5)
114
+ text-table (>= 1.2.2)
115
+ term-ansicolor (1.2.2)
116
+ tins (~> 0.8)
117
+ terminal-table (1.4.5)
118
+ text-table (1.2.3)
119
+ thor (0.18.1)
120
+ thread_safe (0.1.3-java)
121
+ atomic
122
+ timecop (0.7.1)
123
+ tins (0.13.1)
124
+ tzinfo (0.3.38)
125
+ yard (0.8.7.3)
126
+
127
+ PLATFORMS
128
+ java
129
+
130
+ DEPENDENCIES
131
+ liquid-development
132
+ liquid-ext!
133
+ lock_jar
data/Jarfile ADDED
@@ -0,0 +1,2 @@
1
+ jar 'com.codahale.metrics:metrics-core:3.0.1'
2
+ jar 'com.codahale.metrics:metrics-healthchecks:3.0.1'
data/Jarfile.lock ADDED
@@ -0,0 +1,14 @@
1
+ ---
2
+ version: 0.7.5
3
+ groups:
4
+ default:
5
+ dependencies:
6
+ - com.codahale.metrics:metrics-core:jar:3.0.1
7
+ - com.codahale.metrics:metrics-healthchecks:jar:3.0.1
8
+ - org.slf4j:slf4j-api:jar:1.7.5
9
+ artifacts:
10
+ - jar:com.codahale.metrics:metrics-core:jar:3.0.1:
11
+ transitive: {}
12
+ - jar:com.codahale.metrics:metrics-healthchecks:jar:3.0.1:
13
+ transitive:
14
+ org.slf4j:slf4j-api:jar:1.7.5: {}
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Liquid Extensions
2
2
 
3
- The liquid-ext gem provides a bunch of ruby extensions and common startup/runtime code.
3
+ The liquid-ext gem provides a bunch of ruby extensions and common
4
+ startup/runtime code. Only JRuby 1.7 is currently supported.
4
5
 
5
6
  [![Gem Version](https://badge.fury.io/rb/liquid-ext.png)](http://badge.fury.io/rb/liquid-ext)
6
7
  [![Build Status](https://secure.travis-ci.org/liquidm/ext.png)](http://travis-ci.org/liquidm/ext)
@@ -0,0 +1,26 @@
1
+ require 'singleton'
2
+
3
+ java_import 'com.codahale.metrics.health.HealthCheckRegistry'
4
+
5
+ class HealthChecks
6
+ include Singleton
7
+
8
+ attr_reader :registry
9
+
10
+ def initialize
11
+ @registry = HealthCheckRegistry.new
12
+ end
13
+
14
+ def self.registry
15
+ instance.registry
16
+ end
17
+
18
+ def self.register(name, handler)
19
+ registry.register(name, handler)
20
+ end
21
+
22
+ def self.run
23
+ registry.run_health_checks
24
+ end
25
+
26
+ end
@@ -0,0 +1,36 @@
1
+ require 'liquid/metrics/reporter'
2
+
3
+ module Metrics
4
+ class LoggerReporter < Reporter
5
+
6
+ attr_accessor :logger
7
+ attr_accessor :marker
8
+
9
+ def initialize(registry)
10
+ super
11
+ @logger = $log
12
+ @marker = "metriks:"
13
+ end
14
+
15
+ def report_gauge(name, gauge)
16
+ @logger.info(@marker, super)
17
+ end
18
+
19
+ def report_counter(name, counter)
20
+ @logger.info(@marker, super)
21
+ end
22
+
23
+ def report_histogram(name, histogram)
24
+ @logger.info(@marker, super)
25
+ end
26
+
27
+ def report_meter(name, meter)
28
+ @logger.info(@marker, super)
29
+ end
30
+
31
+ def report_timer(name, timer)
32
+ @logger.info(@marker, super)
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,153 @@
1
+ require 'liquid/metrics'
2
+
3
+ java_import 'com.codahale.metrics.MetricFilter'
4
+ java_import 'java.util.concurrent.Executors'
5
+ java_import 'java.util.concurrent.TimeUnit'
6
+
7
+ module Metrics
8
+ class Reporter
9
+
10
+ attr_accessor :filter
11
+ attr_accessor :rate_unit
12
+ attr_accessor :duration_unit
13
+
14
+ def initialize(registry)
15
+ @registry = registry
16
+ @filter = MetricFilter::ALL
17
+ @executor = Executors.newSingleThreadScheduledExecutor
18
+ self.rate_unit = TimeUnit::SECONDS
19
+ self.duration_unit = TimeUnit::MILLISECONDS
20
+ end
21
+
22
+ def rate_unit=(value)
23
+ @rate_unit = value
24
+ @rate_factor = value.to_seconds(1)
25
+ end
26
+
27
+ def duration_unit=(value)
28
+ @duration_unit = value
29
+ @duration_factor = 1.0 / value.to_nanos(1)
30
+ end
31
+
32
+ def run
33
+ report_gauges
34
+ report_counters
35
+ report_histograms
36
+ report_meters
37
+ report_timers
38
+ rescue => e
39
+ $log.exception(e)
40
+ end
41
+
42
+ def start(period = nil, unit = nil)
43
+ period ||= 10
44
+ unit ||= TimeUnit::SECONDS
45
+ @executor.scheduleAtFixedRate(self, period, period, unit)
46
+ end
47
+
48
+ def stop
49
+ @executor.shutdown
50
+ @executor.awaitTermination(1, TimeUnit::SECONDS) rescue nil
51
+ end
52
+
53
+ def report_gauges
54
+ @registry.gauges.each do |name, gauge|
55
+ report_gauge(name, gauge)
56
+ end
57
+ end
58
+
59
+ def report_counters
60
+ @registry.counters.each do |name, counter|
61
+ report_counter(name, counter)
62
+ end
63
+ end
64
+
65
+ def report_histograms
66
+ @registry.histograms.each do |name, histogram|
67
+ report_histogram(name, histogram)
68
+ end
69
+ end
70
+
71
+ def report_meters
72
+ @registry.meters.each do |name, meter|
73
+ report_meter(name, meter)
74
+ end
75
+ end
76
+
77
+ def report_timers
78
+ @registry.timers.each do |name, timer|
79
+ report_timer(name, timer)
80
+ end
81
+ end
82
+
83
+ def report_gauge(name, gauge)
84
+ {
85
+ type: :gauge,
86
+ name: name,
87
+ value: gauge.value,
88
+ }
89
+ end
90
+
91
+ def report_counter(name, counter)
92
+ {
93
+ type: :counter,
94
+ name: name,
95
+ count: counter.count,
96
+ }
97
+ end
98
+
99
+ def report_histogram(name, histogram)
100
+ snapshot = histogram.snapshot
101
+ {
102
+ type: :histogram,
103
+ name: name,
104
+ count: histogram.count,
105
+ min: snapshot.getMin,
106
+ max: snapshot.getMax,
107
+ mean: snapshot.getMean,
108
+ stdev: snapshot.getStdDev,
109
+ median: snapshot.getMedian,
110
+ :'95th_percentile' => snapshot.get95thPercentile,
111
+ }
112
+ end
113
+
114
+ def report_meter(name, meter)
115
+ {
116
+ type: :meter,
117
+ name: name,
118
+ count: meter.count,
119
+ mean_rate: convert_rate(meter.getMeanRate),
120
+ one_minute_rate: convert_rate(meter.getOneMinuteRate),
121
+ five_minute_rate: convert_rate(meter.getFiveMinuteRate),
122
+ fifteen_minute_rate: convert_rate(meter.getFifteenMinuteRate),
123
+ }
124
+ end
125
+
126
+ def report_timer(name, timer)
127
+ snapshot = timer.snapshot
128
+ {
129
+ type: :timer,
130
+ name: name,
131
+ min: convert_duration(snapshot.getMin),
132
+ max: convert_duration(snapshot.getMax),
133
+ mean: convert_duration(snapshot.getMean),
134
+ stdev: convert_duration(snapshot.getStdDev),
135
+ median: convert_duration(snapshot.getMedian),
136
+ :'95th_percentile' => convert_duration(snapshot.get95thPercentile),
137
+ mean_rate: convert_rate(timer.getMeanRate),
138
+ one_minute_rate: convert_rate(timer.getOneMinuteRate),
139
+ five_minute_rate: convert_rate(timer.getFiveMinuteRate),
140
+ fifteen_minute_rate: convert_rate(timer.getFifteenMinuteRate),
141
+ }
142
+ end
143
+
144
+ def convert_duration(duration)
145
+ (duration * @duration_factor).round(3)
146
+ end
147
+
148
+ def convert_rate(rate)
149
+ (rate * @rate_factor).round(3)
150
+ end
151
+
152
+ end
153
+ end
@@ -0,0 +1,40 @@
1
+ require 'singleton'
2
+
3
+ java_import 'com.codahale.metrics.MetricRegistry'
4
+ java_import 'com.codahale.metrics.JmxReporter'
5
+
6
+ require 'liquid/metrics/logger_reporter'
7
+
8
+ module Metrics
9
+
10
+ @@registry = MetricRegistry.new
11
+
12
+ def self.start
13
+ reporters = [
14
+ JmxReporter.forRegistry(@@registry).build,
15
+ LoggerReporter.new(@@registry),
16
+ ]
17
+ reporters.each(&:start)
18
+ Signal.register_shutdown_handler { reporters.each(&:stop) }
19
+ end
20
+
21
+ def self.registry
22
+ @@registry
23
+ end
24
+
25
+ def self.counter(name)
26
+ registry.counter(name)
27
+ end
28
+
29
+ def self.meter(name)
30
+ registry.meter(name)
31
+ end
32
+
33
+ def self.histogram(name)
34
+ registry.histogram(name)
35
+ end
36
+
37
+ def self.timer(name)
38
+ registry.timer(name)
39
+ end
40
+ end
data/lib/liquid/timing.rb CHANGED
@@ -1,4 +1,4 @@
1
- java_import 'java.lang.System' if RUBY_PLATFORM == 'java'
1
+ java_import 'java.lang.System'
2
2
 
3
3
  module Timing
4
4
  def self.start
@@ -7,17 +7,16 @@ module Timing
7
7
 
8
8
  class TimingContext
9
9
  def initialize
10
- @jruby = RUBY_PLATFORM == 'java'
11
10
  reset!
12
11
  end
13
12
 
14
13
  def reset!
15
- @start = @last_tick = now
14
+ @start = @last_tick = System.nano_time
16
15
  end
17
16
 
18
17
  def tick
19
18
  rt = runtime_since(@last_tick)
20
- @last_tick = now
19
+ @last_tick = System.nano_time
21
20
  rt
22
21
  end
23
22
 
@@ -29,14 +28,9 @@ module Timing
29
28
 
30
29
  private
31
30
 
32
- def now
33
- return System.nano_time if @jruby
34
- return Time.now.to_f
35
- end
36
-
37
31
  def runtime_since(start)
38
- rt = now - start
39
- rt = rt.to_f / 1_000_000_000 if @jruby
32
+ rt = System.nano_time - start
33
+ rt = rt.to_f / 1_000_000_000
40
34
  rt
41
35
  end
42
36
 
data/liquid-ext.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "liquid-ext"
5
- spec.version = "1.2.6"
5
+ spec.version = "2.0.0"
6
6
  spec.authors = ["LiquidM, Inc."]
7
7
  spec.email = ["opensource@liquidm.com"]
8
8
  spec.description = %q{Ruby core extensions and helper libraries}
@@ -17,9 +17,7 @@ Gem::Specification.new do |spec|
17
17
 
18
18
  spec.add_dependency "activesupport"
19
19
  spec.add_dependency "erubis"
20
- spec.add_dependency "ffi"
21
20
  spec.add_dependency "liquid-logging", ">= 2.0.0"
22
- spec.add_dependency "metriks"
23
21
  spec.add_dependency "mixlib-cli"
24
22
  spec.add_dependency "terminal-table"
25
23
  end
metadata CHANGED
@@ -1,113 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: liquid-ext
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.6
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - LiquidM, Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-20 00:00:00.000000000 Z
11
+ date: 2014-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
15
  version_requirements: !ruby/object:Gem::Requirement
23
16
  requirements:
24
- - - ">="
17
+ - - '>='
25
18
  - !ruby/object:Gem::Version
26
19
  version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: erubis
29
20
  requirement: !ruby/object:Gem::Requirement
30
21
  requirements:
31
- - - ">="
22
+ - - '>='
32
23
  - !ruby/object:Gem::Version
33
24
  version: '0'
34
- type: :runtime
35
25
  prerelease: false
26
+ type: :runtime
27
+ - !ruby/object:Gem::Dependency
28
+ name: erubis
36
29
  version_requirements: !ruby/object:Gem::Requirement
37
30
  requirements:
38
- - - ">="
31
+ - - '>='
39
32
  - !ruby/object:Gem::Version
40
33
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: ffi
43
34
  requirement: !ruby/object:Gem::Requirement
44
35
  requirements:
45
- - - ">="
36
+ - - '>='
46
37
  - !ruby/object:Gem::Version
47
38
  version: '0'
48
- type: :runtime
49
39
  prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
40
+ type: :runtime
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: liquid-logging
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: 2.0.0
62
- type: :runtime
63
- prerelease: false
64
43
  version_requirements: !ruby/object:Gem::Requirement
65
44
  requirements:
66
- - - ">="
45
+ - - '>='
67
46
  - !ruby/object:Gem::Version
68
47
  version: 2.0.0
69
- - !ruby/object:Gem::Dependency
70
- name: metriks
71
48
  requirement: !ruby/object:Gem::Requirement
72
49
  requirements:
73
- - - ">="
50
+ - - '>='
74
51
  - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :runtime
52
+ version: 2.0.0
77
53
  prerelease: false
54
+ type: :runtime
55
+ - !ruby/object:Gem::Dependency
56
+ name: mixlib-cli
78
57
  version_requirements: !ruby/object:Gem::Requirement
79
58
  requirements:
80
- - - ">="
59
+ - - '>='
81
60
  - !ruby/object:Gem::Version
82
61
  version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: mixlib-cli
85
62
  requirement: !ruby/object:Gem::Requirement
86
63
  requirements:
87
- - - ">="
64
+ - - '>='
88
65
  - !ruby/object:Gem::Version
89
66
  version: '0'
90
- type: :runtime
91
67
  prerelease: false
68
+ type: :runtime
69
+ - !ruby/object:Gem::Dependency
70
+ name: terminal-table
92
71
  version_requirements: !ruby/object:Gem::Requirement
93
72
  requirements:
94
- - - ">="
73
+ - - '>='
95
74
  - !ruby/object:Gem::Version
96
75
  version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: terminal-table
99
76
  requirement: !ruby/object:Gem::Requirement
100
77
  requirements:
101
- - - ">="
78
+ - - '>='
102
79
  - !ruby/object:Gem::Version
103
80
  version: '0'
104
- type: :runtime
105
81
  prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
82
+ type: :runtime
111
83
  description: Ruby core extensions and helper libraries
112
84
  email:
113
85
  - opensource@liquidm.com
@@ -116,10 +88,14 @@ executables:
116
88
  extensions: []
117
89
  extra_rdoc_files: []
118
90
  files:
119
- - ".gitignore"
120
- - ".travis.yml"
121
- - ".yardopts"
91
+ - .gitignore
92
+ - .ruby-version
93
+ - .travis.yml
94
+ - .yardopts
122
95
  - Gemfile
96
+ - Gemfile.lock
97
+ - Jarfile
98
+ - Jarfile.lock
123
99
  - LICENSE
124
100
  - README.md
125
101
  - Rakefile
@@ -133,20 +109,19 @@ files:
133
109
  - lib/liquid/ext/enumerable.rb
134
110
  - lib/liquid/ext/hash.rb
135
111
  - lib/liquid/ext/nil.rb
136
- - lib/liquid/ext/object_space.rb
137
112
  - lib/liquid/ext/ordered_set.rb
138
113
  - lib/liquid/ext/signal.rb
139
114
  - lib/liquid/ext/string.rb
140
115
  - lib/liquid/ext/thread.rb
141
116
  - lib/liquid/from_file.rb
142
- - lib/liquid/gc_stats.rb
143
117
  - lib/liquid/generator.rb
144
118
  - lib/liquid/hash_helper.rb
119
+ - lib/liquid/health_checks.rb
120
+ - lib/liquid/metrics.rb
121
+ - lib/liquid/metrics/logger_reporter.rb
122
+ - lib/liquid/metrics/reporter.rb
145
123
  - lib/liquid/priority_selector.rb
146
- - lib/liquid/proc_stat.rb
147
124
  - lib/liquid/router.rb
148
- - lib/liquid/statistics.rb
149
- - lib/liquid/sysconf.rb
150
125
  - lib/liquid/tasks.rb
151
126
  - lib/liquid/tasks/protoc.rake
152
127
  - lib/liquid/tasks/reek.rake
@@ -174,24 +149,24 @@ homepage: https://github.com/liquidm/ext
174
149
  licenses:
175
150
  - MIT
176
151
  metadata: {}
177
- post_install_message:
152
+ post_install_message:
178
153
  rdoc_options: []
179
154
  require_paths:
180
155
  - lib
181
156
  required_ruby_version: !ruby/object:Gem::Requirement
182
157
  requirements:
183
- - - ">="
158
+ - - '>='
184
159
  - !ruby/object:Gem::Version
185
160
  version: '0'
186
161
  required_rubygems_version: !ruby/object:Gem::Requirement
187
162
  requirements:
188
- - - ">="
163
+ - - '>='
189
164
  - !ruby/object:Gem::Version
190
165
  version: '0'
191
166
  requirements: []
192
- rubyforge_project:
193
- rubygems_version: 2.2.0
194
- signing_key:
167
+ rubyforge_project:
168
+ rubygems_version: 2.2.1
169
+ signing_key:
195
170
  specification_version: 4
196
171
  summary: Ruby core extensions and helper libraries
197
172
  test_files:
@@ -199,4 +174,4 @@ test_files:
199
174
  - spec/lib/liquid/router_spec.rb
200
175
  - spec/lib/liquid/weighted_selector_spec.rb
201
176
  - spec/spec_helper.rb
202
- has_rdoc:
177
+ has_rdoc:
@@ -1,49 +0,0 @@
1
- module Memory
2
- WORD_SIZE = 8
3
- OBJ_SIZE = 40 # some are smaller
4
- OBJ_OVERHEAD = WORD_SIZE + OBJ_SIZE
5
-
6
- def self.size(obj)
7
- return WORD_SIZE if obj.is_a?(Fixnum)
8
-
9
- case obj
10
- when String
11
- obj.size
12
- when Array
13
- obj.size * WORD_SIZE
14
- when Hash
15
- obj.size * WORD_SIZE * 2
16
- #when Enumerable
17
- # result = 0
18
- # obj.each do |ref|
19
- # result += WORD_SIZE
20
- # end
21
- # result
22
- else
23
- 0
24
- end + OBJ_OVERHEAD
25
- rescue => e
26
- puts "failed to get object size for #{obj.inspect}: #{e}"
27
- return OBJ_OVERHEAD
28
- end
29
- end
30
-
31
- module ObjectSpace
32
- def self.memory_stats(*args)
33
- stats = {}
34
-
35
- self.each_object do |obj|
36
- stats[obj.class] ||= []
37
- stats[obj.class] << Memory.size(obj)
38
- end
39
-
40
- stats.map do |cls, sizes|
41
- cnt = sizes.length
42
- sum = sizes.reduce(:+)
43
- avg = sum / cnt
44
- [cls, [cnt, avg, sum]]
45
- end.sort_by do |cls, sizes|
46
- sizes[2]
47
- end.reverse
48
- end
49
- end
@@ -1,68 +0,0 @@
1
- # encoding: utf-8
2
- require 'metriks'
3
- require 'singleton'
4
-
5
- class GCStats
6
- include Singleton
7
-
8
- # RUBY 1.9.X-Implementation
9
- module Yarv
10
- def enable
11
- GC::Profiler.enable
12
- end
13
-
14
- def clear
15
- GC::Profiler.clear
16
- end
17
-
18
- def gather
19
- count_collections
20
- count_allocations
21
- count_objects
22
- Metriks.timer('gc_stats.total_time').update(GC::Profiler.total_time)
23
- end
24
-
25
- def count_collections
26
- Metriks.histogram('gc_stats.collections').update(GC.count)
27
- end
28
-
29
- def count_allocations
30
- allocated_size = GC.respond_to?(:malloc_allocated_size) ? GC.malloc_allocated_size / 1000.0 : 0
31
- Metriks.histogram('gc_stats.allocated').update(allocated_size)
32
- end
33
-
34
- def count_objects
35
- objects = ObjectSpace.count_objects
36
- objects = objects[:TOTAL] - objects[:FREE]
37
- Metriks.histogram('gc_stats.objects').update(objects)
38
- end
39
- end
40
-
41
- if RUBY_ENGINE == 'ruby' and RUBY_VERSION =~ /^1\.9/
42
- extend Yarv
43
- end
44
-
45
- def self.available?
46
- respond_to?(:gather)
47
- end
48
-
49
- def self.start!
50
- if available?
51
- enable
52
- $log.info("gc:stats", enabled: true)
53
-
54
- EventMachine.next_tick do
55
- EventMachine::PeriodicTimer.new(60*60) do
56
- GC.start
57
- end
58
-
59
- EventMachine::PeriodicTimer.new(60) do
60
- gather
61
- clear
62
- end
63
- end
64
- else
65
- $log.info("gc:stats", enabled: false)
66
- end
67
- end
68
- end
@@ -1,56 +0,0 @@
1
- require 'liquid/sysconf'
2
-
3
- ProcStat = Struct.new(
4
- :ppid,
5
- :pgrp,
6
- :session,
7
- :tty_nr,
8
- :tpgid,
9
- :flags,
10
- :minflt,
11
- :cminflt,
12
- :majflt,
13
- :cmajflt,
14
- :utime,
15
- :stime,
16
- :cutime,
17
- :cstime,
18
- :priority,
19
- :nice,
20
- :num_threads,
21
- :itrealvalue,
22
- :starttime,
23
- :vsize,
24
- :rss,
25
- :rsslim,
26
- :startcode,
27
- :endcode,
28
- :startstack,
29
- :kstkesp,
30
- :kstkeip,
31
- :signal,
32
- :blocked,
33
- :sigignore,
34
- :sigcatch,
35
- :wchan,
36
- :nswap,
37
- :cnswap,
38
- :exit_signal,
39
- :processor,
40
- :rt_priority,
41
- :policy,
42
- :delayacct_blkio_ticks,
43
- :guest_time,
44
- :cguest_time
45
- )
46
-
47
- class ProcStat
48
- def self.read
49
- stat = File.read("/proc/self/stat").chomp.split
50
- new(*stat[3..40].map(&:to_i))
51
- end
52
-
53
- def pagesize
54
- Sysconf.sysconf(:page_size)
55
- end
56
- end
@@ -1,11 +0,0 @@
1
- require 'singleton'
2
- require 'metriks'
3
- require 'metriks/reporter/logger'
4
-
5
- class Statistics
6
- include Singleton
7
-
8
- def initialize
9
- Metriks::Reporter::Logger.new(:logger => $log, :interval => 300).start
10
- end
11
- end
@@ -1,25 +0,0 @@
1
- require 'ffi'
2
- require 'ffi/tools/const_generator'
3
-
4
- module Sysconf
5
- extend FFI::Library
6
- ffi_lib ["c"]
7
-
8
- fcg = FFI::ConstGenerator.new do |gen|
9
- gen.include 'unistd.h'
10
-
11
- %w[
12
- _SC_PAGE_SIZE
13
- _SC_VERSION
14
- ].each do |const|
15
- ruby_name = const.sub(/^_SC_/, '').downcase.to_sym
16
- gen.const(const, "%d", nil, ruby_name, &:to_i)
17
- end
18
- end
19
-
20
- CONF = enum(*fcg.constants.map{|_, const|
21
- [const.ruby_name, const.converted_value]
22
- }.flatten)
23
-
24
- attach_function :sysconf, [CONF], :long
25
- end