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

Raises:

  • if not implemented by subclass

Parameters:

  • analysis context (session, options, etc.)

Returns:

  • raw analysis data in analyzer-specific format



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

Raises:

  • if not implemented by subclass

Returns:

  • analyzer type identifier



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:

  • standardized dataset



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

Raises:

  • if not implemented by subclass

Parameters:

  • raw data from analyze method

Returns:

  • standardized dataset



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