SENSSOFT-71 SENSSOFT-72 #returning json array in log file. enabled batch transmission of logs to file.
diff --git a/userale/ale.py b/userale/ale.py
index 3d834ed..e3b4c08 100644
--- a/userale/ale.py
+++ b/userale/ale.py
@@ -15,10 +15,11 @@
 
 from userale.version import __version__
 from userale.format import JsonFormatter
-from PyQt5.QtCore import QObject, QEvent
+from PyQt5.QtCore import QObject, QEvent, QTimer
 import datetime, time
 import logging
 import uuid
+import json
 
 _ = JsonFormatter
 
@@ -31,7 +32,8 @@
                  toolname=None,
                  toolversion=None,
                  keylog=False,
-                 resolution=100,   
+                 interval=5000,
+                 resolution=1000,   
                  shutoff=[]):
         """
         :param output: [str] The file or url path to which logs will be sent
@@ -40,6 +42,7 @@
         :param toolname: [str] The application name
         :param toolversion: [str] The application version
         :param keylog: [bool] Should detailed key logs be recorded. Default is False
+        :param interval: [int] The minimum time interval in ms between batch transmission of logs. Default is 5000ms.
         :param resolution: [int] Delay in ms between instances of high frequency logs like mousemoves, scrolls, etc. Default is 100ms (10Hz).
         :param shutoff: [list] Turn off logging for specific events
     
@@ -72,6 +75,7 @@
         self.toolname = toolname
         self.toolversion = toolversion
         self.keylog = keylog
+        self.interval = interval
         self.resolution = resolution
         self.shutoff = shutoff
 
@@ -107,10 +111,29 @@
 
         # Sample rate 
         self.hfreq = [QEvent.MouseMove, QEvent.DragMove, QEvent.Scroll]
+        self.watcher = False
+
+        # Sample Timer
+        # self.timer = QTimer ()
+        # self.timer.timeout.connect (self.sample)
+        # self.timer.start(self.resolution)
+
+        # Cleanup Timer
+        
+        # self.timer2 = QTimer ()
+        # self.timer2.timeout.connect (self.sample2)
+        # self.timer2.start (0)
+
+        # connect (self, SIGNAL(aboutToQuit ()), self, SLOT(self.sample2()));
+
+        # connect(quitButton, SIGNAL(clicked()), &app, SLOT(quit()));
+
+        # Batch transmission of logs
+        self.intervalID = self.startTimer (self.interval)
+
+        # Temporary storage for logs
         self.logs = []
-        self.last = None
-        self.timer = None
-        self.flag = False
+        self.hlogs = []
 
     def eventFilter (self, object, event):
         '''
@@ -121,16 +144,13 @@
         Filters events for the watched widget (in this case, QApplication)
         '''
 
-        if self.flag == False:
-            self.flag = True
-            self.timer = datetime.datetime.now ()
-
         data = None
         t = event.type ()
 
         if t in self.map:        
             # Handle leaf node 
-            if object.isWidgetType () and len(object.children ()) == 0:
+            if len(object.children ()) == 0:
+            # if object.isWidgetType () and len(object.children ()) == 0:
                 name = list (self.map [t].keys())[0]
                 method = list (self.map [t].values())[0]
                 data = method (name, event, object)
@@ -141,21 +161,19 @@
                 # Either an event actually ocurred on window or is an effect of event propagation. 
                 pass
 
-        # Sample data
-        self.logs.append (data)
-
-        # Check time elapsed
-        elapsed = datetime.datetime.now () - self.timer
-        if elapsed.seconds == 1:
-            # print ("count = %d", len (self.logs)) 
-            self.flag = False
-            self.logs = []
-
         if data is not None:
-            self.logger.info (_(data))
+            self.logs.append (data)
 
         return super(Ale, self).eventFilter (object, event)
 
+    def timerEvent (self, event):
+        '''
+        :param object: [list] List of events
+        :return: [void] Emit events to file
+        '''
+        self.logger.info (_(self.logs))
+        self.logs = [] # Reset logs
+
     def getSender (self, object):
         '''
         :param object: [QObject] The object being watched.