=== ecSTATic ===
Contributors: Mike Soja
Donate link: http://www.kayak2u.com/
Tags: statistics, stats, visitors, visits, hits, counter, log, page views, block IPs, graphs, traffic, browsers, referrers, login block, login limit, widget
Requires at least: 2.7
Tested up to: 3.5.1
Stable tag: 0.987
Faster, Smaller, Non-Ecological Visitor Stats and Management for your Wordpress Blog.
== Description ==
EcSTATic is a fast, flexible, and feature packed visitor logger with a small footprint, for Wordpress blogs. It facilitates tracking visitors, monitoring the multitudes of bots and spiders, and helps block annoying trackback spammers. It even squirts out a graph or two, if needed.
= Features =
* Code in two main sections: A small portion that quickly and efficiently records visitors, and a larger suite of files to provide the administrator views.
* More than sixty options can be set, including when to purge old data, how many hours of most recent visitors to display in main panels, ordering of graph displays, whether to log logged-in users or not, how long to wait before counting returning visitor as a *new* hit, whether to send periodic eMails of accumulated stats and in what format, and more.
* Extensive use of WordPress's wpdb->prepare functions for safe database ins and outs.
* Options data validated and kept within bounds.
* Keeps running total of all visitors.
* Blocks login attempts after a certain number that you set.
* Sends daily or weekly customizable eMails of the ecSTATic visitor logs.
* Visitors are categorized as Regular Visitors, Feed Readers, or Spider/Bots, including those which may be blocked. Alternatively, all may be viewed in one Sequential list that shows date, time, IP, domain, browser, OS, Page requested, Referrer, and score in a sortable table. All entries have a "more" link to more detailed information.
* Shows visitors by IP, User Agent, Referrer, Requested URI, and Domain.
* Allows user to classify visitors as Spider/Bot by IP, IP range, User Agent token, or Referrer token, with a few easy clicks. Existing entries are just as easily edited or removed.
* Likewise, KILL flags can be set for blocking miscreants and other ne'erdowells, completely.
* A NoLog option, for repetitive visitors that one may not want or need to log, can be set as easily.
* Also, a WhiteList checkbox, for excepting people from the KILL table, or otherwise passing them through.
* And, new for version 0.90, an xWhiteList flag for overriding the WhiteList flag, for really special visitors. Eventually, you'll think of a reason to use it.
* XML import and export functions are built into the Spider/Bot, KILL, NoLog, and WhiteList table.
* The Spider/Bot, KILL, NoLog, WhiteList table keeps track of when entities were "last seen", and keeps a tally of same. The table is sortable across columns.
* A simple scoring system is available to block visitors based on a combination of IP, User Agent, Referrer, Requested URI, Domain Response, and five default items with user-settable thresholds.
* Unknown bots or other users who show up and grab dozens of pages in a few seconds can be blocked with the WTF (Way Too Fast) Option.
* Automatically block unknown bots.
* Coughs up graphs for Browsers, Operating Systems, Spiders/Bots, Referrers, Search Engine Referrers, Search Phrases, Pages, Categories, and Feed Reads.
* Widgetized! Uses the WordPress widget class (introduced in WordPress version 2.8) to facilitate sharing stats on one's blog pages. Currently displayable stats are "Visitors", "All Pages", "Feed Reeds", "Spider/Bots", "This Page", "Viz Today", "Pages Today", "RSS Today", "Bots Today", and "Visitors Online." All labels are customizeable. The display order can be overridden. Style-able via CSS (with included CSS file to help.)
* Has a simple search function that plows through IPs, user agents, referrers, requested uris, and saved domain names (now with AJAX, returning results without a full page reload!)
* Details pages are fitted with WHOIS and reverse IP lookup functions. Has two hooks to access Maxmind's geolocation database, and links to Google Maps. Also, links to Project Honeypot and the RobTex blacklist lookup.
* Parses search engine referrer strings to pluck out the search phrase, and builds a link that attempts to reproduce the search that brought the visitor to one's site. Test functions facilitate "training" the parser. The table that holds the parameters may be exported to an xml file, or supplemental entities imported.
* Banner graph at the top of most pages (may be toggled on/off in options) displays the previous year's visits by month, the current day, month, and year stats, and a "daily" graph for the 7 to 90 most recent days, user selectable.
* Comes with a rudimentary Help! file.
* Removes itself completely if you decide to uninstall it. Does not make entries in the default Wordpress tables.
== Installation ==
1. Create a folder/directory named "ecstatic" in your "/wp-content/plugins/" folder/directory
2. Upload the ecSTATic files to the newly created ecstatic folder/directory
3. Activate the plugin through the 'Plugins' menu in WordPress
4. ecSTATic picks it up from there. Look for a new button at the lower end of the dashboard menu buttons. Allow a little time for visitors stats to accrue. Set your options.
== Screenshots ==
1. Main Page `screenshot-1.png`
2. Options Page `screenshot-2.png`
3. Details Page `screenshot-3.png`
== Changelog ==
= 0.987 =
* March 21, 2013
= 0.986 =
* March 3, 2013
* Changed the "Options" menu name in the WordPress dashboard ecSTATic menu to "Settings".
* Updated column displays to remove duplicate columns for those using the new raw Requested URI Setting.
* Opened the door to IPv6 addresses. A user reported all IPv6 visitors were being blocked. They are now allowed through, unless the filter_var() function (only available with PHP 5.2 and above) flags them as invalid. For those not running PHP 5.2 or above, a possibly dodgy regex expression test is given. ---*** Attempting to use ecSTATic to block IPv6 addresses will NOT work. ***---
* Added the option to roll your own .CSS file that won't be overwritten with plugin upgrades. The program checks "../wp-content/ecstatic/" for the file "my_ecstatic.css", and if found, loads it, *after* loading ecstatic.css from the ecstatic plugin directory. Create a new folder "ecstatic" in the "wp-content" folder. Copy your tweaked "my_ecstatic.css" file into that folder, and keep your personal settings there. Do NOT just copy "ecstatic.css" to the "wp-content/ecstatic/my_ecstatic.css", as you'll be loading all the settings twice. Use "my_ecstatic.css" to overwrite a subset of individual styles, and when I add new styles with upgrades, they'll still show up.
* By popular request: Added a Manual Purge Setting. There is a new Manual Purge menu option in the WordPress dashboard ecSTATic menu, whether or not the Manual Purge Option is enabled. If the Setting is enabled, automatic purging is turned off, and buttons magically appear at the top of the Main and Sequential pages. Non-automatic purging can take some time, depending on the number of items to be deleted from the database.
* By popular request: The purge routine no longer combines purges of regular visitors, RSS feeds, and Spider/Bots if their values are equal to each other. It gives more detailed feedback, at some slight loss in speed.
* By popular request: Added a Setting to prefer CIDR notation in the WNKS table, over ecSTATic's DOS-like IP range descriptors. Visitor IPs will be compared to the CIDR entries for blocking, etc. The "Near IPs" tab in the Details pages will NOT find nearby CIDR entries in its little search.
= 0.9841 =
* February 28, 2013
* More tweaking of Permalinks URI parsing.
* Added Option to Miscellaneous Settings to show raw Requested URIs in all the listings, instead of parsed, abbreviated ones.
* Other tweaks geared toward simplicity, reducing db calls, and speed.
= 0.983 =
* February 27, 2013
* Rewrote the URI parsing for Permalinks. I think I got it this time. Simpler. More complete.
= 0.982 =
* January 27, 2013 one bug
* An inappropriate semicolon had the process_login_fails() function hooked, even when disabled.
= 0.981 =
* January 26, 2013 Small changes
* Changed the failed Login option parameters from TINYINT to SMALLINT to allow greater ranges.
* In the "Login Locker" option block, setting the third paramater (blocking minutes) to zero forces the program to calculate an appropriate blocking time on a sliding scale based on the number of minutes a visitor took to execute X number of failed Logins. See Options page for details.
* Added code to prevent Administrators from being locked out accidentally. A couple of people wrote about that.
= 0.98 =
* December 13, 2012
* Added new routines to track attempted Logins, both those that come in through the front Login door, and those that take the form of forged Cookies. The user (that's you) specifies the number of attempted logins allowed over a designated period, and how long the IP is banned for exceeding that limit. The old Anti-Maleagent Scoring Option -- Req. URI with 'login.php' -- is kaput. Rather than scoring every instance of wp-login.php, which was problematic, at best, a hard limit (or no limit) is applied to the number of failed attempts.
* Added [logins] tag and logins tally to the Sequential Log eMail. See the Options page for more.
* Added an X-ecSTATic header to the Sequential Log eMail options. Provides a user settable x-header that some eMail clients can use for filtering or classification.
* Squashed bugs in the Sequential Log eMail suite related to the (now not so) recent switch to Daylight Saving Time.
* Fixed a bug where an unresolved Domain in the Main or Sequential pages was then resolved in the Details page, but with criss-crossed variables leaving a blank Domain tab.
* Tweaked the new "Near IPs" tab some more. Added another small table, populated with IPs and Domains similar to the current visitor that have been previously scored, drawn from the main IP Table, representing Scored entities NOT in the WNKS Table. Non-editable.
* The new tables in the "Near IPs" tab are sorted by IP, for which PHP's natsort() function is very handy. That started me thinking about the other ecSTATic tables, which are sorted with Michael Leigeber's TinyTable javascript sorting routine, which does a great job, but doesn't handle natural sorts. Javascript, surprisingly, offers no function comparable to PHP's natsort(), but after a little searching, I found Jim Palmer's Javascript Natural Sort Algorithm With Unicode Support. After that, it only took about six hours to splice the two routines together. In the end, it amounted to about 70 characters of new code, or two lines, plus the new natsort function. Sweet. So, now, to invoke the Natural Sort in your own projects, burnish the appropriate
tag with "class='natsort'" (the other available tag is "class='nosort'"). All the ecSTATic IP lists are now NatSorted, which is mo better than plain ASCII sorting.
* Re-re-re-refined the Referrer strings in all pages to improve sort results and general appearance.
* Semi-major change: After being schooled in this thread, I opted to move the Maxmind Geolocation files to wp-content/ecstatic, as Ipstenu suggested. If you choose to download the Maxmind databases (instead of relying on the default, but external third party geoPlugin which act as a middleman between you and the Maxmind databases), see the Help file for which files to download, then stick them in wp-content/ecstatic (which you'll have to create), rather than in the ecstatic plugin folder as you used to. In the new location they won't be deleted on every ecSTATic upgrade.
* Thanks to user Alex, I found an unused ".boti" in ecstatic.css, which coincidentally matched an undefined "class='botp'" in ecstatic_interface.php. The CSS definition now reads ".botp" in ecstatic.css.
* Option maxtoshow (max number of entries to show in Details pages was never upgraded from TINYINT to SMALLINT across some versions.
* Fixed sloppy MySQL query string feeding the "Near IPs" tab in the Details pages. That showed up in the new WordPress 3.5.
= 0.972 =
* February 17, 2012 Tweaks.
* Added "Seen X times" to Details report at top of page. Saves scrolling through the WNKS table.
* Fine tuned the new "Near IPs" tab to better highlight overlapping and contained ranges.
= 0.971 =
* February 16, 2012 Bug fix.
* eMail time setting routine was wrong.
= 0.97 =
* February 15, 2012 Late Valentines Edition
* Referrer entries in the SomeStats small graphs page are now clickable, and zoom you away to the referring party's website.
* Cleaned up the Widget code and added a "Visitors Online" variable, ie. a count of unique IPs from the previous hour, for possible Widget output. Visit your Admin Widget page to fidget with the Widget, and don't forget the Widget must also be enabled in ecSTATic Options.
* Added a new tab to the Details page: Near IPs. The new routine takes the current visitor IP and pulls nearby Ranges from the WNKS table. Helps eliminate near duplicate or overlapping range entries, and can help with consolidating adjacent ranges, thereby reducing unnecessary WNKS entries. As with the WNKS table, entries may be edited in place, thanks to the magic of jQuery.
* Added a big new Option, to facilitate a daily, weekly, or any other regularly periodic eMailing of ecSTATic visitor logs to the address of your choice. The body of the eMail resembles the Sequential page output, complete with clickable referrers and whatnot. Numerous options abound. Thanks to user Robert for this and other ideas.
= 0.961 =
* January 27, 2012
* Rewrote "Pretty Permalinks" page reporting routine. Only affects those using WordPress's non-Default Permalink Settings. Still only works with the simplest custom permalink structures. Please post to the WordPress ecSTATic forum if any anomalies present themselves.
= 0.96 =
* December 14, 2011
* Added focus to score forms on Details page.
* Bug fix: MySQL on some systems didn't like INSERTing DEFAULT for text strings (which have no default). The append_hit() function now explicitly inserts empty strings. Thanks to Alex for pointing out the problem.
* Changed the referrer string format on all pages. Might be less confusing. The little diamond that precedes the formatted referrer string goes to the "Add or Edit Search Engine database table" page.
* Changed the offset of the score pop-ups to counter some change in the new jQuery version (now 1.7.1) included with WordPress 3.3.
= 0.95 =
* July 5, 2011
* Rewrote the IP/IP Range parsing code, speeding it up by many factors. The change should be immediately noticeable. Previously, if one had 1,000 entries in the WNKS table, and a thousand hits showing in Sequential View, a small block of IP parsing code executed a million times. Now, an abbreviated block would run just 1,000 times, and quickly.
* Rewrote the Sequential View page function, eliminating many MySQL calls, speeding the processing considerably.
* Added "Q" column to Sequential View page, showing the count of previous hits from the respective IP address.
* Split the PreLoad routine out of the class it was in, so it could be used by the Sequential View page.
* Purging is now conducted after the Sequential View page load, as well as after the Main Panels page(s).
* Added a new Option to Automatically Block New Bots. The default aux_lists file already contains more than 250 Spider/Bots, and certainly all the major ones. Any new ones to come along are likely to be the kind that don't do any good. And they can easily be UNblocked after they've been inspected. New Bots are ferreted if the User Agent string contains "bot", "spider", or "crawl" and isn't matched with a token in the WNKS (aux_lists) table.
* Added a new Option to Skip the Reverse IP Lookup on the Sequential Page, which can be fairly slow on busy sites. With the option enabled, the Sequential page drops the "Domain" column. Domains may still be logged using the "Domain Check" parameter (see Options page) and by clicking on the "More" buttons or when the Details pages are loaded.
* Updated the jQuery code in ecstatic.js to comply with changes in WordPress 3.2 related to the switch to jQuery 1.6.1.
* Suppressed warning when parse_url() chokes on a malformed URL.
* Minor fixes here and there.
= 0.94 =
* April 30, 2011
* Rewrote the Scoring PopUp code. PopUps now show more info, and new logic keeps them in screen bounds.
* The PopUp scores now work even after the Sequential table is sorted, thanks to jQuery's .delegate().
* The square black "More" button is gone from the Sequential and Details/Mash pages. Click in the "Score" column for "more", now.
* Added four indices to the ecstatic_hits table, where none were before.
* Thanks to the new indices, purging now involves fewer database draws, uses less memory, and works more quickly.
* Purging from the hits table eventually leaves orphans in the IP, User Agent, Referrer, and Requested URI tables, so now those unused entries are also purged. That's where the indexes really shine.
* Over time, as data is both added and purged, the tables may become fragmented, and a check for that has been added. When a table's internal free space exceeds five percent of its total size, the table will automatically be Optimized. As the tables are mostly fixed width types, the need to Optimize should be rare.
* Prettied up the Purge incidentals display at the bottom of the Main Panels page.
* Fixed logic error that added orphan records to the IP, User Agent, Referrer, and Requested URI tables when the NoLog flag was set. Any such entries will be removed by the new Purge routines.
* Reworked the Reverse IP lookup class. There are new radio buttons on the Options page. Choose from "host", "nslookup", "dig", "gethostbyaddr()", and "dns_get_record()". Different ones work on different systems.
* Reworked the "Requested URI" prettification routines, but only for the Wordpress default permalinks.
* Consolidated and standardized the passing of query variable pairs from page to page. ipua_mash is now imash, and includes the date stamp.
* Added yet another maleagent fighting routine. I call it WTF, which stands for "Way Too Fast". When enabled, recent visitor history for each visitor is analyzed, and if a certain number of visits occur within an averaged period of time, that visitor is then blocked. Say goodbye to those 80 and 100 post grabs that take place in a minute and a half. See the bottom of the Options page to enable WTF, and for settings.
* Fixed a logic error that was putting empty HTML tables on the Main Panels page for visitors with odd numbers of visits.
* Dropped the "mal_uri" scoring option, as there was no way to trigger it (except in my own unreleased versions.) Instead, added another slot on the "Spider/Bot Kill NoLog WhiteList" form (Details/Mash pages) so that, along with IPs, User Agents, and Referrers, tokens from URI query strings can also be filtered and managed. In my own table I've added "http://" and "https://" as well as two or three recurring non-standard strings ("+++" is a good one) that have no business being on the query string pair side of the question mark.
* Added functions to the WhoIS suite that take any returned "netrange", "inetnum", "CIDR", etc. strings and use them to build an ecSTATic compatible net range string, which is then automatically inserted into the "Range or IP#" form slot on the main Details/Mash pages. Saves building your own ranges.
* Added a jQuery powered toggle to the "Range or IP#" form slot that switches out the Range and IP values.
* The "Range or IP#" form slot now accepts entries in CIDR notation (ie. xxx.xxx.xxx.xxx/yy), if that's all you have on hand and don't want to go to the trouble of converting them to the old style ranges. The program converts any CIDR blocks to the ecSTATic range type (xxx.xxx.x-y.*) for you.
* Added a jQuery powered check on the "Add: Spider/Bot Kill etc." form table that pops up an alert if no check boxes have been checked or if the "Common Name" box is empty.
* On the Details/Mash pages, the "IP", "User Agent", "Referrer", and "Req. URI" tabs now show the pertinent Scores next to the tab title.
* Broke out the SomeStats routines into their own file, "ecstatic_stats.php". Maybe I'll work on some new graphs, some day.
* Broke out the Search Engine Referrer routines into their own file, "ecstatic_seref.php".
* If you are using ecSTATic with your own copy of MaxMind's GeoIP lookup database, the WhoIS box now shows the month and year you last updated the 'GeoLite City' database.
* Fixed non-standard HTML in banner graph function.
* Moved more styles into ecstatic.css, and organized the file, somewhat.
* Other enhancements and efficiencies.
* Might be getting ready to go Alpha...
= 0.93 =
* March 20, 2011
* Major rework of the scoring system, necessitating changes throughout.
* Listed scores on all pages are now the actual scores received at the time of visit, whereas before, some of the pages showed scores that reflected user changes made after the visit was registered.
* Hovering the mouse pointer over any listed score now gives a pop-up summary (thanks to a little jQuery) of the score components. The pop-up scores do reflect changes that may have been made to the score particulars after the visit was recorded. Visits recorded before upgrade to Version 0.93 will show incomplete pop-up score tallies, but the original scores will still faithfully show in the main listings.
* There is one tiny problem associated with the pop-up score boxes. In Sequential View, sorting the big table by clicking one of the column headings disconnects the pop-up script. The table sorting javascript rewrites the DOM elements, and I am, so far, unable to refire the pop-up script in a way that doesn't cause further problems. Both short scripts are in tinytablev2.js, should anyone want to have a look.
* As part of the scoring change, the unused "cookie" field was dropped from the "hits" table, and in its place a "scorebits" field was added. Every visit recorded now includes a copy of the flags set according to the Anti-Maleagent parameters adjustable on the Options page.
* Version 0.93 introduces a new scoring parameter: Domain response. It's explained at the bottom of the Options page. The default setting is "Off", but I've found it very useful to have it on.
* The "Score!" tab on the Details/Mash pages is now gone. Applying scores to IPs, User Agents, Referrers, and URIs, is now done at the top of their respective tabs. To make that work involved changing the way entries are selected for listing in the Details/Mash tabs. It used to be somewhat difficult, if not impossible, to have a referrer in the middle of a list show up as headliner in the Referrer tab, because the choice of which tabs to show and what to list in them was based on the most recent, or topmost, visit entry, rather than a middle entry. Now, however, selecting any entry will use its particular components as the basis for Details/Mash tab layout. It is therefore now possible to have the same IP/UA mash with different Referrer tabs, or Req. URI tabs.
* Aside from the scoring changes, two large annoyances were eliminated. Selecting the "Search" tab now finds the cursor/focus properly set in the entry text box where it's needed. Likewise, pressing enter to start the search now sends the focus to the "Search" button so that one doesn't have to click somewhere to scroll down the results.
* Sped up the Domain tab processing considerably.
* Eliminated a whole bunch of make_table() calls.
* Too many urldecode()s! Search engine referrer strings with ampersands as part of the included search string were being cut off at the ampersand.
* Many other speed ups, logic dis-entanglements, lesser tweaks.
= 0.91 =
* Fixed issue with "Call-time pass-by-reference" being deprecated in PHP version 5.3.
* Fixed preload function that was still trying to access the aux_spider table that is no longer used.
= 0.90 =
* Changed $mincap (user levels are deprecated in version 3) to 'manage_options' in ecstatic_integrate_menu()
* Major change: Combined Spider, Kill, NoLog and Wlist tables into one 'aux_lists' table, making the program faster, smaller, and more coherent. The new regime eliminates redundant entries and helps reduce near redundancies. The new table will automatically be created from your existing tables. The old tables will no longer be used, and you may Drop them if you like.
* Visitors can now trip more than one entry, making for higher scores!, whereas in earlier versions a single match in one of the tables would kick out of the search process.
* The Spider/Kill/etc. classifications now reside in bit flags that the user can toggle. Since visitors can trip multiple aux_lists entries, introduced the X WhiteList flag to override the WhiteList flag, which can be handy in some circumstances.
* New entries to the aux_lists table now have the current date shoved in as a starting point.
* The aux_lists table now keeps a count of hits by entity entrants.
* Really, finally, forever fixed the Domain color coding in the Sequential page that gave so many fits before, and which still wasn't working correctly. All related lines were moved out of the caching sections, which, since the caching sections are only there to eliminate MySQL calls, didn't make much difference to the non-MySQL stuff, and made it much more straightforward to lay down. I think it works.
* Added link in WhoIS box to robtex.com, which cross references DNS records, server info, etc., a very useful sort of place.
* Added link in WhoIS box to projecthoneypot.org, where spammers and other ne'erdowells are seduced into revealing their bad selves.
* Upgraded the ARIN WhoIS server query to reflect a change in their request format.
* Mashed the Details Search function through some AJAXified javascript. Took a while to make any headway with it, but it works slick, with just a few lines of code. Search results are returned in place, eliminating massive page reload and the annoyance of having to again click the Search tab.
* More javascript/AJAX in the Details WNKS tab. Edit the big table in place. And more. For the last months I've been playing with a much more cumbersome html approach, but the jQuery stuff blows it away. If it doesn't work for you, let me know.
* With the aux_lists table replacing four others, the Import and Export routines had to follow along. It is no longer necessary to manually upload the files one wants to import. Choose the file on your local machine, click "Import", and it will automatically upload to the ecSTATic plugin directory and then be merged into the aux_lists table. Also, files to be imported do not have to be named in the old manner, i.e., "aux_kill", but the XML format must be adhered to. The XML tag "wnks" holds the flag bit that determines the status of the imported entity. After the version 0.90 database conversion, Export the WNKS table, in whole, or sections, as backup. Backups made with older versions are not importable.
* With the new jQuery routines, it was time to create "ecstatic.js" to hold some of the javacript. Put the DOMTAB handling scripts in there, too, so the "ecstatic_play_tabs.js" is no longer used, and may be deleted from the server.
* Broke most of the Details page functions out into their own file, "ecstatic_details.php".
* Reworked a chunk of the ecstatic_forms routines to make them slightly more rational.
* Added "Collect logged users not Administrators" option to Options page. Possibly of use in multi-user role environment.
* Fixed bug where new installation threw warning about having no data.
= 0.81 =
* Two bug fixes. One in the widget functions that sent the program through an initiation routine twice. And another in the purge routine causing an out of memory error.
* Changes in the works, though they will take a few more weeks to finalize and test.
= 0.80 =
* Always something to fix. Hadn't been through an end of month date changed with the new routines. June arrived a few hours earlier than it should have. I think I've fixed it.
= 0.80 =
* Added a timezone shift factor in one place in the banner graph function so that the correct number of prior days shows all during the current day. Previously, an extra day showed until one's timezone offset crossed with midnight.
* Streamlined the versionista function in the 'ecstatic_tables.php' file.
* Added some color to the Sequential view page, loosely tied to the colors in the banner graph at the top. The domain entries are styled to show whether the visitor is classed as a regular browser vistor, feed reader, spider/bot, or has been killed. Styling may be changed in 'ecstatic.css'.
* Added HTML comment fields (meaning they don't show) containing a full Unix timestamp to the echoed output of every date/time table cell in sortable tables to make those columns more precisely sortable.
* Made the big Sequential view page table sortable. I never tried it before, because I thought it would be too slow, but it's not bad. And I like it.
* Finally found a way to not overload the Sequential (formerly Details) main menu item. The item is now named Sequential, and is highlighted only when viewing the Sequential view page. The Details pages no longer show as being associated with any main menu entry, which is as it should be, since they are never accessable from the main menu. Same goes for the Search Engine Referrer Stylin' page. Theoretically, they still work... lemme know. For those interested, the trick is in the very first function at the top of 'ecstatic_interface.php' and involves leaving blank the 'parent' field in the proper add_submenu_page line. Why I never tried that before (and it was only an accident, this time) I don't know.
* Reduced some of the spaghetti code and made routines that do similar things do them the same way. Futher massaged the way referrers are turned into links. Better standardized the way spider/bots are differentiated from feed readers and regular browser visitors.
= 0.76 =
* Fixed two mistakes. Added a urlencode() for passing the test string to the javascript function in the search engine referrer routines, and decided that passing the index instead of the string to the function that expected the index (and not the string) in the domain fetching portion of the Sequential View page was a good idea.
* Let's try this again. In trying to fix one small bug last night, I committed a whole bunch of changes without having checked them all out, and still didn't fix the bug having to do with with the malformed (and spam-like) referrer. Now, instead of prepending the "http://" that wasn't there, the malign referrer string is left as is, but highlighted in red, and NOT wrapped in an anchor.
= 0.75 =
* Broke something last night having to do with spider/bot detection. Might have affected only my copy, but I've put a check in. If some bots have been marked as non-bots in the db, click the main menu "Details" entry, and they should set properly.
*
* And one more time. Fixed!
* And, a few minutes later... one more introduced-bug fix in the user agent parser.
* Fixed bug in Referrer mangler. When a referrer came in without a "http://" or "www", and was wrapped in an anchor, the browser took it for a relative link. Now the "http://" is tacked on the front.
* Added a new setting to set the Purge period for Feed Readers. Those hits do pile up. Default is 30 days, in Options.
* Added cheap check for Spider/Bots not in the big table. Looks for "bot", "spider", and "crawl".
* Eliminated error when trying to export empty tables.
* More playing with the WhoIS routines.
* More playing with the CSS file.
= 0.71 =
* Reworked the WhoIS routines some more. How one tiny set of functions can bear so much indulgence... But it now performs more like I intended it to, rolling back to the last response containing usable info. And the country code translation is more reliable, and faster.
* Updated the "country_file.txt" file. Bolivia has gone from "BOLIVIA;BO" to "BOLIVIA, PLURINATIONAL STATE OF;BO".
* --
* Added a new WhiteList Table. The old WhiteList table was more of a NoLog Table, and still exists, but no longer pretends to be a WhiteList Table. Entities listed in the NoLog Table are not logged. Entities in the WhiteList Table are given a total score of -1 irrespective of other factors, and logged along with everyone else (unless listed in the NoLog Table.) Entities in the WhiteList Table will not be KILLed even if listed in the KILL table. The old NoLog table is still named "aux_nolog". The new WhiteList table is named "aux_wlist". Additions and deletions are made on the Details page. Note: In the Details pages, WhiteListed entities are shown with the scores they *would* have gotten if not WhiteListed, highlighted in tasteful green.
* Put the NoLog and WhiteList tables in their own tab on the Details page.
= 0.70 =
* Rewrote everything. Almost. :) In further facilitating widget action, it was necessary to put spider/bot-feed differentiation into the main hit-recording function. All the action is live, now. I'd resisted it for performance reasons (I hate the initial lag one gets on certain websites), but was surprised at how little code it took to pull it off. So, there's no lag, and much increased efficiency, elsewhere. Was able to eliminate about 4kbs of code in the administrative routines. Widget functions are now real time.
* Added several "parameters" to the widget, with a "Customize" option. Also, precede custom labels with a number and dash ("1-", "2-", etc.), or just enter a number and dash in an otherwise blank Customize box, to override the default widget display order.
* Fixed an old mistake in a MySQL query string.
* The big .zip file now includes the file "ecstatic_widget_table.css" which contains a few lines of CSS to cut and paste into one's "style.css" file (in one's theme folder), or to use as a guide, to facilitate styling the new Widget output.
= 0.60 =
* Widget! Put your visitor/page stats in your sidebar. The widget code must be Enabled on the Options page or it won't show up in WordPress's Admin Widget section, which allows those who don't want it to avoid the overhead of having it always there. More variables to come.
* Cleaned up more code and got around to some dangling problems. Now, when entries are added to or deleted from the aux_spider table, the matching entries in the user_agents and ips tables are reset for re-evaluation.
= 0.51 =
* Rewrote the ecSTATic logo title and banner graph routines, making them much faster by eliminating multiple database reads, while at the same time putting more info on the screen. There's now a graph of monthly stats, going back a year plus one, and also a day-month-year running total in a box (with secret clickable row titles!) Monthly and yearly totals on the KILL line will be affected by one's Purge settings, since KILLs are not recorded in the cumulative table with the other stats.
* Rewrote the routine that adds hits to the database. Previously, hits from search engine spiders and bots contributed to the individual page tallies. Now, hits from known spiders and bots will not add to the totals shown on the SomeStats page.
* Moved more styling into the ecstatic.css file. For those so inclined, changing the colors of the graph bars is now more easily accomplished.
* The Maleagents entries now show which token identified the entry to be KILLed, obviating the need to click the "more" button to get the info.
* Refined code in Search Engine Referral parse routines. Generalized the special Google parse.
* Updated aux_se.xml with Google Translate entry.
= 0.50 =
* Rewrote the Purge routines. MySQL is relatively SLOW when it comes to deleting rows from tables. The ecSTATic function is now more efficient than it was, but can be slow if one *changes* Purge settings from high to low so that a lot of data has to be deleted all at once. In other words, if you start out wanting to save all data forever, and then change your mind after a couple years and only want to keep data for a week, it's going to be slow. Apparently, it is faster to write all the data not being purged to a new table, delete the old table, and rename the new to the old, but I'm resisting that strategem for the time being.
* Also related to Purge: Setting either purge option to zero (0) days turns purging off for that parameter.
* Fixed stuff related to Domain acquisition and display that I'd overlooked.
* Cut the fluff out of the javascript table sorting script, and added a switch (not user selectable) to turn reverse sort on and off.
* Changed the "Spider/Bot", "Kill", "NoLog" form handler. Now, when the user tries to add a token that already exists, insteading of sparking an error and sending the user back to square one, the program gives an alert, and then goes ahead and modifies the name associated with the submitted token. It facilitates renaming existing entries. Before, one had to delete the entry, and enter it all anew.
* Rewrote the Referrer functions with an aim to addressing the Search Engine Referrer db table that I'd almost forgotten about. Another field ("path") has been added to the "aux_se" database table. Referrers from non-shy search engines are now un-mangled so that one can duplicate the search the visitor undertook to arrive at one's site. It isn't as simple as encasing the incoming referrer in an href and letting it fly. Google, for instance. Anyway, Search Engine referrers are now echoed as TWO links. The left link, the Search Engine name, goes to a new ecSTATic page where one can delete or add entries to the "aux_se" db table. The right link, built around the search key words, should call up the referring search engine with those words. Until the thing is tuned properly, some links are just guesses. Etc. The new "Search Engine Variable Signatures" page is quite complicated, affording lots of playing around, if one is given to that sort of thing.
* Added "aux_nolog" to uninstall.php, which I had neglected to do before
* Put almost all form processing code in its own file: "ecstatic_forms.php". Helps in organization, and should speed proceesing slightly, while lightening the load on non-form processing accesses.
* Moved more styling into ecstatic.css.
* And last, but certainly not least, added XML import and export functions to the Spider/Bot, KILL, NoLog, and Search Engine Referral tables. All are XML version 1.0 compliant. Look for two buttons at the bottom of each table. "Export" makes it easy to back up your tables. "Import" checks each record row for pertinent matches, before adding to the existing entries, leaving existing data untouched. For now, the "Import" file names are hard coded...
= 0.21 =
* Refined Post-title and -name mangler.
* Excised the redundant "Remove Entry from X db" form where X was either "Spider/Bot" or "KILL". Makes it possible to add secondary tokens when one token is already in play for a particular entry. Deleting entries is now undertaken solely in the "Spider/Bot - Kill" tab tables.
* Added mal_uri parameter to default scoring options. Program checks Requested URI for "http://" which has been cropping up in my logs, and appears to be some kind of redirect attempt. Wordpress's own redirect attempts are passed through. Default score for mal_uri is a killing 10, settable on the Options page. Lends itself to other checks, with simple code, as needed.
* Added a "Domain" tab to the Details page. Works like the IP, User Agent, Referrer tabs, though the code behind it is slightly more complex. Necessitated adding a field to the "ips" db table, which means that existing IP entries will not be associated with domain names until a new visit from that address is recorded. The way it works: When loading the Main panels, if the domain slot is empty, an attempt is made to fill it, otherwise any previously saved value is displayed. Clicking the "more" buttons refreshes the domain of the selected item every time. Clicking the "more" button is one way to fill the older empty domain slots, otherwise, time and use will do the job.
* In Sequential View, dropped the Renderer column and added a Domain column.
* Added "Domains" graph to SomeStats page. Currently includes Spider/Bot domains as well as all the others. Will probably change it when I figure out how.
* Added a rudimentary "Search" tab with the other tabs. Slightly more complex coding than that behind the "Domain" tab. Currently sends a search through the IP, Domain, User Agent, Referrer, and Requested URI tables. Results are returned in the "Search" tab. Can be slow if it finds many matching entries.
* Moved the "Spider/Bot" and "Kill" forms to their own permanent corner (out of the "Spider/Bot - Kill" tab) and combined their functions. Now one can add to the Spider/Bot and Kill tables simultaneously, and with any tab open. Later added a whitelist function there as well.
* Fixed a bug in Mozilla link prefetching blocker routine, thanks to a heads up from A. Dent
* Added a whitelist table (named "ecstatic_aux_nolog") to the db. It functions like the "Spider/Bot" and "Kill" tables but any entity listed in it will not be logged. The only indication a whitelisted visitor will leave will be a "last seen" entry in the NoLog display on the Details page under the "Spider/Bot" and "Kill" table displays. Entities that are Killed as well as WhiteListed will still be Killed, and will show in the Kill display's "last seen" slot, but their details will not be recorded. Entities listed in the Spider/Bot table that are WhiteListed will not show up in the "last seen" slot of "Spider/Bot" table as that entry is not made concurrent with the visit. Adding to the whitelist is done on the newly combined Spider/Bot - Kill form, making the form a triple function form!
= 0.20 =
* Reordered class objects, reducing memory needs, increasing speed, and promoting organization.
* Added "Referrer" and "Req. URI" tabs to the Details page, and simplified some of the logic in the area.
* Added working timeouts and more functionsomeness to the WhoIS routines.
* The WhoIS functions now supply a link to Google Maps complete with lat/lon coordinates.
* The links embedded in some User Agent strings are now clickable.
* New and improved little menu button icon.
* Moved rarely used table functions into external file - ecstatic_tables.php.
* Made progress on the Post-title and -name mangler functions. Now, not only does ecSTATic work better with "ugly" permalinks, it works with non-ugly permalinks enabled.
* Altered several tables to hold larger integer values. Added "UNSIGNED" where it hadn't been specified before.
* Removed Query String Table from database.
* Ported the deprecated "eregi" to "strpos", "preg_match", and "preg_match_all".
* Moved more styling into ecstatic.css
* Added "noprefetch" option to Options page (default is ON) to block Mozilla's link prefetching behavior, which wastes bandwidth and distorts visitor tallies, amongst other things.
* Added some more help to the Help! file.
* Fixed bug in URL encoding.
= 0.11 =
* Numerous speed/efficiency improvements. Big rewrite of the SomeStats graph routines after finding a mysql bottleneck. Fixed another slow down that occurred when adding to or removing from the spider/kill db tables. Mo' better, now
* Added an option for the number of entries listed on Details pages.
* Added routines to allow upgrading from version to version without losing previous options settings.
* Found WordPress functions to selectively inject .CSS and javascript files into the Wordpress header. The former should make skinning ecSTATic easier, and the former and latter have allowed the redesign of pages to utilize the vast universe of javascript.
* Rendered the scoring system more useable.
* Took some of the reverse IP lookup stuff out, for speed's sake.
* Added two tables to the Spider/Kill tab to facilitate management of the Spider/Kill tables. Now one can see when bots and killed visitors last came by, and which ones haven't come by for some time.
* Took "Update" off the main menu, and put two relevant options at bottom of Options page.
== Upgrade Notice ==
* Because it does what you need.
|