code: @PreAuthorize("hasAnyRole('VIEW_DATA')")
  	@RequestMapping(value="/api/detection-points/{label}/by-client-application", method = RequestMethod.GET)
  	@ResponseBody
  	public String byClientApplication(@PathVariable("label") String label, @RequestParam("earliest") String rfc3339Timestamp) {
  		Table<String,TimeFrameItem.Type,Long> table = HashBasedTable.create();
  
  		Collection<Event> events = facade.findEvents(rfc3339Timestamp).stream().filter(e -> label.equals(e.getDetectionPoint().getLabel())).collect(Collectors.toList());
  		Collection<Attack> attacks = facade.findAttacks(rfc3339Timestamp).stream().filter(a -> label.equals(a.getDetectionPoint().getLabel())).collect(Collectors.toList());
  		
  		for(Event event : events) {
  			Long count = table.get(event.getDetectionSystem().getDetectionSystemId(), TimeFrameItem.Type.EVENT);
  			
  			if (count == null) {
  				count = 0L;
  			}
  			
  			count = count + 1L;
  			
  			table.put(event.getDetectionSystem().getDetectionSystemId(), TimeFrameItem.Type.EVENT, count);
  		}
  		
  		for(Attack attack : attacks) {
  			Long count = table.get(attack.getDetectionSystem().getDetectionSystemId(), TimeFrameItem.Type.ATTACK);
  			
  			if (count == null) {
  				count = 0L;
  			}
  			
  			count = count + 1L;
  			
  			table.put(attack.getDetectionSystem().getDetectionSystemId(), TimeFrameItem.Type.ATTACK, count);
  		}
  		
  		return gson.toJson(table);
  	}
docs: seen by these client apps