Class: Ragdoll::Api::V1::SystemController

Inherits:
BaseController
  • Object
show all
Defined in:
app/controllers/ragdoll/api/v1/system_controller.rb

Instance Method Summary collapse

Instance Method Details

#statsObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/controllers/ragdoll/api/v1/system_controller.rb', line 7

def stats
  begin
    client = ::Ragdoll::Client.new
    ragdoll_stats = client.stats
    
    system_stats = {
      ragdoll_version: ::Ragdoll::VERSION,
      rails_version: Rails.version,
      ruby_version: RUBY_VERSION,
      
      database_stats: {
        documents: ::Ragdoll::Document.count,
        embeddings: ::Ragdoll::Embedding.count,
        searches: ::Ragdoll::Search.count,
        database_size: calculate_database_size
      },
      
      configuration: {
        llm_provider: ::Ragdoll.configuration.llm_provider,
        embedding_provider: ::Ragdoll.configuration.embedding_provider,
        embedding_model: ::Ragdoll.configuration.embedding_model,
        chunk_size: ::Ragdoll.configuration.chunk_size,
        chunk_overlap: ::Ragdoll.configuration.chunk_overlap,
        max_search_results: ::Ragdoll.configuration.max_search_results,
        search_similarity_threshold: ::Ragdoll.configuration.search_similarity_threshold,
        enable_search_analytics: ::Ragdoll.configuration.enable_search_analytics,
        enable_document_summarization: ::Ragdoll.configuration.enable_document_summarization,
        enable_usage_tracking: ::Ragdoll.configuration.enable_usage_tracking,
        usage_ranking_enabled: ::Ragdoll.configuration.usage_ranking_enabled
      },
      
      performance_metrics: {
        average_search_time: calculate_average_search_time,
        embedding_dimensions: ::Ragdoll::Embedding.first&.embedding_dimensions || 0,
        average_document_size: ::Ragdoll::Document.average('LENGTH(summary)')&.round || 0,
        average_chunks_per_document: ::Ragdoll::Document.count > 0 ? (::Ragdoll::Embedding.count.to_f / ::Ragdoll::Document.count).round || 0 : 0
      },
      
      health_check: {
        database_connection: database_healthy?,
        embedding_service: embedding_service_healthy?
      }
    }.merge(ragdoll_stats)
    
    render json: system_stats
  rescue => e
    render_error("Error retrieving system stats: #{e.message}")
  end
end