From c4040303cecc48aed66d0102de6b9f5ffdc64b22 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 16 Apr 2009 10:18:16 -0400 Subject: [PATCH 01/16] initial snapshot stuff --- lib/common.php | 3 ++ lib/snapshot.php | 101 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 lib/snapshot.php diff --git a/lib/common.php b/lib/common.php index dd2570e751..f81c3dc76d 100644 --- a/lib/common.php +++ b/lib/common.php @@ -157,6 +157,9 @@ $config = 'newuser' => array('subscribe' => null, 'welcome' => null), + 'snapshot' => + array('run' => 'web', + 'frequency' => 10000), ); $config['db'] = &PEAR::getStaticProperty('DB_DataObject','options'); diff --git a/lib/snapshot.php b/lib/snapshot.php new file mode 100644 index 0000000000..4f9bb3f62e --- /dev/null +++ b/lib/snapshot.php @@ -0,0 +1,101 @@ +. + * + * @category Stats + * @package Laconica + * @author Evan Prodromou + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +/** + * A snapshot of site stats that can report itself to headquarters + * + * 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.) + * + * It can either be called from a cron job, or run occasionally by the + * Web site. + * + * @category Stats + * @package Laconica + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + * + */ + +class Snapshot { + + function __construct() + { + } + + function take() + { + } + + function report() + { + } + + static function check() + { + switch (common_config('snapshot', 'run')) { + case 'web': + // skip if we're not running on the Web. + if (!isset($_SERVER) || !array_key_exists('REQUEST_METHOD', $_SERVER)) { + break; + } + // Run once every frequency hits + // XXX: do frequency by time (once a week, etc.) rather than + // hits + if (rand() % common_config('snapshot', 'frequency') == 0) { + $snapshot = new Snapshot(); + if ($snapshot->take()) { + $snapshot->report(); + } + } + break; + case 'cron': + // skip if we're running on the Web + if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) { + break; + } + // We're running from the command line; assume + $snapshot = new Snapshot(); + if ($snapshot->take()) { + $snapshot->report(); + } + break; + case 'never': + break; + default: + common_log(LOG_WARNING, "Unrecognized value for snapshot run config."); + } + } +} From 5128448c777e74c0e294c21ce80711c04395d6d4 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 16 Apr 2009 12:41:30 -0400 Subject: [PATCH 02/16] code complete on snapshot.php --- lib/snapshot.php | 88 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 80 insertions(+), 8 deletions(-) diff --git a/lib/snapshot.php b/lib/snapshot.php index 4f9bb3f62e..338c8d559d 100644 --- a/lib/snapshot.php +++ b/lib/snapshot.php @@ -51,18 +51,12 @@ if (!defined('LACONICA')) { class Snapshot { + var $stats = null; + function __construct() { } - function take() - { - } - - function report() - { - } - static function check() { switch (common_config('snapshot', 'run')) { @@ -98,4 +92,82 @@ class Snapshot { common_log(LOG_WARNING, "Unrecognized value for snapshot run config."); } } + + function take() + { + $this->stats = array(); + + // Some basic identification stuff + + $this->stats['version'] = LACONICA_VERSION; + $this->stats['phpversion'] = phpversion(); + $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. + + $tables = array('user', + 'notice', + 'subscription', + 'remote_profile', + 'user_group'); + + foreach ($tables as $table) { + $this->tableStats($table); + } + + // 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['memcached'] = common_config('memcached', 'enabled'); + $this->stats['language'] = common_config('site', 'language'); + $this->stats['timezone'] = common_config('site', 'timezone'); + } + + 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); + } + + 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) { + $this->stats[$table.'count'] = $inst->cnt; + $this->stats[$table.'first'] = $inst->first; + $this->stats[$table.'last'] = $inst->last; + } + $inst->free(); + unset($inst); + } } From 415abdfdef64608d6c4ba081dd21575e1920770b Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 16 Apr 2009 12:50:13 -0400 Subject: [PATCH 03/16] config options for snapshots --- lib/common.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/common.php b/lib/common.php index f81c3dc76d..05539af834 100644 --- a/lib/common.php +++ b/lib/common.php @@ -159,7 +159,8 @@ $config = 'welcome' => null), 'snapshot' => array('run' => 'web', - 'frequency' => 10000), + 'frequency' => 10000, + 'reporturl' => 'http://laconi.ca/stats/report'), ); $config['db'] = &PEAR::getStaticProperty('DB_DataObject','options'); From 6a247acb45198c3748df48d8b14b71c8f8b839de Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 16 Apr 2009 12:50:29 -0400 Subject: [PATCH 04/16] Do some phpcs reformatting for snapshot --- lib/snapshot.php | 107 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 78 insertions(+), 29 deletions(-) diff --git a/lib/snapshot.php b/lib/snapshot.php index 338c8d559d..a014d3435f 100644 --- a/lib/snapshot.php +++ b/lib/snapshot.php @@ -49,18 +49,32 @@ if (!defined('LACONICA')) { * */ -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; @@ -75,7 +89,7 @@ class Snapshot { } } break; - case 'cron': + case 'cron': // skip if we're running on the Web if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) { break; @@ -86,23 +100,33 @@ class Snapshot { $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'] = LACONICA_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,34 +143,44 @@ 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 - ) - ); + $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); @@ -155,18 +189,33 @@ class Snapshot { $result = file_get_contents($reporturl, false, $context); } + /** + * 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) { $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); } From 0838143d5855bb013b355d4abb7ec7a643ef37dc Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 16 Apr 2009 12:53:17 -0400 Subject: [PATCH 05/16] allow snapshots to be disabled easily --- lib/common.php | 3 ++- lib/snapshot.php | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/common.php b/lib/common.php index 05539af834..2c60b04421 100644 --- a/lib/common.php +++ b/lib/common.php @@ -158,7 +158,8 @@ $config = array('subscribe' => null, 'welcome' => null), 'snapshot' => - array('run' => 'web', + array('enabled' => true, + 'run' => 'web', 'frequency' => 10000, 'reporturl' => 'http://laconi.ca/stats/report'), ); diff --git a/lib/snapshot.php b/lib/snapshot.php index a014d3435f..75850a301b 100644 --- a/lib/snapshot.php +++ b/lib/snapshot.php @@ -73,6 +73,10 @@ class Snapshot static function check() { + if (!common_config('snapshot', 'enabled')) { + return; + } + switch (common_config('snapshot', 'run')) { case 'web': // skip if we're not running on the Web. From d76bb2fd115f120d799335069d6bc59203650d55 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 16 Apr 2009 13:05:35 -0400 Subject: [PATCH 06/16] Revert "allow snapshots to be disabled easily" This reverts commit 0838143d5855bb013b355d4abb7ec7a643ef37dc. Already handled with the 'never' option. --- lib/common.php | 3 +-- lib/snapshot.php | 4 ---- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/common.php b/lib/common.php index 37744ebd43..e64ca34da8 100644 --- a/lib/common.php +++ b/lib/common.php @@ -158,8 +158,7 @@ $config = array('subscribe' => null, 'welcome' => null), 'snapshot' => - array('enabled' => true, - 'run' => 'web', + array('run' => 'web', 'frequency' => 10000, 'reporturl' => 'http://laconi.ca/stats/report'), ); diff --git a/lib/snapshot.php b/lib/snapshot.php index 75850a301b..a014d3435f 100644 --- a/lib/snapshot.php +++ b/lib/snapshot.php @@ -73,10 +73,6 @@ class Snapshot static function check() { - if (!common_config('snapshot', 'enabled')) { - return; - } - switch (common_config('snapshot', 'run')) { case 'web': // skip if we're not running on the Web. From b233e7b3f0924d5b8b118098696fe40968b77a45 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 16 Apr 2009 10:16:22 -0700 Subject: [PATCH 07/16] document snapshot options --- README | 26 ++++++++++++++++++++++++++ config.php.sample | 9 +++++++++ 2 files changed, 35 insertions(+) diff --git a/README b/README index 29a1e157ad..136b537c7d 100644 --- a/README +++ b/README @@ -1133,6 +1133,32 @@ welcome: nickname of a user account that sends welcome messages to new busy servers it may be a good idea to keep that one just for 'urgent' messages. Default is null; no message. +snapshot +-------- + +The software will, by default, send statistical snapshots about the +local installation to a stats server on the laconi.ca Web site. This +data is used by the developers to prioritize development decisions. No +identifying data about users or organizations is collected. The data +is available to the public for review. Participating in this survey +helps Laconica developers take your needs into account when updating +the software. + +run: string indicating when to run the statistics. Values can be 'web' + (run occasionally at Web time), 'cron' (run from a cron script), + or 'never' (don't ever run). If you set it to 'cron', remember to + schedule the script to run on a regular basis. +frequency: if run value is 'web', how often to report statistics. + Measured in Web hits; depends on how active your site is. + Default is 10000 -- that is, one report every 10000 Web hits, + on average. +reporturl: URL to post statistics to. Defaults to Laconica developers' + report system, but if they go evil or disappear you may + need to update this to another value. Note: if you + don't want to report stats, it's much better to + set 'run' to 'never' than to set this value to something + nonsensical. + Troubleshooting =============== diff --git a/config.php.sample b/config.php.sample index 4f438dc5e1..282826a7fb 100644 --- a/config.php.sample +++ b/config.php.sample @@ -206,3 +206,12 @@ $config['sphinx']['port'] = 3312; // print "Error\n"; // exit(1); // } + +// How often to send snapshots; in # of web hits. Ideally, +// try to do this once per month (that is, make this equal to number +// of hits per month) +// $config['snapshot']['frequency'] = 10000; +// If you don't want to report statistics to the central server, uncomment. +// $config['snapshot']['run'] = 'never'; +// If you want to report statistics in a cron job instead. +// $config['snapshot']['run'] = 'cron'; From 2772b0f7ce2878510d7b4f0ea0524ca6ef4f1be1 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 16 Apr 2009 10:17:58 -0700 Subject: [PATCH 08/16] script to report stats from a cron job --- scripts/reportsnapshot.php | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 scripts/reportsnapshot.php diff --git a/scripts/reportsnapshot.php b/scripts/reportsnapshot.php new file mode 100644 index 0000000000..7b7724b9bb --- /dev/null +++ b/scripts/reportsnapshot.php @@ -0,0 +1,39 @@ +#!/usr/bin/env php +. + */ + +# Abort if called from a web server +if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) { + print "This script must be run from the command line\n"; + exit(1); +} + +ini_set("max_execution_time", "0"); +ini_set("max_input_time", "0"); +set_time_limit(0); +mb_internal_encoding('UTF-8'); + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); +define('LACONICA', true); + +require_once(INSTALLDIR . '/lib/common.php'); + +// All that setup, just for this! + +Snapshot::check(); \ No newline at end of file From b140bcdee4b1f4c8f2f34a89a9c5c51e7ecfe826 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 23 Apr 2009 03:35:18 -0400 Subject: [PATCH 09/16] Added Snapshot::check() to main function for index.php --- index.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/index.php b/index.php index e24bde9179..3f25e004d7 100644 --- a/index.php +++ b/index.php @@ -65,6 +65,8 @@ function main() { global $user, $action, $config; + Snapshot::check(); + if (!_have_config()) { $msg = sprintf(_("No configuration file found. Try running ". "the installation program first.")); From 9a7dbbc78118feb5266e78244258a2fbbcc2f405 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 22 May 2009 20:53:22 -0400 Subject: [PATCH 10/16] reformat laconica.sql --- db/laconica.sql | 48 +++++++++++++++++++++++------------------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/db/laconica.sql b/db/laconica.sql index 344f0ff723..0b20bc172c 100644 --- a/db/laconica.sql +++ b/db/laconica.sql @@ -426,12 +426,12 @@ create table group_inbox ( ) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; create table file ( - id integer primary key auto_increment, - url varchar(255), mimetype varchar(50), - size integer, - title varchar(255), - date integer(11), - protected integer(1), + id integer primary key auto_increment, + url varchar(255), mimetype varchar(50), + size integer, + title varchar(255), + date integer(11), + protected integer(1), unique(url) ) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci; @@ -447,40 +447,38 @@ create table file_oembed ( height integer, html text, title varchar(255), - author_name varchar(50), - author_url varchar(255), - url varchar(255), + author_name varchar(50), + author_url varchar(255), + url varchar(255), unique(file_id) ) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci; create table file_redirection ( - id integer primary key auto_increment, - url varchar(255), - file_id integer, - redirections integer, - httpcode integer, + id integer primary key auto_increment, + url varchar(255), + file_id integer, + redirections integer, + httpcode integer, unique(url) ) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; create table file_thumbnail ( - id integer primary key auto_increment, - file_id integer, - url varchar(255), - width integer, - height integer, + id integer primary key auto_increment, + file_id integer, + url varchar(255), + width integer, + height integer, - unique(file_id), + unique(file_id), unique(url) ) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; create table file_to_post ( - id integer primary key auto_increment, - file_id integer, - post_id integer, + id integer primary key auto_increment, + file_id integer, + post_id integer, unique(file_id, post_id) ) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; - - From 59340b274a41658c29cb7ae58ec92c06c52635c3 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 22 May 2009 21:08:22 -0400 Subject: [PATCH 11/16] laconica.ini change after automated createTables.php --- classes/laconica.ini | 118 +++++++++++++++++++++---------------------- 1 file changed, 58 insertions(+), 60 deletions(-) mode change 100644 => 100755 classes/laconica.ini diff --git a/classes/laconica.ini b/classes/laconica.ini old mode 100644 new mode 100755 index 316923af02..92bbb35d4c --- a/classes/laconica.ini +++ b/classes/laconica.ini @@ -46,6 +46,64 @@ modified = 384 notice_id = K user_id = K +[file] +id = 129 +url = 2 +mimetype = 2 +size = 1 +title = 2 +date = 1 +protected = 1 + +[file__keys] +id = N + +[file_oembed] +id = 129 +file_id = 1 +version = 2 +type = 2 +provider = 2 +provider_url = 2 +width = 1 +height = 1 +html = 34 +title = 2 +author_name = 2 +author_url = 2 +url = 2 + +[file_oembed__keys] +id = N + +[file_redirection] +id = 129 +url = 2 +file_id = 1 +redirections = 1 +httpcode = 1 + +[file_redirection__keys] +id = N + +[file_thumbnail] +id = 129 +file_id = 1 +url = 2 +width = 1 +height = 1 + +[file_thumbnail__keys] +id = N + +[file_to_post] +id = 129 +file_id = 1 +post_id = 1 + +[file_to_post__keys] +id = N + [foreign_link] user_id = 129 foreign_id = 129 @@ -392,63 +450,3 @@ modified = 384 [user_openid__keys] canonical = K display = U - -[file] -id = 129 -url = 2 -mimetype = 2 -size = 1 -title = 2 -date = 1 -protected = 1 - -[file__keys] -id = N - -[file_oembed] -id = 129 -file_id = 129 -version = 2 -type = 2 -provider = 2 -provider_url = 2 -width = 1 -height = 1 -html = 34 -title = 2 -author_name = 2 -author_url = 2 -url = 2 - -[file_oembed__keys] -id = N - -[file_redirection] -id = 129 -url = 2 -file_id = 129 -redirections = 1 -httpcode = 1 - -[file_redirection__keys] -id = N - -[file_thumbnail] -id = 129 -file_id = 129 -url = 2 -width = 1 -height = 1 - -[file_thumbnail__keys] -id = N - -[file_to_post] -id = 129 -file_id = 129 -post_id = 129 - -[file_to_post__keys] -id = N - - From d216e3bbbbf04fb5b52b84fca0663dc2e023da02 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 22 May 2009 21:08:58 -0400 Subject: [PATCH 12/16] fix x bit on laconica.ini --- classes/laconica.ini | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 classes/laconica.ini diff --git a/classes/laconica.ini b/classes/laconica.ini old mode 100755 new mode 100644 From 68d90bcab04713d53cf3731d45729a617e68a2fa Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 22 May 2009 21:11:46 -0400 Subject: [PATCH 13/16] some class files had x bit set --- classes/Group_inbox.php | 0 classes/Group_member.php | 0 classes/Related_group.php | 0 classes/Status_network.php | 0 classes/User_group.php | 0 5 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 classes/Group_inbox.php mode change 100755 => 100644 classes/Group_member.php mode change 100755 => 100644 classes/Related_group.php mode change 100755 => 100644 classes/Status_network.php mode change 100755 => 100644 classes/User_group.php diff --git a/classes/Group_inbox.php b/classes/Group_inbox.php old mode 100755 new mode 100644 diff --git a/classes/Group_member.php b/classes/Group_member.php old mode 100755 new mode 100644 diff --git a/classes/Related_group.php b/classes/Related_group.php old mode 100755 new mode 100644 diff --git a/classes/Status_network.php b/classes/Status_network.php old mode 100755 new mode 100644 diff --git a/classes/User_group.php b/classes/User_group.php old mode 100755 new mode 100644 From 8591031c01c4d35ec8336bb52fb5259d1fdd640a Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 26 May 2009 15:05:43 -0400 Subject: [PATCH 14/16] stats reporting from cron --- scripts/statsreport.php | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 scripts/statsreport.php diff --git a/scripts/statsreport.php b/scripts/statsreport.php new file mode 100644 index 0000000000..e332d856c0 --- /dev/null +++ b/scripts/statsreport.php @@ -0,0 +1,37 @@ +#!/usr/bin/env php +. + */ + +# Abort if called from a web server +if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) { + print "This script must be run from the command line\n"; + exit(1); +} + +ini_set("max_execution_time", "0"); +ini_set("max_input_time", "0"); +set_time_limit(0); +mb_internal_encoding('UTF-8'); + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); +define('LACONICA', true); + +require_once(INSTALLDIR . '/lib/common.php'); + +Snapshot::check(); From da035331d81bc73f488968d835e4d05a2da975f3 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 26 May 2009 17:26:31 -0400 Subject: [PATCH 15/16] fixes during checking of snapshot --- lib/snapshot.php | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/lib/snapshot.php b/lib/snapshot.php index a014d3435f..4b05b502db 100644 --- a/lib/snapshot.php +++ b/lib/snapshot.php @@ -84,9 +84,8 @@ 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': @@ -94,11 +93,14 @@ class Snapshot 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': break; @@ -155,6 +157,7 @@ class Snapshot $this->stats['memcached'] = common_config('memcached', 'enabled'); $this->stats['language'] = common_config('site', 'language'); $this->stats['timezone'] = common_config('site', 'timezone'); + } /** @@ -186,7 +189,9 @@ class Snapshot $reporturl = common_config('snapshot', 'reporturl'); - $result = file_get_contents($reporturl, false, $context); + $result = @file_get_contents($reporturl, false, $context); + + return $result; } /** @@ -203,14 +208,14 @@ class Snapshot function tableStats($table) { - $inst = DB_DataObject::Factory($table); + $inst = DB_DataObject::factory($table); - $res = $inst->query('SELECT count(*) as cnt, '. - 'min(created) as first, '. - 'max(created) as last '. - 'from ' . $table); + $inst->selectAdd(); + $inst->selectAdd('count(*) as cnt, '. + 'min(created) as first, '. + 'max(created) as last'); - if ($res) { + if ($inst->find(true)) { $this->stats[$table.'count'] = $inst->cnt; $this->stats[$table.'first'] = $inst->first; $this->stats[$table.'last'] = $inst->last; From 40d4668c7c5cdd41d36b878ad87f7737117efc9c Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 26 May 2009 17:28:03 -0400 Subject: [PATCH 16/16] move statsreport.php to reportsnapshot.php --- scripts/reportsnapshot.php | 4 +--- scripts/statsreport.php | 37 ------------------------------------- 2 files changed, 1 insertion(+), 40 deletions(-) delete mode 100644 scripts/statsreport.php diff --git a/scripts/reportsnapshot.php b/scripts/reportsnapshot.php index 7b7724b9bb..e332d856c0 100644 --- a/scripts/reportsnapshot.php +++ b/scripts/reportsnapshot.php @@ -34,6 +34,4 @@ define('LACONICA', true); require_once(INSTALLDIR . '/lib/common.php'); -// All that setup, just for this! - -Snapshot::check(); \ No newline at end of file +Snapshot::check(); diff --git a/scripts/statsreport.php b/scripts/statsreport.php deleted file mode 100644 index e332d856c0..0000000000 --- a/scripts/statsreport.php +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env php -. - */ - -# Abort if called from a web server -if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) { - print "This script must be run from the command line\n"; - exit(1); -} - -ini_set("max_execution_time", "0"); -ini_set("max_input_time", "0"); -set_time_limit(0); -mb_internal_encoding('UTF-8'); - -define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); -define('LACONICA', true); - -require_once(INSTALLDIR . '/lib/common.php'); - -Snapshot::check();