Merge pull request #123 from mnederlof/contrail-api-decoder-fix-fields

Fix decoder and patterns
diff --git a/heka/files/lua/common/elasticsearch_resources.lua b/heka/files/lua/common/elasticsearch_resources.lua
index b77caa6..3bf5bdd 100644
--- a/heka/files/lua/common/elasticsearch_resources.lua
+++ b/heka/files/lua/common/elasticsearch_resources.lua
@@ -36,26 +36,32 @@
             update = {_index = index, _type = type_name, _id = resource_id}
         })
         local body = {
-            script = 'ctx._source.meters += meter;' ..
-            'ctx._source.user_id = user_id;' ..
-            'ctx._source.project_id = project_id;' ..
-            'ctx._source.source = source; ' ..
-            'ctx._source.metadata =  ' ..
-            'ctx._source.last_sample_timestamp <= timestamp ? ' ..
-            'metadata : ctx._source.metadata;' ..
-            'ctx._source.last_sample_timestamp = ' ..
-            'ctx._source.last_sample_timestamp < timestamp ?' ..
-            'timestamp : ctx._source.last_sample_timestamp;' ..
-            'ctx._source.first_sample_timestamp = ' ..
-            'ctx._source.first_sample_timestamp > timestamp ?' ..
-            'timestamp : ctx._source.first_sample_timestamp;',
-            params = {
-                meter = resource.meter,
-                metadata = resource.metadata,
-                timestamp = resource.timestamp,
-                user_id = resource.user_id or '',
-                project_id = resource.project_id or '',
-                source = resource.source or '',
+            script = {
+                source = 'def SDF = new SimpleDateFormat(\"yyyy-MM-dd\'T\'HH:mm:ss.SSSSSSXXX\"); ' ..
+                         'ctx._source.meters.putAll(params.meter); ' ..
+                         'ctx._source.user_id = params.user_id; ' ..
+                         'ctx._source.project_id = params.project_id; ' ..
+                         'ctx._source.source = params.source; ' ..
+                         'ctx._source.metadata = ' ..
+                         'SDF.parse(ctx._source.last_sample_timestamp).getTime() <= ' ..
+                         'SDF.parse(params.timestamp).getTime() ? ' ..
+                         'params.metadata : ctx._source.metadata; ' ..
+                         'ctx._source.last_sample_timestamp = ' ..
+                         'SDF.parse(ctx._source.last_sample_timestamp).getTime() < ' ..
+                         'SDF.parse(params.timestamp).getTime() ? ' ..
+                         'params.timestamp : ctx._source.last_sample_timestamp; ' ..
+                         'ctx._source.first_sample_timestamp = ' ..
+                         'SDF.parse(ctx._source.first_sample_timestamp).getTime() > ' ..
+                         'SDF.parse(params.timestamp).getTime() ?' ..
+                         'params.timestamp : ctx._source.first_sample_timestamp;',
+                params = {
+                    meter = resource.meter,
+                    metadata = resource.metadata,
+                    timestamp = resource.timestamp,
+                    user_id = resource.user_id or '',
+                    project_id = resource.project_id or '',
+                    source = resource.source or '',
+                }
             },
             upsert = {
                 first_sample_timestamp = resource.timestamp,
diff --git a/heka/files/lua/common/resources.lua b/heka/files/lua/common/resources.lua
index 0a32ac2..4a37815 100644
--- a/heka/files/lua/common/resources.lua
+++ b/heka/files/lua/common/resources.lua
@@ -64,7 +64,7 @@
 }
 
 function add_resource_to_payload(sample, payload)
-    local counter_name, _ = string.gsub(sample.counter_name, "%.", "\\")
+    local counter_name, _ = sample.counter_name
 
     local metadata = sample.resource_metadata
     local local_metadata = {}
diff --git a/heka/files/lua/decoders/apache_wsgi_log.lua b/heka/files/lua/decoders/apache_wsgi_log.lua
index e35b1ed..48a4524 100644
--- a/heka/files/lua/decoders/apache_wsgi_log.lua
+++ b/heka/files/lua/decoders/apache_wsgi_log.lua
@@ -68,6 +68,8 @@
         end
         if m.http_x_forwarded_for and patt.ip_address:match(m.http_x_forwarded_for) then
             msg.Fields.http_client_ip_address = m.http_x_forwarded_for
+        else if m.remote_addr then
+            msg.Fields.http_client_ip_address = m.remote_addr
         end
 
         local request = m.request