diff --git a/lib/WebGUI/PassiveAnalytics/Flow.pm b/lib/WebGUI/PassiveAnalytics/Flow.pm
index 2161658a4..3836249e0 100644
--- a/lib/WebGUI/PassiveAnalytics/Flow.pm
+++ b/lib/WebGUI/PassiveAnalytics/Flow.pm
@@ -13,7 +13,7 @@ use WebGUI::Workflow;
use WebGUI::Workflow::Instance;
use WebGUI::User;
use WebGUI::Text;
-use WebGUI::ProgressBar;
+use WebGUI::Fork;
=head1 NAME
@@ -60,7 +60,7 @@ sub canView {
#----------------------------------------------------------------------------
-=head2 exportSomething ( session, sth, filename )
+=head2 exportSomething ( $process, $data )
Generates CSV data from the supplied statement handle and generates
a temporary WebGUI::Storage object containing that data in the requested
@@ -69,42 +69,56 @@ filename.
This subroutine also does a setRedirect to the URL of the file in
the storage object.
-=head3 session
+=head3 $process
-Session variable, to set the http redirect correctly.
+A WebGUI::Fork object, to let the user know what's going on.
-=head3 sth
+=head3 $data
-Statement handle for reading data and getting column names
+Hash ref of data.
+
+=head3 tableName
+
+The name of the table where data will be pulled and translated into CSV.
=head3 filename
-The name of the file to create inside the storage object.
+The name of the file to generate
=cut
sub exportSomething {
- my ($session, $sth, $filename) = @_;
- my $pb = WebGUI::ProgressBar->new($session);
+ my ($process, $data) = @_;
+ my $session = $process->session;
my $i18n = WebGUI::International->new($session, 'Asset_Thingy');
- $pb->start($i18n->get('export label'), $session->url->extras('adminConsole/passiveAnalytics.png'));
- $pb->update($i18n->get('Creating column headers'));
my $storage = WebGUI::Storage->createTemp($session);
+ open my $CSV, '>', $storage->getPath($data->{filename});
+ my $sth = $session->db->read('select SQL_CALC_FOUND_ROWS * from '.$data->{tableName});
+ my %status = (
+ current => 0,
+ message => '',
+ total => $session->db->quickScalar('select found_rows()') + 0,
+ );
+ my $update = sub {
+ $process->update( sub { JSON::to_json(\%status) } );
+ };
+ $update->();
my @columns = $sth->getColumnNames;
- my $csvData = WebGUI::Text::joinCSV( @columns ). "\n";
- $pb->update($i18n->get('Writing data'));
- my $rowCounter=0;
+ print $CSV WebGUI::Text::joinCSV( @columns ). "\n";
+ my $rowCounter = 0;
+ $status{message} = $i18n->get('Writing data');
+ $update->();
while (my $row = $sth->hashRef()) {
my @row = @{ $row }{@columns};
- $csvData .= WebGUI::Text::joinCSV(@row) . "\n";
- if (! ++$rowCounter % 25) {
- $pb->update($i18n->get('Writing data'));
- }
+ print $CSV WebGUI::Text::joinCSV(@row) . "\n";
+ ++$status{current };
+ $update->();
}
- $storage->addFileFromScalar($filename, $csvData);
- $session->http->setRedirect($storage->getUrl($filename));
- $pb->update(sprintf q|%s|, $session->url->page('op=passiveAnalytics;func=editRuleflow'), sprintf($i18n->get('Return to %s'), $i18n->get('Passive Analytics','PassiveAnalytics')));
- return $pb->finish($storage->getUrl($filename));
+ close $CSV;
+ $sth->finish;
+ $process->setRedirect($storage->getUrl($data->{filename}));
+ $status{message} = sprintf '%s', $session->url->page('op=passiveAnalytics;func=editRuleflow'), 'Return to Passive Analytics';
+ $update->();
}
#-------------------------------------------------------------------
@@ -348,8 +362,24 @@ Dump the contents of the bucket log.
sub www_exportBucketData {
my ($session) = @_;
- my $bucket = $session->db->read('select * from bucketLog order by userId, Bucket, timeStamp');
- exportSomething($session, $bucket, 'bucketData.csv');
+
+ my $process = WebGUI::Fork->start(
+ $session,
+ __PACKAGE__, 'exportSomething',
+ { tableName => 'bucketLog', filename => 'bucketData.csv', },
+ );
+ my $i18n = WebGUI::International->new($session, 'PassiveAnalytics');
+ $session->http->setRedirect(
+ $session->url->page(
+ $process->contentPairs(
+ 'ProgressBar', {
+ icon => 'passiveAnalytics',
+ title => $i18n->get('Export bucket data'),
+ proceed => $session->url->page('op=passiveAnalytics;func=editRuleflow'),
+ },
+ ),
+ ),
+ );
return "redirect";
}
@@ -363,8 +393,23 @@ Dump the contents of the delta log.
sub www_exportDeltaData {
my ($session) = @_;
- my $delta = $session->db->read('select * from deltaLog order by userId, timeStamp');
- exportSomething($session, $delta, 'deltaData.csv');
+ my $process = WebGUI::Fork->start(
+ $session,
+ __PACKAGE__, 'exportSomething',
+ { tableName => 'deltaLog', filename => 'deltaData.csv', },
+ );
+ my $i18n = WebGUI::International->new($session, 'PassiveAnalytics');
+ $session->http->setRedirect(
+ $session->url->page(
+ $process->contentPairs(
+ 'ProgressBar', {
+ icon => 'passiveAnalytics',
+ title => $i18n->get('Export delta data'),
+ proceed => $session->url->page('op=passiveAnalytics;func=editRuleflow'),
+ },
+ ),
+ ),
+ );
return "redirect";
}
@@ -378,8 +423,23 @@ Dump the contents of the raw log.
sub www_exportLogs {
my ($session) = @_;
- my $raw = $session->db->read('select * from passiveLog order by userId, timeStamp');
- exportSomething($session, $raw, 'passiveData.csv');
+ my $process = WebGUI::Fork->start(
+ $session,
+ __PACKAGE__, 'exportSomething',
+ { tableName => 'passiveLog', filename => 'passiveData.csv', },
+ );
+ my $i18n = WebGUI::International->new($session, 'PassiveAnalytics');
+ $session->http->setRedirect(
+ $session->url->page(
+ $process->contentPairs(
+ 'ProgressBar', {
+ icon => 'passiveAnalytics',
+ title => $i18n->get('Export raw logs'),
+ proceed => $session->url->page('op=passiveAnalytics;func=editRuleflow'),
+ },
+ ),
+ ),
+ );
return "redirect";
}
diff --git a/lib/WebGUI/i18n/English/PassiveAnalytics.pm b/lib/WebGUI/i18n/English/PassiveAnalytics.pm
index 7e2b59eed..e5777cd0b 100644
--- a/lib/WebGUI/i18n/English/PassiveAnalytics.pm
+++ b/lib/WebGUI/i18n/English/PassiveAnalytics.pm
@@ -201,6 +201,12 @@ home\?func=match
context => q|Error message|,
},
+ 'error creating workflow' => {
+ message => q|Error creating the workflow instance.|,
+ lastUpdated => 0,
+ context => q|Error message|,
+ },
+
};
1;