Skip to content
Merged
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
1 change: 1 addition & 0 deletions src/main/java/telraam/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ public void run(AppConfiguration configuration, Environment environment) {
jersey.register(new LapResource(database.onDemand(LapDAO.class)));
jersey.register(new TeamResource(database.onDemand(TeamDAO.class), database.onDemand(BatonSwitchoverDAO.class)));
jersey.register(new LapSourceResource(database.onDemand(LapSourceDAO.class)));
jersey.register(new PositionSourceResource(database.onDemand(PositionSourceDAO.class)));
jersey.register(new BatonSwitchoverResource(database.onDemand(BatonSwitchoverDAO.class)));
jersey.register(new LapSourceSwitchoverResource(database.onDemand(LapSourceSwitchoverDAO.class)));
jersey.register(new AcceptedLapsResource());
Expand Down
20 changes: 20 additions & 0 deletions src/main/java/telraam/api/PositionSourceResource.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package telraam.api;

import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import telraam.database.daos.DAO;
import telraam.database.models.PositionSource;


import java.awt.*;

@Path("/position-source")
@Tag(name = "Position Source")
@Produces(MediaType.APPLICATION_JSON)
public class PositionSourceResource extends AbstractListableResource<PositionSource> {
public PositionSourceResource(DAO<PositionSource> dao) {
super(dao);
}
}
27 changes: 27 additions & 0 deletions src/main/java/telraam/database/daos/PositionSourceDAO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package telraam.database.daos;

import org.jdbi.v3.sqlobject.config.RegisterBeanMapper;
import org.jdbi.v3.sqlobject.customizer.Bind;
import org.jdbi.v3.sqlobject.customizer.BindBean;
import org.jdbi.v3.sqlobject.statement.GetGeneratedKeys;
import org.jdbi.v3.sqlobject.statement.SqlQuery;
import org.jdbi.v3.sqlobject.statement.SqlUpdate;
import telraam.database.models.PositionSource;

import java.util.List;
import java.util.Optional;

public interface PositionSourceDAO extends DAO<PositionSource> {
@Override
@SqlQuery("SELECT * FROM position_source")
@RegisterBeanMapper(PositionSource.class)
List<PositionSource> getAll();

@SqlUpdate("INSERT INTO position_source (name) VALUES (:name)")
@GetGeneratedKeys({"id"})
int insert(@BindBean PositionSource positionSource);

@SqlQuery("SELECT * FROM position_source WHERE name = :name")
@RegisterBeanMapper(PositionSource.class)
Optional<PositionSource> getByName(@Bind("name") String name);
}
17 changes: 17 additions & 0 deletions src/main/java/telraam/database/models/PositionSource.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package telraam.database.models;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class PositionSource {
private Integer id;
private String name;

public PositionSource(String name) {
this.name = name;
}
}
10 changes: 8 additions & 2 deletions src/main/java/telraam/logic/positioner/PositionSender.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,22 @@
import telraam.websocket.WebSocketMessageSingleton;

import java.util.List;
import java.util.Map;

public class PositionSender {
private final WebSocketMessage<List<Position>> message = new WebSocketMessage<>();
private final String name;

public PositionSender() {
public PositionSender(String name) {
this.message.setTopic("position");
this.name = name;
}

public void send(List<Position> positions) {
this.message.setData(positions);
Map<String, Object> data = Map.of(
"positioner", this.name,
"positions", positions
);
WebSocketMessageSingleton.getInstance().sendToAll(this.message);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@

import org.jdbi.v3.core.Jdbi;
import telraam.database.daos.BatonSwitchoverDAO;
import telraam.database.daos.PositionSourceDAO;
import telraam.database.daos.StationDAO;
import telraam.database.daos.TeamDAO;
import telraam.database.models.BatonSwitchover;
import telraam.database.models.Detection;
import telraam.database.models.Station;
import telraam.database.models.Team;
import telraam.database.models.*;
import telraam.logic.positioner.Position;
import telraam.logic.positioner.PositionSender;
import telraam.logic.positioner.Positioner;
Expand All @@ -20,6 +18,7 @@

public class Nostradamus implements Positioner {
private static final Logger logger = Logger.getLogger(Nostradamus.class.getName());
private final String SOURCE_NAME = "nostradamus";
private final int INTERVAL_CALCULATE_MS = 500; // How often to handle new detections (in milliseconds)
private final int INTERVAL_FETCH_MS = 10000; // Interval between fetching baton switchovers (in milliseconds)
private final int INTERVAL_DETECTIONS_MS = 3000; // Amount of milliseconds to group detections by
Expand All @@ -38,6 +37,12 @@ public class Nostradamus implements Positioner {

public Nostradamus(Jdbi jdbi) {
this.jdbi = jdbi;

PositionSourceDAO positionSourceDAO = jdbi.onDemand(PositionSourceDAO.class);
if (positionSourceDAO.getByName(SOURCE_NAME).isEmpty()) {
positionSourceDAO.insert(new PositionSource(SOURCE_NAME));
}

this.newDetections = new ArrayList<>();
this.detectionLock = new ReentrantLock();
this.dataLock = new ReentrantLock();
Expand All @@ -46,7 +51,7 @@ public Nostradamus(Jdbi jdbi) {
this.batonToTeam = new HashMap<>();
this.teamData = getTeamData();

this.positionSender = new PositionSender();
this.positionSender = new PositionSender(SOURCE_NAME);

new Thread(this::fetch).start();
new Thread(this::calculatePosition).start();
Expand Down
6 changes: 6 additions & 0 deletions src/main/resources/db/migration/V17__Add_position_source.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
create table position_source
(
id serial not null
constraint position_source_pk primary key,
name varchar(255) not null unique
);
Loading