insights-api-common 5.0.3 → 5.0.7

Sign up to get free protection for your applications and to get access to all the features.
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