func (f decodeJSONFields) Run(event common.MapStr) (common.MapStr, error) { var errs []string for _, field := range f.fields { data, err := event.GetValue(field) if err != nil && errors.Cause(err) != common.ErrKeyNotFound { debug("Error trying to GetValue for field : %s in event : %v", field, event) errs = append(errs, err.Error()) continue } text, ok := data.(string) if ok { var output interface{} err := unmarshal(f.maxDepth, []byte(text), &output, f.processArray) if err != nil { debug("Error trying to unmarshal %s", event[field]) errs = append(errs, err.Error()) continue } _, err = event.Put(field, output) if err != nil { debug("Error trying to Put value %v for field : %s", output, field) errs = append(errs, err.Error()) continue } } } if len(errs) > 0 { return event, fmt.Errorf(strings.Join(errs, ", ")) } return event, nil }
func (p addCloudMetadata) Run(event common.MapStr) (common.MapStr, error) { if len(p.metadata) == 0 { return event, nil } // This overwrites the meta.cloud if it exists. But the cloud key should be // reserved for this processor so this should happen. _, err := event.Put("meta.cloud", p.metadata) return event, err }
// DeDotLabels returns a new common.MapStr containing a copy of the labels // where the dots in each label name have been changed to an underscore. func DeDotLabels(labels map[string]string) common.MapStr { outputLabels := common.MapStr{} for k, v := range labels { // This is necessary so that ES does not interpret '.' fields as new // nested JSON objects, and also makes this compatible with ES 2.x. label := strings.Replace(k, ".", "_", -1) outputLabels.Put(label, v) } return outputLabels }