9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/necropsy/analyzers/dynamic/observation_policy.rb', line 9
def metadata(payload = nil, expected_revision: nil, **keyword_payload)
payload ||= keyword_payload
observation = payload['observation']
observation = {} unless observation.is_a?(Hash)
schema_version = Integer(payload.fetch('schema_version', 1), exception: false)
raise Error, 'Dynamic observation schema version must be 1 or 2' unless [1, 2].include?(schema_version)
revision = source_revision(payload, observation)
status = source_revision_status(payload, observation, revision, expected_revision)
normalized = observation.merge(
'schema_version' => schema_version,
'positive_evidence_policy' => 'alive_only',
'source_revision_status' => status,
'source_revision_policy' => 'accepted_for_liveness_only'
)
normalized = normalized.merge('source_revision' => revision) if revision
normalized = normalized.merge('expected_source_revision' => expected_revision) if expected_revision
return normalized unless schema_version == 2
collector = payload['collector']
collector = {} unless collector.is_a?(Hash)
source = payload['source']
source = {} unless source.is_a?(Hash)
scope = payload['scope']
scope = {} unless scope.is_a?(Hash)
quality = payload['quality']
quality = {} unless quality.is_a?(Hash)
normalized.merge(
'collector_name' => collector['name'] || payload['collector_name'],
'collector_version' => collector['version'] || payload['collector_version'],
'source_metadata' => source,
'environment' => scope['environment'] || observation['environment'],
'sample_unit' => scope['sample_unit'] || observation['sample_unit'],
'sample_rate' => scope['sample_rate'] || observation['sample_rate'],
'quality' => {
'dropped_events' => quality.fetch('dropped_events', 0),
'overflowed' => quality.fetch('overflowed', false)
}
).compact
end
|