[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/includes/profiler/ -> ProfilerSimpleUDP.php (source)

   1  <?php
   2  /**
   3   * Profiler sending messages over UDP.
   4   *
   5   * This program is free software; you can redistribute it and/or modify
   6   * it under the terms of the GNU General Public License as published by
   7   * the Free Software Foundation; either version 2 of the License, or
   8   * (at your option) any later version.
   9   *
  10   * This program is distributed in the hope that it will be useful,
  11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13   * GNU General Public License for more details.
  14   *
  15   * You should have received a copy of the GNU General Public License along
  16   * with this program; if not, write to the Free Software Foundation, Inc.,
  17   * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  18   * http://www.gnu.org/copyleft/gpl.html
  19   *
  20   * @file
  21   * @ingroup Profiler
  22   */
  23  
  24  /**
  25   * ProfilerSimpleUDP class, that sends out messages for 'udpprofile' daemon
  26   * (the one from
  27   *  http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile)
  28   * @ingroup Profiler
  29   */
  30  class ProfilerSimpleUDP extends ProfilerStandard {
  31  	protected function collateOnly() {
  32          return true;
  33      }
  34  
  35  	public function isPersistent() {
  36          return true;
  37      }
  38  
  39  	public function logData() {
  40          global $wgUDPProfilerHost, $wgUDPProfilerPort, $wgUDPProfilerFormatString;
  41  
  42          $this->close();
  43  
  44          if ( !function_exists( 'socket_create' ) ) {
  45              # Sockets are not enabled
  46              return;
  47          }
  48  
  49          $sock = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
  50          $plength = 0;
  51          $packet = "";
  52          foreach ( $this->mCollated as $entry => $pfdata ) {
  53              if ( !isset( $pfdata['count'] )
  54                  || !isset( $pfdata['cpu'] )
  55                  || !isset( $pfdata['cpu_sq'] )
  56                  || !isset( $pfdata['real'] )
  57                  || !isset( $pfdata['real_sq'] ) ) {
  58                  continue;
  59              }
  60              $pfline = sprintf( $wgUDPProfilerFormatString, $this->getProfileID(), $pfdata['count'],
  61                  $pfdata['cpu'], $pfdata['cpu_sq'], $pfdata['real'], $pfdata['real_sq'], $entry,
  62                  $pfdata['memory'] );
  63              $length = strlen( $pfline );
  64              /* printf("<!-- $pfline -->"); */
  65              if ( $length + $plength > 1400 ) {
  66                  socket_sendto( $sock, $packet, $plength, 0, $wgUDPProfilerHost, $wgUDPProfilerPort );
  67                  $packet = "";
  68                  $plength = 0;
  69              }
  70              $packet .= $pfline;
  71              $plength += $length;
  72          }
  73          socket_sendto( $sock, $packet, $plength, 0x100, $wgUDPProfilerHost, $wgUDPProfilerPort );
  74      }
  75  }


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1