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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/vkit/cli/commands/scan_command.rb', line 9
def call(datasource_name, mode: "diff_only")
with_auth do
user = credential_store.user
org = user["organization_slug"]
puts "๐ Scanning #{datasource_name}..."
puts
response = authenticated_client.post(
"/api/v1/orgs/#{org}/datasources/#{datasource_name}/scan",
body: { datasource: datasource_name, mode: mode }
)
diff = response["diff"] || {}
datasets = diff["datasets"] || []
changed = datasets.select { |d| d["changes"].values.any?(&:any?) }
clean = datasets.reject { |d| d["changes"].values.any?(&:any?) }
if changed.empty?
datasets.each { |d| puts " #{d["name"].ljust(24)} โ" }
puts
puts " No changes detected"
else
changed.each do |dataset|
added = dataset.dig("changes", "added_fields") || []
removed = dataset.dig("changes", "removed_fields") || []
modified = dataset.dig("changes", "changed_fields") || []
puts " #{dataset["name"]}"
added.each do |f|
name = f.is_a?(Hash) ? f["name"] : f
type = f.is_a?(Hash) && f["type"] ? " (#{f["type"]})" : ""
puts " + #{name}#{type} โ ๏ธ unclassified"
end
removed.each do |f|
name = f.is_a?(Hash) ? f["name"] : f
puts " - #{name}"
end
modified.each do |f|
name = f.is_a?(Hash) ? f["name"] : f
puts " ~ #{name}"
end
puts
end
clean.each { |d| puts " #{d["name"].ljust(24)} โ" }
puts
puts " #{changed.size} changed ยท run with --apply to update baseline"
end
puts
puts " โ
Applied" if response["applied"]
end
end
|