clicktocall-daemons_common 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 48cec48927e0ab0442d811c3e5308ce76635fd86
4
+ data.tar.gz: e740cd094c03dec65078283caf01062e3731c1ce
5
+ SHA512:
6
+ metadata.gz: ca2a33be61170d9f1be6f0ef77f8603554c8fc1570797625a496e96338361328d3af7d8dad1ea7e385fe454b02e750dface0dbf1aaf1acf5667325e64c92a4d8
7
+ data.tar.gz: 8517a7d3fc069da23cd0e8af31d13fbff787a85cbf0a10814dd84f5bc40db4d4d8431a8ed13796bc9fca4a2f1e1bfb82bf05976453d4935c94d3628c4ae4fc86
@@ -0,0 +1,24 @@
1
+ ## (12-07-2011) Claudio Alvarez (claudio at medularis.com)
2
+ * redis >= 2.2.0 is now allowed.
3
+
4
+ ## (23-05-2011) Claudio Alvarez (claudio at medularis.com)
5
+ * Version 0.0.4.
6
+ * Added functions for facilitating Ruby 1.9/1.8 compatibility.
7
+ * Added functions for facilitating debugging.
8
+
9
+ ## (17-05-2011) Claudio Alvarez (claudio at medularis.com)
10
+ * Changed required version of resque to 1.16.1.
11
+ * Corrected gem dependency errors.
12
+ * Increased version number to 0.0.3.
13
+ * Changed required version of json to 1.5.1.
14
+
15
+ ## (02-05-2011) Claudio Alvarez (claudio at medularis.com)
16
+ * Updated dependencies in gemspec.
17
+
18
+ ## (02-05-2011) Claudio Alvarez (claudio at medularis.com)
19
+ * Added constant `MedularisDaemonsCommon::ESL_EVENT_VARIABLE_PREFIX`.
20
+ * Added ThreadPool class to the `MedularisDaemonsCommon` module.
21
+
22
+ ## (27-04-2011) Claudio Alvarez (claudio at medularis.com)
23
+ * Adding `HISTORY.md` file to the project.
24
+ * Adding `MedularisDaemonsCommon::FSConnection`, which encapsulates connections to FreeSWITCH's ESL.
Binary file
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+
3
+ rm ../*.gem
4
+ gem build medularis-daemons_common.gemspec
5
+ mv *.gem ../
@@ -0,0 +1,27 @@
1
+ # SCM_ID: $Id$
2
+ # encoding: UTF-8
3
+
4
+ def this_method
5
+ method = caller[0]
6
+ pieces = method.split('/')
7
+
8
+ if (pieces.length >= 1)
9
+ method = pieces[pieces.length - 1]
10
+ end
11
+
12
+ return "[#{method}]"
13
+ end
14
+
15
+ def this_method_w_timestamp
16
+ method = caller[0]
17
+ pieces = method.split('/')
18
+
19
+ if (pieces.length >= 1)
20
+ method = pieces[pieces.length - 1]
21
+ end
22
+
23
+ time = Time.now
24
+ strtime = time.strftime("%H:%M:%S")
25
+
26
+ return "[#{strtime} #{method}]"
27
+ end
@@ -0,0 +1,54 @@
1
+ # SCM_ID: $Id$
2
+ # encoding: UTF-8
3
+ module MedularisDaemonsCommon
4
+ require('ruby_compat')
5
+ require(File.join(File.expand_path('../../bin/freeSWITCH', __FILE__),'ESL'))
6
+
7
+ # Singleton for FS event socket access
8
+ class FSConnection
9
+
10
+ def self.instance(host = 'localhost', port = '8021', password = 'ClueCon')
11
+
12
+ @@singleton__mutex__.synchronize {
13
+ if @@singleton__instance__
14
+ return @@singleton__instance__
15
+ end
16
+
17
+ @@singleton__instance__ = FSConnection.new(host, port, password)
18
+ }
19
+
20
+ return @@singleton__instance__
21
+ end
22
+
23
+ def connection
24
+ if (@connection.nil?)
25
+ ruby_18 { @connection = ESL::ESLconnection.new(@host, @port, @password) } ||
26
+ ruby_19 { @connection = ESL::ESLconnection.new(@host.force_encoding("US-ASCII"), @port.force_encoding("US-ASCII"), @password.force_encoding("US-ASCII")) }
27
+
28
+ return @connection
29
+ else
30
+ return @connection
31
+ end
32
+ end
33
+
34
+ private
35
+ # private_class_method :new
36
+
37
+ def initialize(host, port, password)
38
+ @host = host
39
+ @port = port
40
+ @password = password
41
+ end
42
+
43
+ @host
44
+ @port
45
+ @password
46
+ @connection = nil
47
+
48
+ @@singleton__instance__ = nil
49
+ @@singleton__mutex__ = Mutex.new
50
+ end
51
+
52
+ FSCONNECTION = FSConnection.instance.connection
53
+ end
54
+
@@ -0,0 +1,9 @@
1
+ # SCM_ID: $Id:$
2
+ require('debug_utils')
3
+ require('fs_connection')
4
+ require('threadpool')
5
+ require('ruby_compat')
6
+
7
+ module MedularisDaemonsCommon
8
+ ESL_EVENT_VARIABLE_PREFIX = 'variable_'
9
+ end
@@ -0,0 +1,5 @@
1
+ # SCM_ID: $Id: $
2
+ # encoding: UTF-8
3
+ module MedularisDaemonsCommon
4
+ Version = '0.0.5'
5
+ end
@@ -0,0 +1,20 @@
1
+ # SCM_ID: $Id$
2
+ # encoding: UTF-8
3
+
4
+ if RUBY_VERSION < "1.9"
5
+ def ruby_18
6
+ yield
7
+ end
8
+
9
+ def ruby_19
10
+ false
11
+ end
12
+ else
13
+ def ruby_18
14
+ false
15
+ end
16
+
17
+ def ruby_19
18
+ yield
19
+ end
20
+ end
@@ -0,0 +1,123 @@
1
+ # SCM_ID: $Id$
2
+ module MedularisDaemonsCommon
3
+ require 'thread'
4
+
5
+ # Work item to be executed in thread pool
6
+ class ThreadPoolJob
7
+ attr_accessor :handler
8
+ attr_accessor :params
9
+
10
+ def initialize(*params, &block)
11
+ @params = params
12
+ @handler = block
13
+ end
14
+ end
15
+
16
+
17
+ # Launches a specified number of threads on instantiation,
18
+ # assigning work to them as it arrives
19
+ class ThreadPool
20
+
21
+ # Encapsulate each thread pool thread in object
22
+ class ThreadPoolJobRunner
23
+ attr_accessor :time_started
24
+
25
+ def initialize(thread_pool)
26
+ @thread_pool = thread_pool
27
+ @timeout_lock = Mutex.new
28
+ @thread_lock = Mutex.new
29
+ end
30
+
31
+ def run
32
+ @thread_lock.synchronize {
33
+ @thread = Thread.new {
34
+ until @thread_pool.terminate
35
+ @timeout_lock.synchronize { @time_started = nil }
36
+ work = @thread_pool.next_job
37
+ @timeout_lock.synchronize { @time_started = Time.now }
38
+ work.handler.call *work.params unless work.nil?
39
+ end
40
+ }
41
+ }
42
+ end
43
+
44
+ def check_timeout(timeout)
45
+ @timeout_lock.synchronize {
46
+ if !@time_started.nil? && Time.now - @time_started > timeout
47
+ stop
48
+ run
49
+ end
50
+ }
51
+ end
52
+
53
+ def stop
54
+ @thread_lock.synchronize {
55
+ if @thread.alive?
56
+ @thread.kill
57
+ @thread.join
58
+ end
59
+ }
60
+ end
61
+ end
62
+
63
+ # Create a thread pool with a specified number of threads
64
+ def initialize(num_threads, args = {})
65
+ @num_threads = num_threads
66
+ @timeout = args[:timeout]
67
+ @job_runners = []
68
+ @job_runners_lock = Mutex.new
69
+ @terminate = false
70
+ @terminate_lock = Mutex.new
71
+
72
+ @work_queue = Queue.new
73
+
74
+ 0.upto(@num_threads) { |i|
75
+ runner = ThreadPoolJobRunner.new(self)
76
+ @job_runners << runner
77
+ runner.run
78
+ }
79
+
80
+ # optional timeout thread
81
+ unless @timeout.nil?
82
+ @timeout_thread = Thread.new {
83
+ until terminate
84
+ sleep @timeout
85
+ @job_runners_lock.synchronize {
86
+ @job_runners.each { |jr|
87
+ jr.check_timeout(@timeout)
88
+ }
89
+ }
90
+ end
91
+ }
92
+ end
93
+ end
94
+
95
+ # terminate reader
96
+ def terminate
97
+ @terminate_lock.synchronize { @terminate }
98
+ end
99
+
100
+ # terminate setter
101
+ def terminate=(val)
102
+ @terminate_lock.synchronize { @terminate = val }
103
+ end
104
+
105
+ # Add work to the pool
106
+ def <<(work)
107
+ @work_queue.push work
108
+ end
109
+
110
+ # Return the next job queued up
111
+ def next_job
112
+ @work_queue.pop
113
+ end
114
+
115
+ # Terminate the thread pool
116
+ def stop
117
+ terminate = true
118
+ @timeout_thread.join unless @timout_thread.nil?
119
+ @work_queue.clear
120
+ @job_runners_lock.synchronize { @job_runners.each { |jr| jr.stop } }
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # SCM_ID: $Id: $
3
+ require File.expand_path("../lib/medularis-daemons_common/version", __FILE__)
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.name = 'clicktocall-daemons_common'
7
+ gem.version = MedularisDaemonsCommon::Version
8
+ gem.date = Date.today.to_s
9
+
10
+ gem.summary = "Common utilities and functionality required by Medularis Click-To-Call Daemons."
11
+ gem.description = "Library contaning common features shared by the Medularis Click-To-Call Daemons, supporting the ClickFono service (http://www.clickfono.com)."
12
+
13
+ gem.authors = ['Medularis']
14
+ gem.email = 'info@medularis.com'
15
+ gem.homepage = 'http://www.medularis.com'
16
+
17
+ gem.add_dependency('rubygems-update', '= 1.4.1')
18
+ gem.add_dependency('rake','>= 0.8.7', '< 10.2.0')
19
+ gem.add_dependency('json', '>= 1.5.1', '< 2.0.0')
20
+ gem.add_dependency('log4r', '>= 1.1.9', '< 1.2.0')
21
+ gem.add_dependency('mysql', '>= 2.8.1', '< 3.0.0')
22
+ gem.add_dependency('redis', '>= 2.2.0', '< 4.0.0')
23
+ gem.add_dependency('resque', '>= 1.16.1', '< 1.25.0')
24
+ gem.add_dependency('resque-scheduler', '<= 2.0.0.d', '< 2.1.0')
25
+ gem.add_dependency('rest-open-uri', '= 1.0.0')
26
+ gem.add_dependency('url', '>= 0.2.0', '< 0.3.0')
27
+ gem.add_dependency('amqp', '>= 0.7.1', '< 0.8.0')
28
+ gem.add_development_dependency('rspec', ">= 2.0.0", "< 3.0.0")
29
+
30
+ # ensure the gem is built out of versioned files1
31
+ # gem.files = Dir['{bin,lib,man,test,spec}/**/*', 'README*', 'LICENSE*'] & `git ls-files -z`.split("\0")
32
+ gem.files = `git ls-files -z`.split("\0")
33
+ end
metadata ADDED
@@ -0,0 +1,281 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: clicktocall-daemons_common
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Medularis
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-02-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rubygems-update
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.4.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.4.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.8.7
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: 10.2.0
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.8.7
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: 10.2.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: json
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 1.5.1
54
+ - - "<"
55
+ - !ruby/object:Gem::Version
56
+ version: 2.0.0
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 1.5.1
64
+ - - "<"
65
+ - !ruby/object:Gem::Version
66
+ version: 2.0.0
67
+ - !ruby/object:Gem::Dependency
68
+ name: log4r
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: 1.1.9
74
+ - - "<"
75
+ - !ruby/object:Gem::Version
76
+ version: 1.2.0
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: 1.1.9
84
+ - - "<"
85
+ - !ruby/object:Gem::Version
86
+ version: 1.2.0
87
+ - !ruby/object:Gem::Dependency
88
+ name: mysql
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: 2.8.1
94
+ - - "<"
95
+ - !ruby/object:Gem::Version
96
+ version: 3.0.0
97
+ type: :runtime
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 2.8.1
104
+ - - "<"
105
+ - !ruby/object:Gem::Version
106
+ version: 3.0.0
107
+ - !ruby/object:Gem::Dependency
108
+ name: redis
109
+ requirement: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: 2.2.0
114
+ - - "<"
115
+ - !ruby/object:Gem::Version
116
+ version: 4.0.0
117
+ type: :runtime
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: 2.2.0
124
+ - - "<"
125
+ - !ruby/object:Gem::Version
126
+ version: 4.0.0
127
+ - !ruby/object:Gem::Dependency
128
+ name: resque
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: 1.16.1
134
+ - - "<"
135
+ - !ruby/object:Gem::Version
136
+ version: 1.25.0
137
+ type: :runtime
138
+ prerelease: false
139
+ version_requirements: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: 1.16.1
144
+ - - "<"
145
+ - !ruby/object:Gem::Version
146
+ version: 1.25.0
147
+ - !ruby/object:Gem::Dependency
148
+ name: resque-scheduler
149
+ requirement: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "<="
152
+ - !ruby/object:Gem::Version
153
+ version: 2.0.0.d
154
+ - - "<"
155
+ - !ruby/object:Gem::Version
156
+ version: 2.1.0
157
+ type: :runtime
158
+ prerelease: false
159
+ version_requirements: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - "<="
162
+ - !ruby/object:Gem::Version
163
+ version: 2.0.0.d
164
+ - - "<"
165
+ - !ruby/object:Gem::Version
166
+ version: 2.1.0
167
+ - !ruby/object:Gem::Dependency
168
+ name: rest-open-uri
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '='
172
+ - !ruby/object:Gem::Version
173
+ version: 1.0.0
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '='
179
+ - !ruby/object:Gem::Version
180
+ version: 1.0.0
181
+ - !ruby/object:Gem::Dependency
182
+ name: url
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: 0.2.0
188
+ - - "<"
189
+ - !ruby/object:Gem::Version
190
+ version: 0.3.0
191
+ type: :runtime
192
+ prerelease: false
193
+ version_requirements: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ version: 0.2.0
198
+ - - "<"
199
+ - !ruby/object:Gem::Version
200
+ version: 0.3.0
201
+ - !ruby/object:Gem::Dependency
202
+ name: amqp
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: 0.7.1
208
+ - - "<"
209
+ - !ruby/object:Gem::Version
210
+ version: 0.8.0
211
+ type: :runtime
212
+ prerelease: false
213
+ version_requirements: !ruby/object:Gem::Requirement
214
+ requirements:
215
+ - - ">="
216
+ - !ruby/object:Gem::Version
217
+ version: 0.7.1
218
+ - - "<"
219
+ - !ruby/object:Gem::Version
220
+ version: 0.8.0
221
+ - !ruby/object:Gem::Dependency
222
+ name: rspec
223
+ requirement: !ruby/object:Gem::Requirement
224
+ requirements:
225
+ - - ">="
226
+ - !ruby/object:Gem::Version
227
+ version: 2.0.0
228
+ - - "<"
229
+ - !ruby/object:Gem::Version
230
+ version: 3.0.0
231
+ type: :development
232
+ prerelease: false
233
+ version_requirements: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - ">="
236
+ - !ruby/object:Gem::Version
237
+ version: 2.0.0
238
+ - - "<"
239
+ - !ruby/object:Gem::Version
240
+ version: 3.0.0
241
+ description: Library contaning common features shared by the Medularis Click-To-Call
242
+ Daemons, supporting the ClickFono service (http://www.clickfono.com).
243
+ email: info@medularis.com
244
+ executables: []
245
+ extensions: []
246
+ extra_rdoc_files: []
247
+ files:
248
+ - HISTORY.md
249
+ - bin/freeSWITCH/ESL.so
250
+ - build.sh
251
+ - lib/debug_utils.rb
252
+ - lib/fs_connection.rb
253
+ - lib/medularis-daemons_common.rb
254
+ - lib/medularis-daemons_common/version.rb
255
+ - lib/ruby_compat.rb
256
+ - lib/threadpool.rb
257
+ - medularis-daemons_common.gemspec
258
+ homepage: http://www.medularis.com
259
+ licenses: []
260
+ metadata: {}
261
+ post_install_message:
262
+ rdoc_options: []
263
+ require_paths:
264
+ - lib
265
+ required_ruby_version: !ruby/object:Gem::Requirement
266
+ requirements:
267
+ - - ">="
268
+ - !ruby/object:Gem::Version
269
+ version: '0'
270
+ required_rubygems_version: !ruby/object:Gem::Requirement
271
+ requirements:
272
+ - - ">="
273
+ - !ruby/object:Gem::Version
274
+ version: '0'
275
+ requirements: []
276
+ rubyforge_project:
277
+ rubygems_version: 2.6.8
278
+ signing_key:
279
+ specification_version: 4
280
+ summary: Common utilities and functionality required by Medularis Click-To-Call Daemons.
281
+ test_files: []