die( "This file is part of MediaWiki, it is not a valid entry point" );
}
-use Liuggio\StatsdClient\Sender\SocketSender;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\ProcOpenError;
use MediaWiki\Session\SessionManager;
/**
* @todo document
+ * @todo Move logic to MediaWiki.php
*/
function wfLogProfilingData() {
global $wgDebugLogGroups, $wgDebugRawPage;
$profiler->setContext( $context );
$profiler->logData();
- $config = $context->getConfig();
- $stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
- if ( $config->get( 'StatsdServer' ) && $stats->hasData() ) {
- try {
- $statsdServer = explode( ':', $config->get( 'StatsdServer' ) );
- $statsdHost = $statsdServer[0];
- $statsdPort = isset( $statsdServer[1] ) ? $statsdServer[1] : 8125;
- $statsdSender = new SocketSender( $statsdHost, $statsdPort );
- $statsdClient = new SamplingStatsdClient( $statsdSender, true, false );
- $statsdClient->setSamplingRates( $config->get( 'StatsdSamplingRates' ) );
- $statsdClient->send( $stats->getData() );
- } catch ( Exception $ex ) {
- MWExceptionHandler::logException( $ex );
- }
- }
+ // Send out any buffered statsd metrics as needed
+ MediaWiki::emitBufferedStatsdData(
+ MediaWikiServices::getInstance()->getStatsdDataFactory(),
+ $context->getConfig()
+ );
- # Profiling must actually be enabled...
+ // Profiling must actually be enabled...
if ( $profiler instanceof ProfilerStub ) {
return;
}
return defined( 'HHVM_VERSION' );
}
+/**
+ * Check if we are running from the commandline
+ *
+ * @since 1.31
+ * @return bool
+ */
+function wfIsCLI() {
+ return PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg';
+}
+
/**
* Tries to get the system directory for temporary files. First
* $wgTmpDirectory is checked, and then the TMPDIR, TMP, and TEMP
* @return bool
*/
function wfIniGetBool( $setting ) {
- $val = strtolower( ini_get( $setting ) );
+ return wfStringToBool( ini_get( $setting ) );
+}
+
+/**
+ * Convert string value to boolean, when the following are interpreted as true:
+ * - on
+ * - true
+ * - yes
+ * - Any number, except 0
+ * All other strings are interpreted as false.
+ *
+ * @param string $val
+ * @return bool
+ * @since 1.31
+ */
+function wfStringToBool( $val ) {
+ $val = strtolower( $val );
// 'on' and 'true' can't have whitespace around them, but '1' can.
return $val == 'on'
|| $val == 'true'
* @param string $mine
* @param string $yours
* @param string &$result
+ * @param string &$mergeAttemptResult
* @return bool
*/
-function wfMerge( $old, $mine, $yours, &$result ) {
+function wfMerge( $old, $mine, $yours, &$result, &$mergeAttemptResult = null ) {
global $wgDiff3;
# This check may also protect against code injection in
$oldtextName, $yourtextName );
$handle = popen( $cmd, 'r' );
- if ( fgets( $handle, 1024 ) ) {
- $conflict = true;
- } else {
- $conflict = false;
- }
+ $mergeAttemptResult = '';
+ do {
+ $data = fread( $handle, 8192 );
+ if ( strlen( $data ) == 0 ) {
+ break;
+ }
+ $mergeAttemptResult .= $data;
+ } while ( true );
pclose( $handle );
+ $conflict = $mergeAttemptResult !== '';
+
# Merge differences
$cmd = Shell::escape( $wgDiff3, '-a', '-e', '--merge', $mytextName,
$oldtextName, $yourtextName );
* Find a file.
* Shortcut for RepoGroup::singleton()->findFile()
*
- * @param string $title String or Title object
+ * @param string|Title $title String or Title object
* @param array $options Associative array of options (see RepoGroup::findFile)
* @return File|bool File, or false if the file does not exist
*/
$ifWritesSince = null, $wiki = false, $cluster = false, $timeout = null
) {
if ( $timeout === null ) {
- $timeout = ( PHP_SAPI === 'cli' ) ? 86400 : 10;
+ $timeout = wfIsCLI() ? 86400 : 10;
}
if ( $cluster === '*' ) {
return $baseArray;
}
+
+/**
+ * Get system resource usage of current request context.
+ * Invokes the getrusage(2) system call, requesting RUSAGE_SELF if on PHP5
+ * or RUSAGE_THREAD if on HHVM. Returns false if getrusage is not available.
+ *
+ * @since 1.24
+ * @return array|bool Resource usage data or false if no data available.
+ */
+function wfGetRusage() {
+ if ( !function_exists( 'getrusage' ) ) {
+ return false;
+ } elseif ( defined( 'HHVM_VERSION' ) && PHP_OS === 'Linux' ) {
+ return getrusage( 2 /* RUSAGE_THREAD */ );
+ } else {
+ return getrusage( 0 /* RUSAGE_SELF */ );
+ }
+}
+
+/**
+ * Begin profiling of a function
+ * @param string $functionname Name of the function we will profile
+ * @deprecated since 1.25
+ */
+function wfProfileIn( $functionname ) {
+}
+
+/**
+ * Stop profiling of a function
+ * @param string $functionname Name of the function we have profiled
+ * @deprecated since 1.25
+ */
+function wfProfileOut( $functionname = 'missing' ) {
+}