lenz_base 0.0.1
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.
- data/lib/lenz_base.rb +131 -0
- metadata +110 -0
data/lib/lenz_base.rb
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'date'
|
3
|
+
require 'json'
|
4
|
+
require 'bunny'
|
5
|
+
require 'mysql2'
|
6
|
+
require 'logger'
|
7
|
+
|
8
|
+
class LenzBase
|
9
|
+
def initialize()
|
10
|
+
initLogger
|
11
|
+
@sql_clients = {}
|
12
|
+
@mq_sessions = {}
|
13
|
+
@mq_channels = {}
|
14
|
+
end
|
15
|
+
|
16
|
+
def initLogger
|
17
|
+
@logger = Logger.new(STDOUT)
|
18
|
+
@logger.datetime_format="%Y-%m-%d %H:%M:%S"
|
19
|
+
end
|
20
|
+
|
21
|
+
def log(msg)
|
22
|
+
@logger.info(msg)
|
23
|
+
end
|
24
|
+
|
25
|
+
def sleep(duration)
|
26
|
+
log("sleep #{duration}s")
|
27
|
+
Kernel.sleep(duration)
|
28
|
+
end
|
29
|
+
|
30
|
+
def getDBClient(db_info)
|
31
|
+
if(!@sql_clients[db_info])
|
32
|
+
@sql_clients[db_info] = createDBClient(db_info)
|
33
|
+
end
|
34
|
+
return @sql_clients[db_info]
|
35
|
+
end
|
36
|
+
|
37
|
+
def removeDBClient(db_info)
|
38
|
+
if(@sql_clients[db_info])
|
39
|
+
@sql_clients[db_info].close
|
40
|
+
end
|
41
|
+
@sql_clients[db_info] = nil
|
42
|
+
end
|
43
|
+
|
44
|
+
def createDBClient(db_info)
|
45
|
+
begin
|
46
|
+
client = Mysql2::Client.new(db_info)
|
47
|
+
log("DB connected #{db_info}")
|
48
|
+
return client
|
49
|
+
rescue Exception => e
|
50
|
+
log e
|
51
|
+
sleep(5)
|
52
|
+
retry
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def querySql(db_info, query)
|
57
|
+
begin
|
58
|
+
result = getDBClient(db_info).query(query)
|
59
|
+
log("query launched for #{db_info}")
|
60
|
+
return result ? result.entries : nil
|
61
|
+
rescue Exception => e
|
62
|
+
log e
|
63
|
+
removeDBClient(db_info)
|
64
|
+
sleep(5)
|
65
|
+
retry
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def getMQChannel(mq_info)
|
70
|
+
if(!@mq_channels[mq_info] || !@mq_channels[mq_info].active || !@mq_sessions[mq_info].connected?)
|
71
|
+
@mq_channels[mq_info] = openMQChannel(mq_info)
|
72
|
+
end
|
73
|
+
return @mq_channels[mq_info]
|
74
|
+
end
|
75
|
+
|
76
|
+
def openMQChannel(mq_info)
|
77
|
+
begin
|
78
|
+
if(!@mq_sessions[mq_info] || !@mq_sessions[mq_info].connected?)
|
79
|
+
@mq_sessions[mq_info] = Bunny.new(mq_info)
|
80
|
+
@mq_sessions[mq_info].start
|
81
|
+
log("Message Queue connected #{mq_info}")
|
82
|
+
end
|
83
|
+
return @mq_sessions[mq_info].default_channel
|
84
|
+
rescue Exception => e
|
85
|
+
log e
|
86
|
+
sleep(5)
|
87
|
+
retry
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def publishToMQ(mq_info, message, args = {})
|
92
|
+
begin
|
93
|
+
ch = getMQChannel(mq_info)
|
94
|
+
q = ch.queue(mq_info[:name], :durable => true, :arguments=>mq_info[:args])
|
95
|
+
q.publish(message, args)
|
96
|
+
log("message published to #{mq_info}")
|
97
|
+
rescue Exception => e
|
98
|
+
log e
|
99
|
+
sleep(5)
|
100
|
+
retry
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def makeProcessResult(user_id, mq_info, data = nil, flag = '')
|
105
|
+
return {:user_id=>user_id, :queue=>mq_info[:name], :data=>data, :flag=>flag}.to_json
|
106
|
+
end
|
107
|
+
|
108
|
+
def subscribeMQ(mq_info)
|
109
|
+
log("start subscribe #{mq_info}")
|
110
|
+
begin
|
111
|
+
ch = getMQChannel(mq_info)
|
112
|
+
q = ch.queue(mq_info[:name], mq_info[:options])
|
113
|
+
q.subscribe(:block => true) do |delivery_info, properties, body|
|
114
|
+
begin
|
115
|
+
log(delivery_info)
|
116
|
+
processMQMessage(mq_info, delivery_info, properties, body)
|
117
|
+
log('message consumed')
|
118
|
+
rescue Exception => e
|
119
|
+
log(e)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
rescue Exception=>e
|
123
|
+
log(e)
|
124
|
+
sleep(5)
|
125
|
+
retry
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def processMQMessage(mq_info, delivery_info, properties, body)
|
130
|
+
end
|
131
|
+
end
|
metadata
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lenz_base
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Seok Heo
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-08-27 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: json
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: bunny
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 1.3.1
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.3.1
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: mysql2
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.3.0
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.3.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: logger
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.2.8
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.2.8
|
78
|
+
description: Lenz base
|
79
|
+
email: heoseok87@leevi.co.kr
|
80
|
+
executables: []
|
81
|
+
extensions: []
|
82
|
+
extra_rdoc_files: []
|
83
|
+
files:
|
84
|
+
- lib/lenz_base.rb
|
85
|
+
homepage:
|
86
|
+
licenses:
|
87
|
+
- MIT
|
88
|
+
post_install_message:
|
89
|
+
rdoc_options: []
|
90
|
+
require_paths:
|
91
|
+
- lib
|
92
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
93
|
+
none: false
|
94
|
+
requirements:
|
95
|
+
- - ! '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
requirements: []
|
105
|
+
rubyforge_project:
|
106
|
+
rubygems_version: 1.8.28
|
107
|
+
signing_key:
|
108
|
+
specification_version: 3
|
109
|
+
summary: Lenz base
|
110
|
+
test_files: []
|