Skip to content
Extraits de code Groupes Projets
Valider b293d995 rédigé par Sybil's avatar Sybil
Parcourir les fichiers

In progress : Sidekiq worker managing database update and migration.

parent 3c57de4a
Branches
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -23,6 +23,11 @@ gem 'active_model_serializers' ...@@ -23,6 +23,11 @@ gem 'active_model_serializers'
#Because we're using a shitty database designed by a fuckin' drug addict #Because we're using a shitty database designed by a fuckin' drug addict
gem 'composite_primary_keys' gem 'composite_primary_keys'
#Framework for background job processing : managing the database transformation between servers
gem 'sidekiq'
#Framework for distributed schedulinh
gem 'sidetiq'
# Use jquery as the JavaScript library # Use jquery as the JavaScript library
#gem 'jquery-rails' #gem 'jquery-rails'
......
class TrackSerializer < ActiveModel::Serializer class TrackSerializer < ActiveModel::Serializer
attributes :id, :title, :url, :type attributes :id, :title, :url, :type
#embed :ids, include: true
has_one :channel has_one :channel
has_many :tags has_many :tags
......
lass DatabaseMigration
include Sidekiq::Worker
include Sidetiq::Schedulable
recurrence { hourly }
def perform
local_dump_path = 'PlayBotAPI/playbot_database_dump.sql'
create_distant_dump
import_dump local_dump_path
revamp_database local_dump_path
end
def create_distant_dump
dump_file = '<distant_path_of_dump_file>'
dump_command = 'mysqldump --single-transaction -h <mysql_info> -u <user_name> -p<password> <table_name>'
system("ssh <server_with_playbot_database> '#{dump_command} > #{dump_file}'")
end
def import_dump( local_dump_path )
distant_dump_path = '<distant_path_of_dump_file>'
systen("scp <server_with_playbot_database>:#{distant_dump_path} #{local_dump_path}")
end
def revamp_database( local_dump_path )
ActiveRecord::Base.connection.execute(File.read(local_dump_path))
ActiveRecord::Base.connection.execute(File.read("lib/database_migration.sql"))
end
end
lass DatabaseUpdate
include Sidekiq::Worker
include Sidetiq::Schedulable
recurrence { hourly }
def perform
#TODO : Optimize update in place of rewritting all database
end
end
drop table if exists tracks, tags, tag_assignation, channels, users, irc_posts;
create table tracks (
track_id INT NOT NULL UNIQUE,
name VARCHAR(255),
url VARCHAR(255),
provider VARCHAR(255),
PRIMARY KEY (track_id)
);
create table tags (
tag_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) UNIQUE,
quantity INT,
PRIMARY KEY (tag_id)
);
create table tag_assignation (
track_id INT,
tag_id INT);
create table channels (
channel_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) UNIQUE,
quantity INT,
PRIMARY KEY (channel_id)
);
create table users (
user_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) UNIQUE,
quantity INT,
PRIMARY KEY (user_id)
);
create table irc_posts (
track_id INT,
channel_id INT,
user_id INT,
date TIMESTAMP);
insert into tracks (track_id, name, provider, url)
SELECT id, title, type, url
FROM playbot;
insert into users (name)
SELECT DISTINCT sender_irc
FROM playbot_chan;
insert into channels (name)
SELECT DISTINCT chan
FROM playbot_chan;
insert into tags (name)
SELECT DISTINCT tag
FROM playbot_tags;
insert into tag_assignation (track_id, tag_id)
SELECT id, tag_id
FROM playbot_tags
LEFT JOIN tags
ON playbot_tags.tag = tags.name;
alter table playbot_chan convert to character set utf8 collate utf8_general_ci;
insert into irc_posts (track_id, channel_id, user_id, date)
SELECT content, channel_id, user_id, date
FROM playbot_chan
LEFT JOIN channels
ON playbot_chan.chan = channels.name
LEFT JOIN users
ON playbot_chan.sender_irc = users.name;
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter