public Notification getSourceNotification(EntityRef receipt) throws Exception { Receipt r = em.get(receipt.getUuid(), Receipt.class); return em.get(r.getNotificationUUID(), Notification.class); }
/** * Called from TaskManager - Creates a persistent receipt * */ private void saveReceipt(EntityRef notification, EntityRef device, Receipt receipt, boolean hasError) throws Exception { boolean debug = false; if(this.notification != null){ debug = this.notification.getDebug(); } if ( debug || hasError) { List<EntityRef> entities = Arrays.asList(notification, device); if (receipt.getUuid() == null) { Receipt savedReceipt = em.create(receipt); em.addToCollections(entities, Notification.RECEIPTS_COLLECTION, savedReceipt); } else { em.addToCollections(entities, Notification.RECEIPTS_COLLECTION, receipt); } if ( logger.isDebugEnabled() ) { logger.debug( "Notification {} receipt saved for device {}", notification.getUuid(), device.getUuid() ); } } }
public Receipt(UUID notificationUUID, String notifierId, Object payload, UUID deviceId) { this.notificationUUID = notificationUUID; this.notifierId = notifierId; HashMap receiptPayload; if (!(payload instanceof HashMap)) { if (payload instanceof String) { try { receiptPayload = (HashMap) objectMapper.readValue( (String)payload, hashMapTypeRef ); } catch (Exception e) { receiptPayload = new HashMap<>(); receiptPayload.put( "payload", payload ); } } else { receiptPayload = new HashMap<>(); receiptPayload.put( "payload", payload ); } } else { receiptPayload = (HashMap) payload; } this.payload = receiptPayload; this.setDeviceId( deviceId ); }
public void failed(Notifier notifier, Receipt receipt, UUID deviceUUID, Object code, String message) throws Exception { failures.incrementAndGet(); try { //incrementNotificationCounter( "failed" ); if (logger.isDebugEnabled()) { logger.debug("Notification {} for device {} got error {}", notification.getUuid(), deviceUUID, code); } if(receipt != null) { receipt.setErrorCode( code ); receipt.setErrorMessage( message ); this.saveReceipt( notification, new SimpleEntityRef( Device.ENTITY_TYPE, deviceUUID ), receipt, true ); } finishedBatch(); } catch (Exception e){ logger.error("Unable to finish marking notification {} as failed due to error: ", notification.getUuid(), e); } }
protected void checkReceipts(Notification notification, int expected) throws Exception { List<EntityRef> receipts = getNotificationReceipts(notification); long timeout = System.currentTimeMillis() + 10000; while (System.currentTimeMillis() < timeout) { Thread.sleep(200); receipts =getNotificationReceipts(notification); if (receipts.size()==expected) { break; } } assertEquals(expected, receipts.size()); for (EntityRef receipt : receipts) { logger.info("checkReceipts - receipt uuid: {}, notification uuid: {}", receipt.getUuid(), notification.getUuid()); Receipt r = app.getEntityManager().get(receipt, Receipt.class); assertNotNull(r.getSent()); assertNotNull(r.getPayload()); assertNotNull(r.getNotifierId()); EntityRef source = getNotificationService().getSourceNotification(r); assertEquals(source.getUuid(), notification.getUuid()); } }
assertEquals("InvalidRegistration", receipt.getErrorCode());
new Receipt( notification.getUuid(), message.getNotifierId(), payload, deviceUUID ); tracker = new TaskTracker( providerAdapter.getNotifier(), taskManager, receipt, deviceUUID );
assertEquals("InvalidRegistration", receipt.getErrorCode());
protected List<EntityRef> getNotificationReceipts(EntityRef notification) throws Exception { Query query = new Query(); query.setCollection("receipts"); query.setLimit(100); PathQuery<Receipt> pathQuery = new PathQuery<Receipt>( new SimpleEntityRef(app.getEntityManager().getApplicationRef()), query ); Iterator<Receipt> it = pathQuery.iterator(app.getEntityManager()); List<EntityRef> list =new ArrayList<EntityRef>();//get all while(it.hasNext()){ Receipt receipt =it.next(); if(receipt.getNotificationUUID().equals(notification.getUuid())) { list.add(receipt); } } return list; }