diff options
| author | Daniel Friesel <derf@finalrewind.org> | 2019-03-25 19:54:49 +0100 | 
|---|---|---|
| committer | Daniel Friesel <derf@finalrewind.org> | 2019-03-25 19:54:49 +0100 | 
| commit | 00efb2e32091605ddcc98e29698f55a44dea6cae (patch) | |
| tree | 2e5e125702414bf3b2c9c8549bb20e2cde4071c2 | |
| parent | edf46429339c3b2920787722e4a9d7e87cd5c33c (diff) | |
Move maintenance script to Mojolicious command
| -rw-r--r-- | lib/Travelynx/Command/maintenance.pm | 71 | ||||
| -rwxr-xr-x | maintenance.pl | 54 | 
2 files changed, 71 insertions, 54 deletions
| diff --git a/lib/Travelynx/Command/maintenance.pm b/lib/Travelynx/Command/maintenance.pm new file mode 100644 index 0000000..b9f5947 --- /dev/null +++ b/lib/Travelynx/Command/maintenance.pm @@ -0,0 +1,71 @@ +package Travelynx::Command::maintenance; +use Mojo::Base 'Mojolicious::Command'; + +use DateTime; + +has description => 'Prune unverified users etc'; + +has usage => sub { shift->extract_usage }; + +sub run { +	my ( $self, $filename ) = @_; + +	my $dbh = $self->app->dbh; + +	my $now = DateTime->now( time_zone => 'Europe/Berlin' ); +	my $verification_deadline = $now->subtract( hours => 48 )->epoch; + +	my $get_unverified_query +	  = $dbh->prepare( +qq{select email, extract(epoch from registered_at) from users where status = 0 and registered_at < to_timestamp(?);} +	  ); +	my $get_pending_query +	  = $dbh->prepare(qq{select num_tries from pending_mails where email = ?;}); +	my $set_pending_query +	  = $dbh->prepare( +qq{update pending_mails set num_tries = ?, last_try = to_timestamp(?) where email = ?;} +	  ); +	my $add_pending_query +	  = $dbh->prepare( +qq{insert into pending_mails (email, num_tries, last_try) values (?, ?, to_timestamp(?));} +	  ); +	my $drop_unverified_query +	  = $dbh->prepare( +qq{delete from users where status = 0 and registered_at < to_timestamp(?);} +	  ); + +	$dbh->begin_work; +	$get_unverified_query->execute($verification_deadline); +	while ( my @row = $get_unverified_query->fetchrow_array ) { +		my ( $mail, $reg_date ) = @row; + +		if ($mail) { +			$get_pending_query->execute($mail); +			my $rows = $get_pending_query->fetchall_arrayref; + +			if ( @{$rows} ) { +				my $num_tries = $rows->[0][0]; +				$set_pending_query->execute( $num_tries + 1, $reg_date, $mail ); +			} +			else { +				$add_pending_query->execute( $mail, 1, $reg_date ); +			} +		} +	} +	$drop_unverified_query->execute($verification_deadline); +	printf( "Pruned %d unverified accounts from database\n", +		$drop_unverified_query->rows ); +	$dbh->commit; + +	$dbh->disconnect; +} + +1; + +__END__ + +=head1 SYNOPSIS + +  Usage: index.pl maintenance + +  Prunes unverified users. diff --git a/maintenance.pl b/maintenance.pl deleted file mode 100755 index fe7a220..0000000 --- a/maintenance.pl +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env perl - -use strict; -use warnings; -use 5.020; - -use DateTime; -use DBI; - -my $dbname = $ENV{TRAVELYNX_DB_FILE} // 'run/travelynx.sqlite'; -my $dbh = DBI->connect( "dbi:SQLite:dbname=${dbname}", q{}, q{} ); - -my $get_unverified_query -  = $dbh->prepare( -qq{select email, registered_at from users where status = 0 and registered_at < ?;} -  ); -my $get_pending_query -  = $dbh->prepare(qq{select num_tries from pending_mails where email = ?;}); -my $set_pending_query = $dbh->prepare( -	qq{update pending_mails set num_tries = ?, last_try = ? where email = ?;}); -my $add_pending_query -  = $dbh->prepare( -	qq{insert into pending_mails (email, num_tries, last_try) values (?, ?, ?);} -  ); -my $drop_unverified_query = $dbh->prepare( -	qq{delete from users where status = 0 and registered_at < ?;}); - -my $now = DateTime->now( time_zone => 'Europe/Berlin' ); -my $verification_deadline = $now->subtract( hours => 48 )->epoch; - -$dbh->begin_work; -$get_unverified_query->execute($verification_deadline); -while ( my @row = $get_unverified_query->fetchrow_array ) { -	my ( $mail, $reg_date ) = @row; - -	if ($mail) { -		$get_pending_query->execute($mail); -		my $rows = $get_pending_query->fetchall_arrayref; - -		if ( @{$rows} ) { -			my $num_tries = $rows->[0][0]; -			$set_pending_query->execute( $num_tries + 1, $reg_date, $mail ); -		} -		else { -			$add_pending_query->execute( $mail, 1, $reg_date ); -		} -	} -} -$drop_unverified_query->execute($verification_deadline); -printf( "Pruned %d unverified accounts from database\n", -	$drop_unverified_query->rows ); -$dbh->commit; - -$dbh->disconnect; | 
