Fixed some bugs with backups

This commit is contained in:
Rsl1122 2017-09-10 16:18:23 +03:00
parent a236c1e98b
commit 66a2169141
9 changed files with 111 additions and 59 deletions

View File

@ -35,13 +35,12 @@ public class ManageCommand extends TreeCommand<Plan> {
@Override
public void addCommands() {
// commands.add(new ManageMoveCommand(plugin));
commands.add(new ManageMoveCommand(plugin));
commands.add(new ManageHotswapCommand(plugin));
// commands.add(new ManageBackupCommand(plugin));
// commands.add(new ManageRestoreCommand(plugin));
commands.add(new ManageBackupCommand(plugin));
commands.add(new ManageRestoreCommand(plugin));
commands.add(new ManageImportCommand(plugin));
commands.add(new ManageRemoveCommand(plugin));
// commands.add(new ManageCleanCommand(plugin));
commands.add(new ManageClearCommand(plugin));
commands.add(new ManageDumpCommand(plugin));
}

View File

@ -43,12 +43,13 @@ public class ManageBackupCommand extends SubCommand {
@Override
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
try {
if (!Check.isTrue(args.length >= 1, Locale.get(Msg.CMD_FAIL_REQ_ARGS).parse(this.getArguments()), sender)) {
return true;
}
String dbName = args[0].toLowerCase();
boolean isCorrectDB = "sqlite".equals(dbName) || "mysql".equals(dbName);
if (Check.isTrue(isCorrectDB, Locale.get(Msg.MANAGE_FAIL_INCORRECT_DB) + dbName, sender)) {
if (!Check.isTrue(isCorrectDB, Locale.get(Msg.MANAGE_FAIL_INCORRECT_DB) + dbName, sender)) {
return true;
}
@ -59,10 +60,12 @@ public class ManageBackupCommand extends SubCommand {
Log.error(dbName + " was null!");
return true;
}
Log.debug("Backup", "Start");
runBackupTask(sender, args, database);
} catch (DatabaseInitException | NullPointerException e) {
sender.sendMessage(Locale.get(Msg.MANAGE_FAIL_FAULTY_DB).toString());
} finally {
Log.logDebug("Backup");
}
return true;
}

View File

@ -112,6 +112,7 @@ public abstract class SQLDB extends Database {
if (newDatabase) {
Log.info("New Database created.");
setVersion(10);
}
int version = getVersion();
@ -127,16 +128,8 @@ public abstract class SQLDB extends Database {
Log.toLog(this.getClass().getName(), e);
}
}
}).runTaskLaterAsynchronously(TimeAmount.SECOND.ticks()*5L);
return;
}).runTaskLaterAsynchronously(TimeAmount.SECOND.ticks() * 5L);
}
boolean newVersion = version < 10;
if (newDatabase || newVersion) {
setVersion(10);
}
} catch (SQLException e) {
throw new DatabaseInitException("Failed to set-up Database", e);
}

View File

@ -172,6 +172,7 @@ public class WebServer {
private void internalErrorResponse(HttpExchange exchange, Headers responseHeaders, String target, Exception e) {
try {
Log.toLog(target, e);
sendData(responseHeaders, exchange, new InternalErrorResponse(e, target));
} catch (IOException e1) {
Log.toLog(this.getClass().getName(), e1);

View File

@ -1,11 +1,17 @@
package main.java.com.djrapitops.plan.systems.webserver.response;
import main.java.com.djrapitops.plan.data.UserInfo;
import main.java.com.djrapitops.plan.utilities.comparators.UserDataNameComparator;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.api.IPlan;
import main.java.com.djrapitops.plan.systems.webserver.theme.Theme;
import main.java.com.djrapitops.plan.utilities.MiscUtils;
import main.java.com.djrapitops.plan.utilities.file.FileUtil;
import main.java.com.djrapitops.plan.utilities.html.Html;
import main.java.com.djrapitops.plan.utilities.html.HtmlUtils;
import org.apache.commons.lang3.text.StrSubstitutor;
import java.util.List;
import java.io.FileNotFoundException;
import java.sql.SQLException;
import java.util.*;
/**
* @author Rsl1122
@ -15,21 +21,29 @@ public class PlayersPageResponse extends Response {
public PlayersPageResponse() {
super.setHeader("HTTP/1.1 200 OK");
// super.setContent(buildContent(plugin.getInspectCache().getCachedUserData()));
List<String> names = null;
try {
IPlan plugin = MiscUtils.getIPlan();
names = new ArrayList<>(plugin.getDB().getUsersTable().getPlayerNames().values());
Collections.sort(names);
Map<String, String> replace = new HashMap<>();
replace.put("content", buildContent(names));
replace.put("version", plugin.getVersion());
super.setContent(Theme.replaceColors(StrSubstitutor.replace(FileUtil.getStringFromResource("players.html"), replace)));
} catch (SQLException | FileNotFoundException e) {
Log.toLog(this.getClass().getName(), e);
setContent(new InternalErrorResponse(e, "/players").getContent());
}
}
public static String buildContent(List<UserInfo> cached) {
StringBuilder html = new StringBuilder("<!DOCTYPE html><html><body><h1>Cached Players</h1><p>");
int size = cached.size();
public static String buildContent(List<String> names) {
StringBuilder html = new StringBuilder("<p>");
int size = names.size();
html.append(size)
.append(" players. Use browser's Search to find players by name. (Chrome Ctrl+F)</p><table><tr>");
cached.sort(new UserDataNameComparator());
html.append(size).append(" players. Use browser's Search to find players by name. (Ctrl+F)</p><table><tr>");
int i = 1;
for (UserInfo userInfo : cached) {
String name = userInfo.getName();
for (String name : names) {
String link = Html.LINK.parse(HtmlUtils.getRelativeInspectUrl(name), name);
html.append("<td>").append(link).append("</td>");
@ -40,7 +54,7 @@ public class PlayersPageResponse extends Response {
i++;
}
html.append("</tr></table></body></html>");
html.append("</tr></table>");
return html.toString();
}
}

View File

@ -41,6 +41,7 @@ public class ManageUtils {
}
backupDB.init();
clearAndCopy(backupDB, copyFromDB);
backupDB.close();
}
/**

View File

@ -6,8 +6,6 @@ import main.java.com.djrapitops.plan.Settings;
import main.java.com.djrapitops.plan.data.AnalysisData;
import main.java.com.djrapitops.plan.data.UserInfo;
import main.java.com.djrapitops.plan.systems.webserver.response.PlayersPageResponse;
import main.java.com.djrapitops.plan.utilities.Benchmark;
import main.java.com.djrapitops.plan.utilities.file.FileUtil;
import java.io.File;
import java.io.FileNotFoundException;
@ -54,36 +52,36 @@ public class ExportUtility {
/**
* @param analysisData
* @param rawData
* @param playerNames
*/
public static void export(AnalysisData analysisData, List<UserInfo> rawData) {
public static void export(AnalysisData analysisData, List<String> playerNames) {
if (!Settings.ANALYSIS_EXPORT.isTrue()) {
return;
}
Benchmark.start("Exporting Html pages");
try {
File folder = getFolder();
Log.debug("Export", "Folder: " + folder.getAbsolutePath());
writePlayersPageHtml(rawData, new File(folder, "players"));
writeAnalysisHtml(analysisData, new File(folder, "server"));
File playersFolder = getPlayersFolder(folder);
Log.debug("Export", "Player html files.");
Log.debug("Export", "Player Page Folder: " + playersFolder.getAbsolutePath());
String playerHtml = FileUtil.getStringFromResource("player.html");
Benchmark.start("Exporting Player pages");
rawData.forEach(userData -> writeInspectHtml(userData, playersFolder, playerHtml));
Benchmark.stop("Export", "Exporting Player pages");
} catch (IOException ex) {
Log.toLog("ExportUtils.export", ex);
} finally {
Benchmark.stop("Export", "Exporting Html pages");
Log.logDebug("Export");
}
// Benchmark.start("Exporting Html pages");
// try {
// File folder = getFolder();
// Log.debug("Export", "Folder: " + folder.getAbsolutePath());
//
// writePlayersPageHtml(playerNames, new File(folder, "players"));
// writeAnalysisHtml(analysisData, new File(folder, "server"));
//
// File playersFolder = getPlayersFolder(folder);
// Log.debug("Export", "Player html files.");
// Log.debug("Export", "Player Page Folder: " + playersFolder.getAbsolutePath());
//
// String playerHtml = FileUtil.getStringFromResource("player.html");
//
// Benchmark.start("Exporting Player pages");
// playerNames.forEach(userData -> writeInspectHtml(userData, playersFolder, playerHtml));
// Benchmark.stop("Export", "Exporting Player pages");
// } catch (IOException ex) {
// Log.toLog("ExportUtils.export", ex);
// } finally {
// Benchmark.stop("Export", "Exporting Html pages");
// Log.logDebug("Export");
// }
}
/**
@ -148,8 +146,8 @@ public class ExportUtility {
// Files.write(analysisHtmlFile.toPath(), Collections.singletonList(analysisHtml));
}
private static void writePlayersPageHtml(List<UserInfo> rawData, File playersFolder) throws IOException {
String playersHtml = PlayersPageResponse.buildContent(rawData);
private static void writePlayersPageHtml(List<String> names, File playersFolder) throws IOException {
String playersHtml = PlayersPageResponse.buildContent(names);
playersFolder.mkdirs();
File playersHtmlFile = new File(playersFolder, "index.html");
Log.debug("Export", "Players Page File: " + playersHtmlFile.getAbsolutePath());

View File

@ -48,7 +48,7 @@ public class KillsTableCreator {
String name = Plan.getInstance().getDataCache().getName(kill.getVictim());
html.append(Html.TABLELINE_3_CUSTOMKEY_1.parse(
String.valueOf(date), FormatUtils.formatTimeStamp(date),
Html.LINK.parse(HtmlUtils.getInspectUrl(name), name),
Html.LINK.parse(HtmlUtils.getRelativeInspectUrl(name), name),
kill.getWeapon()
));

View File

@ -0,0 +1,43 @@
<!DOCTYPE html>
<html>
<head>
<title>Plan | Players</title>
<meta name="description" content="Player Analysis window">
<meta name="author" content="Rsl1122">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="https://puu.sh/tK0KL/6aa2ba141b.ico" type="image/x-icon">
<link rel="stylesheet" href="./main.css">
<link href="https://fonts.googleapis.com/css?family=Quicksand:300,400" rel="stylesheet">
<script src="https://use.fontawesome.com/df48eb908b.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
<header>
<div>
<div class="right fa-stack fa-lg" style="padding: 23px; margin:8px">
<i style="padding: 0; color: #fff; font-size: 100px;" class="fa fa-square fa-stack-1x"></i>
<i style="padding: 0; color: #348e0f; font-size: 95px;" class="fa fa-square fa-stack-1x"></i>
<i style="padding: 0; color: #fff; font-size: 60px;" class="fa fa-circle fa-stack-1x"></i>
<div style="margin: 0px; padding: 0px; width: 100%; height: 100%; position: relative; overflow: hidden; top: -6px;">
<i style="position: absolute; left: -4px; top: 8px; color: #348e0f; font-size: 40px;"
class="fa fa-bar-chart fa-stack-1x"></i>
</div>
</div>
<p class="right">Player Analytics v.${version}</p>
<h1>Plan | Players</h1>
</div>
</header>
<div class="content-server">
<div class="row">
<div class="column">
<div class="box-header">
<h2><i class="fa fa-users" aria-hidden="true"></i> Players</h2>
</div>
<div class="box" style="margin-bottom: 5px;">
${content}
</div>
</div>
</div>
</div>
</body>
</html>