aboutsummaryrefslogtreecommitdiffstats
path: root/BSF/tools/fill_history.pl
diff options
context:
space:
mode:
Diffstat (limited to 'BSF/tools/fill_history.pl')
-rw-r--r--BSF/tools/fill_history.pl336
1 files changed, 0 insertions, 336 deletions
diff --git a/BSF/tools/fill_history.pl b/BSF/tools/fill_history.pl
deleted file mode 100644
index 01adacfd2..000000000
--- a/BSF/tools/fill_history.pl
+++ /dev/null
@@ -1,336 +0,0 @@
-#!/usr/bin/perl
-
-use warnings;
-use strict;
-use Getopt::Long;
-use DBI;
-use File::Basename;
-use Time::Local;
-use List::Util qw/shuffle min/;
-
-my %opt;
-GetOptions(
- \%opt,
- qw/dbname=s dbuser=s dbpass=s prefix=s
- total=i start_date=s end_date=s
- help/
- );
-
-if (defined($opt{help}))
-{
- print <<FIN;
-
-Fill the user comments table of Piwigo.
-
-Usage: pwg_fill_comments.pl --dbname=<database_name>
- --dbuser=<username>
- --dbpass=<password>
- --tagfile=<tags filename>
- [--prefix=<tables prefix>]
- [--help]
-
---dbname, --dbuser and --dbpass are connexion parameters.
-
---tagfile
-
---prefix : determines the prefix for your table names.
-
---help : show this help
-
-FIN
-
- exit(0);
-}
-
-my $usage = "\n\n".basename($0)." --help for help\n\n";
-
-foreach my $option (qw/dbname dbuser dbpass start_date end_date/) {
- if (not exists $opt{$option}) {
- die 'Error: '.$option.' is a mandatory option', $usage;
- }
-}
-
-$opt{prefix} = 'piwigo_' if (not defined $opt{prefix});
-my $dbh = DBI->connect(
- 'DBI:mysql:'.$opt{dbname},
- $opt{dbuser},
- $opt{dbpass}
-);
-
-my $query;
-my $sth;
-
-
-# retrieve all available users
-$query = '
-SELECT id
- FROM '.$opt{prefix}.'users
-';
-my @user_ids = keys %{ $dbh->selectall_hashref($query, 'id') };
-
-# set a list of IP addresses for each users
-my %user_IPs = ();
-foreach my $user_id (@user_ids) {
- for (1 .. 1 + int rand 5) {
- push(
- @{ $user_IPs{$user_id} },
- join(
- '.',
- map {1 + int rand 255} 1..4
- )
- );
- }
-}
-
-# use Data::Dumper; print Dumper(\%user_IPs); exit();
-
-# start and end dates
-my ($year,$month,$day,$hour,$min,$sec)
- = ($opt{start_date} =~ m/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/);
-my $start_unixtime = timelocal(0,0,0,$day,$month-1,$year);
-
-($year,$month,$day,$hour,$min,$sec)
- = ($opt{end_date} =~ m/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/);
-my $end_unixtime = timelocal(0,0,0,$day,$month-1,$year);
-
-# "tags from image" and "images from tag"
-$query = '
-SELECT image_id, tag_id
- FROM '.$opt{prefix}.'image_tag
-';
-my %image_tags = ();
-my %tag_images = ();
-my %related_tag_of = ();
-my @tags = ();
-$sth = $dbh->prepare($query);
-$sth->execute();
-while (my $row = $sth->fetchrow_hashref()) {
- push(
- @{$image_tags{$row->{image_id}}},
- $row->{tag_id}
- );
-
- push(
- @{$tag_images{$row->{tag_id}}},
- $row->{image_id}
- );
-
- push (
- @tags,
- $row->{tag_id}
- );
-}
-
-# foreach my $tag_id (keys %tag_images) {
-# printf(
-# "tag %5u: %5u images\n",
-# $tag_id,
-# scalar @{$tag_images{$tag_id}}
-# );
-# }
-# exit();
-
-# use Data::Dumper; print Dumper(\%tag_images); exit();
-
-# categories from image_id
-$query = '
-SELECT image_id, category_id
- FROM '.$opt{prefix}.'image_category
-';
-my %image_categories = ();
-my %category_images =();
-my %categories = ();
-$sth = $dbh->prepare($query);
-$sth->execute();
-while (my $row = $sth->fetchrow_hashref()) {
- push(
- @{$image_categories{$row->{image_id}}},
- $row->{category_id}
- );
-
- push(
- @{$category_images{$row->{category_id}}},
- $row->{image_id}
- );
-
- $categories{ $row->{category_id} }++;
-}
-
-my @images = keys %image_categories;
-my @categories = keys %categories;
-
-# use Data::Dumper;
-# print Dumper(\%image_categories);
-
-my @sections = (
- 'categories',
-# 'tags',
-# 'search',
-# 'list',
-# 'favorites',
-# 'most_visited',
-# 'best_rated',
-# 'recent_pics',
-# 'recent_cats',
-);
-
-my @inserts = ();
-
-USER : foreach my $user_id (@user_ids) {
- print 'user_id: ', $user_id, "\n";
-
- my $current_unixtime = $start_unixtime;
- my @IPs = @{ $user_IPs{$user_id} };
-
- VISIT : foreach my $visit_num (1..100_000) {
- print 'visit: ', $visit_num, "\n";
- my @temp_inserts = ();
- my $IP = (@IPs)[int rand @IPs];
- my $current_page = 0;
- my $visit_size = 10 + int rand 90;
- $current_unixtime+= 86_400 + int rand(86_400 * 30);
-
- my $section = $sections[int rand scalar @sections];
- # print 'section: ', $section, "\n";
-
- push(
- @temp_inserts,
- {
- section => $section,
- }
- );
-
- if ($section eq 'categories') {
- CATEGORY : foreach my $category_id (
- (shuffle @categories)[1..int rand scalar @categories]
- ) {
- # print 'category: ', $category_id, "\n";
- push(
- @temp_inserts,
- {
- category_id => $category_id,
- }
- );
-
- my @images = @{$category_images{$category_id}};
- IMAGE : foreach my $image_id (
- (shuffle @images)[1..min(10, scalar @images)]
- ) {
- push(
- @temp_inserts,
- {
- category_id => $category_id,
- image_id => $image_id,
- }
- );
- }
- }
- }
-
- if ($section eq 'tags') {
- # TODO
- }
-
- # transfert @temp_inserts to @inserts
- print 'temp_insert size: ', scalar @temp_inserts, "\n";
- foreach my $temp_insert (@temp_inserts) {
- $current_unixtime+= 5 + int rand 25;
- next VISIT if ++$current_page == $visit_size;
- last VISIT if $current_unixtime >= $end_unixtime;
-
- my $date = unixtime_to_mysqldate($current_unixtime);
- my $time = unixtime_to_mysqltime($current_unixtime);
-
- my ($year, $month, $day) = split '-', $date;
- my ($hour) = split ':', $time;
-
- $temp_insert->{date} = $date;
- $temp_insert->{time} = $time;
- $temp_insert->{year} = $year;
- $temp_insert->{month} = $month;
- $temp_insert->{day} = $day;
- $temp_insert->{hour} = $hour;
- $temp_insert->{IP} = $IP;
- $temp_insert->{section} = $section;
- $temp_insert->{user_id} = $user_id;
-
- push(@inserts, $temp_insert);
- }
- }
-}
-
-@inserts = sort {
- $a->{date} cmp $b->{date}
- or $a->{time} cmp $b->{time}
-} @inserts;
-
-if (scalar @inserts) {
- my @columns =
- qw/
- date time year month day hour
- user_id IP
- section category_id image_id
- /;
-
- my $question_marks_string = '(';
- $question_marks_string.= join(
- ',',
- map {'?'} @columns
- );
- $question_marks_string.= ')';
-
- my $query = '
-INSERT INTO '.$opt{prefix}.'history
- ('.join(', ', @columns).')
- VALUES
-';
- $query.= join(
- ',',
- map {$question_marks_string} (1 .. scalar @inserts)
- );
- $query.= '
-';
-
- # print $query, "\n";
-
- my @values = ();
-
- foreach my $insert (@inserts) {
- push(
- @values,
- map {
- $insert->{$_}
- } @columns
- );
- }
-
- $sth = $dbh->prepare($query);
- $sth->execute(@values)
- or die 'cannot execute insert query';
-}
-
-sub unixtime_to_mysqldate {
- my ($unixtime) = @_;
-
- ($sec,$min,$hour,$day,$month,$year) = localtime($unixtime);
-
- return sprintf(
- '%d-%02d-%02d',
- $year+1900,
- $month+1,
- $day,
- );
-}
-
-sub unixtime_to_mysqltime {
- my ($unixtime) = @_;
-
- ($sec,$min,$hour,$day,$month,$year) = localtime($unixtime);
-
- return sprintf(
- '%d:%d:%d',
- $hour,
- $min,
- $sec
- );
-}