summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/gitblit/instance/GitblitInstanceReport.java23
-rw-r--r--src/main/java/com/gitblit/instance/GitblitInstanceStat.java127
-rw-r--r--src/test/java/com/gitblit/instance/GitblitInstanceStatTest.java184
-rw-r--r--src/test/java/com/gitblit/tests/GitBlitSuite.java3
4 files changed, 336 insertions, 1 deletions
diff --git a/src/main/java/com/gitblit/instance/GitblitInstanceReport.java b/src/main/java/com/gitblit/instance/GitblitInstanceReport.java
new file mode 100644
index 00000000..1e68c2f1
--- /dev/null
+++ b/src/main/java/com/gitblit/instance/GitblitInstanceReport.java
@@ -0,0 +1,23 @@
+package com.gitblit.instance;
+
+import com.google.gson.annotations.SerializedName;
+
+/**
+ * GitblitInstanceReport collects the static and dynamic statistics about a running
+ * Gitblit instance, pairs it with a report version and instance id.
+ * This can then be send to the popularity report server.
+ *
+ */
+class GitblitInstanceReport
+{
+ private final int reportVersion = 1;
+ @SerializedName("instance")
+ private final String instanceId;
+ final GitblitInstanceStat instanceStat;
+
+ GitblitInstanceReport(String instanceId, GitblitInstanceStat instanceStat)
+ {
+ this.instanceId = instanceId;
+ this.instanceStat = instanceStat;
+ }
+}
diff --git a/src/main/java/com/gitblit/instance/GitblitInstanceStat.java b/src/main/java/com/gitblit/instance/GitblitInstanceStat.java
new file mode 100644
index 00000000..15ae6fa7
--- /dev/null
+++ b/src/main/java/com/gitblit/instance/GitblitInstanceStat.java
@@ -0,0 +1,127 @@
+package com.gitblit.instance;
+
+import com.gitblit.models.ServerStatus;
+
+import java.util.Date;
+
+/**
+ * GitblitInstanceStat collects the static information about a Gitblit instance,
+ * such as its version, type, operating system and other static data.
+ *
+ */
+class GitblitInstanceStat
+{
+
+ enum GitblitInstanceType {
+ GO,
+ WAR,
+ EXPRESS,
+ DOCKER
+ }
+
+ final GitblitInstanceType instanceType;
+
+ String version;
+ Date startTs;
+ String os;
+ String osName;
+ String osVersion;
+ String osArch;
+ String javaVersion;
+ String javaVendor;
+ String javaRuntimeVersion;
+ String javaRuntimeName;
+ String javaVmVersion;
+ String javaVmName;
+ long maxMem;
+
+
+ GitblitInstanceStat()
+ {
+ this.instanceType = GitblitInstanceType.WAR;
+ initOS();
+ initJava();
+ }
+
+ GitblitInstanceStat(GitblitInstanceType instanceType)
+ {
+ this.instanceType = instanceType;
+ initOS();
+ initJava();
+ }
+
+
+ GitblitInstanceStat init(ServerStatus serverStatus)
+ {
+ this.version = serverStatus.version;
+ this.startTs = serverStatus.bootDate;
+
+ this.maxMem = serverStatus.heapMaximum;
+
+ return this;
+ }
+
+
+ void initOS()
+ {
+ String os = System.getProperty("os.name");
+ if (os == null) {
+ this.os = "Unknown";
+ } else {
+ String oslc = os.toLowerCase();
+ if (oslc.contains("windows")) {
+ this.os = "Windows";
+ } else if (oslc.contains("linux")) {
+ this.os = "Linux";
+ } else if (oslc.contains("mac") || oslc.contains("darwin")) {
+ this.os = "macOS";
+ } else if (oslc.contains("bsd")) {
+ this.os = "BSD";
+ } else if (oslc.contains("solaris") || oslc.contains("sun") ||
+ oslc.contains("aix") || oslc.contains("hpux") || oslc.contains("unix")) {
+ this.os = "Unix";
+ } else {
+ this.os = os;
+ }
+ }
+
+ this.osName = System.getProperty("os.name");
+ this.osVersion = System.getProperty("os.version");
+ this.osArch = System.getProperty("os.arch");
+ }
+
+ void initJava()
+ {
+ this.javaVersion = System.getProperty("java.version");
+ this.javaVendor = System.getProperty("java.vendor");
+ this.javaRuntimeVersion = System.getProperty("java.runtime.version", "");
+ this.javaRuntimeName = System.getProperty("java.runtime.name", "");
+ this.javaVmVersion = System.getProperty("java.vm.version", "");
+ this.javaVmName = System.getProperty("java.vm.name", "");
+ }
+
+
+
+ @Override
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.append("GitblitInstanceStat {")
+ .append("\n instanceType: ").append(instanceType)
+ .append(",\n version: ").append(version)
+ .append(",\n startTs: ").append(startTs)
+ .append(",\n os: ").append(os)
+ .append(",\n osName: ").append(osName)
+ .append(",\n osVersion: ").append(osVersion)
+ .append(",\n osArch: ").append(osArch)
+ .append(",\n javaVersion: ").append(javaVersion)
+ .append(",\n javaVendor: ").append(javaVendor)
+ .append(",\n javaRuntimeVersion: ").append(javaRuntimeVersion)
+ .append(",\n javaRuntimeName: ").append(javaRuntimeName)
+ .append(",\n javaVmVersion: ").append(javaVmVersion)
+ .append(",\n javaVmName: ").append(javaVmName)
+ .append(",\n maxMem: ").append(maxMem)
+ .append("\n}");
+ return sb.toString();
+ }
+}
diff --git a/src/test/java/com/gitblit/instance/GitblitInstanceStatTest.java b/src/test/java/com/gitblit/instance/GitblitInstanceStatTest.java
new file mode 100644
index 00000000..0b883a33
--- /dev/null
+++ b/src/test/java/com/gitblit/instance/GitblitInstanceStatTest.java
@@ -0,0 +1,184 @@
+package com.gitblit.instance;
+
+import com.gitblit.Constants;
+import com.gitblit.models.ServerStatus;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Date;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+public class GitblitInstanceStatTest
+{
+
+ protected GitblitInstanceStat instanceStat;
+ protected ServerStatus serverStatus;
+
+ @Before
+ public void setUp() throws Exception
+ {
+ instanceStat = new GitblitInstanceStat();
+ serverStatus = new ServerStatus();
+ instanceStat.init(serverStatus);
+ }
+
+
+ @Test
+ public void testGetVersion()
+ {
+ String version = instanceStat.version;
+ assertNotNull(version);
+ assertFalse(version.isEmpty());
+ assertEquals(Constants.getVersion(), version);
+ }
+
+ @Test
+ public void testGetStartTs()
+ {
+ Date date = instanceStat.startTs;
+ assertNotNull(date);
+ assertEquals(serverStatus.bootDate, date);
+ }
+
+ @Test
+ public void testGetType()
+ {
+ String type = instanceStat.instanceType.name();
+ assertNotNull(type);
+ assertFalse(type.isEmpty());
+ assertEquals("WAR", type);
+ }
+
+ @Test
+ public void testGetOS()
+ {
+ String os = instanceStat.os;
+
+ String oslc = System.getProperty("os.name").toLowerCase();
+
+ if (oslc.contains("windows")) {
+ assertEquals("Windows", os);
+ }
+ else if (oslc.contains("linux")) {
+ assertEquals("Linux", os);
+ }
+ else if (oslc.contains("mac")) {
+ assertEquals("macOS", os);
+ }
+ }
+
+ @Test
+ public void testGetOSName()
+ {
+ String name = instanceStat.osName;
+ assertNotNull(name);
+ assertFalse(name.isEmpty());
+ assertEquals(System.getProperty("os.name"), name);
+ }
+
+ @Test
+ public void testGetOSVersion()
+ {
+ String version = instanceStat.osVersion;
+ assertNotNull(version);
+ assertFalse(version.isEmpty());
+ assertEquals(System.getProperty("os.version"), version);
+ }
+
+ @Test
+ public void testGetOSArch()
+ {
+ String arch = instanceStat.osArch;
+ assertNotNull(arch);
+ assertFalse(arch.isEmpty());
+ assertEquals(System.getProperty("os.arch"), arch);
+ }
+
+ @Test
+ public void testGetJavaVersion()
+ {
+ String version = instanceStat.javaVersion;
+ assertNotNull(version);
+ assertFalse(version.isEmpty());
+ assertEquals(System.getProperty("java.version"), version);
+ }
+
+ @Test
+ public void testGetJavaVendor()
+ {
+ String vendor = instanceStat.javaVendor;
+ assertNotNull(vendor);
+ assertFalse(vendor.isEmpty());
+ assertEquals(System.getProperty("java.vendor"), vendor);
+ }
+
+ @Test
+ public void testGetJavaRuntimeVersion()
+ {
+ String rt = instanceStat.javaRuntimeVersion;
+ assertNotNull(rt);
+ assertFalse(rt.isEmpty());
+ assertEquals(System.getProperty("java.runtime.version"), rt);
+ }
+
+ @Test
+ public void testGetJavaRuntimeName()
+ {
+ String rt = instanceStat.javaRuntimeName;
+ assertNotNull(rt);
+ assertFalse(rt.isEmpty());
+ assertEquals(System.getProperty("java.runtime.name"), rt);
+ }
+
+ @Test
+ public void testGetJavaVmVersion()
+ {
+ String vm = instanceStat.javaVmVersion;
+ assertNotNull(vm);
+ assertFalse(vm.isEmpty());
+ assertEquals(System.getProperty("java.vm.version"), vm);
+ }
+
+ @Test
+ public void testGetJavaVmName()
+ {
+ String vm = instanceStat.javaVmName;
+ assertNotNull(vm);
+ assertFalse(vm.isEmpty());
+ assertEquals(System.getProperty("java.vm.name"), vm);
+ }
+
+ @Test
+ public void testGetMaxMem()
+ {
+ long maxMem = instanceStat.maxMem;
+ assertTrue(maxMem > 0);
+ assertEquals(Runtime.getRuntime().maxMemory(), maxMem);
+ }
+
+ @Test
+ public void testToString()
+ {
+ String str = instanceStat.toString();
+ assertNotNull(str);
+ assertFalse(str.isEmpty());
+ assertTrue(str.contains("GitblitInstanceStat"));
+ assertTrue(str.contains("version"));
+ assertTrue(str.contains("instanceType"));
+ assertTrue(str.contains("os"));
+ assertTrue(str.contains("osName"));
+ assertTrue(str.contains("osVersion"));
+ assertTrue(str.contains("osArch"));
+ assertTrue(str.contains("javaVersion"));
+ assertTrue(str.contains("javaVendor"));
+ assertTrue(str.contains("javaRuntimeVersion"));
+ assertTrue(str.contains("javaRuntimeName"));
+ assertTrue(str.contains("javaVmVersion"));
+ assertTrue(str.contains("javaVmName"));
+
+ }
+}
diff --git a/src/test/java/com/gitblit/tests/GitBlitSuite.java b/src/test/java/com/gitblit/tests/GitBlitSuite.java
index 070c0fce..083488a0 100644
--- a/src/test/java/com/gitblit/tests/GitBlitSuite.java
+++ b/src/test/java/com/gitblit/tests/GitBlitSuite.java
@@ -27,6 +27,7 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import com.gitblit.instance.GitblitInstanceIdTest;
+import com.gitblit.instance.GitblitInstanceStatTest;
import com.gitblit.utils.TimeUtilsTest;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.lib.Repository;
@@ -76,7 +77,7 @@ import com.gitblit.utils.JGitUtils;
BranchTicketServiceTest.class, RedisTicketServiceTest.class, AuthenticationManagerTest.class,
SshKeysDispatcherTest.class, UITicketTest.class, PathUtilsTest.class, SshKerberosAuthenticationTest.class,
GravatarTest.class, FilestoreManagerTest.class, FilestoreServletTest.class, TicketReferenceTest.class,
- GitblitInstanceIdTest.class })
+ GitblitInstanceIdTest.class, GitblitInstanceStatTest.class })
public class GitBlitSuite {
public static final File BASEFOLDER = new File("data");