1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
/*!
* \file
*
* \author Peter Harvey <pharvey@peterharvey.org>
* \author \sa AUTHORS file
* \version 2
* \date 2007
* \license Copyright unixODBC Project 2007-2008, LGPL
*/
#include "CMonitorHandleCounts.h"
CMonitorHandleCounts::CMonitorHandleCounts( QWidget *pwidgetParent )
: QWidget( pwidgetParent )
{
setToolTip( tr( "number of active ODBC handles" ) );
setWhatsThis( tr( "This shows the number of active ODBC handles at any given moment. The values are automatically updated frequently. This is useful for debugging and performance monitoring." ) );
// lets assume, for the moment, that we can get monitoring info from DM...
bEnabled = true;
QGridLayout *pLayout = new QGridLayout;
// setup labels to show current values as simple numbers...
{
plabelEnvironment = new QLabel( "0" );
plabelConnection = new QLabel( "0" );
plabelStatement = new QLabel( "0" );
plabelDescriptor = new QLabel( "0" );
pLayout->addWidget( plabelEnvironment, 0, 0 );
pLayout->addWidget( plabelConnection, 0, 1 );
pLayout->addWidget( plabelStatement, 0, 2 );
pLayout->addWidget( plabelDescriptor, 0, 3 );
}
// setup sliders to show current values in an interesting manner...
{
// set default scale for sliders...
nSliderMax = 10;
psliderEnvironment = new QSlider;
psliderConnection = new QSlider;
psliderStatement = new QSlider;
psliderDescriptor = new QSlider;
psliderEnvironment->setInvertedAppearance( true );
psliderConnection->setInvertedAppearance( true );
psliderStatement->setInvertedAppearance( true );
psliderDescriptor->setInvertedAppearance( true );
// psliderEnvironment->setTickmarks( QSlider::Both );
// psliderConnection->setTickmarks( QSlider::Both );
// psliderStatement->setTickmarks( QSlider::Both );
// psliderDescriptor->setTickmarks( QSlider::Both );
psliderEnvironment->setMinimum( 0-nSliderMax );
psliderConnection->setMinimum( 0-nSliderMax );
psliderStatement->setMinimum( 0-nSliderMax );
psliderDescriptor->setMinimum( 0-nSliderMax );
psliderEnvironment->setMaximum( 0 );
psliderConnection->setMaximum( 0 );
psliderStatement->setMaximum( 0 );
psliderDescriptor->setMaximum( 0 );
pLayout->addWidget( psliderEnvironment, 1, 0 );
pLayout->addWidget( psliderConnection, 1, 1 );
pLayout->addWidget( psliderStatement, 1, 2 );
pLayout->addWidget( psliderDescriptor, 1, 3 );
}
// setup some labels to show what each slider is for...
{
pLayout->addWidget( new QLabel( tr( "Env" ) ), 2, 0 );
pLayout->addWidget( new QLabel( tr( "Con" ) ), 2, 1 );
pLayout->addWidget( new QLabel( tr( "Sta" ) ), 2, 2 );
pLayout->addWidget( new QLabel( tr( "Des" ) ), 2, 3 );
}
// get timer going...
{
hStats = 0;
pTimer = new QTimer( this );
connect( pTimer, SIGNAL(timeout()), SLOT(slotLoad()) );
pTimer->start( 2000 ); // 1000 = 1 second
}
// adopt our layout...
setLayout( pLayout );
}
CMonitorHandleCounts::~CMonitorHandleCounts()
{
if ( hStats )
uodbc_close_stats( hStats );
}
void CMonitorHandleCounts::slotLoad()
{
// only bother with this if we are visible...
if ( !isVisible() )
return;
if ( !bEnabled )
return;
// init coms with DM but don't even bother the DM until (if) we become visible...
if ( !hStats )
{
if ( uodbc_open_stats( &hStats, UODBC_STATS_READ ) != 0 )
{
// char szError[512];
// QMessageBox::critical( this, tr( "Monitor Handle Counts" ), QString( tr( "uodbc_open_stats failed\n%1" ) ).arg( uodbc_stats_error( szError, 512 ) ) );
// bEnabled = false;
return;
}
}
// get current handle counts...
{
uodbc_stats_retentry aStats[4];
uodbc_get_stats( hStats, -1, aStats, 4 );
// if ( uodbc_get_stats( hStats, -1, aStats, 4 ) == 4 )
// {
// char szError[512];
// QMessageBox::critical( this, tr( "Monitor Handle Counts" ), QString( tr( "uodbc_get_stats failed\n%1" ) ).arg( uodbc_stats_error( szError, 512 ) ) );
// bEnabled = false;
// return;
// }
// bump up our scale for the sliders as needed...
if ( aStats[0].value.l_value > nSliderMax )
nSliderMax = aStats[0].value.l_value;
if ( aStats[1].value.l_value > nSliderMax )
nSliderMax = aStats[1].value.l_value;
if ( aStats[2].value.l_value > nSliderMax )
nSliderMax = aStats[2].value.l_value;
if ( aStats[3].value.l_value > nSliderMax )
nSliderMax = aStats[3].value.l_value;
// update UI bits...
plabelEnvironment->setText( QString( "%1" ).arg( aStats[0].value.l_value ) );
psliderEnvironment->setMinimum( 0-nSliderMax );
psliderEnvironment->setValue( 0-aStats[0].value.l_value );
plabelConnection->setText( QString( "%1" ).arg( aStats[1].value.l_value ) );
psliderConnection->setMinimum( 0-nSliderMax );
psliderConnection->setValue( 0-aStats[1].value.l_value );
plabelStatement->setText( QString( "%1" ).arg( aStats[2].value.l_value ) );
psliderStatement->setMinimum( 0-nSliderMax );
psliderStatement->setValue( 0-aStats[2].value.l_value );
plabelDescriptor->setText( QString( "%1" ).arg( aStats[3].value.l_value ) );
psliderDescriptor->setMinimum( 0-nSliderMax );
psliderDescriptor->setValue( 0-aStats[3].value.l_value );
}
}
|