Skip to content

Commit 5ab35a8

Browse files
authored
Merge pull request #439 from wttech/fix/time-format
No exact execution start timestamp and duration #436
2 parents 3caccd0 + 1c3286e commit 5ab35a8

File tree

13 files changed

+130
-67
lines changed

13 files changed

+130
-67
lines changed

app/aem/api/src/main/java/com/cognifide/apm/api/services/ExecutionResult.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package com.cognifide.apm.api.services;
2121

2222
import com.cognifide.apm.api.status.Status;
23+
import java.util.Calendar;
2324
import java.util.List;
2425

2526
public interface ExecutionResult {
@@ -32,6 +33,8 @@ public interface ExecutionResult {
3233

3334
String getExecutor();
3435

36+
Calendar getStartTime();
37+
3538
long determineExecutionDuration();
3639

3740
interface Entry {

app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionServlet.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,17 +73,21 @@ public class ScriptExecutionServlet extends SlingAllMethodsServlet {
7373
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException {
7474
RequestProcessor.process(modelFactory, ScriptExecutionStatusForm.class, request, response, (form, resourceResolver) -> {
7575
ExecutionStatus status = asyncScriptExecutor.checkStatus(form.getId());
76-
if (status instanceof ExecutionStatus.FinishedSuccessfulExecution) {
76+
if (status instanceof ExecutionStatus.Successful) {
7777
return ResponseEntity.ok("Script successfully executed")
7878
.addEntry("status", status.getStatus())
79-
.addEntry("output", ((ExecutionStatus.FinishedSuccessfulExecution) status).getEntries())
80-
.addEntry("path", ((ExecutionStatus.FinishedSuccessfulExecution) status).getPath());
81-
} else if (status instanceof ExecutionStatus.FinishedFailedExecution) {
79+
.addEntry("output", ((ExecutionStatus.Successful) status).getEntries())
80+
.addEntry("path", ((ExecutionStatus.Successful) status).getPath())
81+
.addEntry("timestamp", ((ExecutionStatus.Successful) status).getTimestamp())
82+
.addEntry("formattedDate", ((ExecutionStatus.Successful) status).getFormattedDate());
83+
} else if (status instanceof ExecutionStatus.Failed) {
8284
return ResponseEntity.internalServerError("Errors while executing script")
8385
.addEntry("status", status.getStatus())
84-
.addEntry("output", ((ExecutionStatus.FinishedFailedExecution) status).getEntries())
85-
.addEntry("path", ((ExecutionStatus.FinishedFailedExecution) status).getPath())
86-
.addEntry("errors", ((ExecutionStatus.FinishedFailedExecution) status).getError().getMessages());
86+
.addEntry("output", ((ExecutionStatus.Failed) status).getEntries())
87+
.addEntry("path", ((ExecutionStatus.Failed) status).getPath())
88+
.addEntry("timestamp", ((ExecutionStatus.Failed) status).getTimestamp())
89+
.addEntry("formattedDate", ((ExecutionStatus.Failed) status).getFormattedDate())
90+
.addEntry("errors", ((ExecutionStatus.Failed) status).getError().getMessages());
8791
} else {
8892
return ResponseEntity.ok("Script is still being processed")
8993
.addEntry("status", status.getStatus());

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ public interface HistoryEntry {
4040

4141
String getChecksum();
4242

43-
Date getUploadTime();
44-
4543
String getExecutionSummaryJson();
4644

4745
String getPath();

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,6 @@ public class HistoryEntryImpl implements HistoryEntry {
6161

6262
public static final String PROGRESS_LOG = "summaryJSON";
6363

64-
public static final String UPLOAD_TIME = "uploadTime";
65-
6664
public static final String SCRIPT_CONTENT_PATH = "scriptContentPath";
6765

6866
public static final String INSTANCE_NAME = "instanceName";
@@ -107,10 +105,6 @@ public class HistoryEntryImpl implements HistoryEntry {
107105
@Named(CHECKSUM)
108106
private String checksum;
109107

110-
@Inject
111-
@Named(UPLOAD_TIME)
112-
private Date uploadTime;
113-
114108
private String executionSummaryJson;
115109

116110
@Inject
@@ -176,10 +170,6 @@ public String getChecksum() {
176170
return checksum;
177171
}
178172

179-
public Date getUploadTime() {
180-
return uploadTime;
181-
}
182-
183173
public String getExecutionSummaryJson() {
184174
if (executionSummaryJson == null) {
185175
Object progressLog = resource.getValueMap().get(PROGRESS_LOG);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public class HistoryImpl implements History {
7979
public HistoryEntry logLocal(Script script, ExecutionMode mode, Progress progressLogger) {
8080
return SlingHelper.resolveDefault(resolverProvider, resolver -> {
8181
HistoryEntryWriter historyEntryWriter = createBuilder(resolver, script, mode, progressLogger)
82-
.executionTime(Calendar.getInstance())
82+
.executionTime(progressLogger.getStartTime())
8383
.executionDuration(progressLogger.determineExecutionDuration())
8484
.build();
8585
return createHistoryEntry(resolver, script, mode, historyEntryWriter);

app/aem/core/src/main/java/com/cognifide/apm/core/progress/ProgressImpl.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.cognifide.apm.core.logger.ProgressEntry;
3030
import com.google.common.collect.Lists;
3131
import java.util.ArrayList;
32+
import java.util.Calendar;
3233
import java.util.Collections;
3334
import java.util.LinkedList;
3435
import java.util.List;
@@ -40,7 +41,7 @@ public class ProgressImpl implements Progress {
4041

4142
private final String executor;
4243

43-
private final long startTime;
44+
private final Calendar startTime;
4445

4546
public ProgressImpl(String executor) {
4647
this(executor, new LinkedList<>());
@@ -49,7 +50,7 @@ public ProgressImpl(String executor) {
4950
public ProgressImpl(String executor, List<ProgressEntry> entries) {
5051
this.executor = executor;
5152
this.entries = entries;
52-
this.startTime = System.currentTimeMillis();
53+
this.startTime = Calendar.getInstance();
5354
}
5455

5556
@Override
@@ -131,8 +132,13 @@ public String getExecutor() {
131132
return executor;
132133
}
133134

135+
@Override
136+
public Calendar getStartTime() {
137+
return startTime;
138+
}
139+
134140
@Override
135141
public long determineExecutionDuration() {
136-
return (System.currentTimeMillis() - startTime) / 1000;
142+
return (System.currentTimeMillis() - startTime.getTimeInMillis()) / 1000;
137143
}
138144
}

app/aem/core/src/main/java/com/cognifide/apm/core/services/async/AsyncScriptExecutorImpl.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.cognifide.apm.core.jobs.JobResultsCache.ExecutionSummary;
2828
import com.cognifide.apm.core.jobs.ScriptRunnerJobConsumer;
2929
import com.google.common.collect.ImmutableMap;
30+
import java.util.Calendar;
3031
import java.util.List;
3132
import java.util.Map;
3233
import java.util.UUID;
@@ -76,22 +77,23 @@ public String process(Script script, ExecutionMode executionMode, Map<String, St
7677
public ExecutionStatus checkStatus(String id) {
7778
ExecutionSummary executionSummary = jobResultsCache.get(id);
7879
if (executionSummary == null) {
79-
return new ExecutionStatus.UnknownExecution();
80+
return new ExecutionStatus.Unknown();
8081
} else if (executionSummary.isFinished()) {
8182
return finishedExecution(executionSummary);
8283
} else {
83-
return new ExecutionStatus.RunningExecution();
84+
return new ExecutionStatus.Running();
8485
}
8586
}
8687

8788
private ExecutionStatus finishedExecution(ExecutionSummary executionSummary) {
8889
String path = executionSummary.getPath();
90+
Calendar startTime = executionSummary.getResult().getStartTime();
8991
List<ExecutionResult.Entry> entries = executionSummary.getResult().getEntries();
9092
ExecutionResult.Entry errorEntry = executionSummary.getResult().getLastError();
9193
if (errorEntry != null) {
92-
return new ExecutionStatus.FinishedFailedExecution(path, entries, errorEntry);
94+
return new ExecutionStatus.Failed(path, startTime, entries, errorEntry);
9395
} else {
94-
return new ExecutionStatus.FinishedSuccessfulExecution(path, entries);
96+
return new ExecutionStatus.Successful(path, startTime, entries);
9597
}
9698
}
9799
}

app/aem/core/src/main/java/com/cognifide/apm/core/services/async/ExecutionStatus.java

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
package com.cognifide.apm.core.services.async;
2121

2222
import com.cognifide.apm.api.services.ExecutionResult;
23+
import com.cognifide.apm.core.ui.utils.DateFormatter;
24+
import java.util.Calendar;
2325
import java.util.List;
2426

2527
public abstract class ExecutionStatus {
@@ -34,64 +36,71 @@ public String getStatus() {
3436
return status;
3537
}
3638

37-
public static class RunningExecution extends ExecutionStatus {
39+
public static class Running extends ExecutionStatus {
3840

39-
public RunningExecution() {
41+
public Running() {
4042
super("running");
4143
}
4244
}
4345

44-
public static class UnknownExecution extends ExecutionStatus {
46+
public static class Unknown extends ExecutionStatus {
4547

46-
public UnknownExecution() {
48+
public Unknown() {
4749
super("unknown");
4850
}
4951
}
5052

51-
public static class FinishedSuccessfulExecution extends ExecutionStatus {
53+
protected static class Finished extends ExecutionStatus {
5254

5355
private final String path;
5456

57+
private final long timestamp;
58+
59+
private final String formattedDate;
60+
5561
private final List<ExecutionResult.Entry> entries;
5662

57-
public FinishedSuccessfulExecution(String path, List<ExecutionResult.Entry> entries) {
63+
public Finished(String path, Calendar startTime, List<ExecutionResult.Entry> entries) {
5864
super("finished");
5965
this.path = path;
66+
this.timestamp = startTime.getTimeInMillis();
67+
this.formattedDate = DateFormatter.format(startTime);
6068
this.entries = entries;
6169
}
6270

6371
public String getPath() {
6472
return path;
6573
}
6674

75+
public long getTimestamp() {
76+
return timestamp;
77+
}
78+
79+
public String getFormattedDate() {
80+
return formattedDate;
81+
}
82+
6783
public List<ExecutionResult.Entry> getEntries() {
6884
return entries;
6985
}
7086
}
7187

72-
public static class FinishedFailedExecution extends ExecutionStatus {
88+
public static class Successful extends Finished {
7389

74-
private final String path;
90+
public Successful(String path, Calendar startTime, List<ExecutionResult.Entry> entries) {
91+
super(path, startTime, entries);
92+
}
93+
}
7594

76-
private final List<ExecutionResult.Entry> entries;
95+
public static class Failed extends Finished {
7796

7897
private final ExecutionResult.Entry error;
7998

80-
public FinishedFailedExecution(String path, List<ExecutionResult.Entry> entries, ExecutionResult.Entry error) {
81-
super("finished");
82-
this.path = path;
83-
this.entries = entries;
99+
public Failed(String path, Calendar startTime, List<ExecutionResult.Entry> entries, ExecutionResult.Entry error) {
100+
super(path, startTime, entries);
84101
this.error = error;
85102
}
86103

87-
public String getPath() {
88-
return path;
89-
}
90-
91-
public List<ExecutionResult.Entry> getEntries() {
92-
return entries;
93-
}
94-
95104
public ExecutionResult.Entry getError() {
96105
return error;
97106
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*-
2+
* ========================LICENSE_START=================================
3+
* AEM Permission Management
4+
* %%
5+
* Copyright (C) 2013 Wunderman Thompson Technology
6+
* %%
7+
* Licensed under the Apache License, Version 2.0 (the "License");
8+
* you may not use this file except in compliance with the License.
9+
* You may obtain a copy of the License at
10+
*
11+
* http://www.apache.org/licenses/LICENSE-2.0
12+
*
13+
* Unless required by applicable law or agreed to in writing, software
14+
* distributed under the License is distributed on an "AS IS" BASIS,
15+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
* See the License for the specific language governing permissions and
17+
* limitations under the License.
18+
* =========================LICENSE_END==================================
19+
*/
20+
package com.cognifide.apm.core.ui.utils;
21+
22+
import java.text.SimpleDateFormat;
23+
import java.util.Calendar;
24+
import javax.annotation.PostConstruct;
25+
import org.apache.sling.api.SlingHttpServletRequest;
26+
import org.apache.sling.models.annotations.Model;
27+
import org.apache.sling.models.annotations.injectorspecific.RequestAttribute;
28+
29+
@Model(adaptables = {SlingHttpServletRequest.class})
30+
public class DateFormatter {
31+
32+
@RequestAttribute
33+
private Calendar date;
34+
35+
private String formattedDate;
36+
37+
@PostConstruct
38+
private void afterCreated() {
39+
formattedDate = format(date);
40+
}
41+
42+
public static String format(Calendar date) {
43+
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
44+
return simpleDateFormat.format(date.getTime());
45+
}
46+
47+
public String getFormattedDate() {
48+
return formattedDate;
49+
}
50+
}

app/aem/ui.apps.base/src/main/content/jcr_root/apps/apm/clientlibs/views/scripts/js/apm-scripts.js

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,11 @@
8585
this.$cell.html('<coral-wait/>');
8686
},
8787

88-
showRunStatus: function (success, summaryPath) {
88+
showRunStatus: function (success, summaryPath, timestamp, formattedDate) {
8989
let icon = success ? 'check' : 'close';
9090
let href = '/apm/summary.html' + summaryPath;
91-
this.$cell.html('<a data-sly-test="${run.time}" '
92-
+ 'is="coral-anchorbutton" '
93-
+ 'iconsize="S" '
94-
+ 'icon="' + icon + '"'
95-
+ 'href="' + href + '"></a>'
96-
+ '<time>1 second ago</time>');
91+
this.$cell.html('<a is="coral-anchorbutton" iconsize="S" icon="' + icon + '" href="' + href + '"></a>'
92+
+ '<time datetime="' + timestamp + '">' + formattedDate + '</time>');
9793
},
9894

9995
updateScript: function () {
@@ -131,11 +127,11 @@
131127
this.status = ScriptStatus.FINISHED;
132128
const runStatus = getRunStatus(data);
133129
showMessageOnFinished(this.mode, runStatus);
134-
this.showRunStatus(runStatus !== RunStatus.ERROR, data.path);
130+
this.showRunStatus(runStatus !== RunStatus.ERROR, data.path, data.timestamp, data.formattedDate);
135131
} else if (data.type === 'unknown') {
136132
this.status = ScriptStatus.FINISHED;
137133
showMessageOnUnknown(this.mode, self.job.message);
138-
this.showRunStatus(false, '');
134+
this.showRunStatus(false, '', '', '');
139135
}
140136
},
141137

0 commit comments

Comments
 (0)