Added Simba/CA/DBI.pm and convert_mysql_to_pgsql to repository.
This commit is contained in:
parent
756d9ce01a
commit
317671456d
3
MANIFEST
3
MANIFEST
|
@ -1,4 +1,3 @@
|
|||
backtrace
|
||||
Build.PL
|
||||
doc/.vimrc
|
||||
doc/arch.obj
|
||||
|
@ -22,8 +21,6 @@ scripts/convert_db_to_v2
|
|||
scripts/convert_mysql_to_pgsql
|
||||
scripts/da
|
||||
scripts/simba_export
|
||||
space_by_link_count
|
||||
space_by_link_count.out
|
||||
t/00_da.t
|
||||
t/01_ca.t
|
||||
t/02_ca.t
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
=head1 NAME
|
||||
|
||||
Simba::CA::DBI
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
DBI backend of the Simba Collecting Agent.
|
||||
|
||||
=cut
|
||||
|
||||
package Simba::CA::DBI;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use base 'Simba::CA';
|
||||
|
|
@ -0,0 +1,118 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
use Getopt::Long;
|
||||
use DBI;
|
||||
|
||||
my $mysql_conn;
|
||||
my $pgsql_conn;
|
||||
GetOptions(
|
||||
'mysql:s' => \$mysql_conn,
|
||||
'pgsql:s' => \$pgsql_conn,
|
||||
);
|
||||
|
||||
die unless ($mysql_conn && $pgsql_conn);
|
||||
|
||||
my $dbh_my = DBI->connect(read_conn($mysql_conn), {RaiseError => 1});
|
||||
my $dbh_pg = DBI->connect(read_conn($pgsql_conn), {AutoCommit => 0, RaiseError => 1});
|
||||
|
||||
print STDERR "deleting sessions\n";
|
||||
$dbh_pg->do("delete from sessions");
|
||||
print STDERR "deleting files\n";
|
||||
$dbh_pg->do("delete from files");
|
||||
print STDERR "deleting filesets\n";
|
||||
$dbh_pg->do("delete from filesets");
|
||||
|
||||
print STDERR "copying sessions\n";
|
||||
my $sth_my = $dbh_my->prepare("select id, start_date, end_date, prefix from sessions");
|
||||
my $sth_pg = $dbh_pg->prepare("insert into sessions(id, start_date, end_date, prefix) values(?, ?, ?, ?)");
|
||||
$sth_my->execute();
|
||||
while (my @r = $sth_my->fetchrow_array) {
|
||||
$sth_pg->execute(@r);
|
||||
}
|
||||
|
||||
print STDERR "copying filesets\n";
|
||||
$sth_my = $dbh_my->prepare("select id, host, dir, options from filesets");
|
||||
$sth_pg = $dbh_pg->prepare("insert into filesets(id, host, dir, options) values(?, ?, ?, ?)");
|
||||
$sth_my->execute();
|
||||
while (my @r = $sth_my->fetchrow_array) {
|
||||
$sth_pg->execute(@r);
|
||||
}
|
||||
|
||||
my $t0 = time;
|
||||
my $c = 0;
|
||||
print STDERR "copying files\n";
|
||||
$sth_my = $dbh_my->prepare("select id, path, fileset from files");
|
||||
$sth_pg = $dbh_pg->prepare("insert into files(id, path, fileset) values(?, ?, ?)");
|
||||
$sth_my->execute();
|
||||
while (my @r = $sth_my->fetchrow_array) {
|
||||
$sth_pg->execute(@r);
|
||||
if (++$c % 1000 == 0) {
|
||||
my $dt = time - $t0;
|
||||
printf "\t%6d %6.1f %6.1f\n", $c, $dt, $c / $dt;
|
||||
}
|
||||
}
|
||||
|
||||
$t0 = time;
|
||||
$c = 0;
|
||||
print STDERR "copying versions2\n";
|
||||
$sth_my = $dbh_my->prepare("select * from versions2");
|
||||
$sth_pg
|
||||
= $dbh_pg->prepare(
|
||||
"insert into versions2(id,
|
||||
file_type, file_size, file_mtime, file_owner, file_group, file_acl, file_unix_bits, file_rdev,
|
||||
checksum, file_linktarget)
|
||||
values(?,
|
||||
?, ?, ?, ?, ?, ?, ?, ?,
|
||||
?, ?)");
|
||||
$sth_my->execute();
|
||||
my %ub_names_to_bits = (
|
||||
setuid => '100',
|
||||
setgid => '010',
|
||||
sticky => '001',
|
||||
);
|
||||
while (my $r = $sth_my->fetchrow_hashref) {
|
||||
|
||||
my $file_unix_bits = '000';
|
||||
for (split(/,/, $r->{file_unix_bits})) {
|
||||
$file_unix_bits |= $ub_names_to_bits{$_};
|
||||
}
|
||||
$r->{file_unix_bits} = $file_unix_bits;
|
||||
$sth_pg->execute(@{$r}{qw(id file_type file_size file_mtime
|
||||
file_owner file_group file_acl file_unix_bits file_rdev
|
||||
checksum file_linktarget)}
|
||||
);
|
||||
if (++$c % 1000 == 0) {
|
||||
my $dt = time - $t0;
|
||||
printf "\t%6d %6.1f %6.1f\n", $c, $dt, $c / $dt;
|
||||
}
|
||||
}
|
||||
|
||||
$t0 = time;
|
||||
$c = 0;
|
||||
print STDERR "copying instances\n";
|
||||
$sth_my = $dbh_my->prepare("select id, file, file_id, date, online, session, version from instances");
|
||||
$sth_pg = $dbh_pg->prepare("insert into instances(id, file, file_id, date, online, session, version) values(?, ?, ?, ?, ?, ?, ?)");
|
||||
$sth_my->execute();
|
||||
while (my @r = $sth_my->fetchrow_array) {
|
||||
$sth_pg->execute(@r);
|
||||
if (++$c % 1000 == 0) {
|
||||
my $dt = time - $t0;
|
||||
printf "\t%6d %6.1f %6.1f\n", $c, $dt, $c / $dt;
|
||||
}
|
||||
}
|
||||
|
||||
$dbh_pg->commit();
|
||||
$dbh_pg->disconnect();
|
||||
$dbh_my->disconnect();
|
||||
|
||||
|
||||
sub read_conn {
|
||||
my ($filename) = @_;
|
||||
open (my $fh, '<', $filename) or die "cannot open $filename: $!";
|
||||
my $line = <$fh>;
|
||||
chomp($line);
|
||||
return split(/\s+/, $line);
|
||||
}
|
Loading…
Reference in New Issue