package com.smtaiserver.smtaiserver.javaai.metrics.base; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.apache.commons.text.similarity.JaccardSimilarity; import com.smtaiserver.smtaiserver.core.SMTAIServerRequest; import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecord; import com.smtaiserver.smtaiserver.javaai.SMTJavaAIError; import com.smtaiserver.smtaiserver.javaai.ast.ASTDBMap; import com.smtaiserver.smtaiserver.javaai.ast.ASTResult; import com.smtaiserver.smtaiserver.javaai.duckdb.DuckResult; import com.smtservlet.util.Json; import com.smtservlet.util.SMTStatic; public abstract class SMTMetricsDef { protected String _id; protected String _title; protected String _unit; protected Set _setMatch; public abstract Map getDimensionMap(); public void initInstance(DBRecord rec) throws Exception { _id = rec.getString("metrics_id"); _title = rec.getString("metrics_title"); _unit = rec.getString("metrics_unit"); String sMatch = rec.getString("metrics_match"); if(SMTStatic.isNullOrEmpty(_unit)) { _unit = ""; } _setMatch = new HashSet<>(); if(!SMTStatic.isNullOrEmpty(sMatch)) { for(Json jsonMatch : Json.read(sMatch).asJsonList()) { _setMatch.add(jsonMatch.asString()); } } } public String getUnitName() { return _unit; } public Set getMetricsAliasSet() { return _setMatch; } public void addMetricsAliasToSet(Set r_set) { for(String alias : _setMatch) { r_set.add(alias); } } public double matchMetrics(String value, JaccardSimilarity jaccardSimilarity) { if(_setMatch == null) return -1; if(_setMatch.contains(value)) return 1; double maxSim = 0; for(String str : _setMatch) { double curSim = jaccardSimilarity.apply(value, str); if(curSim >= 0.8 && maxSim < curSim) maxSim = curSim; } return maxSim; } public void afterLoading(Map mapMetrics) throws Exception { } public String getId() { return _id; } public String getTitle() { return _title; } public boolean isTimeValues() { return true; } public boolean isChartValues() { return false; } public void queryUnknowQuestionList(JaccardSimilarity jaccardSimilarity, String keyword, SMTAIServerRequest tranReq) throws Exception { } // TODO 去掉旧版函数 public SMTJavaAIError queryMetrics(String jsonPath, ASTDBMap dbMap, Json jsonAST, Map extArg, SMTAIServerRequest tranReq, ASTResult r_parentResult) throws Exception { throw new Exception("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); } // TODO 新版函数做成抽象函数 public SMTJavaAIError queryMetrics(String jsonPath, ASTDBMap dbMap, Json jsonAST, Map extArg, SMTAIServerRequest tranReq, DuckResult r_parentResult) throws Exception { throw new Exception("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); } }