Skip to content

Commit

Permalink
Updated basic IT, IN PROGRESS. Routing refs returning null list
Browse files Browse the repository at this point in the history
  • Loading branch information
zack-rma committed Dec 14, 2024
1 parent 8456cf6 commit 9e1dee5
Show file tree
Hide file tree
Showing 3 changed files with 411 additions and 104 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.TimeZone;
import java.util.Vector;

import javax.annotation.security.RolesAllowed;
import javax.servlet.http.HttpServletRequest;
Expand All @@ -35,17 +36,20 @@
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import decodes.db.DataSource;
import decodes.db.DatabaseException;
import decodes.db.DatabaseIO;
import decodes.db.RoutingSpec;
import decodes.db.RoutingSpecList;
import decodes.db.ScheduleEntry;
import decodes.db.ScheduleEntryStatus;
import decodes.polling.DacqEvent;
import decodes.sql.DbKey;
import decodes.tsdb.DbIoException;
import opendcs.dai.DacqEventDAI;
import opendcs.dai.ScheduleEntryDAI;
import org.opendcs.odcsapi.beans.ApiRouting;
import org.opendcs.odcsapi.beans.ApiRoutingExecStatus;
import org.opendcs.odcsapi.beans.ApiRoutingRef;
import org.opendcs.odcsapi.beans.ApiScheduleEntry;
import org.opendcs.odcsapi.beans.ApiScheduleEntryRef;
Expand All @@ -68,6 +72,7 @@ public Response getRoutingRefs() throws DbException
{
try
{
//TODO: Fix this endpoint. Currently, it is returning an empty list.
DatabaseIO dbio = getLegacyDatabase();
RoutingSpecList rsList = new RoutingSpecList();
dbio.readRoutingSpecList(rsList);
Expand Down Expand Up @@ -159,16 +164,42 @@ static RoutingSpec map(ApiRouting routing) throws DbException
try
{
RoutingSpec spec = new RoutingSpec();
spec.setId(DbKey.createDbKey(routing.getRoutingId()));
if (routing.getRoutingId() != null)
{
spec.setId(DbKey.createDbKey(routing.getRoutingId()));
}
spec.setName(routing.getName());
spec.usePerformanceMeasurements = false;
spec.lastModifyTime = routing.getLastModified();
if (routing.getOutputTZ() != null)
{
spec.outputTimeZoneAbbr = routing.getOutputTZ();
spec.outputTimeZone = TimeZone.getTimeZone(ZoneId.of(routing.getOutputTZ()));
}
routing.getNetlistNames().forEach(spec::addNetworkListName);
spec.outputFormat = routing.getOutputFormat();
spec.enableEquations = routing.isEnableEquations();
spec.presentationGroupName = routing.getPresGroupName();
spec.isProduction = routing.isProduction();
spec.consumerArg = routing.getDestinationArg();
spec.consumerType = routing.getDestinationType();
if (routing.getSince() != null)
{
spec.sinceTime = routing.getSince();
}
if (routing.getUntil() != null)
{
spec.untilTime = routing.getUntil();
}
spec.setProperties(routing.getProperties());
if (routing.getDataSourceId() != null)
{
DataSource dataSource = new DataSource();
dataSource.setId(DbKey.createDbKey(routing.getDataSourceId()));
dataSource.setName(routing.getDataSourceName());
spec.dataSource = dataSource;
}
spec.networkListNames = new Vector<>(routing.getNetlistNames());
return spec;
}
catch(DatabaseException e)
Expand Down Expand Up @@ -276,7 +307,9 @@ public Response postSchedule(ApiScheduleEntry schedule)
{
ScheduleEntry entry = map(schedule);
dai.writeScheduleEntry(entry);
return Response.status(HttpServletResponse.SC_OK).build();
return Response.status(HttpServletResponse.SC_OK)
.entity(String.format("Successfully stored schedule entry with name: %s", schedule.getName()))
.build();
}
catch (DbIoException e)
{
Expand All @@ -288,17 +321,25 @@ static ScheduleEntry map(ApiScheduleEntry schedule) throws DbException
{
try
{
ScheduleEntry entry = new ScheduleEntry(DbKey.createDbKey(schedule.getSchedEntryId()));
ScheduleEntry entry = new ScheduleEntry(schedule.getName());
if (schedule.getSchedEntryId() != null)
{
entry.setId(DbKey.createDbKey(schedule.getSchedEntryId()));
}
entry.setStartTime(schedule.getStartTime());
entry.setTimezone(schedule.getTimeZone());
entry.setLoadingAppId(DbKey.createDbKey(schedule.getAppId()));
entry.setRoutingSpecId(DbKey.createDbKey(schedule.getRoutingSpecId()));
entry.setLoadingAppName(schedule.getAppName());
entry.setRoutingSpecName(schedule.getRoutingSpecName());
if (schedule.getAppId() != null)
{
entry.setLoadingAppId(DbKey.createDbKey(schedule.getAppId()));
entry.setLoadingAppName(schedule.getAppName());
}
if (schedule.getRoutingSpecId() != null)
{
entry.setRoutingSpecId(DbKey.createDbKey(schedule.getRoutingSpecId()));
entry.setRoutingSpecName(schedule.getRoutingSpecName());
}
entry.setRunInterval(schedule.getRunInterval());
entry.setName(schedule.getName());
entry.setLastModified(schedule.getLastModified());
entry.setId(DbKey.createDbKey(schedule.getSchedEntryId()));
return entry;
}
catch (DatabaseException e)
Expand Down Expand Up @@ -336,12 +377,33 @@ public Response deleteSchedule(@QueryParam("scheduleid") Long scheduleId)
public Response getRoutingStats()
throws DbException
{
// try (DbInterface dbi = new DbInterface();
// ApiRoutingDAO dao = new ApiRoutingDAO(dbi))
// {
// return ApiHttpUtil.createResponse(dao.getRsStatus());
// }
return Response.status(HttpServletResponse.SC_NOT_IMPLEMENTED).build();
try (ScheduleEntryDAI dai = getLegacyDatabase().makeScheduleEntryDAO())
{
return Response.status(HttpServletResponse.SC_OK)
.entity(map(dai.listScheduleEntries(null))).build();
}
catch (DbIoException e)
{
throw new DbException("Unable to retrieve routing status", e);
}
}

static ArrayList<ApiScheduleEntryRef> map(ArrayList<ScheduleEntry> entries)
{
ArrayList<ApiScheduleEntryRef> refs = new ArrayList<>();
for (ScheduleEntry entry : entries)
{
ApiScheduleEntryRef ref = new ApiScheduleEntryRef();
ref.setSchedEntryId(entry.getId().getValue());
ref.setEnabled(entry.isEnabled());
ref.setAppName(entry.getLoadingAppName());
ref.setName(entry.getName());
ref.setLastModified(entry.getLastModified());
ref.setRoutingSpecName(entry.getRoutingSpecName());
refs.add(ref);
}

return refs;
}

@GET
Expand All @@ -353,13 +415,37 @@ public Response getRoutingExecStatus(@QueryParam("scheduleentryid") Long schedul
{
if (scheduleEntryId == null)
throw new WebAppException(ErrorCodes.MISSING_ID, "missing required scheduleentryid argument.");

// try (DbInterface dbi = new DbInterface();
// ApiRoutingDAO dao = new ApiRoutingDAO(dbi))
// {
// return ApiHttpUtil.createResponse(dao.getRoutingExecStatus(scheduleEntryId));
// }
return Response.status(HttpServletResponse.SC_NOT_IMPLEMENTED).build();

try (ScheduleEntryDAI dai = getLegacyDatabase().makeScheduleEntryDAO())
{
ScheduleEntry entry = new ScheduleEntry(DbKey.createDbKey(scheduleEntryId));
return Response.status(HttpServletResponse.SC_OK)
.entity(statusMap(dai.readScheduleStatus(entry))).build();
}
catch (DbIoException e)
{
throw new DbException("Unable to retrieve routing exec status", e);
}
}

static ArrayList<ApiRoutingExecStatus> statusMap(ArrayList<ScheduleEntryStatus> statuses)
{
ArrayList<ApiRoutingExecStatus> execStatuses = new ArrayList<>();
for (ScheduleEntryStatus status : statuses)
{
ApiRoutingExecStatus execStatus = new ApiRoutingExecStatus();
execStatus.setScheduleEntryId(status.getScheduleEntryId().getValue());
execStatus.setHostname(status.getHostname());
execStatus.setNumErrors(status.getNumDecodesErrors());
execStatus.setRunStatus(status.getRunStatus());
execStatus.setRunStop(status.getRunStop());
execStatus.setRunStart(status.getRunStart());
execStatus.setNumPlatforms(status.getNumPlatforms());
execStatus.setNumMessages(status.getNumMessages());
execStatus.setLastActivity(status.getLastModified());
execStatuses.add(execStatus);
}
return execStatuses;
}

@GET
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@
import decodes.db.RoutingSpec;
import decodes.db.RoutingSpecList;
import decodes.db.ScheduleEntry;
import decodes.db.ScheduleEntryStatus;
import decodes.sql.DbKey;
import org.junit.jupiter.api.Test;
import org.opendcs.odcsapi.beans.ApiRouting;
import org.opendcs.odcsapi.beans.ApiRoutingExecStatus;
import org.opendcs.odcsapi.beans.ApiRoutingRef;
import org.opendcs.odcsapi.beans.ApiScheduleEntry;
import org.opendcs.odcsapi.beans.ApiScheduleEntryRef;
Expand All @@ -22,6 +24,7 @@
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.fail;
import static org.opendcs.odcsapi.res.RoutingResources.map;
import static org.opendcs.odcsapi.res.RoutingResources.statusMap;

final class RoutingResourcesTest
{
Expand Down Expand Up @@ -130,6 +133,69 @@ void testScheduleEntryMap() throws Exception
assertEquals(scheduleEntry.getRunInterval(), apiScheduleEntry.getRunInterval());
}

@Test
void testApiScheduleEntryMap()
{
ArrayList<ScheduleEntry> scheduleEntries = new ArrayList<>();
ScheduleEntry scheduleEntry = new ScheduleEntry(DbKey.createDbKey(1234L));
scheduleEntry.setName("TestScheduleEntry");
scheduleEntry.setLoadingAppName("TestAppName");
scheduleEntry.setRoutingSpecName("TestRoutingSpec");
scheduleEntry.setLastModified(Date.from(Instant.parse("2021-02-01T00:00:00Z")));
scheduleEntry.setLoadingAppId(DbKey.createDbKey(5678L));
scheduleEntry.setRoutingSpecId(DbKey.createDbKey(9012L));
scheduleEntry.setStartTime(Date.from(Instant.parse("2021-01-01T00:00:00Z")));
scheduleEntry.setEnabled(true);
scheduleEntry.setTimezone("UTC");
scheduleEntry.setRunInterval("1h");
scheduleEntries.add(scheduleEntry);

ArrayList<ApiScheduleEntryRef> results = map(scheduleEntries);

assertNotNull(results);
assertEquals(1, results.size());
ApiScheduleEntryRef result = results.get(0);
assertNotNull(result);
assertEquals(scheduleEntry.getKey().getValue(), result.getSchedEntryId());
assertEquals(scheduleEntry.getName(), result.getName());
assertEquals(scheduleEntry.getLoadingAppName(), result.getAppName());
assertEquals(scheduleEntry.getRoutingSpecName(), result.getRoutingSpecName());
assertEquals(scheduleEntry.getLastModified(), result.getLastModified());
}

@Test
void testRoutingStatusMap()
{
ArrayList<ScheduleEntryStatus> scheduleEntries = new ArrayList<>();
ScheduleEntryStatus scheduleEntry = new ScheduleEntryStatus(DbKey.createDbKey(1234L));
scheduleEntry.setScheduleEntryName("TestScheduleEntry");
scheduleEntry.setLastModified(Date.from(Instant.parse("2021-02-01T00:00:00Z")));
scheduleEntry.setHostname("TestHost");
scheduleEntry.setRunStatus("TestStatus");
scheduleEntry.setNumDecodesErrors(10);
scheduleEntry.setNumMessages(20);
scheduleEntry.setNumPlatforms(30);
scheduleEntry.setRunStop(Date.from(Instant.parse("2021-03-01T00:00:00Z")));
scheduleEntry.setRunStart(Date.from(Instant.parse("2021-02-01T00:00:00Z")));
scheduleEntry.setLastModified(Date.from(Instant.parse("2021-04-01T00:00:00Z")));
scheduleEntries.add(scheduleEntry);

ArrayList<ApiRoutingExecStatus> results = statusMap(scheduleEntries);
assertNotNull(results);
assertEquals(1, results.size());
ApiRoutingExecStatus result = results.get(0);
assertNotNull(result);
assertEquals(scheduleEntry.getScheduleEntryId().getValue(), result.getScheduleEntryId());
assertEquals(scheduleEntry.getHostname(), result.getHostname());
assertEquals(scheduleEntry.getRunStatus(), result.getRunStatus());
assertEquals(scheduleEntry.getNumDecodesErrors(), result.getNumErrors());
assertEquals(scheduleEntry.getNumMessages(), result.getNumMessages());
assertEquals(scheduleEntry.getNumPlatforms(), result.getNumPlatforms());
assertEquals(scheduleEntry.getRunStop(), result.getRunStop());
assertEquals(scheduleEntry.getRunStart(), result.getRunStart());
assertEquals(scheduleEntry.getLastModified(), result.getLastActivity());
}

private RoutingSpec buildRoutingSpec() throws Exception
{
RoutingSpec routingSpec = new RoutingSpec();
Expand Down
Loading

0 comments on commit 9e1dee5

Please sign in to comment.