ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/util/guilds.pl
Revision: 1.1
Committed: Fri Dec 1 01:56:50 2006 UTC (17 years, 6 months ago) by pippijn
Content type: text/plain
Branch: MAIN
Log Message:
Added script for guild activity measuring

File Contents

# Content
1 #!/usr/bin/env perl
2
3 # Script to help making assertions on guild activity
4 # Usage is at the bottom
5
6 use strict;
7
8 my $PLAYERDIR = "/var/crossfire/players";
9
10 my $NOW = time;
11
12 my @black_shield;
13 my @damned_heretics;
14 my @dreaming_sage;
15 my @drunken_barbarian;
16 my @laughing_skull;
17 my @mailed_fist;
18 my @poisoned_dagger;
19 my @purple_butterfly;
20 my @smoking_cauldron;
21 my @ketsueki_itsuryuu;
22 my @nenshou_youso;
23 my @zaseki_dzuki_ryoku;
24
25 chdir $PLAYERDIR;
26
27 for my $pl (<*>) {
28 my $mtime = (stat $pl)[9];
29 my $pldata = do { local $/; open my $fh, "<$pl/$pl.pl" or die; <$fh> };
30
31 push @black_shield, $pl if $pldata =~ /black_shield/;
32 push @damned_heretics, $pl if $pldata =~ /damned_heretics/;
33 push @dreaming_sage, $pl if $pldata =~ /dreaming_sage/;
34 push @drunken_barbarian, $pl if $pldata =~ /drunken_barbarian/;
35 push @laughing_skull, $pl if $pldata =~ /laughing_skull/;
36 push @mailed_fist, $pl if $pldata =~ /mailed_fist/;
37 push @poisoned_dagger, $pl if $pldata =~ /poisoned_dagger/;
38 push @purple_butterfly, $pl if $pldata =~ /purple_butterfly/;
39 push @smoking_cauldron, $pl if $pldata =~ /smoking_cauldron/;
40 push @ketsueki_itsuryuu, $pl if $pldata =~ /ketsueki_itsuryuu/;
41 push @nenshou_youso, $pl if $pldata =~ /nenshou_youso/;
42 push @zaseki_dzuki_ryoku, $pl if $pldata =~ /zaseki_dzuki_ryoku/;
43 }
44
45 my $bs_cnt = @black_shield;
46 my $dh_cnt = @damned_heretics;
47 my $ds_cnt = @dreaming_sage;
48 my $db_cnt = @drunken_barbarian;
49 my $ls_cnt = @laughing_skull;
50 my $mf_cnt = @mailed_fist;
51 my $pd_cnt = @poisoned_dagger;
52 my $pb_cnt = @purple_butterfly;
53 my $sc_cnt = @smoking_cauldron;
54 my $ki_cnt = @ketsueki_itsuryuu;
55 my $ny_cnt = @nenshou_youso;
56 my $zdr_cnt = @zaseki_dzuki_ryoku;
57
58 sub in_days {
59 my ($secs) = @_;
60 ($NOW - $secs) / 3600 / 24;
61 }
62
63 sub members_mtime_avg {
64 my ($bs_mtime, $dh_mtime, $ds_mtime, $db_mtime, $ls_mtime, $mf_mtime) = 0;
65 my ($pd_mtime, $pb_mtime, $sc_mtime, $ki_mtime, $ny_mtime, $zdr_mtime) = 0;
66
67 for my $bs_member (@black_shield) {
68 $bs_mtime += (stat "$bs_member")[9];
69 }
70
71 for my $dh_member (@damned_heretics) {
72 $dh_mtime += (stat "$dh_member")[9];
73 }
74
75 for my $ds_member (@dreaming_sage) {
76 $ds_mtime += (stat "$ds_member")[9];
77 }
78
79 for my $db_member (@drunken_barbarian) {
80 $db_mtime += (stat "$db_member")[9];
81 }
82
83 for my $ls_member (@laughing_skull) {
84 $ls_mtime += (stat "$ls_member")[9];
85 }
86
87 for my $mf_member (@mailed_fist) {
88 $mf_mtime += (stat "$mf_member")[9];
89 }
90
91 for my $pd_member (@poisoned_dagger) {
92 $pd_mtime += (stat "$pd_member")[9];
93 }
94
95 for my $pb_member (@purple_butterfly) {
96 $pb_mtime += (stat "$pb_member")[9];
97 }
98
99 for my $sc_member (@smoking_cauldron) {
100 $sc_mtime += (stat "$sc_member")[9];
101 }
102
103 for my $ki_member (@ketsueki_itsuryuu) {
104 $ki_mtime += (stat "$ki_member")[9];
105 }
106
107 for my $ny_member (@nenshou_youso) {
108 $ny_mtime += (stat "$ny_member")[9];
109 }
110
111 for my $zdr_member (@zaseki_dzuki_ryoku) {
112 $zdr_mtime += (stat "$zdr_member")[9];
113 }
114
115 $bs_mtime = $bs_mtime / $bs_cnt;
116 $dh_mtime = $dh_mtime / $dh_cnt;
117 $ds_mtime = $ds_mtime / $ds_cnt;
118 $db_mtime = $db_mtime / $db_cnt;
119 $ls_mtime = $ls_mtime / $ls_cnt;
120 $mf_mtime = $mf_mtime / $mf_cnt;
121 $pd_mtime = $pd_mtime / $pd_cnt;
122 $pb_mtime = $pb_mtime / $pb_cnt;
123 $sc_mtime = $sc_mtime / $sc_cnt;
124 $ki_mtime = $ki_mtime / $ki_cnt;
125 $ny_mtime = $ny_mtime / $ny_cnt;
126 $zdr_mtime = $zdr_mtime / $zdr_cnt;
127
128 print "Guild: mtime:\n";
129 print "black_shield: ".in_days($bs_mtime)."\n";
130 print "damned_heretics: ".in_days($dh_mtime)."\n";
131 print "dreaming_sage: ".in_days($ds_mtime)."\n";
132 print "drunken_barbarian: ".in_days($db_mtime)."\n";
133 print "laughing_skull: ".in_days($ls_mtime)."\n";
134 print "mailed_fist: ".in_days($mf_mtime)."\n";
135 print "poisoned_dagger: ".in_days($pd_mtime)."\n";
136 print "purple_butterfly: ".in_days($pb_mtime)."\n";
137 print "smoking_cauldron: ".in_days($sc_mtime)."\n";
138 print "ketsueki_itsuryuu: ".in_days($ki_mtime)."\n";
139 print "nenshou_youso: ".in_days($ny_mtime)."\n";
140 print "zaseki_dzuki_ryoku: ".in_days($zdr_mtime)."\n";
141 }
142
143 sub members_mtime_max {
144 my ($bs_mtime, $dh_mtime, $ds_mtime, $db_mtime, $ls_mtime, $mf_mtime) = 0;
145 my ($pd_mtime, $pb_mtime, $sc_mtime, $ki_mtime, $ny_mtime, $zdr_mtime) = 0;
146
147 for my $bs_member (@black_shield) {
148 $bs_member = (stat "$bs_member")[9];
149 $bs_mtime = $bs_member if $bs_member > $bs_mtime;
150 }
151
152 for my $dh_member (@damned_heretics) {
153 $dh_member = (stat "$dh_member")[9];
154 $dh_mtime = $dh_member if $dh_member > $dh_mtime;
155 }
156
157 for my $ds_member (@dreaming_sage) {
158 $ds_member = (stat "$ds_member")[9];
159 $ds_mtime = $ds_member if $ds_member > $ds_mtime;
160 }
161
162 for my $db_member (@drunken_barbarian) {
163 $db_member = (stat "$db_member")[9];
164 $db_mtime = $db_member if $db_member > $db_mtime;
165 }
166
167 for my $ls_member (@laughing_skull) {
168 $ls_member = (stat "$ls_member")[9];
169 $ls_mtime = $ls_member if $ls_member > $ls_mtime;
170 }
171
172 for my $mf_member (@mailed_fist) {
173 $mf_member = (stat "$mf_member")[9];
174 $mf_mtime = $mf_member if $mf_member > $mf_mtime;
175 }
176
177 for my $pd_member (@poisoned_dagger) {
178 $pd_member = (stat "$pd_member")[9];
179 $pd_mtime = $pd_member if $pd_member > $pd_mtime;
180 }
181
182 for my $pb_member (@purple_butterfly) {
183 $pb_member = (stat "$pb_member")[9];
184 $pb_mtime = $pb_member if $pb_member > $pb_mtime;
185 }
186
187 for my $sc_member (@smoking_cauldron) {
188 $sc_member = (stat "$sc_member")[9];
189 $sc_mtime = $sc_member if $sc_member > $sc_mtime;
190 }
191
192 for my $ki_member (@ketsueki_itsuryuu) {
193 $ki_member = (stat "$ki_member")[9];
194 $ki_mtime = $ki_member if $ki_member > $ki_mtime;
195 }
196
197 for my $ny_member (@nenshou_youso) {
198 $ny_member = (stat "$ny_member")[9];
199 $ny_mtime = $ny_member if $ny_member > $ny_mtime;
200 }
201
202 for my $zdr_member (@zaseki_dzuki_ryoku) {
203 $zdr_member = (stat "$zdr_member")[9];
204 $zdr_mtime = $zdr_member if $zdr_member > $zdr_mtime;
205 }
206
207 print "Guild: mtime:\n";
208 print "black_shield: ".in_days($bs_mtime)."\n";
209 print "damned_heretics: ".in_days($dh_mtime)."\n";
210 print "dreaming_sage: ".in_days($ds_mtime)."\n";
211 print "drunken_barbarian: ".in_days($db_mtime)."\n";
212 print "laughing_skull: ".in_days($ls_mtime)."\n";
213 print "mailed_fist: ".in_days($mf_mtime)."\n";
214 print "poisoned_dagger: ".in_days($pd_mtime)."\n";
215 print "purple_butterfly: ".in_days($pb_mtime)."\n";
216 print "smoking_cauldron: ".in_days($sc_mtime)."\n";
217 print "ketsueki_itsuryuu: ".in_days($ki_mtime)."\n";
218 print "nenshou_youso: ".in_days($ny_mtime)."\n";
219 print "zaseki_dzuki_ryoku: ".in_days($zdr_mtime)."\n";
220 }
221
222 sub usage {
223 print <<USAGE;
224 Usage: perl guilds.pl [max|avg]
225
226 max: max(mtime of all guild members) for each guild
227 avg: average mtime of all guild members for each guild
228
229 Copyright (C) 2006 The Crossfire+ Development Team
230 USAGE
231 }
232
233 if ($ARGV[0] eq "max") {
234 members_mtime_max;
235 } elsif ($ARGV[0] eq "avg") {
236 members_mtime_avg;
237 } else {
238 usage;
239 }