Module: DatabaseCommandCounter

Defined in:
lib/middleware/database_middleware.rb

Overview

DatabaseCommandCounter is RedisClient middleware.

This middleware counts the number of Database commands executed. It can be useful for performance monitoring and debugging, allowing you to track the volume of Database operations in your application.

rubocop:disable ThreadSafety/ClassInstanceVariable

Examples:

Enable Database command counting

DatabaseCommandCounter.reset
RedisClient.register(DatabaseCommandCounter)

See Also:

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.skip_commandsSet (readonly)

Gets the set of commands to skip counting.

Returns:

  • (Set)

    The commands that won’t be counted.



83
84
85
# File 'lib/middleware/database_middleware.rb', line 83

def skip_commands
  @skip_commands
end

Class Method Details

.countInteger

Gets the current count of Database commands executed.

Returns:

  • (Integer)

    The number of Database commands executed.



87
88
89
# File 'lib/middleware/database_middleware.rb', line 87

def count
  @count.value
end

.count_commands { ... } ⇒ Integer

Counts the number of Database commands executed within a block.

This method captures the command count before and after executing the provided block, returning the difference. This is useful for measuring how many Database commands are executed by a specific operation.

Examples:

Count commands in a block

commands_executed = DatabaseCommandCounter.count_commands do
  dbclient.set('key1', 'value1')
  dbclient.get('key1')
end
# commands_executed will be 2

Yields:

  • [] The block of code to execute while counting commands.

Returns:

  • (Integer)

    The number of Database commands executed within the block.



124
125
126
127
128
129
# File 'lib/middleware/database_middleware.rb', line 124

def count_commands
  start_count = count      # Capture the current command count before execution
  yield                    # Execute the provided block
  end_count = count        # Capture the command count after execution
  end_count - start_count  # Return the difference (commands executed in block)
end

.incrementInteger

Increments the command count. This method is thread-safe.

Returns:

  • (Integer)

    The new count after incrementing.



101
102
103
# File 'lib/middleware/database_middleware.rb', line 101

def increment
  @count.increment
end

.resetInteger

Resets the command count to zero. This method is thread-safe.

Returns:

  • (Integer)

    The reset count (always 0).



94
95
96
# File 'lib/middleware/database_middleware.rb', line 94

def reset
  @count.value = 0
end

.skip_command?(command) ⇒ Boolean

Returns:

  • (Boolean)


105
106
107
# File 'lib/middleware/database_middleware.rb', line 105

def skip_command?(command)
  skip_commands.include?(command.first.to_s.upcase)
end

Instance Method Details

#call(command, _config) ⇒ Object

Counts the Database command and delegates its execution.

This method is called for each Database command when the middleware is active. It increments the command count (unless the command is in the skip list) and then yields to execute the actual command.

Parameters:

  • command (Array)

    The Database command and its arguments.

  • _config (Hash)

    The configuration options for the Database connection.

Returns:

  • (Object)

    The result of the Database command execution.



145
146
147
148
# File 'lib/middleware/database_middleware.rb', line 145

def call(command, _config)
  klass.increment unless klass.skip_command?(command)
  yield
end

#klassObject



132
133
134
# File 'lib/middleware/database_middleware.rb', line 132

def klass
  DatabaseCommandCounter
end