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: 7346c5aeb31bdfac26e54932a61996eb236b3bb663b90ccc8bc85f21a1116588
4
- data.tar.gz: 574c5286719fe66f3e56c143655e524dc1c4cd685433666707298e87d5c014ae
3
+ metadata.gz: 0b543720ae62ce8fe84adb2ee106cd56411d3b63cfa236213267b4ca36a73484
4
+ data.tar.gz: 2e5bb5223972fda6add7d51baeed8061157fec8bd4e44617414bfcd621e10113
5
5
  SHA512:
6
- metadata.gz: 8174d8b90248f921c7dab4c4cd86e3d086e84d4359898422b17b8fb9a2a4e81d737385ffe4fb54692ee2a1d9fcfd7007b889cc89dd56d570ccb1e093121838aa
7
- data.tar.gz: 04eed2669052cab46c4589867c1c53eb6b905d2f93cafb46a8046e3f0b1135b0be7a70e24aae294dbfe9df26ca8a1d71e017e5f56ef5a2d7aeac6d191a52e4a0
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::UpdateField.new.routes,
24
- Resources::Related::CsvRelated.new.routes,
25
- Resources::Related::ListRelated.new.routes,
26
- Resources::Related::CountRelated.new.routes,
27
- Resources::Related::AssociateRelated.new.routes,
28
- Resources::Related::DissociateRelated.new.routes,
29
- Resources::Related::UpdateRelated.new.routes
30
- ].inject(&:merge)
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
@@ -6,7 +6,7 @@ module ForestAdminAgent
6
6
  module Schema
7
7
  class SchemaEmitter
8
8
  LIANA_NAME = "agent-ruby"
9
- LIANA_VERSION = "1.12.0"
9
+ LIANA_VERSION = "1.12.1"
10
10
 
11
11
  def self.generate(datasource)
12
12
  datasource.collections
@@ -1,3 +1,3 @@
1
1
  module ForestAdminAgent
2
- VERSION = "1.12.0"
2
+ VERSION = "1.12.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forest_admin_agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.0
4
+ version: 1.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthieu