transform_data

in source/code/plugins/mongostat_lib.rb [25:127]


    def transform_data(record)
      if record.start_with?('insert')
        record.sub!("locked db", "locked-db") if record.include? "locked db"
        record.sub!("idx miss %", "idx-miss-%") if record.include? "idx miss %"
        record.sub!("% dirty", "dirty") if record.include? "% dirty"
        record.sub!("% used", "used") if record.include? "% used"

        
        
        @counters = record.split
        @values = []
      else
        @values = record.split
      end

      if @counters && @values && @values.length > 0
        rec = Hash[@counters.zip @values]
        transformed_rec = {}
        begin
          transformed_rec["Insert Operations/sec"] = rec["insert"].delete("*")
          transformed_rec["Query Operations/sec"] = rec["query"].delete("*")
          transformed_rec["Update Operations/sec"] = rec["update"].delete("*")
          transformed_rec["Delete Operations/sec"] = rec["delete"].delete("*")
          transformed_rec["Total Data Mapped (MB)"] = rec["mapped"].delete("M") if rec.has_key?("mapped")
          transformed_rec["Virtual Memory Process Usage (MB)"] = rec["vsize"].delete("M")
          transformed_rec["Resident Memory Process Usage (MB)"] = rec["res"].delete("M")
          transformed_rec["Get More Operations/sec"] = rec["getmore"]
          transformed_rec["Page Faults/sec"] = rec["faults"] if rec.has_key?("faults")
          transformed_rec["Global Write Lock %"] = rec["locked-db"] if rec.has_key?("locked-db")
          transformed_rec["% Index Access Miss"] = rec["idx-miss-%"] if rec.has_key?("idx-miss-%")
          transformed_rec["Total Open Connections"] = rec["conn"]
          transformed_rec["Replication Status"] = rec["repl"] if rec.has_key?("repl")
          transformed_rec["Network In (Bytes)"] = to_bytes(rec["netIn"])
          transformed_rec["Network Out (Bytes)"] = to_bytes(rec["netOut"])

          ar, aw = rec["ar|aw"].split("|")
          transformed_rec["Active Clients (Read)"] = ar
          transformed_rec["Active Clients (Write)"] = aw

          qr, qw = rec["qr|qw"].split("|")
          transformed_rec["Queue Length (Read)"] = qr
          transformed_rec["Queue Length (Write)"] = qw

          if rec.has_key?("command")
            command = rec["command"]
            if command.include?("|")
              local, replicated = command.split("|")
              transformed_rec["Local Commands/sec"] = local
              transformed_rec["Replicated Commands/sec"] = replicated
            else
              transformed_rec["Commands/sec"] = command
            end
          end

          
          transformed_rec["% Time Global Write Lock"] = rec["locked"] if rec.has_key?("locked")
          transformed_rec["% WiredTiger Dirty Byte Cache"] = rec["dirty"]  if rec.has_key?("dirty")
          transformed_rec["% WiredTiger Cache in Use"] = rec["used"] if rec.has_key?("used")
          if rec.has_key?("non-mapped")
            transformed_rec["Total Virtual Memory (MB)"] = rec["non-mapped"].delete("M")
          end
          if rec.has_key?("flushes")
            version = get_mongostat_version
            transformed_rec["WiredTiger Checkpoints Triggered"] = rec["flushes"] if version >= 3.2
            transformed_rec["Fsync Operations/sec"] = rec["flushes"] if version < 3.2
          end

          
          if rec.has_key?("lr|lw")
            lr, lw = rec["lr|lw"].split("|")
            transformed_rec["% Read Lock Acquisition Time"] = lr
            transformed_rec["% Write Lock Acquisition Time"] = lw
          end
          if rec.has_key?("lrt|lwt")
            lrt, lwt = rec["lrt|let"].split("|")
            transformed_rec["Avg. Read Lock Acquisition Time (ms)"] = lrt
            transformed_rec["Avg. Write Lock Acquisition Time (ms)"] = lwt
          end
        rescue => e
          $log.warn e.to_s
        end
 
        dataitems = {}       
        dataitems["Timestamp"] = OMS::Common.format_time(Time.now.to_f)
        dataitems["Host"] = OMS::Common.get_hostname
        dataitems["ObjectName"] = "MongoDB"
        dataitems["InstanceName"] = OMS::Common.get_hostname
        collections = []

        transformed_rec.each { |k,v|
          if v.nil? or v == "nil"
            OMS::Log.warn_once("Dropping null value for counter #{k}")
          else
            counter_pair = {"CounterName" => k, "Value" => v} 
            collections.push(counter_pair) 
          end
        }
        dataitems["Collections"] = collections       
                  
        return dataitems
      end
    end