rack-mini-profiler 0.10.6 → 0.10.7

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
  SHA1:
3
- metadata.gz: b2d3cb66046f8ae5f6a4c61b944374e4176db06c
4
- data.tar.gz: be9fd719a26021fed90ec17851cddf5b510aed0c
3
+ metadata.gz: 00a128037529807d7766b5879fbe52bb08e166b4
4
+ data.tar.gz: 0b50933b899ed619bea7c18e08f8448795d4634d
5
5
  SHA512:
6
- metadata.gz: 728b47de4b3ed3694646d449e8b9722d86a7485b49fb24a360721575c4e1a7ded56ddf2c5ba1d830ae297f4e2c8e87a17f4b3f260b9b05c30438e2f14d9c1df8
7
- data.tar.gz: 26e3da128c7f2850f766af2aa1bfbdf6378f8663dde418e8245af070c0915a3eba6d9a3b68c8bdee70215388016fcab3dd76b040f21cf29877b99592eb67d275
6
+ metadata.gz: 7a18aa291f92f0ca6f33f56285eaca6dccfd07eb02b33470a6af05af23fb3f941c72588d0c35d4342fd2c34567c74e0f301de01d82be54b4c19d2433c7c2ccf7
7
+ data.tar.gz: d7c07474c0bdb2df7e76129d0cc604f2622974a1080e3a41bdcc70b6556408fcb16ae7f31ab0dd46c32354ffce52eb53c30947cb0cd9d29a88c88394dce907ea
@@ -1,5 +1,10 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.10.7 2017-11-24
4
+
5
+ - [FEATURE] Replace Time.now with Process.clock_gettime(Process::CLOCK_MONOTONIC)
6
+ - [FIX] Error with webrick and empty cache control
7
+
3
8
  ## 0.10.6 2017-10-30
4
9
 
5
10
  - [FEATURE] Support for vertical positions (top/bottom)
data/README.md CHANGED
@@ -8,12 +8,9 @@ Middleware that displays speed badge for every html page. Designed to work both
8
8
 
9
9
  Well, not exactly mega urgent, but nice to see you are reading this.
10
10
 
11
- There are 2 very simple changes I would like to see ASAP
11
+ There is one very simple change I would like to see ASAP: I would like to see `# frozen_string_literal: true` on every file we ship
12
12
 
13
- 1. Stop using Time.now EVERYWHERE in rack-mini-profiler and replace with `Process.clock_gettime(Process::CLOCK_MONOTONIC)`
14
- 2. I would like to see `# frozen_string_literal: true` on every file we ship
15
-
16
- If you pick up either of these, be sure to amend the README in your PR AND add a Changelog.
13
+ If you pick up this task, be sure to amend the README in your PR AND add a Changelog.
17
14
 
18
15
  #### Features
19
16
 
@@ -42,7 +42,7 @@ module Rack
42
42
  if (MiniProfiler.config.authorization_mode == :whitelist && !MiniProfiler.request_authorized?)
43
43
  # this is non-obvious, don't kill the profiling cookie on errors or short requests
44
44
  # this ensures that stuff that never reaches the rails stack does not kill profiling
45
- if status.to_i >= 200 && status.to_i < 300 && ((Time.now - @start) > 0.1)
45
+ if status.to_i >= 200 && status.to_i < 300 && ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - @start) > 0.1)
46
46
  discard_cookie!(headers)
47
47
  end
48
48
  else
@@ -149,7 +149,7 @@ module Rack
149
149
 
150
150
  def call(env)
151
151
 
152
- start = Time.now
152
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
153
153
  client_settings = ClientSettings.new(env, @storage, start)
154
154
  MiniProfiler.deauthorize_request if @config.authorization_mode == :whitelist
155
155
 
@@ -325,7 +325,7 @@ module Rack
325
325
 
326
326
  page_struct = current.page_struct
327
327
  page_struct[:user] = user(env)
328
- page_struct[:root].record_time((Time.now - start) * 1000)
328
+ page_struct[:root].record_time((Process.clock_gettime(Process::CLOCK_MONOTONIC) - start) * 1000)
329
329
 
330
330
  if flamegraph
331
331
  body.close if body.respond_to? :close
@@ -366,7 +366,7 @@ module Rack
366
366
  headers.delete('Date')
367
367
  end
368
368
 
369
- headers['X-MiniProfiler-Original-Cache-Control'] = headers['Cache-Control']
369
+ headers['X-MiniProfiler-Original-Cache-Control'] = headers['Cache-Control'] unless headers['Cache-Control'].nil?
370
370
  headers['Cache-Control'] = "#{"no-store, " if config.disable_caching}must-revalidate, private, max-age=0"
371
371
 
372
372
  # inject header
@@ -89,11 +89,11 @@ module Rack
89
89
  parent_timer = Rack::MiniProfiler.current.current_timer
90
90
 
91
91
  if type == :counter
92
- start = Time.now
92
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
93
93
  begin
94
94
  self.send without_profiling, *args, &orig
95
95
  ensure
96
- duration_ms = (Time.now - start).to_f * 1000
96
+ duration_ms = (Process.clock_gettime(Process::CLOCK_MONOTONIC) - start).to_f * 1000
97
97
  parent_timer.add_custom(name, duration_ms, Rack::MiniProfiler.current.page_struct )
98
98
  end
99
99
  else
@@ -131,9 +131,9 @@ module Rack
131
131
  def counter(type, duration_ms=nil)
132
132
  result = nil
133
133
  if block_given?
134
- start = Time.now
134
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
135
135
  result = yield
136
- duration_ms = (Time.now - start).to_f * 1000
136
+ duration_ms = (Process.clock_gettime(Process::CLOCK_MONOTONIC) - start).to_f * 1000
137
137
  end
138
138
  return result if current.nil? || !request_authorized?
139
139
  current.current_timer.add_custom(type, duration_ms, current.page_struct)
@@ -139,10 +139,10 @@ module Rack
139
139
  @auth_token_lock.synchronize {
140
140
  token1, token2, cycle_at = @auth_token_cache[""]
141
141
 
142
- unless cycle_at && (Time === cycle_at) && (cycle_at > Time.now)
142
+ unless cycle_at && (Float === cycle_at) && (cycle_at > Process.clock_gettime(Process::CLOCK_MONOTONIC))
143
143
  token2 = token1
144
144
  token1 = SecureRandom.hex
145
- cycle_at = Time.now + Rack::MiniProfiler::AbstractStore::MAX_TOKEN_AGE
145
+ cycle_at = Process.clock_gettime(Process::CLOCK_MONOTONIC) + Rack::MiniProfiler::AbstractStore::MAX_TOKEN_AGE
146
146
  end
147
147
 
148
148
  @auth_token_cache[""] = [token1, token2, cycle_at]
@@ -67,7 +67,7 @@ module Rack
67
67
  key1 = nil unless key1 && key1.length == 32
68
68
  key2 = nil unless key2 && key2.length == 32
69
69
 
70
- if key1 && cycle_at && (cycle_at > Time.now)
70
+ if key1 && cycle_at && (cycle_at > Process.clock_gettime(Process::CLOCK_MONOTONIC))
71
71
  return [key1,key2].compact
72
72
  end
73
73
  end
@@ -77,7 +77,7 @@ module Rack
77
77
  # cycle keys
78
78
  key2 = key1
79
79
  key1 = SecureRandom.hex
80
- cycle_at = Time.now + timeout
80
+ cycle_at = Process.clock_gettime(Process::CLOCK_MONOTONIC) + timeout
81
81
 
82
82
  @client.set("#{@prefix}-tokens", Marshal::dump([key1, key2, cycle_at]))
83
83
 
@@ -70,7 +70,7 @@ module Rack
70
70
  cleanup_cycle = args.fetch(:cleanup_cycle) { CLEANUP_CYCLE }
71
71
  t = CacheCleanupThread.new(cleanup_interval, cleanup_cycle, self) do |t|
72
72
  until Thread.current[:should_exit] do
73
- self.sleepy_run
73
+ CacheCleanupThread.current.sleepy_run
74
74
  end
75
75
  end
76
76
  at_exit { t[:should_exit] = true }
@@ -115,7 +115,7 @@ module Rack
115
115
  end
116
116
 
117
117
  def cleanup_cache
118
- expire_older_than = ((Time.now.to_f - @expires_in_seconds) * 1000).to_i
118
+ expire_older_than = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - @expires_in_seconds) * 1000).to_i
119
119
  @timer_struct_lock.synchronize {
120
120
  @timer_struct_cache.delete_if { |k, v| v[:started] < expire_older_than }
121
121
  }
@@ -124,10 +124,10 @@ module Rack
124
124
  def allowed_tokens
125
125
  @token_lock.synchronize do
126
126
 
127
- unless @cycle_at && (@cycle_at > Time.now)
127
+ unless @cycle_at && (@cycle_at > Process.clock_gettime(Process::CLOCK_MONOTONIC))
128
128
  @token2 = @token1
129
129
  @token1 = SecureRandom.hex
130
- @cycle_at = Time.now + Rack::MiniProfiler::AbstractStore::MAX_TOKEN_AGE
130
+ @cycle_at = Process.clock_gettime(Process::CLOCK_MONOTONIC) + Rack::MiniProfiler::AbstractStore::MAX_TOKEN_AGE
131
131
  end
132
132
 
133
133
  [@token1, @token2].compact
@@ -32,7 +32,7 @@ module Rack
32
32
  def set_unviewed(user, id)
33
33
  key = user_key(user)
34
34
  if redis.exists(prefixed_id(id))
35
- expire_at = Time.now.to_i + redis.ttl(prefixed_id(id))
35
+ expire_at = Process.clock_gettime(Process::CLOCK_MONOTONIC).to_i + redis.ttl(prefixed_id(id))
36
36
  redis.zadd(key, expire_at, id)
37
37
  end
38
38
  redis.expire(key, @expires_in_seconds)
@@ -43,7 +43,7 @@ module Rack
43
43
  redis.del(key)
44
44
  ids.each do |id|
45
45
  if redis.exists(prefixed_id(id))
46
- expire_at = Time.now.to_i + redis.ttl(prefixed_id(id))
46
+ expire_at = Process.clock_gettime(Process::CLOCK_MONOTONIC).to_i + redis.ttl(prefixed_id(id))
47
47
  redis.zadd(key, expire_at, id)
48
48
  end
49
49
  end
@@ -57,7 +57,7 @@ module Rack
57
57
  # Remove expired ids from the unviewed sorted set and return the remaining ids
58
58
  def get_unviewed_ids(user)
59
59
  key = user_key(user)
60
- redis.zremrangebyscore(key, '-inf', Time.now.to_i)
60
+ redis.zremrangebyscore(key, '-inf', Process.clock_gettime(Process::CLOCK_MONOTONIC).to_i)
61
61
  redis.zrevrangebyscore(key, '+inf', '-inf')
62
62
  end
63
63
 
@@ -8,7 +8,7 @@ module Rack
8
8
  @parent = parent
9
9
  @page = page
10
10
  @type = type
11
- start_millis = ((Time.now.to_f * 1000).to_i - page[:started]) - duration_ms
11
+ start_millis = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) * 1000).to_i - page[:started]) - duration_ms
12
12
  super(
13
13
  :type => type,
14
14
  :start_milliseconds => start_millis,
@@ -11,7 +11,7 @@ module Rack
11
11
  def initialize(env)
12
12
  timer_id = MiniProfiler.generate_id
13
13
  page_name = env['PATH_INFO']
14
- started_at = (Time.now.to_f * 1000).to_i
14
+ started_at = (Process.clock_gettime(Process::CLOCK_MONOTONIC) * 1000).to_i
15
15
  machine_name = env['SERVER_NAME']
16
16
  super(
17
17
  :id => timer_id,
@@ -12,7 +12,7 @@ module Rack
12
12
  attr_accessor :children_duration
13
13
 
14
14
  def initialize(name, page, parent)
15
- start_millis = (Time.now.to_f * 1000).to_i - page[:started]
15
+ start_millis = (Process.clock_gettime(Process::CLOCK_MONOTONIC) * 1000).to_i - page[:started]
16
16
  depth = parent ? parent.depth + 1 : 0
17
17
  super(
18
18
  :id => MiniProfiler.generate_id,
@@ -39,7 +39,7 @@ module Rack
39
39
  :custom_timings => {}
40
40
  )
41
41
  @children_duration = 0
42
- @start = Time.now
42
+ @start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
43
43
  @parent = parent
44
44
  @page = page
45
45
  end
@@ -117,7 +117,7 @@ module Rack
117
117
  end
118
118
 
119
119
  def record_time(milliseconds = nil)
120
- milliseconds ||= (Time.now - @start) * 1000
120
+ milliseconds ||= (Process.clock_gettime(Process::CLOCK_MONOTONIC) - @start) * 1000
121
121
  self[:duration_milliseconds] = milliseconds
122
122
  self[:is_trivial] = true if milliseconds < self[:trivial_duration_threshold_milliseconds]
123
123
  self[:duration_without_children_milliseconds] = milliseconds - @children_duration
@@ -32,7 +32,7 @@ module Rack
32
32
 
33
33
  @parent = parent
34
34
  @page = page
35
- start_millis = ((Time.now.to_f * 1000).to_i - page[:started]) - duration_ms
35
+ start_millis = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) * 1000).to_i - page[:started]) - duration_ms
36
36
  super(
37
37
  :execute_type => 3, # TODO
38
38
  :formatted_command_string => query,
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  class MiniProfiler
3
- VERSION = '0.10.6'
3
+ VERSION = '0.10.7'
4
4
  end
5
5
  end
@@ -28,7 +28,7 @@ module Rack
28
28
  return log_without_miniprofiler(*args, &block) unless SqlPatches.should_measure?
29
29
 
30
30
  sql, name, binds = args
31
- start = Time.now
31
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
32
32
  rval = log_without_miniprofiler(*args, &block)
33
33
 
34
34
  # Don't log schema queries if the option is set
@@ -5,7 +5,7 @@ class Mysql2::Result
5
5
  def each(*args, &blk)
6
6
  return each_without_profiling(*args, &blk) unless defined?(@miniprofiler_sql_id)
7
7
 
8
- start = Time.now
8
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
9
9
  result = each_without_profiling(*args,&blk)
10
10
  elapsed_time = SqlPatches.elapsed_time(start)
11
11
 
@@ -3,7 +3,7 @@ class Neo4j::Core::Query
3
3
 
4
4
  def response
5
5
  return @response if @response
6
- start = Time.now
6
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
7
7
  rval = response_without_miniprofiler
8
8
  elapsed_time = SqlPatches.elapsed_time(start)
9
9
  Rack::MiniProfiler.record_sql(to_cypher, elapsed_time)
@@ -3,7 +3,7 @@ class ActiveRecord::Result
3
3
  def each(&blk)
4
4
  return each_without_profiling(&blk) unless defined?(@miniprofiler_sql_id)
5
5
 
6
- start = Time.now
6
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
7
7
  result = each_without_profiling(&blk)
8
8
  elapsed_time = SqlPatches.elapsed_time(start)
9
9
  @miniprofiler_sql_id.report_reader_duration(elapsed_time)
@@ -45,7 +45,7 @@ class ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter
45
45
  def mp_profile_sql(sql, name, &blk)
46
46
  return yield unless mp_should_measure?(name)
47
47
 
48
- start = Time.now
48
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
49
49
  result = yield
50
50
  elapsed_time = SqlPatches.elapsed_time(start)
51
51
  record = ::Rack::MiniProfiler.record_sql(sql, elapsed_time)
@@ -18,7 +18,7 @@ class PG::Result
18
18
  end
19
19
 
20
20
  def mp_report_sql(&block)
21
- start = Time.now
21
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
22
22
  result = yield
23
23
  elapsed_time = SqlPatches.elapsed_time(start)
24
24
  @miniprofiler_sql_id.report_reader_duration(elapsed_time)
@@ -49,7 +49,7 @@ class PG::Connection
49
49
  def exec(*args,&blk)
50
50
  return exec_without_profiling(*args,&blk) unless SqlPatches.should_measure?
51
51
 
52
- start = Time.now
52
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
53
53
  result = exec_without_profiling(*args,&blk)
54
54
  elapsed_time = SqlPatches.elapsed_time(start)
55
55
  record = ::Rack::MiniProfiler.record_sql(args[0], elapsed_time)
@@ -61,7 +61,7 @@ class PG::Connection
61
61
  def exec_prepared(*args,&blk)
62
62
  return exec_prepared_without_profiling(*args,&blk) unless SqlPatches.should_measure?
63
63
 
64
- start = Time.now
64
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
65
65
  result = exec_prepared_without_profiling(*args,&blk)
66
66
  elapsed_time = SqlPatches.elapsed_time(start)
67
67
  mapped = args[0]
@@ -75,7 +75,7 @@ class PG::Connection
75
75
  def send_query_prepared(*args,&blk)
76
76
  return send_query_prepared_without_profiling(*args,&blk) unless SqlPatches.should_measure?
77
77
 
78
- start = Time.now
78
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
79
79
  result = send_query_prepared_without_profiling(*args,&blk)
80
80
  elapsed_time = SqlPatches.elapsed_time(start)
81
81
  mapped = args[0]
@@ -89,7 +89,7 @@ class PG::Connection
89
89
  def async_exec(*args,&blk)
90
90
  return async_exec_without_profiling(*args,&blk) unless SqlPatches.should_measure?
91
91
 
92
- start = Time.now
92
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
93
93
  result = exec_without_profiling(*args,&blk)
94
94
  elapsed_time = SqlPatches.elapsed_time(start)
95
95
  record = ::Rack::MiniProfiler.record_sql(args[0], elapsed_time)
@@ -27,7 +27,7 @@ class Plucky::Query
27
27
  def profile_database_operation(method, message, *args, &blk)
28
28
  return self.send("#{method.id2name}_without_profiling", *args, &blk) unless SqlPatches.should_measure?
29
29
 
30
- start = Time.now
30
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
31
31
  result = self.send("#{method.id2name}_without_profiling", *args, &blk)
32
32
  elapsed_time = SqlPatches.elapsed_time(start)
33
33
 
@@ -5,7 +5,7 @@ class Riak::Multiget
5
5
  def get_all(client, fetch_list)
6
6
  return get_all_without_profiling(client, fetch_list) unless SqlPatches.should_measure?
7
7
 
8
- start = Time.now
8
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
9
9
  result = get_all_without_profiling(client, fetch_list)
10
10
  elapsed_time = SqlPatches.elapsed_time(start)
11
11
  record = ::Rack::MiniProfiler.record_sql("get_all size=#{fetch_list.size}", elapsed_time)
@@ -92,7 +92,7 @@ class Riak::Client
92
92
  def profile(request, &blk)
93
93
  return yield unless SqlPatches.should_measure?
94
94
 
95
- start = Time.now
95
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
96
96
  result = yield
97
97
  elapsed_time = SqlPatches.elapsed_time(start)
98
98
  record = ::Rack::MiniProfiler.record_sql(request, elapsed_time)
@@ -3,7 +3,7 @@ class RSolr::Connection
3
3
  def execute_with_profiling(client, request_context)
4
4
  return execute_without_profiling(client, request_context) unless SqlPatches.should_measure?
5
5
 
6
- start = Time.now
6
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
7
7
  result = execute_without_profiling(client, request_context)
8
8
  elapsed_time = SqlPatches.elapsed_time(start)
9
9
 
@@ -6,7 +6,7 @@ class SqlPatches
6
6
  end
7
7
 
8
8
  def self.record_sql(statement, parameters = nil, &block)
9
- start = Time.now
9
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
10
10
  result = yield
11
11
  record = ::Rack::MiniProfiler.record_sql(statement, elapsed_time(start), parameters)
12
12
  return result, record
@@ -18,7 +18,7 @@ class SqlPatches
18
18
  end
19
19
 
20
20
  def self.elapsed_time(start_time)
21
- ((Time.now - start_time).to_f * 1000).round(1)
21
+ ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time).to_f * 1000).round(1)
22
22
  end
23
23
 
24
24
  def self.sql_patches
@@ -21,11 +21,16 @@ Gem::Specification.new do |s|
21
21
  s.add_runtime_dependency 'rack', '>= 1.2.0'
22
22
  s.required_ruby_version = '>= 1.9.3'
23
23
 
24
+ s.metadata = {
25
+ 'source_code_uri' => 'https://github.com/MiniProfiler/rack-mini-profiler',
26
+ 'changelog_uri' => 'https://github.com/MiniProfiler/rack-mini-profiler/blob/master/CHANGELOG.md'
27
+ }
28
+
24
29
  s.add_development_dependency 'rake', '< 11'
25
30
  s.add_development_dependency 'rack-test'
26
31
  s.add_development_dependency 'activerecord', '~> 3.0'
27
32
  s.add_development_dependency 'dalli'
28
- s.add_development_dependency 'rspec', '~> 2.14.1'
33
+ s.add_development_dependency 'rspec', '~> 3.6.0'
29
34
  s.add_development_dependency 'redis'
30
35
  s.add_development_dependency 'sass'
31
36
  s.add_development_dependency 'flamegraph'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-mini-profiler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.6
4
+ version: 0.10.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-10-30 00:00:00.000000000 Z
13
+ date: 2017-11-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rack
@@ -88,14 +88,14 @@ dependencies:
88
88
  requirements:
89
89
  - - "~>"
90
90
  - !ruby/object:Gem::Version
91
- version: 2.14.1
91
+ version: 3.6.0
92
92
  type: :development
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
96
  - - "~>"
97
97
  - !ruby/object:Gem::Version
98
- version: 2.14.1
98
+ version: 3.6.0
99
99
  - !ruby/object:Gem::Dependency
100
100
  name: redis
101
101
  requirement: !ruby/object:Gem::Requirement
@@ -202,7 +202,9 @@ files:
202
202
  homepage: http://miniprofiler.com
203
203
  licenses:
204
204
  - MIT
205
- metadata: {}
205
+ metadata:
206
+ source_code_uri: https://github.com/MiniProfiler/rack-mini-profiler
207
+ changelog_uri: https://github.com/MiniProfiler/rack-mini-profiler/blob/master/CHANGELOG.md
206
208
  post_install_message:
207
209
  rdoc_options: []
208
210
  require_paths: