package Test2::Harness::UI::Sweeper; use strict; use warnings; our $VERSION = '0.000127'; use Test2::Harness::UI::Util::HashBase qw{ config->guess_db_driver; my $interval = $params{interval} || $self->{+INTERVAL}; if ($db_type eq 'PostgreSQL') { $interval = "< NOW() - INTERVAL '$interval'"; } elsif ($db_type =~ m/mysql/i) { $interval = "< NOW() - INTERVAL $interval"; } else { die "Not sure how to format interval for '$db_type'"; } my $runs = $self->config->schema->resultset('Run')->search( { pinned => 'false', added => \$interval, }, ); my %counts; while (my $run = $runs->next()) { $counts{runs}++; my $jobs = $run->jobs; while (my $job = $jobs->next()) { $counts{jobs}++; if ($params{events}) { if ($params{subtests}) { $job->reportings->update({event_id => undef}); my $has_binary = $job->events->search({has_binary => 1}); while (my $e = $has_binary->next()) { $has_binary->binaries->delete; $e->Delete; } $job->events->delete; } else { $job->events->search({'-not' => {is_subtest => 1, nested => 0}})->delete; } } if ($params{job_fields}) { $job->job_fields->delete; } if ($params{jobs}) { $job->reportings->delete; $job->delete; } } if ($params{run_fields}) { $run->run_fields->delete; } if ($params{coverage}) { $run->coverages->delete; $run->update({has_coverage => 0}) unless $params{runs}; } if ($params{runs}) { $run->reportings->delete; $run->delete; } } if ($db_type =~ m/mysql/i) { my $dbh = $self->config->schema->storage->dbh; $dbh->do('ANALYZE TABLE ' . join ', ' => @TABLES); } return \%counts; } 1;