Skip to content

Commit 511d1c9

Browse files
authored
Merge pull request #422 from wttech/fix-large-history-log-issue
fixed large history log issue
2 parents d3ff7a6 + babce86 commit 511d1c9

File tree

11 files changed

+103
-43
lines changed

11 files changed

+103
-43
lines changed

app/aem/core/src/main/java/com/cognifide/apm/core/history/HistoryEntryImpl.java

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,34 +22,54 @@
2222
import com.cognifide.apm.core.logger.ProgressEntry;
2323
import com.cognifide.apm.core.progress.ProgressHelper;
2424
import com.cognifide.apm.core.utils.CalendarUtils;
25+
import java.io.IOException;
26+
import java.io.InputStream;
27+
import java.nio.charset.StandardCharsets;
2528
import java.util.Calendar;
2629
import java.util.Date;
2730
import java.util.List;
2831
import javax.annotation.PostConstruct;
2932
import javax.inject.Inject;
3033
import javax.inject.Named;
34+
import org.apache.commons.io.IOUtils;
3135
import org.apache.sling.api.resource.Resource;
3236
import org.apache.sling.models.annotations.Default;
3337
import org.apache.sling.models.annotations.DefaultInjectionStrategy;
3438
import org.apache.sling.models.annotations.Model;
39+
import org.apache.sling.models.annotations.injectorspecific.Self;
3540

3641
@Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
3742
public class HistoryEntryImpl implements HistoryEntry {
3843

3944
public static final String AUTHOR = "author";
45+
4046
public static final String EXECUTION_TIME = "executionTime";
47+
4148
public static final String EXECUTION_DURATION = "executionDuration";
49+
4250
public static final String EXECUTOR = "executor";
51+
4352
public static final String SCRIPT_PATH = "scriptPath";
53+
4454
public static final String SCRIPT_NAME = "scriptName";
55+
4556
public static final String IS_RUN_SUCCESSFUL = "isRunSuccessful";
57+
4658
public static final String MODE = "mode";
59+
4760
public static final String CHECKSUM = "checksum";
61+
4862
public static final String PROGRESS_LOG = "summaryJSON";
63+
4964
public static final String UPLOAD_TIME = "uploadTime";
65+
5066
public static final String SCRIPT_CONTENT_PATH = "scriptContentPath";
67+
5168
public static final String INSTANCE_NAME = "instanceName";
5269

70+
@Self
71+
private Resource resource;
72+
5373
@Inject
5474
@Named(AUTHOR)
5575
private String author;
@@ -91,8 +111,6 @@ public class HistoryEntryImpl implements HistoryEntry {
91111
@Named(UPLOAD_TIME)
92112
private Date uploadTime;
93113

94-
@Inject
95-
@Named(PROGRESS_LOG)
96114
private String executionSummaryJson;
97115

98116
@Inject
@@ -103,25 +121,22 @@ public class HistoryEntryImpl implements HistoryEntry {
103121
@Named(INSTANCE_NAME)
104122
private String instanceName;
105123

106-
private final String path;
124+
private String path;
107125

108126
private Calendar executionTimeCalendar;
109127

110128
private List<ProgressEntry> executionSummary;
111129

112-
public HistoryEntryImpl(Resource resource) {
113-
this.path = resource.getPath();
114-
}
115-
116130
public List<ProgressEntry> getExecutionSummary() {
117-
if (this.executionSummary == null) {
118-
this.executionSummary = ProgressHelper.fromJson(getExecutionSummaryJson());
131+
if (executionSummary == null) {
132+
executionSummary = ProgressHelper.fromJson(getExecutionSummaryJson());
119133
}
120-
return this.executionSummary;
134+
return executionSummary;
121135
}
122136

123137
@PostConstruct
124138
private void afterCreated() {
139+
path = resource.getPath();
125140
executionTimeCalendar = CalendarUtils.asCalendar(executionTime);
126141
}
127142

@@ -166,6 +181,18 @@ public Date getUploadTime() {
166181
}
167182

168183
public String getExecutionSummaryJson() {
184+
if (executionSummaryJson == null) {
185+
Object progressLog = resource.getValueMap().get(PROGRESS_LOG);
186+
if (progressLog instanceof InputStream) {
187+
try {
188+
executionSummaryJson = IOUtils.toString((InputStream) progressLog, StandardCharsets.UTF_8);
189+
} catch (IOException e) {
190+
executionSummaryJson = "[]";
191+
}
192+
} else {
193+
executionSummaryJson = (String) progressLog;
194+
}
195+
}
169196
return executionSummaryJson;
170197
}
171198

@@ -184,4 +211,4 @@ public String getPath() {
184211
public Calendar getExecutionTimeCalendar() {
185212
return executionTimeCalendar;
186213
}
187-
}
214+
}

app/aem/core/src/main/java/com/cognifide/apm/core/history/HistoryEntryWriter.java

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,34 @@
2020

2121
package com.cognifide.apm.core.history;
2222

23+
import java.io.IOException;
24+
import java.io.InputStream;
25+
import java.nio.charset.StandardCharsets;
2326
import java.util.Calendar;
27+
import org.apache.commons.io.IOUtils;
2428
import org.apache.sling.api.resource.ModifiableValueMap;
2529
import org.apache.sling.api.resource.Resource;
2630

2731
public final class HistoryEntryWriter {
2832

2933
private final String author;
34+
3035
private final Calendar executionTime;
36+
3137
private final String executor;
38+
3239
private final long executionDuration;
40+
3341
private final String fileName;
42+
3443
private final String filePath;
44+
3545
private final Boolean isRunSuccessful;
46+
3647
private final String mode;
48+
3749
private final String progressLog;
50+
3851
private final String instanceName;
3952

4053
private HistoryEntryWriter(String author, Calendar executionTime, String executor, long executionDuration, String fileName, String filePath, Boolean isRunSuccessful, String mode, String progressLog, String instanceName) {
@@ -54,13 +67,15 @@ public static HistoryEntryWriterBuilder builder() {
5467
return new HistoryEntryWriterBuilder();
5568
}
5669

57-
public void writeTo(Resource historyLogResource) {
70+
public void writeTo(Resource historyLogResource) throws IOException {
5871
ModifiableValueMap valueMap = historyLogResource.adaptTo(ModifiableValueMap.class);
5972
valueMap.put(HistoryEntryImpl.SCRIPT_NAME, fileName);
6073
valueMap.put(HistoryEntryImpl.SCRIPT_PATH, filePath);
6174
valueMap.put(HistoryEntryImpl.AUTHOR, author);
6275
valueMap.put(HistoryEntryImpl.MODE, mode);
63-
valueMap.put(HistoryEntryImpl.PROGRESS_LOG, progressLog);
76+
try (InputStream progressLogInput = IOUtils.toInputStream(progressLog, StandardCharsets.UTF_8)) {
77+
valueMap.put(HistoryEntryImpl.PROGRESS_LOG, progressLogInput);
78+
}
6479
valueMap.put(HistoryEntryImpl.IS_RUN_SUCCESSFUL, isRunSuccessful);
6580
valueMap.put(HistoryEntryImpl.EXECUTION_TIME, executionTime);
6681
valueMap.put(HistoryEntryImpl.EXECUTION_DURATION, executionDuration);
@@ -71,14 +86,23 @@ public void writeTo(Resource historyLogResource) {
7186
public static class HistoryEntryWriterBuilder {
7287

7388
private String author;
89+
7490
private Calendar executionTime;
91+
7592
private String executor;
93+
7694
private long executionDuration;
95+
7796
private String fileName;
97+
7898
private String filePath;
99+
79100
private Boolean isRunSuccessful;
101+
80102
private String mode;
103+
81104
private String progressLog;
105+
82106
private String instanceName;
83107

84108
private HistoryEntryWriterBuilder() {

app/aem/core/src/main/java/com/cognifide/apm/core/history/HistoryImpl.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.cognifide.apm.core.services.version.VersionService;
3030
import com.cognifide.apm.core.utils.sling.SlingHelper;
3131
import com.day.cq.commons.jcr.JcrConstants;
32+
import java.io.IOException;
3233
import java.lang.management.ManagementFactory;
3334
import java.util.Calendar;
3435
import java.util.LinkedList;
@@ -40,7 +41,6 @@
4041
import org.apache.commons.lang3.StringUtils;
4142
import org.apache.jackrabbit.commons.JcrUtils;
4243
import org.apache.sling.api.resource.AbstractResourceVisitor;
43-
import org.apache.sling.api.resource.PersistenceException;
4444
import org.apache.sling.api.resource.Resource;
4545
import org.apache.sling.api.resource.ResourceResolver;
4646
import org.apache.sling.api.resource.ValueMap;
@@ -164,18 +164,16 @@ private HistoryEntry createHistoryEntry(ResourceResolver resolver, Script script
164164
session.save();
165165
resolver.commit();
166166
return resolver.getResource(historyEntryNode.getPath()).adaptTo(HistoryEntryImpl.class);
167-
} catch (PersistenceException | RepositoryException e) {
167+
} catch (IOException | RepositoryException e) {
168168
LOG.error("Issues with saving to repository while logging script execution", e);
169169
return null;
170170
}
171171
}
172172

173-
private Resource writeProperties(ResourceResolver resolver, Node historyEntry, HistoryEntryWriter
174-
historyEntryWriter)
175-
throws RepositoryException {
173+
private void writeProperties(ResourceResolver resolver, Node historyEntry, HistoryEntryWriter historyEntryWriter)
174+
throws RepositoryException, IOException {
176175
Resource entryResource = resolver.getResource(historyEntry.getPath());
177176
historyEntryWriter.writeTo(entryResource);
178-
return entryResource;
179177
}
180178

181179
private Node createHistoryEntryNode(Node scriptHistoryNode, Script script, ExecutionMode mode)
@@ -204,5 +202,4 @@ private String getModeName(ExecutionMode mode) {
204202
private String getScriptHistoryPath(Script script) {
205203
return HISTORY_FOLDER + "/" + script.getPath().replace("/", "_").substring(1);
206204
}
207-
208-
}
205+
}

app/aem/core/src/main/java/com/cognifide/apm/core/scripts/ScriptModel.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public class ScriptModel implements MutableScript {
6161

6262
private static final Logger LOGGER = LoggerFactory.getLogger(ScriptModel.class);
6363

64-
private final String path;
64+
private String path;
6565

6666
@Self
6767
private Resource resource;
@@ -120,12 +120,9 @@ public class ScriptModel implements MutableScript {
120120

121121
private String data;
122122

123-
public ScriptModel(Resource resource) {
124-
this.path = resource.getPath();
125-
}
126-
127123
@PostConstruct
128124
private void afterCreated() {
125+
path = resource.getPath();
129126
if (verified == null) {
130127
try {
131128
scriptManager.process(this, ExecutionMode.VALIDATION, resource.getResourceResolver());

app/aem/core/src/main/java/com/cognifide/apm/core/services/version/ScriptVersionModel.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,24 @@
2121

2222
import javax.inject.Inject;
2323
import org.apache.sling.api.resource.Resource;
24+
import org.apache.sling.models.annotations.DefaultInjectionStrategy;
2425
import org.apache.sling.models.annotations.Model;
2526

26-
@Model(adaptables = Resource.class)
27+
@Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
2728
public class ScriptVersionModel implements ScriptVersion {
2829

29-
private final String scriptPath;
30-
31-
private final String lastChecksum;
30+
@Inject
31+
private String scriptPath;
3232

3333
@Inject
34-
public ScriptVersionModel(String scriptPath, String lastChecksum) {
34+
private String lastChecksum;
35+
36+
public ScriptVersionModel() {
37+
// intentionally empty
38+
}
39+
40+
public ScriptVersionModel(String scriptPath) {
3541
this.scriptPath = scriptPath;
36-
this.lastChecksum = lastChecksum;
3742
}
3843

3944
@Override

app/aem/core/src/main/java/com/cognifide/apm/core/services/version/VersionServiceImpl.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public ScriptVersion getScriptVersion(ResourceResolver resolver, Script script)
6767
String scriptVersionPath = getScriptVersionPath(script);
6868
return Optional.ofNullable(resolver.getResource(scriptVersionPath))
6969
.map(resource -> resource.adaptTo(ScriptVersionModel.class))
70-
.orElse(new ScriptVersionModel(script.getPath(), null));
70+
.orElse(new ScriptVersionModel(script.getPath()));
7171
}
7272

7373
@Override
@@ -135,14 +135,12 @@ private Node createVersionNode(Node parent, Script script, Session session) thro
135135
return JcrUtils.getOrCreateByPath(path, "sling:OrderedFolder", "sling:OrderedFolder", session, true);
136136
}
137137

138-
private Node copyScriptContent(Node parent, Script script, Session session) throws RepositoryException {
138+
private void copyScriptContent(Node parent, Script script, Session session) throws RepositoryException {
139139
if (!parent.hasNode(SCRIPT_NODE_NAME)) {
140140
Node source = session.getNode(script.getPath());
141141
Node file = JcrUtil.copy(source, parent, SCRIPT_NODE_NAME);
142142
file.addMixin(ScriptNode.APM_SCRIPT);
143-
return file;
144143
}
145-
return parent.getNode(SCRIPT_NODE_NAME);
146144
}
147145

148146
private String normalizedPath(Script script) {

app/aem/core/src/main/java/com/cognifide/apm/core/ui/models/DashboardTileModel.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@
2121

2222
import javax.inject.Inject;
2323
import org.apache.sling.api.resource.Resource;
24+
import org.apache.sling.models.annotations.DefaultInjectionStrategy;
2425
import org.apache.sling.models.annotations.Model;
2526

26-
@Model(adaptables = Resource.class)
27+
@Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
2728
public final class DashboardTileModel {
2829

2930
@Inject

app/aem/core/src/main/java/com/cognifide/apm/core/ui/models/ScriptsRowModel.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,11 @@
4242
import org.apache.commons.collections4.CollectionUtils;
4343
import org.apache.commons.lang3.StringUtils;
4444
import org.apache.sling.api.resource.Resource;
45+
import org.apache.sling.models.annotations.DefaultInjectionStrategy;
4546
import org.apache.sling.models.annotations.Model;
4647
import org.apache.sling.models.annotations.injectorspecific.Self;
4748

48-
@Model(adaptables = Resource.class)
49+
@Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
4950
public final class ScriptsRowModel {
5051

5152
private static final Set<String> FOLDER_TYPES = ImmutableSet

app/aem/ui.apps.base/src/main/content/jcr_root/apps/apm/views/history/.content.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,17 @@
110110
jcr:primaryType="nt:unstructured"
111111
href.uritemplate="/apm/viewer.html{+item}"/>
112112
</view>
113+
<deletepage
114+
granite:class="foundation-collection-action"
115+
granite:rel="cq-siteadmin-admin-actions-delete-activator"
116+
jcr:primaryType="nt:unstructured"
117+
sling:resourceType="granite/ui/components/coral/foundation/collection/action"
118+
action="cq.wcm.delete"
119+
icon="delete"
120+
relScope="collection"
121+
target=".cq-experience-fragments-admin-childpages"
122+
text="Delete"
123+
variant="actionBar"/>
113124
</selection>
114125
</actions>
115126
</jcr:content>

app/aem/ui.apps.base/src/main/content/jcr_root/apps/apm/views/viewer/.content.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
3-
xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
4-
xmlns:nt="http://www.jcp.org/jcr/nt/1.0" xmlns:granite="http://www.adobe.com/jcr/granite/1.0"
2+
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:cq="http://www.day.com/jcr/cq/1.0"
3+
xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
4+
xmlns:granite="http://www.adobe.com/jcr/granite/1.0"
55
jcr:primaryType="cq:Page">
66
<jcr:content
77
jcr:primaryType="nt:unstructured"

0 commit comments

Comments
 (0)