Sha256: a58a8d7987b4dafc42dc852e14d523735eeba923b6fc4c9faecd6f1e78f801cf

Contents?: true

Size: 1.57 KB

Versions: 2

Compression:

Stored size: 1.57 KB

Contents

# frozen_string_literal: true

require 'json'

module SqlMonitor
  class TrackingSqlsController < ActionController::Base
    layout "base"

    def not_found
      respond_to do |format|
        format.any  { head :not_found }
      end
    end

    def index
      return not_found if Rails.env.production? || SqlMonitor.handler.nil?

      @versions = SqlMonitor.handler.redis.get('all_versions')
      if @versions.nil? || @versions.empty?
        @versions = []
      else
        @versions = JSON.parse(SqlMonitor.handler.redis.get('all_versions'), {:symbolize_names => true})
      end

      @data = []
      @selectedVersion = ''
      if params[:version]
        data = []
        @selectedVersion = params[:version]
        SqlMonitor.handler.redis.scan_each(match: @selectedVersion + ":*") do |v|
          data << JSON.parse(SqlMonitor.handler.redis.mGet(v).first, {:symbolize_names => true}).merge({sql_key: v.split(':')[1]})
        end
        @data = format_data(sort_data(data, 'count'))
      end
    end

    private
    def sort_data(data, sort_by)
      data.sort_by do |d|
        if sort_by == 'duration'
          -d[:duration].to_f / d[:count]
        else
          -d[:count]
        end
      end
    end

    def format_data(sorted_data)
      formatedData = [];
      sorted_data.each do |row|
        formatedData.push({
          sql_key: row[:sql_key],
          count: row[:count].to_s,
          duration: row[:duration].to_f / row[:count],
          sql: row[:sql],
          source: row[:source].uniq.join("<br/>")
        })
      end
      formatedData
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sql_monitor-0.1.2 app/controllers/sql_monitor/tracking_sqls_controller.rb
sql_monitor-0.1.1 app/controllers/sql_monitor/tracking_sqls_controller.rb