Class: Kennel::Syncer

Inherits:
Object
  • Object
show all
Defined in:
lib/kennel/syncer.rb

Constant Summary collapse

DELETE_ORDER =

dashboards references monitors + slos, slos reference monitors

["dashboard", "slo", "monitor", "synthetics/tests"].freeze
LINE_UP =

go up and clear

"\e[1A\033[K"

Instance Method Summary collapse

Constructor Details

#initialize(api, expected, project_filter: nil) ⇒ Syncer

Returns a new instance of Syncer.



7
8
9
10
11
12
13
14
# File 'lib/kennel/syncer.rb', line 7

def initialize(api, expected, project_filter: nil)
  @api = api
  @project_filter = project_filter
  @expected = Set.new expected # need set to speed up deletion
  calculate_diff
  validate_plan
  prevent_irreversible_partial_updates
end

Instance Method Details

#confirmObject



28
29
30
31
32
# File 'lib/kennel/syncer.rb', line 28

def confirm
  return false if noop?
  return true if ENV["CI"] || !STDIN.tty?
  Utils.ask("Execute Plan ?")
end

#planObject



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/kennel/syncer.rb', line 16

def plan
  Kennel.out.puts "Plan:"
  if noop?
    Kennel.out.puts Utils.color(:green, "Nothing to do")
  else
    @warnings.each { |message| Kennel.out.puts Utils.color(:yellow, "Warning: #{message}") }
    print_plan "Create", @create, :green
    print_plan "Update", @update, :yellow
    print_plan "Delete", @delete, :red
  end
end

#updateObject



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
# File 'lib/kennel/syncer.rb', line 34

def update
  each_resolved @create do |_, e|
    message = "#{e.class.api_resource} #{e.tracking_id}"
    Kennel.out.puts "Creating #{message}"
    reply = @api.create e.class.api_resource, e.as_json
     reply, e.class
    id = reply.fetch(:id)
    populate_id_map [], [reply] # allow resolving ids we could previously no resolve
    Kennel.out.puts "#{LINE_UP}Created #{message} #{e.class.url(id)}"
  end

  each_resolved @update do |id, e|
    message = "#{e.class.api_resource} #{e.tracking_id} #{e.class.url(id)}"
    Kennel.out.puts "Updating #{message}"
    @api.update e.class.api_resource, id, e.as_json
    Kennel.out.puts "#{LINE_UP}Updated #{message}"
  end

  @delete.each do |id, _, a|
    klass = a.fetch(:klass)
    message = "#{klass.api_resource} #{a.fetch(:tracking_id)} #{id}"
    Kennel.out.puts "Deleting #{message}"
    @api.delete klass.api_resource, id
    Kennel.out.puts "#{LINE_UP}Deleted #{message}"
  end
end