 
   pong : (callback) -> callback? Date.now()
 
-  invokeMethod : do->
+  invokeMethod : do ->
     ###
     @helper apply()
     @private
     @description - apply the method, conditionally currying the "client" object
     ###
     apply = (bongo, ctx, method, args, sessionToken, userArea, client) ->
+
       unless ctx?
-        bongo.handleUserError "bad instance! #{method}"
+        bongo.handleUserError "bad instance! #{method.method}"
         return
-      if 'function' is typeof method
-        fn = method
-      else if ctx? and 'string' is typeof method
+      if 'function' is typeof method.method
+        fn = method.method
+      else if ctx? and 'string' is typeof method.method
         # prefer the method with the trailing dollar, since this should be, by
         # convention, the version of the method which implements security for
         # a given model, and provides a wrapper for it; otherwise, search for
         # the method with the exact name.
-        fn = ctx["#{method}$"] ? ctx[method]
+        fn = ctx["#{method.method}$"] ? ctx[method.method]
       unless fn?
-        bongo.handleUserError "unknown method! #{method}"
+        bongo.handleUserError "unknown method! #{method.method}"
         return
+
+      timer = new bongo.metrics.timer  if bongo.metrics
+
+      _apply = (fn, ctx, args) ->
+        fn.apply ctx, args
+
+        return  unless bongo.metrics
+        duration = timer.getElapsedTimeInMilliSecs()
+        bongo.metrics.sendMethodMetrics { method, duration }
+
       if fn.isSecurityEnabled
         if client
           args = [client].concat args
-          fn.apply ctx, args
+          _apply fn, ctx, args
         else
           bongo.fetchClient sessionToken, userArea, (client) ->
             args = [client].concat args
-            fn.apply ctx, args
+            _apply fn, ctx, args
       else
-        fn.apply ctx, args
+        _apply fn, ctx, args
     ###
     @implementation
     ###

        switch method.type
          when 'static'
            if konstructor.hasSharedMethod method.method
              apply this, konstructor, method.method, args, sessionToken, userArea, client
            else
              @handleUserError "No such method! #{JSON.stringify method} #{args} #{secretName}"
          when 'instance'

                    console.warn "#{konstructor.name} instance with id #{method.id} is not found"
                    return
                  else
                    apply this, instance, method, args, sessionToken, userArea, client
              else if method.data
                instance = new konstructor method.data
                apply this, instance, method, args, sessionToken, userArea, client
            else
              @handleUserError "No such method! #{JSON.stringify method} #{args} #{secretName}"
          else
            @handleUserError 'Unknown method type!'
      else
        kallback = @localStore.get method
        if kallback?
