Class: Archsight::Import::Handlers::RestApiIndex

Inherits:
Archsight::Import::Handler show all
Defined in:
lib/archsight/import/handlers/rest_api_index.rb

Overview

REST API Index handler - fetches API index and generates child Import resources

Configuration:

import/config/indexUrl - URL to fetch API index JSON (required)
import/config/baseUrl - Base URL for spec files (optional, derived from indexUrl)
import/config/interfaceOutputPath - Shared output for ApplicationInterface resources
import/config/dataObjectOutputPath - Shared output for DataObject resources
import/config/skipVisibility - Comma-separated visibilities to skip (e.g., "public-preview")
import/config/childCacheTime - Cache time for generated child imports (e.g., "1h", "30m")

Output:

Generates Import:RestApi:* resources for each API in the index

Expected index format (object with “pages” array):

{
  "pages": [
    {
      "name": "compute",
      "version": "v1",
      "visibility": "public",
      "spec": "/rest-api/public-compute-v1.yaml",
      "redoc": "/rest-api/docs/compute/v1/",
      "gate": "General-Availability"
    },
    ...
  ]
}

Instance Attribute Summary

Attributes inherited from Archsight::Import::Handler

#database, #import_resource, #progress, #resources_dir, #shared_writer

Instance Method Summary collapse

Methods inherited from Archsight::Import::Handler

#compute_config_hash, #config, #config_all, #import_yaml, #initialize, #resource_yaml, #resources_to_yaml, #self_marker, #write_generates_meta, #write_yaml

Constructor Details

This class inherits a constructor from Archsight::Import::Handler

Instance Method Details

#executeObject



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
68
# File 'lib/archsight/import/handlers/rest_api_index.rb', line 39

def execute
  @index_url = config("indexUrl")
  raise "Missing required config: indexUrl" unless @index_url

  @base_url = config("baseUrl") || derive_base_url(@index_url)
  @interface_output_path = config("interfaceOutputPath")
  @data_object_output_path = config("dataObjectOutputPath")
  @skip_visibilities = (config("skipVisibility") || "").split(",").map(&:strip).reject(&:empty?)
  @child_cache_time = config("childCacheTime")

  # Fetch API index
  progress.update("Fetching API index from #{@index_url}")
  apis = fetch_index

  if apis.empty?
    progress.warn("No APIs found in index")
    return
  end

  # Filter APIs by visibility
  original_count = apis.size
  apis = filter_apis(apis)
  progress.update("Filtered to #{apis.size} APIs (skipped #{original_count - apis.size} by visibility)") if apis.size < original_count

  # Generate child imports
  progress.update("Generating #{apis.size} import resources")
  generate_api_imports(apis)

  write_generates_meta
end