version 1.13.8.1, 2005/01/26 16:18:38
|
version 1.28, 2006/08/25 17:40:09
|
|
|
//%2004//////////////////////////////////////////////////////////////////////// |
//%2006//////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development | // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development |
// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. | // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. |
|
|
// IBM Corp.; EMC Corporation, The Open Group. | // IBM Corp.; EMC Corporation, The Open Group. |
// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; | // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; |
// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. | // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. |
|
// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
|
// EMC Corporation; VERITAS Software Corporation; The Open Group. |
|
// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
|
// EMC Corporation; Symantec Corporation; The Open Group. |
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a copy | // Permission is hereby granted, free of charge, to any person obtaining a copy |
// of this software and associated documentation files (the "Software"), to | // of this software and associated documentation files (the "Software"), to |
|
|
// | // |
//============================================================================== | //============================================================================== |
// | // |
// Author: Arthur Pichlkostner |
|
// (checked in: Markus Mueller sedgewick_de@yahoo.de) |
|
// |
|
// Modified By: |
|
// |
|
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
#ifndef STATISTICAL_DATA_H |
#ifndef Pegasus_StatisticalData_h |
#define STATISTICAL_DATA_H |
#define Pegasus_StatisticalData_h |
| |
#include <Pegasus/Common/Config.h> | #include <Pegasus/Common/Config.h> |
#include <iostream> | #include <iostream> |
#include <cstring> | #include <cstring> |
|
#include <Pegasus/Common/Linkage.h> |
#include <Pegasus/Common/InternalException.h> | #include <Pegasus/Common/InternalException.h> |
#include <Pegasus/Common/IPC.h> |
|
#include <Pegasus/Common/String.h> | #include <Pegasus/Common/String.h> |
#include <Pegasus/Common/CIMProperty.h> | #include <Pegasus/Common/CIMProperty.h> |
#include <Pegasus/Common/CIMInstance.h> | #include <Pegasus/Common/CIMInstance.h> |
#include <Pegasus/Common/CIMDateTime.h> | #include <Pegasus/Common/CIMDateTime.h> |
#include <Pegasus/Common/Linkage.h> |
#include <Pegasus/Common/CIMMessage.h> |
|
#include <Pegasus/Common/Mutex.h> |
|
#include <Pegasus/Common/Time.h> |
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
#ifndef PEGASUS_DISABLE_PERFINST | #ifndef PEGASUS_DISABLE_PERFINST |
| |
#define STAT_GETSTARTTIME \ | #define STAT_GETSTARTTIME \ |
CIMDateTime startTime = CIMDateTime::getCurrentDateTime();\ |
TimeValue startTime = TimeValue::getCurrentTime(); |
|
|
|
|
#define STAT_PMS_PROVIDEREND \ |
|
response->endProvider(); \ |
|
response->setStartServerTime(request->getStartServerTime()); \ |
|
response->setStartProviderTime(startTime); |
|
|
|
| |
#define STAT_SERVERSTART \ | #define STAT_SERVERSTART \ |
request->setStartServerTime(startTime); | request->setStartServerTime(startTime); |
| |
|
|
#define STAT_SERVEREND \ | #define STAT_SERVEREND \ |
response->endServer();\ | response->endServer();\ |
| |
#define STAT_BYTESSENT \ | #define STAT_BYTESSENT \ |
Uint16 statType = (response->getType() >= CIM_GET_CLASS_RESPONSE_MESSAGE)? \ | Uint16 statType = (response->getType() >= CIM_GET_CLASS_RESPONSE_MESSAGE)? \ |
response->getType() - CIM_GET_CLASS_RESPONSE_MESSAGE:response->getType() - 1;\ | response->getType() - CIM_GET_CLASS_RESPONSE_MESSAGE:response->getType() - 1;\ |
StatisticalData::current()->addToValue(message.size(), statType, StatisticalData::BYTES_SENT); |
StatisticalData::current()->addToValue(message.size(), statType, StatisticalData::PEGASUS_STATDATA_BYTES_SENT); |
| |
| |
| |
#define STAT_SERVEREND_ERROR \ | #define STAT_SERVEREND_ERROR \ |
response->endServer(); | response->endServer(); |
| |
|
|
#define STAT_PROVIDERSTART \ |
|
request->startProvider(); |
|
|
|
|
|
#define STAT_PROVIDEREND \ |
|
request->endProvider(); |
|
|
|
#define STAT_COPYDISPATCHER \ |
|
response->setStartServerTime(request->getStartServerTime()); |
|
|
|
|
|
|
|
// copy request timing info into response |
|
#define STAT_COPYDISPATCHER_REP \ |
|
response->setStartServerTime(request->getStartServerTime()); \ |
|
response->setStartProviderTime(request->getStartProviderTime()); \ |
|
response->setEndProviderTime(request->getEndProviderTime()); |
|
|
|
|
|
|
|
/*the request size value must be stored (requSize) and passed to the StatisticalData object at the | /*the request size value must be stored (requSize) and passed to the StatisticalData object at the |
end of processing other wise it will be the ONLY vlaue that is passed to the client which reports | end of processing other wise it will be the ONLY vlaue that is passed to the client which reports |
the current state of the object, not the pevious (one command ago) state */ | the current state of the object, not the pevious (one command ago) state */ |
|
|
#define STAT_BYTESREAD \ | #define STAT_BYTESREAD \ |
Uint16 statType = (request->getType() >= CIM_GET_CLASS_RESPONSE_MESSAGE)? \ | Uint16 statType = (request->getType() >= CIM_GET_CLASS_RESPONSE_MESSAGE)? \ |
request->getType() - CIM_GET_CLASS_RESPONSE_MESSAGE: request->getType()-1;\ | request->getType() - CIM_GET_CLASS_RESPONSE_MESSAGE: request->getType()-1;\ |
StatisticalData::current()->requSize = contentLength; \ |
StatisticalData::current()->requSize = contentLength; |
StatisticalData::current()->addToValue(contentLength, statType, StatisticalData::BYTES_READ); |
|
| |
|
|
|
|
|
|
|
|
//serverResponseTime should be an Uint64 but the << operator wont accept that |
|
#define STAT_SERVERTIME \ |
|
if (StatisticalData::current()->copyGSD)\ |
|
out << "WBEMServerResponseTime: " << (Uint32) serverResponseTime << "\r\n"; |
|
#else | #else |
#define STAT_GETSTARTTIME | #define STAT_GETSTARTTIME |
#define STAT_PMS_PROVIDEREND |
|
#define STAT_SERVERSTART | #define STAT_SERVERSTART |
#define STAT_SERVEREND | #define STAT_SERVEREND |
#define STAT_SERVEREND_ERROR | #define STAT_SERVEREND_ERROR |
#define STAT_PROVIDERSTART |
|
#define STAT_PROVIDEREND |
|
#define STAT_PROVIDEREND_REP |
|
#define STAT_COPYDISPATCHER |
|
#define STAT_COPYDISPATCHER_REP |
|
#define STAT_BYTESREAD | #define STAT_BYTESREAD |
#define STAT_SERVERTIME |
|
#define STAT_BYTESSENT | #define STAT_BYTESSENT |
#endif | #endif |
| |
|
class PEGASUS_COMMON_LINKAGE StatProviderTimeMeasurement |
|
{ |
|
public: |
|
StatProviderTimeMeasurement(CIMMessage* message) |
|
: _message(message) |
|
{ |
|
#ifndef PEGASUS_DISABLE_PERFINST |
|
_message->startProvider(); |
|
#endif |
|
} |
|
|
|
~StatProviderTimeMeasurement() |
|
{ |
|
#ifndef PEGASUS_DISABLE_PERFINST |
|
_message->endProvider(); |
|
#endif |
|
} |
|
|
|
private: |
|
StatProviderTimeMeasurement(); |
|
StatProviderTimeMeasurement(const StatProviderTimeMeasurement&); |
|
StatProviderTimeMeasurement& operator=(const StatProviderTimeMeasurement&); |
|
|
|
CIMMessage* _message; |
|
}; |
|
|
class PEGASUS_COMMON_LINKAGE StatisticalData | class PEGASUS_COMMON_LINKAGE StatisticalData |
{ | { |
public: | public: |
enum StatRequestType{ | enum StatRequestType{ |
GET_CLASS, | GET_CLASS, |
GET_INSTANCE, | GET_INSTANCE, |
EXPORT_INDICATION, |
INDICATION_DELIVERY, |
DELETE_CLASS, | DELETE_CLASS, |
DELETE_INSTANCE, | DELETE_INSTANCE, |
CREATE_CLASS, | CREATE_CLASS, |
|
|
SET_QUALIFIER, | SET_QUALIFIER, |
DELETE_QUALIFIER, | DELETE_QUALIFIER, |
ENUMERATE_QUALIFIERS, | ENUMERATE_QUALIFIERS, |
|
INVOKE_METHOD, |
NUMBER_OF_TYPES | NUMBER_OF_TYPES |
}; | }; |
| |
enum StatDataType{ | enum StatDataType{ |
SERVER, |
PEGASUS_STATDATA_SERVER, |
PROVIDER, |
PEGASUS_STATDATA_PROVIDER, |
BYTES_SENT, |
PEGASUS_STATDATA_BYTES_SENT, |
BYTES_READ |
PEGASUS_STATDATA_BYTES_READ |
}; | }; |
| |
static const Uint32 length; | static const Uint32 length; |