func addStandardAndWorkflowTags(m core.Metric, allTags map[string]map[string]string) core.Metric { hostname := hostnameReader.Hostname() tags := m.Tags() if tags == nil { tags = map[string]string{} } // apply tags from workflow for ns, nsTags := range allTags { if strings.HasPrefix(m.Namespace().String(), ns) { for k, v := range nsTags { tags[k] = v } } } // apply standard tag tags[core.STD_TAG_PLUGIN_RUNNING_ON] = hostname metric := plugin.MetricType{ Namespace_: m.Namespace(), Version_: m.Version(), LastAdvertisedTime_: m.LastAdvertisedTime(), Config_: m.Config(), Data_: m.Data(), Tags_: tags, Description_: m.Description(), Unit_: m.Unit(), Timestamp_: m.Timestamp(), } return metric }
// Convert a core.Metric to common.Metric protobuf message func ToMetric(co core.Metric) *Metric { cm := &Metric{ Namespace: ToNamespace(co.Namespace()), Version: int64(co.Version()), Tags: co.Tags(), Timestamp: &Time{ Sec: co.Timestamp().Unix(), Nsec: int64(co.Timestamp().Nanosecond()), }, LastAdvertisedTime: &Time{ Sec: time.Now().Unix(), Nsec: int64(time.Now().Nanosecond()), }, } if co.Config() != nil { cm.Config = ConfigToConfigMap(co.Config()) } switch t := co.Data().(type) { case string: cm.Data = &Metric_StringData{t} case float64: cm.Data = &Metric_Float64Data{t} case float32: cm.Data = &Metric_Float32Data{t} case int32: cm.Data = &Metric_Int32Data{t} case int: cm.Data = &Metric_Int64Data{int64(t)} case int64: cm.Data = &Metric_Int64Data{t} case []byte: cm.Data = &Metric_BytesData{t} case bool: cm.Data = &Metric_BoolData{t} case nil: cm.Data = nil default: panic(fmt.Sprintf("unsupported type: %s", t)) } return cm }
func addStandardAndWorkflowTags(m core.Metric, allTags map[string]map[string]string) core.Metric { hostname, err := hostnameReader.Hostname() if err != nil { log.WithFields(log.Fields{ "_module": "control", "_file": "metrics.go,", "_block": "addStandardAndWorkflowTags", "error": err.Error(), }).Error("Unable to determine hostname") } tags := m.Tags() if tags == nil { tags = map[string]string{} } // apply tags from workflow for ns, nsTags := range allTags { if strings.HasPrefix(m.Namespace().String(), ns) { for k, v := range nsTags { tags[k] = v } } } // apply standard tag tags[core.STD_TAG_PLUGIN_RUNNING_ON] = hostname metric := plugin.MetricType{ Namespace_: m.Namespace(), Version_: m.Version(), LastAdvertisedTime_: m.LastAdvertisedTime(), Config_: m.Config(), Data_: m.Data(), Tags_: tags, Description_: m.Description(), Unit_: m.Unit(), Timestamp_: m.Timestamp(), } return metric }