From d42c47fa854f25d3e8f8719a799fc792d6c6b1ed Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Fri, 23 Sep 2005 15:12:26 +0000 Subject: [PATCH] Added rsrv statistics fetch for vxStats --- src/rsrv/camessage.c | 5 +++++ src/rsrv/caservertask.c | 16 ++++++++++++++++ src/rsrv/cast_server.c | 5 +++-- src/rsrv/rsrv.h | 8 ++++++-- src/rsrv/server.h | 1 + 5 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/rsrv/camessage.c b/src/rsrv/camessage.c index 7503f660e..219cd861f 100644 --- a/src/rsrv/camessage.c +++ b/src/rsrv/camessage.c @@ -1058,6 +1058,10 @@ unsigned cid pchannel); } while (status == S_bucket_idInUse); + if ( status == S_bucket_success ) { + rsrvChannelCount++; + } + UNLOCK_CLIENTQ; if(status!=S_bucket_success){ @@ -1954,6 +1958,7 @@ LOCAL int clear_channel_reply ( caHdrLargeArray *mp, errMessage (status, "Bad resource id during channel clear"); logBadId ( client, mp, pPayload ); } + rsrvChannelCount--; UNLOCK_CLIENTQ; freeListFree(rsrvChanFreeList, pciu); diff --git a/src/rsrv/caservertask.c b/src/rsrv/caservertask.c index 9d284e3f1..b6393a533 100644 --- a/src/rsrv/caservertask.c +++ b/src/rsrv/caservertask.c @@ -618,6 +618,7 @@ void destroy_tcp_client ( struct client *client ) rsrvFreePutNotify ( client, pciu->pPutNotify ); LOCK_CLIENTQ; status = bucketRemoveItemUnsignedId ( pCaBucket, &pciu->sid); + rsrvChannelCount--; UNLOCK_CLIENTQ; if ( status != S_bucket_success ) { errPrintf ( status, __FILE__, __LINE__, @@ -886,3 +887,18 @@ struct client *create_tcp_client ( SOCKET sock ) return client; } +void casStatsFetch ( unsigned *pChanCount, unsigned *pCircuitCount ) +{ + LOCK_CLIENTQ; + { + int circuitCount = ellCount ( &clientQ ); + if ( circuitCount < 0 ) { + *pCircuitCount = 0; + } + else { + *pCircuitCount = (unsigned) circuitCount; + } + *pChanCount = rsrvChannelCount; + } + UNLOCK_CLIENTQ; +} diff --git a/src/rsrv/cast_server.c b/src/rsrv/cast_server.c index 293cc2eea..1a4acf4b2 100644 --- a/src/rsrv/cast_server.c +++ b/src/rsrv/cast_server.c @@ -79,14 +79,15 @@ LOCAL void clean_addrq() if (delay > timeout) { ellDelete(&prsrv_cast_client->addrq, &pciu->node); - LOCK_CLIENTQ; + LOCK_CLIENTQ; s = bucketRemoveItemUnsignedId ( pCaBucket, &pciu->sid); if(s){ errMessage (s, "Bad id at close"); } - UNLOCK_CLIENTQ; + rsrvChannelCount--; + UNLOCK_CLIENTQ; freeListFree(rsrvChanFreeList, pciu); ndelete++; if(delay>maxdelay) maxdelay = delay; diff --git a/src/rsrv/rsrv.h b/src/rsrv/rsrv.h index 6d41abab9..d690ea8d6 100644 --- a/src/rsrv/rsrv.h +++ b/src/rsrv/rsrv.h @@ -24,8 +24,12 @@ epicsShareFunc int epicsShareAPI rsrv_init (void); epicsShareFunc void epicsShareAPI casr (unsigned level); -epicsShareFunc void epicsShareAPI casHostNameInitiatingCurrentThread ( char * pBuf, unsigned bufSize ); -epicsShareFunc void epicsShareAPI casUserNameInitiatingCurrentThread ( char * pBuf, unsigned bufSize ); +epicsShareFunc void epicsShareAPI casHostNameInitiatingCurrentThread ( + char * pBuf, unsigned bufSize ); +epicsShareFunc void epicsShareAPI casUserNameInitiatingCurrentThread ( + char * pBuf, unsigned bufSize ); +void casStatsFetch ( unsigned *pChanCount, unsigned *pConnCount ); + #define RSRV_OK 0 #define RSRV_ERROR (-1) diff --git a/src/rsrv/server.h b/src/rsrv/server.h index 386080f7a..60cd10d31 100644 --- a/src/rsrv/server.h +++ b/src/rsrv/server.h @@ -167,6 +167,7 @@ GLBLTYPE void *rsrvSmallBufFreeListTCP; GLBLTYPE void *rsrvLargeBufFreeListTCP; GLBLTYPE unsigned rsrvSizeofLargeBufTCP; GLBLTYPE void *rsrvPutNotifyFreeList; +GLBLTYPE unsigned rsrvChannelCount; #define CAS_HASH_TABLE_SIZE 4096