帆软报表设计器源代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

208 lines
5.3 KiB

package com.fr.startup.metric;
import com.fr.json.JSONArray;
import com.fr.json.JSONObject;
import com.fr.plugin.context.PluginContext;
import com.fr.plugin.manage.PluginManager;
import com.fr.stable.os.AbstractOperatingSystem;
import com.fr.stable.os.OperatingSystem;
import com.fr.start.common.DesignerStartupContext;
import com.fr.workspace.WorkContext;
import java.lang.management.ManagementFactory;
import java.util.List;
import java.util.stream.Collectors;
/**
* 设计器启动数据
*
* created by Harrison on 2022/08/12
**/
public class DesignerStartupModel {
/**
* landingTime用户从双击图标/.bat启动等到出现起始页的时间
*/
private long landingTime;
/**
* startingTime用户从起始页进入设计器完全可用的时间
*/
private long startingTime;
/**
* info设计器环境的详细信息记录环境信息机器信息远程or本地插件信息
*/
private MachineInfo info;
/**
* mode模式0-有设计器起动页1-无设计器起始页
*/
private int mode;
/**
* jdkVersion:JDK版本
*/
private String jdkVersion;
public DesignerStartupModel() {
}
public DesignerStartupModel(long landingTime, long startingTime, MachineInfo info, int mode) {
this.landingTime = landingTime;
this.startingTime = startingTime;
this.info = info;
this.mode = mode;
}
public long getLandingTime() {
return landingTime;
}
public void setLandingTime(long landingTime) {
this.landingTime = landingTime;
}
public long getStartingTime() {
return startingTime;
}
public void setStartingTime(long startingTime) {
this.startingTime = startingTime;
}
public MachineInfo getInfo() {
return info;
}
public void setInfo(MachineInfo info) {
this.info = info;
}
public String getJdkVersion() {
return jdkVersion;
}
public void setJdkVersion(String jdkVersion) {
this.jdkVersion = jdkVersion;
}
public int getMode() {
return mode;
}
public void setMode(int mode) {
this.mode = mode;
}
private void fillInfo() {
this.setJdkVersion(System.getProperty("java.version"));
MachineInfo info = new MachineInfo();
AbstractOperatingSystem operatingSystem = OperatingSystem.getOperatingSystem();
info.setSystem(operatingSystem.getDisplayString());
try {
final int byteToMb = 1024 * 1024;
com.sun.management.OperatingSystemMXBean operatingSystemMXBean = (com.sun.management.OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
long free = operatingSystemMXBean.getFreePhysicalMemorySize() / byteToMb;
long total = operatingSystemMXBean.getTotalPhysicalMemorySize() / byteToMb;
long used = total - free;
JSONObject jo = new JSONObject();
jo.put("free", free);
jo.put("used", used);
jo.put("total", total);
info.setMachine(jo.toString());
} catch (Exception ignored) {
}
boolean local = WorkContext.getCurrent().isLocal();
info.setWork(local ? 1 : 0);
List<PluginContext> contexts = PluginManager.getContexts();
List<String> contextNames = contexts.stream()
.map(PluginContext::getName)
.collect(Collectors.toList());
JSONArray contextNameJa = new JSONArray(contextNames);
info.setPlugins(contextNameJa.toString());
this.setInfo(info);
}
private void fillMode() {
// 这里需要使用 showStartupPage , 表示是否存在启动页
this.setMode(DesignerStartupContext.getInstance().isShowStartupPage() ? 0 : 1);
}
public void fill() {
fillInfo();
fillMode();
}
private static class MachineInfo {
/**
* 系统信息
*/
private String system;
/**
* 机器信息
*/
private String machine;
/**
* work0-远程1-本地
*/
private int work;
/**
* 插件列表
*/
private String plugins;
public MachineInfo() {
}
public MachineInfo(String system, String machine, int work, String plugins) {
this.system = system;
this.machine = machine;
this.work = work;
this.plugins = plugins;
}
public String getSystem() {
return system;
}
public void setSystem(String system) {
this.system = system;
}
public String getMachine() {
return machine;
}
public void setMachine(String machine) {
this.machine = machine;
}
public int getWork() {
return work;
}
public void setWork(int work) {
this.work = work;
}
public String getPlugins() {
return plugins;
}
public void setPlugins(String plugins) {
this.plugins = plugins;
}
}
}