00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include "simlpy/interpreter_defs.h"
00032
00033 #include "BundleCollector.h"
00034 #include "pydtn/WrapNode.h"
00035 #include "pydtn/Statistics.h"
00036
00037 using namespace StoreProfile;
00038
00039 BundleCollector::BundleCollector( std::ostream& s ) :
00040 m_stream(s)
00041 {
00042 }
00043
00044 BundleCollector::~BundleCollector()
00045 {
00046 }
00047
00048 void
00049 BundleCollector::operator()( const WrapNode& wn ) const
00050 {
00051 Stat storedData;
00052 Stat storedAcks;
00053 Stat queuedData;
00054 Stat queuedAcks;
00055
00056 DTN::BundlePointer itr = wn.cachedVolatile();
00057 for ( ; ! itr.isNull() ; itr = itr.next() )
00058 {
00059 const DTN::Bundle* b = itr.repr()->bundle();
00060 size_t length = b->size();
00061 if ( 0 != b )
00062 {
00063 if ( DTN::Bundle::kACK & b->type() )
00064 {
00065 queuedAcks.add( length );
00066 }
00067 else
00068 {
00069 queuedData.add( length );
00070 }
00071 }
00072 }
00073
00074 itr = wn.cachedPersistent();
00075 for ( ; ! itr.isNull() ; itr = itr.next() )
00076 {
00077 const DTN::Bundle* b = itr.repr()->bundle();
00078 size_t length = b->size();
00079 if ( 0 != b )
00080 {
00081 if ( DTN::Bundle::kACK & b->type() )
00082 {
00083 storedAcks.add( length );
00084 }
00085 else
00086 {
00087 storedData.add( length );
00088 }
00089 }
00090 }
00091
00092 m_stream << wn.addrString() << " "
00093 << "qd: " << queuedData.n() << " " << queuedData.s() << " "
00094 << "qa: " << queuedAcks.n() << " " << queuedAcks.s() << " "
00095 << "sd: " << storedData.n() << " " << storedData.s() << " "
00096 << "sa: " << storedAcks.n() << " " << storedAcks.s() << std::endl;
00097 }