diff options
Diffstat (limited to 'src')
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");
|