| 1 | // SPDX-License-Identifier: GPL-3.0-or-later |
| 2 | |
| 3 | package hddtemp |
| 4 | |
| 5 | import ( |
| 6 | "fmt" |
| 7 | "strings" |
| 8 | |
| 9 | "github.com/netdata/netdata/go/plugins/plugin/framework/collectorapi" |
| 10 | ) |
| 11 | |
| 12 | const ( |
| 13 | prioDiskTemperature = collectorapi.Priority + iota |
| 14 | prioDiskTemperatureSensorStatus |
| 15 | ) |
| 16 | |
| 17 | var ( |
| 18 | diskTemperatureChartsTmpl = collectorapi.Chart{ |
| 19 | ID: "disk_%s_temperature", |
| 20 | Title: "Disk temperature", |
| 21 | Units: "Celsius", |
| 22 | Fam: "temperature", |
| 23 | Ctx: "hddtemp.disk_temperature", |
| 24 | Type: collectorapi.Line, |
| 25 | Priority: prioDiskTemperature, |
| 26 | Dims: collectorapi.Dims{ |
| 27 | {ID: "disk_%s_temperature", Name: "temperature"}, |
| 28 | }, |
| 29 | } |
| 30 | diskTemperatureSensorChartsTmpl = collectorapi.Chart{ |
| 31 | ID: "disk_%s_temperature_sensor_status", |
| 32 | Title: "Disk temperature sensor status", |
| 33 | Units: "status", |
| 34 | Fam: "sensor", |
| 35 | Ctx: "hddtemp.disk_temperature_sensor_status", |
| 36 | Type: collectorapi.Line, |
| 37 | Priority: prioDiskTemperatureSensorStatus, |
| 38 | Dims: collectorapi.Dims{ |
| 39 | {ID: "disk_%s_temp_sensor_status_ok", Name: "ok"}, |
| 40 | {ID: "disk_%s_temp_sensor_status_err", Name: "err"}, |
| 41 | {ID: "disk_%s_temp_sensor_status_na", Name: "na"}, |
| 42 | {ID: "disk_%s_temp_sensor_status_unk", Name: "unk"}, |
| 43 | {ID: "disk_%s_temp_sensor_status_nos", Name: "nos"}, |
| 44 | {ID: "disk_%s_temp_sensor_status_slp", Name: "slp"}, |
| 45 | }, |
| 46 | } |
| 47 | ) |
| 48 | |
| 49 | func (c *Collector) addDiskTempSensorStatusChart(id string, disk diskStats) { |
| 50 | c.addDiskChart(id, disk, diskTemperatureSensorChartsTmpl.Copy()) |
| 51 | } |
| 52 | |
| 53 | func (c *Collector) addDiskTempChart(id string, disk diskStats) { |
| 54 | c.addDiskChart(id, disk, diskTemperatureChartsTmpl.Copy()) |
| 55 | } |
| 56 | |
| 57 | func (c *Collector) addDiskChart(id string, disk diskStats, chart *collectorapi.Chart) { |
| 58 | chart.ID = fmt.Sprintf(chart.ID, strings.ToLower(id)) |
| 59 | chart.Labels = []collectorapi.Label{ |
| 60 | {Key: "disk_id", Value: id}, |
| 61 | {Key: "model", Value: disk.model}, |
| 62 | } |
| 63 | for _, dim := range chart.Dims { |
| 64 | dim.ID = fmt.Sprintf(dim.ID, id) |
| 65 | } |
| 66 | |
| 67 | if err := c.Charts().Add(chart); err != nil { |
| 68 | c.Warning(err) |
| 69 | } |
| 70 | } |