view · edit · sidebar · attach · print · history

20110506-swissindex_pharma_plugin

<< | Index | >>


  1. Update package out_of_trade flag
  2. Prepare to commit swissindex plugin

Goal/Estimate/Evaluation
  • SwissindexPlugin / 100% / 80%
Milestones
  • Check log
  • Add a method to check pharmacode
  • Run
  • Read the process of update_package swissmedic
  • Prepare swissindex plugin to be committed
Summary
Commits

Update package out_of_trade flag

Log (oddbd console)

WARNING:  nonstandard use of \' in a string literal
LINE 3:         AND search_term = 'fraxiparine multi, 9\'500 u.i. an...
                                  ^
HINT:  Use '' to write quotes in strings, or use the escape string syntax (E'...').
/usr/lib64/ruby/site_ruby/1.8/odba/cache.rb:324: [BUG] Segmentation fault
ruby 1.8.6 (2009-06-08) [x86_64-linux]

Abgebrochen

bin/admin

masa@masa ~/ywesee/oddb.org $ bin/admin
ch.oddb> Updater.new(self).update_package_trade_status_by_swissindex
-> connection closed

Note

  • It ends with something
  • The log file, result_update_swissindex_package_trade_status.dat, has been outputted

New Process

  • Check a pharmacode by swissindex, then if there is no pharmacode in oddb, update the pharmacode in oddb

Updated src/plugin/swissindex.rb#update_package_trade_status

    def update_package_trade_status
      out_of_trade_true_list  = []
      out_of_trade_false_list = []
      update_pharmacode_list  = []
      log = open('/home/masa/work/result_update_swissindex_log.dat', 'w')
      count = 1
      start_time = Time.now
      @app.each_package do |pack|
        SWISSINDEX_PHARMA_SERVER.session do |swissindex|
          if item = swissindex.search(pack.barcode.to_s)
            # not change flag
            # but just save the list
            out_of_trade_false_list << pack

            # check pharmacode
            if pack.pharmacode and pharmacode = item[:phar]
              update_pharmacode_list << [pack, pharmacode]
            end
          else
            out_of_trade_true_list << pack
          end
          sleep(0.05)
        end
        estimate = (Time.now - start_time) * @app.package_count / count
        log.print count " / ", @app.package_count, "\t", pack.barcode, "\t estimate: ", "%.2f" % (estimate/60), " [m] ", "%.2f" % (estimate/60/60), " [h]\n"
        count += 1
      end
      log.close

      # for debug
      open('/home/masa/work/result_update_swissindex_package_trade_status.dat', 'w') do |out|
        out.print "out_of_trade true list\n"
        out.print out_of_trade_true_list.map{|x| x.barcode}.join("\n"), "\n"
        out.print "\n"
        out.print "out_of_trade false list\n"
        out.print out_of_trade_false_list.map{|x| x.barcode}.join("\n"), "\n"
        out.print "\n"
        out.print "updte_pharmacode_list\n"
        out.print update_pharmacode_list.map{|x, y| x.barcode.to_s + ", " + y.to_s}.join("\n"), "\n"
      end

      #
      # change flag
      #

      #out_of_trade_true_list << @app.package('883519')
      #out_of_trade_false_list << @app.package('883519')
      open('/home/masa/work/result_update_swissindex_out_of_trade_true.dat', 'w') do |out|
        out_of_trade_true_list.each do |pack|
          unless pack.out_of_trade
            @app.update(pack.pointer, {:out_of_trade => true}, :refdata)
            out.print pack.barcode, "\n"
          end
        end
      end


      open('/home/masa/work/result_update_swissindex_out_of_trade_false.dat', 'w') do |out|
        out_of_trade_false_list.each do |pack|
          if pack.out_of_trade
            @app.update(pack.pointer, {:out_of_trade => false, :refdata_override => false}, :refdata)
            out.print pack.barcode, "\n"
          end
        end
      end

      #
      # update pharmacode
      #
      open('/home/masa/work/result_update_swissindex_pharmacode.dat', 'w') do |out|
        update_pharmacode_list.each do |pack, pharmacode|
          @app.update(pack.pointer, {:pharmacode => pharmacode}, :bag)
          out.print pack.barcode, "\t", pharmacode, "\n"
        end
      end

    end

Note

  • At the moment, for debug, some local specific code is inserted
  • Actually, the updating of pharmacodes should be separated from the method

Run

  • oddbd
  • ext/swissindex/bin/swissindex_pharmad
  • bin/adim
 masa@masa ~/ywesee/oddb.org $ bin/admin
 ch.oddb> Updater.new(self).update_package_trade_status_by_swissindex

Add a process

  • If there is a pharmacode in oddb and there is NOT the pharmacode in swissindex, then delete the pharmacode from oddb

Updated src/plugin/swissindex.rb#update_package_trade_status

    def update_package_trade_status
      out_of_trade_true_list  = []
      out_of_trade_false_list = []
      update_pharmacode_list  = []
      delete_pharmacode_list  = []
      log = open('/home/masa/work/result_update_swissindex_log.dat', 'w')
      count = 1
      start_time = Time.now
      @app.each_package do |pack|
        SWISSINDEX_PHARMA_SERVER.session do |swissindex|
          if item = swissindex.search(pack.barcode.to_s)
            # not change flag
            # but just save the list
            out_of_trade_false_list << pack

            # check pharmacode
            if !pack.pharmacode and pharmacode = item[:phar]
              update_pharmacode_list << [pack, pharmacode]
            end
          else
            out_of_trade_true_list << pack

            # check pharmacode
            if pack.pharmacode
              delete_pharmacode_list << pack
            end
          end
          sleep(0.05)
        end

        estimate = (Time.now - start_time) * @app.package_count / count
        log.print count, " / ", @app.package_count, "\t", pack.barcode, "\t estimate: ", "%.2f" % (estimate/60), " [m] ", "%.2f" % (estimate/60/60), " [h]"
        rest = estimate - (Time.now - start_time)
        log.print "in: ", "%.2f" % (rest/60), " [m] ", "%.2f" % (rest/60/60), " [h]\n"
        count += 1
      end
      log.close

      # for debug
      open('/home/masa/work/result_update_swissindex_package_trade_status.dat', 'w') do |out|
        out.print "out_of_trade true list\n"
        out.print out_of_trade_true_list.map{|x| x.barcode}.join("\n"), "\n"
        out.print "\n"
        out.print "out_of_trade false list\n"
        out.print out_of_trade_false_list.map{|x| x.barcode}.join("\n"), "\n"
        out.print "\n"
        out.print "updte_pharmacode_list\n"
        out.print update_pharmacode_list.map{|x, y| x.barcode.to_s + ", " + y.to_s}.join("\n"), "\n"
        out.print "\n"
        out.print "delete_pharmacode_list\n"
        out.print delete_pharmacode_list.map{|x| x.barcode}.join("\n"), "\n"
      end

      #
      # change flag
      #

      #out_of_trade_true_list << @app.package('883519')
      #out_of_trade_false_list << @app.package('883519')
      open('/home/masa/work/result_update_swissindex_out_of_trade_true.dat', 'w') do |out|
        out_of_trade_true_list.each do |pack|
          unless pack.out_of_trade
            @app.update(pack.pointer, {:out_of_trade => true}, :refdata)
            out.print pack.barcode, "\n"
          end
        end
      end

      open('/home/masa/work/result_update_swissindex_out_of_trade_false.dat', 'w') do |out|
        out_of_trade_false_list.each do |pack|
          if pack.out_of_trade
            @app.update(pack.pointer, {:out_of_trade => false, :refdata_override => false}, :refdata)
            out.print pack.barcode, "\n"
          end
        end
      end

      #
      # update pharmacode
      #
      open('/home/masa/work/result_update_swissindex_pharmacode.dat', 'w') do |out|
        out.print "update_pharmacode\n"
        update_pharmacode_list.each do |pack, pharmacode|
          @app.update(pack.pointer, {:pharmacode => pharmacode}, :bag)
          out.print pack.barcode, "\t", pharmacode, "\n"
        end

        out.print "\ndelete_pharmacode\n"
        delete_pharmacode_list.each do |pack|
          @app.update(pack.pointer, {:pharmacode => nil}, :bag)
          out.print pack.barcode, "\t", pharmacode, "\n"
        end
      end

    end

Note

  • It is not running (10:30)

Memo (Estimate calculation time)

total_iteration = 100

start_time = Time.now
total_iteration.times do |i|
  sleep rand
  elapsed_time = Time.now - start_time
  estimate_time = elapsed_time * total_iteration / (i+1)
  print i, "\tEstimate time: ", "%.2f" % estimate_time, " [s]\n"
end
end_time = Time.now
print "Actual time: ", end_time - start_time, " [s]\n"

Result

how to make a graph from the data above

 gnuplot make_graph.20110506.txt

Note

  • The estimation will be close to the actual value after 50 % of run
  • I guess the tendency depends on the variance of each iteration time

Prepare to commit swissindex plugin

view · edit · sidebar · attach · print · history
Page last modified on May 09, 2011, at 07:23 AM