-
Notifications
You must be signed in to change notification settings - Fork 2
/
cpanstats-delete
207 lines (139 loc) · 4.75 KB
/
cpanstats-delete
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
#!/usr/bin/perl
use strict;
$|++;
my $VERSION = '0.12';
#----------------------------------------------------------------------------
=head1 NAME
cpanstats-delete - script to delete entries from the cpanstats database.
=head1 SYNOPSIS
perl cpanstats-delete --config=<file> [-a=0] [-d=0] [--file=<file>]
=head1 DESCRIPTION
Using the cpanstats database, which should in the local directory, extracts
all the data into the components of each page. Creates the graphs, then
creates each HTML page of the site.
=head1 OPTIONS
=over 4
=item --config
Configuration file contain database access details.
=item -a | --all
Delete all the NNTP ids greater than the specified number.
=item -d | --delete
Delete a single NNTP id.
=item --file
Named file used when deleting a list of NNTP ids.
=back
=cut
# -------------------------------------
# Library Modules
use Config::IniFiles;
use CPAN::Testers::Common::DBUtils;
use Getopt::Long;
use IO::File;
# -------------------------------------
# Variables
my (%options);
# -------------------------------------
# Program
##### INITIALISE #####
init_options();
##### MAIN #####
my @list = get_list();
for my $id (@list) {
print "Deleting ... $id\n";
$options{CPANSTATS}->do_query("DELETE from cpanstats WHERE id=$id");
$options{LITESTATS}->do_query("DELETE from cpanstats WHERE id=$id");
}
if($options{all}) {
$options{CPANSTATS}->do_query("DELETE from cpanstats WHERE id>$options{all}");
$options{LITESTATS}->do_query("DELETE from cpanstats WHERE id>$options{all}");
}
if($options{delete}) {
$options{CPANSTATS}->do_query("DELETE from cpanstats WHERE id=$options{delete}");
$options{LITESTATS}->do_query("DELETE from cpanstats WHERE id=$options{delete}");
}
# -------------------------------------
# Subroutines
=item get_list
Returns the list of NNTP ids from the named file.
=cut
sub get_list {
my @list;
my $file = $options{file} || return ();
die "file [$file] not found" unless(-f $file);
my $fh = IO::File->new($file) or die "Cannot open file [$file]: $!";
while(<$fh>) {
chomp;
my ($num) = (m/^(\d+)/);
push @list, $num if($num);
}
$fh->close;
return @list;
}
=item init_options
Determine command line options and initialise any defaults.
=cut
sub init_options {
GetOptions( \%options,
'config|c=s',
'all|a=i',
'delete|d=i',
'file=s',
'help|h',
'version|v'
);
help(1) if($options{help});
help(0) if($options{version});
help(1,"Must specify the configuration file") unless($options{config});
help(1,"Configuration file [$options{config}] not found") unless(-f $options{config});
# load configuration
my $cfg = Config::IniFiles->new( -file => $options{config} );
# configure databases
for my $db (qw(CPANSTATS LITESTATS)) {
die "No configuration for $db database\n" unless($cfg->SectionExists($db));
my %opts = map {$_ => $cfg->val($db,$_);} qw(driver database dbfile dbhost dbport dbuser dbpass);
$options{$db} = CPAN::Testers::Common::DBUtils->new(%opts);
die "Cannot configure $db database\n" unless($options{$db});
}
}
sub help {
my ($full,$mess) = @_;
print "\n$mess\n\n" if($mess);
if($full) {
print <<HERE;
Usage: $0 --config=<file> \\
( [--all=<num>] [--delete=<num>] [--file=<file>] | -h | -v )
--config=<file> configuration file
--all=<num> delete all entried greater than given id
--delete=<num> delete given id
--file=<file> delete multiple ids (1 per line)
-h this help screen
-v program version
HERE
}
print "$0 v$VERSION\n";
exit(0);
}
__END__
=back
=head1 BUGS, PATCHES & FIXES
There are no known bugs at the time of this release. However, if you spot a
bug or are experiencing difficulties, that is not explained within the POD
documentation, please send bug reports and patches to the RT Queue (see below).
Fixes are dependant upon their severity and my availablity. Should a fix not
be forthcoming, please feel free to (politely) remind me.
RT Queue -
http://rt.cpan.org/Public/Dist/Display.html?Name=CPAN-Testers-Data-Generator
=head1 SEE ALSO
L<CPAN::WWW::Testers>,
L<CPAN::Testers::WWW::Statistics>
F<http://www.cpantesters.org/>,
F<http://stats.cpantesters.org/>,
F<http://wiki.cpantesters.org/>
=head1 AUTHOR
Barbie, <barbie@cpan.org>
for Miss Barbell Productions <http://www.missbarbell.co.uk>.
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2005-2008 Barbie for Miss Barbell Productions.
This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
=cut