You are here

public function ElasticsearchController::getInfo in Elasticsearch Connector 8.6

Same name and namespace in other branches
  1. 8.7 src/Controller/ElasticsearchController.php \Drupal\elasticsearch_connector\Controller\ElasticsearchController::getInfo()
  2. 8 src/Controller/ElasticsearchController.php \Drupal\elasticsearch_connector\Controller\ElasticsearchController::getInfo()
  3. 8.2 src/Controller/ElasticsearchController.php \Drupal\elasticsearch_connector\Controller\ElasticsearchController::getInfo()
  4. 8.5 src/Controller/ElasticsearchController.php \Drupal\elasticsearch_connector\Controller\ElasticsearchController::getInfo()

Complete information about the Elasticsearch Client.

Parameters

\Drupal\elasticsearch_connector\Entity\Cluster $elasticsearch_cluster: Elasticsearch cluster.

Return value

array Render array.

File

src/Controller/ElasticsearchController.php, line 92

Class

ElasticsearchController
Provides route responses for elasticsearch clusters.

Namespace

Drupal\elasticsearch_connector\Controller

Code

public function getInfo(Cluster $elasticsearch_cluster) {

  // TODO: Get the statistics differently.
  $client_connector = $this->clientManager
    ->getClientForCluster($elasticsearch_cluster);
  $node_rows = [];
  $cluster_statistics_rows = [];
  $cluster_health_rows = [];
  if ($client_connector
    ->isClusterOk()) {

    // Nodes.
    $es_node_namespace = $client_connector
      ->getNodesProperties();
    $node_stats = $es_node_namespace['stats'];
    $total_docs = 0;
    $total_size = 0;
    $node_rows = [];
    if (!empty($node_stats['nodes'])) {

      // TODO: Better format the results in order to build the
      // correct output.
      foreach ($node_stats['nodes'] as $node_id => $node_properties) {
        $row = [];
        $row[] = [
          'data' => $node_properties['name'],
        ];
        $row[] = [
          'data' => $node_properties['indices']['docs']['count'],
        ];
        $row[] = [
          'data' => format_size($node_properties['indices']['store']['size_in_bytes']),
        ];
        $total_docs += $node_properties['indices']['docs']['count'];
        $total_size += $node_properties['indices']['store']['size_in_bytes'];
        $node_rows[] = $row;
      }
    }
    $cluster_status = $client_connector
      ->getClusterInfo();
    $cluster_statistics_rows = [
      [
        [
          'data' => $cluster_status['health']['number_of_nodes'] . ' ' . t('Nodes'),
        ],
        [
          'data' => $cluster_status['health']['active_shards'] + $cluster_status['health']['unassigned_shards'] . ' ' . t('Total Shards'),
        ],
        [
          'data' => $cluster_status['health']['active_shards'] . ' ' . t('Successful Shards'),
        ],
        [
          'data' => count($cluster_status['state']['metadata']['indices']) . ' ' . t('Indices'),
        ],
        [
          'data' => $total_docs . ' ' . t('Total Documents'),
        ],
        [
          'data' => format_size($total_size) . ' ' . t('Total Size'),
        ],
      ],
    ];
    $cluster_health_rows = [];
    $cluster_health_mapping = [
      'cluster_name' => t('Cluster name'),
      'status' => t('Status'),
      'timed_out' => t('Time out'),
      'number_of_nodes' => t('Number of nodes'),
      'number_of_data_nodes' => t('Number of data nodes'),
      'active_primary_shards' => t('Active primary shards'),
      'active_shards' => t('Active shards'),
      'relocating_shards' => t('Relocating shards'),
      'initializing_shards' => t('Initializing shards'),
      'unassigned_shards' => t('Unassigned shards'),
      'delayed_unassigned_shards' => t('Delayed unassigned shards'),
      'number_of_pending_tasks' => t('Number of pending tasks'),
      'number_of_in_flight_fetch' => t('Number of in-flight fetch'),
      'task_max_waiting_in_queue_millis' => t('Task max waiting in queue millis'),
      'active_shards_percent_as_number' => t('Active shards percent as number'),
    ];
    foreach ($cluster_status['health'] as $health_key => $health_value) {
      $row = [];
      $row[] = [
        'data' => $cluster_health_mapping[$health_key],
      ];
      $row[] = [
        'data' => $health_value === FALSE ? 'False' : $health_value,
      ];
      $cluster_health_rows[] = $row;
    }
  }
  $output['cluster_statistics_wrapper'] = [
    '#type' => 'fieldset',
    '#title' => t('Cluster statistics'),
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
    '#attributes' => [],
  ];
  $output['cluster_statistics_wrapper']['nodes'] = [
    '#theme' => 'table',
    '#header' => [
      [
        'data' => t('Node name'),
      ],
      [
        'data' => t('Documents'),
      ],
      [
        'data' => t('Size'),
      ],
    ],
    '#rows' => $node_rows,
    '#attributes' => [],
  ];
  $output['cluster_statistics_wrapper']['cluster_statistics'] = [
    '#theme' => 'table',
    '#header' => [
      [
        'data' => t('Total'),
        'colspan' => 6,
      ],
    ],
    '#rows' => $cluster_statistics_rows,
    '#attributes' => [
      'class' => [
        'admin-elasticsearch-statistics',
      ],
    ],
  ];
  $output['cluster_health'] = [
    '#theme' => 'table',
    '#header' => [
      [
        'data' => t('Cluster Health'),
        'colspan' => 2,
      ],
    ],
    '#rows' => $cluster_health_rows,
    '#attributes' => [
      'class' => [
        'admin-elasticsearch-health',
      ],
    ],
  ];
  return $output;
}