Class: Dbwatcher::Services::DiagramAnalyzers::BaseAnalyzer

Inherits:
BaseService
  • Object
show all
Defined in:
lib/dbwatcher/services/diagram_analyzers/base_analyzer.rb

Overview

Abstract base class for diagram analyzers

This class provides a standard interface that all diagram analyzers must implement to ensure consistent data flow and transformation to Dataset format.

Examples:

class CustomAnalyzer < BaseAnalyzer
  def analyze(context)
    # Perform analysis and return raw data
  end

  def transform_to_dataset(raw_data)
    # Transform raw data to Dataset
  end

  def analyzer_type
    "custom"
  end
end

Instance Method Summary collapse

Methods inherited from BaseService

call, #initialize

Methods included from Logging

#debug_enabled?, #log_debug, #log_error, #log_info, #log_warn

Constructor Details

This class inherits a constructor from Dbwatcher::Services::BaseService

Instance Method Details

#analyze(context) ⇒ Object

Standard interface that all analyzers must implement

Parameters:

  • context (Hash)

    analysis context (session, options, etc.)

Returns:

  • (Object)

    raw analysis data in analyzer-specific format

Raises:

  • (NotImplementedError)

    if not implemented by subclass



33
34
35
# File 'lib/dbwatcher/services/diagram_analyzers/base_analyzer.rb', line 33

def analyze(context)
  raise NotImplementedError, "Subclasses must implement analyze method"
end

#analyzer_typeString

Get analyzer type classification

Returns:

  • (String)

    analyzer type identifier

Raises:

  • (NotImplementedError)

    if not implemented by subclass



50
51
52
# File 'lib/dbwatcher/services/diagram_analyzers/base_analyzer.rb', line 50

def analyzer_type
  raise NotImplementedError, "Subclasses must implement analyzer_type"
end

#callDiagramData::Dataset

Main entry point - analyze and transform

Returns:



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/dbwatcher/services/diagram_analyzers/base_analyzer.rb', line 57

def call
  log_service_start "Starting #{self.class.name}", analysis_context
  start_time = Time.current

  begin
    # Perform analysis
    raw_data = analyze(analysis_context)

    # Transform to standard format
    dataset = transform_to_dataset(raw_data)

    # Validate result
    unless dataset.is_a?(Dbwatcher::Services::DiagramData::Dataset)
      raise StandardError, "transform_to_dataset must return a Dataset instance"
    end

    unless dataset.valid?
      Rails.logger.warn "#{self.class.name}: Generated invalid dataset: #{dataset.validation_errors.join(", ")}"
    end

    log_service_completion(start_time, {
                             entities_count: dataset.entities.size,
                             relationships_count: dataset.relationships.size,
                             dataset_valid: dataset.valid?
                           })

    dataset
  rescue StandardError => e
    Rails.logger.error "#{self.class.name} error: #{e.class}: #{e.message}\n#{e.backtrace.join("\n")}"
    # Return empty dataset instead of failing
    create_empty_dataset
  end
end

#transform_to_dataset(raw_data) ⇒ DiagramData::Dataset

Transform raw data to standard Dataset

Parameters:

  • raw_data (Object)

    raw data from analyze method

Returns:

Raises:

  • (NotImplementedError)

    if not implemented by subclass



42
43
44
# File 'lib/dbwatcher/services/diagram_analyzers/base_analyzer.rb', line 42

def transform_to_dataset(raw_data)
  raise NotImplementedError, "Subclasses must implement transform_to_dataset"
end