]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Merge branch 'testing' into 0.9.x
authorBrion Vibber <brion@pobox.com>
Mon, 29 Mar 2010 22:15:11 +0000 (15:15 -0700)
committerBrion Vibber <brion@pobox.com>
Mon, 29 Mar 2010 22:15:11 +0000 (15:15 -0700)
classes/Memcached_DataObject.php
lib/default.php
lib/httpclient.php
plugins/Realtime/realtimeupdate.js

index bc4c3a000ce11a732bc495e878fc018854dcd79d..8d54e1f0f012e9610b5c66c11f2167738f76af63 100644 (file)
@@ -330,6 +330,10 @@ class Memcached_DataObject extends Safe_DataObject
      */
     function _query($string)
     {
+        if (common_config('db', 'annotate_queries')) {
+            $string = $this->annotateQuery($string);
+        }
+
         $start = microtime(true);
         $result = parent::_query($string);
         $delta = microtime(true) - $start;
@@ -342,6 +346,70 @@ class Memcached_DataObject extends Safe_DataObject
         return $result;
     }
 
+    /**
+     * Find the first caller in the stack trace that's not a
+     * low-level database function and add a comment to the
+     * query string. This should then be visible in process lists
+     * and slow query logs, to help identify problem areas.
+     * 
+     * Also marks whether this was a web GET/POST or which daemon
+     * was running it.
+     *
+     * @param string $string SQL query string
+     * @return string SQL query string, with a comment in it
+     */
+    function annotateQuery($string)
+    {
+        $ignore = array('annotateQuery',
+                        '_query',
+                        'query',
+                        'get',
+                        'insert',
+                        'delete',
+                        'update',
+                        'find');
+        $ignoreStatic = array('staticGet',
+                              'pkeyGet',
+                              'cachedQuery');
+        $here = get_class($this); // if we get confused
+        $bt = debug_backtrace();
+
+        // Find the first caller that's not us?
+        foreach ($bt as $frame) {
+            $func = $frame['function'];
+            if (isset($frame['type']) && $frame['type'] == '::') {
+                if (in_array($func, $ignoreStatic)) {
+                    continue;
+                }
+                $here = $frame['class'] . '::' . $func;
+                break;
+            } else if (isset($frame['type']) && $frame['type'] == '->') {
+                if ($frame['object'] === $this && in_array($func, $ignore)) {
+                    continue;
+                }
+                if (in_array($func, $ignoreStatic)) {
+                    continue; // @fixme this shouldn't be needed?
+                }
+                $here = get_class($frame['object']) . '->' . $func;
+                break;
+            }
+            $here = $func;
+            break;
+        }
+
+        if (php_sapi_name() == 'cli') {
+            $context = basename($_SERVER['PHP_SELF']);
+        } else {
+            $context = $_SERVER['REQUEST_METHOD'];
+        }
+
+        // Slip the comment in after the first command,
+        // or DB_DataObject gets confused about handling inserts and such.
+        $parts = explode(' ', $string, 2);
+        $parts[0] .= " /* $context $here */";
+        return implode(' ', $parts);
+    }
+
     // Sanitize a query for logging
     // @fixme don't trim spaces in string literals
     function sanitizeQuery($string)
index 10f3f1a97e7355ac6d724f167121a8a25e8b06eb..7b0d08e4ca218524d744be846e1b9085ceb44c52 100644 (file)
@@ -72,6 +72,7 @@ $default =
               'quote_identifiers' => false,
               'type' => 'mysql',
               'schemacheck' => 'runtime', // 'runtime' or 'script'
+              'annotate_queries' => false, // true to add caller comments to queries, eg /* POST Notice::saveNew */
               'log_queries' => false, // true to log all DB queries
               'log_slow_queries' => 0), // if set, log queries taking over N seconds
         'syslog' =>
index 64a51353c76e106cdfc10f79b90c6337a7b806b6..384626ae06348de59dffc70af3a1a82338ed91e4 100644 (file)
@@ -43,6 +43,9 @@ require_once 'HTTP/Request2/Response.php';
  *
  * This extends the HTTP_Request2_Response class with methods to get info
  * about any followed redirects.
+ * 
+ * Originally used the name 'HTTPResponse' to match earlier code, but
+ * this conflicts with a class in in the PECL HTTP extension.
  *
  * @category HTTP
  * @package StatusNet
@@ -51,7 +54,7 @@ require_once 'HTTP/Request2/Response.php';
  * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link http://status.net/
  */
-class HTTPResponse extends HTTP_Request2_Response
+class StatusNet_HTTPResponse extends HTTP_Request2_Response
 {
     function __construct(HTTP_Request2_Response $response, $url, $redirects=0)
     {
@@ -146,7 +149,7 @@ class HTTPClient extends HTTP_Request2
     /**
      * Convenience function to run a GET request.
      *
-     * @return HTTPResponse
+     * @return StatusNet_HTTPResponse
      * @throws HTTP_Request2_Exception
      */
     public function get($url, $headers=array())
@@ -157,7 +160,7 @@ class HTTPClient extends HTTP_Request2
     /**
      * Convenience function to run a HEAD request.
      *
-     * @return HTTPResponse
+     * @return StatusNet_HTTPResponse
      * @throws HTTP_Request2_Exception
      */
     public function head($url, $headers=array())
@@ -171,7 +174,7 @@ class HTTPClient extends HTTP_Request2
      * @param string $url
      * @param array $headers optional associative array of HTTP headers
      * @param array $data optional associative array or blob of form data to submit
-     * @return HTTPResponse
+     * @return StatusNet_HTTPResponse
      * @throws HTTP_Request2_Exception
      */
     public function post($url, $headers=array(), $data=array())
@@ -183,7 +186,7 @@ class HTTPClient extends HTTP_Request2
     }
 
     /**
-     * @return HTTPResponse
+     * @return StatusNet_HTTPResponse
      * @throws HTTP_Request2_Exception
      */
     protected function doRequest($url, $method, $headers)
@@ -217,12 +220,12 @@ class HTTPClient extends HTTP_Request2
     }
 
     /**
-     * Actually performs the HTTP request and returns an HTTPResponse object
-     * with response body and header info.
+     * Actually performs the HTTP request and returns a
+     * StatusNet_HTTPResponse object with response body and header info.
      *
      * Wraps around parent send() to add logging and redirection processing.
      *
-     * @return HTTPResponse
+     * @return StatusNet_HTTPResponse
      * @throw HTTP_Request2_Exception
      */
     public function send()
@@ -265,6 +268,6 @@ class HTTPClient extends HTTP_Request2
             }
             break;
         } while ($maxRedirs);
-        return new HTTPResponse($response, $this->getUrl(), $redirs);
+        return new StatusNet_HTTPResponse($response, $this->getUrl(), $redirs);
     }
 }
index 0f7a680d73c8e41d9aa6e509cb0188765abe5c60..2e5851ae531e539dc07f85a0d0eab80915a87fc8 100644 (file)
@@ -130,7 +130,7 @@ RealtimeUpdate = {
           user = data['user'];
           html = data['html'].replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"').replace(/&amp;/g,'&');
           source = data['source'].replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"').replace(/&amp;/g,'&');
-console.log(data);
+
           ni = "<li class=\"hentry notice\" id=\"notice-"+unique+"\">"+
                "<div class=\"entry-title\">"+
                "<span class=\"vcard author\">"+