void tracker_heartbeat(Tracker* tracker) { MAGIC_ASSERT(tracker); /* prefer our level over the global config */ GLogLevelFlags level = tracker->loglevel; if(!level) { Worker* w = worker_getPrivate(); if(w->cached_engine) { Configuration* c = engine_getConfig(w->cached_engine); level = configuration_getHeartbeatLogLevel(c); } } /* prefer our interval over the global config */ SimulationTime interval = tracker->interval; if(!interval) { Worker* w = worker_getPrivate(); if(w->cached_engine) { Configuration* c = engine_getConfig(w->cached_engine); interval = configuration_getHearbeatInterval(c); } } guint seconds = (guint) (interval / SIMTIME_ONE_SECOND); double in = (double) (tracker->inputBytesLastInterval); double out = (double)(tracker->outputBytesLastInterval); double alloc = (double)(((double)tracker->allocatedBytesLastInterval) / 1024.0); double dealloc = (double)(((double)tracker->deallocatedBytesLastInterval) / 1024.0); double mem = (double)(((double)tracker->allocatedBytesTotal) / 1024.0); double cpuutil = (double)(((double)tracker->processingTimeLastInterval) / interval); double avedelayms = 0.0; if(tracker->numDelayedLastInterval > 0) { double delayms = (double) (((double)tracker->delayTimeLastInterval) / ((double)SIMTIME_ONE_MILLISECOND)); avedelayms = (double) (delayms / ((double) tracker->numDelayedLastInterval)); } /* log the things we are tracking */ logging_log(G_LOG_DOMAIN, level, __FUNCTION__, "[shadow-heartbeat] CPU %f \%, MEM %f KiB, interval %u seconds, alloc %f KiB, dealloc %f KiB, Rx %f B, Tx %f B, avgdelay %f milliseconds", cpuutil, mem, seconds, alloc, dealloc, in, out, avedelayms); /* clear interval stats */ tracker->processingTimeLastInterval = 0; tracker->delayTimeLastInterval = 0; tracker->numDelayedLastInterval = 0; tracker->inputBytesLastInterval = 0; tracker->outputBytesLastInterval = 0; tracker->allocatedBytesLastInterval = 0; tracker->deallocatedBytesLastInterval = 0; /* schedule the next heartbeat */ tracker->lastHeartbeat = worker_getPrivate()->clock_now; HeartbeatEvent* heartbeat = heartbeat_new(tracker); worker_scheduleEvent((Event*)heartbeat, interval, 0); }
static SimulationTime _tracker_getLogInterval(Tracker* tracker) { /* prefer our interval over the global config */ SimulationTime interval = tracker->interval; if(!interval) { Configuration* c = worker_getConfig(); interval = configuration_getHearbeatInterval(c); } return interval; }