ServiceReferenceH2DAO.java 6.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/*
 * Copyright 2017, OpenSkywalking Organization All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Project repository: https://github.com/OpenSkywalking/skywalking
 */

P
pengys5 已提交
19 20
package org.skywalking.apm.collector.ui.dao;

21
import com.google.gson.JsonObject;
clevertension's avatar
clevertension 已提交
22 23 24 25
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedHashMap;
import java.util.Map;
26
import org.skywalking.apm.collector.cache.ServiceNameCache;
clevertension's avatar
clevertension 已提交
27 28 29 30 31
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.storage.define.serviceref.ServiceReferenceTable;
clevertension's avatar
clevertension 已提交
32
import org.skywalking.apm.collector.storage.h2.SqlBuilder;
P
pengys5 已提交
33
import org.skywalking.apm.collector.storage.h2.dao.H2DAO;
clevertension's avatar
clevertension 已提交
34 35 36
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

P
pengys5 已提交
37
/**
clevertension's avatar
clevertension 已提交
38
 * @author pengys5, clevertension
P
pengys5 已提交
39
 */
40
public class ServiceReferenceH2DAO extends H2DAO implements IServiceReferenceDAO {
clevertension's avatar
clevertension 已提交
41 42
    private final Logger logger = LoggerFactory.getLogger(ServiceReferenceH2DAO.class);

43 44
    private static final String GET_SRV_REF_LOAD1 = "select {3}, {4}, sum({5}) as {5}, sum({6}) as {6}, sum({7}) as {7}" +
        ",sum({8}) as {8}, sum({9}) as {9}, sum({10}) as {10}, sum({11}) as {11} from {0} where {1} >= ? and {1} <= ? and {2} = ? group by {3}, {4}";
clevertension's avatar
clevertension 已提交
45

46 47 48
    @Override public Map<String, JsonObject> load(int entryServiceId, long startTime, long endTime) {
        H2Client client = getClient();
        String sql = SqlBuilder.buildSql(GET_SRV_REF_LOAD1, ServiceReferenceTable.TABLE,
49
            ServiceReferenceTable.COLUMN_TIME_BUCKET, ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID,
50 51 52 53
            ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID, ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID,
            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);
54
        Object[] params = new Object[] {startTime, endTime, entryServiceId};
clevertension's avatar
clevertension 已提交
55

56
        return load(client, params, sql);
P
pengys5 已提交
57
    }
58

59 60
    private Map<String, JsonObject> load(H2Client client, Object[] params, String sql) {
        Map<String, JsonObject> serviceReferenceMap = new LinkedHashMap<>();
clevertension's avatar
clevertension 已提交
61 62 63 64

        try (ResultSet rs = client.executeQuery(sql, params)) {
            if (rs.next()) {
                int frontServiceId = rs.getInt(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID);
65
                parseSubAggregate(serviceReferenceMap, rs, frontServiceId);
clevertension's avatar
clevertension 已提交
66 67 68 69
            }
        } catch (SQLException | H2ClientException e) {
            logger.error(e.getMessage(), e);
        }
70
        return serviceReferenceMap;
clevertension's avatar
clevertension 已提交
71 72
    }

73 74
    private void parseSubAggregate(Map<String, JsonObject> serviceReferenceMap, ResultSet rs,
        int frontServiceId) {
clevertension's avatar
clevertension 已提交
75 76 77
        try {
            int behindServiceId = rs.getInt(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID);
            if (behindServiceId != 0) {
78 79 80 81 82 83 84
                long s1LteSum = rs.getLong(ServiceReferenceTable.COLUMN_S1_LTE);
                long s3LteSum = rs.getLong(ServiceReferenceTable.COLUMN_S3_LTE);
                long s5LteSum = rs.getLong(ServiceReferenceTable.COLUMN_S5_LTE);
                long s5GtSum = rs.getLong(ServiceReferenceTable.COLUMN_S5_GT);
                long error = rs.getLong(ServiceReferenceTable.COLUMN_ERROR);
                long summary = rs.getLong(ServiceReferenceTable.COLUMN_SUMMARY);
                long costSum = rs.getLong(ServiceReferenceTable.COLUMN_COST_SUMMARY);
clevertension's avatar
clevertension 已提交
85

86 87
                String frontServiceName = ServiceNameCache.getSplitServiceName(ServiceNameCache.get(frontServiceId));
                String behindServiceName = ServiceNameCache.getSplitServiceName(ServiceNameCache.get(behindServiceId));
clevertension's avatar
clevertension 已提交
88 89 90 91 92 93 94 95 96 97 98 99 100 101

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

102 103
                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));
                serviceReferenceMap.put(id, serviceReference);
clevertension's avatar
clevertension 已提交
104 105 106 107 108
            }
        } catch (SQLException e) {
            logger.error(e.getMessage(), e);
        }
    }
P
pengys5 已提交
109
}