insights-api-common 5.0.3 → 5.0.7

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: 69996ff970a292cd520ac12cda29ef17bb8d80b06c103df7eb9989ae75fdb868
4
- data.tar.gz: aa44e58806adfb3b2be0d57709558bb67a73898f4d76a98850ede77f00dfb460
3
+ metadata.gz: 49405a0df1c2f72453a6af750d492abed71cd1834d5f3f5969ccc6ad1c8176b6
4
+ data.tar.gz: 8f060ebf9a77ec3dc21ae07669113d3d21bf1a17197f6799195c68f5a6a3144e
5
5
  SHA512:
6
- metadata.gz: 575068b4b0214c56bd537ebbd3ac0d11724fef6bfae4b231bb045bf04559b829744a722adaf9a7676773e7a4488c86dfc27769065d7bb2896fba3717093192dd
7
- data.tar.gz: ee3131ab6fc83044a334fe8e5fa4a381aa92a87a7d5c9a46523cd683cf2e6f546f2d8ee40b1a5b837907062a4e7479ecaf94f96369ab3d5ab7b07c1200d65fa1
6
+ metadata.gz: 2304e0da92c925a9b6ab7955cd80c5614fb3bc707ed4a06ab1e8c96105551cf853a1e9971c8778c6b1a9e94c17c9bf4c0e19a549d2dfd2b68ce323b0c675dd4b
7
+ data.tar.gz: c8d78f8dc2b6918347991fcaaf593b5e2980871588aef6a2892361d05c708fcad1f33bc28b818fd3e756349f15d486d871ff640996ab94f0d298d5555361d9aa
@@ -4,7 +4,8 @@ module Insights
4
4
  class ErrorDocument
5
5
  def add(status = 400, message)
6
6
  @status = status
7
- errors << {"status" => status, "detail" => message}
7
+ safe_message = message.to_s.encode('UTF-8', :invalid => :replace, :undef => :replace)
8
+ errors << {"status" => status, "detail" => safe_message}
8
9
  self
9
10
  end
10
11
 
@@ -177,6 +177,20 @@ module Insights
177
177
  end
178
178
  end
179
179
 
180
+ def self.build_filtered_scope(scope, api_version, klass_name, filter)
181
+ return scope unless filter
182
+
183
+ openapi_doc = ::Insights::API::Common::OpenApi::Docs.instance[api_version]
184
+ openapi_schema_name, = ::Insights::API::Common::GraphQL::Generator.openapi_schema(openapi_doc, klass_name)
185
+
186
+ action_parameters = ActionController::Parameters.new(filter)
187
+ definitions = openapi_doc.definitions
188
+
189
+ association_attribute_properties = association_attribute_properties(definitions, action_parameters)
190
+
191
+ new(scope, action_parameters, definitions[openapi_schema_name], association_attribute_properties).apply
192
+ end
193
+
180
194
  def timestamp(k, val)
181
195
  if val.kind_of?(Hash)
182
196
  val.each do |comparator, value|
@@ -164,8 +164,16 @@ module Insights
164
164
 
165
165
  graphql_model_type_template = ERB.new(template("model_type"), nil, '<>').result(binding)
166
166
  graphql_namespace.module_eval(graphql_model_type_template)
167
+
168
+ unless graphql_namespace.const_defined?("#{klass_name}AggregateType", false)
169
+ graphql_aggregate_model_type_template = ERB.new(template("aggregate_model_type"), nil, '<>').result(binding)
170
+ graphql_namespace.module_eval(graphql_aggregate_model_type_template)
171
+ end
167
172
  end
168
173
 
174
+ graphql_aggregate_type_template = ERB.new(template("aggregate_type"), nil, '<>').result(binding)
175
+ graphql_namespace.module_eval(graphql_aggregate_type_template)
176
+
169
177
  graphql_query_type_template = ERB.new(template("query_type"), nil, '<>').result(binding)
170
178
  graphql_namespace.module_eval(graphql_query_type_template)
171
179
 
@@ -0,0 +1,8 @@
1
+ <%= klass_name %>AggregateType = ::GraphQL::ObjectType.define do
2
+ name "<%= klass_name %>AggregateType"
3
+ description "A <%= klass_name %>AggregateType to wrap metrics aggregation"
4
+
5
+ field :aggregate, AggregateType do
6
+ resolve ->(object, _args, _ctx) { object }
7
+ end
8
+ end
@@ -0,0 +1,14 @@
1
+ AggregateType = ::GraphQL::ObjectType.define do
2
+ name "AggregateType"
3
+ description "A AggregateType type for aggregation metrics"
4
+
5
+ field :total_count, !types.Int do
6
+ resolve ->(object, _args, _ctx) {
7
+ if object.kind_of?(QueryRelation) # from nested aggregation
8
+ object.count # count is array operation
9
+ else
10
+ object
11
+ end
12
+ }
13
+ end
14
+ end
@@ -30,6 +30,19 @@
30
30
  ::Insights::API::Common::GraphQL::AssociationLoader.new(<%= klass_name.constantize %>, "<%= associations %>", args, graphql_options).load(obj)
31
31
  }
32
32
  end
33
+
34
+ field :<%= associations %>_aggregate do
35
+ description "Aggregation of <%= associations %> associated with <%= klass_name %> model."
36
+ type <%= "#{association_class_name}AggregateType" %>
37
+
38
+ associations_name = "<%= associations %>"
39
+ preload :<%= associations %>
40
+
41
+ resolve lambda { |obj, args, _ctx|
42
+ ::Insights::API::Common::GraphQL::AssociationLoader.new(<%= klass_name.constantize %>, "<%= associations %>", args, graphql_options).load(obj)
43
+ }
44
+ end
45
+
33
46
  <% end %>
34
47
  <% end %>
35
48
  end
@@ -31,18 +31,9 @@ QueryType = ::GraphQL::ObjectType.define do
31
31
  scope = model_class
32
32
  end
33
33
 
34
- if args[:filter]
35
- openapi_doc = ::Insights::API::Common::OpenApi::Docs.instance["<%= api_version %>"]
36
- openapi_schema_name, _schema = ::Insights::API::Common::GraphQL::Generator.openapi_schema(openapi_doc, klass_name)
37
- association_attribute_properties =
38
- Insights::API::Common::Filter.association_attribute_properties(openapi_doc.definitions, ActionController::Parameters.new(args[:filter]))
39
- scope = ::Insights::API::Common::Filter.new(
40
- scope,
41
- ActionController::Parameters.new(args[:filter]),
42
- openapi_doc.definitions[openapi_schema_name],
43
- association_attribute_properties).apply
44
- end
34
+ scope = ::Insights::API::Common::Filter.build_filtered_scope(scope, "<%= api_version %>", klass_name, args[:filter])
45
35
  scope = ::Insights::API::Common::GraphQL.search_options(scope, args)
36
+
46
37
  if <%= graphql_options[:use_pagination_v2] %> == true
47
38
  ::Insights::API::Common::PaginatedResponseV2.new(
48
39
  base_query: scope, request: nil, limit: args[:limit], offset: args[:offset], sort_by: args[:sort_by]
@@ -54,5 +45,24 @@ QueryType = ::GraphQL::ObjectType.define do
54
45
  end
55
46
  }
56
47
  end
48
+
49
+ field_aggregate = "#{collection}_aggregate"
50
+ field field_aggregate do
51
+ description "The #{collection} aggregation associated with this #{klass_name}"
52
+ klass_name_type = "::Insights::API::Common::GraphQL::Api::#{version_namespace}::#{klass_name}AggregateType".constantize
53
+ argument :filter, ::Insights::API::Common::GraphQL::Types::QueryFilter, "The Query Filter for querying the #{collection}"
54
+
55
+ type klass_name_type
56
+
57
+ resolve lambda { |_obj, args, _ctx|
58
+ if base_query.present?
59
+ scope = base_query.call(model_class, args, ctx)
60
+ else
61
+ scope = model_class
62
+ end
63
+
64
+ ::Insights::API::Common::Filter.build_filtered_scope(scope, "<%= api_version %>", klass_name, args[:filter]).count
65
+ }
66
+ end
57
67
  end
58
68
  end
@@ -2,14 +2,27 @@ module Insights
2
2
  module API
3
3
  module Common
4
4
  class Logging
5
- def self.activate(config)
6
- require 'manageiq/loggers'
7
- config.logger = if Rails.env.production?
8
- config.colorize_logging = false
9
- ManageIQ::Loggers::CloudWatch.new
10
- else
11
- ManageIQ::Loggers::Base.new(Rails.root.join("log", "#{Rails.env}.log"))
12
- end
5
+ def self.logger_class
6
+ if ENV['LOG_HANDLER'] == "haberdasher"
7
+ "Insights::Loggers::StdErrorLogger"
8
+ else
9
+ "Insights::Loggers::CloudWatch"
10
+ end
11
+ end
12
+
13
+ def self.activate(config, app_name = nil)
14
+ require 'insights/loggers'
15
+ log_params = {}
16
+ klass_for_logger = if Rails.env.production?
17
+ config.colorize_logging = false
18
+ log_params[:app_name] = app_name if app_name
19
+ logger_class
20
+ else
21
+ log_params = {:log_path => Rails.root.join("log", "#{Rails.env}.log")}
22
+ "ManageIQ::Loggers::Base"
23
+ end
24
+
25
+ config.logger = Insights::Loggers::Factory.create_logger(klass_for_logger, log_params)
13
26
  end
14
27
  end
15
28
  end
@@ -1,7 +1,7 @@
1
1
  module Insights
2
2
  module API
3
3
  module Common
4
- VERSION = "5.0.3".freeze
4
+ VERSION = "5.0.7".freeze
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: insights-api-common
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.3
4
+ version: 5.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Insights Authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-17 00:00:00.000000000 Z
11
+ date: 2021-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: acts_as_tenant
@@ -73,33 +73,33 @@ dependencies:
73
73
  - !ruby/object:Gem::Version
74
74
  version: 5.2.2.1
75
75
  - !ruby/object:Gem::Dependency
76
- name: manageiq-loggers
76
+ name: insights-loggers-ruby
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '0.3'
81
+ version: 0.1.10
82
82
  type: :runtime
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '0.3'
88
+ version: 0.1.10
89
89
  - !ruby/object:Gem::Dependency
90
- name: cloudwatchlogger
90
+ name: manageiq-loggers
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: 0.2.1
95
+ version: 0.4.0
96
96
  type: :runtime
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: 0.2.1
102
+ version: 0.4.0
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: prometheus_exporter
105
105
  requirement: !ruby/object:Gem::Requirement
@@ -396,6 +396,8 @@ files:
396
396
  - lib/insights/api/common/graphql/associated_records.rb
397
397
  - lib/insights/api/common/graphql/association_loader.rb
398
398
  - lib/insights/api/common/graphql/generator.rb
399
+ - lib/insights/api/common/graphql/templates/aggregate_model_type.erb
400
+ - lib/insights/api/common/graphql/templates/aggregate_type.erb
399
401
  - lib/insights/api/common/graphql/templates/model_type.erb
400
402
  - lib/insights/api/common/graphql/templates/query_type.erb
401
403
  - lib/insights/api/common/graphql/templates/schema.erb