public VispanaRoot vespaState()

in src/main/java/com/vispana/vespa/state/VespaStateClient.java [17:67]


  public VispanaRoot vespaState(String configHost) {

    try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
      // fetch prerequisites concurrently and block until tasks are done
      var vespaVersionFork = scope.fork(() -> VespaVersionFetcher.fetch(configHost));
      var vespaMetricsFork = scope.fork(() -> MetricsFetcher.fetchMetrics(configHost));
      var appUrlFork = scope.fork(() -> ApplicationUrlFetcher.fetch(configHost));
      scope
          .join()
          .throwIfFailed(
              throwable ->
                  new RuntimeException("Failed to get prerequisites from Vespa", throwable));
      var vespaMetrics = vespaMetricsFork.get();
      var vespaVersion = vespaVersionFork.get();
      var appUrl = appUrlFork.get();

      var appPackageScope = scope.fork(() -> AppPackageAssembler.assemble(appUrl));
      var configFork = scope.fork(() -> ConfigNodesAssembler.assemble(configHost, vespaMetrics));
      scope
          .join()
          .throwIfFailed(
              throwable -> new RuntimeException("Failed to get data from Vespa", throwable));
      var appPackage = appPackageScope.get();
      var configNodes = configFork.get();

      // fetch and build Vispana components concurrently and block until tasks are done
      var containerFork = scope.fork(() -> ContainerAssembler.assemble(configHost, vespaMetrics));
      var contentFork =
          scope.fork(
              () ->
                  ContentAssembler.assemble(
                      configHost,
                      vespaVersion,
                      vespaMetrics,
                      appUrl,
                      appPackage,
                      configNodes.clusters().getFirst().nodes().getFirst().host().hostname()));
      scope
          .join()
          .throwIfFailed(
              throwable -> new RuntimeException("Failed to get data from Vespa", throwable));
      var containerNodes = containerFork.get();
      var contentNodes = contentFork.get();

      return new VispanaRoot(configNodes, containerNodes, contentNodes, appPackage, vespaVersion);
    } catch (Throwable t) {
      // Since this application is not meant to be exposed outside a perimeter, jut throw
      // the exception to ease debugging
      throw new RuntimeException(t);
    }
  }