// AddMeta adds a metadata entry to memory, which is queued for later sending. func AddMeta(metric string, tags opentsdb.TagSet, name string, value interface{}, setHost bool) { if tags == nil { tags = make(opentsdb.TagSet) } if _, present := tags["host"]; setHost && !present { tags["host"] = util.Hostname } if err := tags.Clean(); err != nil { slog.Error(err) return } ts := tags.Tags() metalock.Lock() defer metalock.Unlock() prev, present := metadata[Metakey{metric, ts, name}] if present && !reflect.DeepEqual(prev, value) { slog.Infof("metadata changed for %s/%s/%s: %v to %v", metric, ts, name, prev, value) go sendMetadata([]Metasend{{ Metric: metric, Tags: tags, Name: name, Value: value, }}) } else if metadebug { slog.Infof("AddMeta for %s/%s/%s: %v", metric, ts, name, value) } metadata[Metakey{metric, ts, name}] = value }
func tagMetaKey(tags opentsdb.TagSet, name string) string { return fmt.Sprintf("tmeta:%s:%s", tags.Tags(), name) }