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
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; |
|
} |
|
|
|
}
|
|
|