Skip to content

Commit bbb214b

Browse files
committed
Add diagnotic tool
1 parent d9cf33b commit bbb214b

File tree

28 files changed

+139
-43
lines changed

28 files changed

+139
-43
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# Version 3.8.6 (2019-07-??)
2+
3+
* [new] Introduce the `diag` tool to manually write a diagnostic report to standard output or in a file.
4+
15
# Version 3.8.5 (2019-03-22)
26

37
* [new] The `@Provide` annotation allows to register JSR-330 providers for producing injectable instances of a specific type.

cli/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<groupId>org.seedstack.seed</groupId>
1616
<artifactId>seed</artifactId>
17-
<version>3.8.5-SNAPSHOT</version>
17+
<version>3.8.6-SNAPSHOT</version>
1818
</parent>
1919

2020
<artifactId>seed-cli</artifactId>

core/pom.xml

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<groupId>org.seedstack.seed</groupId>
1616
<artifactId>seed</artifactId>
17-
<version>3.8.5-SNAPSHOT</version>
17+
<version>3.8.6-SNAPSHOT</version>
1818
</parent>
1919

2020
<artifactId>seed-core</artifactId>
@@ -52,6 +52,11 @@
5252
<artifactId>guice-assistedinject</artifactId>
5353
<version>${guice.version}</version>
5454
</dependency>
55+
<dependency>
56+
<groupId>org.slf4j</groupId>
57+
<artifactId>slf4j-api</artifactId>
58+
<version>${slf4j.version}</version>
59+
</dependency>
5560
<dependency>
5661
<groupId>org.slf4j</groupId>
5762
<artifactId>jcl-over-slf4j</artifactId>
@@ -109,21 +114,31 @@
109114
<version>${project.version}</version>
110115
</dependency>
111116

112-
<!-- Provided dependencies -->
117+
<!-- Optional dependencies -->
118+
<dependency>
119+
<groupId>org.hibernate</groupId>
120+
<artifactId>hibernate-validator</artifactId>
121+
<version>${hibernate-validator.version}</version>
122+
<optional>true</optional>
123+
</dependency>
113124
<dependency>
114125
<groupId>javax.el</groupId>
115126
<artifactId>javax.el-api</artifactId>
116127
<version>${javax.el.version}</version>
117-
<scope>provided</scope>
128+
<optional>true</optional>
118129
</dependency>
119130
<dependency>
120131
<groupId>javax.transaction</groupId>
121132
<artifactId>javax.transaction-api</artifactId>
122133
<version>${jta.version}</version>
123-
<scope>provided</scope>
134+
<optional>true</optional>
135+
</dependency>
136+
<dependency>
137+
<groupId>javax.validation</groupId>
138+
<artifactId>validation-api</artifactId>
139+
<version>${javax.validation.version}</version>
140+
<optional>true</optional>
124141
</dependency>
125-
126-
<!-- Optional dependencies -->
127142
<dependency>
128143
<groupId>ch.qos.logback</groupId>
129144
<artifactId>logback-classic</artifactId>
@@ -136,12 +151,6 @@
136151
<version>${glassfish-javax.el.version}</version>
137152
<optional>true</optional>
138153
</dependency>
139-
<dependency>
140-
<groupId>org.hibernate</groupId>
141-
<artifactId>hibernate-validator</artifactId>
142-
<version>${hibernate-validator.version}</version>
143-
<optional>true</optional>
144-
</dependency>
145154

146155
<!-- Test dependencies -->
147156
<dependency>

core/src/main/java/org/seedstack/seed/core/internal/diagnostic/DefaultDiagnosticReporter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ public void writeDiagnosticReport(Map<String, Object> diagnosticInfo) throws IOE
7373
}
7474
}
7575

76-
void writeDiagnosticReport(Map<String, Object> diagnosticInfo, Writer writer) throws IOException {
76+
@Override
77+
public void writeDiagnosticReport(Map<String, Object> diagnosticInfo, Writer writer) throws IOException {
7778
try (JsonGenerator jsonGenerator = YAML_FACTORY.createGenerator(writer)) {
7879
jsonGenerator.setPrettyPrinter(DEFAULT_PRETTY_PRINTER);
7980
jsonGenerator.writeObject(diagnosticInfo);

core/src/main/java/org/seedstack/seed/core/internal/diagnostic/DiagnosticManagerImpl.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55
* License, v. 2.0. If a copy of the MPL was not distributed with this
66
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
77
*/
8+
89
package org.seedstack.seed.core.internal.diagnostic;
910

1011
import com.google.common.collect.Maps;
12+
import java.io.Writer;
1113
import java.lang.management.ManagementFactory;
1214
import java.lang.management.RuntimeMXBean;
1315
import java.lang.management.ThreadInfo;
@@ -73,6 +75,16 @@ public void dumpDiagnosticReport(Throwable t) {
7375
}
7476
}
7577

78+
@Override
79+
public void writeDiagnosticReport(Throwable t, Writer writer) {
80+
try {
81+
diagnosticReporter.writeDiagnosticReport(collectAllDiagnostics(t), writer);
82+
} catch (Exception e) {
83+
LOGGER.error("Unable to write diagnostic information", e);
84+
throw SeedException.wrap(t, CoreErrorCode.RETHROW_EXCEPTION_AFTER_DIAGNOSTIC_FAILURE);
85+
}
86+
}
87+
7688
@Override
7789
public void registerDiagnosticInfoCollector(String domain, DiagnosticInfoCollector diagnosticInfoCollector) {
7890
diagnosticCollectors.put(domain, diagnosticInfoCollector);
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
* Copyright © 2013-2019, The SeedStack authors <http://seedstack.org>
3+
*
4+
* This Source Code Form is subject to the terms of the Mozilla Public
5+
* License, v. 2.0. If a copy of the MPL was not distributed with this
6+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
7+
*/
8+
9+
package org.seedstack.seed.core.internal.diagnostic.tool;
10+
11+
import com.google.common.base.Strings;
12+
import java.io.FileOutputStream;
13+
import java.io.OutputStreamWriter;
14+
import java.io.Writer;
15+
import java.nio.charset.Charset;
16+
import org.seedstack.seed.cli.CliOption;
17+
import org.seedstack.seed.core.Seed;
18+
import org.seedstack.seed.core.internal.AbstractSeedTool;
19+
20+
public class DiagTool extends AbstractSeedTool {
21+
@CliOption(name = "f", longName = "file", valueCount = 1, mandatoryValue = true)
22+
private String file;
23+
24+
@Override
25+
public String toolName() {
26+
return "diag";
27+
}
28+
29+
@Override
30+
public Integer call() throws Exception {
31+
if (Strings.isNullOrEmpty(file)) {
32+
try (Writer writer = new OutputStreamWriter(System.out, Charset.forName("UTF-8").newEncoder())) {
33+
return write(writer);
34+
}
35+
} else {
36+
try (Writer writer = new OutputStreamWriter(new FileOutputStream(file),
37+
Charset.forName("UTF-8").newEncoder())) {
38+
return write(writer);
39+
}
40+
}
41+
}
42+
43+
private Integer write(Writer writer) {
44+
try {
45+
Seed.diagnostic().writeDiagnosticReport(null, writer);
46+
return 0;
47+
} catch (Exception e) {
48+
System.err.println("Failed to create the diagnostic report");
49+
Seed.translateException(e).printStackTrace(System.err);
50+
return 1;
51+
}
52+
}
53+
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
org.seedstack.seed.core.internal.configuration.tool.ConfigTool
22
org.seedstack.seed.core.internal.diagnostic.tool.ErrorsTool
33
org.seedstack.seed.core.internal.crypto.CryptTool
4-
org.seedstack.seed.core.internal.configuration.tool.EffectiveConfigTool
4+
org.seedstack.seed.core.internal.configuration.tool.EffectiveConfigTool
5+
org.seedstack.seed.core.internal.diagnostic.tool.DiagTool

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
<groupId>org.seedstack.seed</groupId>
2121
<artifactId>seed</artifactId>
22-
<version>3.8.5-SNAPSHOT</version>
22+
<version>3.8.6-SNAPSHOT</version>
2323
<packaging>pom</packaging>
2424

2525
<properties>

rest/core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<groupId>org.seedstack.seed</groupId>
1616
<artifactId>seed-rest</artifactId>
17-
<version>3.8.5-SNAPSHOT</version>
17+
<version>3.8.6-SNAPSHOT</version>
1818
</parent>
1919

2020
<artifactId>seed-rest-core</artifactId>

rest/jersey2/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<groupId>org.seedstack.seed</groupId>
1616
<artifactId>seed-rest</artifactId>
17-
<version>3.8.5-SNAPSHOT</version>
17+
<version>3.8.6-SNAPSHOT</version>
1818
</parent>
1919

2020
<artifactId>seed-rest-jersey2</artifactId>

0 commit comments

Comments
 (0)