lenz_base 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/lenz_base.rb +131 -0
  2. 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: []