diff --git a/lib/Message/Passing/Filter/ToLogstash.pm b/lib/Message/Passing/Filter/ToLogstash.pm index 7225a53..bb346e9 100644 --- a/lib/Message/Passing/Filter/ToLogstash.pm +++ b/lib/Message/Passing/Filter/ToLogstash.pm @@ -46,6 +46,10 @@ sub filter { if (exists($message->{'@fields'}{epochtime})) { $message->{'@timestamp'} = DateTime->from_epoch(epoch => delete($message->{'@fields'}{epochtime})) . '' } + if (exists($message->{'@fields'}->{'tags'})) { + # we move tags here, to keep the loop simpler + $message->{'@tags'} = delete $message->{'@fields'}->{tags}; + } foreach my $k (keys %map) { my $v = $map{$k}; $v = [ '', $v ] if !ref $v; @@ -55,6 +59,10 @@ sub filter { $message->{$field} = $prefix . delete $message->{'@fields'}{$k}; } } + if ($message->{'@tags'} and ref $message->{'@tags'} ne ref []) { + # We have something in tags that isn't a ref, lets wrap it + $message->{'@tags'} = [ $message->{'@tags'} ]; + } $message->{'@tags'} ||= $self->default_tags; $message->{'@tags'} = [ uniq @{ $message->{'@tags'} }, @{ $self->add_tags } ]; diff --git a/t/filter_tologstash.t b/t/filter_tologstash.t index a74b708..0abaaa7 100644 --- a/t/filter_tologstash.t +++ b/t/filter_tologstash.t @@ -42,6 +42,16 @@ my @data = ( { date => '2012-09-03T21:08:54', message => 'foo',}, { '@fields' => {}, '@tags' => [], '@message' => 'foo', '@timestamp' => '2012-09-03T21:08:54' }, ], + [ + 'one tag', + { tags => 'foo', message => 'foo' }, + { '@fields' => {}, '@tags' => [ 'foo' ], '@message' => 'foo' }, + ], + [ + 'two tags', + { tags => ['foo', 'bar'], message => 'foo' }, + { '@fields' => {}, '@tags' => [ 'foo', 'bar' ], '@message' => 'foo' }, + ], ); foreach my $datum (@data) {