vagrant-node 1.0.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,65 +1,74 @@
1
- require 'sqlite3'
1
+ #require 'sqlite3'
2
2
  require 'digest/md5'
3
+ require 'vagrant-node/exceptions.rb'
4
+ require 'mysql2'
5
+ require 'yaml'
6
+
3
7
  module Vagrant
4
- module Node
5
- module DB
6
- class DBManager
7
-
8
- def initialize(data_dir)
9
- @db=check_database(data_dir)
10
- end
11
-
12
- def get_backup_log_entries(vmname)
13
- sql="SELECT * FROM #{BACKUP_TABLE_NAME}"
14
- sql = sql + " WHERE #{BACKUP_VM_NAME_COLUMN} = \"#{vmname}\"" if vmname
15
-
16
- #return rows
17
- @db.execute(sql)
18
-
19
- end
20
-
21
- def add_backup_log_entry(date,vmname,status)
22
- sql="INSERT INTO #{BACKUP_TABLE_NAME} VALUES ( ? , ? , ? )"
23
- @db.execute(sql,date,vmname,status)
24
- end
25
-
26
- def update_backup_log_entry(date,vmname,status)
27
- sql="UPDATE #{BACKUP_TABLE_NAME} SET #{BACKUP_STATUS_COLUMN} = ? WHERE #{BACKUP_DATE_COLUMN}= ? AND #{BACKUP_VM_NAME_COLUMN}= ?"
28
- @db.execute(sql,status,date,vmname)
29
- end
30
-
31
- def node_password_set?
32
- sql="SELECT Count(*) FROM #{PASSWORD_TABLE};"
33
-
34
- return @db.execute(sql).first[0]!=0
35
- #return true
36
-
37
- end
8
+ module Node
9
+ module DB
10
+ class DBManager
11
+
12
+ DOWNLOAD_ERROR=-1
13
+ DOWNLOAD_PROCESS=0
14
+ DOWNLOAD_SUCCESS=0
15
+
16
+ def initialize(data_dir)
17
+ @db=check_database(data_dir)
18
+ @data_dir=data_dir
19
+ end
20
+
21
+ def get_backup_log_entries(vmname)
22
+ sql="SELECT * FROM #{BACKUP_TABLE_NAME}"
23
+ sql = sql + " WHERE #{BACKUP_VM_NAME_COLUMN} = \"#{vmname}\"" if vmname
24
+
25
+ #return rows
26
+ @db.query(sql)
27
+
28
+ end
29
+
30
+ def add_backup_log_entry(date,vmname,status)
31
+ sql="INSERT INTO #{BACKUP_TABLE_NAME} VALUES ( '#{date}' , '#{vmname}' , '#{status}' )"
32
+ @db.query(sql)
33
+ end
34
+
35
+ def update_backup_log_entry(date,vmname,status)
36
+ sql="UPDATE #{BACKUP_TABLE_NAME} SET #{BACKUP_STATUS_COLUMN} = '#{status}' WHERE #{BACKUP_DATE_COLUMN}= '#{date}' AND #{BACKUP_VM_NAME_COLUMN}= '#{vmname}'"
37
+ @db.query(sql)
38
+ end
39
+
40
+ def node_password_set?
41
+ sql="SELECT Count(*) FROM #{PASSWORD_TABLE};"
42
+
43
+ return @db.query(sql).size!=0
44
+
45
+ end
38
46
 
39
47
  def node_check_password?(old_password)
40
48
  sql="SELECT #{PASSWORD_COLUMN} FROM #{PASSWORD_TABLE} LIMIT 1;"
41
- stored_pwd=@db.execute(sql)
49
+ stored_pwd=@db.query(sql)
50
+
51
+ return (stored_pwd.size!=0 && (stored_pwd.first[PASSWORD_COLUMN]==Digest::MD5.hexdigest(old_password)))
42
52
 
43
- return (stored_pwd.length!=0 && (stored_pwd.first[0]==Digest::MD5.hexdigest(old_password)))
44
- #return true
45
53
  end
46
54
 
47
55
  def node_password
48
56
  sql="SELECT #{PASSWORD_COLUMN} FROM #{PASSWORD_TABLE} LIMIT 1;"
49
- stored_pwd=@db.execute(sql)
50
- stored_pwd.first[0]
57
+ stored_pwd=@db.query(sql)
58
+
59
+ stored_pwd.first[PASSWORD_COLUMN]
51
60
  end
52
61
 
53
62
  def node_password_set(new_password,raw=false)
63
+ password=((raw)? new_password:Digest::MD5.hexdigest(new_password))
64
+
54
65
  if node_password_set? || !node_default_password_set?
55
- sql="UPDATE #{PASSWORD_TABLE} SET #{PASSWORD_COLUMN} = ? "
66
+ sql="UPDATE #{PASSWORD_TABLE} SET #{PASSWORD_COLUMN} = '#{password}' "
56
67
  else
57
- sql="INSERT INTO #{PASSWORD_TABLE} VALUES (?)"
68
+ sql="INSERT INTO #{PASSWORD_TABLE} VALUES ('#{password}')"
58
69
  end
59
70
 
60
- @db.execute(sql,
61
- ((raw)? new_password:
62
- Digest::MD5.hexdigest(new_password)))
71
+ @db.query(sql)
63
72
 
64
73
  end
65
74
 
@@ -69,108 +78,276 @@ module Vagrant
69
78
 
70
79
 
71
80
  def create_queued_process(id)
72
- sql="INSERT INTO #{OPERATION_QUEUE_TABLE_NAME} VALUES (?, ?, ?, ?, ?)"
73
- @db.execute(sql,id,Time.now.strftime("%Y-%m-%d") ,Time.now.to_i,PROCESS_IN_PROGRESS,"")
81
+ tactual = Time.now.strftime("%Y-%m-%d")
82
+ texp = Time.now.to_i
83
+ sql="INSERT INTO #{OPERATION_QUEUE_TABLE_NAME} VALUES (#{id}, '#{tactual}', '#{texp}', #{PROCESS_IN_PROGRESS}, '')"
84
+ #@db.execute(sql,id,Time.now.strftime("%Y-%m-%d") ,Time.now.to_i,PROCESS_IN_PROGRESS,"")
85
+ @db.query(sql)
74
86
  end
75
87
 
76
88
  def set_queued_process_result(id,result)
77
- sql="UPDATE #{OPERATION_QUEUE_TABLE_NAME} SET #{OPERATION_STATUS_COLUMN} = ?,#{OPERATION_RESULT_COLUMN} = ? WHERE #{OPERATION_ID_COLUMN}= ?"
78
- @db.execute(sql,PROCESS_SUCCESS,result,id)
89
+ sql="UPDATE #{OPERATION_QUEUE_TABLE_NAME} SET #{OPERATION_STATUS_COLUMN} = #{PROCESS_SUCCESS},#{OPERATION_RESULT_COLUMN} = '#{result}' WHERE #{OPERATION_ID_COLUMN}= #{id}"
90
+ #@db.execute(sql,PROCESS_SUCCESS,result,id)
91
+ @db.query(sql)
79
92
  end
80
93
 
81
94
  def set_queued_process_error(id,exception)
82
- sql="UPDATE #{OPERATION_QUEUE_TABLE_NAME} SET #{OPERATION_STATUS_COLUMN} = ?,#{OPERATION_RESULT_COLUMN} = ? WHERE #{OPERATION_ID_COLUMN}= ?"
83
- @db.execute(sql,PROCESS_ERROR,exception.message,id)
95
+
96
+ errlog = []
97
+
98
+ errcode=PROCESS_ERROR
99
+
100
+ # decoded=exception.message.to_s.tr("\n"," ")
101
+ # puts exception.message.to_s
102
+ # pp exception.message.to_s
103
+ # pp decoded
104
+
105
+
106
+
107
+ if (exception.class==VMActionException)
108
+ errlog << {"vmname" => exception.vmname,"provider"=>exception.provider,"status" => exception.message.to_s.tr("\'","\"")}
109
+ elsif (exception.class==RestException)
110
+ errcode=exception.code
111
+ errlog << {"status" => exception.message.to_s.tr("\'","\"")}
112
+ else
113
+ errlog << {"status" => exception.message.to_s.tr("\'","\"")}
114
+ end
115
+
116
+
117
+
118
+ sql="UPDATE #{OPERATION_QUEUE_TABLE_NAME} SET #{OPERATION_STATUS_COLUMN} = #{errcode},#{OPERATION_RESULT_COLUMN} = '#{errlog.to_json}' WHERE #{OPERATION_ID_COLUMN}= #{id}"
119
+
120
+
121
+ #errlog << {"vmname" => "TODO","status" => exception.message.to_s}
122
+
123
+ #@db.execute(sql,errcode,errlog.to_json,id)
124
+ @db.query(sql)
84
125
  end
85
126
 
86
- def get_queued_process_result(id)
87
- sql="SELECT #{OPERATION_STATUS_COLUMN},#{OPERATION_RESULT_COLUMN} FROM #{OPERATION_QUEUE_TABLE_NAME} WHERE #{OPERATION_ID_COLUMN}= ?;"
88
- #sql="SELECT * FROM #{OPERATION_QUEUE_TABLE_NAME};"
89
- @db.execute(sql,id)
127
+ def get_queued_process_result(id)
128
+ check_operation_timeout
129
+ sql="SELECT #{OPERATION_STATUS_COLUMN},#{OPERATION_RESULT_COLUMN} FROM #{OPERATION_QUEUE_TABLE_NAME} WHERE #{OPERATION_ID_COLUMN}= #{id};"
130
+ @db.query(sql)
90
131
  end
91
132
 
92
133
  def get_queued_last
134
+ check_operation_timeout
93
135
  sql="SELECT #{OPERATION_STATUS_COLUMN},#{OPERATION_RESULT_COLUMN} FROM #{OPERATION_QUEUE_TABLE_NAME};"
94
- @db.execute(sql)
136
+ @db.query(sql)
95
137
  end
96
138
 
97
139
 
98
140
  def remove_queued_processes
99
141
  sql="DELETE FROM #{OPERATION_QUEUE_TABLE_NAME}"
100
- @db.execute(sql)
142
+ @db.query(sql)
101
143
  end
102
144
 
145
+ def add_box_download_info(box_name,box_url)
146
+ sql="INSERT INTO #{DOWNLOAD_BOX_TABLE}(#{DOWNLOAD_BOX_COLUMN},#{DOWNLOAD_URL_COLUMN},#{DOWNLOAD_PROGRESS_COLUMN},#{DOWNLOAD_REMAINING_COLUMN},#{DOWNLOAD_STATUS_COLUMN}) VALUES ('#{box_name}','#{box_url}','0%','--:--:--',#{DOWNLOAD_PROCESS})"
147
+ @db.query(sql)
148
+ last_id=@db.query("SELECT LAST_INSERT_ID() as last")
149
+ last_id.first["last"]
150
+ end
103
151
 
104
- private
105
-
106
- PROCESS_IN_PROGRESS = 100;
107
- PROCESS_SUCCESS = 200;
108
- PROCESS_ERROR = 500;
152
+ def get_box_download
153
+ sql="SELECT * FROM #{DOWNLOAD_BOX_TABLE}"
154
+ @db.query(sql)
155
+ end
156
+
157
+ def delete_box_download(id)
158
+ sql="DELETE FROM #{DOWNLOAD_BOX_TABLE} WHERE #{DOWNLOAD_ID_COLUMN}=#{id}"
159
+ @db.query(sql)
160
+ end
161
+
162
+ def clear_box_downloads
163
+ sql="DELETE FROM #{DOWNLOAD_BOX_TABLE}"
164
+ @db.query(sql)
165
+ end
166
+
167
+ def set_box_download_error(id)
168
+ sql="UPDATE #{DOWNLOAD_BOX_TABLE} SET #{DOWNLOAD_STATUS_COLUMN} = #{DOWNLOAD_ERROR}, #{DOWNLOAD_PROGRESS_COLUMN} = 'ERROR' WHERE #{DOWNLOAD_ID_COLUMN}=#{id}"
169
+ @db.query(sql)
170
+ end
171
+
172
+ def update_box_download_info(id,progress,remaining)
173
+ sql="UPDATE #{DOWNLOAD_BOX_TABLE} SET #{DOWNLOAD_PROGRESS_COLUMN}= '#{progress}',#{DOWNLOAD_REMAINING_COLUMN}= '#{remaining}' WHERE #{DOWNLOAD_ID_COLUMN}=#{id}"
174
+
175
+ @db.query(sql)
176
+ end
177
+
178
+ def add_box_uncompression(box_name,box_url)
179
+ sql="INSERT INTO #{DOWNLOAD_BOX_TABLE}(#{DOWNLOAD_BOX_COLUMN},#{DOWNLOAD_URL_COLUMN},#{DOWNLOAD_PROGRESS_COLUMN},#{DOWNLOAD_REMAINING_COLUMN},#{DOWNLOAD_STATUS_COLUMN}) VALUES ('#{box_name}','#{box_url}','Uncompressing','Uncompressing',#{DOWNLOAD_PROCESS})"
180
+ #@db.execute(sql,box_name,box_url,DOWNLOAD_PROCESS)
181
+ @db.query(sql)
182
+
183
+ last_id=@db.query("SELECT LAST_INSERT_ID() as last")
184
+ last_id.first["last"]
185
+ end
186
+
187
+ def set_box_uncompression_error(id)
188
+ sql="UPDATE #{DOWNLOAD_BOX_TABLE} SET #{DOWNLOAD_STATUS_COLUMN} = #{DOWNLOAD_ERROR}, WHERE #{DOWNLOAD_ID_COLUMN}!=#{id}"
189
+ #@db.execute(sql,DOWNLOAD_ERROR,id)
190
+ @db.query(sql)
191
+ end
192
+
193
+ def clear_box_uncompression(id)
194
+ sql="DELETE FROM #{DOWNLOAD_BOX_TABLE} WHERE #{DOWNLOAD_STATUS_COLUMN}!=#{id}"
195
+ @db.query(sql)
196
+ end
197
+
198
+ def self.create_config_file(dir,dbhost,dbname,dbpuser,dbppassword,dbuser='',dbpassword='')
199
+ config = Hash.new
200
+ config[CONFIG_DBHOSTNAME]=dbhost
201
+ config[CONFIG_DBNAME]=dbname
202
+ config[CONFIG_DBUSER]=dbpuser
203
+ config[CONFIG_DBPASSWORD]=dbppassword
204
+
205
+ File.open(dir.to_s + "/config.yml", 'w') {|f| f.write config.to_yaml }
206
+ end
207
+
208
+ def self.delete_config_file(data_dir)
209
+ File.delete(data_dir.to_s + "/config.yml") if DBManager.check_config_file(data_dir)
210
+ end
211
+
212
+ def self.check_config_file(data_dir)
213
+ File.file?(data_dir.to_s + "/config.yml")
214
+ end
215
+
216
+
217
+ def close_db_connection
218
+ @db.close
219
+ end
220
+
221
+
222
+ private
223
+
224
+ def check_operation_timeout
225
+ sql="SELECT #{OPERATION_ID_COLUMN},#{OPERATION_TIME_COLUMN} from #{OPERATION_QUEUE_TABLE_NAME} WHERE #{OPERATION_STATUS_COLUMN}= #{PROCESS_IN_PROGRESS}"
226
+ ops=@db.query(sql)
227
+ rexception=RestException.new(504,"OPERATION CANCELLED BY TIMEOUT")
228
+
229
+ tnow=Time.now.to_i
230
+ ops.each do |entry|
231
+ #if timeout update db
232
+ if (tnow > (entry["operation_time"] + OPERATION_TIMEOUT))
233
+ set_queued_process_error(entry["operation_id"],rexception)
234
+ end
235
+ end
236
+ end
237
+
238
+ OPERATION_TIMEOUT = 600 #In second (10 minutes)
239
+ PROCESS_IN_PROGRESS = 100;
240
+ PROCESS_SUCCESS = 200;
241
+ PROCESS_ERROR = 500;
242
+
243
+ BACKUP_TABLE_NAME='node_table'
244
+ BACKUP_DATE_COLUMN = 'date'
245
+ BACKUP_VM_NAME_COLUMN = 'vm_name'
246
+ BACKUP_STATUS_COLUMN = 'backup_status'
247
+ PASSWORD_TABLE = 'node_password_table'
248
+ PASSWORD_COLUMN = 'node_password'
249
+ DEFAULT_NODE_PASSWORD = 'catedrasaesumu'
250
+
251
+
252
+
253
+ OPERATION_QUEUE_TABLE_NAME='operation_queue_table'
254
+ OPERATION_CMD_COLUMN = 'operation_cmd'
255
+ OPERATION_STATUS_COLUMN = 'operation_status'
256
+ OPERATION_RESULT_COLUMN = 'operation_result'
257
+ OPERATION_ID_COLUMN = 'operation_id'
258
+ OPERATION_DATE_COLUMN = 'operation_date'
259
+ OPERATION_TIME_COLUMN = 'operation_time'
260
+
261
+ DOWNLOAD_BOX_TABLE = 'download_box_table'
262
+ DOWNLOAD_ID_COLUMN = 'id'
263
+ DOWNLOAD_BOX_COLUMN = 'box_name'
264
+ DOWNLOAD_URL_COLUMN = 'box_url'
265
+ DOWNLOAD_STATUS_COLUMN = 'download_status'
266
+ DOWNLOAD_PROGRESS_COLUMN = 'download_progress'
267
+ DOWNLOAD_REMAINING_COLUMN = 'download_remaining'
268
+ CONFIG_DBUSER = 'dbuser'
269
+ CONFIG_DBPASSWORD = 'dbpassword'
270
+ CONFIG_DBHOSTNAME = 'dbhostname'
271
+ CONFIG_DBNAME = 'dbname'
272
+
273
+
274
+
275
+
276
+ def check_database(data_dir)
277
+
278
+ begin
279
+
280
+ raise "The config file \""+data_dir.to_s + "/config.yml"+"\" doesn't exist" if !File.file?(data_dir.to_s + "/config.yml")
109
281
 
110
- BACKUP_TABLE_NAME='node_table'
111
- BACKUP_DATE_COLUMN = 'date'
112
- BACKUP_VM_NAME_COLUMN = 'vm_name'
113
- BACKUP_STATUS_COLUMN = 'backup_status'
114
- PASSWORD_TABLE = 'node_password_table'
115
- PASSWORD_COLUMN = 'node_password'
116
- DEFAULT_NODE_PASSWORD = 'catedrasaesumu'
282
+ config = YAML.load_file(data_dir.to_s + "/config.yml")
117
283
 
118
- OPERATION_QUEUE_TABLE_NAME='operation_queue_table'
119
- OPERATION_CMD_COLUMN = 'operation_cmd'
120
- OPERATION_STATUS_COLUMN = 'operation_status'
121
- OPERATION_RESULT_COLUMN = 'operation_result'
122
- OPERATION_ID_COLUMN = 'operation_id'
123
- OPERATION_DATE_COLUMN = 'operation_date'
124
- OPERATION_TIME_COLUMN = 'operation_time'
125
-
126
- def check_database(data_dir)
127
- #Creates and/or open the database
128
-
129
- db = SQLite3::Database.new( data_dir.to_s + "/node.db" )
130
- #Trying to avoid the sqlite3::busyexception
131
- db.busy_timeout=100;
284
+ raise 'Invalid configuration file' if (!config.has_key?(CONFIG_DBUSER) ||
285
+ !config.has_key?(CONFIG_DBPASSWORD) ||
286
+ !config.has_key?(CONFIG_DBHOSTNAME)
287
+ !config.has_key?(CONFIG_DBNAME))
132
288
 
133
- if db.execute("SELECT name FROM sqlite_master
134
- WHERE type='table' AND name='#{BACKUP_TABLE_NAME}';").length==0
135
- db.execute( "create table '#{BACKUP_TABLE_NAME}' (#{BACKUP_DATE_COLUMN} TEXT NOT NULL,
136
- #{BACKUP_VM_NAME_COLUMN} TEXT PRIMARY_KEY,
137
- #{BACKUP_STATUS_COLUMN} TEXT NOT NULL);" )
138
-
139
-
140
-
141
-
142
- end
143
-
144
-
145
- if db.execute("SELECT name FROM sqlite_master
146
- WHERE type='table' AND name='#{PASSWORD_TABLE}';").length==0
147
- db.execute("create table '#{PASSWORD_TABLE}' (#{PASSWORD_COLUMN} TEXT NOT NULL);" )
148
- db.execute("INSERT INTO #{PASSWORD_TABLE} VALUES (\"#{DEFAULT_NODE_PASSWORD}\");");
149
- end
150
-
151
- if db.execute("SELECT name FROM sqlite_master
152
- WHERE type='table' AND name='#{OPERATION_QUEUE_TABLE_NAME}';").length==0
153
-
154
- # db.execute( "create table '#{OPERATION_QUEUE_TABLE_NAME}' (#{OPERATION_ID_COLUMN} INTEGER PRIMARY_KEY,
155
- # #{OPERATION_CMD_COLUMN} TEXT NOT NULL,
156
- # #{OPERATION_DATE_COLUMN} TEXT NOT NULL,
157
- # #{OPERATION_TIME_COLUMN} INTEGER NOT NULL,
158
- # #{OPERATION_STATUS_COLUMN} TEXT NOT NULL,
159
- # #{OPERATION_RESULT_COLUMN} TEXT NOT NULL);" )
160
- db.execute( "create table '#{OPERATION_QUEUE_TABLE_NAME}' (#{OPERATION_ID_COLUMN} INTEGER PRIMARY_KEY,
161
- #{OPERATION_DATE_COLUMN} TEXT NOT NULL,
162
- #{OPERATION_TIME_COLUMN} INTEGER NOT NULL,
163
- #{OPERATION_STATUS_COLUMN} INTEGER NOT NULL,
164
- #{OPERATION_RESULT_COLUMN} TEXT NOT NULL);" )
165
-
166
- end
167
-
168
-
169
- db
170
-
171
- end
172
-
173
289
  end
290
+
291
+
292
+ db =Mysql2::Client.new(:host => config[CONFIG_DBHOSTNAME],
293
+ :username => config[CONFIG_DBUSER],
294
+ :password => config[CONFIG_DBPASSWORD],
295
+ :flags => Mysql2::Client::MULTI_STATEMENTS)
296
+
297
+ #Checking if database exists
298
+ results = db.query("SHOW DATABASES LIKE '"+config[CONFIG_DBNAME]+"'")
299
+
300
+ if (results.size==0)
301
+ results = db.query("CREATE DATABASE "+config[CONFIG_DBNAME])
302
+ end
303
+
304
+ db.query("use "+config[CONFIG_DBNAME])
305
+
306
+ db.query("CREATE TABLE IF NOT EXISTS `#{BACKUP_TABLE_NAME}` (
307
+ `#{BACKUP_DATE_COLUMN}` text NOT NULL,
308
+ `#{BACKUP_VM_NAME_COLUMN}` varchar(255) NOT NULL,
309
+ `#{BACKUP_STATUS_COLUMN}` text NOT NULL,
310
+ PRIMARY KEY (`#{BACKUP_VM_NAME_COLUMN}`)
311
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;")
312
+
313
+
314
+ db.query("CREATE TABLE IF NOT EXISTS `#{DOWNLOAD_BOX_TABLE}` (
315
+ `#{DOWNLOAD_ID_COLUMN}` int(11) NOT NULL AUTO_INCREMENT,
316
+ `#{DOWNLOAD_BOX_COLUMN}` varchar(128) NOT NULL,
317
+ `#{DOWNLOAD_URL_COLUMN}` text NOT NULL,
318
+ `#{DOWNLOAD_PROGRESS_COLUMN}` VARCHAR(10),
319
+ `#{DOWNLOAD_STATUS_COLUMN}` int(11) NOT NULL,
320
+ `#{DOWNLOAD_REMAINING_COLUMN}` VARCHAR(10),
321
+ PRIMARY KEY (`#{DOWNLOAD_ID_COLUMN}`)
322
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;")
323
+
324
+
325
+ db.query("CREATE TABLE IF NOT EXISTS `#{PASSWORD_TABLE}` (
326
+ `#{PASSWORD_COLUMN}` varchar(128) NOT NULL,
327
+ PRIMARY KEY (`#{PASSWORD_COLUMN}`)
328
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;")
329
+
330
+ results=db.query("SELECT * from #{PASSWORD_TABLE}")
331
+
332
+ if (results.size==0)
333
+ db.query("INSERT INTO #{PASSWORD_TABLE} VALUES (\"#{DEFAULT_NODE_PASSWORD}\");");
334
+ end
335
+
336
+ db.query("CREATE TABLE IF NOT EXISTS `#{OPERATION_QUEUE_TABLE_NAME}` (
337
+ `#{OPERATION_ID_COLUMN}` int(11) NOT NULL AUTO_INCREMENT,
338
+ `#{OPERATION_DATE_COLUMN}` text NOT NULL,
339
+ `#{OPERATION_TIME_COLUMN}` int(11) NOT NULL,
340
+ `#{OPERATION_STATUS_COLUMN}` int(11) NOT NULL,
341
+ `#{OPERATION_RESULT_COLUMN}` text NOT NULL,
342
+ PRIMARY KEY (`#{OPERATION_ID_COLUMN}`)
343
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;")
344
+
345
+
346
+ db
347
+
174
348
  end
349
+
175
350
  end
176
351
  end
352
+ end
353
+ end