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 3 hours ago
parent
commit
10d9757a50
  1. 7
      src/de/superx/rest/EtlJobApi.java
  2. 21
      src/de/superx/spring/service/EntityJobDescriptionSource.java
  3. 48
      src/de/superx/spring/service/JobAdapter.java

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

@ -189,9 +189,10 @@ public class EtlJobApi extends RestControllerBase { @@ -189,9 +189,10 @@ public class EtlJobApi extends RestControllerBase {
return jobDescriptionSource.getJobsForComponent(abbreviation);
}
@RequestMapping(path="/job/writeJobsToDb", method = RequestMethod.POST)
public boolean writeJobsToDb() {
try {
@RequestMapping(path="/job/writeJobsToDb", method = RequestMethod.POST)
public boolean writeJobsToDb() {
userService.checkAdminRights();
try {
List<ContainerNode> jobs = entityJobDescriptionSource.readJobs();
for (ContainerNode containerNode : jobs) {
try {

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

@ -1005,15 +1005,18 @@ public class EntityJobDescriptionSource implements JobDescriptionSource { @@ -1005,15 +1005,18 @@ public class EntityJobDescriptionSource implements JobDescriptionSource {
}
@Override
public List<ContainerNode> readInstallJobs(List<String> components) {
logger.debug("Reading install jobs from file system");
List<ContainerNode> jobs = new ArrayList<>();
for (String componentAbbreviation : PathAndFileUtils.getModules()) {
jobs.add(getInstallUpgradeJob(componentAbbreviation));
}
logger.debug("Count of jobs: " + jobs.size());
return jobs;
}
public List<ContainerNode> readInstallJobs(List<String> components) {
logger.debug("Reading install jobs from file system");
List<ContainerNode> jobs = new ArrayList<>();
for (String componentAbbreviation : PathAndFileUtils.getModules()) {
ContainerNode job = getInstallUpgradeJob(componentAbbreviation);
if (job != null) {
jobs.add(job);
}
}
logger.debug("Count of jobs: " + jobs.size());
return jobs;
}
public static ContainerNode getPreKernInstallJob() {
ContainerNode root = createContainerNode("kern_pre_install", "kern_pre_install", Integer.valueOf(9));

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

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

Loading…
Cancel
Save