[]string{"location"},
)
+ versionGauge = promauto.NewGaugeVec(
+ prometheus.GaugeOpts{
+ Name: "sensor_version",
+ Help: "Various information to map a hardware sensor back to compiled version",
+ },
+ []string{"location", "app_version", "idf_version", "mac", "ext"},
+ )
+
uptimeGauge = promauto.NewGaugeVec(
prometheus.GaugeOpts{
Name: "sensor_uptime",
pm10Expire = make(map[string]time.Time)
pm25Expire = make(map[string]time.Time)
aqiExpire = make(map[string]time.Time)
+ versionExpire = make(map[string]time.Time)
uptimeExpire = make(map[string]time.Time)
internalTempExpire = make(map[string]time.Time)
}
+func handleVersion(obj map[string]interface{}) {
+ now := time.Now().UTC()
+ extAddr, ok := obj["ext"].(string)
+ if !ok {
+ extAddr = ""
+ }
+ versionGauge.With(prometheus.Labels{"location": obj["location"].(string),
+ "app_version": obj["app_version"].(string),
+ "idf_version": obj["idf_version"].(string),
+ "mac": obj["mac"].(string),
+ "ext": extAddr,
+ }).Set(1)
+
+ versionHash := labelValHash{labelValues: []string{obj["location"].(string), obj["app_version"].(string), obj["idf_version"].(string), obj["mac"].(string), extAddr}}
+ expireMutex.Lock()
+ defer expireMutex.Unlock()
+ versionExpire[versionHash.getHash()] = now
+
+}
+
func processPM25(location string, pm10 float64, pm25 float64, sendChannel chan helper.RabbitSend) {
// should have the senseType setup correctly now, if we're still here
dataMap := make(map[string]interface{}, 0)
os.Exit(1)
}
+ /// this one is hardcoded, for the generic sensor version info
+ err = helper.Bind("esp32.version_info", &rabbit)
+ if err != nil {
+ logger.Error(err, "unable to bind successfully to exchange", "routingKey", "esp32.version_info")
+ os.Exit(1)
+ }
+
deliveries, err := helper.StartConsuming(rabbit)
if err != nil {
logger.Error(err, "unable to start consuming data from rabbit")
handleTemp(item)
} else if delivery.RoutingKey == "aqi" {
handleAQI(item)
+ } else if delivery.RoutingKey == "esp32.version_info" {
+ handleVersion(item)
}
for _, device := range devices {
if device.getRoutingKey() == delivery.RoutingKey {
expireStaleMetric(pm10Expire, pm10Gauge)
expireStaleMetric(pm25Expire, pm25Gauge)
expireStaleMetric(aqiExpire, aqiGauge)
+ expireStaleMetric(versionExpire, versionGauge)
expireStaleMetric(uptimeExpire, uptimeGauge)
expireStaleMetric(internalTempExpire, internalTempGauge)