Class: Pvectl::Commands::Logs::Handlers::TaskLogs

Inherits:
Object
  • Object
show all
Includes:
ResourceHandler
Defined in:
lib/pvectl/commands/logs/handlers/task_logs.rb,
sig/pvectl/commands/logs/handlers/task_logs.rbs

Overview

Handler for VM/CT task history logs.

Resolves VM/CT node via repository, then delegates task listing to Services::TaskListing. With --all-nodes, passes node: nil to the service for cluster-wide iteration.

Examples:

Using via registry

handler = Logs::ResourceRegistry.for("vm")
entries = handler.list(vmid: 100, resource_type: "vm")

See Also:

Constant Summary collapse

RESOURCE_REPOS =

Maps resource type aliases to repository classes.

Returns:

{
  "vm" => -> { Pvectl::Repositories::Vm },
  "vms" => -> { Pvectl::Repositories::Vm },
  "ct" => -> { Pvectl::Repositories::Container },
  "container" => -> { Pvectl::Repositories::Container },
  "containers" => -> { Pvectl::Repositories::Container },
  "cts" => -> { Pvectl::Repositories::Container }
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(task_list_repository: nil, vm_repository: nil, node_repository: nil) ⇒ TaskLogs

Returns a new instance of TaskLogs.

Parameters:

  • (defaults to: nil)
  • (defaults to: nil)
  • (defaults to: nil)


33
34
35
36
37
# File 'lib/pvectl/commands/logs/handlers/task_logs.rb', line 33

def initialize(task_list_repository: nil, vm_repository: nil, node_repository: nil)
  @task_list_repository = task_list_repository
  @vm_repository = vm_repository
  @node_repository = node_repository
end

Instance Method Details

#build_connectionConnection

Returns:



101
102
103
104
105
# File 'lib/pvectl/commands/logs/handlers/task_logs.rb', line 101

def build_connection
  config_service = Pvectl::Config::Service.new
  config_service.load
  Pvectl::Connection.new(config_service.current_config)
end

#build_resource_repository(resource_type) ⇒ Object

Parameters:

Returns:



74
75
76
77
78
# File 'lib/pvectl/commands/logs/handlers/task_logs.rb', line 74

def build_resource_repository(resource_type)
  repo_class = RESOURCE_REPOS.fetch(resource_type, -> { Pvectl::Repositories::Vm }).call
  connection = build_connection
  repo_class.new(connection)
end

#list(vmid:, resource_type: "vm", all_nodes: false, limit: 50, since: nil, until_time: nil, type_filter: nil, status_filter: nil, **_) ⇒ Array[Models::TaskEntry]

Parameters:

  • (defaults to: "vm")
  • (defaults to: false)
  • (defaults to: 50)
  • (defaults to: nil)
  • (defaults to: nil)
  • (defaults to: nil)
  • (defaults to: nil)

Returns:



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/pvectl/commands/logs/handlers/task_logs.rb', line 39

def list(vmid:, resource_type: "vm", all_nodes: false, limit: 50,
         since: nil, until_time: nil, type_filter: nil, status_filter: nil, **_)
  if all_nodes
    service.list(
      vmid: vmid, limit: limit, since: since,
      until_time: until_time, type_filter: type_filter,
      status_filter: status_filter
    )
  else
    node = resolve_node(vmid, resource_type)
    service.list(
      node: node, vmid: vmid, limit: limit, since: since,
      until_time: until_time, type_filter: type_filter,
      status_filter: status_filter
    )
  end
end

#node_repositoryRepositories::Node

Returns:



94
95
96
97
98
99
# File 'lib/pvectl/commands/logs/handlers/task_logs.rb', line 94

def node_repository
  @node_repository ||= begin
    connection = build_connection
    Repositories::Node.new(connection)
  end
end

#presenterPresenters::TaskEntry

Returns:



57
58
59
# File 'lib/pvectl/commands/logs/handlers/task_logs.rb', line 57

def presenter
  Presenters::TaskEntry.new
end

#resolve_node(vmid, resource_type) ⇒ String

Parameters:

Returns:

Raises:



63
64
65
66
67
68
# File 'lib/pvectl/commands/logs/handlers/task_logs.rb', line 63

def resolve_node(vmid, resource_type)
  resource = resource_repository(resource_type).get(vmid)
  raise ResourceNotFoundError, "Resource not found: #{vmid}" unless resource

  resource.node
end

#resource_repository(resource_type) ⇒ Object

Parameters:

Returns:



70
71
72
# File 'lib/pvectl/commands/logs/handlers/task_logs.rb', line 70

def resource_repository(resource_type)
  @vm_repository || build_resource_repository(resource_type)
end

#serviceServices::TaskListing

Returns:



80
81
82
83
84
85
# File 'lib/pvectl/commands/logs/handlers/task_logs.rb', line 80

def service
  @service ||= Pvectl::Services::TaskListing.new(
    task_list_repository: task_list_repository,
    node_repository: node_repository
  )
end

#task_list_repositoryRepositories::TaskList

Returns:



87
88
89
90
91
92
# File 'lib/pvectl/commands/logs/handlers/task_logs.rb', line 87

def task_list_repository
  @task_list_repository ||= begin
    connection = build_connection
    Repositories::TaskList.new(connection)
  end
end