Show
Ignore:
Timestamp:
03/20/11 21:15:43 (3 years ago)
Author:
Theo Schlossnagle <jesus@omniti.com>
git-committer:
Theo Schlossnagle <jesus@omniti.com> 1300655743 +0000
git-parent:

[d8c3f54f2235ea1bd78457709267a09640ab4572]

git-author:
Theo Schlossnagle <jesus@omniti.com> 1300655743 +0000
Message:

Refactor this a bit and implement the type-rich options we're looking for.
fixes #357

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/modules-lua/noit/module/resmon.lua

    rb553f9a rf510b1e  
    9090local HttpClient = require 'noit.HttpClient' 
    9191 
     92function set_check_metric(check, name, type, value) 
     93    if type == 'i' then 
     94        check.metric_int32(name, value) 
     95    elseif type == 'I' then 
     96        check.metric_uint32(name, value) 
     97    elseif type == 'l' then 
     98        check.metric_int64(name, value) 
     99    elseif type == 'L' then 
     100        check.metric_uint64(name, value) 
     101    elseif type == 'n' then 
     102        check.metric_double(name, value) 
     103    elseif type == 's' then 
     104        check.metric_string(name, value) 
     105    else 
     106        check.metric(name, value) 
     107    end 
     108end 
     109 
    92110function json_metric(check, prefix, o) 
    93     local cnt = 1 
     111    local cnt = 0 
    94112    if type(o) == "table" then 
    95         cnt = 0 
     113        local has_type, has_value = false, false 
    96114        for k, v in pairs(o) do 
    97             cnt = cnt + json_metric(check, prefix and (prefix .. '`' .. k) or k, v) 
     115            if k == "_type" then has_type = true 
     116            elseif k == "_value" then has_value = true 
     117            else cnt = cnt + json_metric(check, prefix and (prefix .. '`' .. k) or k, v) end 
     118        end 
     119        if has_type and has_value then 
     120          set_check_metric(check, prefix, o._type, o._value) 
     121          cnt = cnt + 1 
    98122        end 
    99123    elseif type(o) == "string" then 
    100124        check.metric(prefix, o) 
     125        cnt = cnt + 1 
    101126    elseif type(o) == "number" then 
    102127        check.metric_double(prefix, o) 
     128        cnt = cnt + 1 
    103129    elseif type(o) == "boolean" then 
    104130        check.metric_int32(prefix, o and 1 or 0) 
     131        cnt = cnt + 1 
     132    else 
     133        noit.log("error", "got unknown type: " .. type(o) .. "\n") 
     134        cnt = 0 
    105135    end 
    106136    return cnt 
     
    143173            local name = metric:attr("name") or "DUMMY" 
    144174            local type = metric:attr("type") or "DUMMY" 
    145             if type == 'i' then 
    146                 check.metric_int32(prefix .. name, metric and metric:contents()) 
    147             elseif type == 'I' then 
    148                 check.metric_uint32(prefix .. name, metric and metric:contents()) 
    149             elseif type == 'l' then 
    150                 check.metric_int64(prefix .. name, metric and metric:contents()) 
    151             elseif type == 'L' then 
    152                 check.metric_uint64(prefix .. name, metric and metric:contents()) 
    153             elseif type == 'n' then 
    154                 check.metric_double(prefix .. name, metric and metric:contents()) 
    155             elseif type == 's' then 
    156                 check.metric_string(prefix .. name, metric and metric:contents()) 
    157             else 
    158                 check.metric(prefix .. name, metric and metric:contents()) 
    159             end 
     175            set_check_metric(prefix .. name, type, metric and metric:contents()) 
    160176        end 
    161177        if metrics == 0 then