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
|
# File 'app/controllers/ragdoll/api/v1/analytics_controller.rb', line 7
def index
analytics_data = {
document_stats: {
total_documents: ::Ragdoll::Document.count,
processed_documents: ::Ragdoll::Document.where(status: 'processed').count,
failed_documents: ::Ragdoll::Document.where(status: 'failed').count,
pending_documents: ::Ragdoll::Document.where(status: 'pending').count,
total_embeddings: ::Ragdoll::Embedding.count
},
search_stats: {
total_searches: ::Ragdoll::Search.count,
unique_queries: ::Ragdoll::Search.distinct.count(:query),
searches_today: ::Ragdoll::Search.where(created_at: Date.current.beginning_of_day..Date.current.end_of_day).count,
searches_this_week: ::Ragdoll::Search.where(created_at: Date.current.beginning_of_week..Date.current.end_of_day).count,
average_similarity: ::Ragdoll::Search.where.not(avg_similarity_score: nil).average(:avg_similarity_score)&.round(3) || 0
},
popular_queries: ::Ragdoll::Search.group(:query).count.sort_by { |query, count| -count }.first(10).to_h,
document_types: ::Ragdoll::Document.group(:document_type).count,
top_documents: ::Ragdoll::Embedding
.joins("JOIN ragdoll_contents ON ragdoll_contents.id = ragdoll_embeddings.embeddable_id")
.joins("JOIN ragdoll_documents ON ragdoll_documents.id = ragdoll_contents.document_id")
.group('ragdoll_documents.title')
.order('SUM(ragdoll_embeddings.usage_count) DESC')
.limit(10)
.sum(:usage_count),
search_trends: (6.days.ago.to_date..Date.current).map do |date|
count = ::Ragdoll::Search.where(created_at: date.beginning_of_day..date.end_of_day).count
[date.strftime('%m/%d'), count]
end.to_h,
embedding_usage: ::Ragdoll::Embedding
.joins("JOIN ragdoll_contents ON ragdoll_contents.id = ragdoll_embeddings.embeddable_id")
.joins("JOIN ragdoll_documents ON ragdoll_documents.id = ragdoll_contents.document_id")
.group('ragdoll_documents.title')
.order('SUM(ragdoll_embeddings.usage_count) DESC')
.limit(10)
.sum(:usage_count),
similarity_distribution: build_similarity_distribution
}
render json: analytics_data
end
|