Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • nikkite99/fog-computing
1 result
Show changes
Commits on Source (2)
# Stage 1: Build the entire Maven project
FROM maven:3.8.4-openjdk-17 AS build
# Set the working directory
WORKDIR /app
# Copy the entire project
COPY . .
# Build the project, including all modules
RUN mvn clean package
# Stage 2: Run the specific child module
FROM openjdk:17-jdk-slim
# Set the working directory
# Copy the built JAR of the child module from the build stage
COPY --from=build /app/cloud/target/cloud-shaded.jar /app/cloud-shaded.jar
# Command to run the application
ENTRYPOINT [ "java", "-jar", "/app/cloud-shaded.jar"]
\ No newline at end of file
......@@ -25,4 +25,31 @@
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<finalName>${project.artifactId}-shaded</finalName>
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.fogcomputing.CloudService</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
......@@ -21,7 +21,7 @@ public class Server implements Runnable, Closeable {
@Override
public void run() {
server.bind("tcp://localhost:%s".formatted(port));
server.bind("tcp://*:%s".formatted(port));
System.out.printf("Server listening on port %s...%n", port);
while (!Thread.currentThread().isInterrupted()) {
......
version: '3.9'
services:
usage-sensor:
usage:
ports:
- "5555:5555"
build:
context: ./sensors/usage
temperature-sensor:
networks:
- my_network
temperature:
ports:
- "5556:5556"
build:
context: ./sensors/temperature
networks:
- my_network
edge:
ports:
- "8080:8080"
build:
context: .
dockerfile: edge.Dockerfile
command: 'cloud:8080 temperature:5556 usage:5555'
networks:
- my_network
cloud:
ports:
- "8081:8081"
build:
context: .
dockerfile: cloud.Dockerfile
networks:
- my_network
networks:
my_network:
driver: bridge
\ No newline at end of file
# Stage 1: Build the entire Maven project
FROM maven:3.8.4-openjdk-17 AS build
# Set the working directory
WORKDIR /app
# Copy the entire project
COPY . .
# Build the project, including all modules
RUN mvn clean package
# Stage 2: Run the specific child module
FROM openjdk:17-jdk-slim
# Set the working directory
# Copy the built JAR of the child module from the build stage
COPY --from=build /app/edge/target/edge-shaded.jar /app/edge-shaded.jar
# Command to run the application
ENTRYPOINT [ "java", "-jar", "/app/edge-shaded.jar"]
\ No newline at end of file
......@@ -25,4 +25,31 @@
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<finalName>${project.artifactId}-shaded</finalName>
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.fogcomputing.EdgeService</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
......@@ -16,6 +16,12 @@ public class EdgeService implements Callable<Void> {
@CommandLine.Parameters(index = "0", description = "Please provide a cloud server address", defaultValue = "localhost:8080")
private String cloudServerAddress;
@CommandLine.Parameters(index = "1", description = "Please provide a temperature sensor address", defaultValue = "*:5556")
private String temperatureSensorAddress;
@CommandLine.Parameters(index = "2", description = "Please provide a usage sensor address", defaultValue = "*:5555")
private String usageSensorAddress;
@Override
public Void call() throws Exception {
......@@ -30,8 +36,8 @@ public class EdgeService implements Callable<Void> {
return null;
}
private static void startSensordataCollector(ConcurrentLinkedQueue<SensorData> messageBuffer, ExecutorService executor) {
SensorDataCollector sensorDataCollector = new SensorDataCollector(messageBuffer);
private void startSensordataCollector(ConcurrentLinkedQueue<SensorData> messageBuffer, ExecutorService executor) {
SensorDataCollector sensorDataCollector = new SensorDataCollector(messageBuffer, temperatureSensorAddress, usageSensorAddress);
executor.submit(sensorDataCollector);
}
......
......@@ -11,17 +11,17 @@ import org.zeromq.ZMQ;
@RequiredArgsConstructor
public class SensorDataCollector implements Runnable {
private static final int USAGE_TOPIC_PORT = 5555;
private static final int TEMPERATURE_TOPIC_PORT = 5556;
private static final String USAGE_TOPIC = "USAGE";
private static final String TEMPERATURE_TOPIC = "TEMPERATURE";
private final ConcurrentLinkedQueue<SensorData> messageBuffer;
private final String temperatureSensorAdress;
private final String usageSensorAddress;
@Override
public void run() {
try (ZMQ.Socket usageSub = createSubscriber(USAGE_TOPIC_PORT, USAGE_TOPIC);
ZMQ.Socket temperatureSub = createSubscriber(TEMPERATURE_TOPIC_PORT, TEMPERATURE_TOPIC);)
try (ZMQ.Socket usageSub = createSubscriber(USAGE_TOPIC);
ZMQ.Socket temperatureSub = createSubscriber(TEMPERATURE_TOPIC);)
{
while (!Thread.currentThread().isInterrupted()) {
// we do sync read of both sensors
......@@ -33,10 +33,16 @@ public class SensorDataCollector implements Runnable {
}
}
private static ZMQ.Socket createSubscriber(int port, String topic) {
private ZMQ.Socket createSubscriber(String topic) {
System.out.println(usageSensorAddress);
ZContext context = ZContextProvider.getInstance();
ZMQ.Socket subscriber = context.createSocket(SocketType.SUB);
subscriber.connect("tcp://*:%d".formatted(port));
if(topic == USAGE_TOPIC) {
System.out.println(usageSensorAddress);
subscriber.connect("tcp://%s".formatted(usageSensorAddress));
} else {
subscriber.connect("tcp://%s".formatted(temperatureSensorAdress));
}
subscriber.subscribe(topic.getBytes());
return subscriber;
}
......