From 1b0bfd208a9803370eb6f2d8bf111cf5524cf886 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Mon, 18 Mar 2024 17:19:17 +0000 Subject: [PATCH] Escape label values --- collectors/ohai/ohai_collector | 10 +++++++--- collectors/smart/smart_collector | 6 +++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/collectors/ohai/ohai_collector b/collectors/ohai/ohai_collector index a22ca23..1b6597a 100755 --- a/collectors/ohai/ohai_collector +++ b/collectors/ohai/ohai_collector @@ -3,6 +3,10 @@ require "json" require "ohai" +def escape_value(v) + v.to_s.gsub(/(["\\])/, "\\\\\\1") +end + controllers = [] arrays = [] disks = [] @@ -83,7 +87,7 @@ puts "# HELP ohai_controller_info Disk controller information" puts "# TYPE ohai_controller_info gauge" controllers.each do |controller| - labels = controller.filter { |key, value| !value.nil? }.collect { |key, value| "#{key}=\"#{value}\"" }.join(",") + labels = controller.filter { |key, value| !value.nil? }.collect { |key, value| "#{key}=\"#{escape_value(value)}\"" }.join(",") puts "ohai_controller_info{#{labels}} 1" end @@ -92,7 +96,7 @@ puts "# HELP ohai_array_info Disk array information" puts "# TYPE ohai_array_info gauge" arrays.each do |array| - labels = array.collect { |key, value| "#{key}=\"#{value}\"" }.join(",") + labels = array.collect { |key, value| "#{key}=\"#{escape_value(value)}\"" }.join(",") puts "ohai_array_info{#{labels}} 1" end @@ -101,7 +105,7 @@ puts "# HELP ohai_disk_info Disk information" puts "# TYPE ohai_disk_info gauge" disks.each do |disk| - labels = disk.collect { |key, value| "#{key}=\"#{value}\"" }.join(",") + labels = disk.collect { |key, value| "#{key}=\"#{escape_value(value)}\"" }.join(",") puts "ohai_disk_info{#{labels}} 1" end diff --git a/collectors/smart/smart_collector b/collectors/smart/smart_collector index 14c56d3..3d63156 100755 --- a/collectors/smart/smart_collector +++ b/collectors/smart/smart_collector @@ -2,6 +2,10 @@ require "json" +def escape_value(v) + v.to_s.gsub(/(["\\])/, "\\\\\\1") +end + STATUS_BITS = [ "command_not_parsed", "device_open_failed", @@ -52,7 +56,7 @@ IO.read("/etc/prometheus/collectors/smart.devices").split("\n") do |line| data[:rotation_rate] = output["rotation_rate"] end - data[:labels] = data.collect { |key, value| "#{key}=\"#{value}\"" }.join(",") + data[:labels] = data.collect { |key, value| "#{key}=\"#{escape_value(value)}\"" }.join(",") data[:exit_status] = output["smartctl"]["exit_status"]