From 091ce30f314156990fcd54b595595cc6f8cf484e Mon Sep 17 00:00:00 2001 From: hengyunabc Date: Fri, 14 Feb 2025 16:50:00 +0800 Subject: [PATCH] improve banner, support app_name, start_time. #2990 --- .../taobao/arthas/core/util/ArthasBanner.java | 18 +++++++++++++++--- .../com/taobao/arthas/core/util/DateUtils.java | 16 ++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/taobao/arthas/core/util/ArthasBanner.java b/core/src/main/java/com/taobao/arthas/core/util/ArthasBanner.java index e03db910c..468781b95 100644 --- a/core/src/main/java/com/taobao/arthas/core/util/ArthasBanner.java +++ b/core/src/main/java/com/taobao/arthas/core/util/ArthasBanner.java @@ -112,13 +112,25 @@ public class ArthasBanner { public static String welcome(Map infos) { logger.info("Current arthas version: {}, recommend latest version: {}", version(), latestVersion()); + String appName = System.getProperty("project.name"); + if (appName == null) { + appName = System.getProperty("app.name"); + } + if (appName == null) { + appName = System.getProperty("spring.application.name"); + } TableElement table = new TableElement().rightCellPadding(1) .row("wiki", wiki()) .row("tutorials", tutorials()) .row("version", version()) - .row("main_class", PidUtils.mainClass()) - .row("pid", PidUtils.currentPid()) - .row("time", DateUtils.getCurrentDateTime()); + .row("main_class", PidUtils.mainClass()); + + if (appName != null) { + table.row("app_name", appName); + } + table.row("pid", PidUtils.currentPid()) + .row("start_time", DateUtils.getStartDateTime()) + .row("currnt_time", DateUtils.getCurrentDateTime()); for (Entry entry : infos.entrySet()) { table.row(entry.getKey(), entry.getValue()); } diff --git a/core/src/main/java/com/taobao/arthas/core/util/DateUtils.java b/core/src/main/java/com/taobao/arthas/core/util/DateUtils.java index 2efa0dedb..0a4f34a93 100644 --- a/core/src/main/java/com/taobao/arthas/core/util/DateUtils.java +++ b/core/src/main/java/com/taobao/arthas/core/util/DateUtils.java @@ -1,6 +1,10 @@ package com.taobao.arthas.core.util; +import java.lang.management.ManagementFactory; +import java.lang.management.RuntimeMXBean; +import java.time.Instant; import java.time.LocalDateTime; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; /** @@ -21,4 +25,16 @@ public final class DateUtils { public static String formatDateTime(LocalDateTime dateTime) { return DATE_TIME_FORMATTER.format(dateTime); } + + public static String getStartDateTime() { + try { + RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean(); + long startTime = runtimeMXBean.getStartTime(); + Instant startInstant = Instant.ofEpochMilli(startTime); + LocalDateTime startDateTime = LocalDateTime.ofInstant(startInstant, ZoneId.systemDefault()); + return DATE_TIME_FORMATTER.format(startDateTime); + } catch (Throwable e) { + return "unknown"; + } + } }