dbwatcher 0.1.5 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +81 -210
- data/app/assets/config/dbwatcher_manifest.js +15 -0
- data/app/assets/javascripts/dbwatcher/alpine_registrations.js +39 -0
- data/app/assets/javascripts/dbwatcher/auto_init.js +23 -0
- data/app/assets/javascripts/dbwatcher/components/base.js +141 -0
- data/app/assets/javascripts/dbwatcher/components/changes_table_hybrid.js +1008 -0
- data/app/assets/javascripts/dbwatcher/components/diagrams.js +449 -0
- data/app/assets/javascripts/dbwatcher/components/summary.js +234 -0
- data/app/assets/javascripts/dbwatcher/core/alpine_store.js +138 -0
- data/app/assets/javascripts/dbwatcher/core/api_client.js +162 -0
- data/app/assets/javascripts/dbwatcher/core/component_loader.js +70 -0
- data/app/assets/javascripts/dbwatcher/core/component_registry.js +94 -0
- data/app/assets/javascripts/dbwatcher/dbwatcher.js +120 -0
- data/app/assets/javascripts/dbwatcher/services/mermaid.js +315 -0
- data/app/assets/javascripts/dbwatcher/services/mermaid_service.js +199 -0
- data/app/assets/javascripts/dbwatcher/vendor/date-fns-browser.js +99 -0
- data/app/assets/javascripts/dbwatcher/vendor/lodash.min.js +140 -0
- data/app/assets/javascripts/dbwatcher/vendor/tabulator.min.js +3 -0
- data/app/assets/stylesheets/dbwatcher/application.css +423 -0
- data/app/assets/stylesheets/dbwatcher/application.scss +15 -0
- data/app/assets/stylesheets/dbwatcher/components/_badges.scss +38 -0
- data/app/assets/stylesheets/dbwatcher/components/_compact_table.scss +162 -0
- data/app/assets/stylesheets/dbwatcher/components/_diagrams.scss +51 -0
- data/app/assets/stylesheets/dbwatcher/components/_forms.scss +27 -0
- data/app/assets/stylesheets/dbwatcher/components/_navigation.scss +55 -0
- data/app/assets/stylesheets/dbwatcher/core/_base.scss +34 -0
- data/app/assets/stylesheets/dbwatcher/core/_variables.scss +47 -0
- data/app/assets/stylesheets/dbwatcher/vendor/tabulator.min.css +2 -0
- data/app/controllers/dbwatcher/api/v1/sessions_controller.rb +64 -0
- data/app/controllers/dbwatcher/base_controller.rb +101 -0
- data/app/controllers/dbwatcher/dashboard_controller.rb +20 -0
- data/app/controllers/dbwatcher/queries_controller.rb +24 -0
- data/app/controllers/dbwatcher/sessions_controller.rb +30 -20
- data/app/controllers/dbwatcher/tables_controller.rb +38 -0
- data/app/helpers/dbwatcher/application_helper.rb +103 -0
- data/app/helpers/dbwatcher/component_helper.rb +29 -0
- data/app/helpers/dbwatcher/diagram_helper.rb +110 -0
- data/app/helpers/dbwatcher/formatting_helper.rb +108 -0
- data/app/helpers/dbwatcher/session_helper.rb +28 -0
- data/app/views/dbwatcher/dashboard/index.html.erb +177 -0
- data/app/views/dbwatcher/queries/index.html.erb +240 -0
- data/app/views/dbwatcher/sessions/_changes_tab.html.erb +265 -0
- data/app/views/dbwatcher/sessions/_diagrams_tab.html.erb +166 -0
- data/app/views/dbwatcher/sessions/_session_header.html.erb +11 -0
- data/app/views/dbwatcher/sessions/_summary_tab.html.erb +88 -0
- data/app/views/dbwatcher/sessions/_tab_navigation.html.erb +12 -0
- data/app/views/dbwatcher/sessions/changes.html.erb +21 -0
- data/app/views/dbwatcher/sessions/components/changes/_filters.html.erb +44 -0
- data/app/views/dbwatcher/sessions/components/changes/_table_list.html.erb +96 -0
- data/app/views/dbwatcher/sessions/diagrams.html.erb +21 -0
- data/app/views/dbwatcher/sessions/index.html.erb +124 -27
- data/app/views/dbwatcher/sessions/shared/_layout.html.erb +8 -0
- data/app/views/dbwatcher/sessions/shared/_navigation.html.erb +35 -0
- data/app/views/dbwatcher/sessions/shared/_session_header.html.erb +25 -0
- data/app/views/dbwatcher/sessions/show.html.erb +3 -149
- data/app/views/dbwatcher/sessions/summary.html.erb +21 -0
- data/app/views/dbwatcher/shared/_badge.html.erb +4 -0
- data/app/views/dbwatcher/shared/_data_table.html.erb +20 -0
- data/app/views/dbwatcher/shared/_header.html.erb +7 -0
- data/app/views/dbwatcher/shared/_page_layout.html.erb +20 -0
- data/app/views/dbwatcher/shared/_section_panel.html.erb +9 -0
- data/app/views/dbwatcher/shared/_stats_card.html.erb +11 -0
- data/app/views/dbwatcher/shared/_tab_bar.html.erb +6 -0
- data/app/views/dbwatcher/tables/changes.html.erb +225 -0
- data/app/views/dbwatcher/tables/index.html.erb +123 -0
- data/app/views/dbwatcher/tables/show.html.erb +86 -0
- data/app/views/layouts/dbwatcher/application.html.erb +252 -25
- data/bin/compile_scss +49 -0
- data/config/routes.rb +43 -3
- data/lib/dbwatcher/configuration.rb +103 -1
- data/lib/dbwatcher/engine.rb +28 -13
- data/lib/dbwatcher/logging.rb +72 -0
- data/lib/dbwatcher/services/analyzers/session_data_processor.rb +98 -0
- data/lib/dbwatcher/services/analyzers/table_summary_builder.rb +202 -0
- data/lib/dbwatcher/services/api/base_api_service.rb +100 -0
- data/lib/dbwatcher/services/api/changes_data_service.rb +112 -0
- data/lib/dbwatcher/services/api/diagram_data_service.rb +145 -0
- data/lib/dbwatcher/services/api/summary_data_service.rb +158 -0
- data/lib/dbwatcher/services/base_service.rb +64 -0
- data/lib/dbwatcher/services/dashboard_data_aggregator.rb +121 -0
- data/lib/dbwatcher/services/diagram_analyzers/base_analyzer.rb +162 -0
- data/lib/dbwatcher/services/diagram_analyzers/foreign_key_analyzer.rb +354 -0
- data/lib/dbwatcher/services/diagram_analyzers/inferred_relationship_analyzer.rb +502 -0
- data/lib/dbwatcher/services/diagram_analyzers/model_association_analyzer.rb +564 -0
- data/lib/dbwatcher/services/diagram_data/attribute.rb +154 -0
- data/lib/dbwatcher/services/diagram_data/dataset.rb +278 -0
- data/lib/dbwatcher/services/diagram_data/entity.rb +180 -0
- data/lib/dbwatcher/services/diagram_data/relationship.rb +188 -0
- data/lib/dbwatcher/services/diagram_data/relationship_params.rb +55 -0
- data/lib/dbwatcher/services/diagram_data.rb +65 -0
- data/lib/dbwatcher/services/diagram_error_handler.rb +239 -0
- data/lib/dbwatcher/services/diagram_generator.rb +154 -0
- data/lib/dbwatcher/services/diagram_strategies/base_diagram_strategy.rb +149 -0
- data/lib/dbwatcher/services/diagram_strategies/class_diagram_strategy.rb +49 -0
- data/lib/dbwatcher/services/diagram_strategies/erd_diagram_strategy.rb +52 -0
- data/lib/dbwatcher/services/diagram_strategies/flowchart_diagram_strategy.rb +52 -0
- data/lib/dbwatcher/services/diagram_system.rb +69 -0
- data/lib/dbwatcher/services/diagram_type_registry.rb +164 -0
- data/lib/dbwatcher/services/mermaid_syntax/base_builder.rb +127 -0
- data/lib/dbwatcher/services/mermaid_syntax/cardinality_mapper.rb +90 -0
- data/lib/dbwatcher/services/mermaid_syntax/class_diagram_builder.rb +136 -0
- data/lib/dbwatcher/services/mermaid_syntax/class_diagram_helper.rb +46 -0
- data/lib/dbwatcher/services/mermaid_syntax/erd_builder.rb +116 -0
- data/lib/dbwatcher/services/mermaid_syntax/flowchart_builder.rb +109 -0
- data/lib/dbwatcher/services/mermaid_syntax/sanitizer.rb +102 -0
- data/lib/dbwatcher/services/mermaid_syntax_builder.rb +155 -0
- data/lib/dbwatcher/services/query_filter_processor.rb +114 -0
- data/lib/dbwatcher/services/table_statistics_collector.rb +119 -0
- data/lib/dbwatcher/sql_logger.rb +107 -0
- data/lib/dbwatcher/storage/api/base_api.rb +134 -0
- data/lib/dbwatcher/storage/api/concerns/table_analyzer.rb +59 -0
- data/lib/dbwatcher/storage/api/query_api.rb +95 -0
- data/lib/dbwatcher/storage/api/session_api.rb +181 -0
- data/lib/dbwatcher/storage/api/table_api.rb +86 -0
- data/lib/dbwatcher/storage/base_storage.rb +120 -0
- data/lib/dbwatcher/storage/change_processor.rb +65 -0
- data/lib/dbwatcher/storage/concerns/data_normalizer.rb +134 -0
- data/lib/dbwatcher/storage/concerns/error_handler.rb +75 -0
- data/lib/dbwatcher/storage/concerns/timestampable.rb +74 -0
- data/lib/dbwatcher/storage/concerns/validatable.rb +117 -0
- data/lib/dbwatcher/storage/date_helper.rb +21 -0
- data/lib/dbwatcher/storage/errors.rb +86 -0
- data/lib/dbwatcher/storage/file_manager.rb +122 -0
- data/lib/dbwatcher/storage/null_session.rb +39 -0
- data/lib/dbwatcher/storage/query_storage.rb +338 -0
- data/lib/dbwatcher/storage/query_validator.rb +24 -0
- data/lib/dbwatcher/storage/session.rb +58 -0
- data/lib/dbwatcher/storage/session_operations.rb +37 -0
- data/lib/dbwatcher/storage/session_query.rb +71 -0
- data/lib/dbwatcher/storage/session_storage.rb +322 -0
- data/lib/dbwatcher/storage/table_storage.rb +237 -0
- data/lib/dbwatcher/storage.rb +112 -85
- data/lib/dbwatcher/tracker.rb +4 -55
- data/lib/dbwatcher/version.rb +1 -1
- data/lib/dbwatcher.rb +70 -3
- metadata +140 -2
data/lib/dbwatcher/storage.rb
CHANGED
@@ -1,109 +1,136 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative "storage/base_storage"
|
4
|
+
require_relative "storage/concerns/error_handler"
|
5
|
+
require_relative "storage/concerns/timestampable"
|
6
|
+
require_relative "storage/concerns/validatable"
|
7
|
+
require_relative "storage/concerns/data_normalizer"
|
8
|
+
require_relative "storage/session_storage"
|
9
|
+
require_relative "storage/query_storage"
|
10
|
+
require_relative "storage/table_storage"
|
11
|
+
require_relative "storage/session_query"
|
12
|
+
require_relative "storage/api/base_api"
|
13
|
+
require_relative "storage/api/query_api"
|
14
|
+
require_relative "storage/api/table_api"
|
15
|
+
require_relative "storage/api/session_api"
|
16
|
+
require_relative "storage/session"
|
17
|
+
require_relative "storage/errors"
|
18
|
+
|
3
19
|
module Dbwatcher
|
4
|
-
|
20
|
+
# Storage module provides the main interface for database monitoring data persistence
|
21
|
+
#
|
22
|
+
# This module acts as a facade for different storage backends and provides
|
23
|
+
# clean API entry points for sessions, queries, and tables. It manages
|
24
|
+
# storage instances and provides cleanup operations.
|
25
|
+
#
|
26
|
+
# @example Basic usage
|
27
|
+
# Dbwatcher::Storage.sessions.create("My Session")
|
28
|
+
# Dbwatcher::Storage.sessions.recent.with_changes
|
29
|
+
# Dbwatcher::Storage.queries.save(query_data)
|
30
|
+
# Dbwatcher::Storage.tables.changes_for("users")
|
31
|
+
#
|
32
|
+
# @example Cleanup operations
|
33
|
+
# Dbwatcher::Storage.cleanup_old_sessions
|
34
|
+
# Dbwatcher::Storage.clear_all
|
35
|
+
# @see SessionAPI
|
36
|
+
# @see QueryAPI
|
37
|
+
# @see TableAPI
|
38
|
+
module Storage
|
5
39
|
class << self
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
# Update index
|
16
|
-
update_index(session)
|
17
|
-
|
18
|
-
# Clean old sessions if needed
|
19
|
-
cleanup_old_sessions
|
20
|
-
rescue StandardError => e
|
21
|
-
warn "Failed to save session #{session&.id}: #{e.message}"
|
40
|
+
# Provides access to session operations
|
41
|
+
#
|
42
|
+
# @return [SessionAPI] session API interface
|
43
|
+
# @example
|
44
|
+
# Dbwatcher::Storage.sessions.create("My Session")
|
45
|
+
# Dbwatcher::Storage.sessions.all
|
46
|
+
# Dbwatcher::Storage.sessions.recent.with_changes
|
47
|
+
def sessions
|
48
|
+
@sessions ||= Api::SessionAPI.new(session_storage)
|
22
49
|
end
|
23
50
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
rescue JSON::ParserError => e
|
33
|
-
warn "Failed to parse session file #{id}: #{e.message}"
|
34
|
-
nil
|
35
|
-
rescue StandardError => e
|
36
|
-
warn "Failed to load session #{id}: #{e.message}"
|
37
|
-
nil
|
51
|
+
# Provides access to query operations
|
52
|
+
#
|
53
|
+
# @return [QueryAPI] query API interface
|
54
|
+
# @example
|
55
|
+
# Dbwatcher::Storage.queries.save(query_data)
|
56
|
+
# Dbwatcher::Storage.queries.for_date(Date.today)
|
57
|
+
def queries
|
58
|
+
@queries ||= Api::QueryAPI.new(query_storage)
|
38
59
|
end
|
39
60
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
rescue StandardError => e
|
49
|
-
warn "Failed to load sessions: #{e.message}"
|
50
|
-
[]
|
61
|
+
# Provides access to table operations
|
62
|
+
#
|
63
|
+
# @return [TableAPI] table API interface
|
64
|
+
# @example
|
65
|
+
# Dbwatcher::Storage.tables.changes_for("users")
|
66
|
+
# Dbwatcher::Storage.tables.recent_changes
|
67
|
+
def tables
|
68
|
+
@tables ||= Api::TableAPI.new(table_storage)
|
51
69
|
end
|
52
70
|
|
53
|
-
|
54
|
-
|
55
|
-
|
71
|
+
# Resets all cached storage instances (primarily for testing)
|
72
|
+
#
|
73
|
+
# This method clears all memoized storage instances, forcing them
|
74
|
+
# to be recreated on next access. Useful for testing scenarios.
|
75
|
+
#
|
76
|
+
# @return [void]
|
77
|
+
# @example
|
78
|
+
# Dbwatcher::Storage.reset_storage_instances!
|
79
|
+
def reset_storage_instances!
|
80
|
+
@session_storage = nil
|
81
|
+
@query_storage = nil
|
82
|
+
@table_storage = nil
|
83
|
+
@sessions = nil
|
84
|
+
@queries = nil
|
85
|
+
@tables = nil
|
56
86
|
end
|
57
87
|
|
58
|
-
|
88
|
+
# Cleanup operations
|
59
89
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
90
|
+
# Removes old session files based on configuration
|
91
|
+
#
|
92
|
+
# Automatically removes session files that exceed the configured
|
93
|
+
# retention period. This helps manage storage space usage.
|
94
|
+
#
|
95
|
+
# @return [void]
|
96
|
+
# @see Configuration#auto_clean_after_days
|
97
|
+
def cleanup_old_sessions
|
98
|
+
session_storage.cleanup_old_sessions
|
66
99
|
end
|
67
100
|
|
68
|
-
|
69
|
-
FileUtils.mkdir_p(sessions_path)
|
101
|
+
# Direct access to storage instances (for internal use)
|
70
102
|
|
71
|
-
|
72
|
-
|
73
|
-
|
103
|
+
# Returns the session storage instance
|
104
|
+
#
|
105
|
+
# @return [SessionStorage] the session storage instance
|
106
|
+
# @api private
|
107
|
+
def session_storage
|
108
|
+
@session_storage ||= SessionStorage.new
|
74
109
|
end
|
75
110
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
id: session.id,
|
83
|
-
name: session.name,
|
84
|
-
started_at: session.started_at,
|
85
|
-
ended_at: session.ended_at,
|
86
|
-
change_count: session.changes.count
|
87
|
-
})
|
88
|
-
|
89
|
-
# Keep only max_sessions
|
90
|
-
index = index.first(Dbwatcher.configuration.max_sessions)
|
91
|
-
|
92
|
-
File.write(index_file, JSON.pretty_generate(index))
|
93
|
-
rescue StandardError => e
|
94
|
-
warn "Failed to update sessions index: #{e.message}"
|
111
|
+
# Returns the query storage instance
|
112
|
+
#
|
113
|
+
# @return [QueryStorage] the query storage instance
|
114
|
+
# @api private
|
115
|
+
def query_storage
|
116
|
+
@query_storage ||= QueryStorage.new
|
95
117
|
end
|
96
118
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
119
|
+
# Returns the table storage instance
|
120
|
+
#
|
121
|
+
# @return [TableStorage] the table storage instance
|
122
|
+
# @api private
|
123
|
+
def table_storage
|
124
|
+
@table_storage ||= TableStorage.new(session_storage)
|
125
|
+
end
|
101
126
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
127
|
+
# Clears all storage data
|
128
|
+
#
|
129
|
+
# @return [Integer] total number of files removed
|
130
|
+
def clear_all
|
131
|
+
session_count = session_storage.clear_all
|
132
|
+
query_count = query_storage.clear_all
|
133
|
+
session_count + query_count
|
107
134
|
end
|
108
135
|
end
|
109
136
|
end
|
data/lib/dbwatcher/tracker.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative "storage/session"
|
4
|
+
|
3
5
|
module Dbwatcher
|
4
6
|
class Tracker
|
5
7
|
class << self
|
@@ -30,7 +32,7 @@ module Dbwatcher
|
|
30
32
|
private
|
31
33
|
|
32
34
|
def create_session(name, metadata)
|
33
|
-
Session.new(
|
35
|
+
Storage::Session.new(
|
34
36
|
id: SecureRandom.uuid,
|
35
37
|
name: name || "Session #{Time.now.strftime("%Y-%m-%d %H:%M:%S")}",
|
36
38
|
metadata: metadata || {},
|
@@ -50,63 +52,10 @@ module Dbwatcher
|
|
50
52
|
|
51
53
|
def finalize_session(session)
|
52
54
|
session.ended_at = Time.now.strftime("%Y-%m-%dT%H:%M:%S%z")
|
53
|
-
Storage.
|
55
|
+
Storage.sessions.create(session)
|
54
56
|
rescue StandardError
|
55
57
|
nil
|
56
58
|
end
|
57
59
|
end
|
58
|
-
|
59
|
-
class Session
|
60
|
-
attr_accessor :id, :name, :metadata, :started_at, :ended_at, :changes
|
61
|
-
|
62
|
-
def initialize(attrs = {})
|
63
|
-
# Set default values
|
64
|
-
@changes = []
|
65
|
-
@metadata = {}
|
66
|
-
|
67
|
-
# Set provided attributes
|
68
|
-
attrs.each do |key, value|
|
69
|
-
setter_method = "#{key}="
|
70
|
-
send(setter_method, value) if respond_to?(setter_method)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def to_h
|
75
|
-
{
|
76
|
-
id: id,
|
77
|
-
name: name,
|
78
|
-
metadata: metadata,
|
79
|
-
started_at: started_at,
|
80
|
-
ended_at: ended_at,
|
81
|
-
changes: changes
|
82
|
-
}
|
83
|
-
end
|
84
|
-
|
85
|
-
def summary
|
86
|
-
return {} unless changes.is_a?(Array)
|
87
|
-
|
88
|
-
valid_changes = filter_valid_changes
|
89
|
-
group_changes_by_operation(valid_changes)
|
90
|
-
rescue StandardError => e
|
91
|
-
warn "Failed to calculate session summary: #{e.message}"
|
92
|
-
{}
|
93
|
-
end
|
94
|
-
|
95
|
-
private
|
96
|
-
|
97
|
-
def filter_valid_changes
|
98
|
-
changes.select { |change| valid_change?(change) }
|
99
|
-
end
|
100
|
-
|
101
|
-
def valid_change?(change)
|
102
|
-
change.is_a?(Hash) && change[:table_name] && change[:operation]
|
103
|
-
end
|
104
|
-
|
105
|
-
def group_changes_by_operation(valid_changes)
|
106
|
-
valid_changes
|
107
|
-
.group_by { |change| "#{change[:table_name]},#{change[:operation]}" }
|
108
|
-
.transform_values(&:count)
|
109
|
-
end
|
110
|
-
end
|
111
60
|
end
|
112
61
|
end
|
data/lib/dbwatcher/version.rb
CHANGED
data/lib/dbwatcher.rb
CHANGED
@@ -3,12 +3,76 @@
|
|
3
3
|
require "json"
|
4
4
|
require "fileutils"
|
5
5
|
require "securerandom"
|
6
|
+
require "singleton"
|
7
|
+
require "logger"
|
8
|
+
|
9
|
+
# Core components
|
6
10
|
require_relative "dbwatcher/version"
|
7
11
|
require_relative "dbwatcher/configuration"
|
8
|
-
require_relative "dbwatcher/
|
12
|
+
require_relative "dbwatcher/logging"
|
13
|
+
|
14
|
+
# Storage layer
|
9
15
|
require_relative "dbwatcher/storage"
|
16
|
+
|
17
|
+
# Tracking and SQL monitoring
|
18
|
+
require_relative "dbwatcher/tracker"
|
19
|
+
require_relative "dbwatcher/sql_logger"
|
10
20
|
require_relative "dbwatcher/model_extension"
|
11
21
|
require_relative "dbwatcher/middleware"
|
22
|
+
|
23
|
+
# Base services
|
24
|
+
require_relative "dbwatcher/services/base_service"
|
25
|
+
|
26
|
+
# Core services
|
27
|
+
require_relative "dbwatcher/services/table_statistics_collector"
|
28
|
+
require_relative "dbwatcher/services/dashboard_data_aggregator"
|
29
|
+
require_relative "dbwatcher/services/query_filter_processor"
|
30
|
+
|
31
|
+
# General analyzers
|
32
|
+
require_relative "dbwatcher/services/analyzers/session_data_processor"
|
33
|
+
require_relative "dbwatcher/services/analyzers/table_summary_builder"
|
34
|
+
|
35
|
+
# Diagram data models
|
36
|
+
require_relative "dbwatcher/services/diagram_data/attribute"
|
37
|
+
require_relative "dbwatcher/services/diagram_data/entity"
|
38
|
+
require_relative "dbwatcher/services/diagram_data/relationship"
|
39
|
+
require_relative "dbwatcher/services/diagram_data/dataset"
|
40
|
+
require_relative "dbwatcher/services/diagram_data"
|
41
|
+
|
42
|
+
# Diagram analyzers
|
43
|
+
require_relative "dbwatcher/services/diagram_analyzers/base_analyzer"
|
44
|
+
require_relative "dbwatcher/services/diagram_analyzers/foreign_key_analyzer"
|
45
|
+
require_relative "dbwatcher/services/diagram_analyzers/inferred_relationship_analyzer"
|
46
|
+
require_relative "dbwatcher/services/diagram_analyzers/model_association_analyzer"
|
47
|
+
|
48
|
+
# Mermaid syntax builders
|
49
|
+
require_relative "dbwatcher/services/mermaid_syntax/base_builder"
|
50
|
+
require_relative "dbwatcher/services/mermaid_syntax/sanitizer"
|
51
|
+
require_relative "dbwatcher/services/mermaid_syntax/cardinality_mapper"
|
52
|
+
require_relative "dbwatcher/services/mermaid_syntax/erd_builder"
|
53
|
+
require_relative "dbwatcher/services/mermaid_syntax/class_diagram_builder"
|
54
|
+
require_relative "dbwatcher/services/mermaid_syntax/flowchart_builder"
|
55
|
+
require_relative "dbwatcher/services/mermaid_syntax_builder"
|
56
|
+
|
57
|
+
# Diagram strategies
|
58
|
+
require_relative "dbwatcher/services/diagram_strategies/base_diagram_strategy"
|
59
|
+
require_relative "dbwatcher/services/diagram_strategies/erd_diagram_strategy"
|
60
|
+
require_relative "dbwatcher/services/diagram_strategies/class_diagram_strategy"
|
61
|
+
require_relative "dbwatcher/services/diagram_strategies/flowchart_diagram_strategy"
|
62
|
+
|
63
|
+
# Diagram system
|
64
|
+
require_relative "dbwatcher/services/diagram_error_handler"
|
65
|
+
require_relative "dbwatcher/services/diagram_type_registry"
|
66
|
+
require_relative "dbwatcher/services/diagram_generator"
|
67
|
+
require_relative "dbwatcher/services/diagram_system"
|
68
|
+
|
69
|
+
# API services
|
70
|
+
require_relative "dbwatcher/services/api/base_api_service"
|
71
|
+
require_relative "dbwatcher/services/api/changes_data_service"
|
72
|
+
require_relative "dbwatcher/services/api/summary_data_service"
|
73
|
+
require_relative "dbwatcher/services/api/diagram_data_service"
|
74
|
+
|
75
|
+
# Rails engine
|
12
76
|
require_relative "dbwatcher/engine" if defined?(Rails)
|
13
77
|
|
14
78
|
module Dbwatcher
|
@@ -33,8 +97,11 @@ module Dbwatcher
|
|
33
97
|
Tracker.current_session
|
34
98
|
end
|
35
99
|
|
36
|
-
|
37
|
-
|
100
|
+
# Clears all stored data (sessions and queries)
|
101
|
+
#
|
102
|
+
# @return [Integer] total number of files removed
|
103
|
+
def clear_all
|
104
|
+
Storage.clear_all
|
38
105
|
end
|
39
106
|
end
|
40
107
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dbwatcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Huy Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '6.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: sassc
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.4'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.4'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: selenium-webdriver
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -141,6 +155,7 @@ description: DB Watcher helps developers debug Rails applications by tracking al
|
|
141
155
|
email:
|
142
156
|
- patrick204nqh@gmail.com
|
143
157
|
executables:
|
158
|
+
- compile_scss
|
144
159
|
- console
|
145
160
|
- release
|
146
161
|
- setup
|
@@ -149,10 +164,73 @@ extra_rdoc_files: []
|
|
149
164
|
files:
|
150
165
|
- README.md
|
151
166
|
- Rakefile
|
167
|
+
- app/assets/config/dbwatcher_manifest.js
|
168
|
+
- app/assets/javascripts/dbwatcher/alpine_registrations.js
|
169
|
+
- app/assets/javascripts/dbwatcher/auto_init.js
|
170
|
+
- app/assets/javascripts/dbwatcher/components/base.js
|
171
|
+
- app/assets/javascripts/dbwatcher/components/changes_table_hybrid.js
|
172
|
+
- app/assets/javascripts/dbwatcher/components/diagrams.js
|
173
|
+
- app/assets/javascripts/dbwatcher/components/summary.js
|
174
|
+
- app/assets/javascripts/dbwatcher/core/alpine_store.js
|
175
|
+
- app/assets/javascripts/dbwatcher/core/api_client.js
|
176
|
+
- app/assets/javascripts/dbwatcher/core/component_loader.js
|
177
|
+
- app/assets/javascripts/dbwatcher/core/component_registry.js
|
178
|
+
- app/assets/javascripts/dbwatcher/dbwatcher.js
|
179
|
+
- app/assets/javascripts/dbwatcher/services/mermaid.js
|
180
|
+
- app/assets/javascripts/dbwatcher/services/mermaid_service.js
|
181
|
+
- app/assets/javascripts/dbwatcher/vendor/date-fns-browser.js
|
182
|
+
- app/assets/javascripts/dbwatcher/vendor/lodash.min.js
|
183
|
+
- app/assets/javascripts/dbwatcher/vendor/tabulator.min.js
|
184
|
+
- app/assets/stylesheets/dbwatcher/application.css
|
185
|
+
- app/assets/stylesheets/dbwatcher/application.scss
|
186
|
+
- app/assets/stylesheets/dbwatcher/components/_badges.scss
|
187
|
+
- app/assets/stylesheets/dbwatcher/components/_compact_table.scss
|
188
|
+
- app/assets/stylesheets/dbwatcher/components/_diagrams.scss
|
189
|
+
- app/assets/stylesheets/dbwatcher/components/_forms.scss
|
190
|
+
- app/assets/stylesheets/dbwatcher/components/_navigation.scss
|
191
|
+
- app/assets/stylesheets/dbwatcher/core/_base.scss
|
192
|
+
- app/assets/stylesheets/dbwatcher/core/_variables.scss
|
193
|
+
- app/assets/stylesheets/dbwatcher/vendor/tabulator.min.css
|
194
|
+
- app/controllers/dbwatcher/api/v1/sessions_controller.rb
|
195
|
+
- app/controllers/dbwatcher/base_controller.rb
|
196
|
+
- app/controllers/dbwatcher/dashboard_controller.rb
|
197
|
+
- app/controllers/dbwatcher/queries_controller.rb
|
152
198
|
- app/controllers/dbwatcher/sessions_controller.rb
|
199
|
+
- app/controllers/dbwatcher/tables_controller.rb
|
200
|
+
- app/helpers/dbwatcher/application_helper.rb
|
201
|
+
- app/helpers/dbwatcher/component_helper.rb
|
202
|
+
- app/helpers/dbwatcher/diagram_helper.rb
|
203
|
+
- app/helpers/dbwatcher/formatting_helper.rb
|
204
|
+
- app/helpers/dbwatcher/session_helper.rb
|
205
|
+
- app/views/dbwatcher/dashboard/index.html.erb
|
206
|
+
- app/views/dbwatcher/queries/index.html.erb
|
207
|
+
- app/views/dbwatcher/sessions/_changes_tab.html.erb
|
208
|
+
- app/views/dbwatcher/sessions/_diagrams_tab.html.erb
|
209
|
+
- app/views/dbwatcher/sessions/_session_header.html.erb
|
210
|
+
- app/views/dbwatcher/sessions/_summary_tab.html.erb
|
211
|
+
- app/views/dbwatcher/sessions/_tab_navigation.html.erb
|
212
|
+
- app/views/dbwatcher/sessions/changes.html.erb
|
213
|
+
- app/views/dbwatcher/sessions/components/changes/_filters.html.erb
|
214
|
+
- app/views/dbwatcher/sessions/components/changes/_table_list.html.erb
|
215
|
+
- app/views/dbwatcher/sessions/diagrams.html.erb
|
153
216
|
- app/views/dbwatcher/sessions/index.html.erb
|
217
|
+
- app/views/dbwatcher/sessions/shared/_layout.html.erb
|
218
|
+
- app/views/dbwatcher/sessions/shared/_navigation.html.erb
|
219
|
+
- app/views/dbwatcher/sessions/shared/_session_header.html.erb
|
154
220
|
- app/views/dbwatcher/sessions/show.html.erb
|
221
|
+
- app/views/dbwatcher/sessions/summary.html.erb
|
222
|
+
- app/views/dbwatcher/shared/_badge.html.erb
|
223
|
+
- app/views/dbwatcher/shared/_data_table.html.erb
|
224
|
+
- app/views/dbwatcher/shared/_header.html.erb
|
225
|
+
- app/views/dbwatcher/shared/_page_layout.html.erb
|
226
|
+
- app/views/dbwatcher/shared/_section_panel.html.erb
|
227
|
+
- app/views/dbwatcher/shared/_stats_card.html.erb
|
228
|
+
- app/views/dbwatcher/shared/_tab_bar.html.erb
|
229
|
+
- app/views/dbwatcher/tables/changes.html.erb
|
230
|
+
- app/views/dbwatcher/tables/index.html.erb
|
231
|
+
- app/views/dbwatcher/tables/show.html.erb
|
155
232
|
- app/views/layouts/dbwatcher/application.html.erb
|
233
|
+
- bin/compile_scss
|
156
234
|
- bin/console
|
157
235
|
- bin/release
|
158
236
|
- bin/setup
|
@@ -160,9 +238,69 @@ files:
|
|
160
238
|
- lib/dbwatcher.rb
|
161
239
|
- lib/dbwatcher/configuration.rb
|
162
240
|
- lib/dbwatcher/engine.rb
|
241
|
+
- lib/dbwatcher/logging.rb
|
163
242
|
- lib/dbwatcher/middleware.rb
|
164
243
|
- lib/dbwatcher/model_extension.rb
|
244
|
+
- lib/dbwatcher/services/analyzers/session_data_processor.rb
|
245
|
+
- lib/dbwatcher/services/analyzers/table_summary_builder.rb
|
246
|
+
- lib/dbwatcher/services/api/base_api_service.rb
|
247
|
+
- lib/dbwatcher/services/api/changes_data_service.rb
|
248
|
+
- lib/dbwatcher/services/api/diagram_data_service.rb
|
249
|
+
- lib/dbwatcher/services/api/summary_data_service.rb
|
250
|
+
- lib/dbwatcher/services/base_service.rb
|
251
|
+
- lib/dbwatcher/services/dashboard_data_aggregator.rb
|
252
|
+
- lib/dbwatcher/services/diagram_analyzers/base_analyzer.rb
|
253
|
+
- lib/dbwatcher/services/diagram_analyzers/foreign_key_analyzer.rb
|
254
|
+
- lib/dbwatcher/services/diagram_analyzers/inferred_relationship_analyzer.rb
|
255
|
+
- lib/dbwatcher/services/diagram_analyzers/model_association_analyzer.rb
|
256
|
+
- lib/dbwatcher/services/diagram_data.rb
|
257
|
+
- lib/dbwatcher/services/diagram_data/attribute.rb
|
258
|
+
- lib/dbwatcher/services/diagram_data/dataset.rb
|
259
|
+
- lib/dbwatcher/services/diagram_data/entity.rb
|
260
|
+
- lib/dbwatcher/services/diagram_data/relationship.rb
|
261
|
+
- lib/dbwatcher/services/diagram_data/relationship_params.rb
|
262
|
+
- lib/dbwatcher/services/diagram_error_handler.rb
|
263
|
+
- lib/dbwatcher/services/diagram_generator.rb
|
264
|
+
- lib/dbwatcher/services/diagram_strategies/base_diagram_strategy.rb
|
265
|
+
- lib/dbwatcher/services/diagram_strategies/class_diagram_strategy.rb
|
266
|
+
- lib/dbwatcher/services/diagram_strategies/erd_diagram_strategy.rb
|
267
|
+
- lib/dbwatcher/services/diagram_strategies/flowchart_diagram_strategy.rb
|
268
|
+
- lib/dbwatcher/services/diagram_system.rb
|
269
|
+
- lib/dbwatcher/services/diagram_type_registry.rb
|
270
|
+
- lib/dbwatcher/services/mermaid_syntax/base_builder.rb
|
271
|
+
- lib/dbwatcher/services/mermaid_syntax/cardinality_mapper.rb
|
272
|
+
- lib/dbwatcher/services/mermaid_syntax/class_diagram_builder.rb
|
273
|
+
- lib/dbwatcher/services/mermaid_syntax/class_diagram_helper.rb
|
274
|
+
- lib/dbwatcher/services/mermaid_syntax/erd_builder.rb
|
275
|
+
- lib/dbwatcher/services/mermaid_syntax/flowchart_builder.rb
|
276
|
+
- lib/dbwatcher/services/mermaid_syntax/sanitizer.rb
|
277
|
+
- lib/dbwatcher/services/mermaid_syntax_builder.rb
|
278
|
+
- lib/dbwatcher/services/query_filter_processor.rb
|
279
|
+
- lib/dbwatcher/services/table_statistics_collector.rb
|
280
|
+
- lib/dbwatcher/sql_logger.rb
|
165
281
|
- lib/dbwatcher/storage.rb
|
282
|
+
- lib/dbwatcher/storage/api/base_api.rb
|
283
|
+
- lib/dbwatcher/storage/api/concerns/table_analyzer.rb
|
284
|
+
- lib/dbwatcher/storage/api/query_api.rb
|
285
|
+
- lib/dbwatcher/storage/api/session_api.rb
|
286
|
+
- lib/dbwatcher/storage/api/table_api.rb
|
287
|
+
- lib/dbwatcher/storage/base_storage.rb
|
288
|
+
- lib/dbwatcher/storage/change_processor.rb
|
289
|
+
- lib/dbwatcher/storage/concerns/data_normalizer.rb
|
290
|
+
- lib/dbwatcher/storage/concerns/error_handler.rb
|
291
|
+
- lib/dbwatcher/storage/concerns/timestampable.rb
|
292
|
+
- lib/dbwatcher/storage/concerns/validatable.rb
|
293
|
+
- lib/dbwatcher/storage/date_helper.rb
|
294
|
+
- lib/dbwatcher/storage/errors.rb
|
295
|
+
- lib/dbwatcher/storage/file_manager.rb
|
296
|
+
- lib/dbwatcher/storage/null_session.rb
|
297
|
+
- lib/dbwatcher/storage/query_storage.rb
|
298
|
+
- lib/dbwatcher/storage/query_validator.rb
|
299
|
+
- lib/dbwatcher/storage/session.rb
|
300
|
+
- lib/dbwatcher/storage/session_operations.rb
|
301
|
+
- lib/dbwatcher/storage/session_query.rb
|
302
|
+
- lib/dbwatcher/storage/session_storage.rb
|
303
|
+
- lib/dbwatcher/storage/table_storage.rb
|
166
304
|
- lib/dbwatcher/tracker.rb
|
167
305
|
- lib/dbwatcher/version.rb
|
168
306
|
homepage: https://github.com/patrick204nqh/dbwatcher
|