Commit 6022cb6b authored by Ryo Yamashita's avatar Ryo Yamashita Committed by Yas Naoi
Browse files

Issue #3267693 by Ryo Yamashita, yas: Add a REST API to count VMware entities

parent 461972d5
Loading
Loading
Loading
Loading
+44 −2
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
namespace Drupal\vmware\Controller;

use Drupal\cloud\Traits\CloudContentEntityTrait;
use Drupal\cloud\Traits\CloudResourceTrait;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Database\Connection;
use Drupal\Core\Entity\EntityTypeManagerInterface;
@@ -10,10 +11,12 @@ use Drupal\cloud\Service\CloudServiceInterface;
use Drupal\Core\Link;
use Drupal\Core\Messenger\Messenger;
use Drupal\Core\Render\RendererInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Url;
use Drupal\vmware\Service\VmwareServiceException;
use Drupal\vmware\Service\VmwareServiceInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\RequestStack;

@@ -26,6 +29,7 @@ use Symfony\Component\HttpFoundation\RequestStack;
class ApiController extends ControllerBase implements ApiControllerInterface {

  use CloudContentEntityTrait;
  use CloudResourceTrait;

  /**
   * Drupal\Core\Entity\EntityTypeManagerInterface definition.
@@ -76,6 +80,20 @@ class ApiController extends ControllerBase implements ApiControllerInterface {
   */
  protected $cloudService;

  /**
   * The configuration data.
   *
   * @var array
   */
  protected $configuration;

  /**
   * The current user.
   *
   * @var \Drupal\Core\Session\AccountInterface
   */
  protected $currentUser;

  /**
   * ApiController constructor.
   *
@@ -93,6 +111,8 @@ class ApiController extends ControllerBase implements ApiControllerInterface {
   *   The database service.
   * @param \Drupal\cloud\Service\CloudServiceInterface $cloud_service
   *   Cloud service.
   * @param \Drupal\Core\Session\AccountInterface $current_user
   *   The current user.
   */
  public function __construct(
    EntityTypeManagerInterface $entity_type_manager,
@@ -101,7 +121,8 @@ class ApiController extends ControllerBase implements ApiControllerInterface {
    RequestStack $request_stack,
    RendererInterface $renderer,
    Connection $database,
    CloudServiceInterface $cloud_service
    CloudServiceInterface $cloud_service,
    AccountInterface $current_user
  ) {
    $this->entityTypeManager = $entity_type_manager;
    $this->vmwareService = $vmware_service;
@@ -110,6 +131,8 @@ class ApiController extends ControllerBase implements ApiControllerInterface {
    $this->renderer = $renderer;
    $this->database = $database;
    $this->cloudService = $cloud_service;
    $this->currentUser = $current_user;
    $this->configuration = ['cloud_context' => ''];
  }

  /**
@@ -129,7 +152,8 @@ class ApiController extends ControllerBase implements ApiControllerInterface {
      $container->get('request_stack'),
      $container->get('renderer'),
      $container->get('database'),
      $container->get('cloud')
      $container->get('cloud'),
      $container->get('current_user')
    );
  }

@@ -281,4 +305,22 @@ class ApiController extends ControllerBase implements ApiControllerInterface {
    }
  }

  /**
   * {@inheritdoc}
   */
  public function getEntityCount(string $cloud_context, string $entity_type_id): JsonResponse {
    $params = !empty($cloud_context)
      ? ['cloud_context' => $cloud_context] : [];
    if (!empty($cloud_context)) {
      $this->configuration['cloud_context'] = $cloud_context;
    }
    $count = $this->getResourceCount(
      $entity_type_id,
      "list {$this->convertUnderscoreToWhitespace($entity_type_id)}",
      $params
    );

    return new JsonResponse(['count' => $count]);
  }

}
+14 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

namespace Drupal\vmware\Controller;

use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;

/**
@@ -47,4 +48,17 @@ interface ApiControllerInterface {
   */
  public function updateAllHostList(): RedirectResponse;

  /**
   * Get count of VMware entity.
   *
   * @param string $cloud_context
   *   Cloud context string.
   * @param string $entity_type_id
   *   The entity type ID.
   *
   * @return \Symfony\Component\HttpFoundation\JsonResponse
   *   The JSON response.
   */
  public function getEntityCount(string $cloud_context, string $entity_type_id): JsonResponse;

}
+21 −0
Original line number Diff line number Diff line
@@ -123,3 +123,24 @@ entity.vmware_host.list_update.all:
    _controller: '\Drupal\vmware\Controller\ApiController::updateAllHostList'
  requirements:
    _permission: 'view any vmware host+view own vmware host+view all cloud service providers'

entity.vmware_entity.count:
  path: '/cloud_dashboard/vmware/{cloud_context}/{entity_type_id}/entity/count'
  defaults:
    _controller: '\Drupal\vmware\Controller\ApiController::getEntityCount'
  methods: [GET]
  requirements:
    _custom_access: '\Drupal\cloud\Controller\CloudConfigController::access'
  options:
    perm: 'list {entity_type_id}'

entity.vmware_entity.count_all:
  path: '/cloud_dashboard/vmware/{entity_type_id}/entity/count'
  defaults:
    _controller: '\Drupal\vmware\Controller\ApiController::getEntityCount'
    cloud_context: ''
  methods: [GET]
  requirements:
    _custom_access: '\Drupal\cloud\Controller\CloudConfigController::access'
  options:
    perm: 'list {entity_type_id}'