File: CMonitorHandleCounts.cpp

package info (click to toggle)
unixodbc 2.2.14p2-1
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 14,628 kB
  • ctags: 12,533
  • sloc: ansic: 104,243; cpp: 38,571; sh: 15,958; makefile: 2,727; sql: 1
file content (160 lines) | stat: -rw-r--r-- 5,774 bytes parent folder | download | duplicates (2)
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 );
    }
}