From b0cec677280708bbfafd3eb5eaa2bc98b241fc07 Mon Sep 17 00:00:00 2001 From: Daniel Beck <1831569+daniel-beck@users.noreply.github.com> Date: Tue, 19 Dec 2023 09:42:55 +0100 Subject: [PATCH] Add telemetry for basic Java system properties (#8787) --- .../telemetry/impl/JavaSystemProperties.java | 92 +++++++++++++++++++ .../help-usageStatisticsCollected.jelly | 2 +- .../JavaSystemProperties/description.jelly | 24 +++++ .../description.properties | 5 + 4 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 core/src/main/java/jenkins/telemetry/impl/JavaSystemProperties.java create mode 100644 core/src/main/resources/jenkins/telemetry/impl/JavaSystemProperties/description.jelly create mode 100644 core/src/main/resources/jenkins/telemetry/impl/JavaSystemProperties/description.properties diff --git a/core/src/main/java/jenkins/telemetry/impl/JavaSystemProperties.java b/core/src/main/java/jenkins/telemetry/impl/JavaSystemProperties.java new file mode 100644 index 000000000000..90b66fd6f5bd --- /dev/null +++ b/core/src/main/java/jenkins/telemetry/impl/JavaSystemProperties.java @@ -0,0 +1,92 @@ +/* + * The MIT License + * + * Copyright (c) 2023, Daniel Beck + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.telemetry.impl; + +import edu.umd.cs.findbugs.annotations.NonNull; +import hudson.Extension; +import java.time.LocalDate; +import java.util.Map; +import java.util.TreeMap; +import jenkins.telemetry.Telemetry; +import net.sf.json.JSONObject; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; + +/** + * Collect the value of various Java system properties describing the environment. + */ +@Extension +@Restricted(NoExternalUse.class) +public class JavaSystemProperties extends Telemetry { + private static final String[] PROPERTIES = new String[] { + "file.encoding", + "file.separator", + "java.vm.name", + "java.vm.vendor", + "java.vm.version", + "os.arch", + "os.name", + "os.version", + "user.language", + }; + + public Map getProperties() { + Map properties = new TreeMap<>(); + for (String property : PROPERTIES) { + final String value = System.getProperty(property); + properties.put(property, value); + } + return properties; + } + + @NonNull + @Override + public String getDisplayName() { + return "System Properties"; + } + + @NonNull + @Override + public LocalDate getStart() { + return LocalDate.of(2023, 12, 17); + } + + @NonNull + @Override + public LocalDate getEnd() { + return LocalDate.of(2024, 4, 1); + } + + @Override + public JSONObject createContent() { + JSONObject o = new JSONObject(); + for (Map.Entry entry : getProperties().entrySet()) { + final String value = entry.getValue(); + o = o.element(entry.getKey(), value == null ? "(undefined)" : value); + } + o.put("components", buildComponentInformation()); + return o; + } +} diff --git a/core/src/main/resources/hudson/model/UsageStatistics/help-usageStatisticsCollected.jelly b/core/src/main/resources/hudson/model/UsageStatistics/help-usageStatisticsCollected.jelly index 80237768112a..a1bef14d4e22 100644 --- a/core/src/main/resources/hudson/model/UsageStatistics/help-usageStatisticsCollected.jelly +++ b/core/src/main/resources/hudson/model/UsageStatistics/help-usageStatisticsCollected.jelly @@ -48,7 +48,7 @@
${collector.displayName}
- +

Start date: ${collector.start}
End date: ${collector.end} diff --git a/core/src/main/resources/jenkins/telemetry/impl/JavaSystemProperties/description.jelly b/core/src/main/resources/jenkins/telemetry/impl/JavaSystemProperties/description.jelly new file mode 100644 index 000000000000..02a39a039f16 --- /dev/null +++ b/core/src/main/resources/jenkins/telemetry/impl/JavaSystemProperties/description.jelly @@ -0,0 +1,24 @@ + + +

+ ${%blurb} +

+
    + +
  • + ${e.key} + + + (current value: undefined) + + + (current value: ${e.value}) + + +
  • +
    +
+

+ ${%blurb2} +

+ diff --git a/core/src/main/resources/jenkins/telemetry/impl/JavaSystemProperties/description.properties b/core/src/main/resources/jenkins/telemetry/impl/JavaSystemProperties/description.properties new file mode 100644 index 000000000000..8bdedbf8399e --- /dev/null +++ b/core/src/main/resources/jenkins/telemetry/impl/JavaSystemProperties/description.properties @@ -0,0 +1,5 @@ +blurb = This trial collects the values of some basic Java system properties, that provide information about basic system configuration \ + (OS, Java runtime, default language and character set). \ + The collected system properties and their values are listed below. +blurb2 = Additionally, this trial collects the list of installed plugins, their version, and the version of Jenkins. \ + This data will be used to understand the environments that Jenkins is running in.