queues, and posting to db works
This commit is contained in:
@@ -15,7 +15,11 @@
|
||||
<artifactId>gson</artifactId>
|
||||
<version>2.11.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.javalin</groupId>
|
||||
<artifactId>javalin</artifactId>
|
||||
<version>6.3.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hibernate.orm</groupId>
|
||||
<artifactId>hibernate-core</artifactId>
|
||||
|
||||
@@ -1,16 +1,59 @@
|
||||
package io.github.lumijiez;
|
||||
|
||||
import io.github.lumijiez.data.Data;
|
||||
import io.github.lumijiez.data.entities.PushData;
|
||||
import io.github.lumijiez.raft.Raft;
|
||||
import io.javalin.Javalin;
|
||||
import io.javalin.http.Context;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
public class Main {
|
||||
public static final String HOST = System.getenv().getOrDefault("HOSTNAME", "localhost");
|
||||
public static final int PORT = Integer.parseInt(System.getenv().getOrDefault("UDP_PORT", "8084"));
|
||||
public static final int HTTP_PORT = Integer.parseInt(System.getenv().getOrDefault("PORT", "8080"));
|
||||
|
||||
private static final Logger logger = LogManager.getLogger(Main.class);
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
Thread raftThread = new Thread(() -> {
|
||||
Raft raft = new Raft();
|
||||
Thread.currentThread().join();
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
try {
|
||||
Thread.currentThread().join();
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
logger.error("Raft thread interrupted", e);
|
||||
}
|
||||
});
|
||||
raftThread.start();
|
||||
|
||||
Javalin app = Javalin.create().start(HTTP_PORT);
|
||||
|
||||
app.post("/push", Main::handlePush);
|
||||
|
||||
logger.info("HTTP server started on port {}", HTTP_PORT);
|
||||
}
|
||||
|
||||
private static void handlePush(Context ctx) {
|
||||
String data = ctx.body();
|
||||
logger.info("Received data for push: {}", data);
|
||||
|
||||
EntityManager entityManager = Data.getEntityManager();
|
||||
try {
|
||||
entityManager.getTransaction().begin();
|
||||
|
||||
PushData entity = new PushData(HOST + ":" + PORT, data);
|
||||
entityManager.persist(entity);
|
||||
|
||||
entityManager.getTransaction().commit();
|
||||
ctx.status(200).result("Data pushed successfully");
|
||||
} catch (Exception e) {
|
||||
logger.error("Error saving data to database", e);
|
||||
entityManager.getTransaction().rollback();
|
||||
ctx.status(500).result("Internal Server Error");
|
||||
} finally {
|
||||
entityManager.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
package io.github.lumijiez.data.entities;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
|
||||
@Entity
|
||||
@Table(name = "push_data")
|
||||
public class PushData {
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String nodeAddress;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String data;
|
||||
|
||||
public PushData() {
|
||||
}
|
||||
|
||||
public PushData(String nodeAddress, String data) {
|
||||
this.nodeAddress = nodeAddress;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getNodeAddress() {
|
||||
return nodeAddress;
|
||||
}
|
||||
|
||||
public void setNodeAddress(String nodeAddress) {
|
||||
this.nodeAddress = nodeAddress;
|
||||
}
|
||||
|
||||
public String getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public void setData(String data) {
|
||||
this.data = data;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
package io.github.lumijiez.data.entities;
|
||||
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name="users")
|
||||
public class User {
|
||||
|
||||
@Id
|
||||
private Long id;
|
||||
private String name;
|
||||
private String email;
|
||||
|
||||
public User() {}
|
||||
|
||||
public User(Long id, String name, String email) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public void setEmail(String email) {
|
||||
this.email = email;
|
||||
}
|
||||
}
|
||||
@@ -135,7 +135,7 @@ public class Raft {
|
||||
|
||||
String jsonBody = String.format(
|
||||
"{\"leaderHost\": \"%s\", \"leaderPort\": %d}",
|
||||
selfAddress.split(":")[0], selfPort
|
||||
selfAddress.split(":")[0], Main.HTTP_PORT
|
||||
);
|
||||
|
||||
try (OutputStream os = connection.getOutputStream()) {
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<persistence-unit name="mainUnit" transaction-type="RESOURCE_LOCAL">
|
||||
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
|
||||
|
||||
<class>io.github.lumijiez.data.entities.User</class>
|
||||
<class>io.github.lumijiez.data.entities.PushData</class>
|
||||
|
||||
<exclude-unlisted-classes>false</exclude-unlisted-classes>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user