vagrant-node 1.0.0 → 1.1.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.
@@ -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