Skip to content

Commit

Permalink
Added Endpoint to get BSM message Counts
Browse files Browse the repository at this point in the history
  • Loading branch information
John-Wiens committed Apr 29, 2024
1 parent b2679d0 commit 7fd4eeb
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
import us.dot.its.jpo.ode.model.OdeBsmData;

public interface OdeBsmJsonRepository extends DataLoader<OdeBsmData>{
List<OdeBsmData> findOdeBsmDataGeo(String originIp, String vehicleId, Long startTime, Long endTime, Double longitude, Double latitude, Double distance);
List<OdeBsmData> findOdeBsmDataGeo(String originIp, String vehicleId, Long startTime, Long endTime, Double longitude, Double latitude, Double distance);
long countOdeBsmDataGeo(String originIp, String vehicleId, Long startTime, Long endTime, Double longitude, Double latitude, Double distance);
}
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,41 @@ public List<OdeBsmData> findOdeBsmDataGeo(String originIp, String vehicleId, Lon
return convertedList;
}

public long countOdeBsmDataGeo(String originIp, String vehicleId, Long startTime, Long endTime, Double longitude, Double latitude, Double distance){
Query query = new Query();

if(originIp != null){
query.addCriteria(Criteria.where("metadata.originIp").is(originIp));
}

if(vehicleId != null){
query.addCriteria(Criteria.where("payload.data.coreData.id").is(vehicleId));
}

String startTimeString = Instant.ofEpochMilli(0).toString();
String endTimeString = Instant.now().toString();

if(startTime != null){
startTimeString = Instant.ofEpochMilli(startTime).toString();
}
if(endTime != null){
endTimeString = Instant.ofEpochMilli(endTime).toString();
}
query.limit(props.getMaximumResponseSize());
query.addCriteria(Criteria.where("metadata.odeReceivedAt").gte(startTimeString).lte(endTimeString));
query.fields().exclude("recordGeneratedAt");

if (longitude!=null && latitude!=null && distance!=null){
Double[] latitudes = calculateLatitudes(latitude, distance);
Double[] longitudes = calculateLongitudes(longitude, latitude, distance);

query.addCriteria(Criteria.where("payload.data.coreData.position.latitude").gte(Math.min(latitudes[0], latitudes[1])).lte(Math.max(latitudes[0], latitudes[1])));
query.addCriteria(Criteria.where("payload.data.coreData.position.longitude").gte(Math.min(longitudes[0], longitudes[1])).lte(Math.max(longitudes[0], longitudes[1])));
}

return mongoTemplate.count(query, Map.class, collectionName);
}

@Override
public void add(OdeBsmData item) {
mongoTemplate.save(item, collectionName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,26 @@ public ResponseEntity<List<OdeBsmData>> findBSMs(
return ResponseEntity.ok(geoData);
}
}

@CrossOrigin(origins = "http://localhost:3000")
@RequestMapping(value = "/bsm/count", method = RequestMethod.GET, produces = "application/json")
@PreAuthorize("hasRole('USER') || hasRole('ADMIN')")
public ResponseEntity<Long> countBSMs(
@RequestParam(name = "origin_ip", required = false) String originIp,
@RequestParam(name = "vehicle_id", required = false) String vehicleId,
@RequestParam(name = "start_time_utc_millis", required = false) Long startTime,
@RequestParam(name = "end_time_utc_millis", required = false) Long endTime,
@RequestParam(name = "latitude", required = false) Double latitude,
@RequestParam(name = "longitude", required = false) Double longitude,
@RequestParam(name = "distance", required = false) Double distanceInMeters,
@RequestParam(name = "test", required = false, defaultValue = "false") boolean testData) {

if (testData) {
return ResponseEntity.ok(10L);
} else {
long counts = odeBsmJsonRepo.countOdeBsmDataGeo(originIp, vehicleId, startTime, endTime, longitude, latitude, distanceInMeters);
logger.info("Found " + counts + " BSMs");
return ResponseEntity.ok(counts);
}
}
}

0 comments on commit 7fd4eeb

Please sign in to comment.