diff --git a/ack.png b/ack.png new file mode 100644 index 0000000..787f7ca Binary files /dev/null and b/ack.png differ diff --git a/node.lua b/node.lua index f6301e5..2e3941e 100644 --- a/node.lua +++ b/node.lua @@ -4,6 +4,7 @@ local json = require "json" local services = {} local rotate_before = nil local transform = nil +local ack_image = resource.load_image("ack.png") local c_hard = {} c_hard[0] = resource.create_colored_texture(0, 0.666, 0, 1) @@ -68,6 +69,10 @@ function node.render() local service_width = CONFIG.header_font:width(serv.service, service_font_size) local my_height = (#serv.output*CONFIG.output_size*1.5) + margin*3 + if serv.ack then + header_width = header_width - margin - host_font_size + end + if host_width + service_width > header_width then -- two-line output, if possible while CONFIG.header_font:width(serv.host, host_font_size) > header_width do @@ -89,15 +94,21 @@ function node.render() y = y + margin - service_x = real_width - margin - CONFIG.header_font:width(serv.service, service_font_size) + local service_x = real_width - margin - CONFIG.header_font:width(serv.service, service_font_size) + local host_x = margin + + if serv.ack then + ack_image:draw(host_x, y, host_x + host_font_size, y + host_font_size) + host_x = host_x + host_font_size + margin + end if host_width + service_width > header_width then - CONFIG.header_font:write(margin, y, serv.host, host_font_size, c_text[serv.state][1],c_text[serv.state][2],c_text[serv.state][2],1) + CONFIG.header_font:write(host_x, y, serv.host, host_font_size, c_text[serv.state][1],c_text[serv.state][2],c_text[serv.state][2],1) y = y + host_font_size + margin CONFIG.header_font:write(service_x, y, serv.service, service_font_size, c_text[serv.state][1],c_text[serv.state][2],c_text[serv.state][3],1) y = y + service_font_size + margin else - CONFIG.header_font:write(margin, y, serv.host, host_font_size, c_text[serv.state][1],c_text[serv.state][2],c_text[serv.state][2],1) + CONFIG.header_font:write(host_x, y, serv.host, host_font_size, c_text[serv.state][1],c_text[serv.state][2],c_text[serv.state][2],1) CONFIG.header_font:write(service_x, y, serv.service, service_font_size, c_text[serv.state][1],c_text[serv.state][2],c_text[serv.state][3],1) y = y + CONFIG.header_size + margin end diff --git a/service b/service index e0522f2..ae48567 100755 --- a/service +++ b/service @@ -73,27 +73,25 @@ def regenerate(): if host['attrs']['problem']: broken_hosts.add(host['attrs']['display_name']) - if host['attrs']['downtime_depth'] > 0: + if ( + host['attrs']['downtime_depth'] > 0 + or ( + host['attrs']['acknowledgement'] > 0 + and not CONFIG['show_ack'] + ) + ): continue - if host['attrs']['acknowledgement'] > 0: - if not CONFIG['show_ack']: - continue - - ack = '[ACK] ' - else: - ack = '' - if not CONFIG['show_soft'] and int(host['attrs']['state_type']) == 0: continue services['services'].append({ - 'host': ack + host['attrs']['display_name'], + 'host': host['attrs']['display_name'], 'service': '-- HOST --', 'state': 2, 'type': int(host['attrs']['state_type']), 'output': limit_output_lines(host['attrs']['last_check_result']['output'].splitlines(), 3), - 'ack': ack, + 'ack': bool(host['attrs']['acknowledgement'] > 0), 'sort': '{}{}{}{}'.format( int(host['attrs']['state_type'])*-1, SORT_ORDER[2], @@ -104,27 +102,26 @@ def regenerate(): for svc in serv['results']: if svc['attrs']['problem']: - if svc['attrs']['downtime_depth'] > 0 or svc['attrs']['host_name'] in broken_hosts: + if ( + svc['attrs']['host_name'] in broken_hosts + or svc['attrs']['downtime_depth'] > 0 + or ( + svc['attrs']['acknowledgement'] > 0 + and not CONFIG['show_ack'] + ) + ): continue - if svc['attrs']['acknowledgement'] > 0: - if not CONFIG['show_ack']: - continue - - ack = ' [ACK]' - else: - ack = '' - if not CONFIG['show_soft'] and int(svc['attrs']['state_type']) == 0: continue services['services'].append({ 'host': svc['attrs']['host_name'], - 'service': svc['attrs']['display_name'] + ack, + 'service': svc['attrs']['display_name'], 'state': int(svc['attrs']['state']), 'type': int(svc['attrs']['state_type']), 'output': limit_output_lines(svc['attrs']['last_check_result']['output'].splitlines()), - 'ack': ack, + 'ack': bool(svc['attrs']['acknowledgement'] > 0), 'sort': '{}{}{}{}'.format( int(svc['attrs']['state_type'])*-1, SORT_ORDER[int(svc['attrs']['state'])],