<< Masa.20110512-debug-update-function-de_oddb | 2011 | Masa.20110510-swissindex_plugin-ch_oddb-debug-atc-zuweisen-de_oddb >>
suspend
:Commits
Check the report process
class SwissindexPharmaPlugin < SwissindexPlugin
SWISSINDEX_PHARMA_SERVER = DRbObject.new(nil, ODDB::Swissindex::SwissindexPharma::URI)
def update_package_trade_status(logging = false)
Logging.flag = logging
log_dir = File.expand_path('../../log/oddb/debug', File.dirname(__FILE__))
log_file = File.join(log_dir, 'update_package_trade_status.log')
Logging.start(log_file) do |log|
log.print "update_package_trade_status.log\n"
end
@out_of_trade_true_list = []
@out_of_trade_false_list = []
@update_pharmacode_list = []
@delete_pharmacode_list = []
count = 1
start_time = Time.now
@total_packages = @app.packages.length
@app.each_package do |pack|
SWISSINDEX_PHARMA_SERVER.session do |swissindex|
if item = swissindex.search_item(pack.barcode.to_s)
# Process 1
# Check swissindex by eancode and then check if the package is out of trade (true) in ch.oddb,
# if so the package becomes in trade (false)
if pack.out_of_trade
@out_of_trade_false_list << pack
end
# Process 2
# if the package does not have a pharmacode and there is a pharmacode found in swissindex,
# then put the pharmacode into ch.oddb
# We may have to cross-check the pharmacodes in the future
if !pack.pharmacode and pharmacode = item[:phar]
@update_pharmacode_list << [pack, pharmacode]
end
else
# Process 3
# if there is no eancode in swissindex and the package is in trade in ch.oddb,
# then the package becomes out of trade (true) in ch.oddb
unless pack.out_of_trade
@out_of_trade_true_list << pack
end
# Process 4
# if there is no eancode in swissindex then delete the according pharmacode in ch.oddb
if pharmacode = pack.pharmacode
@delete_pharmacode_list << [pack, pharmacode]
end
end
sleep(0.05)
end
Logging.append(log_file) do |log|
log.print pack.barcode, "\t"
end
Logging.append_estimate_time(log_file, count, @total_packages)
count += 1
if @out_of_trade_false_list.length > 1 and
out_of_trade_true_list.length > 1 and
@update_pharmacode_list.length > 1 and
@delete_pharmacode_list.length > 1
break
end
end
...
Result
Checked 23776 packages Updated in trade (out_of_trade:false): 13 packages Updated out of trade (out_of_trade:true) : 11 packages Updated pharmacode: 2 packages Deleted pharmacode: 20 packages Updated in trade (out_of_trade:false): 13 packages Check swissindex by eancode and then check if the package is out of trade (true) in ch.oddb, if so the package becomes in trade (false) 7680456901248: http://ch.oddb.org/de/gcc/resolve/pointer/:!registration,45690!sequence,04!package,124. ... Updated out of trade (out_of_trade:true) : 11 packages If there is no eancode in swissindex and the package is in trade in ch.oddb, then the package becomes out of trade (true) in ch.oddb 7680456911445: http://ch.oddb.org/de/gcc/resolve/pointer/:!registration,45691!sequence,04!package,144. ... Updated pharmacode: 2 packages If the package does not have a pharmacode and there is a pharmacode found in swissindex, then put the pharmacode into ch.oddb 7680252720210: http://ch.oddb.org/de/gcc/resolve/pointer/:!registration,25272!sequence,01!package,021. ... Deleted pharmacode: 20 packages If there is no eancode in swissindex then delete the according pharmacode in ch.oddb 7680361850235: http://ch.oddb.org/de/gcc/resolve/pointer/:!registration,36185!sequence,01!package,023. ...
Check nonpharma report
/home/masa/ywesee/oddb.org/data/csv/swissindex_migel.csv
Note
src/plugin/swissindex.rb#update_package_trade_status
@app.each_package do |pack|
SWISSINDEX_PHARMA_SERVER.session do |swissindex|
if item = swissindex.search_item(pack.barcode.to_s)
# Process 1
# Check swissindex by eancode and then check if the package is out of trade (true) in ch.oddb,
# if so the package becomes in trade (false)
if pack.out_of_trade
@out_of_trade_false_list << pack
end
# Process 2
# if the package does not have a pharmacode and there is a pharmacode found in swissindex,
# then put the pharmacode into ch.oddb
# We may have to cross-check the pharmacodes in the future
if !pack.pharmacode and pharmacode = item[:phar]
@update_pharmacode_list << [pack, pharmacode]
end
else
# Process 3
# if there is no eancode in swissindex and the package is in trade in ch.oddb,
# then the package becomes out of trade (true) in ch.oddb
unless pack.out_of_trade
@out_of_trade_true_list << pack
end
# Process 4
# if there is no eancode in swissindex then delete the according pharmacode in ch.oddb
if pharmacode = pack.pharmacode
@delete_pharmacode_list << [pack, pharmacode]
end
end
sleep(0.05)
...
1. make a directory which has an actual script to execute the server script
masa@masa ~/ywesee/oddb.org/svc $ mkdir swissindex_nonpharma
2. make an actual run script
masa@masa ~/ywesee/oddb.org/svc/swissindex_nonpharma $ cat run #!/bin/sh exec 2>&1 ulimit -v 10240000 exec /usr/bin/ruby -rubygems /home/masa/ywesee/oddb.org/ext/swissindex/bin/swissindex_nonpharmad masa@masa ~/ywesee/oddb.org/svc/swissindex_nonpharma $ ls -al -rwxr-xr-x 1 masa masa 226 11. Mai 11:37 run
3. make a symbolic link on /service directory
masa@masa /service $ sudo ln -s /home/masa/ywesee/oddb.org/svc/swissindex_nonpharma swissindex_nonpharma
4. start the daemon through daemontools commands
masa@masa /service $ sudo svc -u swissindex_nonpharma masa@masa /service $ sudo svstat swissindex_nonpharma swissindex_nonpharma: up (pid 10228) 424 seconds masa@masa /service $ sudo svc -h swissindex_nonpharma masa@masa /service $ sudo svstat swissindex_nonpharma swissindex_nonpharma: up (pid 10805) 2 seconds
5. check if the client actually run
masa@masa ~/ywesee/oddb.org $ bin/admin ch.oddb> Updater.new(self).migel_nonpharma '/home/masa/work/pharmacode_list.dat'
Install savon (0.8.6)
$ bin/swissindex_nonpharmad
/usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- savon (LoadError)
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /var/www/oddb.org/ext/swissindex/src/swissindex.rb:6
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from bin/swissindex_nonpharmad:7
Error
ywesee@thinpower /var/www/oddb.org/ext/swissindex $ bin/swissindex_nonpharmad
/usr/lib64/ruby/gems/1.8/gems/rack-1.2.2/lib/rack/utils.rb:138:in `union': can't convert Array into String (TypeError)
from /usr/lib64/ruby/gems/1.8/gems/rack-1.2.2/lib/rack/utils.rb:138
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /usr/lib64/ruby/gems/1.8/gems/httpi-0.9.3/lib/httpi/request.rb:3
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /usr/lib64/ruby/gems/1.8/gems/savon-0.8.6/lib/savon/client.rb:1
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /usr/lib64/ruby/gems/1.8/gems/savon-0.8.6/lib/savon.rb:3
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from /var/www/oddb.org/ext/swissindex/src/swissindex.rb:6
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from bin/swissindex_nonpharmad:7
The following lib versions is necessary to execute the current swissindex plugin
Note
But I cannot install rack 1.0.0 on server
# gem install rack --version "=1.0.0" ERROR: could not find gem rack locally or in a repository
Make a gem manually from rake.gemspec in my local PC
masa@masa /usr/lib64/ruby/gems/1.8/gems/rack-1.0.0 $ sudo gem build rack.gemspec
and send it to server via scp and install it
Atc *---------+
|1
Product *--1 Sequence *--1 Package
Experiment (lib/oddb/util/server.rb#test)
def test
open("/home/masa/work/test1.dat","w") do |out|
open("/home/masa/work/test2.dat","w") do |out2|
out.print "total ATCs: ", ODDB::Drugs::Atc.all.length, "\n"
out.print "Total products: ", ODDB::Drugs::Product.all.length, "\n"
all_sequences = 0
all_packages = 0
no_atc_sequences = 0
count = 1
ODDB::Drugs::Product.all.each do |product|
all_sequences += product.sequences.length
product.sequences.each do |sequence|
all_packages += sequence.packages.length
unless sequence.atc
no_atc_sequences += 1
# out2.print count, "\t", sequence.cascading_name('de'), "\n"
count += 1
end
end
end
out.print "Total sequences: ", all_sequences, "\n"
out.print "Total sequences without ATC: ", no_atc_sequences, "\n"
out.print "Total packages: ", all_packages, "\n"
end
end
end
Run
masa@masa ~/ywesee/de.oddb.org $ bin/admin de.oddb> test
Result
total ATCs: 5693 Total products: 8410 Total sequences: 18105 Total sequences without ATC: 2859 Total packages: 42885
Updated
def atcless
out_dir = File.expand_path('../../../log', File.dirname(__FILE__))
FileUtils.mkdir_p out_dir
out_file = File.join(out_dir, 'atcless')
open(out_file,"w") do |out|
out.print "Total ATCs: ", ODDB::Drugs::Atc.all.length, "\n"
out.print "Total products: ", ODDB::Drugs::Product.all.length, "\n"
all_sequences = 0
all_packages = 0
atcless_sequences = []
ODDB::Drugs::Product.all.each do |product|
all_sequences += product.sequences.length
product.sequences.each do |sequence|
all_packages += sequence.packages.length
unless sequence.atc
if sequence.fachinfo.to_s == ""
atcless_sequences << [sequence.cascading_name('de'), '']
else
atcless_sequences << [sequence.cascading_name('de'), 'FI']
end
end
end
end
out.print "Total sequences: ", all_sequences, "\n"
out.print "Total sequences without ATC: ", atcless_sequences.uniq.length, "\n"
out.print "Total packages: ", all_packages, "\n"
out.print "\n"
out.print "ATC less sequence list\n"
atcless_sequences.uniq.sort.each_with_index do |seq, i|
out.print i+1, "\t", seq[1], "\t", seq[0], "\n"
end
end
end
Run
masa@masa ~/ywesee/de.oddb.org $ bin/admin de.oddb> atcless
Result
masa@masa ~/ywesee/de.oddb.org $ head log/atcless -n 20 Total ATCs: 5693 Total products: 8410 Total sequences: 18105 Total sequences without ATC: 1779 Total packages: 42885 ATC less sequence list 1 5 Fu Cell 2 A Risedronsaeureratihpo 3 FI ACC Hexal AG 4 ASTHMA BRONCHIALE STAUFEN 5 Abseamed 6 Acc Akut Z Hustenloese 7 Acemetacin Sandoz 60mg 8 Acetylcystein Siga Mg 9 Acic Hexal 10 Aciclo Basics Mg 11 FI Aciclovir Lindo 12 Aciclovir Mayne 13 Acivir Actavis Mg ...
Commit
Problem
Example
