Added a test for counters that isn't correctly configured to work with other 
tests yet, and added the counters to the backend of notifications for further 
examination.


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/69ccb1f4
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/69ccb1f4
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/69ccb1f4

Branch: refs/heads/USERGRID-1246-MASTER
Commit: 69ccb1f448003b92f7185a8a81b1bb26e1354e47
Parents: e639ff8
Author: George Reyes <g...@apache.org>
Authored: Wed Apr 20 15:50:39 2016 -0700
Committer: George Reyes <g...@apache.org>
Committed: Mon May 2 10:49:34 2016 -0700

----------------------------------------------------------------------
 .../services/notifications/TaskManager.java     | 25 +++++++
 .../gcm/NotificationsServiceIT.java             | 77 ++++++++++++++++++++
 2 files changed, 102 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/69ccb1f4/stack/services/src/main/java/org/apache/usergrid/services/notifications/TaskManager.java
----------------------------------------------------------------------
diff --git 
a/stack/services/src/main/java/org/apache/usergrid/services/notifications/TaskManager.java
 
b/stack/services/src/main/java/org/apache/usergrid/services/notifications/TaskManager.java
index 531ca7c..e908c3b 100644
--- 
a/stack/services/src/main/java/org/apache/usergrid/services/notifications/TaskManager.java
+++ 
b/stack/services/src/main/java/org/apache/usergrid/services/notifications/TaskManager.java
@@ -26,6 +26,8 @@ import org.apache.usergrid.persistence.entities.Receipt;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.time.Instant;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicLong;
 
@@ -54,7 +56,13 @@ public class TaskManager {
 
         successes.incrementAndGet();
 
+
         try {
+            //.{year}.{month}.{day}.{HH24} possibly minute.
+            //random date and time for format
+
+
+            incrementNotificationCounter( "completed" );
 
             EntityRef deviceRef = new SimpleEntityRef(Device.ENTITY_TYPE, 
deviceUUID);
 
@@ -91,6 +99,9 @@ public class TaskManager {
         failures.incrementAndGet();
 
         try {
+
+            incrementNotificationCounter( "failed" );
+
             if (logger.isDebugEnabled()) {
                 logger.debug("Notification {} for device {} got error {}", 
notification.getUuid(), deviceUUID, code);
             }
@@ -156,6 +167,20 @@ public class TaskManager {
         }
     }
 
+    public void incrementNotificationCounter(String status){
+        em.incrementAggregateCounters( 
null,null,null,"counters.notifications."+notification.getUuid()+"."+status,1 );
+
+        LocalDateTime localDateTime = LocalDateTime.now();
+        StringBuilder currentDate = new StringBuilder(  );
+        currentDate.append( "counters.notifications.aggregate."+status+"." );
+        currentDate.append( localDateTime.getYear()+"." );
+        currentDate.append( localDateTime.getMonth()+"." );
+        currentDate.append( localDateTime.getDayOfMonth()+"." );
+        currentDate.append( localDateTime.getMinute() );
+        em.incrementAggregateCounters( null,null,null,currentDate.toString(),1 
);
+
+    }
+
 
     public void finishedBatch() throws Exception {
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/69ccb1f4/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java
----------------------------------------------------------------------
diff --git 
a/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java
 
b/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java
index 77abb56..1a9f4f7 100644
--- 
a/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java
+++ 
b/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java
@@ -19,14 +19,19 @@ package org.apache.usergrid.services.notifications.gcm;
 import com.google.android.gcm.server.Constants;
 import com.google.android.gcm.server.InvalidRequestException;
 import net.jcip.annotations.NotThreadSafe;
+
+import org.apache.usergrid.ServiceApplication;
 import org.apache.usergrid.persistence.*;
 import org.apache.usergrid.persistence.entities.*;
+import org.apache.usergrid.persistence.index.query.CounterResolution;
+import org.apache.usergrid.services.ServiceResults;
 import org.apache.usergrid.services.notifications.*;
 import org.junit.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.lang.reflect.Field;
+import java.time.LocalDateTime;
 import java.util.*;
 
 import org.apache.usergrid.services.ServiceAction;
@@ -304,6 +309,78 @@ public class NotificationsServiceIT extends 
AbstractServiceNotificationIT {
         checkReceipts(notification, 1);
     }
 
+    @Ignore("turn this on and run individually when you want to verify. there 
is an issue with the aggregate counter, because of all the other tests"
+        + "AND, there is an issue with the batcher where we have to turn it 
up/down to see the results in time. ")
+    @Test
+    public void singlePushNotificationWithCounters() throws Exception {
+
+        long ts = System.currentTimeMillis() - ( 24 * 60 * 60 * 1000 );
+        app.clear();
+        String payload = "Hello, World!";
+        Map<String, String> payloads = new HashMap<String, String>(1);
+        payloads.put(notifier.getUuid().toString(), payload);
+        app.put("payloads", payloads);
+        app.put("queued", System.currentTimeMillis());
+        app.put("debug", false);
+        app.put("expire", System.currentTimeMillis() + 300000); // add 5 
minutes to current time
+
+        Entity e = app.testRequest(ServiceAction.POST, 1, "devices", 
device1.getUuid(), "notifications").getEntity();
+        app.testRequest(ServiceAction.GET, 1, "notifications", e.getUuid());
+
+        Notification notification = app.getEntityManager().get(e.getUuid(), 
Notification.class);
+        assertEquals(
+            notification.getPayloads().get(notifier.getUuid().toString()),
+            payload);
+
+        // perform push //
+        notification = notificationWaitForComplete(notification);
+        //        checkReceipts(notification, 1);
+
+
+        verifyNotificationCounter( notification,"completed",ts,1 );
+        verifyNotificationCounter( notification,"failed",ts, 0 );
+
+
+
+
+    }
+
+    public void verifyNotificationCounter(Notification notification,String 
status,Long timestamp, int expected){
+
+        Results countersResults = app.getEntityManager().getAggregateCounters( 
null,null,null,"counters.notifications."+notification.getUuid()+"."+status,
+            CounterResolution.ALL,timestamp,System.currentTimeMillis(),false ) 
;
+
+        assertEquals( 1, countersResults.getCounters().size() );
+        if(expected > 0) {
+            assertEquals( expected, countersResults.getCounters().get( 0 
).getValues().get( 0 ).getValue() );
+        }else if (expected == 0){
+            assertEquals( 0,countersResults.getCounters().get( 0 
).getValues().size());
+        }
+
+        LocalDateTime localDateTime = LocalDateTime.now();
+        StringBuilder currentDate = new StringBuilder(  );
+        currentDate.append( "counters.notifications.aggregate."+status+"." );
+        currentDate.append( localDateTime.getYear()+"." );
+        currentDate.append( localDateTime.getMonth()+"." );
+        currentDate.append( localDateTime.getDayOfMonth()); //+"." );
+
+        countersResults = app.getEntityManager().getAggregateCounters( 
null,null,null,currentDate.toString(),
+            CounterResolution.ALL,timestamp,System.currentTimeMillis(),false ) 
;
+
+        //checks to see that it exists
+        assertEquals( 1, countersResults.getCounters().size() );
+        if(expected > 0) {
+            assertEquals( expected, countersResults.getCounters().get( 0 
).getValues().get( 0 ).getValue() );
+
+        }
+        else if (expected == 0){
+            assertEquals( 0,countersResults.getCounters().get( 0 
).getValues().size());
+        }
+
+    }
+
+
+
     @Test
     public void singlePushNotificationMultipleDevices() throws Exception {
 

Reply via email to