add h2 support phase 4
This commit is contained in:
parent
dfba63defb
commit
35c23fc62d
|
|
@ -26,7 +26,7 @@ public class ServiceNameH2DAO extends H2DAO implements IServiceNameDAO {
|
|||
@Override
|
||||
public int getServiceId(int applicationId, String serviceName) {
|
||||
H2Client client = getClient();
|
||||
String sql = MessageFormat.format(GET_SERVICE_ID_SQL, ServiceNameTable.COLUMN_SERVICE_ID, ServiceNameTable.COLUMN_SERVICE_NAME,
|
||||
String sql = MessageFormat.format(GET_SERVICE_ID_SQL, ServiceNameTable.COLUMN_SERVICE_ID,
|
||||
ServiceNameTable.TABLE, ServiceNameTable.COLUMN_APPLICATION_ID, ServiceNameTable.COLUMN_SERVICE_NAME);
|
||||
Object[] params = new Object[]{applicationId, serviceName};
|
||||
try (ResultSet rs = client.executeQuery(sql, params)) {
|
||||
|
|
|
|||
|
|
@ -28,13 +28,15 @@ public class ServiceEntryH2DAO extends H2DAO implements IServiceEntryDAO, IPersi
|
|||
String sql = "select * from " + ServiceEntryTable.TABLE + " where id = ?";
|
||||
Object[] params = new Object[] {id};
|
||||
try (ResultSet rs = client.executeQuery(sql, params)) {
|
||||
Data data = dataDefine.build(id);
|
||||
data.setDataInteger(0, rs.getInt(ServiceEntryTable.COLUMN_APPLICATION_ID));
|
||||
data.setDataInteger(1, rs.getInt(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID));
|
||||
data.setDataString(1, rs.getString(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME));
|
||||
data.setDataLong(0, rs.getLong(ServiceEntryTable.COLUMN_REGISTER_TIME));
|
||||
data.setDataLong(1, rs.getLong(ServiceEntryTable.COLUMN_NEWEST_TIME));
|
||||
return data;
|
||||
if (rs.next()) {
|
||||
Data data = dataDefine.build(id);
|
||||
data.setDataInteger(0, rs.getInt(ServiceEntryTable.COLUMN_APPLICATION_ID));
|
||||
data.setDataInteger(1, rs.getInt(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID));
|
||||
data.setDataString(1, rs.getString(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME));
|
||||
data.setDataLong(0, rs.getLong(ServiceEntryTable.COLUMN_REGISTER_TIME));
|
||||
data.setDataLong(1, rs.getLong(ServiceEntryTable.COLUMN_NEWEST_TIME));
|
||||
return data;
|
||||
}
|
||||
} catch (SQLException | H2ClientException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,16 +24,16 @@ collector_inside:
|
|||
grpc:
|
||||
host: localhost
|
||||
port: 11800
|
||||
storage:
|
||||
elasticsearch:
|
||||
cluster_name: CollectorDBCluster
|
||||
cluster_transport_sniffer: true
|
||||
cluster_nodes: localhost:9300
|
||||
index_shards_number: 2
|
||||
index_replicas_number: 0
|
||||
# uncomment to enable h2 storage
|
||||
#storage:
|
||||
# h2:
|
||||
# url: jdbc:h2:~/collector
|
||||
# user_name: sa
|
||||
# password: sa
|
||||
# elasticsearch:
|
||||
# cluster_name: CollectorDBCluster
|
||||
# cluster_transport_sniffer: true
|
||||
# cluster_nodes: localhost:9300
|
||||
# index_shards_number: 2
|
||||
# index_replicas_number: 0
|
||||
# uncomment to enable h2 storage
|
||||
storage:
|
||||
h2:
|
||||
url: jdbc:h2:~/collector
|
||||
user_name: sa
|
||||
password: sa
|
||||
|
|
@ -64,7 +64,7 @@ public class H2Client implements Client {
|
|||
}
|
||||
|
||||
public ResultSet executeQuery(String sql, Object[] params) throws H2ClientException {
|
||||
logger.info("execute query with result: {}", sql);
|
||||
logger.debug("execute query with result: {}", sql);
|
||||
ResultSet rs;
|
||||
PreparedStatement statement;
|
||||
try {
|
||||
|
|
@ -83,7 +83,7 @@ public class H2Client implements Client {
|
|||
}
|
||||
|
||||
public boolean execute(String sql, Object[] params) throws H2ClientException {
|
||||
logger.info("execute insert/update/delete: {}", sql);
|
||||
logger.debug("execute insert/update/delete: {}", sql);
|
||||
boolean flag;
|
||||
Connection conn = getConnection();
|
||||
try (PreparedStatement statement = conn.prepareStatement(sql)) {
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ public class BatchH2DAO extends H2DAO implements IBatchDAO {
|
|||
@Override
|
||||
public void batchPersistence(List<?> batchCollection) {
|
||||
if (batchCollection != null && batchCollection.size() > 0) {
|
||||
logger.info("the batch collection size is {}, current thread id {}", batchCollection.size());
|
||||
logger.debug("the batch collection size is {}", batchCollection.size());
|
||||
Connection conn = null;
|
||||
final Map<String, PreparedStatement> batchSqls = new HashMap<>();
|
||||
try {
|
||||
|
|
@ -41,7 +41,7 @@ public class BatchH2DAO extends H2DAO implements IBatchDAO {
|
|||
|
||||
Object[] params = e.getParams();
|
||||
if (params != null) {
|
||||
logger.info("the sql is {}, params size is {}", e.getSql(), params.length);
|
||||
logger.debug("the sql is {}, params size is {}", e.getSql(), params.length);
|
||||
for (int i = 0; i < params.length; i++) {
|
||||
ps.setObject(i + 1, params[i]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,11 @@
|
|||
package org.skywalking.apm.collector.ui.dao;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.elasticsearch.search.sort.SortOrder;
|
||||
import org.skywalking.apm.collector.client.h2.H2Client;
|
||||
import org.skywalking.apm.collector.client.h2.H2ClientException;
|
||||
|
|
@ -14,11 +18,8 @@ import org.skywalking.apm.collector.storage.h2.dao.H2DAO;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
/**
|
||||
* @author pengys5, clevertension
|
||||
|
|
@ -31,7 +32,9 @@ public class SegmentCostH2DAO extends H2DAO implements ISegmentCostDAO {
|
|||
H2Client client = getClient();
|
||||
String sql = GET_SEGMENT_COST_SQL;
|
||||
List<Object> params = new ArrayList<>();
|
||||
List<String> columns = new ArrayList<>();
|
||||
List<Object> columns = new ArrayList<>();
|
||||
columns.add(SegmentCostTable.TABLE);
|
||||
columns.add(SegmentCostTable.COLUMN_TIME_BUCKET);
|
||||
params.add(startTime);
|
||||
params.add(endTime);
|
||||
int paramIndex = 1;
|
||||
|
|
@ -95,7 +98,8 @@ public class SegmentCostH2DAO extends H2DAO implements ISegmentCostDAO {
|
|||
}
|
||||
|
||||
sql = sql + " limit " + from + "," + limit;
|
||||
sql = MessageFormat.format(sql, SegmentCostTable.TABLE, SegmentCostTable.COLUMN_TIME_BUCKET, columns);
|
||||
MessageFormat messageFormat = new MessageFormat(sql);
|
||||
sql = messageFormat.format(columns.toArray(new Object[0]));
|
||||
Object[] p = params.toArray(new Object[0]);
|
||||
|
||||
JsonObject topSegPaging = new JsonObject();
|
||||
|
|
|
|||
|
|
@ -29,7 +29,10 @@ public class ServiceEntryH2DAO extends H2DAO implements IServiceEntryDAO {
|
|||
H2Client client = getClient();
|
||||
String sql = GET_SERVICE_ENTRY_SQL;
|
||||
List<Object> params = new ArrayList<>();
|
||||
List<String> columns = new ArrayList<>();
|
||||
List<Object> columns = new ArrayList<>();
|
||||
columns.add(ServiceEntryTable.TABLE);
|
||||
columns.add(ServiceEntryTable.COLUMN_NEWEST_TIME);
|
||||
columns.add(ServiceEntryTable.COLUMN_REGISTER_TIME);
|
||||
params.add(startTime);
|
||||
params.add(endTime);
|
||||
int paramIndex = 2;
|
||||
|
|
@ -46,8 +49,8 @@ public class ServiceEntryH2DAO extends H2DAO implements IServiceEntryDAO {
|
|||
columns.add(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME);
|
||||
}
|
||||
sql = sql + " limit " + from + "," + size;
|
||||
sql = MessageFormat.format(sql, ServiceEntryTable.TABLE, ServiceEntryTable.COLUMN_NEWEST_TIME,
|
||||
ServiceEntryTable.COLUMN_REGISTER_TIME, columns);
|
||||
MessageFormat messageFormat = new MessageFormat(sql);
|
||||
sql = messageFormat.format(columns.toArray(new Object[0]));
|
||||
Object[] p = params.toArray(new Object[0]);
|
||||
JsonArray serviceArray = new JsonArray();
|
||||
JsonObject response = new JsonObject();
|
||||
|
|
|
|||
|
|
@ -1,18 +1,262 @@
|
|||
package org.skywalking.apm.collector.ui.dao;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.skywalking.apm.collector.client.h2.H2Client;
|
||||
import org.skywalking.apm.collector.client.h2.H2ClientException;
|
||||
import org.skywalking.apm.collector.core.util.ColumnNameUtils;
|
||||
import org.skywalking.apm.collector.core.util.Const;
|
||||
import org.skywalking.apm.collector.core.util.ObjectUtils;
|
||||
import org.skywalking.apm.collector.core.util.StringUtils;
|
||||
import org.skywalking.apm.collector.storage.define.serviceref.ServiceReferenceTable;
|
||||
import org.skywalking.apm.collector.storage.h2.dao.H2DAO;
|
||||
import org.skywalking.apm.collector.ui.cache.ServiceIdCache;
|
||||
import org.skywalking.apm.collector.ui.cache.ServiceNameCache;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
/**
|
||||
* @author pengys5
|
||||
* @author pengys5, clevertension
|
||||
*/
|
||||
public class ServiceReferenceH2DAO extends H2DAO implements IServiceReferenceDAO {
|
||||
private final Logger logger = LoggerFactory.getLogger(ServiceReferenceH2DAO.class);
|
||||
|
||||
private static final String GET_SRV_REF_LOAD1 = "select {4}, {5}, {6}, {7}, sum({8}) as cnt1, sum({9}) as cnt2, sum({10}) as cnt3" +
|
||||
",sum({11}) as cnt4, sum({12}) cnt5, sum({13}) as cnt6, sum({14}) as cnt7 from {0} where {1} >= ? and {1} <= ? and {2} = ? and {3} = ? group by {4}, {5}, {6}, {7}";
|
||||
private static final String GET_SRV_REF_LOAD2 = "select {3}, {4}, {5}, {6}, sum({7}) as cnt1, sum({8}) as cnt2, sum({9}) as cnt3" +
|
||||
",sum({10}) as cnt4, sum({11}) cnt5, sum({12}) as cnt6, sum({13}) as cnt7 from {0} where {1} >= ? and {1} <= ? and {2} = ? group by {3}, {4}, {5}, {6}";
|
||||
|
||||
@Override public JsonArray load(int entryServiceId, long startTime, long endTime) {
|
||||
H2Client client = getClient();
|
||||
String sql = MessageFormat.format(GET_SRV_REF_LOAD1, ServiceReferenceTable.TABLE,
|
||||
ServiceReferenceTable.COLUMN_TIME_BUCKET, ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME,
|
||||
ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID, ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID,
|
||||
ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME, ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME,
|
||||
ServiceReferenceTable.COLUMN_S1_LTE, ServiceReferenceTable.COLUMN_S3_LTE, ServiceReferenceTable.COLUMN_S5_LTE,
|
||||
ServiceReferenceTable.COLUMN_S5_GT, ServiceReferenceTable.COLUMN_ERROR, ServiceReferenceTable.COLUMN_SUMMARY,
|
||||
ServiceReferenceTable.COLUMN_COST_SUMMARY);
|
||||
String entryServiceName = ServiceNameCache.get(entryServiceId);
|
||||
Object[] params = new Object[]{startTime, endTime, entryServiceId, entryServiceName};
|
||||
try (ResultSet rs = client.executeQuery(sql, params)) {
|
||||
if (rs.next()) {
|
||||
Map<String, JsonObject> serviceReferenceMap = new LinkedHashMap<>();
|
||||
|
||||
int frontServiceId = rs.getInt(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID);
|
||||
if (frontServiceId != 0) {
|
||||
parseSubAggregate(serviceReferenceMap, rs, frontServiceId);
|
||||
}
|
||||
|
||||
String frontServiceName = rs.getString(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME);
|
||||
if (StringUtils.isNotEmpty(frontServiceName)) {
|
||||
String[] serviceNames = frontServiceName.split(Const.ID_SPLIT);
|
||||
int frontServiceId1 = ServiceIdCache.getForUI(Integer.parseInt(serviceNames[0]), serviceNames[1]);
|
||||
parseSubAggregate(serviceReferenceMap, rs, frontServiceId1);
|
||||
}
|
||||
|
||||
JsonArray serviceReferenceArray = new JsonArray();
|
||||
JsonObject rootServiceReference = findRoot(serviceReferenceMap);
|
||||
if (ObjectUtils.isNotEmpty(rootServiceReference)) {
|
||||
serviceReferenceArray.add(rootServiceReference);
|
||||
String id = rootServiceReference.get(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID)) + Const.ID_SPLIT + rootServiceReference.get(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID));
|
||||
serviceReferenceMap.remove(id);
|
||||
|
||||
int rootServiceId = rootServiceReference.get(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID)).getAsInt();
|
||||
sortAsTree(rootServiceId, serviceReferenceArray, serviceReferenceMap);
|
||||
}
|
||||
return serviceReferenceArray;
|
||||
}
|
||||
} catch (SQLException | H2ClientException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override public JsonArray load(String entryServiceName, int entryApplicationId, long startTime, long endTime) {
|
||||
H2Client client = getClient();
|
||||
String sql = MessageFormat.format(GET_SRV_REF_LOAD2, ServiceReferenceTable.TABLE,
|
||||
ServiceReferenceTable.COLUMN_TIME_BUCKET, ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME,
|
||||
ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID, ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID,
|
||||
ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME, ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME,
|
||||
ServiceReferenceTable.COLUMN_S1_LTE, ServiceReferenceTable.COLUMN_S3_LTE, ServiceReferenceTable.COLUMN_S5_LTE,
|
||||
ServiceReferenceTable.COLUMN_S5_GT, ServiceReferenceTable.COLUMN_ERROR, ServiceReferenceTable.COLUMN_SUMMARY,
|
||||
ServiceReferenceTable.COLUMN_COST_SUMMARY);
|
||||
entryServiceName = entryApplicationId + Const.ID_SPLIT + entryServiceName;
|
||||
Object[] params = new Object[]{startTime, endTime, entryServiceName};
|
||||
int entryServiceId = ServiceIdCache.get(entryApplicationId, entryServiceName);
|
||||
if (entryServiceId != 0) {
|
||||
sql = MessageFormat.format(GET_SRV_REF_LOAD1, ServiceReferenceTable.TABLE,
|
||||
ServiceReferenceTable.COLUMN_TIME_BUCKET, ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME,
|
||||
ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID, ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID,
|
||||
ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME, ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME,
|
||||
ServiceReferenceTable.COLUMN_S1_LTE, ServiceReferenceTable.COLUMN_S3_LTE, ServiceReferenceTable.COLUMN_S5_LTE,
|
||||
ServiceReferenceTable.COLUMN_S5_GT, ServiceReferenceTable.COLUMN_ERROR, ServiceReferenceTable.COLUMN_SUMMARY,
|
||||
ServiceReferenceTable.COLUMN_COST_SUMMARY);
|
||||
params = new Object[]{startTime, endTime, entryServiceId, entryServiceName};
|
||||
}
|
||||
|
||||
try (ResultSet rs = client.executeQuery(sql, params)) {
|
||||
if (rs.next()) {
|
||||
Map<String, JsonObject> serviceReferenceMap = new LinkedHashMap<>();
|
||||
|
||||
int frontServiceId = rs.getInt(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID);
|
||||
if (frontServiceId != 0) {
|
||||
parseSubAggregate(serviceReferenceMap, rs, frontServiceId);
|
||||
}
|
||||
|
||||
String frontServiceName = rs.getString(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME);
|
||||
if (StringUtils.isNotEmpty(frontServiceName)) {
|
||||
String[] serviceNames = frontServiceName.split(Const.ID_SPLIT);
|
||||
int frontServiceId1 = ServiceIdCache.getForUI(Integer.parseInt(serviceNames[0]), serviceNames[1]);
|
||||
parseSubAggregate(serviceReferenceMap, rs, frontServiceId1);
|
||||
}
|
||||
|
||||
JsonArray serviceReferenceArray = new JsonArray();
|
||||
JsonObject rootServiceReference = findRoot(serviceReferenceMap);
|
||||
if (ObjectUtils.isNotEmpty(rootServiceReference)) {
|
||||
serviceReferenceArray.add(rootServiceReference);
|
||||
String id = rootServiceReference.get(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID)) + Const.ID_SPLIT + rootServiceReference.get(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID));
|
||||
serviceReferenceMap.remove(id);
|
||||
|
||||
int rootServiceId = rootServiceReference.get(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID)).getAsInt();
|
||||
sortAsTree(rootServiceId, serviceReferenceArray, serviceReferenceMap);
|
||||
}
|
||||
return serviceReferenceArray;
|
||||
}
|
||||
} catch (SQLException | H2ClientException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void parseSubAggregate(Map<String, JsonObject> serviceReferenceMap,
|
||||
ResultSet rs,
|
||||
int frontServiceId) {
|
||||
try {
|
||||
int behindServiceId = rs.getInt(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID);
|
||||
if (behindServiceId != 0) {
|
||||
long s1LteSum = rs.getLong("cnt1");
|
||||
long s3LteSum = rs.getLong("cnt2");
|
||||
long s5LteSum = rs.getLong("cnt3");
|
||||
long s5GtSum = rs.getLong("cnt3");
|
||||
long error = rs.getLong("cnt3");
|
||||
long summary = rs.getLong("cnt3");
|
||||
long costSum = rs.getLong("cnt3");
|
||||
|
||||
String frontServiceName = ServiceNameCache.getForUI(frontServiceId);
|
||||
if (StringUtils.isNotEmpty(frontServiceName)) {
|
||||
frontServiceName = frontServiceName.split(Const.ID_SPLIT)[1];
|
||||
}
|
||||
String behindServiceName = ServiceNameCache.getForUI(behindServiceId);
|
||||
if (StringUtils.isNotEmpty(frontServiceName)) {
|
||||
behindServiceName = behindServiceName.split(Const.ID_SPLIT)[1];
|
||||
}
|
||||
|
||||
JsonObject serviceReference = new JsonObject();
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID), frontServiceId);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME), frontServiceName);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID), behindServiceId);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME), behindServiceName);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S1_LTE), s1LteSum);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S3_LTE), s3LteSum);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_LTE), s5LteSum);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_GT), s5GtSum);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_ERROR), error);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_SUMMARY), summary);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_COST_SUMMARY), costSum);
|
||||
merge(serviceReferenceMap, serviceReference);
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
|
||||
try {
|
||||
String behindServiceName = rs.getString(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME);
|
||||
if (StringUtils.isNotEmpty(behindServiceName)) {
|
||||
long s1LteSum = rs.getLong("cnt1");
|
||||
long s3LteSum = rs.getLong("cnt2");
|
||||
long s5LteSum = rs.getLong("cnt3");
|
||||
long s5GtSum = rs.getLong("cnt3");
|
||||
long error = rs.getLong("cnt3");
|
||||
long summary = rs.getLong("cnt3");
|
||||
long costSum = rs.getLong("cnt3");
|
||||
|
||||
String frontServiceName = ServiceNameCache.getForUI(frontServiceId);
|
||||
String[] serviceNames = behindServiceName.split(Const.ID_SPLIT);
|
||||
int behindServiceId = ServiceIdCache.getForUI(Integer.parseInt(serviceNames[0]), serviceNames[1]);
|
||||
behindServiceName = serviceNames[1];
|
||||
|
||||
JsonObject serviceReference = new JsonObject();
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID), frontServiceId);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME), frontServiceName);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID), behindServiceId);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME), behindServiceName);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S1_LTE), s1LteSum);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S3_LTE), s3LteSum);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_LTE), s5LteSum);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_GT), s5GtSum);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_ERROR), error);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_SUMMARY), summary);
|
||||
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_COST_SUMMARY), costSum);
|
||||
merge(serviceReferenceMap, serviceReference);
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
private void merge(Map<String, JsonObject> serviceReferenceMap, JsonObject serviceReference) {
|
||||
String id = serviceReference.get(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID)) + Const.ID_SPLIT + serviceReference.get(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID));
|
||||
|
||||
if (serviceReferenceMap.containsKey(id)) {
|
||||
JsonObject reference = serviceReferenceMap.get(id);
|
||||
add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S1_LTE));
|
||||
add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S3_LTE));
|
||||
add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_LTE));
|
||||
add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_GT));
|
||||
add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_ERROR));
|
||||
add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_SUMMARY));
|
||||
add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_COST_SUMMARY));
|
||||
} else {
|
||||
serviceReferenceMap.put(id, serviceReference);
|
||||
}
|
||||
}
|
||||
|
||||
private void add(JsonObject oldReference, JsonObject newReference, String key) {
|
||||
long oldValue = oldReference.get(key).getAsLong();
|
||||
long newValue = newReference.get(key).getAsLong();
|
||||
oldReference.addProperty(key, oldValue + newValue);
|
||||
}
|
||||
|
||||
private JsonObject findRoot(Map<String, JsonObject> serviceReferenceMap) {
|
||||
for (JsonObject serviceReference : serviceReferenceMap.values()) {
|
||||
int frontServiceId = serviceReference.get(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID)).getAsInt();
|
||||
if (frontServiceId == 1) {
|
||||
return serviceReference;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void sortAsTree(int serviceId, JsonArray serviceReferenceArray,
|
||||
Map<String, JsonObject> serviceReferenceMap) {
|
||||
Iterator<JsonObject> iterator = serviceReferenceMap.values().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
JsonObject serviceReference = iterator.next();
|
||||
int frontServiceId = serviceReference.get(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID)).getAsInt();
|
||||
if (serviceId == frontServiceId) {
|
||||
serviceReferenceArray.add(serviceReference);
|
||||
|
||||
int behindServiceId = serviceReference.get(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID)).getAsInt();
|
||||
sortAsTree(behindServiceId, serviceReferenceArray, serviceReferenceMap);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue