]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/snapshot.php
Merge branch '0.9.x' of git://gitorious.org/statusnet/mainline into 0.9.x
[quix0rs-gnu-social.git] / lib / snapshot.php
index 338c8d559de81af3eec25d05022673d5ada419a8..2a10c6b9359d503dce7c7829f8d5aeff2c4b2f10 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Laconica, the distributed open-source microblogging tool
+ * StatusNet, the distributed open-source microblogging tool
  *
  * A snapshot of site stats that can report itself to headquarters
  *
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @category  Stats
- * @package   Laconica
- * @author    Evan Prodromou <evan@controlyourself.ca>
- * @copyright 2009 Control Yourself, Inc.
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2009 StatusNet, Inc.
  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link      http://laconi.ca/
+ * @link      http://status.net/
  */
 
-if (!defined('LACONICA')) {
+if (!defined('STATUSNET') && !defined('LACONICA')) {
     exit(1);
 }
 
@@ -36,31 +36,45 @@ if (!defined('LACONICA')) {
  *
  * This class will collect statistics on the site and report them to
  * a statistics server of the admin's choice. (Default is the big one
- * at laconi.ca.)
+ * at status.net.)
  *
  * It can either be called from a cron job, or run occasionally by the
  * Web site.
  *
  * @category Stats
- * @package  Laconica
- * @author   Evan Prodromou <evan@controlyourself.ca>
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@status.net>
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link     http://laconi.ca/
+ * @link     http://status.net/
  *
  */
 
-class Snapshot {
-
+class Snapshot
+{
     var $stats = null;
 
+    /**
+     * Constructor for a snapshot
+     */
+
     function __construct()
     {
     }
 
+    /**
+     * Static function for reporting statistics
+     *
+     * This function checks whether it should report statistics, based on
+     * the current configuation settings. If it should, it creates a new
+     * Snapshot object, takes a snapshot, and reports it to headquarters.
+     *
+     * @return void
+     */
+
     static function check()
     {
         switch (common_config('snapshot', 'run')) {
-         case 'web':
+        case 'web':
             // skip if we're not running on the Web.
             if (!isset($_SERVER) || !array_key_exists('REQUEST_METHOD', $_SERVER)) {
                 break;
@@ -70,39 +84,51 @@ class Snapshot {
             // hits
             if (rand() % common_config('snapshot', 'frequency') == 0) {
                 $snapshot = new Snapshot();
-                if ($snapshot->take()) {
-                    $snapshot->report();
-                }
+                $snapshot->take();
+                $snapshot->report();
             }
             break;
-         case 'cron':
+        case 'cron':
             // skip if we're running on the Web
             if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
                 break;
             }
+            common_log(LOG_INFO, 'Running snapshot from cron job');
             // We're running from the command line; assume
+
             $snapshot = new Snapshot();
-            if ($snapshot->take()) {
-                $snapshot->report();
-            }
+            $snapshot->take();
+            common_log(LOG_INFO, count($snapshot->stats) . " statistics being uploaded.");
+            $snapshot->report();
+
             break;
-         case 'never':
+        case 'never':
             break;
-         default:
+        default:
             common_log(LOG_WARNING, "Unrecognized value for snapshot run config.");
         }
     }
 
+    /**
+     * Take a snapshot of the server
+     *
+     * Builds an array of statistical and configuration data based
+     * on the local database and config files. We avoid grabbing any
+     * information that could be personal or private.
+     *
+     * @return void
+     */
+
     function take()
     {
         $this->stats = array();
 
         // Some basic identification stuff
 
-        $this->stats['version'] = LACONICA_VERSION;
+        $this->stats['version']    = STATUSNET_VERSION;
         $this->stats['phpversion'] = phpversion();
-        $this->stats['name'] = common_config('site', 'name');
-        $this->stats['root'] = common_root_url();
+        $this->stats['name']       = common_config('site', 'name');
+        $this->stats['root']       = common_root_url();
 
         // non-identifying stats on various tables. Primary
         // interest is size and rate of activity of service.
@@ -119,54 +145,65 @@ class Snapshot {
 
         // stats on some important config options
 
-        $this->stats['theme'] = common_config('site', 'theme');
-        $this->stats['dbtype'] = common_config('db', 'type');
-        $this->stats['xmpp'] = common_config('xmpp', 'enabled');
-        $this->stats['inboxes'] = common_config('inboxes', 'enabled');
-        $this->stats['queue'] = common_config('queue', 'enabled');
-        $this->stats['license'] = common_config('license', 'url');
-        $this->stats['fancy'] = common_config('site', 'fancy');
-        $this->stats['private'] = common_config('site', 'private');
-        $this->stats['closed'] = common_config('site', 'closed');
+        $this->stats['theme']     = common_config('site', 'theme');
+        $this->stats['dbtype']    = common_config('db', 'type');
+        $this->stats['xmpp']      = common_config('xmpp', 'enabled');
+        $this->stats['inboxes']   = common_config('inboxes', 'enabled');
+        $this->stats['queue']     = common_config('queue', 'enabled');
+        $this->stats['license']   = common_config('license', 'url');
+        $this->stats['fancy']     = common_config('site', 'fancy');
+        $this->stats['private']   = common_config('site', 'private');
+        $this->stats['closed']    = common_config('site', 'closed');
         $this->stats['memcached'] = common_config('memcached', 'enabled');
-        $this->stats['language'] = common_config('site', 'language');
-        $this->stats['timezone'] = common_config('site', 'timezone');
+        $this->stats['language']  = common_config('site', 'language');
+        $this->stats['timezone']  = common_config('site', 'timezone');
+
     }
 
+    /**
+     * Reports statistics to headquarters
+     *
+     * Posts statistics to a reporting server.
+     *
+     * @return void
+     */
+
     function report()
     {
         // XXX: Use OICU2 and OAuth to make authorized requests
 
-        $postdata = http_build_query($this->stats);
-
-        $opts = array('http' =>
-                      array(
-                            'method'  => 'POST',
-                            'header'  => 'Content-type: application/x-www-form-urlencoded',
-                            'content' => $postdata,
-                            'user_agent' => 'Laconica/'.LACONICA_VERSION
-                            )
-                      );
-
-        $context = stream_context_create($opts);
-
         $reporturl = common_config('snapshot', 'reporturl');
-
-        $result = file_get_contents($reporturl, false, $context);
+        $request = HTTPClient::start();
+        $request->post($reporturl, null, $this->stats);
     }
 
+    /**
+     * Updates statistics for a single table
+     *
+     * Determines the size of a table and its oldest and newest rows.
+     * Goal here is to see how active a site is. Note that it
+     * fills up the instance stats variable.
+     *
+     * @param string $table name of table to check
+     *
+     * @return void
+     */
+
     function tableStats($table)
     {
-        $inst = DB_DataObject::Factory($table);
-        $res = $inst->query('SELECT count(*) as cnt, '.
-                            'min(created) as first, '.
-                            'max(created) as last '.
-                            'from ' . $table);
-        if ($res) {
+        $inst = DB_DataObject::factory($table);
+
+        $inst->selectAdd();
+        $inst->selectAdd('count(*) as cnt, '.
+                         'min(created) as first, '.
+                         'max(created) as last');
+
+        if ($inst->find(true)) {
             $this->stats[$table.'count'] = $inst->cnt;
             $this->stats[$table.'first'] = $inst->first;
-            $this->stats[$table.'last'] = $inst->last;
+            $this->stats[$table.'last']  = $inst->last;
         }
+
         $inst->free();
         unset($inst);
     }