Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

root / plugins / wiki / mediawiki @ c3660c2a

Historique | Voir | Annoter | Télécharger (7,49 ko)

1 b1ce664e mutante
#!/usr/bin/php
2
<?php
3
# mediawiki plugin for munin v0.2
4
# Reads number of edits,views,articles,pages,users,admins and images from a Mediawiki
5
# http://www.mediawiki.org/wiki/MediaWiki | http://munin.projects.linpro.no/wiki
6
# by mutante of S23 | http://s23.org/wiki | greets to hundfred
7
# 2007-02-12 | v0.1 first version, didnt really work yet
8 fba800ae Veres Lajos
# 2007-02-16 | v0.2 introduced different retrieval methods, separate graphs for the different values that can be symlinked..
9 b1ce664e mutante
10
# What you need to config:
11
# - a getmethod
12
# -- if its the mysql method, a valid dbhost,dbname,dbuser and dbpass
13
# -- if its an URL grabbing method, the URL to your Special:Statistics?action=raw page
14
# - the name of your wiki
15
# Read below for details
16
17
### Get Method - There are different ways to get the stats from Mediawiki:
18
19
## A - Database
20
# getmethod="mysql"
21
22
# reads directly from the Mediawiki MySQL database from table "site_stats"
23
# Note that this may not give you accurate numbers depending on your Mediawiki version.
24
# Mediawiki is currently not using this table itself to generate (all) numbers for Special:Statistics?action=raw
25
# but this may change in the near future
26
27
# The database method needs a valid mysql user to connect to the wiki database
28
# Comment this out, if you use an URL method or supply the database credentials inside this script
29
30
# require_once("/home/mutante/wiki_mysql_conf.php");
31
32
# I include the database settings from elsewhere, so i dont have to show the password in /usr/share/..
33
# I also set "[mediawiki] user mutante" in plugin-conf.d/ so that my user can read the config
34
# alternatively set them in here like:
35
36
# $dbhost="localhost";
37
# $dbname="wikidb";
38
# $dbuser="wikiuser";
39
# $dbpass="yourpassword";
40
41
42
## B - URL reading
43
# These methods all retrieve the Special:Statistics?action=raw URL from Mediawiki via the webserver
44
# This is the preferred method to get accurate stats currently, because Mediawiki doesnt use site_stats correctly atm
45
46
# getmethod="curl"
47
# uses curl via libcurl from PHP, should be fastest but you need the lib installed. if it works, use this.
48
# if it fails you may try one of the following ones and test what works for you
49
50
# getmethod="file_get_contents"
51
# uses the PHP function file_get_contents() read the Special:Statistics?action=raw URL from the webserver
52
53
# getmethod="fgets"
54
# uses the PHP function fgets() read the Special:Statistics?action=raw URL from the webserver
55
56
# getmethod="fopen"
57
# uses the PHP function fopen() to read the Special:Statistics?action=raw URL from the webserver
58
59
# getmethod="lynx"
60
# uses "lynx -dump" to read the Special:Statistics?action=raw URL from the webserver
61
# probably slow, if all others fail...
62
63
64
65
## CONFIG HERE
66
67
$getmethod="curl";
68
69
# IF you use one of the URL methods you need to supply your Special:Statistics?action=raw URL
70
71
$statsurl="http://s23.org/wiki/Special:Statistics?action=raw";
72
73
# Name of your wiki
74
75
$wikiname="S23-Wiki";
76
77
## END CONFIG
78
79
80
81
# Parsing function for the URL retrieving methods
82
83
function parsebuffer($buffer)
84
{
85
$pieces = explode(";",$buffer);
86
$total = explode("=",$pieces[0]);
87
$total = $total[1];
88
$good = explode("=",$pieces[1]);
89
$good = $good[1];
90
$views = explode("=",$pieces[2]);
91
$views = $views[1];
92
$edits = explode("=",$pieces[3]);
93
$edits = $edits[1];
94
$users = explode("=",$pieces[4]);
95
$users = $users[1];
96
$images = explode("=",$pieces[6]);
97
$images = $images[1];
98
$images = explode("<",$images);
99
$images = $images[0];
100
$admins = explode("=",$pieces[5]);
101
$admins = $admins[1];
102
$admins = trim($admins);
103
return array ($total,$good,$views,$edits,$users,$images,$admins);
104
}
105
106
# Output
107
108
# Check the filename suffix  _ (from the symlink) to decide which value to output
109
# symlink the file for each value you want displayed
110
# example: ln -s /usr/share/munin/plugins/mediawiki /etc/munin/plugins/mediawiki_views
111
112
$basename = preg_replace( '/^.+[\\\\\\/]/', '', $_SERVER['PHP_SELF'] );
113
$suffix=explode("_",$basename);
114
$suffix=$suffix[1];
115
116
117
# Print the config if called as "mediawiki config"
118
switch ($argv[1]) {
119
case config:
120
121
print <<<CONFIG
122
graph_title $wikiname $suffix
123
graph_vlabel number
124
graph_category wiki
125
graph_scale no
126
graph_info Reads the total number of $suffix from $wikiname\n
127
CONFIG;
128
129
130
switch ($suffix) {
131
132
case views:
133
print <<<VIEWS
134
views.info Total number of page views
135
views.label views
136
views.type COUNTER\n
137
VIEWS;
138
break;
139
140
case edits:
141
print <<<EDITS
142
edits.info Total number of page edits
143
edits.label edits
144
edits.type COUNTER\n
145
EDITS;
146
break;
147
148
case articles:
149
print <<<ARTICLES
150
articles.info Total number of 'good' pages (articles)
151
articles.label articles
152
articles.type GAUGE\n
153
ARTICLES;
154
break;
155
156
case pages:
157
print <<<PAGES
158
pages.info Total number of all pages
159
pages.label pages
160
pages.type GAUGE\n
161
PAGES;
162
break;
163
164
case users:
165
print <<<USERS
166
users.info Total number of user accounts
167
users.label users
168
users.type GAUGE\n
169
USERS;
170
break;
171
172
case images:
173
print <<<IMAGES
174
images.info Total number of uploaded images
175
images.label images
176
images.type GAUGE\n
177
IMAGES;
178
break;
179
180
case admins:
181
print <<<ADMINS
182
admins.info Total number of admins (sysops)
183
admins.label admins
184
admins.type GAUGE\n
185
ADMINS;
186
break;
187
188
default:
189
print <<<ERROR
190
Error: link me as mediawiki_<type>, where type can be one of: views, edits, articles, pages, users, images or admins.\n
191
ERROR;
192
}
193
194
195
break;
196
197
default:
198
199
# Default Output
200
201
# The different methods to grab stats ..
202
203
switch ($getmethod) {
204
205
case mysql:
206
207
mysql_connect("$dbhost", "$dbuser", "$dbpass") or die(mysql_error());
208
mysql_select_db("$dbname") or die(mysql_error());
209
210
$query="select * from site_stats";
211
$result = mysql_query("$query") or die(mysql_error());
212
$row = mysql_fetch_array( $result );
213
214
$views=$row['ss_total_views'];
215
$edits=$row['ss_total_edits'];
216
$articles=$row['ss_good_articles'];
217
$pages=$row['ss_total_pages'];
218
$users=$row['ss_users'];
219
$images=$row['ss_images'];
220
221
break;
222
223
case curl:
224
225
$ch = curl_init();
226
curl_setopt($ch, CURLOPT_URL, "$statsurl");
227
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
228
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
229
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
230
curl_setopt($ch, CURLOPT_HEADER, false);
231
$buffer = curl_exec($ch);
232
curl_close($ch);
233
break;
234
235
case fopen:
236
$buffer = fopen($statsurl,"r");
237
break;
238
239
case file_get_contents:
240
$buffer = file_get_contents($statsurl);
241
break;
242
243
case fgets:
244
$buffer = fgets($statsurl);
245
break;
246
247
case lynx:
248
$buffer = `lynx -dump "$statsurl"`;
249
break;
250
251
default:
252
$buffer = file_get_contents($statsurl);
253
}
254
255
# Parse
256
$buffer=trim($buffer);
257
list($total,$good,$views,$edits,$users,$images,$admins) = parsebuffer($buffer);
258
259
# Output
260
261
# Check the filename suffix  _ (from the symlink) to decide which value to output
262
# symlink the file for each value you want displayed
263
# example: ln -s /usr/share/munin/plugins/mediawiki /etc/munin/plugins/mediawiki_views
264
265
$basename = preg_replace( '/^.+[\\\\\\/]/', '', $_SERVER['PHP_SELF'] );
266
$suffix=explode("_",$basename);
267
$suffix=$suffix[1];
268
269
switch ($suffix) {
270
271
case views:
272
print "views.value $views\n";
273
break;
274
275
case edits:
276
print "edits.value $edits\n";
277
break;
278
279
case articles:
280
print "articles.value $good\n";
281
break;
282
283
case pages:
284
print "pages.value $total\n";
285
break;
286
287
case users:
288
print "users.value $users\n";
289
break;
290
291
case images:
292
print "images.value $images\n";
293
break;
294
295
case admins:
296
print "admins.value $admins\n";
297
298
default:
299
print "link me as mediawiki_<type>, where type can be one of: views, edits, articles, pages, users, images or admins. \n";
300
}
301
302
}
303
?>
304