github Starosdev/scrutiny v1.65.0

6 hours ago

v1.65.0 (2026-06-29)

Features

  • V1.65.0 - PoH rollover detection, dashboard density controls, settings fix (#629)
    • Promotes the 1.65.0 beta line to master (1.64.0 -> 1.65.0). Scope below is limited to changes that are actually new versus master; features merged to master earlier (per-URL heartbeat, navigation visibility, host grouping, ATA self-test history, contextual help) are already shipped and are NOT part of this delta.
    • Features
    • Fixes
    • Refactors (cognitive complexity)
    • Power-On Hours 16-bit counter rollover detection (#595, #625) - new smart_rollover_test.go, thresholds logic
    • Dashboard layout controls: max column count + card density ('comfortable' | 'compact') (#471)
    • Preserve server-capability flags on settings save: server_version and collector_trigger_enabled were dropped from the POST /api/settings response, so the "Run collectors" button vanished after any settings change. Backend now echoes both flags (shared collectorTriggerEnabled() helper); frontend config setter preserves them with a current-value fallback. Adds handler regression tests.
    • smart.go, measurement models, repository, migration runner, middleware/monitors, notify senders, SMTP sender, device detection, collector commands, frontend components (#616-#624)

Refactoring

  • Reduce cognitive complexity in smart.go (#616)

    • Reduces SonarQube cognitive complexity (go:S3776) across all 10 flagged functions in webapp/backend/pkg/models/measurements/smart.go. The functions ranged from complexity 17 to 43; all now sit at or below the allowed limit of 15.
  • Reduce cognitive complexity in collector commands (#617)

    • Reduces SonarQube cognitive complexity (go:S3776) in main() across all five collector command entrypoints. They ranged from complexity 17 to 47; all functions now sit at or below the allowed limit of 15.
    • | Command | Before | After |
    • |---------|--------|-------|
    • | collector-performance | 47 | ≤15 |
    • | collector-filesystem | 45 | ≤15 |
    • | collector-btrfs | 45 | ≤15 |
    • | collector-zfs | 17 | ≤15 |
    • | collector-mdadm | 17 | ≤15 |
  • Reduce cognitive complexity in notification senders (#618)

    • Reduces SonarQube cognitive complexity (go:S3776) across the notify package. All flagged functions now sit at or below the allowed limit of 15.
    • | Function | File | Before | After |
    • |----------|------|--------|-------|
    • | ShouldNotify | notify.go | 58 | ≤15 |
    • | SendShoutrrrNotification | notify.go | 19 | ≤15 |
    • | SendSMTPNotification | smtp_sender.go | 30 | ≤15 |
    • | sendSMTPRecipient | smtp_sender.go | 16 | ≤15 |
    • | maskAppriseURL | mask.go | 24 | ≤15 |
    • | mockSMTPServer.serve | notify_test.go | 17 | ≤15 |
  • Reduce cognitive complexity in device detection (#619)

    • Reduces SonarQube cognitive complexity (go:S3776) across the collector device-detection code. All flagged functions now sit at or below the allowed limit of 15.
    • | Function | File | Before | After |
    • |----------|------|--------|-------|
    • | TransformDetectedDevices | detect/detect.go | 38 | ≤15 |
    • | btrfs parseScrubStatus | btrfs/detect.go | 25 | ≤15 |
    • | zfs parseScrubStatus | zfs/detect/detect.go | 21 | ≤15 |
    • | getArrayDetail | mdadm/detect/detect.go | 20 | ≤15 |
    • | findMissingDevices | detect/devices_darwin.go | 19 | ≤15 |
    • | getMountUsage | mdadm/detect/mount_linux.go | 19 | ≤15 |
  • Reduce cognitive complexity in components (#620)

    • Reduces SonarQube cognitive complexity (typescript:S3776) for all three flagged frontend functions. Each now sits well below the allowed limit of 15.
    • | Function | File | Before | After |
    • |----------|------|--------|-------|
    • | buildAppriseUrl | dashboard-settings.component.ts | 24 | <15 |
    • | set range | @treo/date-range.component.ts | 22 | <15 |
    • | _generateSmartAttributeTableDataSource | detail.component.ts | 21 | <15 |
  • Reduce cognitive complexity in repository (#621)

    • Reduces SonarQube cognitive complexity (go:S3776) across the database repository. Every flagged function (except the migration runner) now sits at or below the allowed limit of 15.
    • | Function | File | Before |
    • |----------|------|--------|
    • | GetSummary | scrutiny_repository.go | 56 |
    • | EnsureTasks | scrutiny_repository_tasks.go | 30 |
    • | computeEndurance | scrutiny_repository_workload.go | 26 |
    • | GetSmartTemperatureHistory | scrutiny_repository_temperature.go | 24 |
    • | newScrutinyRepository | scrutiny_repository.go | 19 |
    • | GetDevicesLastSeenTimes | scrutiny_repository.go | 19 |
    • | reconcileLegacyDeviceIdentity | scrutiny_repository_device.go | 17 |
    • | GetWorkloadInsights | scrutiny_repository_workload.go | 17 |
    • | summaryRiskScore | summary_risk.go | 16 |
    • | EnsureBuckets | scrutiny_repository.go | 16 |
    • All now ≤15.
  • Reduce cognitive complexity in measurement models (#622)

    • Reduces SonarQube cognitive complexity (go:S3776) across the measurement models and threshold parsing. All flagged functions now sit at or below the allowed limit of 15.
    • | Function | File | Before |
    • |----------|------|--------|
    • | NewBtrfsMetricsFromInfluxDB | measurements/btrfs_metrics.go | 34 |
    • | NewPerformanceFromInfluxDB | measurements/performance.go | 32 |
    • | ValidateThreshold | measurements/smart_ata_attribute.go | 27 |
    • | parseConsumerDriveProfiles | thresholds/consumer_drive_profiles.go | 23 |
    • | NewMDADMMetricsFromInfluxDB | measurements/mdadm_metrics.go | 18 |
  • Reduce cognitive complexity in middleware and monitors (#623)

    • Reduces SonarQube cognitive complexity (go:S3776) across the web middleware and background monitors. All flagged functions now sit at or below the allowed limit of 15.
    • | Function | File | Before |
    • |----------|------|--------|
    • | AuthMiddleware | middleware/auth.go | 25 |
    • | GetStatus | missed_ping_monitor.go | 21 |
    • | checkAndSendHeartbeat | heartbeat_monitor.go | 19 |
    • | LoggerMiddleware | middleware/logger.go | 17 |
  • Reduce cognitive complexity in the migration runner (#624)

    • Final SonarQube Group 5 cluster. Reduces cognitive complexity (go:S3776) in the database migration runner — the two highest-complexity functions in the project.
    • | Function | Before | After |
    • |----------|--------|-------|
    • | Migrate | 166 | ≤15 |
    • | m20201107210306_From...SmartResults... | 17 | ≤15 |

Don't miss a new scrutiny release

NewReleases is sending notifications on new releases.