Browse Source

Komponentenverwaltung: Modul-Neuladen und Installables absichern

- Adminrechte beim Neueinlesen der Modul- und Jobdefinitionen prüfen
- Module ohne Install-/Upgrade-Job beim Einlesen überspringen
- Zusammenführen von Datei- und Datenbank-Jobs gegen null-Einträge absichern
- HTTP-500-Fehler bei /etl/installables/list vermeiden
master
Andre Knieschewski 6 hours ago
parent
commit
10d9757a50
  1. 1
      src/de/superx/rest/EtlJobApi.java
  2. 5
      src/de/superx/spring/service/EntityJobDescriptionSource.java
  3. 10
      src/de/superx/spring/service/JobAdapter.java

1
src/de/superx/rest/EtlJobApi.java

@ -191,6 +191,7 @@ public class EtlJobApi extends RestControllerBase {
@RequestMapping(path="/job/writeJobsToDb", method = RequestMethod.POST) @RequestMapping(path="/job/writeJobsToDb", method = RequestMethod.POST)
public boolean writeJobsToDb() { public boolean writeJobsToDb() {
userService.checkAdminRights();
try { try {
List<ContainerNode> jobs = entityJobDescriptionSource.readJobs(); List<ContainerNode> jobs = entityJobDescriptionSource.readJobs();
for (ContainerNode containerNode : jobs) { for (ContainerNode containerNode : jobs) {

5
src/de/superx/spring/service/EntityJobDescriptionSource.java

@ -1009,7 +1009,10 @@ public class EntityJobDescriptionSource implements JobDescriptionSource {
logger.debug("Reading install jobs from file system"); logger.debug("Reading install jobs from file system");
List<ContainerNode> jobs = new ArrayList<>(); List<ContainerNode> jobs = new ArrayList<>();
for (String componentAbbreviation : PathAndFileUtils.getModules()) { for (String componentAbbreviation : PathAndFileUtils.getModules()) {
jobs.add(getInstallUpgradeJob(componentAbbreviation)); ContainerNode job = getInstallUpgradeJob(componentAbbreviation);
if (job != null) {
jobs.add(job);
}
} }
logger.debug("Count of jobs: " + jobs.size()); logger.debug("Count of jobs: " + jobs.size());
return jobs; return jobs;

10
src/de/superx/spring/service/JobAdapter.java

@ -157,18 +157,24 @@ public class JobAdapter implements JobDescriptionSource {
List<ContainerNode> result = new ArrayList<>(jobsDatabase); List<ContainerNode> result = new ArrayList<>(jobsDatabase);
for (ContainerNode jobFs : jobsFilesystem) { for (ContainerNode jobFs : jobsFilesystem) {
if (jobFs == null) {
logger.warn("Skipping null job from filesystem");
continue;
}
boolean isJobInDatabase = false; boolean isJobInDatabase = false;
for (ContainerNode jobDb : jobsDatabase) { for (ContainerNode jobDb : jobsDatabase) {
if(jobDb.name.equals(jobFs.name)) { if (jobDb != null && jobDb.name.equals(jobFs.name)) {
isJobInDatabase = true; isJobInDatabase = true;
break; break;
} }
} }
if (!isJobInDatabase) { if (!isJobInDatabase) {
result.add(jobFs); result.add(jobFs);
} }
} }
return result;
return result;
} }
} }

Loading…
Cancel
Save