Class: Bio::DB::Polymarker
- Inherits:
-
Object
- Object
- Bio::DB::Polymarker
- Defined in:
- lib/bio-polymarker_db_batch/polymarker_db_batch.rb
Instance Method Summary collapse
- #each_running ⇒ Object
- #each_snp_in_file(file_id) ⇒ Object
- #each_timeout ⇒ Object
- #each_to_run ⇒ Object
- #execute_polymarker(file_id, snp_file) ⇒ Object
- #get_preferences(file_id) ⇒ Object
- #get_snp_file(id) ⇒ Object
-
#initialize(props) ⇒ Polymarker
constructor
A new instance of Polymarker.
- #mysql_version ⇒ Object
- #review_running_status(file_id, filename) ⇒ Object
- #send_email(to, id, status) ⇒ Object
- #update_error_status(snp_file_id, error_message) ⇒ Object
- #update_status(snp_file_id, new_status) ⇒ Object
- #write_output_file_and_execute(file_id, filename) ⇒ Object
Constructor Details
#initialize(props) ⇒ Polymarker
Returns a new instance of Polymarker.
5 6 7 8 |
# File 'lib/bio-polymarker_db_batch/polymarker_db_batch.rb', line 5 def initialize( props) @properties =Hash[*File.read(props).split(/[=\n]+/)] puts @properties.inspect end |
Instance Method Details
#each_running ⇒ Object
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/bio-polymarker_db_batch/polymarker_db_batch.rb', line 30 def each_running query="SELECT snp_file_id, filename FROM snp_file WHERE status IN ('SUBMITTED', 'RUNNING');" ret = 0 if block_given? ret = execute_query(query){|row| yield row } else ret = execute_query(query) end ret end |
#each_snp_in_file(file_id) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/bio-polymarker_db_batch/polymarker_db_batch.rb', line 54 def each_snp_in_file(file_id) query="SELECT name, chromosome, sequence FROM snp, snp_file_snp WHERE snp_file_snp.snpList_snpId = snp.snpId AND snp_file_snp.snp_file_snp_file_id = '#{file_id}' AND snp.process = 1;" ret = 0 #puts query if block_given? ret = execute_query(query){|row| yield row } else ret = execute_query(query) end ret end |
#each_timeout ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/bio-polymarker_db_batch/polymarker_db_batch.rb', line 41 def each_timeout #TODO: validate the timeouts. #SELECT * FROM snp_file WHERE datediff(NOW(), lastChange) > 3 and status != 'DONE'; query="SELECT snp_file_id, filename FROM snp_file WHERE datediff(NOW(), submitted) > 3 AND status IN ('NEW', 'SUBMITTED', 'RUNNING');" ret = 0 if block_given? ret = execute_query(query){|row| yield row } else ret = execute_query(query) end ret end |
#each_to_run ⇒ Object
19 20 21 22 23 24 25 26 27 28 |
# File 'lib/bio-polymarker_db_batch/polymarker_db_batch.rb', line 19 def each_to_run query="SELECT snp_file_id, filename FROM snp_file WHERE status = 'NEW';" ret = 0 if block_given? ret = execute_query(query){|row| yield row } else ret = execute_query(query) end ret end |
#execute_polymarker(file_id, snp_file) ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/bio-polymarker_db_batch/polymarker_db_batch.rb', line 91 def execute_polymarker(file_id, snp_file) preferences = get_preferences(file_id) cmd=@properties['wrapper_prefix'] cmd << "polymarker.rb -m #{snp_file} -o #{snp_file}_out " cmd << "-c #{@properties['path_to_chromosomes']}/#{preferences[:reference]} " cmd << @properties['wrapper_suffix'] #polymarker.rb -m 1_GWAS_SNPs.csv -o 1_test -c /Users/ramirezr/Documents/TGAC/references/Triticum_aestivum.IWGSP1.21.dna_rm.genome.fa execute_command(cmd) end |
#get_preferences(file_id) ⇒ Object
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/bio-polymarker_db_batch/polymarker_db_batch.rb', line 80 def get_preferences(file_id) query="SELECT name, value FROM preferences \ join snp_file_preferences on preferenceID = preferences_preferenceID \ where snp_file_snp_file_id = #{file_id};" preferences = Hash.new execute_query(query) do |row| preferences[row[0].to_sym] = row[1] end return preferences end |
#get_snp_file(id) ⇒ Object
14 15 16 17 |
# File 'lib/bio-polymarker_db_batch/polymarker_db_batch.rb', line 14 def get_snp_file(id) results = con.query "SELECT * FROM snp_file WHERE snp_file_id=#{id}" results.fetch_hash end |
#mysql_version ⇒ Object
10 11 12 |
# File 'lib/bio-polymarker_db_batch/polymarker_db_batch.rb', line 10 def mysql_version con.get_server_info end |
#review_running_status(file_id, filename) ⇒ Object
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'lib/bio-polymarker_db_batch/polymarker_db_batch.rb', line 160 def review_running_status(file_id, filename) out_folder=@properties["execution_path"]+"/#{file_id}_#{filename}_out" started=File.exist?(out_folder) done=false = "" error = false if started lines = IO.readlines("#{out_folder}/status.txt") puts lines.inspect lines.each do |l| done = l.split(",").include?("DONE\n") end lines.each do |l| error = l.include?("ERROR") unless error << l if error end end if done exons_filename="#{out_folder}/exons_genes_and_contigs.fa" output_primers="#{out_folder}/primers.csv" read_file_to_snp_file("mask_fasta", file_id, exons_filename ) read_file_to_snp_file("polymarker_output", file_id, output_primers ) update_status(file_id, "DONE") elsif error update_error_status(file_id, ) elsif started update_status(file_id, "RUNNING") end end |
#send_email(to, id, status) ⇒ Object
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/bio-polymarker_db_batch/polymarker_db_batch.rb', line 140 def send_email(to,id, status) = @properties msg = <<END_OF_MESSAGE From: #{['email_from_alias']} <#{['email_from']}> To: <#{to}> Subject: Polymarker #{id} #{status} The current status of your request (#{id}) is #{status} The latest status and results (when done) are available in: #{['web_domain']}/status?id=#{id} END_OF_MESSAGE smtp = Net::SMTP.new ["email_server"], 587 smtp.enable_starttls smtp.start( ["email_domain"], ["email_user"], ["email_pwd"], :login) do smtp.(msg, ["email_from"], to) end end |
#update_error_status(snp_file_id, error_message) ⇒ Object
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/bio-polymarker_db_batch/polymarker_db_batch.rb', line 118 def update_error_status(snp_file_id, ) snp_file = get_snp_file(snp_file_id) return if snp_file['status'] == "ERROR" pst = con.prepare "UPDATE snp_file SET status = 'ERROR', error=? WHERE snp_file_id = ?" puts "update_error_status: #{pst}" pst.execute , snp_file_id con.commit new_status = "ERROR: #{}" hashed_id = "#{snp_file_id}:#{snp_file['hash']}" begin send_email(snp_file['email'], hashed_id, new_status) rescue Exception => e puts "Error sending email to #{snp_file['email']}: #{e.}" end begin send_email(@properties['email_from'], hashed_id, new_status) rescue Exception => e puts "Error sending email to #{@properties['email_from']}: #{e.}" end end |
#update_status(snp_file_id, new_status) ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/bio-polymarker_db_batch/polymarker_db_batch.rb', line 103 def update_status(snp_file_id, new_status) raise "Invalid status #{new_status}" unless ["NEW", "SUBMITTED", "RUNNING", "DONE", "ERROR"].include?(new_status) snp_file = get_snp_file(snp_file_id) return if snp_file['status'] == new_status pst = con.prepare "UPDATE snp_file SET status = ? WHERE snp_file_id = ?" pst.execute new_status, snp_file_id con.commit begin hashed_id = "#{snp_file_id}:#{snp_file['hash']}" send_email(snp_file['email'],hashed_id, new_status) rescue puts "Error sending email. " end end |
#write_output_file_and_execute(file_id, filename) ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/bio-polymarker_db_batch/polymarker_db_batch.rb', line 66 def write_output_file_and_execute(file_id, filename) #puts "Writting: #{file_id}_#{filename}" path =@properties["execution_path"]+"/#{file_id}_#{filename}" puts "Writting: #{path}" f=File.open(path, "w") each_snp_in_file(file_id) do |row| f.puts(row.join(",")) end f.close execute_polymarker(file_id, path) update_status(file_id, "SUBMITTED") end |