Skip to content

Commit

Permalink
- As per @mbarto review: added br index so that web page can read it…
Browse files Browse the repository at this point in the history
… back; on filtering, limiting the backup folders to the essentials
  • Loading branch information
Alessio Fabiani committed Nov 27, 2018
1 parent 74f5e89 commit dc27849
Show file tree
Hide file tree
Showing 19 changed files with 857 additions and 253 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
*/
package org.geoserver.backuprestore.tasklet;

import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
Expand All @@ -19,6 +20,14 @@
import org.geoserver.backuprestore.Backup;
import org.geoserver.backuprestore.BackupRestoreItem;
import org.geoserver.backuprestore.utils.BackupUtils;
import org.geoserver.catalog.CoverageInfo;
import org.geoserver.catalog.CoverageStoreInfo;
import org.geoserver.catalog.DataStoreInfo;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.ResourceInfo;
import org.geoserver.catalog.StoreInfo;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.config.ServiceInfo;
import org.geoserver.config.util.XStreamPersisterFactory;
import org.geoserver.config.util.XStreamServiceLoader;
Expand All @@ -30,6 +39,10 @@
import org.geoserver.platform.resource.Resources.AnyFilter;
import org.geoserver.util.Filter;
import org.geotools.util.logging.Logging;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobInterruptedException;
Expand Down Expand Up @@ -158,6 +171,8 @@ public boolean accept(Resource res) {

private volatile boolean stopped = false;

public static final String BR_INDEX_XML = "br_index.xml";

public AbstractCatalogBackupRestoreTasklet(
Backup backupFacade, XStreamPersisterFactory xStreamPersisterFactory) {
super(backupFacade, xStreamPersisterFactory);
Expand Down Expand Up @@ -363,6 +378,80 @@ public Object doRead(Resource directory, String fileName) throws Exception {
return item;
}

/**
* This method dumps the current Backup index: - List of Workspaces - List of Stores - List of
* Layers
*
* @param sourceFolder
* @throws IOException
*/
protected void dumpBackupIndex(Resource sourceFolder) throws IOException {
Element root = new Element("Index");
Document doc = new Document();

for (WorkspaceInfo ws : getCatalog().getWorkspaces()) {
if (!filteredResource(ws, false)) {
Element workspace = new Element("Workspace");
workspace.addContent(new Element("Name").addContent(ws.getName()));
root.addContent(workspace);

for (DataStoreInfo ds :
getCatalog().getStoresByWorkspace(ws.getName(), DataStoreInfo.class)) {
if (!filteredResource(ds, ws, true, StoreInfo.class)) {
Element store = new Element("Store");
store.setAttribute("type", "DataStoreInfo");
store.addContent(new Element("Name").addContent(ds.getName()));
workspace.addContent(store);

for (FeatureTypeInfo ft : getCatalog().getFeatureTypesByDataStore(ds)) {
if (!filteredResource(ft, ws, true, ResourceInfo.class)) {
for (LayerInfo ly : getCatalog().getLayers(ft)) {
if (!filteredResource(ly, ws, true, LayerInfo.class)) {
Element layer = new Element("Layer");
layer.setAttribute("type", "VECTOR");
layer.addContent(
new Element("Name").addContent(ly.getName()));
store.addContent(layer);
}
}
}
}
}
}

for (CoverageStoreInfo cs :
getCatalog().getStoresByWorkspace(ws.getName(), CoverageStoreInfo.class)) {
if (!filteredResource(cs, ws, true, StoreInfo.class)) {
Element store = new Element("Store");
store.setAttribute("type", "CoverageStoreInfo");
store.addContent(new Element("Name").addContent(cs.getName()));
workspace.addContent(store);

for (CoverageInfo ci : getCatalog().getCoveragesByCoverageStore(cs)) {
if (!filteredResource(ci, ws, true, ResourceInfo.class)) {
for (LayerInfo ly : getCatalog().getLayers(ci)) {
if (!filteredResource(ly, ws, true, LayerInfo.class)) {
Element layer = new Element("Layer");
layer.setAttribute("type", "RASTER");
layer.addContent(
new Element("Name").addContent(ly.getName()));
store.addContent(layer);
}
}
}
}
}
}
}
}

doc.setRootElement(root);

XMLOutputter outter = new XMLOutputter();
outter.setFormat(Format.getPrettyFormat());
outter.output(doc, new FileWriter(sourceFolder.get(BR_INDEX_XML).file()));
}

@SuppressWarnings({"unchecked"})
protected XStreamServiceLoader findServiceLoader(ServiceInfo service) {
XStreamServiceLoader loader = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -220,44 +220,51 @@ private void doBackup(
}
}

// Backup GeoServer Plugins
final GeoServerResourceLoader targetGeoServerResourceLoader =
new GeoServerResourceLoader(targetBackupFolder.dir());
for (GeoServerPluginConfigurator pluginConfig :
GeoServerExtensions.extensions(GeoServerPluginConfigurator.class)) {
// On restore invoke 'pluginConfig.loadConfiguration(resourceLoader);' after having
// replaced the config files.
pluginConfig.saveConfiguration(targetGeoServerResourceLoader);
}

for (GeoServerPropertyConfigurer props :
GeoServerExtensions.extensions(GeoServerPropertyConfigurer.class)) {
// On restore invoke 'props.reload();' after having replaced the properties files.
Resource configFile = props.getConfigFile();
if (!filterIsValid()) {
// Backup additional stuff only when performing a FULL backup

if (configFile != null && Resources.exists(configFile)) {
Resource targetDir =
Files.asResource(
targetGeoServerResourceLoader.findOrCreateDirectory(
Paths.convert(
dd.getResourceLoader().getBaseDirectory(),
configFile.parent().dir())));
// Backup GeoServer Plugins
final GeoServerResourceLoader targetGeoServerResourceLoader =
new GeoServerResourceLoader(targetBackupFolder.dir());
for (GeoServerPluginConfigurator pluginConfig :
GeoServerExtensions.extensions(GeoServerPluginConfigurator.class)) {
// On restore invoke 'pluginConfig.loadConfiguration(resourceLoader);' after
// having
// replaced the config files.
pluginConfig.saveConfiguration(targetGeoServerResourceLoader);
}

Resources.copy(configFile.file(), targetDir);
for (GeoServerPropertyConfigurer props :
GeoServerExtensions.extensions(GeoServerPropertyConfigurer.class)) {
// On restore invoke 'props.reload();' after having replaced the properties
// files.
Resource configFile = props.getConfigFile();

if (configFile != null && Resources.exists(configFile)) {
Resource targetDir =
Files.asResource(
targetGeoServerResourceLoader.findOrCreateDirectory(
Paths.convert(
dd.getResourceLoader().getBaseDirectory(),
configFile.parent().dir())));

Resources.copy(configFile.file(), targetDir);
}
}
}

// Backup other configuration bits, like images, palettes, user projections and so on...
backupRestoreAdditionalResources(resourceStore, targetBackupFolder);
// Backup other configuration bits, like images, palettes, user projections and so
// on...
backupRestoreAdditionalResources(resourceStore, targetBackupFolder);

// Backup GWC Configuration bits
if (!skipGWC) {
try {
if (GeoServerExtensions.bean("gwcGeoServervConfigPersister") != null) {
backupGWCSettings(targetBackupFolder);
// Backup GWC Configuration bits
if (!skipGWC) {
try {
if (GeoServerExtensions.bean("gwcGeoServervConfigPersister") != null) {
backupGWCSettings(targetBackupFolder);
}
} catch (NoSuchBeanDefinitionException e) {
LOGGER.log(Level.WARNING, "Skipped GWC GeoServer Config Persister: ", e);
}
} catch (NoSuchBeanDefinitionException e) {
LOGGER.log(Level.WARNING, "Skipped GWC GeoServer Config Persister: ", e);
}
}
} catch (Exception e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ RepeatStatus doExecute(
JobParameters jobParameters = backupExecution.getJobParameters();
Resource sourceFolder =
Resources.fromURL(jobParameters.getString(Backup.PARAM_OUTPUT_FILE_PATH));

dumpBackupIndex(sourceFolder);

BackupUtils.compressTo(sourceFolder, backupExecution.getArchiveFile());
} catch (IOException e) {
LOGGER.severe("Backup failed while creating final ");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,8 @@

<div>
<fieldset>
<legend><span><wicket:message key="newBackupResource">Archive File</wicket:message></span></legend>
<div wicket:id="newBackupRestorePanel">
<div wicket:id="backupResource"></div>
</div>
<legend><span><wicket:message key="backupResource">Archive File</wicket:message></span></legend>
<div wicket:id="backupResource"></div>
<label for="workspace"><wicket:message key="workspace">Workspace</wicket:message></label>
<select id="workspace" wicket:id="workspace"></select>
<span wicket:id="workspaceNameContainer"><input type="text" class="text" wicket:id="workspaceName" style="width:10em;"></input></span>
Expand Down

0 comments on commit dc27849

Please sign in to comment.