@dawans/promptshield
Version:
Secure your LLM stack with enterprise-grade RulePacks for AI safety scanning
79 lines (78 loc) • 2.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ScanMetricsUtils = void 0;
/**
* Utility functions for working with scan metrics
*/
exports.ScanMetricsUtils = {
/**
* Calculates average processing time per object
*/
calculateAverageTimePerObject(metrics) {
if (metrics.objectsScanned === 0)
return 0;
return metrics.processingTime / metrics.objectsScanned;
},
/**
* Formats processing time as human-readable string
*/
formatProcessingTime(milliseconds) {
if (milliseconds < 1000) {
return `${Math.round(milliseconds)}ms`;
}
else if (milliseconds < 60000) {
return `${(milliseconds / 1000).toFixed(1)}s`;
}
else {
const minutes = Math.floor(milliseconds / 60000);
const seconds = Math.floor((milliseconds % 60000) / 1000);
return `${minutes}m ${seconds}s`;
}
},
/**
* Formats memory usage as human-readable string
*/
formatMemoryUsage(bytes) {
const units = ['B', 'KB', 'MB', 'GB'];
let value = bytes;
let unitIndex = 0;
while (value >= 1024 && unitIndex < units.length - 1) {
value /= 1024;
unitIndex++;
}
return `${value.toFixed(1)} ${units[unitIndex]}`;
},
/**
* Calculates processing rate (objects per second)
*/
calculateProcessingRate(metrics) {
if (metrics.processingTime === 0)
return 0;
return (metrics.objectsScanned / metrics.processingTime) * 1000;
},
/**
* Checks if memory usage is above threshold
*/
isMemoryUsageHigh(metrics, threshold) {
const totalMemory = process.memoryUsage().heapTotal;
return metrics.memoryUsage / totalMemory > threshold;
},
/**
* Creates a summary of key metrics
*/
createSummary(metrics) {
const items = [
`${metrics.objectsScanned} objects scanned`,
`${this.formatProcessingTime(metrics.processingTime)} processing time`,
`${this.formatMemoryUsage(metrics.memoryUsage)} memory used`,
`${metrics.rulesApplied} rules applied`,
];
if (metrics.averageTimePerObject) {
items.push(`${this.formatProcessingTime(metrics.averageTimePerObject)} avg per object`);
}
if (metrics.parallelWorkers && metrics.parallelWorkers > 1) {
items.push(`${metrics.parallelWorkers} parallel workers`);
}
return items.join(', ');
},
};