Esta receta describe cómo recoger estadísticas de uso de red mediante la interfaz Ice::Stats en una aplicación que utilice ZeroC ICE.
La interfaz Ice::Stats permite informar sobre el número de bytes enviados y recibidos por cada invocación:
local interface Stats {
void bytesSent(string protocol, int num);
void bytesReceived(string protocol, int num);
};El proceso a seguir consiste en implementar la interfaz Ice::Stats y registrar ese sirviente a la hora de inicializar el communicator. Una implementación sencilla consistiría en imprimir la información de uso de red:
// MyStats.h #include <Ice/Stats.h> using namespace std; class MyStats : public virtual Ice::Stats { public: virtual void bytesSent(const string& prot, Ice::Int); virtual void bytesReceived(const string& prot, Ice::Int); }; // MyStats.cpp #include <MyStats.h> using namespace std; void MyStats::bytesSent(const string& prot, Ice::Int num) { cerr << prot << ": sent " << num << "bytes" << endl; } void MyStats::bytesReceived(const string& prot, Ice::Int num) { cerr << prot << ": received " << num << "bytes" << endl; }
A continuación, tendremos que instalar un objeto de la clase MyStats en el communicator del cliente, del servidor o de ambos. Este paso se lleva a cabo a la hora de crear el communicator y mediante una estructura del tipo Ice::InitializationData. Como lo normal es que utilicemos la clase Ice::Application, el código del cliente, por ejemplo, quedaría más o menos así:
#include <Ice/Ice.h> #include <Demo.h> #include <MyStats.h> using namespace std; using namespace Demo; class Client : public Ice::Application { public: virtual int run (int argc, char* argv[]) { Ice::ObjectPrx prx = communicator()->stringToProxy("dummy:default p 9999"); Demo::DummyPrx dummy = Demo::DummyPrx::uncheckedCast(prx); dummy>hello(); return 0; } }; int main (int argc, char* argv[]) { Client app; Ice::InitializationData id; id.stats = new MyStats; return app.main(argc, argv, id); return app.main(argc, argv); }
En este caso, en la parte del cliente obtendríamos una salida similar a ésta al invocar la operación hello del proxy dummy:
tcp: received 14bytes tcp: sent 40bytes tcp: received 14bytes tcp: received 11bytes tcp: sent 14bytes