Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added endpoint : /command/removeAllFromCacheOrByVehicleId #4

Open
wants to merge 2 commits into
base: goeuropa_2_veh_to_blocks
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -533,4 +533,13 @@ public void removeVehicle(String vehicleId) {
logger.debug("Removing from VehicleDataCache vehiclesMap vehicleId={}", vehicleId);
vehiclesMap.remove(vehicleId);
}

/**
* Removes all vehicles from the vehiclesMap
*
*/
public void removeVehicles() {
logger.debug("Removing all vehicles from VehicleDataCache vehiclesMap");
vehiclesMap.clear();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/*
/*
* This file is part of Transitime.org
*
* Transitime.org is free software: you can redistribute it and/or modify
Expand Down Expand Up @@ -32,7 +32,6 @@
* Defines the RMI interface used for obtaining cache runtime information.
*
* @author Sean Og Crudden
*
*/
public interface CacheQueryInterface extends Remote {

Expand Down Expand Up @@ -119,4 +118,23 @@ public List<IpcHoldingTimeCacheKey> getHoldingTimeCacheKeys()
*/
public Double getKalmanErrorValue(String tripId, Integer stopPathIndex) throws RemoteException;

/**
* Return the removed id of vehicle if it does exist.
*
* @param vehicleId
* @return String with removed vehicle id
* @throws RemoteException
*/
String removeVehicleFromCacheByVehicleId(String vehicleId)
throws RemoteException;

/**
* Return message of success clear cache of vehicles.
*
* @param vehicleId
* @return String with removed vehicle id
* @throws RemoteException
*/
String removeAllVehiclesFromCache()
throws RemoteException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,24 +14,10 @@

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.transitclock.core.dataCache.ErrorCacheFactory;
import org.transitclock.core.dataCache.HistoricalAverage;
import org.transitclock.core.dataCache.HoldingTimeCache;
import org.transitclock.core.dataCache.HoldingTimeCacheKey;
import org.transitclock.core.dataCache.IpcArrivalDepartureComparator;
import org.transitclock.core.dataCache.KalmanErrorCacheKey;
import org.transitclock.core.dataCache.StopArrivalDepartureCacheFactory;
import org.transitclock.core.dataCache.StopArrivalDepartureCacheKey;
import org.transitclock.core.dataCache.TripKey;
import org.transitclock.core.dataCache.*;
import org.transitclock.core.dataCache.frequency.FrequencyBasedHistoricalAverageCache;
import org.transitclock.core.dataCache.scheduled.ScheduleBasedHistoricalAverageCache;
import org.transitclock.core.dataCache.StopPathCacheKey;
import org.transitclock.core.dataCache.TripDataHistoryCacheFactory;
import org.transitclock.ipc.data.IpcArrivalDeparture;
import org.transitclock.ipc.data.IpcHistoricalAverage;
import org.transitclock.ipc.data.IpcHistoricalAverageCacheKey;
import org.transitclock.ipc.data.IpcHoldingTimeCacheKey;
import org.transitclock.ipc.data.IpcKalmanErrorCacheKey;
import org.transitclock.ipc.data.*;
import org.transitclock.ipc.interfaces.CacheQueryInterface;
import org.transitclock.ipc.rmi.AbstractServer;

Expand Down Expand Up @@ -189,6 +175,7 @@ public Double getKalmanErrorValue(String tripId, Integer stopPathIndex) throws R
return result;
}


@Override
public List<IpcKalmanErrorCacheKey> getKalmanErrorCacheKeys() throws RemoteException {
List<KalmanErrorCacheKey> keys = ErrorCacheFactory.getInstance().getKeys();
Expand Down Expand Up @@ -219,4 +206,27 @@ public List<IpcHistoricalAverageCacheKey> getFrequencyBasedHistoricalAverageCach
FrequencyBasedHistoricalAverageCache.getInstance();
return null;
}

@Override
public String removeVehicleFromCacheByVehicleId(String vehicleId) throws RemoteException {

IpcVehicleComplete foundOrNull = VehicleDataCache.getInstance()
.getVehicle(vehicleId);
if (foundOrNull != null && foundOrNull.getAvl().getVehicleId().equals(vehicleId))
{
VehicleDataCache.getInstance().removeVehicle(vehicleId);
return vehicleId;
}
return "Unsuccess";
}

@Override
public String removeAllVehiclesFromCache() throws RemoteException {
VehicleDataCache.getInstance().removeVehicles();
boolean isVehicleCacheClear = VehicleDataCache
.getInstance()
.getVehicles()
.isEmpty();
return "Cache clear : " + isVehicleCacheClear;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,23 +23,11 @@
import java.time.ZoneId;
import java.util.Date;
import java.util.List;
import javax.ws.rs.BeanParam;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.transitclock.api.data.ApiArrivalDepartures;
import org.transitclock.api.data.ApiCacheDetails;
import org.transitclock.api.data.ApiHistoricalAverage;
import org.transitclock.api.data.ApiHistoricalAverageCacheKeys;
import org.transitclock.api.data.ApiHoldingTime;
import org.transitclock.api.data.ApiHoldingTimeCacheKeys;
import org.transitclock.api.data.ApiKalmanErrorCacheKeys;
import org.transitclock.api.data.ApiPredictionsForStopPath;
import org.transitclock.api.data.*;
import org.transitclock.api.utils.StandardParameters;
import org.transitclock.api.utils.WebUtils;
import org.transitclock.ipc.data.IpcArrivalDeparture;
Expand Down Expand Up @@ -392,5 +380,37 @@ public Response getHoldingTime(@BeanParam StandardParameters stdParameters,
throw WebUtils.badRequestException(e.getMessage());
}
}


@Path("/command/clearAllCacheOrRemoveByVehicleId")
@POST
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Operation(summary = "Remove a vehicle from cache by id if it does exist or clean all vehicles.",
description = "Return the removed id of vehicle if it does exist or \"Cache clear\" if is cleaned all cache. +" +
"Throw exception if doesn't found id or is passed wrong argument.",
tags = {"cache"})
public Response deleteVehicleFromCache(@BeanParam StandardParameters stdParameters,
@Parameter(description = "Id of the vehicle or \"all\"", required = true)
@QueryParam(value = "allOrVehicleId") String allOrVehicleId) throws WebApplicationException {
try {
CacheQueryInterface cachequeryInterface = stdParameters.getCacheQueryInterface();

if (allOrVehicleId != null && !allOrVehicleId.equalsIgnoreCase("all")) {
String result = cachequeryInterface.removeVehicleFromCacheByVehicleId(allOrVehicleId);
if (result.equals(allOrVehicleId))
return stdParameters.createResponse(new ApiCommandAck(true, "Delete success. " + result));
else {
return stdParameters.createResponse(new ApiCommandAck(false,
"This id: " + allOrVehicleId + " does not exist in the cache"));
}
} else if (allOrVehicleId.equalsIgnoreCase("all")) {
String result = cachequeryInterface.removeAllVehiclesFromCache();
return stdParameters.createResponse(result);
}
return stdParameters.createResponse(new ApiCommandAck(false, "Something get wrong. Please, try again!"));

} catch (Exception e) {
// If problem getting result then return a Bad Request
throw WebUtils.badRequestException(e.getMessage());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1428,16 +1428,13 @@ public Response getActiveBlockByRouteNameWithVehicles(
Collection<IpcActiveBlock> activeBlocks = vehiclesInterface
.getActiveBlocksAndVehiclesByRouteName(routeName,
allowableBeforeTimeSecs);
VehiclesInterface inter = stdParameters.getVehiclesInterface();



for(IpcActiveBlock ipcActiveBlocks : activeBlocks) {
for(IpcVehicle ipcVehicle : ipcActiveBlocks.getVehicles()) {
for(IpcVehicleConfig iVC : vehiclesInterface.getVehicleConfigs()) {

if(iVC.getId().equals(ipcVehicle.getId())) {
ipcVehicle.setVehicleName(iVC.getName());

break;
}
}
Expand Down