帆软报表设计器源代码。
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.
 
 
 
 

94 lines
3.3 KiB

package com.fr.start;
import com.fr.concurrent.FineExecutors;
import com.fr.concurrent.NamedThreadFactory;
import com.fr.design.mainframe.SiteCenterToken;
import com.fr.design.metric.AbstractDesignerMetric;
import com.fr.general.CloudCenter;
import com.fr.general.http.HttpToolbox;
import com.fr.json.JSONObject;
import com.fr.json.revise.EmbedJson;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.StringUtils;
import com.fr.start.common.DesignerStartupContext;
import com.fr.startup.metric.DesignerMetrics;
import com.fr.startup.metric.DesignerStartupModel;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* fbp设计器启动埋点提交
*
* @author Bruce.Deng
* @since 11.0
* Created on 2024/9/5
*/
public class DesignerStartupMetric extends AbstractDesignerMetric {
private static final String LANDING_TIME = "landingTime";
private static final String STARTING_TIME = "startingTime";
private static final String MODE = "mode";
private static final String INFO = "info";
private static volatile DesignerStartupMetric instance = new DesignerStartupMetric();
private static final String DESIGNER_START_TABLE_SUFFIX = "record_of_fbp_designerStartTime/single";
private DesignerStartupMetric() {
}
/**
* 获取单例
*/
public static DesignerStartupMetric getInstance() {
return instance;
}
/**
* 延迟5分钟提交埋点数据
*
*/
public void asyncSubmit() {
ScheduledExecutorService scheduledExecutorService = FineExecutors.newSingleThreadScheduledExecutor(new NamedThreadFactory("DesignerStartupMetricSubmit"));
scheduledExecutorService.schedule(new Runnable() {
@Override
public void run() {
collectAndSubmit();
}
}, 5, TimeUnit.MINUTES);
scheduledExecutorService.shutdown();
}
private void collectAndSubmit() {
Map<String, Object> para = new HashMap<>();
para.put("token", SiteCenterToken.generateToken());
para.put("content", collect());
try {
HttpToolbox.post(getUrl(), para);
FineLoggerFactory.getLogger().debug("[DesignerStartup] submit designer startup metric to cloud.");
} catch (Throwable t) {
FineLoggerFactory.getLogger().debug(t,"[DesignerStartup] failed to submit designer startup metric to cloud.");
}
}
private String getUrl() {
String monitorEntry = CloudCenter.getInstance().acquireUrlByKind("cloud.monitor.api.entrypoint");
String url = (StringUtils.isNotEmpty(monitorEntry) ? monitorEntry : DEFAULT_MONITOR_URL)
+ DESIGNER_START_TABLE_SUFFIX;
return url;
}
private JSONObject collect() {
JSONObject info = new JSONObject();
DesignerMetrics designerMetrics = DesignerStartupContext.getInstance().getDesignerMetrics();
DesignerStartupModel model = designerMetrics.getModel();
info.put(LANDING_TIME, model.getLandingTime());
info.put(STARTING_TIME, model.getStartingTime());
info.put(MODE, model.getMode());
info.put(INFO, EmbedJson.encode(model.getInfo()));
addDefaultMetric(info);
return info;
}
}