If either of these special user accounts are specified, the users should
be created before the configuration is updated.
-snapshot
---------
-
-The software will, by default, send statistical snapshots about the
-local installation to a stats server on the status.net 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 StatusNet 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 StatusNet 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.
-
attachments
-----------
+++ /dev/null
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Snapshots administration panel
- *
- * PHP version 5
- *
- * LICENCE: This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero 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 Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * @category Settings
- * @package StatusNet
- * @author Zach Copley <zach@status.net>
- * @copyright 2010 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://status.net/
- */
-
-if (!defined('STATUSNET')) {
- exit(1);
-}
-
-/**
- * Manage snapshots
- *
- * @category Admin
- * @package StatusNet
- * @author Zach Copley <zach@status.net>
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://status.net/
- */
-class SnapshotadminpanelAction extends AdminPanelAction
-{
- /**
- * Returns the page title
- *
- * @return string page title
- */
- function title()
- {
- // TRANS: Title for admin panel to configure snapshots.
- return _m('TITLE','Snapshots');
- }
-
- /**
- * Instructions for using this form.
- *
- * @return string instructions
- */
- function getInstructions()
- {
- // TRANS: Instructions for admin panel to configure snapshots.
- return _('Manage snapshot configuration');
- }
-
- /**
- * Show the snapshots admin panel form
- *
- * @return void
- */
- function showForm()
- {
- $form = new SnapshotAdminPanelForm($this);
- $form->show();
- return;
- }
-
- /**
- * Save settings from the form
- *
- * @return void
- */
- function saveSettings()
- {
- static $settings = array(
- 'snapshot' => array('run', 'reporturl', 'frequency')
- );
-
- $values = array();
-
- foreach ($settings as $section => $parts) {
- foreach ($parts as $setting) {
- $values[$section][$setting] = $this->trimmed($setting);
- }
- }
-
- // This throws an exception on validation errors
-
- $this->validate($values);
-
- // assert(all values are valid);
-
- $config = new Config();
-
- $config->query('BEGIN');
-
- foreach ($settings as $section => $parts) {
- foreach ($parts as $setting) {
- Config::save($section, $setting, $values[$section][$setting]);
- }
- }
-
- $config->query('COMMIT');
-
- return;
- }
-
- function validate(&$values)
- {
- // Validate snapshot run value
-
- if (!in_array($values['snapshot']['run'], array('web', 'cron', 'never'))) {
- // TRANS: Client error displayed on admin panel for snapshots when providing an invalid run value.
- $this->clientError(_('Invalid snapshot run value.'));
- }
-
- // Validate snapshot frequency value
-
- if (!Validate::number($values['snapshot']['frequency'])) {
- // TRANS: Client error displayed on admin panel for snapshots when providing an invalid value for frequency.
- $this->clientError(_('Snapshot frequency must be a number.'));
- }
-
- // Validate report URL
-
- if (!is_null($values['snapshot']['reporturl'])
- && !common_valid_http_url($values['snapshot']['reporturl'])) {
- // TRANS: Client error displayed on admin panel for snapshots when providing an invalid report URL.
- $this->clientError(_('Invalid snapshot report URL.'));
- }
- }
-}
-
-// @todo FIXME: add documentation
-class SnapshotAdminPanelForm extends AdminForm
-{
- /**
- * ID of the form
- *
- * @return int ID of the form
- */
- function id()
- {
- return 'form_snapshot_admin_panel';
- }
-
- /**
- * class of the form
- *
- * @return string class of the form
- */
- function formClass()
- {
- return 'form_settings';
- }
-
- /**
- * Action of the form
- *
- * @return string URL of the action
- */
- function action()
- {
- return common_local_url('snapshotadminpanel');
- }
-
- /**
- * Data elements of the form
- *
- * @return void
- */
- function formData()
- {
- $this->out->elementStart(
- 'fieldset',
- array('id' => 'settings_admin_snapshots')
- );
- // TRANS: Fieldset legend on admin panel for snapshots.
- $this->out->element('legend', null, _m('LEGEND','Snapshots'));
- $this->out->elementStart('ul', 'form_data');
- $this->li();
- $snapshot = array(
- // TRANS: Option in dropdown for snapshot method in admin panel for snapshots.
- 'web' => _('Randomly during web hit'),
- // TRANS: Option in dropdown for snapshot method in admin panel for snapshots.
- 'cron' => _('In a scheduled job'),
- // TRANS: Option in dropdown for snapshot method in admin panel for snapshots.
- 'never' => _('Never')
- );
- $this->out->dropdown(
- 'run',
- // TRANS: Dropdown label for snapshot method in admin panel for snapshots.
- _('Data snapshots'),
- $snapshot,
- // TRANS: Dropdown title for snapshot method in admin panel for snapshots.
- _('When to send statistical data to status.net servers.'),
- false,
- $this->value('run', 'snapshot')
- );
- $this->unli();
-
- $this->li();
- $this->input(
- 'frequency',
- // TRANS: Input field label for snapshot frequency in admin panel for snapshots.
- _('Frequency'),
- // TRANS: Input field title for snapshot frequency in admin panel for snapshots.
- _('Snapshots will be sent once every N web hits.'),
- 'snapshot'
- );
- $this->unli();
-
- $this->li();
- $this->input(
- 'reporturl',
- // TRANS: Input field label for snapshot report URL in admin panel for snapshots.
- _('Report URL'),
- // TRANS: Input field title for snapshot report URL in admin panel for snapshots.
- _('Snapshots will be sent to this URL.'),
- 'snapshot'
- );
- $this->unli();
- $this->out->elementEnd('ul');
- $this->out->elementEnd('fieldset');
- }
-
- /**
- * Action elements
- *
- * @return void
- */
- function formActions()
- {
- $this->out->submit(
- 'submit',
- // TRANS: Button text to save snapshot settings.
- _m('BUTTON','Save'),
- 'submit',
- null,
- // TRANS: Button title to save snapshot settings.
- _('Save snapshot settings.')
- );
- }
-}
$menu_title, $action_name == 'sitenoticeadminpanel', 'nav_sitenotice_admin_panel');
}
- if (AdminPanelAction::canAdmin('snapshot')) {
- // TRANS: Menu item title in administrator navigation panel.
- $menu_title = _('Snapshots configuration');
- // TRANS: Menu item in administrator navigation panel.
- $this->out->menuItem(common_local_url('snapshotadminpanel'), _m('MENU','Snapshots'),
- $menu_title, $action_name == 'snapshotadminpanel', 'nav_snapshot_admin_panel');
- }
-
if (AdminPanelAction::canAdmin('license')) {
// TRANS: Menu item title in administrator navigation panel.
$menu_title = _('Set site license');
'newuser' =>
array('default' => null,
'welcome' => null),
- 'snapshot' =>
- array('run' => 'web',
- 'frequency' => 10000,
- 'reporturl' => 'http://status.net/stats/report'),
'attachments' =>
array('server' => null,
'dir' => INSTALLDIR . '/file/',
$m->connect('panel/paths', array('action' => 'pathsadminpanel'));
$m->connect('panel/sessions', array('action' => 'sessionsadminpanel'));
$m->connect('panel/sitenotice', array('action' => 'sitenoticeadminpanel'));
- $m->connect('panel/snapshot', array('action' => 'snapshotadminpanel'));
$m->connect('panel/license', array('action' => 'licenseadminpanel'));
$m->connect('panel/plugins', array('action' => 'pluginsadminpanel'));
+++ /dev/null
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * A snapshot of site stats that can report itself to headquarters
- *
- * PHP version 5
- *
- * LICENCE: This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero 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 Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * @category Stats
- * @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://status.net/
- */
-
-if (!defined('STATUSNET') && !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 status.net.)
- *
- * It can either be called from a cron job, or run occasionally by the
- * Web site.
- *
- * @category Stats
- * @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://status.net/
- *
- */
-
-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':
- // 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();
- $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;
- }
- common_log(LOG_INFO, 'Running snapshot from cron job');
- // We're running from the command line; assume
-
- $snapshot = new Snapshot();
- $snapshot->take();
- common_log(LOG_INFO, count($snapshot->stats) . " statistics being uploaded.");
- $snapshot->report();
-
- break;
- case 'never':
- break;
- 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'] = GNUSOCIAL_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',
- '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');
-
- }
-
- /**
- * Reports statistics to headquarters
- *
- * Posts statistics to a reporting server.
- *
- * @return void
- */
-
- function report()
- {
- // XXX: Use OICU2 and OAuth to make authorized requests
-
- $reporturl = common_config('snapshot', 'reporturl');
- try {
- $request = HTTPClient::start();
- $request->post($reporturl, null, $this->stats);
- } catch (Exception $e) {
- common_log(LOG_WARNING, "Error in snapshot: " . $e->getMessage());
- }
- }
-
- /**
- * 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);
-
- $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;
- }
-
- $inst->free();
- unset($inst);
- }
-}
+++ /dev/null
-#!/usr/bin/env php
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero 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 Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
-
-$helptext = <<<END_OF_SNAPSHOT_HELP
-Batch script for sending snapshot information about this installation to devs.
-
-END_OF_SNAPSHOT_HELP;
-
-require_once INSTALLDIR.'/scripts/commandline.inc';
-
-Snapshot::check();