forked from j62/ctbrec
Add methods to get the free and total space
This commit is contained in:
parent
91ea7d65a3
commit
8fdb24bad1
|
@ -5,6 +5,7 @@ import static ctbrec.Recording.STATUS.*;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FilenameFilter;
|
import java.io.FilenameFilter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.nio.file.FileStore;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.security.InvalidKeyException;
|
import java.security.InvalidKeyException;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
@ -745,4 +746,20 @@ public class LocalRecorder implements Recorder {
|
||||||
public HttpClient getHttpClient() {
|
public HttpClient getHttpClient() {
|
||||||
return client;
|
return client;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getTotalSpaceBytes() throws IOException {
|
||||||
|
return getRecordingsFileStore().getTotalSpace();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getFreeSpaceBytes() throws IOException {
|
||||||
|
return getRecordingsFileStore().getUsableSpace();
|
||||||
|
}
|
||||||
|
|
||||||
|
private FileStore getRecordingsFileStore() throws IOException {
|
||||||
|
File recordingsDir = new File(Config.getInstance().getSettings().recordingsDir);
|
||||||
|
FileStore store = Files.getFileStore(recordingsDir.toPath());
|
||||||
|
return store;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,4 +42,18 @@ public interface Recorder {
|
||||||
public List<Model> getOnlineModels();
|
public List<Model> getOnlineModels();
|
||||||
|
|
||||||
public HttpClient getHttpClient();
|
public HttpClient getHttpClient();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the total size of the filesystem we are recording to
|
||||||
|
* @return the total size in bytes
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public long getTotalSpaceBytes() throws IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the free space left on the filesystem we are recording to
|
||||||
|
* @return the free space in bytes
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public long getFreeSpaceBytes() throws IOException;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import java.time.Instant;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.json.JSONObject;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -45,6 +46,8 @@ public class RemoteRecorder implements Recorder {
|
||||||
private List<Model> models = Collections.emptyList();
|
private List<Model> models = Collections.emptyList();
|
||||||
private List<Model> onlineModels = Collections.emptyList();
|
private List<Model> onlineModels = Collections.emptyList();
|
||||||
private List<Site> sites;
|
private List<Site> sites;
|
||||||
|
private long spaceTotal = -1;
|
||||||
|
private long spaceFree = -1;
|
||||||
|
|
||||||
private Config config;
|
private Config config;
|
||||||
private HttpClient client;
|
private HttpClient client;
|
||||||
|
@ -150,10 +153,35 @@ public class RemoteRecorder implements Recorder {
|
||||||
while(running) {
|
while(running) {
|
||||||
syncModels();
|
syncModels();
|
||||||
syncOnlineModels();
|
syncOnlineModels();
|
||||||
|
syncSpace();
|
||||||
sleep();
|
sleep();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void syncSpace() {
|
||||||
|
try {
|
||||||
|
String msg = "{\"action\": \"space\"}";
|
||||||
|
RequestBody body = RequestBody.create(JSON, msg);
|
||||||
|
Request.Builder builder = new Request.Builder()
|
||||||
|
.url("http://" + config.getSettings().httpServer + ":" + config.getSettings().httpPort + "/rec")
|
||||||
|
.post(body);
|
||||||
|
addHmacIfNeeded(msg, builder);
|
||||||
|
Request request = builder.build();
|
||||||
|
try(Response response = client.execute(request)) {
|
||||||
|
String json = response.body().string();
|
||||||
|
if(response.isSuccessful()) {
|
||||||
|
JSONObject resp = new JSONObject(json);
|
||||||
|
spaceTotal = resp.getLong("spaceTotal");
|
||||||
|
spaceFree = resp.getLong("spaceFree");
|
||||||
|
} else {
|
||||||
|
LOG.error("Couldn't synchronize with server. HTTP status: {} - {}", response.code(), json);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException | InvalidKeyException | NoSuchAlgorithmException | IllegalStateException e) {
|
||||||
|
LOG.error("Couldn't synchronize with server", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void syncModels() {
|
private void syncModels() {
|
||||||
try {
|
try {
|
||||||
String msg = "{\"action\": \"list\"}";
|
String msg = "{\"action\": \"list\"}";
|
||||||
|
@ -362,4 +390,14 @@ public class RemoteRecorder implements Recorder {
|
||||||
public HttpClient getHttpClient() {
|
public HttpClient getHttpClient() {
|
||||||
return client;
|
return client;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getTotalSpaceBytes() throws IOException {
|
||||||
|
return spaceTotal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getFreeSpaceBytes() {
|
||||||
|
return spaceFree;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -137,9 +137,13 @@ public class RecorderServlet extends AbstractCtbrecServlet {
|
||||||
response = "{\"status\": \"success\", \"msg\": \"Recording resumed\"}";
|
response = "{\"status\": \"success\", \"msg\": \"Recording resumed\"}";
|
||||||
resp.getWriter().write(response);
|
resp.getWriter().write(response);
|
||||||
break;
|
break;
|
||||||
|
case "space":
|
||||||
|
response = "{\"status\": \"success\", \"spaceTotal\": "+recorder.getTotalSpaceBytes()+", \"spaceFree\": "+recorder.getFreeSpaceBytes()+"}";
|
||||||
|
resp.getWriter().write(response);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
resp.setStatus(SC_BAD_REQUEST);
|
resp.setStatus(SC_BAD_REQUEST);
|
||||||
response = "{\"status\": \"error\", \"msg\": \"Unknown action\"}";
|
response = "{\"status\": \"error\", \"msg\": \"Unknown action ["+request.action+"]\"}";
|
||||||
resp.getWriter().write(response);
|
resp.getWriter().write(response);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue