diff options
Diffstat (limited to 'src/mcp')
| -rw-r--r-- | src/mcp/tools/common/history.c | 19 | ||||
| -rw-r--r-- | src/mcp/tools/common/history.h | 1 | ||||
| -rw-r--r-- | src/mcp/tools/common/memory_index.c | 19 | ||||
| -rw-r--r-- | src/mcp/tools/common/memory_index.h | 1 | ||||
| -rw-r--r-- | src/mcp/tools/get_system_health.c | 19 |
5 files changed, 59 insertions, 0 deletions
diff --git a/src/mcp/tools/common/history.c b/src/mcp/tools/common/history.c index 9f08e84..0e600d4 100644 --- a/src/mcp/tools/common/history.c +++ b/src/mcp/tools/common/history.c @@ -245,6 +245,25 @@ tiny_history_index_build(const tiny_store_t *store) return index; } +uint64_t +tiny_history_index_memory_estimate(const tiny_history_index_t *index) +{ + uint64_t total; + size_t position; + if (!index) + { + return 0; + } + total = sizeof(*index) + index->capacity * sizeof(*index->buckets) + + index->slot_capacity * sizeof(*index->slots); + for (position = 0; position < index->count; ++position) + { + total += strlen(index->buckets[position].session_id) + 1; + total += index->buckets[position].capacity * sizeof(*index->buckets[position].entries); + } + return total; +} + void tiny_history_index_free(tiny_history_index_t *index) { diff --git a/src/mcp/tools/common/history.h b/src/mcp/tools/common/history.h index 3b23027..ed7d11a 100644 --- a/src/mcp/tools/common/history.h +++ b/src/mcp/tools/common/history.h @@ -20,6 +20,7 @@ bool tiny_history_index_session(const tiny_history_index_t *index, const size_t **entries, size_t *count); size_t tiny_history_index_session_count(const tiny_history_index_t *index); +uint64_t tiny_history_index_memory_estimate(const tiny_history_index_t *index); bool tiny_history_index_session_at(const tiny_history_index_t *index, size_t position, const char **session_id, diff --git a/src/mcp/tools/common/memory_index.c b/src/mcp/tools/common/memory_index.c index e3841e2..32a97d1 100644 --- a/src/mcp/tools/common/memory_index.c +++ b/src/mcp/tools/common/memory_index.c @@ -165,6 +165,25 @@ tiny_memory_index_build(const tiny_store_t *store) return index; } +uint64_t +tiny_memory_index_memory_estimate(const tiny_memory_index_t *index) +{ + uint64_t total; + size_t position; + if (!index) + { + return 0; + } + total = sizeof(*index) + index->count * sizeof(*index->buckets) + + index->slot_capacity * sizeof(*index->slots); + for (position = 0; position < index->count; ++position) + { + total += index->buckets[position].incoming_capacity + * sizeof(*index->buckets[position].incoming); + } + return total; +} + void tiny_memory_index_free(tiny_memory_index_t *index) { diff --git a/src/mcp/tools/common/memory_index.h b/src/mcp/tools/common/memory_index.h index fbe43a7..71e450d 100644 --- a/src/mcp/tools/common/memory_index.h +++ b/src/mcp/tools/common/memory_index.h @@ -20,5 +20,6 @@ bool tiny_memory_index_incoming(const tiny_memory_index_t *index, const char *message_id, const tiny_relation_reference_t **references, size_t *count); +uint64_t tiny_memory_index_memory_estimate(const tiny_memory_index_t *index); #endif diff --git a/src/mcp/tools/get_system_health.c b/src/mcp/tools/get_system_health.c index f84511f..893a3b1 100644 --- a/src/mcp/tools/get_system_health.c +++ b/src/mcp/tools/get_system_health.c @@ -35,6 +35,25 @@ call_get_system_health(const mcpc_tool_t *tool, mcpc_ucbr_t *result) tiny_json_u64(&json, health.update_records); tiny_json_raw(&json, ",\"dead_bytes\":"); tiny_json_u64(&json, health.dead_bytes); + tiny_json_raw(&json, ",\"memory_estimate\":{\"total_bytes\":"); + tiny_json_u64(&json, + health.memory_entry_bytes + health.memory_body_bytes + health.memory_metadata_bytes + + tiny_search_index_memory_estimate(context->search_index) + + tiny_history_index_memory_estimate(context->history_index) + + tiny_memory_index_memory_estimate(context->memory_index)); + tiny_json_raw(&json, ",\"store_entries_bytes\":"); + tiny_json_u64(&json, health.memory_entry_bytes); + tiny_json_raw(&json, ",\"body_bytes\":"); + tiny_json_u64(&json, health.memory_body_bytes); + tiny_json_raw(&json, ",\"metadata_bytes\":"); + tiny_json_u64(&json, health.memory_metadata_bytes); + tiny_json_raw(&json, ",\"search_index_bytes\":"); + tiny_json_u64(&json, tiny_search_index_memory_estimate(context->search_index)); + tiny_json_raw(&json, ",\"history_index_bytes\":"); + tiny_json_u64(&json, tiny_history_index_memory_estimate(context->history_index)); + tiny_json_raw(&json, ",\"relation_index_bytes\":"); + tiny_json_u64(&json, tiny_memory_index_memory_estimate(context->memory_index)); + tiny_json_raw(&json, "}"); tiny_json_raw(&json, ",\"io\":{\"write_bytes\":"); tiny_json_u64(&json, health.write_bytes); tiny_json_raw(&json, ",\"write_calls\":"); |
