[Phpmyadmin-git] [SCM] phpMyAdmin branch, master, updated. RELEASE_3_4_2-3528-gd404fd7

Michal Čihař nijel at users.sourceforge.net
Tue Jun 14 17:21:49 CEST 2011


The branch, master has been updated
       via  d404fd72d66cce1cc876fed87c8d9944689f21a4 (commit)
       via  d7fc94529cef1f3bbdb1ec302c2d22dcfd039112 (commit)
       via  d26cace15bee541f8af9cac0d1ff157ab9e559db (commit)
      from  4b73c39775b8234b66fd375aa3ac7387e945d704 (commit)


- Log -----------------------------------------------------------------
commit d404fd72d66cce1cc876fed87c8d9944689f21a4
Merge: 4b73c39775b8234b66fd375aa3ac7387e945d704 d7fc94529cef1f3bbdb1ec302c2d22dcfd039112
Author: Michal Čihař <mcihar at novell.com>
Date:   Tue Jun 14 17:21:30 2011 +0200

    Merge remote-tracking branch 'tyron/master'
    
    Conflicts:
    	server_status.php

commit d7fc94529cef1f3bbdb1ec302c2d22dcfd039112
Author: Tyron Madlener <tyronx at gmail.com>
Date:   Tue Jun 14 17:08:15 2011 +0200

    Fix for Live charting stopping when changing tabs in Firefox

commit d26cace15bee541f8af9cac0d1ff157ab9e559db
Author: Tyron Madlener <tyronx at gmail.com>
Date:   Mon Jun 13 23:36:07 2011 +0200

    Traffic charting for traffic tab on status page

-----------------------------------------------------------------------

Summary of changes:
 js/functions.js                                 |    5 +-
 js/messages.php                                 |    5 +-
 js/server_status.js                             |  291 ++++++++++++++---------
 server_status.php                               |   19 +-
 themes/original/css/theme_right.css.php         |    1 +
 themes/original/jquery/jquery-ui-1.8.custom.css |    7 +-
 themes/pmahomme/css/theme_right.css.php         |    1 +
 themes/pmahomme/jquery/jquery-ui-1.8.custom.css |    7 +-
 8 files changed, 211 insertions(+), 125 deletions(-)

diff --git a/js/functions.js b/js/functions.js
index 6266ba6..4ad7c77 100644
--- a/js/functions.js
+++ b/js/functions.js
@@ -1419,8 +1419,6 @@ function PMA_createChart(passedSettings) {
                             
                     thisChart.options.realtime.timeoutCallBack = function() {
                         $.get(passedSettings.realtime.url,{ajax_request:1, chart_data:1, type:passedSettings.realtime.type},function(data) {
-                            if(chart_activeTimeouts[container]==null) return;
-                            
                             curValue = jQuery.parseJSON(data);
                             //if(lastValue==null) lastValue = curValue;
                             
@@ -1433,6 +1431,9 @@ function PMA_createChart(passedSettings) {
                             
                             lastValue = curValue;
                             numLoadedPoints++;
+                            
+                            // Timeout has been cleared => don't start a new timeout
+                            if(chart_activeTimeouts[container]==null) return;
                             chart_activeTimeouts[container] = setTimeout(thisChart.options.realtime.timeoutCallBack, thisChart.options.realtime.refreshRate);
                             
                         });
diff --git a/js/messages.php b/js/messages.php
index a09078e..01aede4 100644
--- a/js/messages.php
+++ b/js/messages.php
@@ -61,7 +61,10 @@ $js_messages['strRemovingSelectedUsers'] = __('Removing Selected Users');
 $js_messages['strClose'] = __('Close');
 
 /* for server_status.js */
-$js_messages['strRealtimeChart'] = __('Realtime chart');
+$js_messages['strLiveTrafficChart'] = __('Live traffic chart');
+$js_messages['strLiveConnChart'] = __('Live conn./process chart');
+$js_messages['strLiveQueryChart'] = __('Live query chart');
+
 $js_messages['strStaticData'] = __('Static data');
 /* l10n: Total number of queries */
 $js_messages['strTotal'] = __('Total');
diff --git a/js/server_status.js b/js/server_status.js
index 75894ad..4413c80 100644
--- a/js/server_status.js
+++ b/js/server_status.js
@@ -51,7 +51,7 @@ $(function() {
     var tabStatus = new Object();
     // Holds the current chart instances for each tab
     var tabChart = new Object();
-    
+       
     // Add tabs
     $('#serverStatusTabs').tabs({
         // Tab persistence
@@ -64,7 +64,10 @@ $(function() {
     $(".ui-widget-content:not(.ui-tabs):not(.ui-helper-clearfix)").addClass("ui-helper-clearfix");
     
     // Initialize each tab
-	$('div.ui-tabs-panel').each(function() { initTab($(this),null); });
+    $('div.ui-tabs-panel').each(function() { 
+        initTab($(this),null); 
+        tabStatus[$(this).attr('id')] = 'static';
+    });
     
     $('.statuslinks select').change(function() {
         var chart=tabChart[$(this).parents('div.ui-tabs-panel').attr('id')];
@@ -93,83 +96,145 @@ $(function() {
         return false;
     });
     
-    /** Realtime charting of variables (always the third element) **/
-    $('.statuslinks a.tabChart').click(function() {
+    
+    /** Realtime charting of variables **/
+    
+    // Live traffic charting
+    $('.statuslinks a.livetrafficLink').click(function() {
         // ui-tabs-panel class is added by the jquery tabs feature
-        var tab=$(this).parents('div.ui-tabs-panel');
+        var $tab=$(this).parents('div.ui-tabs-panel');
+        var tabstat = tabStatus[$tab.attr('id')];
         
-        if(tabStatus[tab.attr('id')]!='realtime') {
-            var series, title;
-            var settings = new Object();
+        if(tabstat=='static' || tabstat=='liveconnections') {
+            var settings = {
+                series: [{name:'kB sent since last refresh',data:[]},{name:'kB received since last refresh',data:[]}],
+                title: {text:'Server traffic (in kB)'},
+                realtime:{ url:'server_status.php?'+url_query,
+                           type: 'traffic',
+                           callback: function(chartObj, curVal, lastVal,numLoadedPoints) {
+                               if(lastVal==null) return;
+                                chartObj.series[0].addPoint(
+                                    { x:curVal.x, y:(curVal.y_sent-lastVal.y_sent)/1024},
+                                    false, numLoadedPoints >= chartObj.options.realtime.numMaxPoints
+                                );
+                                chartObj.series[1].addPoint(
+                                    { x:curVal.x, y:(curVal.y_received-lastVal.y_received)/1024},
+                                    true, numLoadedPoints >= chartObj.options.realtime.numMaxPoints
+                                );                                            
+                            }
+                        }
+            }
             
-            switch(tab.attr('id')) {
-                case 'statustabs_traffic':
-                    settings = {
-                        series: [{name:'Connections since last refresh', data:[]},{name:'Processes', data:[]}],
-                        title: {text:'Connections / Processes'},
-                        realtime:{ url:'server_status.php?'+url_query,
-                                   type: 'proc',
-                                   callback: function(chartObj, curVal, lastVal,numLoadedPoints) {
-                                       if(lastVal==null) return;
-                                        chartObj.series[0].addPoint(
-                                            { x:curVal.x, y:curVal.y_conn-lastVal.y_conn },
-                                            false, numLoadedPoints >= chartObj.options.realtime.numMaxPoints
-                                        );
-                                        chartObj.series[1].addPoint(
-                                            { x:curVal.x, y:curVal.y_proc },
-                                            true, numLoadedPoints >= chartObj.options.realtime.numMaxPoints
-                                        );                                            
-                                    }
-                                }
-                    };
-                    break;
-                case 'statustabs_queries':
-                    settings = {
-                        series: [{name:'Issued queries since last refresh', data:[]}],
-                        title: {text:'Issued queries'},
-                        tooltip: { formatter:function() { return this.point.name; } },
-                        realtime:{ url:'server_status.php?'+url_query,
-                                  type: 'queries',
-                                  callback: function(chartObj, curVal, lastVal,numLoadedPoints) {
-                                      if(lastVal==null) return;
-                                        chartObj.series[0].addPoint(
-                                            { x:curVal.x,  y:curVal.y-lastVal.y, name:sortedQueriesPointInfo(curVal,lastVal) },
-                                            true, numLoadedPoints >= chartObj.options.realtime.numMaxPoints
-                                        );
-                                    }
-                                }
-                    };
-                    break;
+            setupLiveChart($tab,this,settings);
+            if(tabstat=='liveconnections') $tab.find('.statuslinks a.liveconnectionsLink').html(PMA_messages['strLiveConnChart']);
+            tabStatus[$tab.attr('id')]='livetraffic';
+        } else {
+            $(this).html(PMA_messages['strLiveTrafficChart']);
+            setupLiveChart($tab,this,null);
+        }
+        
+        return false;
+    });
+    
+    // Live connection/process charting
+    $('.statuslinks a.liveconnectionsLink').click(function() {
+        var $tab=$(this).parents('div.ui-tabs-panel');
+        var tabstat = tabStatus[$tab.attr('id')];
+        
+        if(tabstat=='static' || tabstat=='livetraffic') {
+            var settings = {
+                series: [{name:'Connections since last refresh', data:[]},{name:'Processes', data:[]}],
+                title: {text:'Connections / Processes'},
+                realtime:{ url:'server_status.php?'+url_query,
+                           type: 'proc',
+                           callback: function(chartObj, curVal, lastVal,numLoadedPoints) {
+                               if(lastVal==null) return;
+                                chartObj.series[0].addPoint(
+                                    { x:curVal.x, y:curVal.y_conn-lastVal.y_conn },
+                                    false, numLoadedPoints >= chartObj.options.realtime.numMaxPoints
+                                );
+                                chartObj.series[1].addPoint(
+                                    { x:curVal.x, y:curVal.y_proc },
+                                    true, numLoadedPoints >= chartObj.options.realtime.numMaxPoints
+                                );                                            
+                            }
+                        }
+            };
+            
+            setupLiveChart($tab,this,settings);
+            if(tabstat=='livetraffic') $tab.find('.statuslinks a.livetrafficLink').html(PMA_messages['strLiveTrafficChart']);
+            tabStatus[$tab.attr('id')]='liveconnections';
+        } else {
+            $(this).html(PMA_messages['strLiveConnChart']);
+            setupLiveChart($tab,this,null);
+        }
+        
+        return false;
+    });
 
-                default:
-                    return;
+    // Live query charting
+    $('.statuslinks a.livequeriesLink').click(function() {
+        var $tab=$(this).parents('div.ui-tabs-panel');
+        var settings=null; 
+        
+        if(tabStatus[$tab.attr('id')]=='static') {
+            settings = {
+                series: [{name:'Issued queries since last refresh', data:[]}],
+                title: {text:'Issued queries'},
+                tooltip: { formatter:function() { return this.point.name; } },
+                realtime:{ url:'server_status.php?'+url_query,
+                          type: 'queries',
+                          callback: function(chartObj, curVal, lastVal,numLoadedPoints) {
+                              if(lastVal==null) return;
+                                chartObj.series[0].addPoint(
+                                    { x:curVal.x,  y:curVal.y-lastVal.y, name:sortedQueriesPointInfo(curVal,lastVal) },
+                                    true, numLoadedPoints >= chartObj.options.realtime.numMaxPoints
+                                );
+                            }
+                        }
+            };
+        } else {
+            $(this).html(PMA_messages['strLiveQueryChart']);
+        }
+
+        setupLiveChart($tab,this,settings);
+        tabStatus[$tab.attr('id')]='livequeries';
+        return false; 
+    });
+    
+    function setupLiveChart($tab,link,settings) {
+        if(settings!=null) {
+            // Loading a chart with existing chart => remove old chart first
+            if(tabStatus[$tab.attr('id')]!='static') {
+                clearTimeout(chart_activeTimeouts[$tab.attr('id')+"_chart_cnt"]);
+                chart_activeTimeouts[$tab.attr('id')+"_chart_cnt"]=null;
+                tabChart[$tab.attr('id')].destroy();
+                // Also reset the select list
+                $tab.find('.statuslinks select').get(0).selectedIndex=0;
             }
-            
+
             if(!settings.chart) settings.chart = {};
-            settings.chart.renderTo=tab.attr('id')+"_chart_cnt";
+            settings.chart.renderTo=$tab.attr('id')+"_chart_cnt";
                         
-            tab.find('.tabInnerContent')
+            $tab.find('.tabInnerContent')
                 .hide()
-                .after('<div style="clear:both; min-width:500px; height:400px; padding-bottom:80px;" id="'+tab.attr('id')+'_chart_cnt"></div>');
-            tabStatus[tab.attr('id')]='realtime';            
-            tabChart[tab.attr('id')]=PMA_createChart(settings);
-            $(this).html(PMA_messages['strStaticData']);
-            tab.find('.statuslinks a.tabRefresh').hide();
-            tab.find('.statuslinks select').show();
+                .after('<div style="clear:both; min-width:500px; height:400px; padding-bottom:80px;" id="'+$tab.attr('id')+'_chart_cnt"></div>');
+            tabChart[$tab.attr('id')]=PMA_createChart(settings);
+            $(link).html(PMA_messages['strStaticData']);
+            $tab.find('.statuslinks a.tabRefresh').hide();
+            $tab.find('.statuslinks select').show();
         } else {
-            clearTimeout(chart_activeTimeouts[tab.attr('id')+"_chart_cnt"]);
-            chart_activeTimeouts[tab.attr('id')+"_chart_cnt"]=null;
-            tab.find('.tabInnerContent').show();
-            tab.find('div#'+tab.attr('id')+'_chart_cnt').remove();
-            tabStatus[tab.attr('id')]='data';
-            tabChart[tab.attr('id')].destroy();
-            $(this).html(PMA_messages['strRealtimeChart']);
-            tab.find('.statuslinks a.tabRefresh').show();
-            tab.find('.statuslinks select').hide();
+            clearTimeout(chart_activeTimeouts[$tab.attr('id')+"_chart_cnt"]);
+            chart_activeTimeouts[$tab.attr('id')+"_chart_cnt"]=null;
+            $tab.find('.tabInnerContent').show();
+            $tab.find('div#'+$tab.attr('id')+'_chart_cnt').remove();
+            tabStatus[$tab.attr('id')]='static';
+            tabChart[$tab.attr('id')].destroy();
+            $tab.find('.statuslinks a.tabRefresh').show();
+            $tab.find('.statuslinks select').get(0).selectedIndex=0;
+            $tab.find('.statuslinks select').hide();
         }
-        return false; 
-    });
-    
+    }
 
     /* 3 Filtering functions */
     $('#filterAlert').change(function() {
@@ -197,54 +262,54 @@ $(function() {
                 initTooltips();
                 break;
             case 'statustabs_queries':
-				if(data!=null) {
-					queryPieChart.destroy();
-					tab.find('.tabInnerContent').html(data);
-				}
+                if(data!=null) {
+                    queryPieChart.destroy();
+                    tab.find('.tabInnerContent').html(data);
+                }
 
-				// Build query statistics chart
-				var cdata = new Array();
-				$.each(jQuery.parseJSON($('#serverstatusquerieschart').html()),function(key,value) {
-					cdata.push([key,parseInt(value)]);
-				});
-				
-				queryPieChart=PMA_createChart({
-					chart: {
-						renderTo: 'serverstatusquerieschart'
-						
-					},
-					title: {
-						text:'',
-						margin:0
-					},
-					series: [{
-						type:'pie',
-						name: 'Query statistics',
-						data: cdata
-					}],
-					plotOptions: {
-						pie: {
-							allowPointSelect: true,
-							cursor: 'pointer',
-							dataLabels: {
-								enabled: true,
-							   formatter: function() {
-								  return '<b>'+ this.point.name +'</b><br> '+ Highcharts.numberFormat(this.percentage, 2) +' %';
-							   }
-							}
-						}
-					},		
-					tooltip: {
-						formatter: function() { return '<b>'+ this.point.name +'</b><br/>'+Highcharts.numberFormat(this.y, 2)+'<br/>('+Highcharts.numberFormat(this.percentage, 2) +' %)'; }
-					}
-				});
+                // Build query statistics chart
+                var cdata = new Array();
+                $.each(jQuery.parseJSON($('#serverstatusquerieschart').html()),function(key,value) {
+                    cdata.push([key,parseInt(value)]);
+                });
+                
+                queryPieChart=PMA_createChart({
+                    chart: {
+                        renderTo: 'serverstatusquerieschart'
+                        
+                    },
+                    title: {
+                        text:'',
+                        margin:0
+                    },
+                    series: [{
+                        type:'pie',
+                        name: 'Query statistics',
+                        data: cdata
+                    }],
+                    plotOptions: {
+                        pie: {
+                            allowPointSelect: true,
+                            cursor: 'pointer',
+                            dataLabels: {
+                                enabled: true,
+                               formatter: function() {
+                                  return '<b>'+ this.point.name +'</b><br> '+ Highcharts.numberFormat(this.percentage, 2) +' %';
+                               }
+                            }
+                        }
+                    },		
+                    tooltip: {
+                        formatter: function() { return '<b>'+ this.point.name +'</b><br/>'+Highcharts.numberFormat(this.y, 2)+'<br/>('+Highcharts.numberFormat(this.percentage, 2) +' %)'; }
+                    }
+                });
                 break;
-				
+                
             case 'statustabs_allvars':
                 if(data!=null) {
-					tab.find('.tabInnerContent').html(data);
-					filterVariables();
-				}
+                    tab.find('.tabInnerContent').html(data);
+                    filterVariables();
+                }
                 break;
         }
         
diff --git a/server_status.php b/server_status.php
index 0ebfa0f..cba7266 100644
--- a/server_status.php
+++ b/server_status.php
@@ -44,10 +44,12 @@ if (isset($_REQUEST['ajax_request'])) {
                 cleanDeprecated($queries);
                 // admin commands are not queries
                 unset($queries['Com_admin_commands']);
-
                 $sum=array_sum($queries);
-
-                $ret = Array('x'=>(microtime(true)*1000),'y'=>$sum,'pointInfo'=>$queries,'numQueries'=>count($queries));
+                $ret = Array('x'=>(microtime(true)*1000),'y'=>$sum,'pointInfo'=>$queries);
+                exit(json_encode($ret));
+            case 'traffic':
+                $traffic = PMA_DBI_fetch_result('SHOW GLOBAL STATUS WHERE Variable_name="Bytes_received" OR Variable_name="Bytes_sent"', 0, 1);
+                $ret = Array('x'=>(microtime(true)*1000),'y_sent'=>$traffic['Bytes_sent'],'y_received'=>$traffic['Bytes_received']);
                 exit(json_encode($ret));
         }
     }
@@ -387,8 +389,11 @@ echo __('Runtime Information');
                     <option value="600">10 <?php echo __('minutes'); ?></option>
                 </select>
 
-                <a class="tabChart" href="#">
-                    <?php echo __('Realtime chart'); ?>
+                <a class="tabChart livetrafficLink" href="#">
+                    <?php echo __('Live traffic chart'); ?>
+                </a>
+                <a class="tabChart liveconnectionsLink" href="#">
+                    <?php echo __('Live conn./process chart'); ?>
                 </a>
             </div>
             <div class="tabInnerContent">
@@ -414,8 +419,8 @@ echo __('Runtime Information');
                     <option value="300">5 <?php echo __('minutes'); ?></option>
                     <option value="600">10 <?php echo __('minutes'); ?></option>
                 </select>
-                <a class="tabChart" href="#">
-                    <?php echo __('Realtime chart'); ?>
+                <a class="tabChart livequeriesLink" href="#">
+                    <?php echo __('Live query chart'); ?>
                 </a>
             </div>
             <div class="tabInnerContent">
diff --git a/themes/original/css/theme_right.css.php b/themes/original/css/theme_right.css.php
index f2bbfb8..94ed5fe 100644
--- a/themes/original/css/theme_right.css.php
+++ b/themes/original/css/theme_right.css.php
@@ -972,6 +972,7 @@ table#serverstatusqueriesdetails th.headerSortDown img.sortableIcon, table#serve
 
 .statuslinks {
     float: <?php echo $right; ?>;
+    white-space: nowrap;
 }
 
 /* Also used for the variables page */
diff --git a/themes/original/jquery/jquery-ui-1.8.custom.css b/themes/original/jquery/jquery-ui-1.8.custom.css
index b2ad14f..f9cc5b7 100644
--- a/themes/original/jquery/jquery-ui-1.8.custom.css
+++ b/themes/original/jquery/jquery-ui-1.8.custom.css
@@ -414,7 +414,12 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
 .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
 .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
 .ui-tabs .ui-tabs-panel { display: block; border: 0; padding: 1em 1.4em; background: none; }
-.ui-tabs .ui-tabs-hide { display: none !important; }
+/*.ui-tabs .ui-tabs-hide { display: none !important; }*/
+/* Firefox has issues rendering SVG in display:none elements. See also http://jqueryui.com/demos/tabs/#...my_slider.2C_Google_Map.2C_sIFR_etc._not_work_when_placed_in_a_hidden_.28inactive.29_tab.3F */
+.ui-tabs .ui-tabs-hide {
+    position: absolute;
+    left: -10000px;
+}
 /* Datepicker
 ----------------------------------*/
 .ui-datepicker { width: 17em; padding: .2em .2em 0; }
diff --git a/themes/pmahomme/css/theme_right.css.php b/themes/pmahomme/css/theme_right.css.php
index 7092358..c403698 100644
--- a/themes/pmahomme/css/theme_right.css.php
+++ b/themes/pmahomme/css/theme_right.css.php
@@ -1175,6 +1175,7 @@ table#serverstatusqueriesdetails th.headerSortDown img.sortableIcon, table#serve
 
 .statuslinks {
     float: <?php echo $right; ?>;
+	white-space: nowrap;
 }
 
 /* Also used for the variables page */
diff --git a/themes/pmahomme/jquery/jquery-ui-1.8.custom.css b/themes/pmahomme/jquery/jquery-ui-1.8.custom.css
index d6a599f..9946953 100644
--- a/themes/pmahomme/jquery/jquery-ui-1.8.custom.css
+++ b/themes/pmahomme/jquery/jquery-ui-1.8.custom.css
@@ -414,7 +414,12 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
 .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
 .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
 .ui-tabs .ui-tabs-panel { display: block; border: 0; padding: 1em 1.4em; background: none; }
-.ui-tabs .ui-tabs-hide { display: none !important; }
+/*.ui-tabs .ui-tabs-hide { display: none !important; }*/
+/* Firefox has issues rendering SVG in display:none elements. See also http://jqueryui.com/demos/tabs/#...my_slider.2C_Google_Map.2C_sIFR_etc._not_work_when_placed_in_a_hidden_.28inactive.29_tab.3F */
+.ui-tabs .ui-tabs-hide {
+    position: absolute;
+    left: -10000px;
+}
 /* Datepicker
 ----------------------------------*/
 .ui-datepicker { width: 17em; padding: .2em .2em 0; }


hooks/post-receive
-- 
phpMyAdmin




More information about the Git mailing list