PropertyDamage.FailureIntelligence.Patterns (PropertyDamage v0.2.0)

View Source

Pattern detection and clustering for failures.

Identifies groups of similar failures and extracts common patterns that can help understand systemic issues.

Summary

Functions

Analyzes a set of failures to identify patterns.

Clusters failures by similarity.

Clusters fingerprints by similarity.

Extracts common traits from a cluster of fingerprints.

Finds the best matching cluster for a failure.

Detects if a new failure matches an existing pattern.

Types

analysis()

@type analysis() :: %{
  clusters: [cluster()],
  singleton_count: non_neg_integer(),
  total_failures: non_neg_integer(),
  most_common_pattern: pattern() | nil,
  pattern_summary: String.t()
}

cluster()

@type cluster() :: %{
  id: String.t(),
  fingerprints: [PropertyDamage.FailureIntelligence.Fingerprint.t()],
  representative: PropertyDamage.FailureIntelligence.Fingerprint.t(),
  size: non_neg_integer(),
  pattern: pattern()
}

pattern()

@type pattern() :: %{
  failure_type: atom(),
  check_name: atom() | nil,
  command_types: [atom()],
  event_types: [atom()],
  error_category: atom(),
  common_fields: [atom()],
  description: String.t()
}

Functions

analyze(failures, opts \\ [])

@spec analyze(
  [PropertyDamage.FailureReport.t()],
  keyword()
) :: analysis()

Analyzes a set of failures to identify patterns.

Returns clustering information and pattern summaries.

cluster_failures(failures, opts \\ [])

@spec cluster_failures(
  [PropertyDamage.FailureReport.t()],
  keyword()
) :: [cluster()]

Clusters failures by similarity.

Uses a simple agglomerative clustering approach with the given threshold.

cluster_fingerprints(fingerprints, threshold \\ 0.7)

@spec cluster_fingerprints(
  [PropertyDamage.FailureIntelligence.Fingerprint.t()],
  float()
) :: [cluster()]

Clusters fingerprints by similarity.

extract_common_traits(fingerprints)

@spec extract_common_traits([PropertyDamage.FailureIntelligence.Fingerprint.t()]) ::
  map()

Extracts common traits from a cluster of fingerprints.

find_best_match(failure, clusters)

@spec find_best_match(PropertyDamage.FailureReport.t(), [cluster()]) ::
  {cluster(), float()} | nil

Finds the best matching cluster for a failure.

Returns {cluster, score} or nil if no clusters are provided.

match_pattern(failure, clusters, opts \\ [])

@spec match_pattern(PropertyDamage.FailureReport.t(), [cluster()], keyword()) ::
  cluster() | nil

Detects if a new failure matches an existing pattern.

Returns the matching cluster if found, nil otherwise.