Files
mars-flaim/xflaim/csharp/xflaim/DbSystemStats.cpp
ahodgkinson 12a621dc04 Changed license to LGPL.
git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@1010 0109f412-320b-0410-ab79-c3e0c5ffbbe6
2007-01-23 11:22:22 +00:00

162 lines
6.0 KiB
C++

//------------------------------------------------------------------------------
// Desc: Native C routines to support C# DbSystemStats class
// Tabs: 3
//
// Copyright (c) 2006-2007 Novell, Inc. All Rights Reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; version 2.1
// of the License.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Library Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, contact Novell, Inc.
//
// To contact Novell about this file by physical or electronic mail,
// you may find current contact information at www.novell.com.
//
// $Id$
//------------------------------------------------------------------------------
#include "xflaim.h"
/****************************************************************************
Desc:
****************************************************************************/
FLMEXTC FLMEXP void FLMAPI xflaim_DbSystemStats_freeStats(
IF_DbSystem * pDbSystem,
XFLM_STATS * pStats)
{
if (pStats)
{
pDbSystem->freeStats( pStats);
f_free( &pStats);
}
}
/****************************************************************************
Desc:
****************************************************************************/
FLMEXTC FLMEXP void FLMAPI xflaim_DbSystemStats_getGeneralStats(
XFLM_STATS * pStats,
FLMUINT32 * pui32NumDatabases,
FLMUINT32 * pui32StartTime,
FLMUINT32 * pui32StopTime)
{
*pui32NumDatabases = (FLMUINT32)pStats->uiNumDbStats;
*pui32StartTime = (FLMUINT32)pStats->uiStartTime;
*pui32StopTime = (FLMUINT32)pStats->uiStopTime;
}
// IMPORTANT NOTE: This structure needs to stay in sync with the
// corresponding class in the C# code.
typedef struct
{
char * pszDbName;
FLMUINT32 ui32NumLFiles;
XFLM_RTRANS_STATS ReadTransStats;
XFLM_UTRANS_STATS UpdateTransStats;
XFLM_BLOCKIO_STATS LFHBlockStats;
XFLM_BLOCKIO_STATS AvailBlockStats;
XFLM_DISKIO_STAT DbHdrWrites;
XFLM_DISKIO_STAT LogBlockWrites;
XFLM_DISKIO_STAT LogBlockRestores;
XFLM_DISKIO_STAT LogBlockReads;
FLMUINT32 ui32LogBlockChkErrs;
FLMUINT32 ui32ReadErrors;
FLMUINT32 ui32WriteErrors;
F_LOCK_STATS LockStats;
} CS_XFLM_DB_STATS;
/****************************************************************************
Desc:
****************************************************************************/
FLMEXTC FLMEXP RCODE FLMAPI xflaim_DbSystemStats_getDbStats(
XFLM_STATS * pStats,
FLMUINT32 ui32DatabaseNum,
CS_XFLM_DB_STATS * pCSDbStats)
{
RCODE rc = NE_XFLM_OK;
XFLM_DB_STATS * pDbStat;
if ((FLMUINT)ui32DatabaseNum > pStats->uiNumDbStats - 1)
{
rc = RC_SET( NE_XFLM_INVALID_PARM);
goto Exit;
}
pDbStat = &pStats->pDbStats [ui32DatabaseNum];
pCSDbStats->pszDbName = pDbStat->pszDbName;
pCSDbStats->ui32NumLFiles = (FLMUINT32)pDbStat->uiNumLFileStats;
f_memcpy( &pCSDbStats->ReadTransStats, &pDbStat->ReadTransStats, sizeof( XFLM_RTRANS_STATS));
f_memcpy( &pCSDbStats->UpdateTransStats, &pDbStat->UpdateTransStats, sizeof( XFLM_UTRANS_STATS));
f_memcpy( &pCSDbStats->LFHBlockStats, &pDbStat->LFHBlockStats, sizeof( XFLM_BLOCKIO_STATS));
f_memcpy( &pCSDbStats->AvailBlockStats, &pDbStat->AvailBlockStats, sizeof( XFLM_BLOCKIO_STATS));
f_memcpy( &pCSDbStats->DbHdrWrites, &pDbStat->DbHdrWrites, sizeof( XFLM_DISKIO_STAT));
f_memcpy( &pCSDbStats->LogBlockWrites, &pDbStat->LogBlockWrites, sizeof( XFLM_DISKIO_STAT));
f_memcpy( &pCSDbStats->LogBlockRestores, &pDbStat->LogBlockRestores, sizeof( XFLM_DISKIO_STAT));
f_memcpy( &pCSDbStats->LogBlockReads, &pDbStat->LogBlockReads, sizeof( XFLM_DISKIO_STAT));
pCSDbStats->ui32LogBlockChkErrs = (FLMUINT32)pDbStat->uiLogBlockChkErrs;
pCSDbStats->ui32ReadErrors = (FLMUINT32)pDbStat->uiReadErrors;
pCSDbStats->ui32WriteErrors = (FLMUINT32)pDbStat->uiWriteErrors;
f_memcpy( &pCSDbStats->LockStats, &pDbStat->LockStats, sizeof( F_LOCK_STATS));
Exit:
return( rc);
}
// IMPORTANT NOTE: This structure needs to stay in sync with the
// corresponding class in the C# code.
typedef struct
{
XFLM_BLOCKIO_STATS RootBlockStats;
XFLM_BLOCKIO_STATS MiddleBlockStats;
XFLM_BLOCKIO_STATS LeafBlockStats;
FLMUINT64 ui64BlockSplits;
FLMUINT64 ui64BlockCombines;
FLMUINT32 ui32LFileNum;
FLMINT32 i32LfType;
} CS_XFLM_LFILE_STATS;
/****************************************************************************
Desc:
****************************************************************************/
FLMEXTC FLMEXP RCODE FLMAPI xflaim_DbSystemStats_getLFileStats(
XFLM_STATS * pStats,
FLMUINT32 ui32DatabaseNum,
FLMUINT32 ui32LFileNum,
CS_XFLM_LFILE_STATS * pCSLFileStats)
{
RCODE rc = NE_XFLM_OK;
XFLM_DB_STATS * pDbStat;
XFLM_LFILE_STATS * pLFileStat;
if (ui32DatabaseNum > pStats->uiNumDbStats - 1)
{
rc = RC_SET( NE_XFLM_INVALID_PARM);
goto Exit;
}
pDbStat = &pStats->pDbStats [ui32DatabaseNum];
if ((FLMUINT)ui32LFileNum > pDbStat->uiNumLFileStats)
{
rc = RC_SET( NE_XFLM_INVALID_PARM);
goto Exit;
}
pLFileStat = &pDbStat->pLFileStats [ui32LFileNum];
f_memcpy( &pCSLFileStats->RootBlockStats, &pLFileStat->RootBlockStats, sizeof( XFLM_BLOCKIO_STATS));
f_memcpy( &pCSLFileStats->MiddleBlockStats, &pLFileStat->MiddleBlockStats, sizeof( XFLM_BLOCKIO_STATS));
f_memcpy( &pCSLFileStats->LeafBlockStats, &pLFileStat->LeafBlockStats, sizeof( XFLM_BLOCKIO_STATS));
pCSLFileStats->ui64BlockSplits = pLFileStat->ui64BlockSplits;
pCSLFileStats->ui64BlockCombines = pLFileStat->ui64BlockCombines;
pCSLFileStats->ui32LFileNum = (FLMUINT32)pLFileStat->uiLFileNum;
pCSLFileStats->i32LfType = (FLMINT32)pLFileStat->eLfType;
Exit:
return( rc);
}