Skip to content

metrics Method ​

The metrics() method returns a comprehensive set of metrics about the collection, including count, null values, unique values, and memory usage. This is particularly useful for data quality assessment and performance monitoring.

Basic Syntax ​

typescript
collect(items).metrics(): CollectionMetrics

Examples ​

Basic Usage ​

typescript
import { collect } from 'ts-collect'

// Simple metrics collection
const items = collect([1, 2, 2, null, 3])
const metrics = items.metrics()
console.log(metrics)
// {
//   count: 5,
//   nullCount: 1,
//   uniqueCount: 4,
//   heapUsed: 1024,  // Example value
//   heapTotal: 2048  // Example value
// }

Working with Objects ​

typescript
interface Product {
  id: string
  name: string | null
  price: number | null
  category: string
}

const products = collect<Product>([
  { id: '1', name: 'Widget', price: 100, category: 'A' },
  { id: '2', name: null, price: null, category: 'B' }
])

const productMetrics = products.metrics()
// Includes field counts and null distribution

Real-world Examples ​

Data Quality Monitor ​

typescript
interface DataQualityReport {
  collectionName: string
  timestamp: Date
  metrics: CollectionMetrics
  recommendations: string[]
}

class DataQualityMonitor {
  generateReport(
    data: Collection<unknown>,
    collectionName: string
  ): DataQualityReport {
    const metrics = data.metrics()

    return {
      collectionName,
      timestamp: new Date(),
      metrics,
      recommendations: this.generateRecommendations(metrics)
    }
  }

  generateDailyReport(
    collections: Map<string, Collection<unknown>>
  ): Map<string, DataQualityReport> {
    const reports = new Map()

    collections.forEach((collection, name) => {
      reports.set(name, this.generateReport(collection, name))
    })

    return reports
  }

  private generateRecommendations(
    metrics: CollectionMetrics
  ): string[] {
    const recommendations: string[] = []

    if (metrics.nullCount > (metrics.count * 0.1)) {
      recommendations.push('High number of null values detected')
    }

    if (metrics.uniqueCount === metrics.count) {
      recommendations.push('All values are unique - potential ID field')
    }

    // Memory usage recommendations
    const memoryUsageRatio = metrics.heapUsed / metrics.heapTotal
    if (memoryUsageRatio > 0.8) {
      recommendations.push('High memory usage - consider optimization')
    }

    return recommendations
  }
}

Performance Monitor ​

typescript
interface PerformanceMetrics {
  timestamp: Date
  metrics: CollectionMetrics
  performance: {
    memoryEfficiency: number
    dataQuality: number
    uniquenessRatio: number
  }
}

class PerformanceMonitor {
  constructor(
    private thresholds: {
      memoryUsage: number
      nullRatio: number
      uniquenessRatio: number
    } = {
      memoryUsage: 0.8,
      nullRatio: 0.1,
      uniquenessRatio: 0.5
    }
  ) {}

  analyzePerformance<T>(
    collection: Collection<T>
  ): PerformanceMetrics {
    const metrics = collection.metrics()

    return {
      timestamp: new Date(),
      metrics,
      performance: {
        memoryEfficiency: this.calculateMemoryEfficiency(metrics),
        dataQuality: this.calculateDataQuality(metrics),
        uniquenessRatio: metrics.uniqueCount / metrics.count
      }
    }
  }

  private calculateMemoryEfficiency(
    metrics: CollectionMetrics
  ): number {
    const usageRatio = metrics.heapUsed / metrics.heapTotal
    return Math.max(0, 1 - (usageRatio / this.thresholds.memoryUsage))
  }

  private calculateDataQuality(
    metrics: CollectionMetrics
  ): number {
    const nullRatio = metrics.nullCount / metrics.count
    return Math.max(0, 1 - (nullRatio / this.thresholds.nullRatio))
  }

  shouldOptimize(metrics: CollectionMetrics): boolean {
    return metrics.heapUsed / metrics.heapTotal > this.thresholds.memoryUsage
  }

  generateRecommendations(metrics: CollectionMetrics): string[] {
    const recommendations: string[] = []

    // Memory recommendations
    if (this.shouldOptimize(metrics)) {
      recommendations.push('Consider implementing pagination')
      recommendations.push('Review data structure for optimization')
    }

    // Data quality recommendations
    if (metrics.nullFieldsDistribution) {
      metrics.nullFieldsDistribution.forEach((count, field) => {
        if (count / metrics.count > this.thresholds.nullRatio) {
          recommendations.push(`High null count in field: ${field}`)
        }
      })
    }

    return recommendations
  }
}

Type Safety ​

typescript
interface TypedItem {
  id: number
  value: string | null
}

const items = collect<TypedItem>([
  { id: 1, value: 'A' },
  { id: 2, value: null }
])

// Type-safe metrics collection
const metrics: CollectionMetrics = items.metrics()

// Access metrics properties with type safety
const nullCount: number = metrics.nullCount
const uniqueCount: number = metrics.uniqueCount

Return Value (CollectionMetrics) ​

typescript
interface CollectionMetrics {
  count: number              // Total number of items
  nullCount: number          // Number of null values
  uniqueCount: number        // Number of unique values
  heapUsed: number          // Current heap usage
  heapTotal: number         // Total heap size
  fieldCount?: number       // Number of fields (for objects)
  nullFieldsDistribution?: Map<string, number>  // Null values by field
}

Common Use Cases ​

1. Data Quality ​

  • Completeness checking
  • Null value analysis
  • Uniqueness validation
  • Field distribution
  • Quality scoring

2. Performance ​

  • Memory monitoring
  • Resource usage
  • Optimization needs
  • Scaling decisions
  • Capacity planning

3. Monitoring ​

  • Health checks
  • Usage patterns
  • Resource tracking
  • System metrics
  • Load analysis

4. Reporting ​

  • Quality reports
  • Usage statistics
  • Health status
  • Performance metrics
  • Resource utilization

5. Optimization ​

  • Memory usage
  • Data structure
  • Resource allocation
  • Performance tuning
  • Capacity planning

6. Validation ​

  • Data integrity
  • Quality assurance
  • Format checking
  • Structure validation
  • Completeness verification

7. Analysis ​

  • Pattern detection
  • Usage analysis
  • Trend monitoring
  • Behavior tracking
  • Performance assessment

8. Maintenance ​

  • Health monitoring
  • Resource tracking
  • System optimization
  • Performance tuning
  • Capacity management

9. Debugging ​

  • Issue diagnosis
  • Problem detection
  • Error tracking
  • Performance bottlenecks
  • Resource leaks

10. Planning ​

  • Resource allocation
  • Capacity planning
  • Scaling decisions
  • Optimization strategy
  • Maintenance scheduling

Released under the MIT License.