def log_controller_action_block(options = {})
      if null?
        do_nothing_on_null(:log_controller_action_block)
        yield
      else
        build_full_controller_action_string(options)
        has_error = true
        begin_time = UnionStationHooks.now
        begin
          result = yield
          has_error = false
          result
        ensure
          log_controller_action(
            options.merge(
              :begin_time => begin_time,
              :end_time => UnionStationHooks.now,
              :has_error => has_error
            )
          )
        end
      end
    end
def log_controller_action_block(options = {})
      if null?
        do_nothing_on_null(:log_controller_action_block)
        yield
      else
        build_full_controller_action_string(options)
        has_error = true
        begin_time = UnionStationHooks.now
        begin
          result = yield
          has_error = false
          result
        ensure
          log_controller_action(
            options.merge(
              :begin_time => begin_time,
              :end_time => UnionStationHooks.now,
              :has_error => has_error
            )
          )
        end
      end
    end
Logging controller-related information 
 Logs that you are calling a web framework controller action. Of course,
 you should only call this if your web framework has the concept of
 controller actions. For example Rails does, but Sinatra and Grape
 don't.

 This form takes an options hash as well as a block. You can pass
 additional information about the web framework controller action, which
 will be logged. The block is expected to perform the actual request
 handling. When the block returns, timing information about the block is
 automatically logged.

 See also {#log_controller_action} for a form that doesn't
 expect a block.

 The `union_station_hooks_rails` gem automatically calls this for you
 if your application is a Rails app.

 @yield The given block is expected to perform request handling.
 @param [Hash] options Information about the controller action.
   All options are optional.
 @option options [String] :controller_name
   The controller's name, e.g. `PostsController`.
 @option options [String] :action_name
   The controller action's name, e.g. `create`.
 @option options [String] :method
   The HTTP method that the web framework thinks this request should have,
   e.g. `GET` and `PUT`. The main use case for this option is to support
   Rails's HTTP verb emulation. Rails uses a parameter named
   [`_method`](http://guides.rubyonrails.org/form_helpers.html#how-do-forms-with-patch-put-or-delete-methods-work-questionmark)
   to emulate HTTP verbs besides GET and POST. Other web frameworks may
   have a similar mechanism.
 @return The return value of the block.

 @example Rails example
   # This example shows what to put inside a Rails controller action
   # method. Note that all of this is automatically done for you if you
   # use the union_station_hooks_rails gem.
   options = {
     :controller_name => self.class.name,
     :action_name => action_name,
     :method => request.request_method
   }
   reporter.log_controller_action_block(options) do
     do_some_request_processing_here
   end