**feat(core): add getStatistics method to BrainyData for detailed DB insights**

- **New Method**:
  - Introduced a new `getStatistics` method in `brainyData.ts` to retrieve key database metrics:
    - Counts for nouns, verbs, metadata entries, and HNSW index size.

- **Error Handling**:
  - Added try-catch blocks to ensure robust error management when fetching metadata or logging failures.

- **Purpose**:
  - Enhances observability of the database state, providing valuable insights for diagnostics and monitoring.
This commit is contained in:
David Snelling 2025-07-23 12:39:17 -07:00
parent 086d27deec
commit b348fcc438

View file

@ -1518,6 +1518,56 @@ export class BrainyData<T = any> implements BrainyDataInterface<T> {
return this.index.size()
}
/**
* Get statistics about the current state of the database
* @returns Object containing counts of nouns, verbs, metadata entries, and HNSW index size
*/
public async getStatistics(): Promise<{
nounCount: number
verbCount: number
metadataCount: number
hnswIndexSize: number
}> {
await this.ensureInitialized()
try {
// Get noun count from the index
const nounCount = this.index.getNouns().size
// Get verb count from storage
const allVerbs = await this.storage!.getAllVerbs()
const verbCount = allVerbs.length
// Count metadata entries by checking each noun for metadata
let metadataCount = 0
const nouns = this.index.getNouns()
for (const [id] of nouns.entries()) {
try {
const metadata = await this.storage!.getMetadata(id)
if (metadata !== null && metadata !== undefined) {
metadataCount++
}
} catch (error) {
// Ignore errors when checking individual metadata entries
// This could happen if metadata is corrupted or missing
}
}
// Get HNSW index size
const hnswIndexSize = this.index.size()
return {
nounCount,
verbCount,
metadataCount,
hnswIndexSize
}
} catch (error) {
console.error('Failed to get statistics:', error)
throw new Error(`Failed to get statistics: ${error}`)
}
}
/**
* Check if the database is in read-only mode
* @returns True if the database is in read-only mode, false otherwise