elasticgraph-indexer 1.0.0 → 1.0.2
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 +0 -3
- data/lib/elastic_graph/indexer/config.rb +40 -30
- data/lib/elastic_graph/indexer/operation/factory.rb +4 -4
- data/lib/elastic_graph/indexer.rb +1 -1
- metadata +24 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96459aae32411712ac8a1fe13289cf2e411a4ac8c7a38d2b868712380149fcf1
|
4
|
+
data.tar.gz: d73d0c3420d55399b6e4111606ba8ba154a19067efb15eb0b006f30e86f664af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab47eea78b85a3e0e6252eed24cc775402be7527778a8cb15bde35c0b76451af057baab6b37b43c02957ee13138ff70e11078625bcb48834a050c3c1045cddea
|
7
|
+
data.tar.gz: c47921bbfce1a736c714ad5f696c6692460b59c545a15af23a575a85c192e41ad27ef671fe7e4bb6309a2328f278b5a28a7b96dc781f13ef96adaa9f8c554e7e
|
data/README.md
CHANGED
@@ -14,9 +14,6 @@ graph LR;
|
|
14
14
|
elasticgraph-datastore_core["elasticgraph-datastore_core"];
|
15
15
|
elasticgraph-indexer --> elasticgraph-datastore_core;
|
16
16
|
class elasticgraph-datastore_core otherEgGemStyle;
|
17
|
-
elasticgraph-json_schema["elasticgraph-json_schema"];
|
18
|
-
elasticgraph-indexer --> elasticgraph-json_schema;
|
19
|
-
class elasticgraph-json_schema otherEgGemStyle;
|
20
17
|
elasticgraph-schema_artifacts["elasticgraph-schema_artifacts"];
|
21
18
|
elasticgraph-indexer --> elasticgraph-schema_artifacts;
|
22
19
|
class elasticgraph-schema_artifacts otherEgGemStyle;
|
@@ -6,43 +6,53 @@
|
|
6
6
|
#
|
7
7
|
# frozen_string_literal: true
|
8
8
|
|
9
|
+
require "elastic_graph/support/config"
|
9
10
|
require "elastic_graph/errors"
|
10
|
-
require "elastic_graph/indexer/event_id"
|
11
11
|
|
12
12
|
module ElasticGraph
|
13
13
|
class Indexer
|
14
|
-
class Config < ::
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
14
|
+
class Config < Support::Config.define(:latency_slo_thresholds_by_timestamp_in_ms, :skip_derived_indexing_type_updates)
|
15
|
+
json_schema at: "indexer",
|
16
|
+
optional: false,
|
17
|
+
description: "Configuration for indexing operations and metrics used by `elasticgraph-indexer`.",
|
18
|
+
properties: {
|
19
|
+
latency_slo_thresholds_by_timestamp_in_ms: {
|
20
|
+
description: "Map of indexing latency thresholds (in milliseconds), keyed by the name of " \
|
21
|
+
"the indexing latency metric. When an event is indexed with an indexing latency " \
|
22
|
+
"exceeding the threshold, a warning with the event type, id, and version will " \
|
23
|
+
"be logged, so the issue can be investigated.",
|
24
|
+
type: "object",
|
25
|
+
patternProperties: {/.+/.source => {type: "integer", minimum: 0}},
|
26
|
+
default: {}, # : untyped
|
27
|
+
examples: [
|
28
|
+
{}, # : untyped
|
29
|
+
{"ingested_from_topic_at" => 10000, "entity_updated_at" => 15000}
|
30
|
+
]
|
31
|
+
},
|
32
|
+
skip_derived_indexing_type_updates: {
|
33
|
+
description: "Setting that can be used to specify some derived indexing type updates that should be skipped. This " \
|
34
|
+
"setting should be a map keyed by the name of the derived indexing type, and the values should be sets " \
|
35
|
+
'of ids. This can be useful when you have a "hot spot" of a single derived document that is ' \
|
36
|
+
"receiving a ton of updates. During a backfill (or whatever) you may want to skip the derived " \
|
37
|
+
"type updates.",
|
38
|
+
type: "object",
|
39
|
+
patternProperties: {/^[A-Z]\w*$/.source => {type: "array", items: {type: "string", minLength: 1}}},
|
40
|
+
default: {}, # : untyped
|
41
|
+
examples: [
|
42
|
+
{}, # : untyped
|
43
|
+
{"WidgetWorkspace" => ["ABC12345678"]}
|
44
|
+
]
|
45
|
+
}
|
46
|
+
}
|
30
47
|
|
31
|
-
|
32
|
-
raise Errors::ConfigError, "Unknown `indexer` config settings: #{extra_keys.join(", ")}"
|
33
|
-
end
|
48
|
+
private
|
34
49
|
|
35
|
-
|
36
|
-
|
37
|
-
skip_derived_indexing_type_updates:
|
38
|
-
|
50
|
+
def convert_values(skip_derived_indexing_type_updates:, latency_slo_thresholds_by_timestamp_in_ms:)
|
51
|
+
{
|
52
|
+
skip_derived_indexing_type_updates: skip_derived_indexing_type_updates.transform_values(&:to_set),
|
53
|
+
latency_slo_thresholds_by_timestamp_in_ms: latency_slo_thresholds_by_timestamp_in_ms
|
54
|
+
}
|
39
55
|
end
|
40
|
-
|
41
|
-
EXPECTED_KEYS = members.map(&:to_s)
|
42
56
|
end
|
43
|
-
|
44
|
-
# Steep weirdly expects them here...
|
45
|
-
# @dynamic initialize, config, datastore_core, schema_artifacts, datastore_router
|
46
|
-
# @dynamic record_preparer, processor, operation_factory
|
47
57
|
end
|
48
58
|
end
|
@@ -11,7 +11,7 @@ require "elastic_graph/indexer/event_id"
|
|
11
11
|
require "elastic_graph/indexer/failed_event_error"
|
12
12
|
require "elastic_graph/indexer/operation/update"
|
13
13
|
require "elastic_graph/indexer/record_preparer"
|
14
|
-
require "elastic_graph/json_schema/validator_factory"
|
14
|
+
require "elastic_graph/support/json_schema/validator_factory"
|
15
15
|
require "elastic_graph/support/memoizable_data"
|
16
16
|
|
17
17
|
module ElasticGraph
|
@@ -70,7 +70,7 @@ module ElasticGraph
|
|
70
70
|
# behavior is in the event of a tie (highly unlikely, there shouldn't be a gap in available json schema versions), the higher version
|
71
71
|
# should be selected. So to get that behavior, the list is sorted in descending order.
|
72
72
|
#
|
73
|
-
selected_json_schema_version = available_json_schema_versions.sort.reverse.min_by { |
|
73
|
+
selected_json_schema_version = available_json_schema_versions.sort.reverse.min_by { |version| (requested_json_schema_version - version).abs }
|
74
74
|
|
75
75
|
if selected_json_schema_version != requested_json_schema_version
|
76
76
|
logger.info({
|
@@ -95,13 +95,13 @@ module ElasticGraph
|
|
95
95
|
end
|
96
96
|
|
97
97
|
def validator(type, selected_json_schema_version)
|
98
|
-
factory = validator_factories_by_version[selected_json_schema_version] # : JSONSchema::ValidatorFactory
|
98
|
+
factory = validator_factories_by_version[selected_json_schema_version] # : Support::JSONSchema::ValidatorFactory
|
99
99
|
factory.validator_for(type)
|
100
100
|
end
|
101
101
|
|
102
102
|
def validator_factories_by_version
|
103
103
|
@validator_factories_by_version ||= ::Hash.new do |hash, json_schema_version|
|
104
|
-
factory = JSONSchema::ValidatorFactory.new(
|
104
|
+
factory = Support::JSONSchema::ValidatorFactory.new(
|
105
105
|
schema: schema_artifacts.json_schemas_for(json_schema_version),
|
106
106
|
sanitize_pii: true
|
107
107
|
)
|
@@ -21,7 +21,7 @@ module ElasticGraph
|
|
21
21
|
# `from_yaml_file(file_name, &block)` is also available (via `Support::FromYamlFile`).
|
22
22
|
def self.from_parsed_yaml(parsed_yaml, &datastore_client_customization_block)
|
23
23
|
new(
|
24
|
-
config: Indexer::Config.from_parsed_yaml(parsed_yaml),
|
24
|
+
config: Indexer::Config.from_parsed_yaml(parsed_yaml) || Indexer::Config.new,
|
25
25
|
datastore_core: DatastoreCore.from_parsed_yaml(parsed_yaml, &datastore_client_customization_block)
|
26
26
|
)
|
27
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elasticgraph-indexer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Myron Marston
|
@@ -17,56 +17,42 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - '='
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 1.0.
|
20
|
+
version: 1.0.2
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - '='
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 1.0.
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: elasticgraph-json_schema
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - '='
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: 1.0.0
|
35
|
-
type: :runtime
|
36
|
-
prerelease: false
|
37
|
-
version_requirements: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - '='
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: 1.0.0
|
27
|
+
version: 1.0.2
|
42
28
|
- !ruby/object:Gem::Dependency
|
43
29
|
name: elasticgraph-schema_artifacts
|
44
30
|
requirement: !ruby/object:Gem::Requirement
|
45
31
|
requirements:
|
46
32
|
- - '='
|
47
33
|
- !ruby/object:Gem::Version
|
48
|
-
version: 1.0.
|
34
|
+
version: 1.0.2
|
49
35
|
type: :runtime
|
50
36
|
prerelease: false
|
51
37
|
version_requirements: !ruby/object:Gem::Requirement
|
52
38
|
requirements:
|
53
39
|
- - '='
|
54
40
|
- !ruby/object:Gem::Version
|
55
|
-
version: 1.0.
|
41
|
+
version: 1.0.2
|
56
42
|
- !ruby/object:Gem::Dependency
|
57
43
|
name: elasticgraph-support
|
58
44
|
requirement: !ruby/object:Gem::Requirement
|
59
45
|
requirements:
|
60
46
|
- - '='
|
61
47
|
- !ruby/object:Gem::Version
|
62
|
-
version: 1.0.
|
48
|
+
version: 1.0.2
|
63
49
|
type: :runtime
|
64
50
|
prerelease: false
|
65
51
|
version_requirements: !ruby/object:Gem::Requirement
|
66
52
|
requirements:
|
67
53
|
- - '='
|
68
54
|
- !ruby/object:Gem::Version
|
69
|
-
version: 1.0.
|
55
|
+
version: 1.0.2
|
70
56
|
- !ruby/object:Gem::Dependency
|
71
57
|
name: hashdiff
|
72
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -74,6 +60,9 @@ dependencies:
|
|
74
60
|
- - "~>"
|
75
61
|
- !ruby/object:Gem::Version
|
76
62
|
version: '1.2'
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 1.2.1
|
77
66
|
type: :runtime
|
78
67
|
prerelease: false
|
79
68
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -81,62 +70,65 @@ dependencies:
|
|
81
70
|
- - "~>"
|
82
71
|
- !ruby/object:Gem::Version
|
83
72
|
version: '1.2'
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.2.1
|
84
76
|
- !ruby/object:Gem::Dependency
|
85
77
|
name: elasticgraph-admin
|
86
78
|
requirement: !ruby/object:Gem::Requirement
|
87
79
|
requirements:
|
88
80
|
- - '='
|
89
81
|
- !ruby/object:Gem::Version
|
90
|
-
version: 1.0.
|
82
|
+
version: 1.0.2
|
91
83
|
type: :development
|
92
84
|
prerelease: false
|
93
85
|
version_requirements: !ruby/object:Gem::Requirement
|
94
86
|
requirements:
|
95
87
|
- - '='
|
96
88
|
- !ruby/object:Gem::Version
|
97
|
-
version: 1.0.
|
89
|
+
version: 1.0.2
|
98
90
|
- !ruby/object:Gem::Dependency
|
99
91
|
name: elasticgraph-elasticsearch
|
100
92
|
requirement: !ruby/object:Gem::Requirement
|
101
93
|
requirements:
|
102
94
|
- - '='
|
103
95
|
- !ruby/object:Gem::Version
|
104
|
-
version: 1.0.
|
96
|
+
version: 1.0.2
|
105
97
|
type: :development
|
106
98
|
prerelease: false
|
107
99
|
version_requirements: !ruby/object:Gem::Requirement
|
108
100
|
requirements:
|
109
101
|
- - '='
|
110
102
|
- !ruby/object:Gem::Version
|
111
|
-
version: 1.0.
|
103
|
+
version: 1.0.2
|
112
104
|
- !ruby/object:Gem::Dependency
|
113
105
|
name: elasticgraph-opensearch
|
114
106
|
requirement: !ruby/object:Gem::Requirement
|
115
107
|
requirements:
|
116
108
|
- - '='
|
117
109
|
- !ruby/object:Gem::Version
|
118
|
-
version: 1.0.
|
110
|
+
version: 1.0.2
|
119
111
|
type: :development
|
120
112
|
prerelease: false
|
121
113
|
version_requirements: !ruby/object:Gem::Requirement
|
122
114
|
requirements:
|
123
115
|
- - '='
|
124
116
|
- !ruby/object:Gem::Version
|
125
|
-
version: 1.0.
|
117
|
+
version: 1.0.2
|
126
118
|
- !ruby/object:Gem::Dependency
|
127
119
|
name: elasticgraph-schema_definition
|
128
120
|
requirement: !ruby/object:Gem::Requirement
|
129
121
|
requirements:
|
130
122
|
- - '='
|
131
123
|
- !ruby/object:Gem::Version
|
132
|
-
version: 1.0.
|
124
|
+
version: 1.0.2
|
133
125
|
type: :development
|
134
126
|
prerelease: false
|
135
127
|
version_requirements: !ruby/object:Gem::Requirement
|
136
128
|
requirements:
|
137
129
|
- - '='
|
138
130
|
- !ruby/object:Gem::Version
|
139
|
-
version: 1.0.
|
131
|
+
version: 1.0.2
|
140
132
|
email:
|
141
133
|
- myron@squareup.com
|
142
134
|
executables: []
|
@@ -168,10 +160,10 @@ licenses:
|
|
168
160
|
- MIT
|
169
161
|
metadata:
|
170
162
|
bug_tracker_uri: https://github.com/block/elasticgraph/issues
|
171
|
-
changelog_uri: https://github.com/block/elasticgraph/releases/tag/v1.0.
|
172
|
-
documentation_uri: https://block.github.io/elasticgraph/api-docs/v1.0.
|
163
|
+
changelog_uri: https://github.com/block/elasticgraph/releases/tag/v1.0.2
|
164
|
+
documentation_uri: https://block.github.io/elasticgraph/api-docs/v1.0.2/
|
173
165
|
homepage_uri: https://block.github.io/elasticgraph/
|
174
|
-
source_code_uri: https://github.com/block/elasticgraph/tree/v1.0.
|
166
|
+
source_code_uri: https://github.com/block/elasticgraph/tree/v1.0.2/elasticgraph-indexer
|
175
167
|
gem_category: core
|
176
168
|
rdoc_options: []
|
177
169
|
require_paths:
|