# Copyright 1999-2016. Parallels IP Holdings GmbH. All Rights Reserved. package MigrationDumpStatus; use strict; use DumpStatus; use Logging; use XmlNode; use vars qw|@ISA|; @ISA = qw|DumpStatus|; sub _init { my ($self, $filename) = @_; $self->{filename} = $filename; Logging::debug("-" x 60); Logging::debug("Migration status reporting initialized."); Logging::debug("Status file: $filename"); Logging::debug("-" x 60); } sub start { my ($self, $clients, $domains) = @_; $self->{current_client} = undef; $self->{current_domain} = undef; $self->{clients_count} = $clients; $self->{domains_count} = $domains; $self->{clients_done} = 0; $self->{domains_done} = 0; $self->_publish(); } sub startDomain { my ($self, $domain) = @_; $self->{current_domain} = $domain; $self->_publish(); } sub endDomain { my ($self, $domain) = @_; $self->{current_domain} = undef; ++$self->{domains_done}; $self->_publish(); } sub startClient { my ($self, $client) = @_; $self->{current_client} = $client; $self->_publish(); } sub endClient { my ($self, $client) = @_; $self->{current_client} = undef; ++$self->{clients_done}; $self->_publish(); } sub finishObjects { my ($self) = @_; $self->{current_client} = undef; $self->{current_domain} = undef; $self->_publish(); } sub finish { } sub _publish { my ($self) = @_; my $tmpfile = $self->{filename} . ".tmp"; open STATUS, ">$tmpfile"; binmode STATUS; my $xmlRoot = XmlNode->new('agent-dump-status' ); $xmlRoot->setAttribute( 'total-domains', $self->{domains_count} ); $xmlRoot->setAttribute( 'total-accounts', $self->{clients_count} ); $xmlRoot->setAttribute( 'completed-domains', $self->{domains_done}<=$self->{domains_count} ? $self->{domains_done} : $self->{domains_count} ); $xmlRoot->setAttribute( 'completed-accounts', $self->{clients_done}<=$self->{clients_count} ? $self->{clients_done} : $self->{clients_count} ); if ($self->{current_domain}) { my $objectNode = XmlNode->new('current-object', 'content' => $self->{current_domain}); $objectNode->setAttribute('type', 'domain'); $xmlRoot->addChild($objectNode); } elsif ($self->{current_client}) { my $objectNode = XmlNode->new('current-object', 'content' => $self->{current_client}); $objectNode->setAttribute('type', 'account'); $xmlRoot->addChild($objectNode); } $xmlRoot->serialize(\*STATUS); close(STATUS); rename($tmpfile, $self->{filename}); } 1; # Local Variables: # mode: cperl # cperl-indent-level: 2 # indent-tabs-mode: nil # tab-width: 4 # End: