Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions Logger/src/com/paradox/logger/LoggerApplication.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.paradox.logger;

import com.paradox.logger.services.LoggerService;
import com.paradox.logger.services.LogClient;

public class LoggerApplication {
public static void main(String[] args) {
LogClient logger = new LoggerService();
logger.start("1", 1);
logger.poll();
logger.start("3", 2);
logger.poll();
logger.end("1", 3);
logger.poll();
logger.start("2", 3);
logger.poll();
logger.end("2",4);
logger.poll();
logger.end("3", 6);
logger.poll();
logger.poll();
logger.poll();
}
}
12 changes: 12 additions & 0 deletions Logger/src/com/paradox/logger/ProcessComparator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.paradox.logger;

import com.paradox.logger.models.Process;

import java.util.Comparator;

public class ProcessComparator implements Comparator<Process> {
@Override
public int compare(Process o1, Process o2) {
return Long.compare(o1.getStart(), o2.getStart());
}
}
29 changes: 29 additions & 0 deletions Logger/src/com/paradox/logger/models/Process.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.paradox.logger.models;

public class Process {
private final String id;
private final long start;
private long end;

public Process(String id, long start) {
this.id = id;
this.start = start;
this.end = -1;
}

public String getId() {
return id;
}

public long getStart() {
return start;
}

public long getEnd() {
return end;
}

public void setEnd(long end) {
this.end = end;
}
}
7 changes: 7 additions & 0 deletions Logger/src/com/paradox/logger/services/LogClient.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.paradox.logger.services;

public interface LogClient {
void start(String processId, long timestamp);
void end(String processId, long timestamp);
String poll();
}
42 changes: 42 additions & 0 deletions Logger/src/com/paradox/logger/services/LoggerService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.paradox.logger.services;

import com.paradox.logger.ProcessComparator;
import com.paradox.logger.models.Process;
import com.paradox.logger.services.LogClient;

import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;

public class LoggerService implements LogClient {
private Map<String, Long> startMap;
private PriorityQueue<Process> processQueue;

public LoggerService() {
startMap = new HashMap<>();
processQueue = new PriorityQueue<>(new ProcessComparator());
}

@Override
public void start(String processId, long timestamp) {
startMap.put(processId, timestamp);
}

@Override
public void end(String processId, long timestamp) {
if (!startMap.containsKey(processId)) {
throw new Error("Cannot end process as it is not started");
}
Process process = new Process(processId, startMap.get(processId));
process.setEnd(timestamp);
processQueue.offer(process);
}

@Override
public String poll() {
if (processQueue.isEmpty()) {
throw new Error("No process remaining");
}
return processQueue.poll().toString();
}
}