· 8 years ago · Jan 08, 2018, 02:18 PM
1class MirrorDatabase
2 include Singleton
3 include MirrorFileUtils
4
5 SYNC_STATUS_SYNCING = 'Syncing'.freeze
6 SYNC_STATUS_SUCCESSFUL = 'Successful'.freeze
7 SYNC_STATUS_FAILED = 'Failed'.freeze
8 SYNC_STATUS_STOP = 'Stop'.freeze
9
10 #DATABASE_FILE = "#{MirrorFileUtils::DATA_DIR}/mirror.db".freeze
11 :db_file = "#{MirrorFileUtils::DATA_DIR}/mirror.db".freeze
12 UPSERT = 'INSERT OR REPLACE INTO mirror '.freeze
13
14 #attr_accessor :db_file
15
16 #public_class_method :new
17
18 def initialize()
19 #@db_file = params.fetch(:db_file, DATABASE_FILE)
20 #@mutex = Mutex.new
21 unless File.exist?(:db_file)
22 MirrorFileUtils.create_file(:db_file)
23 initialize_db
24 end
25 end
26
27 def initialize_db
28 SQLite3::Database.new(:db_file) do |db|
29 db.execute "CREATE TABLE IF NOT EXISTS mirror(
30 mirror TEXT PRIMARY KEY,
31 last_successful_sync TEXT,
32 start_sync TEXT,
33 end_sync TEXT,
34 status INTEGER);"
35 db.execute "CREATE TABLE IF NOT EXISTS stats(
36 mirror TEXT,
37 start_sync TEXT,
38 number_of_files INTEGER,
39 number_of_files_transferred INTEGER,
40 total_file_size INTEGER,
41 total_transferred_file_size INTEGER,
42 download_speed INTEGER,
43 FOREIGN KEY(mirror) REFERENCES mirror(mirror));"
44 end
45 end