Class: GitLab::Exporter::Database::ZoektCollector

Inherits:
Base
  • Object
show all
Defined in:
lib/gitlab_exporter/database/zoekt.rb

Overview

A helper class to collect zoekt metrics.

Constant Summary collapse

ZOEKT_TASKS_PROCESSING_QUERY =

Query to get processing zoekt_tasks distribution by zoekt_node_id

<<~SQL.freeze
  WITH task_counts AS (
    SELECT
      zoekt_node_id,
      COUNT(*) AS count
    FROM
      zoekt_tasks
    WHERE
      perform_at <= $1
      AND state IN (0, 1)
    GROUP BY
      zoekt_node_id
  )
  SELECT
    n.id AS node_id,
    n.metadata ->> 'name' AS node_name,
    COALESCE(tc.count, 0) AS task_count
  FROM
    zoekt_nodes n
  LEFT JOIN
    task_counts tc ON n.id = tc.zoekt_node_id
SQL
ZOEKT_NODES_QUERY =
<<~SQL.freeze
  SELECT schema_version, id, metadata ->> 'name' AS node_name FROM zoekt_nodes
SQL
ZOEKT_NODES_STATUS_QUERY =
<<~SQL.freeze
  SELECT id, metadata ->> 'name' AS node_name,
    CASE
      WHEN last_seen_at < NOW() - INTERVAL '2 minute' THEN 0
      ELSE 1
    END AS status
  FROM zoekt_nodes;
SQL
ZOEKT_REPOSITORY_SCHEMA_VERSION_QUERY =
<<~SQL.freeze
  SELECT
    COUNT(*)
  FROM
    zoekt_repositories
  INNER JOIN
    zoekt_indices
    ON zoekt_repositories.zoekt_index_id = zoekt_indices.id
  WHERE
    zoekt_indices.zoekt_node_id = $1
    AND zoekt_repositories.schema_version < $2
    AND zoekt_repositories.state = 10;
SQL
ZOEKT_ENABLED_QUERY =
<<~SQL.freeze
  SELECT
    zoekt_settings ->> 'zoekt_indexing_enabled' AS zoekt_indexing_enabled
  FROM application_settings
  ORDER BY ID DESC
  LIMIT 1
SQL
ZOEKT_NODE_STORAGE_QUERY =
<<~SQL.freeze
  SELECT
    id,
    metadata ->> 'name' AS node_name,
    unclaimed_storage_bytes,
    storage_percent_used
  FROM zoekt_nodes
SQL
ZOEKT_REPOSITORIES_STATE_QUERY =
<<~SQL.freeze
  SELECT state, COUNT(*) FROM zoekt_repositories GROUP BY state
SQL
ZOEKT_INDICES_STATE_QUERY =
<<~SQL.freeze
  SELECT state, COUNT(*) FROM zoekt_indices GROUP BY state
SQL
ZOEKT_INDICES_WATERMARK_QUERY =
<<~SQL.freeze
  SELECT watermark_level, COUNT(*) FROM zoekt_indices GROUP BY watermark_level
SQL
ZOEKT_INDICES_STORAGE_QUERY =
<<~SQL.freeze
  SELECT
    zoekt_indices.id,
    zoekt_indices.reserved_storage_bytes,
    zoekt_indices.used_storage_bytes,
    zoekt_nodes.metadata ->> 'name' AS node_name
  FROM
    zoekt_indices
  INNER JOIN
    zoekt_nodes ON zoekt_indices.zoekt_node_id = zoekt_nodes.id
SQL

Constants inherited from Base

Base::POOL_SIZE, Base::POOL_TIMEOUT

Instance Method Summary collapse

Methods inherited from Base

configure_type_map_for_results, connection_pool, #connection_pool, #initialize, #with_connection_pool

Constructor Details

This class inherits a constructor from GitLab::Exporter::Database::Base

Instance Method Details

#runObject



98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/gitlab_exporter/database/zoekt.rb', line 98

def run
  return {} unless zoekt_indexing_enabled?

  {
    task_processing_query_result: execute(ZOEKT_TASKS_PROCESSING_QUERY, [Time.now.utc]),
    repositories_schema_version_query_result: repositories_schema_version_query_result,
    zoekt_nodes_status_query_result: execute(ZOEKT_NODES_STATUS_QUERY),
    node_storage_query_result: execute(ZOEKT_NODE_STORAGE_QUERY),
    repositories_state_query_result: execute(ZOEKT_REPOSITORIES_STATE_QUERY),
    indices_state_query_result: execute(ZOEKT_INDICES_STATE_QUERY),
    indices_watermark_query_result: execute(ZOEKT_INDICES_WATERMARK_QUERY),
    indices_storage_query_result: execute(ZOEKT_INDICES_STORAGE_QUERY)
  }.compact
end