forest_admin_agent 1.12.0 → 1.12.1
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
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0b543720ae62ce8fe84adb2ee106cd56411d3b63cfa236213267b4ca36a73484
|
|
4
|
+
data.tar.gz: 2e5bb5223972fda6add7d51baeed8061157fec8bd4e44617414bfcd621e10113
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d95ac8981ef1adbb46f6bdc89e913be52c812157cf403583ac38d67a879f9791e7554593a479e4c66548ca544803cab45cca8872025de0c23ae180e23aef0a6d
|
|
7
|
+
data.tar.gz: fa8bd8ea61e8deaba5e074300d02365484bbfd95f8d84c895e40e96a7715ab14c3d9229544fb6180461410e459a33b9a08abd83a7241c22d42deae5c6b238638
|
|
@@ -3,31 +3,84 @@ module ForestAdminAgent
|
|
|
3
3
|
class Router
|
|
4
4
|
include ForestAdminAgent::Routes
|
|
5
5
|
|
|
6
|
+
# Mutex for thread-safe cache operations
|
|
7
|
+
@mutex = Mutex.new
|
|
8
|
+
|
|
9
|
+
def self.cached_routes
|
|
10
|
+
return routes.freeze if cache_disabled?
|
|
11
|
+
|
|
12
|
+
return @cached_routes if @cached_routes
|
|
13
|
+
|
|
14
|
+
@mutex.synchronize do
|
|
15
|
+
@cached_routes ||= begin
|
|
16
|
+
start_time = Time.now
|
|
17
|
+
computed_routes = routes
|
|
18
|
+
elapsed = ((Time.now - start_time) * 1000).round(2)
|
|
19
|
+
|
|
20
|
+
log_message = "[ForestAdmin] Computed #{computed_routes.size} routes " \
|
|
21
|
+
"in #{elapsed}ms (caching enabled)"
|
|
22
|
+
ForestAdminAgent::Facades::Container.logger.log('Info', log_message)
|
|
23
|
+
|
|
24
|
+
computed_routes.freeze
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.cache_disabled?
|
|
30
|
+
config = ForestAdminAgent::Facades::Container.config_from_cache
|
|
31
|
+
config&.dig(:disable_route_cache) == true
|
|
32
|
+
rescue StandardError
|
|
33
|
+
# If config is not available or an error occurs, default to caching enabled
|
|
34
|
+
false
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.reset_cached_routes!
|
|
38
|
+
@mutex.synchronize do
|
|
39
|
+
@cached_routes = nil
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
6
43
|
def self.routes
|
|
7
|
-
[
|
|
8
|
-
actions_routes,
|
|
9
|
-
api_charts_routes,
|
|
10
|
-
System::HealthCheck.new.routes,
|
|
11
|
-
Security::Authentication.new.routes,
|
|
12
|
-
Security::ScopeInvalidation.new.routes,
|
|
13
|
-
Charts::Charts.new.routes,
|
|
14
|
-
Capabilities::Collections.new.routes,
|
|
15
|
-
Resources::NativeQuery.new.routes,
|
|
16
|
-
Resources::Count.new.routes,
|
|
17
|
-
Resources::Delete.new.routes,
|
|
18
|
-
Resources::Csv.new.routes,
|
|
19
|
-
Resources::List.new.routes,
|
|
20
|
-
Resources::Show.new.routes,
|
|
21
|
-
Resources::Store.new.routes,
|
|
22
|
-
Resources::Update.new.routes,
|
|
23
|
-
Resources::
|
|
24
|
-
Resources::Related::
|
|
25
|
-
Resources::Related::
|
|
26
|
-
Resources::Related::
|
|
27
|
-
Resources::Related::
|
|
28
|
-
Resources::Related::
|
|
29
|
-
Resources::
|
|
30
|
-
]
|
|
44
|
+
route_sources = [
|
|
45
|
+
{ name: 'actions', handler: -> { actions_routes } },
|
|
46
|
+
{ name: 'api_charts', handler: -> { api_charts_routes } },
|
|
47
|
+
{ name: 'health_check', handler: -> { System::HealthCheck.new.routes } },
|
|
48
|
+
{ name: 'authentication', handler: -> { Security::Authentication.new.routes } },
|
|
49
|
+
{ name: 'scope_invalidation', handler: -> { Security::ScopeInvalidation.new.routes } },
|
|
50
|
+
{ name: 'charts', handler: -> { Charts::Charts.new.routes } },
|
|
51
|
+
{ name: 'collections', handler: -> { Capabilities::Collections.new.routes } },
|
|
52
|
+
{ name: 'native_query', handler: -> { Resources::NativeQuery.new.routes } },
|
|
53
|
+
{ name: 'count', handler: -> { Resources::Count.new.routes } },
|
|
54
|
+
{ name: 'delete', handler: -> { Resources::Delete.new.routes } },
|
|
55
|
+
{ name: 'csv', handler: -> { Resources::Csv.new.routes } },
|
|
56
|
+
{ name: 'list', handler: -> { Resources::List.new.routes } },
|
|
57
|
+
{ name: 'show', handler: -> { Resources::Show.new.routes } },
|
|
58
|
+
{ name: 'store', handler: -> { Resources::Store.new.routes } },
|
|
59
|
+
{ name: 'update', handler: -> { Resources::Update.new.routes } },
|
|
60
|
+
{ name: 'csv_related', handler: -> { Resources::Related::CsvRelated.new.routes } },
|
|
61
|
+
{ name: 'list_related', handler: -> { Resources::Related::ListRelated.new.routes } },
|
|
62
|
+
{ name: 'count_related', handler: -> { Resources::Related::CountRelated.new.routes } },
|
|
63
|
+
{ name: 'associate_related', handler: -> { Resources::Related::AssociateRelated.new.routes } },
|
|
64
|
+
{ name: 'dissociate_related', handler: -> { Resources::Related::DissociateRelated.new.routes } },
|
|
65
|
+
{ name: 'update_related', handler: -> { Resources::Related::UpdateRelated.new.routes } },
|
|
66
|
+
{ name: 'update_field', handler: -> { Resources::UpdateField.new.routes } }
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
all_routes = {}
|
|
70
|
+
|
|
71
|
+
route_sources.each do |source|
|
|
72
|
+
routes = source[:handler].call
|
|
73
|
+
|
|
74
|
+
unless routes.is_a?(Hash)
|
|
75
|
+
raise TypeError, "Route handler '#{source[:name]}' returned #{routes.class} instead of Hash"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
all_routes.merge!(routes)
|
|
79
|
+
rescue StandardError => e
|
|
80
|
+
raise e.class, "Failed to load routes from '#{source[:name]}' handler: #{e.message}"
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
all_routes
|
|
31
84
|
end
|
|
32
85
|
|
|
33
86
|
def self.actions_routes
|