Compare commits

...

4 Commits

Author SHA1 Message Date
392d10c587 Add git version to log and --version output 2025-05-25 23:37:01 -07:00
430b89bdda Remove some testing logs 2025-05-25 23:37:01 -07:00
2a7f9813a1 Fix log statement 2025-05-25 23:37:00 -07:00
553edc8b6c Add external program timeout as station setting
Leaving it without a UI implementation for now
2025-05-25 23:35:47 -07:00
5 changed files with 32 additions and 8 deletions

View File

@ -48,7 +48,7 @@ public class AboutController {
try { try {
properties.load(getClass().getClassLoader().getResourceAsStream("git.properties")); properties.load(getClass().getClassLoader().getResourceAsStream("git.properties"));
} catch (IOException e) { } catch (IOException e) {
logger.log(Level.SEVERE, "Failed to load main view", e); logger.log(Level.SEVERE, "Failed to load git information", e);
} }
versionTextField.setText(String.valueOf(properties.get("git.commit.id.full"))); versionTextField.setText(String.valueOf(properties.get("git.commit.id.full")));

View File

@ -13,9 +13,7 @@ public class HelpController {
@FXML @FXML
public void initialize() throws Exception { public void initialize() throws Exception {
logger.info("20250407T222451");
String url = HelpController.class.getResource("/help-index.html").toExternalForm(); String url = HelpController.class.getResource("/help-index.html").toExternalForm();
webView.getEngine().load(url); webView.getEngine().load(url);
logger.info("20250407T222456");
} }
} }

View File

@ -36,6 +36,7 @@ import java.util.logging.FileHandler;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.Optional; import java.util.Optional;
import java.util.Properties;
import javafx.application.Application; import javafx.application.Application;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
@ -50,8 +51,6 @@ public class Main extends Application {
public record StartParameters (Optional<NotificationController.NotificationParameters> notification) {} public record StartParameters (Optional<NotificationController.NotificationParameters> notification) {}
private static final Logger logger = Logger.getLogger(Main.class.getName()); private static final Logger logger = Logger.getLogger(Main.class.getName());
// TODO: get git info
private static final String VERSION = "0.0.1";
private static Path configPath = null; private static Path configPath = null;
private static Path statePath = null; private static Path statePath = null;
@ -130,6 +129,14 @@ public class Main extends Application {
primaryStage.titleProperty().bindBidirectional(controller.windowTitle); primaryStage.titleProperty().bindBidirectional(controller.windowTitle);
primaryStage.show(); primaryStage.show();
logger.info("Application started"); logger.info("Application started");
Properties properties = new Properties();
try {
properties.load(getClass().getClassLoader().getResourceAsStream("git.properties"));
logger.info("Application version: " + String.valueOf(properties.get("git.commit.id.full")));
} catch (IOException e) {
logger.log(Level.SEVERE, "Failed to load git information", e);
}
} }
} catch (IOException e) { } catch (IOException e) {
logger.log(Level.SEVERE, "Failed to load main view", e); logger.log(Level.SEVERE, "Failed to load main view", e);
@ -167,7 +174,13 @@ public class Main extends Application {
} }
if (parsedArgs.getVersionFlag()) { if (parsedArgs.getVersionFlag()) {
System.out.println("Numbers Station version " + VERSION); Properties properties = new Properties();
try {
properties.load(Main.class.getClassLoader().getResourceAsStream("git.properties"));
System.out.println(String.valueOf(properties.get("git.commit.id.full")));
} catch (IOException e) {
System.out.println("Failed to get git information");
}
System.exit(0); System.exit(0);
} }
@ -270,8 +283,8 @@ public class Main extends Application {
switch (loadedStation.getMessageMethod()) { switch (loadedStation.getMessageMethod()) {
case StationSettings.MessageMethod.EXTERNAL_PROGRAM: case StationSettings.MessageMethod.EXTERNAL_PROGRAM:
Process process = new ProcessBuilder(loadedStation.getExternalProgramCommand(), nextMessagePath.toString()).start(); Process process = new ProcessBuilder(loadedStation.getExternalProgramCommand(), nextMessagePath.toString()).start();
// TODO: make timeout a setting
if (!process.waitFor(5, TimeUnit.SECONDS)) { if (!process.waitFor(loadedStation.getExternalProgramTimeout().getSeconds(), TimeUnit.SECONDS)) {
throw new StationRunException("Timeout while running external program " + loadedStation.getExternalProgramCommand()); throw new StationRunException("Timeout while running external program " + loadedStation.getExternalProgramCommand());
} }

View File

@ -100,6 +100,7 @@ public class MainSettings {
XmlMapper xmlMapper = new XmlMapper(); XmlMapper xmlMapper = new XmlMapper();
xmlMapper.registerModule(new JavaTimeModule()); xmlMapper.registerModule(new JavaTimeModule());
xmlMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); xmlMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
xmlMapper.configure(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS, false);
xmlMapper.enable(SerializationFeature.INDENT_OUTPUT); xmlMapper.enable(SerializationFeature.INDENT_OUTPUT);
try { try {
Path filePath = getSettingsFilePath(); Path filePath = getSettingsFilePath();

View File

@ -10,6 +10,7 @@ import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor; import java.nio.file.SimpleFileVisitor;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.time.Duration;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
@ -27,6 +28,7 @@ public class StationSettings {
private String address; private String address;
private int digitsPerGroup; private int digitsPerGroup;
private String externalProgramCommand; private String externalProgramCommand;
private Duration externalProgramTimeout;
private boolean manageScheduleExternally; private boolean manageScheduleExternally;
private int messageLength; private int messageLength;
private MessageMethod messageMethod; private MessageMethod messageMethod;
@ -53,6 +55,7 @@ public class StationSettings {
prefixes = new ArrayList<String>(); prefixes = new ArrayList<String>();
digitsPerGroup = 4; digitsPerGroup = 4;
messageLength = 100; messageLength = 100;
externalProgramTimeout = Duration.ofSeconds(5);
messageMethod = MessageMethod.SFTP; messageMethod = MessageMethod.SFTP;
messagePeriod = MessagePeriod.DAILY; messagePeriod = MessagePeriod.DAILY;
scheduleStart = ZonedDateTime.now(); scheduleStart = ZonedDateTime.now();
@ -62,6 +65,7 @@ public class StationSettings {
name = newName; name = newName;
prefixes = new ArrayList<String>(); prefixes = new ArrayList<String>();
digitsPerGroup = 4; digitsPerGroup = 4;
externalProgramTimeout = Duration.ofSeconds(5);
messageLength = 100; messageLength = 100;
messageMethod = MessageMethod.SFTP; messageMethod = MessageMethod.SFTP;
messagePeriod = MessagePeriod.DAILY; messagePeriod = MessagePeriod.DAILY;
@ -250,6 +254,14 @@ public class StationSettings {
externalProgramCommand = newExternalProgramCommand; externalProgramCommand = newExternalProgramCommand;
} }
public Duration getExternalProgramTimeout() {
return externalProgramTimeout;
}
public void setExternalProgramTimeout(Duration newExternalProgramTimeout) {
externalProgramTimeout = newExternalProgramTimeout;
}
public boolean getManageScheduleExternally() { public boolean getManageScheduleExternally() {
return manageScheduleExternally; return manageScheduleExternally;
} }