void housecleanprops(void) { int limit, max; dbref i, j; if ((proploaded_Q.count < 100) || (proploaded_Q.count < (tp_max_loaded_objs * db_top / 100))) return; limit = 40; max = db_top; i = first_ringqueue_obj(&proploaded_Q); while (limit > 0 && max-- > 0 && i != NOTHING) { j = next_ringqueue_obj(&proploaded_Q, i); if (disposeprops_notime(i)) limit--; i = j; } }
void report_cachestats(dbref player) { dbref obj; int count, total, checked, gap, ipct; time_t when, now; double pct; char buf[BUFFER_LEN]; notify(player, "LRU proploaded cache time distribution graph."); total = proploaded_Q.count; checked = 0; gap = 0; when = now = time(NULL); notify(player, "Mins Objs (%of db) Graph of #objs vs. age."); for (; checked < total; when -= 60) { count = 0; obj = first_ringqueue_obj(&proploaded_Q); while (obj != NOTHING) { if (DBFETCH(obj)->propstime > (when - 60) && DBFETCH(obj)->propstime <= when) count++; obj = next_ringqueue_obj(&proploaded_Q, obj); } checked += count; pct = count * 100.0 / total; ipct = count * 100 / total; if (ipct > 50) ipct = 50; if (count) { if (gap) notify(player, "[gap]"); snprintf(buf, sizeof(buf), "%3ld:%6d (%5.2f%%) %*s", ((now - when) / 60), count, pct, ipct, "*"); notify(player, buf); gap = 0; } else { gap = 1; } } }