#!/usr/bin/perl -w BEGIN { use FindBin qw($RealBin); # warn $FindBin::RealBin; use lib ( "$RealBin/../lib", "$RealBin/../setup/hilis3_convert", '/home/raj/perl5/lib/perl5', ); use vars qw($SQL_FOR_TABLE $FOREIGN_KEYS $NOW); require "$RealBin/../setup/lims.sql"; } use strict; use warnings; use DateTime; use Data::Dumper; use Config::Tiny; use DB; use Main; use User; use YHHN; use Consent; use History; use LabTest; use Referrer; use Outreach; use PreScreen; use RequestLog; # use TestResult; # combined with LabTest now use RequestAudit; use PatientTrial; use ReferralSource; my $src = "$RealBin/../setup/hilis3_convert/.db"; my $cfg = Config::Tiny->read($src); # warn Dumper $cfg; exit; # switch db to test: # $cfg->{'_'}->{hilis4_db} = 'test'; # warn Dumper $cfg; exit; my $DB = DB->new(config => $cfg); # hashref of DBI & DBIx::Simple db handles for source(hilis3) & destination (hilis4) dbs: my $db = $DB->connect; open my $log, '>', "$RealBin/../setup/hilis3_convert/convert.log" or die $!; my %args = ( db => $db, sql => { table => $SQL_FOR_TABLE, }, path_to_app => "$RealBin/../", # /home/raj/www/apps/HMDS/trunk log_file => $log, ); my $start = DateTime->now(time_zone => 'local'); print $start->datetime, "\n"; # remove_fks(); # exit; # methods to run: #------------------------------------------------------------------------------# #do_referral_sources(); #do_users(); # includes email_addresses (slow) #do_referrers(); exit; #do_main_conversion(); #do_lab_tests(); #do_patient_trial(); #do_request_audit(); #do_consent(); #do_request_logs(); #do_prescreen(); #do_history(); #do_yhhn(); # MUST RUN THIS OR FK RESTORE FAILS ON patient_demographics TABLE & MUST BE DONE BEFORE OUTREACH - patient_demographics table do_outreach(); # requires hilis3 db *not older than* community_monitoring db ##do_test(); #------------------------------------------------------------------------------# # restore_fks(); $DB->disconnect($db); my $finish = DateTime->now(time_zone => 'local'); my $duration = $finish->subtract_datetime($start); printf "Process ran for %s hrs %s mins %s secs\n\n", $duration->hours, $duration->minutes, $duration->seconds; sub do_referral_sources { my $o = ReferralSource->new(%args); $o->convert; timer(); } sub do_referrers { my $o = Referrer->new(%args); $o->convert; timer(); } sub do_main_conversion { $args{cfg} = $cfg; # for Patient to anonymise names my $o = Main->new(%args); $o->convert; timer(); } sub do_users { my $o = User->new(%args); $o->convert; timer(); } sub do_history { my $o = History->new(%args); $o->convert; timer(); } sub do_patient_trial { my $o = PatientTrial->new(%args); $o->convert; timer(); } sub do_consent { my $o = Consent->new(%args); $o->convert; timer(); } sub do_request_audit { my $o = RequestAudit->new(%args); $o->convert; timer(); } sub do_lab_tests { my $o = LabTest->new(%args); $o->convert; timer(); } sub do_test_results { my $o = TestResult->new(%args); $o->convert; timer(); } sub do_request_logs { my $o = RequestLog->new(%args); $o->convert; timer(); } sub do_prescreen { my $o = PreScreen->new(%args); $o->convert; timer(); } sub do_outreach { my $o = Outreach->new(%args); $o->convert; timer(); } sub do_yhhn { my $o = YHHN->new(%args); $o->convert; timer(); } sub do_test { use Test; Test->new(%args)->lab_test_map; } sub remove_fks { my $dbh = $db->{dbh4}; print "Removing FK's .... "; foreach my $fk ( sort keys %$FOREIGN_KEYS ) { my ($tbl) = $fk =~ /fk_(.*)/; # print Dumper $tbl; my (@fks) = $FOREIGN_KEYS->{$fk} =~ /(\w+_ibfk_\d)/g; # print Dumper \@fks; map { # print qq!ALTER TABLE `$tbl` DROP FOREIGN KEY `$_`!; $db->{dbh4}->do( qq!ALTER TABLE `$tbl` DROP FOREIGN KEY `$_`! ); #print " .. OK\n"; } @fks; } print "done\n"; } sub restore_fks { my $dbh = $db->{dbh4}; print "Restoring FK's .... "; foreach my $fk ( sort keys %$FOREIGN_KEYS ) { #print $FOREIGN_KEYS->{$fk}; $dbh->do( $FOREIGN_KEYS->{$fk} ); #print " .. OK\n"; } print "done\n"; } sub timer { my @caller = caller(1); # warn Dumper \@caller; my $now = DateTime->now(time_zone => 'local'); my $event = _event_timer(); # get event time my $duration = $now->subtract_datetime($event); _event_timer($now); # set event time printf "%s() ran for %s mins %s secs\n", $caller[3], $duration->in_units('minutes'), $duration->seconds; } sub _event_timer { $NOW ||= $start; # if 1st call if (my $time = shift) { $NOW = $time; } else { return $NOW; } }