API sync scripts

These were used to migrate existing API data from the .125 server to the .124 server.

apisync.pl
#! /usr/bin/perl

use strict vars;
use DBI;
use Time::ParseDate;

### Config params ###
my $curDbName = 'pvsadmin';
my $curDbHost = '209.18.106.124';
my $curDbUser = 'web';
my $curDbPass = 'XXXXXXX';
my $curDbPort = '5432';

my $oldDbName = 'pvsadmin';
my $oldDbHost = '209.18.106.125';
my $oldDbUser = 'web';
my $oldDbPass = 'XXXXXXX';
my $oldDbPort = '5432';
### End config ###

my $curdbh = DBI->connect("dbi:Pg:dbname=$curDbName;
                               host=$curDbHost;
                               port=$curDbPort"
,
                               $curDbUser,
                               $curDbPass,
                               { AutoCommit => 1 }) or die $DBI::errstr;

my $olddbh = DBI->connect("dbi:Pg:dbname=$oldDbName;
                               host=$oldDbHost;
                               port=$oldDbPort"
,
                               $oldDbUser,
                               $oldDbPass,
                               { AutoCommit => 0 }) or die $DBI::errstr;

# Check for API keys that are in old but NOT in current DB (these will need
# to be added)

my $getKeys = "SELECT * FROM misc_userapi WHERE key <> ''";
my $curkeys = $curdbh->selectall_hashref($getKeys, 'key')
    or die $DBI::errstr;
=pod
foreach my $key(keys %$curkeys) {
    print "$key\t$curkeys->{$key}->{'last_payment'}\n";
}
=cut


my $oldkeys = $olddbh->selectall_hashref($getKeys, 'key')
    or die $DBI::errstr;
=pod
foreach my $key(keys %$oldkeys) {
    print "$key\t$oldkeys->{$key}->{'last_payment'}\n";
}
=cut


print "Keys in old DB that aren't in current DB:\n";
my $missingKeys = {};
foreach my $key(keys %$oldkeys) {
    if(!exists $curkeys->{$key}) {
        $missingKeys->{$key} = 1;
        print "$key\t$oldkeys->{$key}->{'last_payment'}\n";
    }
}
exit if(keys %$missingKeys <= 0);

print "Fetching data from old DB:\n";
my $sth1 = $olddbh->prepare("SELECT * FROM misc_userapi WHERE key = ?");
my $sth2 = $olddbh->prepare("SELECT * FROM misc_userprofile WHERE user_api_id = ?");
my $sth3 = $olddbh->prepare("SELECT * FROM auth_user WHERE id = ?");

my $ith3 = $curdbh->prepare("INSERT INTO auth_user VALUES(DEFAULT,?,?,?,?,?,?,?,?,?,?) RETURNING id");
my $ith1 = $curdbh->prepare("INSERT INTO misc_userapi VALUES(DEFAULT,?,?,?,?,?,?,?,?,?,?,?,?) RETURNING user_api_id");
my $ith2 = $curdbh->prepare("INSERT INTO misc_userprofile VALUES(DEFAULT,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) RETURNING id");

foreach my $key(keys %$missingKeys) {
    $| = 1;
    # Manual processing here...
    if($key =~ /^ca8e386|65a5717|f5d978e|bd6030c|7645dd5|0cca24d|f2efa0|562b937|8e91361|a43db30|4716a4b/)
    {
        print "Manually processing $key...\n";
       
        # Get old records
        $sth1->execute($key) or die $DBI::errstr;
        my $sth1ref = $sth1->fetch();
        $sth2->execute($sth1ref->[0]) or die $DBI::errstr;
        my $sth2ref = $sth2->fetch();
        $sth3->execute($sth2ref->[1]) or die $DBI::errstr;
        my $sth3ref = $sth3->fetch();
        my $email = $sth3ref->[4];
        print "email: $email...";

        # Insert new API record, get that new user_api_id
        my $ith1 = $curdbh->prepare("INSERT INTO misc_userapi VALUES(DEFAULT,?,?,?,?,?,?,?,?,?,?,?,?) RETURNING user_api_id");
        my @ith1_bind_vals = @{$sth1ref}[1..scalar @{$sth1ref}-1];
        $ith1->execute(@ith1_bind_vals) or die $DBI::errstr;
        my $user_api_id = $ith1->fetch()->[0];

        # Get user_id on current db
        my $sth3cur = $curdbh->prepare("SELECT id FROM auth_user WHERE email = ?");
        $sth3cur->execute($email);
        my $user_id = $sth3cur->fetch()->[0];

        # Update misc_userprofile with new user_api_id using
        # user_id as the lookup key
        my $ith2cur = $curdbh->prepare("UPDATE misc_userprofile SET user_api_id = ? WHERE user_id = ?");
        $ith2cur->execute($user_api_id, $user_id);
        print "done!\n";
        next;
    }

    # Go ahead and copy records over, no existing records
    print "Inserting record for key: $key...";
    $sth1->execute($key) or die $DBI::errstr;
    my $sth1ref = $sth1->fetch();
    $sth2->execute($sth1ref->[0]) or die $DBI::errstr;
    my $sth2ref = $sth2->fetch();
    $sth3->execute($sth2ref->[1]) or die $DBI::errstr;
    my $sth3ref = $sth3->fetch();

    my @ith3_bind_vals = @{$sth3ref}[1..scalar @{$sth3ref}-1];
    $ith3->execute(@ith3_bind_vals) or die $DBI::errstr;
    my $user_id = $ith3->fetch()->[0];
    print "new user_id: $user_id...";
    my @ith1_bind_vals = @{$sth1ref}[1..scalar @{$sth1ref}-1];
    $ith1->execute(@ith1_bind_vals) or die $DBI::errstr;
    my $user_api_id = $ith1->fetch()->[0];
    print "new user_api_id: $user_api_id...";
    $sth2ref->[1] = $user_id;
    $sth2ref->[11] = $user_api_id;
    my @ith2_bind_vals = @{$sth2ref}[1..scalar @{$sth2ref}-1];
    $ith2->execute(@ith2_bind_vals);'
    print "done!\n";
}

END {
    $curdbh->disconnect();
    $olddbh->disconnect();
}


apiUpdateLastPayment.pl
#! /usr/bin/perl

use strict;
use DBI;
use Time::ParseDate;

### Config params ###
my $curDbName = 'pvsadmin';
my $curDbHost = '209.18.106.124';
my $curDbUser = 'web';
my $curDbPass = 'XXXXXX';
my $curDbPort = '5432';

my $oldDbName = 'pvsadmin';
my $oldDbHost = '209.18.106.125';
my $oldDbUser = 'web';
my $oldDbPass = 'XXXXXXX';
my $oldDbPort = '5432';
### End config ###

my $curdbh = DBI->connect("dbi:Pg:dbname=$curDbName;
                               host=$curDbHost;
                               port=$curDbPort"
,
                               $curDbUser,
                               $curDbPass,
                               { AutoCommit => 1 }) or die $DBI::errstr;

my $olddbh = DBI->connect("dbi:Pg:dbname=$oldDbName;
                               host=$oldDbHost;
                               port=$oldDbPort"
,
                               $oldDbUser,
                               $oldDbPass,
                               { AutoCommit => 0 }) or die $DBI::errstr;

# Check for API keys that are in old but NOT in current DB (these will need
# to be added)

my $getKeys = "SELECT user_api_id, key, last_payment FROM misc_userapi WHERE key <> ''";
my $curkeys = $curdbh->selectall_hashref($getKeys, 'key')
    or die $DBI::errstr;
=pod
foreach my $key(keys %$curkeys) {
    print "$key\t$curkeys->{$key}->{'last_payment'}\n";
}
=cut


my $oldkeys = $olddbh->selectall_hashref($getKeys, 'key')
    or die $DBI::errstr;
=pod
foreach my $key(keys %$oldkeys) {
    print "$key\t$oldkeys->{$key}->{'last_payment'}\n";
}
=cut


# Check for API keys in current DB with registration dates LESS THAN the
# corresponding keys in the old DB (these will need to be updated)

print "Keys in current DB with registration dates earlier than those in old DB:\n";
my $cursth = $curdbh->prepare("UPDATE misc_userapi SET last_payment=? WHERE key=?");
foreach my $key(keys %$curkeys) {
    my $curkeyTS = parsedate($curkeys->{$key}->{'last_payment'});
    my $oldkeyTS = parsedate($oldkeys->{$key}->{'last_payment'});
    if(defined($curkeyTS) && $curkeyTS < $oldkeyTS) {
        print "$key\t$curkeys->{$key}->{'last_payment'}\t$oldkeys->{$key}->{'last_payment'}\n";
        print "Updating...";
        if($cursth->execute($oldkeys->{$key}->{'last_payment'}, $key) == 1) {
            print "done!\n";
        }
        else {
            print "failed!\n";
        }
    }
}

END {
    $curdbh->disconnect();
    $olddbh->disconnect();
}



CategoryITDefunct
There are no comments on this page.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki