From fb9200a972369fbc3fb9f160732f84406754d0ee Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Thu, 12 Oct 2017 21:35:11 +0800 Subject: [PATCH 1/7] =?UTF-8?q?Create=20cache=20module=20to=20provide=20id?= =?UTF-8?q?=20or=20name=20get.=20e.g..=20application=20id,=20instance=20id?= =?UTF-8?q?,=20service=20id=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #423 --- .../apm-collector-agentregister/pom.xml | 5 ++ .../application/ApplicationIDService.java | 2 +- .../servicename/ServiceNameService.java | 2 +- .../ApplicationRegisterSerialWorker.java | 4 +- .../application/dao/ApplicationEsDAO.java | 23 -------- .../application/dao/ApplicationH2DAO.java | 6 --- .../application/dao/IApplicationDAO.java | 2 - .../worker/cache/ApplicationCache.java | 53 ------------------- .../worker/instance/dao/IInstanceDAO.java | 2 - .../worker/instance/dao/InstanceEsDAO.java | 10 ---- .../worker/instance/dao/InstanceH2DAO.java | 5 +- .../ServiceNameRegisterSerialWorker.java | 5 +- .../servicename/dao/IServiceNameDAO.java | 4 -- .../servicename/dao/ServiceNameEsDAO.java | 38 ------------- .../servicename/dao/ServiceNameH2DAO.java | 8 --- .../apm-collector-agentstream/pom.xml | 5 ++ .../worker/cache/ServiceCache.java | 44 --------------- .../noderef/NodeReferenceSpanListener.java | 2 +- .../segment/cost/SegmentCostSpanListener.java | 4 +- .../entry/ServiceEntrySpanListener.java | 4 +- .../ServiceReferenceSpanListener.java | 2 +- apm-collector/apm-collector-cache/pom.xml | 27 ++++++++++ .../collector}/cache/ApplicationCache.java | 34 +++++++++--- .../apm/collector}/cache/InstanceCache.java | 4 +- .../apm/collector}/cache/ServiceIdCache.java | 4 +- .../collector}/cache/ServiceNameCache.java | 4 +- .../cache}/dao/ApplicationEsDAO.java | 25 ++++++++- .../cache}/dao/ApplicationH2DAO.java | 8 ++- .../collector/cache}/dao/IApplicationDAO.java | 4 +- .../apm/collector/cache/dao/IInstanceDAO.java | 26 +++++++++ .../collector/cache}/dao/IServiceNameDAO.java | 2 +- .../collector/cache/dao/InstanceEsDAO.java | 42 +++++++++++++++ .../collector/cache/dao/InstanceH2DAO.java | 30 +++++++++++ .../cache}/dao/ServiceNameEsDAO.java | 2 +- .../cache}/dao/ServiceNameH2DAO.java | 2 +- .../resources/META-INF/defines/es_dao.define | 3 ++ .../resources/META-INF/defines/h2_dao.define | 3 ++ apm-collector/apm-collector-ui/pom.xml | 5 ++ .../apm/collector/ui/dao/InstanceEsDAO.java | 2 +- .../collector/ui/dao/NodeComponentEsDAO.java | 2 +- .../collector/ui/dao/NodeMappingEsDAO.java | 2 +- .../collector/ui/dao/NodeReferenceEsDAO.java | 2 +- .../collector/ui/dao/ServiceEntryEsDAO.java | 2 +- .../ui/dao/ServiceReferenceEsDAO.java | 4 +- .../ui/service/InstanceHealthService.java | 2 +- .../apm/collector/ui/service/SpanService.java | 4 +- .../ui/service/TraceStackService.java | 4 +- .../resources/META-INF/defines/es_dao.define | 2 - .../resources/META-INF/defines/h2_dao.define | 2 - apm-collector/pom.xml | 1 + 50 files changed, 245 insertions(+), 239 deletions(-) delete mode 100644 apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/cache/ApplicationCache.java delete mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/cache/ServiceCache.java create mode 100644 apm-collector/apm-collector-cache/pom.xml rename apm-collector/{apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui => apm-collector-cache/src/main/java/org/skywalking/apm/collector}/cache/ApplicationCache.java (57%) rename apm-collector/{apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker => apm-collector-cache/src/main/java/org/skywalking/apm/collector}/cache/InstanceCache.java (90%) rename apm-collector/{apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui => apm-collector-cache/src/main/java/org/skywalking/apm/collector}/cache/ServiceIdCache.java (94%) rename apm-collector/{apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui => apm-collector-cache/src/main/java/org/skywalking/apm/collector}/cache/ServiceNameCache.java (94%) rename apm-collector/{apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui => apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache}/dao/ApplicationEsDAO.java (61%) rename apm-collector/{apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui => apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache}/dao/ApplicationH2DAO.java (80%) rename apm-collector/{apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui => apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache}/dao/IApplicationDAO.java (89%) create mode 100644 apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IInstanceDAO.java rename apm-collector/{apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui => apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache}/dao/IServiceNameDAO.java (94%) create mode 100644 apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceEsDAO.java create mode 100644 apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceH2DAO.java rename apm-collector/{apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui => apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache}/dao/ServiceNameEsDAO.java (98%) rename apm-collector/{apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui => apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache}/dao/ServiceNameH2DAO.java (95%) create mode 100644 apm-collector/apm-collector-cache/src/main/resources/META-INF/defines/es_dao.define create mode 100644 apm-collector/apm-collector-cache/src/main/resources/META-INF/defines/h2_dao.define diff --git a/apm-collector/apm-collector-agentregister/pom.xml b/apm-collector/apm-collector-agentregister/pom.xml index fccbd8c1d..0195c1d83 100644 --- a/apm-collector/apm-collector-agentregister/pom.xml +++ b/apm-collector/apm-collector-agentregister/pom.xml @@ -51,5 +51,10 @@ apm-network ${project.version} + + org.skywalking + apm-collector-cache + ${project.version} + diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/application/ApplicationIDService.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/application/ApplicationIDService.java index 22ab9ad8f..bfdc125c3 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/application/ApplicationIDService.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/application/ApplicationIDService.java @@ -19,7 +19,7 @@ package org.skywalking.apm.collector.agentregister.application; import org.skywalking.apm.collector.agentregister.worker.application.ApplicationRegisterRemoteWorker; -import org.skywalking.apm.collector.agentregister.worker.cache.ApplicationCache; +import org.skywalking.apm.collector.cache.ApplicationCache; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.storage.define.register.ApplicationDataDefine; import org.skywalking.apm.collector.stream.StreamModuleContext; diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/servicename/ServiceNameService.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/servicename/ServiceNameService.java index 1ab804fcd..2afb23346 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/servicename/ServiceNameService.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/servicename/ServiceNameService.java @@ -19,7 +19,7 @@ package org.skywalking.apm.collector.agentregister.servicename; import org.skywalking.apm.collector.agentregister.worker.servicename.ServiceNameRegisterRemoteWorker; -import org.skywalking.apm.collector.agentregister.worker.servicename.dao.IServiceNameDAO; +import org.skywalking.apm.collector.cache.dao.IServiceNameDAO; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.storage.dao.DAOContainer; import org.skywalking.apm.collector.storage.define.register.ServiceNameDataDefine; diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/ApplicationRegisterSerialWorker.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/ApplicationRegisterSerialWorker.java index be62b927f..79829571d 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/ApplicationRegisterSerialWorker.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/ApplicationRegisterSerialWorker.java @@ -55,8 +55,10 @@ public class ApplicationRegisterSerialWorker extends AbstractLocalAsyncWorker { ApplicationDataDefine.Application application = (ApplicationDataDefine.Application)message; logger.debug("register application, application code: {}", application.getApplicationCode()); + org.skywalking.apm.collector.cache.dao.IApplicationDAO cacheDao = (org.skywalking.apm.collector.cache.dao.IApplicationDAO)DAOContainer.INSTANCE.get(org.skywalking.apm.collector.cache.dao.IApplicationDAO.class.getName()); + int applicationId = cacheDao.getApplicationId(application.getApplicationCode()); + IApplicationDAO dao = (IApplicationDAO)DAOContainer.INSTANCE.get(IApplicationDAO.class.getName()); - int applicationId = dao.getApplicationId(application.getApplicationCode()); if (applicationId == 0) { int min = dao.getMinApplicationId(); if (min == 0) { diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/ApplicationEsDAO.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/ApplicationEsDAO.java index 77035cce9..56c9126bb 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/ApplicationEsDAO.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/ApplicationEsDAO.java @@ -21,12 +21,7 @@ package org.skywalking.apm.collector.agentregister.worker.application.dao; import java.util.HashMap; import java.util.Map; import org.elasticsearch.action.index.IndexResponse; -import org.elasticsearch.action.search.SearchRequestBuilder; -import org.elasticsearch.action.search.SearchResponse; -import org.elasticsearch.action.search.SearchType; import org.elasticsearch.action.support.WriteRequest; -import org.elasticsearch.index.query.QueryBuilders; -import org.elasticsearch.search.SearchHit; import org.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient; import org.skywalking.apm.collector.storage.define.register.ApplicationDataDefine; import org.skywalking.apm.collector.storage.define.register.ApplicationTable; @@ -41,24 +36,6 @@ public class ApplicationEsDAO extends EsDAO implements IApplicationDAO { private final Logger logger = LoggerFactory.getLogger(ApplicationEsDAO.class); - @Override public int getApplicationId(String applicationCode) { - ElasticSearchClient client = getClient(); - - SearchRequestBuilder searchRequestBuilder = client.prepareSearch(ApplicationTable.TABLE); - searchRequestBuilder.setTypes("type"); - searchRequestBuilder.setSearchType(SearchType.QUERY_THEN_FETCH); - searchRequestBuilder.setQuery(QueryBuilders.termQuery(ApplicationTable.COLUMN_APPLICATION_CODE, applicationCode)); - searchRequestBuilder.setSize(1); - - SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); - if (searchResponse.getHits().totalHits > 0) { - SearchHit searchHit = searchResponse.getHits().iterator().next(); - int applicationId = (int)searchHit.getSource().get(ApplicationTable.COLUMN_APPLICATION_ID); - return applicationId; - } - return 0; - } - @Override public int getMaxApplicationId() { return getMaxId(ApplicationTable.TABLE, ApplicationTable.COLUMN_APPLICATION_ID); } diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/ApplicationH2DAO.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/ApplicationH2DAO.java index 6181312c3..2336cb46f 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/ApplicationH2DAO.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/ApplicationH2DAO.java @@ -18,7 +18,6 @@ package org.skywalking.apm.collector.agentregister.worker.application.dao; -import org.skywalking.apm.collector.client.h2.H2Client; import org.skywalking.apm.collector.storage.define.register.ApplicationDataDefine; import org.skywalking.apm.collector.storage.h2.dao.H2DAO; @@ -27,11 +26,6 @@ import org.skywalking.apm.collector.storage.h2.dao.H2DAO; */ public class ApplicationH2DAO extends H2DAO implements IApplicationDAO { - @Override public int getApplicationId(String applicationCode) { - H2Client client = getClient(); - return 100; - } - @Override public int getMaxApplicationId() { return 0; } diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/IApplicationDAO.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/IApplicationDAO.java index ae965d6b0..541ec6329 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/IApplicationDAO.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/IApplicationDAO.java @@ -24,8 +24,6 @@ import org.skywalking.apm.collector.storage.define.register.ApplicationDataDefin * @author pengys5 */ public interface IApplicationDAO { - int getApplicationId(String applicationCode); - int getMaxApplicationId(); int getMinApplicationId(); diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/cache/ApplicationCache.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/cache/ApplicationCache.java deleted file mode 100644 index 655f32e91..000000000 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/cache/ApplicationCache.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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 - */ - -package org.skywalking.apm.collector.agentregister.worker.cache; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import org.skywalking.apm.collector.agentregister.worker.application.dao.IApplicationDAO; -import org.skywalking.apm.collector.storage.dao.DAOContainer; - -/** - * @author pengys5 - */ -public class ApplicationCache { - - private static Cache CACHE = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(1000).build(); - - public static int get(String applicationCode) { - int applicationId = 0; - try { - applicationId = CACHE.get(applicationCode, () -> { - IApplicationDAO dao = (IApplicationDAO)DAOContainer.INSTANCE.get(IApplicationDAO.class.getName()); - return dao.getApplicationId(applicationCode); - }); - } catch (Throwable e) { - return applicationId; - } - - if (applicationId == 0) { - IApplicationDAO dao = (IApplicationDAO)DAOContainer.INSTANCE.get(IApplicationDAO.class.getName()); - applicationId = dao.getApplicationId(applicationCode); - if (applicationId != 0) { - CACHE.put(applicationCode, applicationId); - } - } - return applicationId; - } -} diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/dao/IInstanceDAO.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/dao/IInstanceDAO.java index 0a51717cd..30d73be45 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/dao/IInstanceDAO.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/dao/IInstanceDAO.java @@ -33,6 +33,4 @@ public interface IInstanceDAO { void save(InstanceDataDefine.Instance instance); void updateHeartbeatTime(int instanceId, long heartbeatTime); - - int getApplicationId(int applicationInstanceId); } diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/dao/InstanceEsDAO.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/dao/InstanceEsDAO.java index 866d3f08e..cdebd628c 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/dao/InstanceEsDAO.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/dao/InstanceEsDAO.java @@ -20,7 +20,6 @@ package org.skywalking.apm.collector.agentregister.worker.instance.dao; import java.util.HashMap; import java.util.Map; -import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; @@ -101,13 +100,4 @@ public class InstanceEsDAO extends EsDAO implements IInstanceDAO { updateRequest.doc(source); client.update(updateRequest); } - - @Override public int getApplicationId(int applicationInstanceId) { - GetResponse response = getClient().prepareGet(InstanceTable.TABLE, String.valueOf(applicationInstanceId)).get(); - if (response.isExists()) { - return (int)response.getSource().get(InstanceTable.COLUMN_APPLICATION_ID); - } else { - return 0; - } - } } diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/dao/InstanceH2DAO.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/dao/InstanceH2DAO.java index b0d402fb4..6acaaa964 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/dao/InstanceH2DAO.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/dao/InstanceH2DAO.java @@ -25,6 +25,7 @@ import org.skywalking.apm.collector.storage.h2.dao.H2DAO; * @author pengys5 */ public class InstanceH2DAO extends H2DAO implements IInstanceDAO { + @Override public int getInstanceId(int applicationId, String agentUUID) { return 0; } @@ -44,8 +45,4 @@ public class InstanceH2DAO extends H2DAO implements IInstanceDAO { @Override public void updateHeartbeatTime(int instanceId, long heartbeatTime) { } - - @Override public int getApplicationId(int applicationInstanceId) { - return 0; - } } diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/ServiceNameRegisterSerialWorker.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/ServiceNameRegisterSerialWorker.java index 67aa4960e..59bcd0280 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/ServiceNameRegisterSerialWorker.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/ServiceNameRegisterSerialWorker.java @@ -55,9 +55,10 @@ public class ServiceNameRegisterSerialWorker extends AbstractLocalAsyncWorker { ServiceNameDataDefine.ServiceName serviceName = (ServiceNameDataDefine.ServiceName)message; logger.debug("register service name: {}, application id: {}", serviceName.getServiceName(), serviceName.getApplicationId()); - IServiceNameDAO dao = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); - int serviceId = dao.getServiceId(serviceName.getApplicationId(), serviceName.getServiceName()); + org.skywalking.apm.collector.cache.dao.IServiceNameDAO cacheDao = (org.skywalking.apm.collector.cache.dao.IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); + int serviceId = cacheDao.getServiceId(serviceName.getApplicationId(), serviceName.getServiceName()); + IServiceNameDAO dao = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); if (serviceId == 0) { int min = dao.getMinServiceId(); if (min == 0) { diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/IServiceNameDAO.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/IServiceNameDAO.java index a407468c0..94c535197 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/IServiceNameDAO.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/IServiceNameDAO.java @@ -24,10 +24,6 @@ import org.skywalking.apm.collector.storage.define.register.ServiceNameDataDefin * @author pengys5 */ public interface IServiceNameDAO { - int getServiceId(int applicationId, String serviceName); - - String getServiceName(int serviceId); - int getMaxServiceId(); int getMinServiceId(); diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/ServiceNameEsDAO.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/ServiceNameEsDAO.java index 28b2ab01c..b79d79617 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/ServiceNameEsDAO.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/ServiceNameEsDAO.java @@ -20,17 +20,9 @@ package org.skywalking.apm.collector.agentregister.worker.servicename.dao; import java.util.HashMap; import java.util.Map; -import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexResponse; -import org.elasticsearch.action.search.SearchRequestBuilder; -import org.elasticsearch.action.search.SearchResponse; -import org.elasticsearch.action.search.SearchType; import org.elasticsearch.action.support.WriteRequest; -import org.elasticsearch.index.query.BoolQueryBuilder; -import org.elasticsearch.index.query.QueryBuilders; -import org.elasticsearch.search.SearchHit; import org.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient; -import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.storage.define.register.ServiceNameDataDefine; import org.skywalking.apm.collector.storage.define.register.ServiceNameTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; @@ -44,27 +36,6 @@ public class ServiceNameEsDAO extends EsDAO implements IServiceNameDAO { private final Logger logger = LoggerFactory.getLogger(ServiceNameEsDAO.class); - @Override public int getServiceId(int applicationId, String serviceName) { - ElasticSearchClient client = getClient(); - - SearchRequestBuilder searchRequestBuilder = client.prepareSearch(ServiceNameTable.TABLE); - searchRequestBuilder.setTypes(ServiceNameTable.TABLE_TYPE); - searchRequestBuilder.setSearchType(SearchType.QUERY_THEN_FETCH); - BoolQueryBuilder builder = QueryBuilders.boolQuery(); - builder.must().add(QueryBuilders.termQuery(ServiceNameTable.COLUMN_APPLICATION_ID, applicationId)); - builder.must().add(QueryBuilders.termQuery(ServiceNameTable.COLUMN_SERVICE_NAME, serviceName)); - searchRequestBuilder.setQuery(builder); - searchRequestBuilder.setSize(1); - - SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); - if (searchResponse.getHits().totalHits > 0) { - SearchHit searchHit = searchResponse.getHits().iterator().next(); - int serviceId = (int)searchHit.getSource().get(ServiceNameTable.COLUMN_SERVICE_ID); - return serviceId; - } - return 0; - } - @Override public int getMaxServiceId() { return getMaxId(ServiceNameTable.TABLE, ServiceNameTable.COLUMN_SERVICE_ID); } @@ -73,15 +44,6 @@ public class ServiceNameEsDAO extends EsDAO implements IServiceNameDAO { return getMinId(ServiceNameTable.TABLE, ServiceNameTable.COLUMN_SERVICE_ID); } - @Override public String getServiceName(int serviceId) { - GetResponse response = getClient().prepareGet(ServiceNameTable.TABLE, String.valueOf(serviceId)).get(); - if (response.isExists()) { - return (String)response.getSource().get(ServiceNameTable.COLUMN_SERVICE_NAME); - } else { - return Const.EMPTY_STRING; - } - } - @Override public void save(ServiceNameDataDefine.ServiceName serviceName) { logger.debug("save service name register info, application id: {}, service name: {}", serviceName.getApplicationId(), serviceName.getServiceName()); ElasticSearchClient client = getClient(); diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/ServiceNameH2DAO.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/ServiceNameH2DAO.java index 7e3148582..b0c87a3d2 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/ServiceNameH2DAO.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/ServiceNameH2DAO.java @@ -26,10 +26,6 @@ import org.skywalking.apm.collector.storage.h2.dao.H2DAO; */ public class ServiceNameH2DAO extends H2DAO implements IServiceNameDAO { - @Override public int getServiceId(int applicationId, String serviceName) { - return 0; - } - @Override public int getMaxServiceId() { return 0; } @@ -38,10 +34,6 @@ public class ServiceNameH2DAO extends H2DAO implements IServiceNameDAO { return 0; } - @Override public String getServiceName(int serviceId) { - return null; - } - @Override public void save(ServiceNameDataDefine.ServiceName serviceName) { } diff --git a/apm-collector/apm-collector-agentstream/pom.xml b/apm-collector/apm-collector-agentstream/pom.xml index a3cef0409..a56cb3dc3 100644 --- a/apm-collector/apm-collector-agentstream/pom.xml +++ b/apm-collector/apm-collector-agentstream/pom.xml @@ -61,5 +61,10 @@ apm-collector-agentregister ${project.version} + + org.skywalking + apm-collector-cache + ${project.version} + diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/cache/ServiceCache.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/cache/ServiceCache.java deleted file mode 100644 index 6730473d7..000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/cache/ServiceCache.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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 - */ - -package org.skywalking.apm.collector.agentstream.worker.cache; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import org.skywalking.apm.collector.agentregister.worker.servicename.dao.IServiceNameDAO; -import org.skywalking.apm.collector.core.util.Const; -import org.skywalking.apm.collector.storage.dao.DAOContainer; - -/** - * @author pengys5 - */ -public class ServiceCache { - - private static Cache CACHE = CacheBuilder.newBuilder().initialCapacity(1000).maximumSize(20000).build(); - - public static String getServiceName(int serviceId) { - try { - return CACHE.get(serviceId, () -> { - IServiceNameDAO dao = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); - return dao.getServiceName(serviceId); - }); - } catch (Throwable e) { - return Const.EMPTY_STRING; - } - } -} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java index 76f9583c1..8f05d6acc 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java @@ -20,10 +20,10 @@ package org.skywalking.apm.collector.agentstream.worker.noderef; import java.util.LinkedList; import java.util.List; -import org.skywalking.apm.collector.agentstream.worker.cache.InstanceCache; import org.skywalking.apm.collector.agentstream.worker.segment.EntrySpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.ExitSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.RefsListener; +import org.skywalking.apm.collector.cache.InstanceCache; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.core.util.CollectionUtils; import org.skywalking.apm.collector.core.util.Const; diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/SegmentCostSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/SegmentCostSpanListener.java index 179d23c54..e572e832e 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/SegmentCostSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/SegmentCostSpanListener.java @@ -20,11 +20,11 @@ package org.skywalking.apm.collector.agentstream.worker.segment.cost; import java.util.ArrayList; import java.util.List; -import org.skywalking.apm.collector.agentstream.worker.cache.ServiceCache; import org.skywalking.apm.collector.agentstream.worker.segment.EntrySpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.ExitSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.LocalSpanListener; +import org.skywalking.apm.collector.cache.ServiceNameCache; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.core.util.TimeBucketUtils; import org.skywalking.apm.collector.storage.define.segment.SegmentCostDataDefine; @@ -64,7 +64,7 @@ public class SegmentCostSpanListener implements EntrySpanListener, ExitSpanListe if (spanObject.getOperationNameId() == 0) { segmentCost.setServiceName(spanObject.getOperationName()); } else { - segmentCost.setServiceName(ServiceCache.getServiceName(spanObject.getOperationNameId())); + segmentCost.setServiceName(ServiceNameCache.get(spanObject.getOperationNameId())); } segmentCosts.add(segmentCost); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java index 0fc14aca4..b5ba0add2 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java @@ -18,10 +18,10 @@ package org.skywalking.apm.collector.agentstream.worker.service.entry; -import org.skywalking.apm.collector.agentstream.worker.cache.ServiceCache; import org.skywalking.apm.collector.agentstream.worker.segment.EntrySpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.RefsListener; +import org.skywalking.apm.collector.cache.ServiceNameCache; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.TimeBucketUtils; @@ -56,7 +56,7 @@ public class ServiceEntrySpanListener implements RefsListener, FirstSpanListener if (spanObject.getOperationNameId() == 0) { this.entryServiceName = spanObject.getOperationName(); } else { - this.entryServiceName = ServiceCache.getServiceName(this.entryServiceId); + this.entryServiceName = ServiceNameCache.get(this.entryServiceId); } this.hasEntry = true; } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java index 6a15ae294..421b2b379 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java @@ -20,10 +20,10 @@ package org.skywalking.apm.collector.agentstream.worker.serviceref; import java.util.LinkedList; import java.util.List; -import org.skywalking.apm.collector.agentstream.worker.cache.InstanceCache; import org.skywalking.apm.collector.agentstream.worker.segment.EntrySpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.RefsListener; +import org.skywalking.apm.collector.cache.InstanceCache; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.TimeBucketUtils; diff --git a/apm-collector/apm-collector-cache/pom.xml b/apm-collector/apm-collector-cache/pom.xml new file mode 100644 index 000000000..f3fac86dc --- /dev/null +++ b/apm-collector/apm-collector-cache/pom.xml @@ -0,0 +1,27 @@ + + + + apm-collector + org.skywalking + 3.2.3-2017 + + 4.0.0 + + apm-collector-cache + jar + + + + org.skywalking + apm-collector-core + ${project.version} + + + org.skywalking + apm-collector-storage + ${project.version} + + + \ No newline at end of file diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/cache/ApplicationCache.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ApplicationCache.java similarity index 57% rename from apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/cache/ApplicationCache.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ApplicationCache.java index ed02d372e..0dade5deb 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/cache/ApplicationCache.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ApplicationCache.java @@ -16,25 +16,47 @@ * Project repository: https://github.com/OpenSkywalking/skywalking */ -package org.skywalking.apm.collector.ui.cache; +package org.skywalking.apm.collector.cache; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; +import org.skywalking.apm.collector.cache.dao.IApplicationDAO; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.storage.dao.DAOContainer; -import org.skywalking.apm.collector.ui.dao.IApplicationDAO; /** * @author pengys5 */ public class ApplicationCache { - //TODO size configuration - private static Cache CACHE = CacheBuilder.newBuilder().maximumSize(1000).build(); + private static Cache CODE_CACHE = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(1000).build(); + + public static int get(String applicationCode) { + int applicationId = 0; + try { + applicationId = CODE_CACHE.get(applicationCode, () -> { + IApplicationDAO dao = (IApplicationDAO)DAOContainer.INSTANCE.get(IApplicationDAO.class.getName()); + return dao.getApplicationId(applicationCode); + }); + } catch (Throwable e) { + return applicationId; + } + + if (applicationId == 0) { + IApplicationDAO dao = (IApplicationDAO)DAOContainer.INSTANCE.get(IApplicationDAO.class.getName()); + applicationId = dao.getApplicationId(applicationCode); + if (applicationId != 0) { + CODE_CACHE.put(applicationCode, applicationId); + } + } + return applicationId; + } + + private static Cache ID_CACHE = CacheBuilder.newBuilder().maximumSize(1000).build(); public static String get(int applicationId) { try { - return CACHE.get(applicationId, () -> { + return ID_CACHE.get(applicationId, () -> { IApplicationDAO dao = (IApplicationDAO)DAOContainer.INSTANCE.get(IApplicationDAO.class.getName()); return dao.getApplicationCode(applicationId); }); @@ -48,7 +70,7 @@ public class ApplicationCache { if (applicationCode.equals("Unknown")) { IApplicationDAO dao = (IApplicationDAO)DAOContainer.INSTANCE.get(IApplicationDAO.class.getName()); applicationCode = dao.getApplicationCode(applicationId); - CACHE.put(applicationId, applicationCode); + ID_CACHE.put(applicationId, applicationCode); } return applicationCode; } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/cache/InstanceCache.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/InstanceCache.java similarity index 90% rename from apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/cache/InstanceCache.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/InstanceCache.java index 1cb74e809..b1010ca94 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/cache/InstanceCache.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/InstanceCache.java @@ -16,11 +16,11 @@ * Project repository: https://github.com/OpenSkywalking/skywalking */ -package org.skywalking.apm.collector.agentstream.worker.cache; +package org.skywalking.apm.collector.cache; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import org.skywalking.apm.collector.agentregister.worker.instance.dao.IInstanceDAO; +import org.skywalking.apm.collector.cache.dao.IInstanceDAO; import org.skywalking.apm.collector.storage.dao.DAOContainer; /** diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/cache/ServiceIdCache.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceIdCache.java similarity index 94% rename from apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/cache/ServiceIdCache.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceIdCache.java index 077522ba4..b7ebd4e7c 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/cache/ServiceIdCache.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceIdCache.java @@ -16,13 +16,13 @@ * Project repository: https://github.com/OpenSkywalking/skywalking */ -package org.skywalking.apm.collector.ui.cache; +package org.skywalking.apm.collector.cache; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; +import org.skywalking.apm.collector.cache.dao.IServiceNameDAO; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.storage.dao.DAOContainer; -import org.skywalking.apm.collector.ui.dao.IServiceNameDAO; /** * @author pengys5 diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/cache/ServiceNameCache.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java similarity index 94% rename from apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/cache/ServiceNameCache.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java index 0b2d9d28c..0d4b7c572 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/cache/ServiceNameCache.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java @@ -16,13 +16,13 @@ * Project repository: https://github.com/OpenSkywalking/skywalking */ -package org.skywalking.apm.collector.ui.cache; +package org.skywalking.apm.collector.cache; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; +import org.skywalking.apm.collector.cache.dao.IServiceNameDAO; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.storage.dao.DAOContainer; -import org.skywalking.apm.collector.ui.dao.IServiceNameDAO; /** * @author pengys5 diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ApplicationEsDAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationEsDAO.java similarity index 61% rename from apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ApplicationEsDAO.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationEsDAO.java index acfd78f5b..cab8fe255 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ApplicationEsDAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationEsDAO.java @@ -16,10 +16,15 @@ * Project repository: https://github.com/OpenSkywalking/skywalking */ -package org.skywalking.apm.collector.ui.dao; +package org.skywalking.apm.collector.cache.dao; import org.elasticsearch.action.get.GetRequestBuilder; import org.elasticsearch.action.get.GetResponse; +import org.elasticsearch.action.search.SearchRequestBuilder; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.action.search.SearchType; +import org.elasticsearch.index.query.QueryBuilders; +import org.elasticsearch.search.SearchHit; import org.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.storage.define.register.ApplicationTable; @@ -34,6 +39,24 @@ public class ApplicationEsDAO extends EsDAO implements IApplicationDAO { private final Logger logger = LoggerFactory.getLogger(ApplicationEsDAO.class); + @Override public int getApplicationId(String applicationCode) { + ElasticSearchClient client = getClient(); + + SearchRequestBuilder searchRequestBuilder = client.prepareSearch(ApplicationTable.TABLE); + searchRequestBuilder.setTypes("type"); + searchRequestBuilder.setSearchType(SearchType.QUERY_THEN_FETCH); + searchRequestBuilder.setQuery(QueryBuilders.termQuery(ApplicationTable.COLUMN_APPLICATION_CODE, applicationCode)); + searchRequestBuilder.setSize(1); + + SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); + if (searchResponse.getHits().totalHits > 0) { + SearchHit searchHit = searchResponse.getHits().iterator().next(); + int applicationId = (int)searchHit.getSource().get(ApplicationTable.COLUMN_APPLICATION_ID); + return applicationId; + } + return 0; + } + @Override public String getApplicationCode(int applicationId) { logger.debug("get application code, applicationId: {}", applicationId); ElasticSearchClient client = getClient(); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ApplicationH2DAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationH2DAO.java similarity index 80% rename from apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ApplicationH2DAO.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationH2DAO.java index a905f7740..d9a139be4 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ApplicationH2DAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationH2DAO.java @@ -16,8 +16,9 @@ * Project repository: https://github.com/OpenSkywalking/skywalking */ -package org.skywalking.apm.collector.ui.dao; +package org.skywalking.apm.collector.cache.dao; +import org.skywalking.apm.collector.client.h2.H2Client; import org.skywalking.apm.collector.storage.h2.dao.H2DAO; /** @@ -25,6 +26,11 @@ import org.skywalking.apm.collector.storage.h2.dao.H2DAO; */ public class ApplicationH2DAO extends H2DAO implements IApplicationDAO { + @Override public int getApplicationId(String applicationCode) { + H2Client client = getClient(); + return 100; + } + @Override public String getApplicationCode(int applicationId) { return null; } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IApplicationDAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IApplicationDAO.java similarity index 89% rename from apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IApplicationDAO.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IApplicationDAO.java index 4e337ca8b..4b0bb4525 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IApplicationDAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IApplicationDAO.java @@ -16,11 +16,13 @@ * Project repository: https://github.com/OpenSkywalking/skywalking */ -package org.skywalking.apm.collector.ui.dao; +package org.skywalking.apm.collector.cache.dao; /** * @author pengys5 */ public interface IApplicationDAO { + int getApplicationId(String applicationCode); + String getApplicationCode(int applicationId); } diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IInstanceDAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IInstanceDAO.java new file mode 100644 index 000000000..281f947f1 --- /dev/null +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IInstanceDAO.java @@ -0,0 +1,26 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.cache.dao; + +/** + * @author pengys5 + */ +public interface IInstanceDAO { + int getApplicationId(int applicationInstanceId); +} diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceNameDAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IServiceNameDAO.java similarity index 94% rename from apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceNameDAO.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IServiceNameDAO.java index db3d23b90..eede2558c 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceNameDAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IServiceNameDAO.java @@ -16,7 +16,7 @@ * Project repository: https://github.com/OpenSkywalking/skywalking */ -package org.skywalking.apm.collector.ui.dao; +package org.skywalking.apm.collector.cache.dao; /** * @author pengys5 diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceEsDAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceEsDAO.java new file mode 100644 index 000000000..abc9b4133 --- /dev/null +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceEsDAO.java @@ -0,0 +1,42 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.cache.dao; + +import org.elasticsearch.action.get.GetResponse; +import org.skywalking.apm.collector.storage.define.register.InstanceTable; +import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public class InstanceEsDAO extends EsDAO implements IInstanceDAO { + + private final Logger logger = LoggerFactory.getLogger(InstanceEsDAO.class); + + @Override public int getApplicationId(int applicationInstanceId) { + GetResponse response = getClient().prepareGet(InstanceTable.TABLE, String.valueOf(applicationInstanceId)).get(); + if (response.isExists()) { + return (int)response.getSource().get(InstanceTable.COLUMN_APPLICATION_ID); + } else { + return 0; + } + } +} diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceH2DAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceH2DAO.java new file mode 100644 index 000000000..126279cde --- /dev/null +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceH2DAO.java @@ -0,0 +1,30 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.cache.dao; + +import org.skywalking.apm.collector.storage.h2.dao.H2DAO; + +/** + * @author pengys5 + */ +public class InstanceH2DAO extends H2DAO implements IInstanceDAO { + @Override public int getApplicationId(int applicationInstanceId) { + return 0; + } +} diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceNameEsDAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameEsDAO.java similarity index 98% rename from apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceNameEsDAO.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameEsDAO.java index 03da4de8e..41663de48 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceNameEsDAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameEsDAO.java @@ -16,7 +16,7 @@ * Project repository: https://github.com/OpenSkywalking/skywalking */ -package org.skywalking.apm.collector.ui.dao; +package org.skywalking.apm.collector.cache.dao; import org.elasticsearch.action.get.GetRequestBuilder; import org.elasticsearch.action.get.GetResponse; diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceNameH2DAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameH2DAO.java similarity index 95% rename from apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceNameH2DAO.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameH2DAO.java index 00dce8154..a56b2aafe 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceNameH2DAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameH2DAO.java @@ -16,7 +16,7 @@ * Project repository: https://github.com/OpenSkywalking/skywalking */ -package org.skywalking.apm.collector.ui.dao; +package org.skywalking.apm.collector.cache.dao; import org.skywalking.apm.collector.storage.h2.dao.H2DAO; diff --git a/apm-collector/apm-collector-cache/src/main/resources/META-INF/defines/es_dao.define b/apm-collector/apm-collector-cache/src/main/resources/META-INF/defines/es_dao.define new file mode 100644 index 000000000..31e828d5c --- /dev/null +++ b/apm-collector/apm-collector-cache/src/main/resources/META-INF/defines/es_dao.define @@ -0,0 +1,3 @@ +org.skywalking.apm.collector.cache.dao.ApplicationEsDAO +org.skywalking.apm.collector.cache.dao.InstanceEsDAO +org.skywalking.apm.collector.cache.dao.ServiceNameEsDAO \ No newline at end of file diff --git a/apm-collector/apm-collector-cache/src/main/resources/META-INF/defines/h2_dao.define b/apm-collector/apm-collector-cache/src/main/resources/META-INF/defines/h2_dao.define new file mode 100644 index 000000000..2384a773a --- /dev/null +++ b/apm-collector/apm-collector-cache/src/main/resources/META-INF/defines/h2_dao.define @@ -0,0 +1,3 @@ +org.skywalking.apm.collector.cache.dao.ApplicationH2DAO +org.skywalking.apm.collector.cache.dao.InstanceH2DAO +org.skywalking.apm.collector.cache.dao.ServiceNameH2DAO \ No newline at end of file diff --git a/apm-collector/apm-collector-ui/pom.xml b/apm-collector/apm-collector-ui/pom.xml index e7bd85915..fe113bb20 100644 --- a/apm-collector/apm-collector-ui/pom.xml +++ b/apm-collector/apm-collector-ui/pom.xml @@ -51,5 +51,10 @@ apm-collector-storage ${project.version} + + org.skywalking + apm-collector-cache + ${project.version} + diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java index 4ebed5c9c..04d0c190d 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java @@ -37,11 +37,11 @@ import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.metrics.valuecount.ValueCount; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortMode; +import org.skywalking.apm.collector.cache.ApplicationCache; import org.skywalking.apm.collector.core.util.TimeBucketUtils; import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine; import org.skywalking.apm.collector.storage.define.register.InstanceTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; -import org.skywalking.apm.collector.ui.cache.ApplicationCache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeComponentEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeComponentEsDAO.java index 95ac9857e..c0866c8a9 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeComponentEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeComponentEsDAO.java @@ -26,10 +26,10 @@ import org.elasticsearch.action.search.SearchType; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.Terms; +import org.skywalking.apm.collector.cache.ApplicationCache; import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.define.node.NodeComponentTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; -import org.skywalking.apm.collector.ui.cache.ApplicationCache; import org.skywalking.apm.network.trace.component.ComponentsDefine; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeMappingEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeMappingEsDAO.java index ead38da4c..8e3c4eea3 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeMappingEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeMappingEsDAO.java @@ -26,10 +26,10 @@ import org.elasticsearch.action.search.SearchType; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.Terms; +import org.skywalking.apm.collector.cache.ApplicationCache; import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.define.node.NodeMappingTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; -import org.skywalking.apm.collector.ui.cache.ApplicationCache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeReferenceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeReferenceEsDAO.java index 4715b4938..4599a6979 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeReferenceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeReferenceEsDAO.java @@ -28,10 +28,10 @@ import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.sum.Sum; +import org.skywalking.apm.collector.cache.ApplicationCache; import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.define.noderef.NodeReferenceTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; -import org.skywalking.apm.collector.ui.cache.ApplicationCache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryEsDAO.java index 7a7fb9fe2..d2ca4b451 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryEsDAO.java @@ -29,11 +29,11 @@ import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; +import org.skywalking.apm.collector.cache.ApplicationCache; import org.skywalking.apm.collector.core.util.ColumnNameUtils; import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.define.service.ServiceEntryTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; -import org.skywalking.apm.collector.ui.cache.ApplicationCache; /** * @author pengys5 diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java index 069783623..51c7ab034 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java @@ -31,14 +31,14 @@ import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.metrics.sum.Sum; +import org.skywalking.apm.collector.cache.ServiceIdCache; +import org.skywalking.apm.collector.cache.ServiceNameCache; 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.elasticsearch.dao.EsDAO; -import org.skywalking.apm.collector.ui.cache.ServiceIdCache; -import org.skywalking.apm.collector.ui.cache.ServiceNameCache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceHealthService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceHealthService.java index 8eabd8a05..3739c5b41 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceHealthService.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceHealthService.java @@ -21,10 +21,10 @@ package org.skywalking.apm.collector.ui.service; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import java.util.List; +import org.skywalking.apm.collector.cache.ApplicationCache; import org.skywalking.apm.collector.core.util.TimeBucketUtils; import org.skywalking.apm.collector.storage.dao.DAOContainer; import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine; -import org.skywalking.apm.collector.ui.cache.ApplicationCache; import org.skywalking.apm.collector.ui.dao.IGCMetricDAO; import org.skywalking.apm.collector.ui.dao.IInstPerformanceDAO; import org.skywalking.apm.collector.ui.dao.IInstanceDAO; diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SpanService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SpanService.java index 2716e7b0b..22decd310 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SpanService.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SpanService.java @@ -21,11 +21,11 @@ package org.skywalking.apm.collector.ui.service; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import java.util.List; +import org.skywalking.apm.collector.cache.ApplicationCache; +import org.skywalking.apm.collector.cache.ServiceNameCache; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.dao.DAOContainer; -import org.skywalking.apm.collector.ui.cache.ApplicationCache; -import org.skywalking.apm.collector.ui.cache.ServiceNameCache; import org.skywalking.apm.collector.ui.dao.ISegmentDAO; import org.skywalking.apm.network.proto.KeyWithStringValue; import org.skywalking.apm.network.proto.LogMessage; diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceStackService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceStackService.java index 3d72be9e3..94abc7161 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceStackService.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceStackService.java @@ -22,13 +22,13 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import java.util.ArrayList; import java.util.List; +import org.skywalking.apm.collector.cache.ApplicationCache; +import org.skywalking.apm.collector.cache.ServiceNameCache; import org.skywalking.apm.collector.core.util.CollectionUtils; 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.dao.DAOContainer; -import org.skywalking.apm.collector.ui.cache.ApplicationCache; -import org.skywalking.apm.collector.ui.cache.ServiceNameCache; import org.skywalking.apm.collector.ui.dao.IGlobalTraceDAO; import org.skywalking.apm.collector.ui.dao.ISegmentDAO; import org.skywalking.apm.network.proto.SpanObject; diff --git a/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/es_dao.define b/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/es_dao.define index 554fbdddb..a606efedb 100644 --- a/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/es_dao.define +++ b/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/es_dao.define @@ -4,8 +4,6 @@ org.skywalking.apm.collector.ui.dao.NodeReferenceEsDAO org.skywalking.apm.collector.ui.dao.SegmentCostEsDAO org.skywalking.apm.collector.ui.dao.GlobalTraceEsDAO org.skywalking.apm.collector.ui.dao.SegmentEsDAO -org.skywalking.apm.collector.ui.dao.ApplicationEsDAO -org.skywalking.apm.collector.ui.dao.ServiceNameEsDAO org.skywalking.apm.collector.ui.dao.InstanceEsDAO org.skywalking.apm.collector.ui.dao.InstPerformanceEsDAO org.skywalking.apm.collector.ui.dao.CpuMetricEsDAO diff --git a/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/h2_dao.define b/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/h2_dao.define index d110e3684..f69604fec 100644 --- a/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/h2_dao.define +++ b/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/h2_dao.define @@ -4,8 +4,6 @@ org.skywalking.apm.collector.ui.dao.NodeReferenceH2DAO org.skywalking.apm.collector.ui.dao.SegmentCostH2DAO org.skywalking.apm.collector.ui.dao.GlobalTraceH2DAO org.skywalking.apm.collector.ui.dao.SegmentH2DAO -org.skywalking.apm.collector.ui.dao.ApplicationH2DAO -org.skywalking.apm.collector.ui.dao.ServiceNameH2DAO org.skywalking.apm.collector.ui.dao.InstanceH2DAO org.skywalking.apm.collector.ui.dao.InstPerformanceH2DAO org.skywalking.apm.collector.ui.dao.GCMetricH2DAO diff --git a/apm-collector/pom.xml b/apm-collector/pom.xml index 7d11d0500..edcab1970 100644 --- a/apm-collector/pom.xml +++ b/apm-collector/pom.xml @@ -35,6 +35,7 @@ apm-collector-agentregister apm-collector-agentjvm apm-collector-remote + apm-collector-cache apm From cf2488445a557a302b251464b1509b30aa9c0e17 Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Thu, 19 Oct 2017 17:08:56 +0800 Subject: [PATCH 2/7] Segments divided into two types, depending on if ids exchange successful. 1. Success: send to analytic worker 2. Failure: write into file. --- .../AgentServerModuleGroupDefine.java | 9 +- ...r.java => AgentServerModuleInstaller.java} | 4 +- .../AgentStreamCommonModuleInstaller.java | 51 ----- .../AgentStreamModuleGroupConfigParser.java | 80 +++++++ .../AgentStreamModuleGroupDefine.java | 5 + .../AgentStreamModuleInstaller.java | 4 +- .../agentstream/config/BufferFileConfig.java | 27 +++ .../handler/TraceSegmentServiceHandler.java | 12 +- .../handler/TraceSegmentServletHandler.java | 2 +- .../handler/reader/SegmentJsonReader.java | 6 +- .../jetty/handler/reader/TraceSegment.java | 24 +-- .../reader/TraceSegmentJsonReader.java | 9 +- .../handler/reader/UniqueIdJsonReader.java | 6 +- .../global/GlobalTraceSpanListener.java | 7 +- .../InstPerformanceSpanListener.java | 12 +- .../component/NodeComponentSpanListener.java | 35 ++- .../node/mapping/NodeMappingSpanListener.java | 24 +-- .../noderef/NodeReferenceSpanListener.java | 40 ++-- .../worker/segment/EntrySpanListener.java | 4 +- .../worker/segment/ExitSpanListener.java | 4 +- .../worker/segment/FirstSpanListener.java | 4 +- .../worker/segment/LocalSpanListener.java | 4 +- .../worker/segment/RefsListener.java | 4 +- .../worker/segment/SegmentParse.java | 129 +++++++---- .../worker/segment/buffer/Offset.java | 99 +++++++++ .../worker/segment/buffer/OffsetManager.java | 152 +++++++++++++ .../segment/buffer/SegmentBufferConfig.java | 28 +++ .../segment/buffer/SegmentBufferManager.java | 103 +++++++++ .../segment/buffer/SegmentBufferReader.java | 151 +++++++++++++ .../segment/cost/SegmentCostSpanListener.java | 37 ++-- .../segment/standardization/IdExchanger.java | 26 +++ .../standardization/ReferenceDecorator.java | 194 +++++++++++++++++ .../standardization/ReferenceIdExchanger.java | 80 +++++++ .../standardization/SegmentDecorator.java | 86 ++++++++ .../SegmentStandardizationWorker.java | 98 +++++++++ .../standardization/SpanDecorator.java | 202 ++++++++++++++++++ .../standardization/SpanIdExchanger.java | 64 ++++++ .../standardization/StandardBuilder.java | 26 +++ .../entry/ServiceEntrySpanListener.java | 26 +-- .../ServiceReferenceSpanListener.java | 98 +++------ .../agentstream/worker/util/FileUtils.java | 89 ++++++++ .../defines/local_worker_provider.define | 2 + .../TraceSegmentServiceHandlerTestCase.java | 4 +- .../agentstream/mock/SegmentPost.java | 3 + .../buffer/OffsetManagerTestCase.java} | 13 +- .../SegmentBufferWriteWorkerTestCase.java | 95 ++++++++ .../src/test/resources/log4j2.xml | 34 +++ .../collector/boot/CollectorBootStartUp.java | 2 + .../apm/collector/boot/CollectorStarter.java | 3 + .../src/main/resources/application.yml | 3 + .../src/main/resources/log4j2.xml | 5 +- .../apm/collector/cache/ApplicationCache.java | 41 ++-- .../apm/collector/cache/InstanceCache.java | 24 ++- .../apm/collector/cache/ServiceIdCache.java | 30 +-- .../apm/collector/cache/ServiceNameCache.java | 34 +-- .../cluster/ClusterModuleGroupDefine.java | 5 + .../core/config/GroupConfigParser.java | 30 +++ .../collector/core/config/SystemConfig.java | 26 +++ .../core/config/SystemConfigParser.java | 36 ++++ .../core/module/CommonModuleInstaller.java | 4 +- .../core/module/ModuleGroupDefine.java | 3 + ...ller.java => MultipleModuleInstaller.java} | 6 +- .../apm/collector/core/util/Const.java | 1 + .../queue/QueueModuleGroupDefine.java | 5 + .../storage/StorageModuleGroupDefine.java | 5 + .../stream/StreamModuleGroupDefine.java | 5 + .../apm/collector/ui/UIModuleGroupDefine.java | 9 +- ...eInstaller.java => UIModuleInstaller.java} | 4 +- .../apm/collector/ui/dao/InstanceEsDAO.java | 2 +- .../collector/ui/dao/NodeComponentEsDAO.java | 2 +- .../collector/ui/dao/NodeMappingEsDAO.java | 4 +- .../collector/ui/dao/NodeReferenceEsDAO.java | 4 +- .../collector/ui/dao/ServiceEntryEsDAO.java | 2 +- .../ui/dao/ServiceReferenceEsDAO.java | 10 +- .../ui/service/InstanceHealthService.java | 2 +- .../apm/collector/ui/service/SpanService.java | 2 +- 76 files changed, 2119 insertions(+), 406 deletions(-) rename apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/{AgentServerCommonModuleInstaller.java => AgentServerModuleInstaller.java} (87%) delete mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/AgentStreamCommonModuleInstaller.java create mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/AgentStreamModuleGroupConfigParser.java create mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/config/BufferFileConfig.java create mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/Offset.java create mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManager.java create mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferConfig.java create mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferManager.java create mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferReader.java create mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/IdExchanger.java create mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/ReferenceDecorator.java create mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/ReferenceIdExchanger.java create mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SegmentDecorator.java create mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SegmentStandardizationWorker.java create mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SpanDecorator.java create mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SpanIdExchanger.java create mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/StandardBuilder.java create mode 100644 apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/util/FileUtils.java rename apm-collector/apm-collector-agentstream/src/{main/java/org/skywalking/apm/collector/agentstream/worker/util/ExchangeMarkUtils.java => test/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManagerTestCase.java} (76%) create mode 100644 apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferWriteWorkerTestCase.java create mode 100644 apm-collector/apm-collector-agentstream/src/test/resources/log4j2.xml create mode 100644 apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/config/GroupConfigParser.java create mode 100644 apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/config/SystemConfig.java create mode 100644 apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/config/SystemConfigParser.java rename apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/{MultipleCommonModuleInstaller.java => MultipleModuleInstaller.java} (95%) rename apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/{UICommonModuleInstaller.java => UIModuleInstaller.java} (87%) diff --git a/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleGroupDefine.java b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleGroupDefine.java index 2aca5aae7..c3567257a 100644 --- a/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleGroupDefine.java +++ b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleGroupDefine.java @@ -18,6 +18,7 @@ package org.skywalking.apm.collector.agentserver; +import org.skywalking.apm.collector.core.config.GroupConfigParser; import org.skywalking.apm.collector.core.framework.Context; import org.skywalking.apm.collector.core.module.ModuleGroupDefine; import org.skywalking.apm.collector.core.module.ModuleInstaller; @@ -28,10 +29,10 @@ import org.skywalking.apm.collector.core.module.ModuleInstaller; public class AgentServerModuleGroupDefine implements ModuleGroupDefine { public static final String GROUP_NAME = "agent_server"; - private final AgentServerCommonModuleInstaller installer; + private final AgentServerModuleInstaller installer; public AgentServerModuleGroupDefine() { - installer = new AgentServerCommonModuleInstaller(); + installer = new AgentServerModuleInstaller(); } @Override public String name() { @@ -45,4 +46,8 @@ public class AgentServerModuleGroupDefine implements ModuleGroupDefine { @Override public ModuleInstaller moduleInstaller() { return installer; } + + @Override public GroupConfigParser groupConfigParser() { + return null; + } } diff --git a/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerCommonModuleInstaller.java b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleInstaller.java similarity index 87% rename from apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerCommonModuleInstaller.java rename to apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleInstaller.java index 6f209a550..eaad79ba3 100644 --- a/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerCommonModuleInstaller.java +++ b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleInstaller.java @@ -20,12 +20,12 @@ package org.skywalking.apm.collector.agentserver; import java.util.List; import org.skywalking.apm.collector.core.framework.Context; -import org.skywalking.apm.collector.core.module.MultipleCommonModuleInstaller; +import org.skywalking.apm.collector.core.module.MultipleModuleInstaller; /** * @author pengys5 */ -public class AgentServerCommonModuleInstaller extends MultipleCommonModuleInstaller { +public class AgentServerModuleInstaller extends MultipleModuleInstaller { @Override public String groupName() { return AgentServerModuleGroupDefine.GROUP_NAME; diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/AgentStreamCommonModuleInstaller.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/AgentStreamCommonModuleInstaller.java deleted file mode 100644 index fd8ea647d..000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/AgentStreamCommonModuleInstaller.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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 - */ - -package org.skywalking.apm.collector.agentstream; - -import java.util.List; -import org.skywalking.apm.collector.agentstream.worker.storage.PersistenceTimer; -import org.skywalking.apm.collector.core.client.ClientException; -import org.skywalking.apm.collector.core.config.ConfigException; -import org.skywalking.apm.collector.core.framework.Context; -import org.skywalking.apm.collector.core.framework.DefineException; -import org.skywalking.apm.collector.core.module.MultipleCommonModuleInstaller; -import org.skywalking.apm.collector.core.server.ServerException; - -/** - * @author pengys5 - */ -public class AgentStreamCommonModuleInstaller extends MultipleCommonModuleInstaller { - - @Override public String groupName() { - return AgentStreamModuleGroupDefine.GROUP_NAME; - } - - @Override public Context moduleContext() { - return new AgentStreamModuleContext(groupName()); - } - - @Override public List dependenceModules() { - return null; - } - - @Override public void install() throws DefineException, ConfigException, ServerException, ClientException { - super.install(); - new PersistenceTimer().start(); - } -} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/AgentStreamModuleGroupConfigParser.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/AgentStreamModuleGroupConfigParser.java new file mode 100644 index 000000000..a22f7b331 --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/AgentStreamModuleGroupConfigParser.java @@ -0,0 +1,80 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.agentstream; + +import java.util.Map; +import org.skywalking.apm.collector.agentstream.config.BufferFileConfig; +import org.skywalking.apm.collector.core.config.GroupConfigParser; + +/** + * @author pengys5 + */ +public class AgentStreamModuleGroupConfigParser implements GroupConfigParser { + + private static final String BUFFER_OFFSET_MAX_FILE_SIZE = "buffer_offset_max_file_size"; + private static final String BUFFER_SEGMENT_MAX_FILE_SIZE = "buffer_segment_max_file_size"; + + @Override public void parse(Map config) { + if (config.containsKey(GroupConfigParser.NODE_NAME)) { + Map groupConfig = config.get(GroupConfigParser.NODE_NAME); + + if (groupConfig.containsKey(BUFFER_OFFSET_MAX_FILE_SIZE)) { + String sizeStr = groupConfig.get(BUFFER_OFFSET_MAX_FILE_SIZE).toUpperCase(); + if (sizeStr.endsWith("K")) { + int size = Integer.parseInt(sizeStr.replace("K", "")); + BufferFileConfig.BUFFER_OFFSET_MAX_FILE_SIZE = size * 1024; + } else if (sizeStr.endsWith("KB")) { + int size = Integer.parseInt(sizeStr.replace("KB", "")); + BufferFileConfig.BUFFER_OFFSET_MAX_FILE_SIZE = size * 1024; + } else if (sizeStr.endsWith("M")) { + int size = Integer.parseInt(sizeStr.replace("M", "")); + BufferFileConfig.BUFFER_OFFSET_MAX_FILE_SIZE = size * 1024 * 1024; + } else if (sizeStr.endsWith("MB")) { + int size = Integer.parseInt(sizeStr.replace("MB", "")); + BufferFileConfig.BUFFER_OFFSET_MAX_FILE_SIZE = size * 1024 * 1024; + } else { + BufferFileConfig.BUFFER_OFFSET_MAX_FILE_SIZE = 10 * 1024 * 1024; + } + } else { + BufferFileConfig.BUFFER_OFFSET_MAX_FILE_SIZE = 10 * 1024 * 1024; + } + + if (groupConfig.containsKey(BUFFER_SEGMENT_MAX_FILE_SIZE)) { + String sizeStr = groupConfig.get(BUFFER_SEGMENT_MAX_FILE_SIZE).toUpperCase(); + if (sizeStr.endsWith("K")) { + int size = Integer.parseInt(sizeStr.replace("K", "")); + BufferFileConfig.BUFFER_SEGMENT_MAX_FILE_SIZE = size * 1024; + } else if (sizeStr.endsWith("KB")) { + int size = Integer.parseInt(sizeStr.replace("KB", "")); + BufferFileConfig.BUFFER_SEGMENT_MAX_FILE_SIZE = size * 1024; + } else if (sizeStr.endsWith("M")) { + int size = Integer.parseInt(sizeStr.replace("M", "")); + BufferFileConfig.BUFFER_SEGMENT_MAX_FILE_SIZE = size * 1024 * 1024; + } else if (sizeStr.endsWith("MB")) { + int size = Integer.parseInt(sizeStr.replace("MB", "")); + BufferFileConfig.BUFFER_SEGMENT_MAX_FILE_SIZE = size * 1024 * 1024; + } else { + BufferFileConfig.BUFFER_SEGMENT_MAX_FILE_SIZE = 1024 * 1024; + } + } else { + BufferFileConfig.BUFFER_SEGMENT_MAX_FILE_SIZE = 1024 * 1024; + } + } + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/AgentStreamModuleGroupDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/AgentStreamModuleGroupDefine.java index bd1db1bbf..bfc1b745f 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/AgentStreamModuleGroupDefine.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/AgentStreamModuleGroupDefine.java @@ -18,6 +18,7 @@ package org.skywalking.apm.collector.agentstream; +import org.skywalking.apm.collector.core.config.GroupConfigParser; import org.skywalking.apm.collector.core.framework.Context; import org.skywalking.apm.collector.core.module.ModuleGroupDefine; import org.skywalking.apm.collector.core.module.ModuleInstaller; @@ -45,4 +46,8 @@ public class AgentStreamModuleGroupDefine implements ModuleGroupDefine { @Override public ModuleInstaller moduleInstaller() { return installer; } + + @Override public GroupConfigParser groupConfigParser() { + return new AgentStreamModuleGroupConfigParser(); + } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/AgentStreamModuleInstaller.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/AgentStreamModuleInstaller.java index ebb9d08de..e8b941a63 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/AgentStreamModuleInstaller.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/AgentStreamModuleInstaller.java @@ -24,13 +24,13 @@ import org.skywalking.apm.collector.core.client.ClientException; import org.skywalking.apm.collector.core.config.ConfigException; import org.skywalking.apm.collector.core.framework.Context; import org.skywalking.apm.collector.core.framework.DefineException; -import org.skywalking.apm.collector.core.module.MultipleCommonModuleInstaller; +import org.skywalking.apm.collector.core.module.MultipleModuleInstaller; import org.skywalking.apm.collector.core.server.ServerException; /** * @author pengys5 */ -public class AgentStreamModuleInstaller extends MultipleCommonModuleInstaller { +public class AgentStreamModuleInstaller extends MultipleModuleInstaller { @Override public String groupName() { return AgentStreamModuleGroupDefine.GROUP_NAME; diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/config/BufferFileConfig.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/config/BufferFileConfig.java new file mode 100644 index 000000000..4853865dd --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/config/BufferFileConfig.java @@ -0,0 +1,27 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.agentstream.config; + +/** + * @author pengys5 + */ +public class BufferFileConfig { + public static int BUFFER_OFFSET_MAX_FILE_SIZE = 10 * 1024 * 1024; + public static int BUFFER_SEGMENT_MAX_FILE_SIZE = 10 * 1024 * 1024; +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/grpc/handler/TraceSegmentServiceHandler.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/grpc/handler/TraceSegmentServiceHandler.java index 5c41f697d..a5ceaae34 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/grpc/handler/TraceSegmentServiceHandler.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/grpc/handler/TraceSegmentServiceHandler.java @@ -18,15 +18,11 @@ package org.skywalking.apm.collector.agentstream.grpc.handler; -import com.google.protobuf.InvalidProtocolBufferException; import io.grpc.stub.StreamObserver; -import java.util.List; import org.skywalking.apm.collector.agentstream.worker.segment.SegmentParse; import org.skywalking.apm.collector.server.grpc.GRPCHandler; import org.skywalking.apm.network.proto.Downstream; -import org.skywalking.apm.network.proto.TraceSegmentObject; import org.skywalking.apm.network.proto.TraceSegmentServiceGrpc; -import org.skywalking.apm.network.proto.UniqueId; import org.skywalking.apm.network.proto.UpstreamSegment; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,13 +39,7 @@ public class TraceSegmentServiceHandler extends TraceSegmentServiceGrpc.TraceSeg @Override public void onNext(UpstreamSegment segment) { logger.debug("receive segment"); SegmentParse segmentParse = new SegmentParse(); - try { - List traceIds = segment.getGlobalTraceIdsList(); - TraceSegmentObject segmentObject = TraceSegmentObject.parseFrom(segment.getSegment()); - segmentParse.parse(traceIds, segmentObject); - } catch (InvalidProtocolBufferException e) { - logger.error(e.getMessage(), e); - } + segmentParse.parse(segment, SegmentParse.Source.Agent); } @Override public void onError(Throwable throwable) { diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/TraceSegmentServletHandler.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/TraceSegmentServletHandler.java index 67bef6dba..4bf5add42 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/TraceSegmentServletHandler.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/TraceSegmentServletHandler.java @@ -66,7 +66,7 @@ public class TraceSegmentServletHandler extends JettyHandler { while (reader.hasNext()) { SegmentParse segmentParse = new SegmentParse(); TraceSegment traceSegment = jsonReader.read(reader); - segmentParse.parse(traceSegment.getGlobalTraceIds(), traceSegment.getTraceSegmentObject()); + segmentParse.parse(traceSegment.getUpstreamSegment(), SegmentParse.Source.Agent); } reader.endArray(); } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/reader/SegmentJsonReader.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/reader/SegmentJsonReader.java index 9a1cab79e..32d1df915 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/reader/SegmentJsonReader.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/reader/SegmentJsonReader.java @@ -27,7 +27,7 @@ import org.slf4j.LoggerFactory; /** * @author pengys5 */ -public class SegmentJsonReader implements StreamJsonReader { +public class SegmentJsonReader implements StreamJsonReader { private final Logger logger = LoggerFactory.getLogger(SegmentJsonReader.class); @@ -41,7 +41,7 @@ public class SegmentJsonReader implements StreamJsonReader { private static final String TRACE_SEGMENT_REFERENCE = "rs"; private static final String SPANS = "ss"; - @Override public TraceSegmentObject read(JsonReader reader) throws IOException { + @Override public TraceSegmentObject.Builder read(JsonReader reader) throws IOException { TraceSegmentObject.Builder builder = TraceSegmentObject.newBuilder(); reader.beginObject(); @@ -82,6 +82,6 @@ public class SegmentJsonReader implements StreamJsonReader { } reader.endObject(); - return builder.build(); + return builder; } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/reader/TraceSegment.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/reader/TraceSegment.java index ed87156cd..e492d939c 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/reader/TraceSegment.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/reader/TraceSegment.java @@ -18,36 +18,30 @@ package org.skywalking.apm.collector.agentstream.jetty.handler.reader; -import java.util.ArrayList; -import java.util.List; import org.skywalking.apm.network.proto.TraceSegmentObject; import org.skywalking.apm.network.proto.UniqueId; +import org.skywalking.apm.network.proto.UpstreamSegment; /** * @author pengys5 */ public class TraceSegment { - private List uniqueIds; - private TraceSegmentObject traceSegmentObject; + private UpstreamSegment.Builder builder; public TraceSegment() { - uniqueIds = new ArrayList<>(); + builder = UpstreamSegment.newBuilder(); } - public List getGlobalTraceIds() { - return uniqueIds; + public void addGlobalTraceId(UniqueId.Builder globalTraceId) { + builder.addGlobalTraceIds(globalTraceId); } - public void addGlobalTraceId(UniqueId globalTraceId) { - uniqueIds.add(globalTraceId); + public void setTraceSegmentBuilder(TraceSegmentObject.Builder traceSegmentBuilder) { + builder.setSegment(traceSegmentBuilder.build().toByteString()); } - public TraceSegmentObject getTraceSegmentObject() { - return traceSegmentObject; - } - - public void setTraceSegmentObject(TraceSegmentObject traceSegmentObject) { - this.traceSegmentObject = traceSegmentObject; + public UpstreamSegment getUpstreamSegment() { + return builder.build(); } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/reader/TraceSegmentJsonReader.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/reader/TraceSegmentJsonReader.java index f392195d3..1492b16a4 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/reader/TraceSegmentJsonReader.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/reader/TraceSegmentJsonReader.java @@ -49,16 +49,9 @@ public class TraceSegmentJsonReader implements StreamJsonReader { } reader.endArray(); - if (logger.isDebugEnabled()) { - traceSegment.getGlobalTraceIds().forEach(uniqueId -> { - StringBuilder globalTraceId = new StringBuilder(); - uniqueId.getIdPartsList().forEach(idPart -> globalTraceId.append(idPart)); - logger.debug("global trace id: {}", globalTraceId.toString()); - }); - } break; case SEGMENT: - traceSegment.setTraceSegmentObject(segmentJsonReader.read(reader)); + traceSegment.setTraceSegmentBuilder(segmentJsonReader.read(reader)); break; default: reader.skipValue(); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/reader/UniqueIdJsonReader.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/reader/UniqueIdJsonReader.java index c4b1273e1..04ef1fb34 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/reader/UniqueIdJsonReader.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/reader/UniqueIdJsonReader.java @@ -25,9 +25,9 @@ import org.skywalking.apm.network.proto.UniqueId; /** * @author pengys5 */ -public class UniqueIdJsonReader implements StreamJsonReader { +public class UniqueIdJsonReader implements StreamJsonReader { - @Override public UniqueId read(JsonReader reader) throws IOException { + @Override public UniqueId.Builder read(JsonReader reader) throws IOException { UniqueId.Builder builder = UniqueId.newBuilder(); reader.beginArray(); @@ -35,6 +35,6 @@ public class UniqueIdJsonReader implements StreamJsonReader { builder.addIdParts(reader.nextLong()); } reader.endArray(); - return builder.build(); + return builder; } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/global/GlobalTraceSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/global/GlobalTraceSpanListener.java index e3e7da727..0e2425b3d 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/global/GlobalTraceSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/global/GlobalTraceSpanListener.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.List; import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.GlobalTraceIdsListener; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.TimeBucketUtils; @@ -30,7 +31,6 @@ import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; import org.skywalking.apm.collector.stream.worker.WorkerNotFoundException; -import org.skywalking.apm.network.proto.SpanObject; import org.skywalking.apm.network.proto.UniqueId; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -47,8 +47,9 @@ public class GlobalTraceSpanListener implements FirstSpanListener, GlobalTraceId private long timeBucket; @Override - public void parseFirst(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - this.timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime()); + public void parseFirst(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, + String segmentId) { + this.timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime()); this.segmentId = segmentId; } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/InstPerformanceSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/InstPerformanceSpanListener.java index 3eea6358e..55b219d65 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/InstPerformanceSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/InstPerformanceSpanListener.java @@ -20,6 +20,7 @@ package org.skywalking.apm.collector.agentstream.worker.instance.performance; import org.skywalking.apm.collector.agentstream.worker.segment.EntrySpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.TimeBucketUtils; @@ -28,7 +29,6 @@ import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; import org.skywalking.apm.collector.stream.worker.WorkerNotFoundException; -import org.skywalking.apm.network.proto.SpanObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,15 +45,17 @@ public class InstPerformanceSpanListener implements EntrySpanListener, FirstSpan private long timeBucket; @Override - public void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { + public void parseEntry(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, + String segmentId) { } @Override - public void parseFirst(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { + public void parseFirst(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, + String segmentId) { this.applicationId = applicationId; this.instanceId = applicationInstanceId; - this.cost = spanObject.getEndTime() - spanObject.getStartTime(); - timeBucket = TimeBucketUtils.INSTANCE.getSecondTimeBucket(spanObject.getStartTime()); + this.cost = spanDecorator.getEndTime() - spanDecorator.getStartTime(); + timeBucket = TimeBucketUtils.INSTANCE.getSecondTimeBucket(spanDecorator.getStartTime()); } @Override public void build() { diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/NodeComponentSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/NodeComponentSpanListener.java index d6a708896..8e7582bb9 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/NodeComponentSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/NodeComponentSpanListener.java @@ -23,6 +23,7 @@ import java.util.List; import org.skywalking.apm.collector.agentstream.worker.segment.EntrySpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.ExitSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.TimeBucketUtils; @@ -31,7 +32,6 @@ import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; import org.skywalking.apm.collector.stream.worker.WorkerNotFoundException; -import org.skywalking.apm.network.proto.SpanObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,39 +46,34 @@ public class NodeComponentSpanListener implements EntrySpanListener, ExitSpanLis private long timeBucket; @Override - public void parseExit(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { + public void parseExit(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId) { NodeComponentDataDefine.NodeComponent nodeComponent = new NodeComponentDataDefine.NodeComponent(); - nodeComponent.setComponentId(spanObject.getComponentId()); + nodeComponent.setComponentId(spanDecorator.getComponentId()); String id; - if (spanObject.getComponentId() == 0) { - nodeComponent.setComponentName(spanObject.getComponent()); + if (spanDecorator.getComponentId() == 0) { + nodeComponent.setComponentName(spanDecorator.getComponent()); id = nodeComponent.getComponentName(); } else { nodeComponent.setComponentName(Const.EMPTY_STRING); id = String.valueOf(nodeComponent.getComponentId()); } - nodeComponent.setPeerId(spanObject.getPeerId()); - if (spanObject.getPeerId() == 0) { - nodeComponent.setPeer(spanObject.getPeer()); - id = id + Const.ID_SPLIT + nodeComponent.getPeer(); - } else { - nodeComponent.setPeer(Const.EMPTY_STRING); - id = id + Const.ID_SPLIT + nodeComponent.getPeerId(); - } + nodeComponent.setPeerId(spanDecorator.getPeerId()); + id = id + Const.ID_SPLIT + nodeComponent.getPeerId(); nodeComponent.setId(id); nodeComponents.add(nodeComponent); } @Override - public void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { + public void parseEntry(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, + String segmentId) { NodeComponentDataDefine.NodeComponent nodeComponent = new NodeComponentDataDefine.NodeComponent(); - nodeComponent.setComponentId(spanObject.getComponentId()); + nodeComponent.setComponentId(spanDecorator.getComponentId()); String id; - if (spanObject.getComponentId() == 0) { - nodeComponent.setComponentName(spanObject.getComponent()); + if (spanDecorator.getComponentId() == 0) { + nodeComponent.setComponentName(spanDecorator.getComponent()); id = nodeComponent.getComponentName(); } else { id = String.valueOf(nodeComponent.getComponentId()); @@ -86,7 +81,6 @@ public class NodeComponentSpanListener implements EntrySpanListener, ExitSpanLis } nodeComponent.setPeerId(applicationId); - nodeComponent.setPeer(Const.EMPTY_STRING); id = id + Const.ID_SPLIT + String.valueOf(applicationId); nodeComponent.setId(id); @@ -94,8 +88,9 @@ public class NodeComponentSpanListener implements EntrySpanListener, ExitSpanLis } @Override - public void parseFirst(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime()); + public void parseFirst(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, + String segmentId) { + timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime()); } @Override public void build() { diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/NodeMappingSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/NodeMappingSpanListener.java index 5bfc3e22a..7ebbdeff1 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/NodeMappingSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/NodeMappingSpanListener.java @@ -22,6 +22,8 @@ import java.util.ArrayList; import java.util.List; import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.RefsListener; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.ReferenceDecorator; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.TimeBucketUtils; @@ -30,8 +32,6 @@ import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; import org.skywalking.apm.collector.stream.worker.WorkerNotFoundException; -import org.skywalking.apm.network.proto.SpanObject; -import org.skywalking.apm.network.proto.TraceSegmentReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,29 +45,21 @@ public class NodeMappingSpanListener implements RefsListener, FirstSpanListener private List nodeMappings = new ArrayList<>(); private long timeBucket; - @Override public void parseRef(TraceSegmentReference reference, int applicationId, int applicationInstanceId, + @Override public void parseRef(ReferenceDecorator referenceDecorator, int applicationId, int applicationInstanceId, String segmentId) { logger.debug("node mapping listener parse reference"); NodeMappingDataDefine.NodeMapping nodeMapping = new NodeMappingDataDefine.NodeMapping(); nodeMapping.setApplicationId(applicationId); - nodeMapping.setAddressId(reference.getNetworkAddressId()); - - String id = String.valueOf(applicationId); - if (reference.getNetworkAddressId() != 0) { - nodeMapping.setAddress(Const.EMPTY_STRING); - id = id + Const.ID_SPLIT + String.valueOf(nodeMapping.getAddressId()); - } else { - id = id + Const.ID_SPLIT + reference.getNetworkAddress(); - nodeMapping.setAddress(reference.getNetworkAddress()); - } - + nodeMapping.setAddressId(referenceDecorator.getNetworkAddressId()); + String id = String.valueOf(applicationId) + Const.ID_SPLIT + String.valueOf(nodeMapping.getAddressId()); nodeMapping.setId(id); nodeMappings.add(nodeMapping); } @Override - public void parseFirst(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime()); + public void parseFirst(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, + String segmentId) { + timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime()); } @Override public void build() { diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java index 8f05d6acc..6c302569d 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java @@ -23,6 +23,8 @@ import java.util.List; import org.skywalking.apm.collector.agentstream.worker.segment.EntrySpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.ExitSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.RefsListener; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.ReferenceDecorator; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator; import org.skywalking.apm.collector.cache.InstanceCache; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.core.util.CollectionUtils; @@ -33,8 +35,6 @@ import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; import org.skywalking.apm.collector.stream.worker.WorkerNotFoundException; -import org.skywalking.apm.network.proto.SpanObject; -import org.skywalking.apm.network.proto.TraceSegmentReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,59 +49,53 @@ public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanLis private List references = new LinkedList<>(); @Override - public void parseExit(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { + public void parseExit(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId) { NodeReferenceDataDefine.NodeReference nodeReference = new NodeReferenceDataDefine.NodeReference(); nodeReference.setFrontApplicationId(applicationId); - nodeReference.setBehindApplicationId(spanObject.getPeerId()); - nodeReference.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime())); + nodeReference.setBehindApplicationId(spanDecorator.getPeerId()); + nodeReference.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime())); StringBuilder idBuilder = new StringBuilder(); - idBuilder.append(nodeReference.getTimeBucket()).append(Const.ID_SPLIT).append(applicationId); - if (spanObject.getPeerId() != 0) { - nodeReference.setBehindPeer(Const.EMPTY_STRING); - idBuilder.append(Const.ID_SPLIT).append(spanObject.getPeerId()); - } else { - nodeReference.setBehindPeer(spanObject.getPeer()); - idBuilder.append(Const.ID_SPLIT).append(spanObject.getPeer()); - } + idBuilder.append(nodeReference.getTimeBucket()).append(Const.ID_SPLIT).append(applicationId) + .append(Const.ID_SPLIT).append(spanDecorator.getPeerId()); + nodeReference.setId(idBuilder.toString()); - nodeReferences.add(buildNodeRefSum(nodeReference, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError())); + nodeReferences.add(buildNodeRefSum(nodeReference, spanDecorator.getStartTime(), spanDecorator.getEndTime(), spanDecorator.getIsError())); } @Override - public void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { + public void parseEntry(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, + String segmentId) { if (CollectionUtils.isNotEmpty(references)) { references.forEach(nodeReference -> { - nodeReference.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime())); + nodeReference.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime())); String idBuilder = String.valueOf(nodeReference.getTimeBucket()) + Const.ID_SPLIT + nodeReference.getFrontApplicationId() + Const.ID_SPLIT + nodeReference.getBehindApplicationId(); nodeReference.setId(idBuilder); - nodeReferences.add(buildNodeRefSum(nodeReference, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError())); + nodeReferences.add(buildNodeRefSum(nodeReference, spanDecorator.getStartTime(), spanDecorator.getEndTime(), spanDecorator.getIsError())); }); } else { NodeReferenceDataDefine.NodeReference nodeReference = new NodeReferenceDataDefine.NodeReference(); nodeReference.setFrontApplicationId(Const.USER_ID); nodeReference.setBehindApplicationId(applicationId); - nodeReference.setBehindPeer(Const.EMPTY_STRING); - nodeReference.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime())); + nodeReference.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime())); String idBuilder = String.valueOf(nodeReference.getTimeBucket()) + Const.ID_SPLIT + nodeReference.getFrontApplicationId() + Const.ID_SPLIT + nodeReference.getBehindApplicationId(); nodeReference.setId(idBuilder); - nodeReferences.add(buildNodeRefSum(nodeReference, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError())); + nodeReferences.add(buildNodeRefSum(nodeReference, spanDecorator.getStartTime(), spanDecorator.getEndTime(), spanDecorator.getIsError())); } } - @Override public void parseRef(TraceSegmentReference reference, int applicationId, int applicationInstanceId, + @Override public void parseRef(ReferenceDecorator referenceDecorator, int applicationId, int applicationInstanceId, String segmentId) { - int parentApplicationId = InstanceCache.get(reference.getParentApplicationInstanceId()); + int parentApplicationId = InstanceCache.get(referenceDecorator.getParentApplicationInstanceId()); NodeReferenceDataDefine.NodeReference referenceSum = new NodeReferenceDataDefine.NodeReference(); referenceSum.setFrontApplicationId(parentApplicationId); referenceSum.setBehindApplicationId(applicationId); - referenceSum.setBehindPeer(Const.EMPTY_STRING); references.add(referenceSum); } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/EntrySpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/EntrySpanListener.java index b12c0de6a..6dc623ffa 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/EntrySpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/EntrySpanListener.java @@ -18,11 +18,11 @@ package org.skywalking.apm.collector.agentstream.worker.segment; -import org.skywalking.apm.network.proto.SpanObject; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator; /** * @author pengys5 */ public interface EntrySpanListener extends SpanListener { - void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId); + void parseEntry(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId); } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/ExitSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/ExitSpanListener.java index cf3c7cc32..619c05cb5 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/ExitSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/ExitSpanListener.java @@ -18,11 +18,11 @@ package org.skywalking.apm.collector.agentstream.worker.segment; -import org.skywalking.apm.network.proto.SpanObject; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator; /** * @author pengys5 */ public interface ExitSpanListener extends SpanListener { - void parseExit(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId); + void parseExit(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId); } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/FirstSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/FirstSpanListener.java index 62e416497..f36b9074b 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/FirstSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/FirstSpanListener.java @@ -18,11 +18,11 @@ package org.skywalking.apm.collector.agentstream.worker.segment; -import org.skywalking.apm.network.proto.SpanObject; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator; /** * @author pengys5 */ public interface FirstSpanListener extends SpanListener { - void parseFirst(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId); + void parseFirst(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId); } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/LocalSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/LocalSpanListener.java index aa0299688..95e48a077 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/LocalSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/LocalSpanListener.java @@ -18,11 +18,11 @@ package org.skywalking.apm.collector.agentstream.worker.segment; -import org.skywalking.apm.network.proto.SpanObject; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator; /** * @author pengys5 */ public interface LocalSpanListener extends SpanListener { - void parseLocal(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId); + void parseLocal(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId); } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/RefsListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/RefsListener.java index 96294472b..3e7c80cad 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/RefsListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/RefsListener.java @@ -18,11 +18,11 @@ package org.skywalking.apm.collector.agentstream.worker.segment; -import org.skywalking.apm.network.proto.TraceSegmentReference; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.ReferenceDecorator; /** * @author pengys5 */ public interface RefsListener extends SpanListener { - void parseRef(TraceSegmentReference reference, int applicationId, int applicationInstanceId, String segmentId); + void parseRef(ReferenceDecorator referenceDecorator, int applicationId, int applicationInstanceId, String segmentId); } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/SegmentParse.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/SegmentParse.java index 0fca994f7..f5f79300c 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/SegmentParse.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/SegmentParse.java @@ -18,6 +18,7 @@ package org.skywalking.apm.collector.agentstream.worker.segment; +import com.google.protobuf.InvalidProtocolBufferException; import java.util.ArrayList; import java.util.List; import org.skywalking.apm.collector.agentstream.worker.global.GlobalTraceSpanListener; @@ -27,20 +28,24 @@ import org.skywalking.apm.collector.agentstream.worker.node.mapping.NodeMappingS import org.skywalking.apm.collector.agentstream.worker.noderef.NodeReferenceSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.cost.SegmentCostSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.origin.SegmentPersistenceWorker; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.ReferenceDecorator; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.ReferenceIdExchanger; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SegmentDecorator; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SegmentStandardizationWorker; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanIdExchanger; import org.skywalking.apm.collector.agentstream.worker.service.entry.ServiceEntrySpanListener; import org.skywalking.apm.collector.agentstream.worker.serviceref.ServiceReferenceSpanListener; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; -import org.skywalking.apm.collector.core.util.CollectionUtils; import org.skywalking.apm.collector.storage.define.segment.SegmentDataDefine; import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; import org.skywalking.apm.collector.stream.worker.WorkerNotFoundException; -import org.skywalking.apm.network.proto.SpanObject; import org.skywalking.apm.network.proto.SpanType; import org.skywalking.apm.network.proto.TraceSegmentObject; -import org.skywalking.apm.network.proto.TraceSegmentReference; import org.skywalking.apm.network.proto.UniqueId; +import org.skywalking.apm.network.proto.UpstreamSegment; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,6 +57,7 @@ public class SegmentParse { private final Logger logger = LoggerFactory.getLogger(SegmentParse.class); private List spanListeners; + private String segmentId; public SegmentParse() { spanListeners = new ArrayList<>(); @@ -65,51 +71,83 @@ public class SegmentParse { spanListeners.add(new InstPerformanceSpanListener()); } - public void parse(List traceIds, TraceSegmentObject segmentObject) { + public boolean parse(UpstreamSegment segment, Source source) { + try { + List traceIds = segment.getGlobalTraceIdsList(); + TraceSegmentObject segmentObject = TraceSegmentObject.parseFrom(segment.getSegment()); + + SegmentDecorator segmentDecorator = new SegmentDecorator(segmentObject); + if (!preBuild(traceIds, segmentDecorator)) { + logger.debug("This segment id exchange not success, write to buffer file, id: {}", segmentId); + + if (source.equals(Source.Agent)) { + writeToBufferFile(segmentId, segment); + } + return false; + } else { + logger.debug("This segment id exchange success, id: {}", segmentId); + notifyListenerToBuild(); + buildSegment(segmentId, segmentDecorator.toByteArray()); + return true; + } + } catch (InvalidProtocolBufferException e) { + logger.error(e.getMessage(), e); + } + return false; + } + + private boolean preBuild(List traceIds, SegmentDecorator segmentDecorator) { StringBuilder segmentIdBuilder = new StringBuilder(); - for (int i = 0; i < segmentObject.getTraceSegmentId().getIdPartsList().size(); i++) { + for (int i = 0; i < segmentDecorator.getTraceSegmentId().getIdPartsList().size(); i++) { if (i == 0) { - segmentIdBuilder.append(segmentObject.getTraceSegmentId().getIdPartsList().get(i)); + segmentIdBuilder.append(segmentDecorator.getTraceSegmentId().getIdPartsList().get(i)); } else { - segmentIdBuilder.append(".").append(segmentObject.getTraceSegmentId().getIdPartsList().get(i)); + segmentIdBuilder.append(".").append(segmentDecorator.getTraceSegmentId().getIdPartsList().get(i)); } } - String segmentId = segmentIdBuilder.toString(); + segmentId = segmentIdBuilder.toString(); for (UniqueId uniqueId : traceIds) { notifyGlobalsListener(uniqueId); } - int applicationId = segmentObject.getApplicationId(); - int applicationInstanceId = segmentObject.getApplicationInstanceId(); + int applicationId = segmentDecorator.getApplicationId(); + int applicationInstanceId = segmentDecorator.getApplicationInstanceId(); - for (TraceSegmentReference reference : segmentObject.getRefsList()) { - notifyRefsListener(reference, applicationId, applicationInstanceId, segmentId); + for (int i = 0; i < segmentDecorator.getRefsCount(); i++) { + ReferenceDecorator referenceDecorator = segmentDecorator.getRefs(i); + if (!ReferenceIdExchanger.getInstance().exchange(referenceDecorator, applicationId)) { + return false; + } + + notifyRefsListener(referenceDecorator, applicationId, applicationInstanceId, segmentId); } - List spans = segmentObject.getSpansList(); - if (CollectionUtils.isNotEmpty(spans)) { - for (SpanObject spanObject : spans) { - if (spanObject.getSpanId() == 0) { - notifyFirstListener(spanObject, applicationId, applicationInstanceId, segmentId); - } + for (int i = 0; i < segmentDecorator.getSpansCount(); i++) { + SpanDecorator spanDecorator = segmentDecorator.getSpans(i); - if (SpanType.Exit.equals(spanObject.getSpanType())) { - notifyExitListener(spanObject, applicationId, applicationInstanceId, segmentId); - } else if (SpanType.Entry.equals(spanObject.getSpanType())) { - notifyEntryListener(spanObject, applicationId, applicationInstanceId, segmentId); - } else if (SpanType.Local.equals(spanObject.getSpanType())) { - notifyLocalListener(spanObject, applicationId, applicationInstanceId, segmentId); - } else { - logger.error("span type error, span type: {}", spanObject.getSpanType().name()); - } + if (!SpanIdExchanger.getInstance().exchange(spanDecorator, applicationId)) { + return false; + } + + if (spanDecorator.getSpanId() == 0) { + notifyFirstListener(spanDecorator, applicationId, applicationInstanceId, segmentId); + } + + if (SpanType.Exit.equals(spanDecorator.getSpanType())) { + notifyExitListener(spanDecorator, applicationId, applicationInstanceId, segmentId); + } else if (SpanType.Entry.equals(spanDecorator.getSpanType())) { + notifyEntryListener(spanDecorator, applicationId, applicationInstanceId, segmentId); + } else if (SpanType.Local.equals(spanDecorator.getSpanType())) { + notifyLocalListener(spanDecorator, applicationId, applicationInstanceId, segmentId); + } else { + logger.error("span type value was unexpected, span type name: {}", spanDecorator.getSpanType().name()); } } - notifyListenerToBuild(); - buildSegment(segmentId, segmentObject.toByteArray()); + return true; } private void buildSegment(String id, byte[] dataBinary) { @@ -126,47 +164,58 @@ public class SegmentParse { } } + private void writeToBufferFile(String id, UpstreamSegment upstreamSegment) { + StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME); + + try { + logger.debug("send to segment buffer write worker, id: {}", id); + context.getClusterWorkerContext().lookup(SegmentStandardizationWorker.WorkerRole.INSTANCE).tell(upstreamSegment); + } catch (WorkerInvokeException | WorkerNotFoundException e) { + logger.error(e.getMessage(), e); + } + } + private void notifyListenerToBuild() { spanListeners.forEach(SpanListener::build); } - private void notifyExitListener(SpanObject spanObject, int applicationId, int applicationInstanceId, + private void notifyExitListener(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId) { for (SpanListener listener : spanListeners) { if (listener instanceof ExitSpanListener) { - ((ExitSpanListener)listener).parseExit(spanObject, applicationId, applicationInstanceId, segmentId); + ((ExitSpanListener)listener).parseExit(spanDecorator, applicationId, applicationInstanceId, segmentId); } } } - private void notifyEntryListener(SpanObject spanObject, int applicationId, int applicationInstanceId, + private void notifyEntryListener(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId) { for (SpanListener listener : spanListeners) { if (listener instanceof EntrySpanListener) { - ((EntrySpanListener)listener).parseEntry(spanObject, applicationId, applicationInstanceId, segmentId); + ((EntrySpanListener)listener).parseEntry(spanDecorator, applicationId, applicationInstanceId, segmentId); } } } - private void notifyLocalListener(SpanObject spanObject, int applicationId, int applicationInstanceId, + private void notifyLocalListener(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId) { for (SpanListener listener : spanListeners) { if (listener instanceof LocalSpanListener) { - ((LocalSpanListener)listener).parseLocal(spanObject, applicationId, applicationInstanceId, segmentId); + ((LocalSpanListener)listener).parseLocal(spanDecorator, applicationId, applicationInstanceId, segmentId); } } } - private void notifyFirstListener(SpanObject spanObject, int applicationId, int applicationInstanceId, + private void notifyFirstListener(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId) { for (SpanListener listener : spanListeners) { if (listener instanceof FirstSpanListener) { - ((FirstSpanListener)listener).parseFirst(spanObject, applicationId, applicationInstanceId, segmentId); + ((FirstSpanListener)listener).parseFirst(spanDecorator, applicationId, applicationInstanceId, segmentId); } } } - private void notifyRefsListener(TraceSegmentReference reference, int applicationId, int applicationInstanceId, + private void notifyRefsListener(ReferenceDecorator reference, int applicationId, int applicationInstanceId, String segmentId) { for (SpanListener listener : spanListeners) { if (listener instanceof RefsListener) { @@ -182,4 +231,8 @@ public class SegmentParse { } } } + + public enum Source { + Agent, Buffer + } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/Offset.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/Offset.java new file mode 100644 index 000000000..6b5b95f2b --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/Offset.java @@ -0,0 +1,99 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.agentstream.worker.segment.buffer; + +/** + * @author pengys5 + */ +public class Offset { + + private static final String SPLIT_CHARACTER = ","; + private ReadOffset readOffset; + private WriteOffset writeOffset; + + public Offset() { + readOffset = new ReadOffset(); + writeOffset = new WriteOffset(); + } + + public String serialize() { + return readOffset.getReadFileName() + SPLIT_CHARACTER + String.valueOf(readOffset.getReadFileOffset()) + + SPLIT_CHARACTER + writeOffset.getWriteFileName() + SPLIT_CHARACTER + String.valueOf(writeOffset.getWriteFileOffset()); + } + + public void deserialize(String value) { + String[] values = value.split(SPLIT_CHARACTER); + if (values.length == 4) { + this.readOffset.readFileName = values[0]; + this.readOffset.readFileOffset = Long.parseLong(values[1]); + this.writeOffset.writeFileName = values[2]; + this.writeOffset.writeFileOffset = Long.parseLong(values[3]); + } + } + + public ReadOffset getReadOffset() { + return readOffset; + } + + public WriteOffset getWriteOffset() { + return writeOffset; + } + + public static class ReadOffset { + private String readFileName; + private long readFileOffset = 0; + + public String getReadFileName() { + return readFileName; + } + + public long getReadFileOffset() { + return readFileOffset; + } + + public void setReadFileName(String readFileName) { + this.readFileName = readFileName; + } + + public void setReadFileOffset(long readFileOffset) { + this.readFileOffset = readFileOffset; + } + } + + public static class WriteOffset { + private String writeFileName; + private long writeFileOffset = 0; + + public String getWriteFileName() { + return writeFileName; + } + + public long getWriteFileOffset() { + return writeFileOffset; + } + + public void setWriteFileName(String writeFileName) { + this.writeFileName = writeFileName; + } + + public void setWriteFileOffset(long writeFileOffset) { + this.writeFileOffset = writeFileOffset; + } + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManager.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManager.java new file mode 100644 index 000000000..e895b52c0 --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManager.java @@ -0,0 +1,152 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.agentstream.worker.segment.buffer; + +import java.io.File; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import org.skywalking.apm.collector.agentstream.config.BufferFileConfig; +import org.skywalking.apm.collector.agentstream.worker.util.FileUtils; +import org.skywalking.apm.collector.core.util.CollectionUtils; +import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public enum OffsetManager { + INSTANCE; + + private final Logger logger = LoggerFactory.getLogger(OffsetManager.class); + + private static final String OFFSET_FILE_PREFIX = "offset"; + private File offsetFile; + private Offset offset; + private boolean initialized = false; + private RandomAccessFile randomAccessFile = null; + private String lastOffsetRecord = Const.EMPTY_STRING; + + public synchronized void initialize() throws IOException { + if (!initialized) { + this.offset = new Offset(); + File dataPath = new File(SegmentBufferConfig.BUFFER_PATH); + if (dataPath.mkdirs()) { + createOffsetFile(); + } else { + File[] offsetFiles = dataPath.listFiles(new PrefixFileNameFilter()); + if (CollectionUtils.isNotEmpty(offsetFiles) && offsetFiles.length > 0) { + for (int i = 0; i < offsetFiles.length; i++) { + if (i != offsetFiles.length - 1) { + offsetFiles[i].delete(); + } else { + offsetFile = offsetFiles[i]; + } + } + } else { + createOffsetFile(); + } + } + String offsetRecord = FileUtils.INSTANCE.readLastLine(offsetFile); + offset.deserialize(offsetRecord); + initialized = true; + + Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(() -> flush(), 10, 3, TimeUnit.SECONDS); + } + } + + private void createOffsetFile() throws IOException { + String timeBucket = String.valueOf(TimeBucketUtils.INSTANCE.getSecondTimeBucket(System.currentTimeMillis())); + String offsetFileName = OFFSET_FILE_PREFIX + "_" + timeBucket + "." + Const.FILE_SUFFIX; + offsetFile = new File(SegmentBufferConfig.BUFFER_PATH + offsetFileName); + this.offset.getWriteOffset().setWriteFileName(Const.EMPTY_STRING); + this.offset.getWriteOffset().setWriteFileOffset(0); + this.offset.getReadOffset().setReadFileName(Const.EMPTY_STRING); + this.offset.getReadOffset().setReadFileOffset(0); + this.flush(); + } + + public void flush() { + String offsetRecord = offset.serialize(); + if (!lastOffsetRecord.equals(offsetRecord)) { + if (offsetFile.length() >= BufferFileConfig.BUFFER_OFFSET_MAX_FILE_SIZE) { + exchangeFile(); + } + FileUtils.INSTANCE.writeAppendToLast(offsetFile, randomAccessFile, offsetRecord); + lastOffsetRecord = offsetRecord; + } + } + + private void exchangeFile() { + String timeBucket = String.valueOf(TimeBucketUtils.INSTANCE.getSecondTimeBucket(System.currentTimeMillis())); + String offsetFileName = OFFSET_FILE_PREFIX + "_" + timeBucket + "." + Const.FILE_SUFFIX; + File newOffsetFile = new File(SegmentBufferConfig.BUFFER_PATH + offsetFileName); + offsetFile.delete(); + offsetFile = newOffsetFile; + this.flush(); + } + + public String getReadFileName() { + return offset.getReadOffset().getReadFileName(); + } + + public long getReadFileOffset() { + return offset.getReadOffset().getReadFileOffset(); + } + + public void setReadOffset(long readFileOffset) { + offset.getReadOffset().setReadFileOffset(readFileOffset); + } + + public void setReadOffset(String readFileName, long readFileOffset) { + offset.getReadOffset().setReadFileName(readFileName); + offset.getReadOffset().setReadFileOffset(readFileOffset); + } + + public String getWriteFileName() { + return offset.getWriteOffset().getWriteFileName(); + } + + public long getWriteFileOffset() { + return offset.getWriteOffset().getWriteFileOffset(); + } + + public void setWriteOffset(String writeFileName, long writeFileOffset) { + offset.getWriteOffset().setWriteFileName(writeFileName); + offset.getWriteOffset().setWriteFileOffset(writeFileOffset); + } + + public void setWriteOffset(long writeFileOffset) { + offset.getWriteOffset().setWriteFileOffset(writeFileOffset); + } + + class PrefixFileNameFilter implements FilenameFilter { + @Override public boolean accept(File dir, String name) { + if (name.startsWith(OFFSET_FILE_PREFIX)) { + return true; + } else { + return false; + } + } + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferConfig.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferConfig.java new file mode 100644 index 000000000..30bf0eb7f --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferConfig.java @@ -0,0 +1,28 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.agentstream.worker.segment.buffer; + +import org.skywalking.apm.collector.core.config.SystemConfig; + +/** + * @author pengys5 + */ +public class SegmentBufferConfig { + public static String BUFFER_PATH = SystemConfig.DATA_PATH + "/buffer/"; +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferManager.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferManager.java new file mode 100644 index 000000000..661f70084 --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferManager.java @@ -0,0 +1,103 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.agentstream.worker.segment.buffer; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import org.skywalking.apm.collector.agentstream.config.BufferFileConfig; +import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.core.util.StringUtils; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; +import org.skywalking.apm.network.proto.UpstreamSegment; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public enum SegmentBufferManager { + INSTANCE; + + private final Logger logger = LoggerFactory.getLogger(SegmentBufferManager.class); + + public static final String DATA_FILE_PREFIX = "data"; + private FileOutputStream outputStream; + + public synchronized void initialize() { + logger.info("segment buffer initialize"); + try { + OffsetManager.INSTANCE.initialize(); + if (new File(SegmentBufferConfig.BUFFER_PATH).mkdirs()) { + newDataFile(); + } else { + String writeFileName = OffsetManager.INSTANCE.getWriteFileName(); + if (StringUtils.isNotEmpty(writeFileName)) { + File dataFile = new File(SegmentBufferConfig.BUFFER_PATH + writeFileName); + if (dataFile.exists()) { + outputStream = new FileOutputStream(new File(SegmentBufferConfig.BUFFER_PATH + writeFileName), true); + } else { + newDataFile(); + } + } else { + newDataFile(); + } + } + SegmentBufferReader.INSTANCE.initialize(); + } catch (IOException e) { + logger.error(e.getMessage(), e); + } + } + + public synchronized void writeBuffer(UpstreamSegment segment) { + try { + segment.writeDelimitedTo(outputStream); + long position = outputStream.getChannel().position(); + if (position > BufferFileConfig.BUFFER_SEGMENT_MAX_FILE_SIZE) { + newDataFile(); + } else { + OffsetManager.INSTANCE.setWriteOffset(position); + } + } catch (IOException e) { + logger.error(e.getMessage(), e); + } + } + + private void newDataFile() throws IOException { + logger.debug("create new segment buffer file"); + String timeBucket = String.valueOf(TimeBucketUtils.INSTANCE.getSecondTimeBucket(System.currentTimeMillis())); + String writeFileName = DATA_FILE_PREFIX + "_" + timeBucket + "." + Const.FILE_SUFFIX; + File dataFile = new File(SegmentBufferConfig.BUFFER_PATH + writeFileName); + dataFile.createNewFile(); + OffsetManager.INSTANCE.setWriteOffset(writeFileName, 0); + try { + if (outputStream != null) { + outputStream.close(); + } + outputStream = new FileOutputStream(dataFile); + outputStream.getChannel().position(0); + } catch (IOException e) { + logger.error(e.getMessage(), e); + } + } + + public synchronized void flush() { + + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferReader.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferReader.java new file mode 100644 index 000000000..775c6c9d6 --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferReader.java @@ -0,0 +1,151 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.agentstream.worker.segment.buffer; + +import com.google.protobuf.CodedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.InputStream; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import org.skywalking.apm.collector.agentstream.worker.segment.SegmentParse; +import org.skywalking.apm.collector.core.util.CollectionUtils; +import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.core.util.StringUtils; +import org.skywalking.apm.network.proto.UpstreamSegment; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public enum SegmentBufferReader { + INSTANCE; + + private final Logger logger = LoggerFactory.getLogger(SegmentBufferReader.class); + private InputStream inputStream; + + public void initialize() { + Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(this::preRead, 3, 3, TimeUnit.SECONDS); + } + + private void preRead() { + String readFileName = OffsetManager.INSTANCE.getReadFileName(); + if (StringUtils.isNotEmpty(readFileName)) { + File readFile = new File(SegmentBufferConfig.BUFFER_PATH + readFileName); + if (readFile.exists()) { + deleteTheDataFilesBeforeReadFile(readFileName); + long readFileOffset = OffsetManager.INSTANCE.getReadFileOffset(); + read(readFile, readFileOffset); + readEarliestCreateDataFile(); + } else { + deleteTheDataFilesBeforeReadFile(readFileName); + readEarliestCreateDataFile(); + } + } else { + readEarliestCreateDataFile(); + } + } + + private void deleteTheDataFilesBeforeReadFile(String readFileName) { + File[] dataFiles = new File(SegmentBufferConfig.BUFFER_PATH).listFiles(new PrefixFileNameFilter()); + + long readFileCreateTime = getFileCreateTime(readFileName); + for (File dataFile : dataFiles) { + long fileCreateTime = getFileCreateTime(dataFile.getName()); + if (fileCreateTime < readFileCreateTime) { + dataFile.delete(); + } else if (fileCreateTime == readFileCreateTime) { + break; + } + } + } + + private long getFileCreateTime(String fileName) { + fileName = fileName.replace(SegmentBufferManager.DATA_FILE_PREFIX + "_", Const.EMPTY_STRING); + fileName = fileName.replace("." + Const.FILE_SUFFIX, Const.EMPTY_STRING); + return Long.valueOf(fileName); + } + + private void readEarliestCreateDataFile() { + String readFileName = OffsetManager.INSTANCE.getReadFileName(); + File[] dataFiles = new File(SegmentBufferConfig.BUFFER_PATH).listFiles(new PrefixFileNameFilter()); + + if (CollectionUtils.isNotEmpty(dataFiles)) { + if (dataFiles[0].getName().equals(readFileName)) { + return; + } + } + + for (File dataFile : dataFiles) { + logger.debug("Reading segment buffer data file, file name: {}", dataFile.getAbsolutePath()); + OffsetManager.INSTANCE.setReadOffset(dataFile.getName(), 0); + if (!read(dataFile, 0)) { + break; + } + } + } + + private boolean read(File readFile, long readFileOffset) { + try { + inputStream = new FileInputStream(readFile); + inputStream.skip(readFileOffset); + + String writeFileName = OffsetManager.INSTANCE.getWriteFileName(); + long endPoint = readFile.length(); + if (writeFileName.equals(readFile.getName())) { + endPoint = OffsetManager.INSTANCE.getWriteFileOffset(); + } + + while (readFile.length() > readFileOffset && readFileOffset < endPoint) { + UpstreamSegment upstreamSegment = UpstreamSegment.parser().parseDelimitedFrom(inputStream); + SegmentParse parse = new SegmentParse(); + if (!parse.parse(upstreamSegment, SegmentParse.Source.Buffer)) { + return false; + } + + final int serialized = upstreamSegment.getSerializedSize(); + readFileOffset = readFileOffset + CodedOutputStream.computeUInt32SizeNoTag(serialized) + serialized; + logger.debug("read segment buffer from file: {}, offset: {}, file length: {}", readFile.getName(), readFileOffset, readFile.length()); + OffsetManager.INSTANCE.setReadOffset(readFileOffset); + } + + inputStream.close(); + if (!writeFileName.equals(readFile.getName())) { + readFile.delete(); + } + } catch (IOException e) { + logger.error(e.getMessage(), e); + return false; + } + return true; + } + + class PrefixFileNameFilter implements FilenameFilter { + @Override public boolean accept(File dir, String name) { + if (name.startsWith(SegmentBufferManager.DATA_FILE_PREFIX)) { + return true; + } else { + return false; + } + } + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/SegmentCostSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/SegmentCostSpanListener.java index db928bfba..6b2209a73 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/SegmentCostSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/SegmentCostSpanListener.java @@ -24,6 +24,7 @@ import org.skywalking.apm.collector.agentstream.worker.segment.EntrySpanListener import org.skywalking.apm.collector.agentstream.worker.segment.ExitSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.LocalSpanListener; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator; import org.skywalking.apm.collector.cache.ServiceNameCache; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.core.util.TimeBucketUtils; @@ -32,14 +33,13 @@ import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; import org.skywalking.apm.collector.stream.worker.WorkerNotFoundException; -import org.skywalking.apm.network.proto.SpanObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author pengys5 */ -public class SegmentCostSpanListener implements EntrySpanListener, ExitSpanListener, LocalSpanListener,FirstSpanListener { +public class SegmentCostSpanListener implements EntrySpanListener, ExitSpanListener, LocalSpanListener, FirstSpanListener { private final Logger logger = LoggerFactory.getLogger(SegmentCostSpanListener.class); @@ -48,39 +48,42 @@ public class SegmentCostSpanListener implements EntrySpanListener, ExitSpanListe private long timeBucket; @Override - public void parseFirst(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime()); + public void parseFirst(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, + String segmentId) { + timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime()); SegmentCostDataDefine.SegmentCost segmentCost = new SegmentCostDataDefine.SegmentCost(); segmentCost.setSegmentId(segmentId); segmentCost.setApplicationId(applicationId); - segmentCost.setCost(spanObject.getEndTime() - spanObject.getStartTime()); - segmentCost.setStartTime(spanObject.getStartTime()); - segmentCost.setEndTime(spanObject.getEndTime()); + segmentCost.setCost(spanDecorator.getEndTime() - spanDecorator.getStartTime()); + segmentCost.setStartTime(spanDecorator.getStartTime()); + segmentCost.setEndTime(spanDecorator.getEndTime()); segmentCost.setId(segmentId); - if (spanObject.getOperationNameId() == 0) { - segmentCost.setServiceName(spanObject.getOperationName()); + if (spanDecorator.getOperationNameId() == 0) { + segmentCost.setServiceName(spanDecorator.getOperationName()); } else { - segmentCost.setServiceName(ServiceNameCache.get(spanObject.getOperationNameId())); + segmentCost.setServiceName(ServiceNameCache.get(spanDecorator.getOperationNameId())); } segmentCosts.add(segmentCost); - isError = isError || spanObject.getIsError(); + isError = isError || spanDecorator.getIsError(); } @Override - public void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - isError = isError || spanObject.getIsError(); + public void parseEntry(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, + String segmentId) { + isError = isError || spanDecorator.getIsError(); } @Override - public void parseExit(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - isError = isError || spanObject.getIsError(); + public void parseExit(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId) { + isError = isError || spanDecorator.getIsError(); } @Override - public void parseLocal(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - isError = isError || spanObject.getIsError(); + public void parseLocal(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, + String segmentId) { + isError = isError || spanDecorator.getIsError(); } @Override public void build() { diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/IdExchanger.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/IdExchanger.java new file mode 100644 index 000000000..9a88718cc --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/IdExchanger.java @@ -0,0 +1,26 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.agentstream.worker.segment.standardization; + +/** + * @author pengys5 + */ +public interface IdExchanger { + boolean exchange(T standardBuilder, int applicationId); +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/ReferenceDecorator.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/ReferenceDecorator.java new file mode 100644 index 000000000..17f86a0a6 --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/ReferenceDecorator.java @@ -0,0 +1,194 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.agentstream.worker.segment.standardization; + +import org.skywalking.apm.network.proto.RefType; +import org.skywalking.apm.network.proto.TraceSegmentReference; +import org.skywalking.apm.network.proto.UniqueId; + +/** + * @author pengys5 + */ +public class ReferenceDecorator implements StandardBuilder { + private boolean isOrigin = true; + private StandardBuilder standardBuilder; + private TraceSegmentReference referenceObject; + private TraceSegmentReference.Builder referenceBuilder; + + public ReferenceDecorator(TraceSegmentReference referenceObject, StandardBuilder standardBuilder) { + this.referenceObject = referenceObject; + this.standardBuilder = standardBuilder; + } + + public ReferenceDecorator(TraceSegmentReference.Builder referenceBuilder, StandardBuilder standardBuilder) { + this.referenceBuilder = referenceBuilder; + this.standardBuilder = standardBuilder; + this.isOrigin = false; + } + + public RefType getRefType() { + if (isOrigin) { + return referenceObject.getRefType(); + } else { + return referenceBuilder.getRefType(); + } + } + + public int getRefTypeValue() { + if (isOrigin) { + return referenceObject.getRefTypeValue(); + } else { + return referenceBuilder.getRefTypeValue(); + } + } + + public int getEntryServiceId() { + if (isOrigin) { + return referenceObject.getEntryServiceId(); + } else { + return referenceBuilder.getEntryServiceId(); + } + } + + public void setEntryServiceId(int value) { + if (isOrigin) { + toBuilder(); + } else { + referenceBuilder.setEntryServiceId(value); + } + } + + public String getEntryServiceName() { + if (isOrigin) { + return referenceObject.getEntryServiceName(); + } else { + return referenceBuilder.getEntryServiceName(); + } + } + + public void setEntryServiceName(String value) { + if (isOrigin) { + toBuilder(); + } else { + referenceBuilder.setEntryServiceName(value); + } + } + + public int getEntryApplicationInstanceId() { + if (isOrigin) { + return referenceObject.getEntryApplicationInstanceId(); + } else { + return referenceBuilder.getEntryApplicationInstanceId(); + } + } + + public int getParentApplicationInstanceId() { + if (isOrigin) { + return referenceObject.getParentApplicationInstanceId(); + } else { + return referenceBuilder.getParentApplicationInstanceId(); + } + } + + public int getParentServiceId() { + if (isOrigin) { + return referenceObject.getParentServiceId(); + } else { + return referenceBuilder.getParentServiceId(); + } + } + + public void setParentServiceId(int value) { + if (isOrigin) { + toBuilder(); + } else { + referenceBuilder.setParentServiceId(value); + } + } + + public int getParentSpanId() { + if (isOrigin) { + return referenceObject.getParentSpanId(); + } else { + return referenceBuilder.getParentSpanId(); + } + } + + public String getParentServiceName() { + if (isOrigin) { + return referenceObject.getParentServiceName(); + } else { + return referenceBuilder.getParentServiceName(); + } + } + + public void setParentServiceName(String value) { + if (isOrigin) { + toBuilder(); + } else { + referenceBuilder.setParentServiceName(value); + } + } + + public UniqueId getParentTraceSegmentId() { + if (isOrigin) { + return referenceObject.getParentTraceSegmentId(); + } else { + return referenceBuilder.getParentTraceSegmentId(); + } + } + + public int getNetworkAddressId() { + if (isOrigin) { + return referenceObject.getNetworkAddressId(); + } else { + return referenceBuilder.getNetworkAddressId(); + } + } + + public void setNetworkAddressId(int value) { + if (isOrigin) { + toBuilder(); + } else { + referenceBuilder.setNetworkAddressId(value); + } + } + + public String getNetworkAddress() { + if (isOrigin) { + return referenceObject.getNetworkAddress(); + } else { + return referenceBuilder.getNetworkAddress(); + } + } + + public void setNetworkAddress(String value) { + if (isOrigin) { + toBuilder(); + } else { + referenceBuilder.setNetworkAddress(value); + } + } + + @Override public void toBuilder() { + this.isOrigin = false; + referenceBuilder = referenceObject.toBuilder(); + standardBuilder.toBuilder(); + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/ReferenceIdExchanger.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/ReferenceIdExchanger.java new file mode 100644 index 000000000..683ba5ff3 --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/ReferenceIdExchanger.java @@ -0,0 +1,80 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.agentstream.worker.segment.standardization; + +import org.skywalking.apm.collector.cache.ApplicationCache; +import org.skywalking.apm.collector.cache.InstanceCache; +import org.skywalking.apm.collector.cache.ServiceIdCache; +import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.core.util.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public class ReferenceIdExchanger implements IdExchanger { + + private final Logger logger = LoggerFactory.getLogger(ReferenceIdExchanger.class); + + private static ReferenceIdExchanger exchanger; + + public static ReferenceIdExchanger getInstance() { + if (exchanger == null) { + exchanger = new ReferenceIdExchanger(); + } + return exchanger; + } + + @Override public boolean exchange(ReferenceDecorator standardBuilder, int applicationId) { + if (standardBuilder.getEntryServiceId() == 0 && StringUtils.isNotEmpty(standardBuilder.getEntryServiceName())) { + int entryServiceId = ServiceIdCache.get(InstanceCache.get(standardBuilder.getEntryApplicationInstanceId()), standardBuilder.getEntryServiceName()); + if (entryServiceId == 0) { + return false; + } else { + standardBuilder.toBuilder(); + standardBuilder.setEntryServiceId(entryServiceId); + standardBuilder.setEntryServiceName(Const.EMPTY_STRING); + } + } + + if (standardBuilder.getParentServiceId() == 0 && StringUtils.isNotEmpty(standardBuilder.getParentServiceName())) { + int parentServiceId = ServiceIdCache.get(InstanceCache.get(standardBuilder.getParentApplicationInstanceId()), standardBuilder.getParentServiceName()); + if (parentServiceId == 0) { + return false; + } else { + standardBuilder.toBuilder(); + standardBuilder.setParentServiceId(parentServiceId); + standardBuilder.setParentServiceName(Const.EMPTY_STRING); + } + } + + if (standardBuilder.getNetworkAddressId() == 0 && StringUtils.isNotEmpty(standardBuilder.getNetworkAddress())) { + int networkAddressId = ApplicationCache.get(standardBuilder.getNetworkAddress()); + if (networkAddressId == 0) { + return false; + } else { + standardBuilder.toBuilder(); + standardBuilder.setNetworkAddressId(networkAddressId); + standardBuilder.setNetworkAddress(Const.EMPTY_STRING); + } + } + return true; + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SegmentDecorator.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SegmentDecorator.java new file mode 100644 index 000000000..ca10618cd --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SegmentDecorator.java @@ -0,0 +1,86 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.agentstream.worker.segment.standardization; + +import org.skywalking.apm.network.proto.TraceSegmentObject; +import org.skywalking.apm.network.proto.UniqueId; + +/** + * @author pengys5 + */ +public class SegmentDecorator implements StandardBuilder { + private boolean isOrigin = true; + private final TraceSegmentObject segmentObject; + private TraceSegmentObject.Builder segmentBuilder; + + public SegmentDecorator(TraceSegmentObject segmentObject) { + this.segmentObject = segmentObject; + } + + public int getApplicationId() { + return segmentObject.getApplicationId(); + } + + public int getApplicationInstanceId() { + return segmentObject.getApplicationInstanceId(); + } + + public UniqueId getTraceSegmentId() { + return segmentObject.getTraceSegmentId(); + } + + public int getSpansCount() { + return segmentObject.getSpansCount(); + } + + public SpanDecorator getSpans(int index) { + if (isOrigin) { + return new SpanDecorator(segmentObject.getSpans(index), this); + } else { + return new SpanDecorator(segmentBuilder.getSpansBuilder(index), this); + } + } + + public int getRefsCount() { + return segmentObject.getRefsCount(); + } + + public ReferenceDecorator getRefs(int index) { + if (isOrigin) { + return new ReferenceDecorator(segmentObject.getRefs(index), this); + } else { + return new ReferenceDecorator(segmentBuilder.getRefsBuilder(index), this); + } + } + + public byte[] toByteArray() { + if (isOrigin) { + return segmentObject.toByteArray(); + } else { + return segmentBuilder.build().toByteArray(); + } + } + + @Override public void toBuilder() { + if (!isOrigin) { + this.isOrigin = false; + this.segmentBuilder = segmentObject.toBuilder(); + } + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SegmentStandardizationWorker.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SegmentStandardizationWorker.java new file mode 100644 index 000000000..c46d59c66 --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SegmentStandardizationWorker.java @@ -0,0 +1,98 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.agentstream.worker.segment.standardization; + +import org.skywalking.apm.collector.agentstream.worker.segment.buffer.SegmentBufferManager; +import org.skywalking.apm.collector.core.queue.EndOfBatchCommand; +import org.skywalking.apm.collector.storage.define.DataDefine; +import org.skywalking.apm.collector.stream.worker.AbstractLocalAsyncWorker; +import org.skywalking.apm.collector.stream.worker.AbstractLocalAsyncWorkerProvider; +import org.skywalking.apm.collector.stream.worker.ClusterWorkerContext; +import org.skywalking.apm.collector.stream.worker.ProviderNotFoundException; +import org.skywalking.apm.collector.stream.worker.Role; +import org.skywalking.apm.collector.stream.worker.WorkerException; +import org.skywalking.apm.collector.stream.worker.impl.FlushAndSwitch; +import org.skywalking.apm.collector.stream.worker.selector.ForeverFirstSelector; +import org.skywalking.apm.collector.stream.worker.selector.WorkerSelector; +import org.skywalking.apm.network.proto.UpstreamSegment; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public class SegmentStandardizationWorker extends AbstractLocalAsyncWorker { + + private final Logger logger = LoggerFactory.getLogger(SegmentStandardizationWorker.class); + + public SegmentStandardizationWorker(Role role, ClusterWorkerContext clusterContext) { + super(role, clusterContext); + } + + @Override public void preStart() throws ProviderNotFoundException { + super.preStart(); + SegmentBufferManager.INSTANCE.initialize(); + } + + @Override protected void onWork(Object message) throws WorkerException { + if (message instanceof FlushAndSwitch) { + SegmentBufferManager.INSTANCE.flush(); + } else if (message instanceof EndOfBatchCommand) { + } else if (message instanceof UpstreamSegment) { + UpstreamSegment upstreamSegment = (UpstreamSegment)message; + SegmentBufferManager.INSTANCE.writeBuffer(upstreamSegment); + } else { + logger.error("unhandled message, message instance must UpstreamSegment, but is %s", message.getClass().toString()); + } + } + + public static class Factory extends AbstractLocalAsyncWorkerProvider { + @Override + public Role role() { + return SegmentStandardizationWorker.WorkerRole.INSTANCE; + } + + @Override + public SegmentStandardizationWorker workerInstance(ClusterWorkerContext clusterContext) { + return new SegmentStandardizationWorker(role(), clusterContext); + } + + @Override public int queueSize() { + return 1024; + } + } + + public enum WorkerRole implements Role { + INSTANCE; + + @Override + public String roleName() { + return SegmentStandardizationWorker.class.getSimpleName(); + } + + @Override + public WorkerSelector workerSelector() { + return new ForeverFirstSelector(); + } + + @Override public DataDefine dataDefine() { + return null; + } + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SpanDecorator.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SpanDecorator.java new file mode 100644 index 000000000..08319ea3e --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SpanDecorator.java @@ -0,0 +1,202 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.agentstream.worker.segment.standardization; + +import org.skywalking.apm.network.proto.SpanLayer; +import org.skywalking.apm.network.proto.SpanObject; +import org.skywalking.apm.network.proto.SpanType; + +/** + * @author pengys5 + */ +public class SpanDecorator implements StandardBuilder { + private boolean isOrigin = true; + private StandardBuilder standardBuilder; + private SpanObject spanObject; + private SpanObject.Builder spanBuilder; + + public SpanDecorator(SpanObject spanObject, StandardBuilder standardBuilder) { + this.spanObject = spanObject; + this.standardBuilder = standardBuilder; + } + + public SpanDecorator(SpanObject.Builder spanBuilder, StandardBuilder standardBuilder) { + this.spanBuilder = spanBuilder; + this.standardBuilder = standardBuilder; + this.isOrigin = false; + } + + public int getSpanId() { + if (isOrigin) { + return spanObject.getSpanId(); + } else { + return spanBuilder.getSpanId(); + } + } + + public int getParentSpanId() { + if (isOrigin) { + return spanObject.getParentSpanId(); + } else { + return spanBuilder.getParentSpanId(); + } + } + + public SpanType getSpanType() { + if (isOrigin) { + return spanObject.getSpanType(); + } else { + return spanBuilder.getSpanType(); + } + } + + public int getSpanTypeValue() { + if (isOrigin) { + return spanObject.getSpanTypeValue(); + } else { + return spanBuilder.getSpanTypeValue(); + } + } + + public SpanLayer getSpanLayer() { + if (isOrigin) { + return spanObject.getSpanLayer(); + } else { + return spanBuilder.getSpanLayer(); + } + } + + public int getSpanLayerValue() { + if (isOrigin) { + return spanObject.getSpanLayerValue(); + } else { + return spanBuilder.getSpanLayerValue(); + } + } + + public long getStartTime() { + if (isOrigin) { + return spanObject.getStartTime(); + } else { + return spanBuilder.getStartTime(); + } + } + + public long getEndTime() { + if (isOrigin) { + return spanObject.getEndTime(); + } else { + return spanBuilder.getEndTime(); + } + } + + public int getComponentId() { + if (isOrigin) { + return spanObject.getComponentId(); + } else { + return spanBuilder.getComponentId(); + } + } + + public String getComponent() { + if (isOrigin) { + return spanObject.getComponent(); + } else { + return spanBuilder.getComponent(); + } + } + + public int getPeerId() { + if (isOrigin) { + return spanObject.getPeerId(); + } else { + return spanBuilder.getPeerId(); + } + } + + public void setPeerId(int peerId) { + if (isOrigin) { + toBuilder(); + } else { + spanBuilder.setPeerId(peerId); + } + } + + public String getPeer() { + if (isOrigin) { + return spanObject.getPeer(); + } else { + return spanBuilder.getPeer(); + } + } + + public void setPeer(String peer) { + if (isOrigin) { + toBuilder(); + } else { + spanBuilder.setPeer(peer); + } + } + + public int getOperationNameId() { + if (isOrigin) { + return spanObject.getOperationNameId(); + } else { + return spanBuilder.getOperationNameId(); + } + } + + public void setOperationNameId(int value) { + if (isOrigin) { + toBuilder(); + } else { + spanBuilder.setOperationNameId(value); + } + } + + public String getOperationName() { + if (isOrigin) { + return spanObject.getOperationName(); + } else { + return spanBuilder.getOperationName(); + } + } + + public void setOperationName(String value) { + if (isOrigin) { + toBuilder(); + } else { + spanBuilder.setOperationName(value); + } + } + + public boolean getIsError() { + if (isOrigin) { + return spanObject.getIsError(); + } else { + return spanBuilder.getIsError(); + } + } + + @Override public void toBuilder() { + this.isOrigin = false; + spanBuilder = spanObject.toBuilder(); + standardBuilder.toBuilder(); + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SpanIdExchanger.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SpanIdExchanger.java new file mode 100644 index 000000000..2ab1c056f --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SpanIdExchanger.java @@ -0,0 +1,64 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.agentstream.worker.segment.standardization; + +import org.skywalking.apm.collector.cache.ApplicationCache; +import org.skywalking.apm.collector.cache.ServiceIdCache; +import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.core.util.StringUtils; + +/** + * @author pengys5 + */ +public class SpanIdExchanger implements IdExchanger { + + private static SpanIdExchanger exchanger; + + public static SpanIdExchanger getInstance() { + if (exchanger == null) { + exchanger = new SpanIdExchanger(); + } + return exchanger; + } + + @Override public boolean exchange(SpanDecorator standardBuilder, int applicationId) { + if (standardBuilder.getPeerId() == 0 && StringUtils.isNotEmpty(standardBuilder.getPeer())) { + int peerId = ApplicationCache.get(standardBuilder.getPeer()); + if (peerId == 0) { + return false; + } else { + standardBuilder.toBuilder(); + standardBuilder.setPeerId(peerId); + standardBuilder.setPeer(Const.EMPTY_STRING); + } + } + + if (standardBuilder.getOperationNameId() == 0 && StringUtils.isNotEmpty(standardBuilder.getOperationName())) { + int operationNameId = ServiceIdCache.get(applicationId, standardBuilder.getOperationName()); + if (operationNameId == 0) { + return false; + } else { + standardBuilder.toBuilder(); + standardBuilder.setOperationNameId(operationNameId); + standardBuilder.setOperationName(Const.EMPTY_STRING); + } + } + return true; + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/StandardBuilder.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/StandardBuilder.java new file mode 100644 index 000000000..2ab7eb43f --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/StandardBuilder.java @@ -0,0 +1,26 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.agentstream.worker.segment.standardization; + +/** + * @author pengys5 + */ +public interface StandardBuilder { + void toBuilder(); +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java index b5ba0add2..b33b2ffc0 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java @@ -21,7 +21,8 @@ package org.skywalking.apm.collector.agentstream.worker.service.entry; import org.skywalking.apm.collector.agentstream.worker.segment.EntrySpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.RefsListener; -import org.skywalking.apm.collector.cache.ServiceNameCache; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.ReferenceDecorator; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.TimeBucketUtils; @@ -30,8 +31,6 @@ import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; import org.skywalking.apm.collector.stream.worker.WorkerNotFoundException; -import org.skywalking.apm.network.proto.SpanObject; -import org.skywalking.apm.network.proto.TraceSegmentReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,29 +45,25 @@ public class ServiceEntrySpanListener implements RefsListener, FirstSpanListener private boolean hasReference = false; private int applicationId; private int entryServiceId; - private String entryServiceName; private boolean hasEntry = false; @Override - public void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { + public void parseEntry(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, + String segmentId) { this.applicationId = applicationId; - this.entryServiceId = spanObject.getOperationNameId(); - if (spanObject.getOperationNameId() == 0) { - this.entryServiceName = spanObject.getOperationName(); - } else { - this.entryServiceName = ServiceNameCache.get(this.entryServiceId); - } + this.entryServiceId = spanDecorator.getOperationNameId(); this.hasEntry = true; } - @Override public void parseRef(TraceSegmentReference reference, int applicationId, int applicationInstanceId, + @Override public void parseRef(ReferenceDecorator referenceDecorator, int applicationId, int applicationInstanceId, String segmentId) { hasReference = true; } @Override - public void parseFirst(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime()); + public void parseFirst(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, + String segmentId) { + timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime()); } @Override public void build() { @@ -76,10 +71,9 @@ public class ServiceEntrySpanListener implements RefsListener, FirstSpanListener StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME); if (!hasReference && hasEntry) { ServiceEntryDataDefine.ServiceEntry serviceEntry = new ServiceEntryDataDefine.ServiceEntry(); - serviceEntry.setId(applicationId + Const.ID_SPLIT + entryServiceName); + serviceEntry.setId(applicationId + Const.ID_SPLIT + entryServiceId); serviceEntry.setApplicationId(applicationId); serviceEntry.setEntryServiceId(entryServiceId); - serviceEntry.setEntryServiceName(entryServiceName); serviceEntry.setRegisterTime(timeBucket); serviceEntry.setNewestTime(timeBucket); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java index 421b2b379..d75d55c31 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java @@ -23,7 +23,8 @@ import java.util.List; import org.skywalking.apm.collector.agentstream.worker.segment.EntrySpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.RefsListener; -import org.skywalking.apm.collector.cache.InstanceCache; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.ReferenceDecorator; +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.TimeBucketUtils; @@ -32,8 +33,6 @@ import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; import org.skywalking.apm.collector.stream.worker.WorkerNotFoundException; -import org.skywalking.apm.network.proto.SpanObject; -import org.skywalking.apm.network.proto.TraceSegmentReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,9 +43,8 @@ public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpa private final Logger logger = LoggerFactory.getLogger(ServiceReferenceSpanListener.class); - private List referenceServices = new LinkedList<>(); + private List referenceServices = new LinkedList<>(); private int serviceId = 0; - private String serviceName = ""; private long startTime = 0; private long endTime = 0; private boolean isError = false; @@ -54,26 +52,23 @@ public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpa private boolean hasEntry = false; @Override - public void parseFirst(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime()); + public void parseFirst(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, + String segmentId) { + timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime()); } - @Override public void parseRef(TraceSegmentReference reference, int applicationId, int applicationInstanceId, + @Override public void parseRef(ReferenceDecorator referenceDecorator, int applicationId, int applicationInstanceId, String segmentId) { - referenceServices.add(reference); + referenceServices.add(referenceDecorator); } @Override - public void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - serviceId = spanObject.getOperationNameId(); - if (spanObject.getOperationNameId() == 0) { - serviceName = String.valueOf(applicationId) + Const.ID_SPLIT + spanObject.getOperationName(); - } else { - serviceName = Const.EMPTY_STRING; - } - startTime = spanObject.getStartTime(); - endTime = spanObject.getEndTime(); - isError = spanObject.getIsError(); + public void parseEntry(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, + String segmentId) { + serviceId = spanDecorator.getOperationNameId(); + startTime = spanDecorator.getStartTime(); + endTime = spanDecorator.getEndTime(); + isError = spanDecorator.getIsError(); this.hasEntry = true; } @@ -105,71 +100,39 @@ public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpa referenceServices.forEach(reference -> { ServiceReferenceDataDefine.ServiceReference serviceReference = new ServiceReferenceDataDefine.ServiceReference(); int entryServiceId = reference.getEntryServiceId(); - String entryServiceName = buildServiceName(reference.getEntryApplicationInstanceId(), reference.getEntryServiceId(), reference.getEntryServiceName()); - int frontServiceId = reference.getParentServiceId(); - String frontServiceName = buildServiceName(reference.getParentApplicationInstanceId(), reference.getParentServiceId(), reference.getParentServiceName()); - int behindServiceId = serviceId; - String behindServiceName = serviceName; - calculateCost(serviceReference, startTime, endTime, isError); - logger.debug("has reference, entryServiceId: {}, entryServiceName: {}", entryServiceId, entryServiceName); - sendToAggregationWorker(context, serviceReference, entryServiceId, entryServiceName, frontServiceId, frontServiceName, behindServiceId, behindServiceName); + logger.debug("has reference, entryServiceId: {}", entryServiceId); + sendToAggregationWorker(context, serviceReference, entryServiceId, frontServiceId, behindServiceId); }); } else { ServiceReferenceDataDefine.ServiceReference serviceReference = new ServiceReferenceDataDefine.ServiceReference(); int entryServiceId = serviceId; - String entryServiceName = serviceName; - int frontServiceId = Const.NONE_SERVICE_ID; - String frontServiceName = Const.EMPTY_STRING; - int behindServiceId = serviceId; - String behindServiceName = serviceName; calculateCost(serviceReference, startTime, endTime, isError); - sendToAggregationWorker(context, serviceReference, entryServiceId, entryServiceName, frontServiceId, frontServiceName, behindServiceId, behindServiceName); + sendToAggregationWorker(context, serviceReference, entryServiceId, frontServiceId, behindServiceId); } } } private void sendToAggregationWorker(StreamModuleContext context, - ServiceReferenceDataDefine.ServiceReference serviceReference, int entryServiceId, String entryServiceName, - int frontServiceId, String frontServiceName, int behindServiceId, String behindServiceName) { - + ServiceReferenceDataDefine.ServiceReference serviceReference, int entryServiceId, int frontServiceId, + int behindServiceId) { StringBuilder idBuilder = new StringBuilder(); idBuilder.append(timeBucket).append(Const.ID_SPLIT); - if (entryServiceId == 0) { - idBuilder.append(entryServiceName).append(Const.ID_SPLIT); - serviceReference.setEntryServiceId(0); - serviceReference.setEntryServiceName(entryServiceName); - } else { - idBuilder.append(entryServiceId).append(Const.ID_SPLIT); - serviceReference.setEntryServiceId(entryServiceId); - serviceReference.setEntryServiceName(Const.EMPTY_STRING); - } - if (frontServiceId == 0) { - idBuilder.append(frontServiceName).append(Const.ID_SPLIT); - serviceReference.setFrontServiceId(0); - serviceReference.setFrontServiceName(frontServiceName); - } else { - idBuilder.append(frontServiceId).append(Const.ID_SPLIT); - serviceReference.setFrontServiceId(frontServiceId); - serviceReference.setFrontServiceName(Const.EMPTY_STRING); - } + idBuilder.append(entryServiceId).append(Const.ID_SPLIT); + serviceReference.setEntryServiceId(entryServiceId); - if (behindServiceId == 0) { - idBuilder.append(behindServiceName); - serviceReference.setBehindServiceId(0); - serviceReference.setBehindServiceName(behindServiceName); - } else { - idBuilder.append(behindServiceId); - serviceReference.setBehindServiceId(behindServiceId); - serviceReference.setBehindServiceName(Const.EMPTY_STRING); - } + idBuilder.append(frontServiceId).append(Const.ID_SPLIT); + serviceReference.setFrontServiceId(frontServiceId); + + idBuilder.append(behindServiceId); + serviceReference.setBehindServiceId(behindServiceId); serviceReference.setId(idBuilder.toString()); serviceReference.setTimeBucket(timeBucket); @@ -180,13 +143,4 @@ public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpa logger.error(e.getMessage(), e); } } - - private String buildServiceName(int instanceId, int serviceId, String serviceName) { - if (serviceId == 0) { - int applicationId = InstanceCache.get(instanceId); - return String.valueOf(applicationId) + Const.ID_SPLIT + serviceName; - } else { - return Const.EMPTY_STRING; - } - } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/util/FileUtils.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/util/FileUtils.java new file mode 100644 index 000000000..ab70f6288 --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/util/FileUtils.java @@ -0,0 +1,89 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.agentstream.worker.util; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.RandomAccessFile; +import org.skywalking.apm.collector.core.util.Const; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public enum FileUtils { + INSTANCE; + + private final Logger logger = LoggerFactory.getLogger(FileUtils.class); + + public String readLastLine(File file) { + RandomAccessFile randomAccessFile = null; + try { + randomAccessFile = new RandomAccessFile(file, "r"); + long length = randomAccessFile.length(); + if (length == 0) { + return Const.EMPTY_STRING; + } else { + long position = length - 1; + randomAccessFile.seek(position); + while (position >= 0) { + if (randomAccessFile.read() == '\n') { + return randomAccessFile.readLine(); + } + randomAccessFile.seek(position); + if (position == 0) { + return randomAccessFile.readLine(); + } + position--; + } + } + } catch (IOException e) { + logger.error(e.getMessage(), e); + } finally { + if (randomAccessFile != null) { + try { + randomAccessFile.close(); + } catch (IOException e) { + logger.error(e.getMessage(), e); + } + } + } + return Const.EMPTY_STRING; + } + + public void writeAppendToLast(File file, RandomAccessFile randomAccessFile, String value) { + if (randomAccessFile == null) { + try { + randomAccessFile = new RandomAccessFile(file, "rwd"); + } catch (FileNotFoundException e) { + logger.error(e.getMessage(), e); + } + } + try { + long length = randomAccessFile.length(); + randomAccessFile.seek(length); + randomAccessFile.writeBytes(System.lineSeparator()); + randomAccessFile.writeBytes(value); + } catch (IOException e) { + logger.error(e.getMessage(), e); + } + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/local_worker_provider.define b/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/local_worker_provider.define index 638630fa1..465adeac2 100644 --- a/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/local_worker_provider.define +++ b/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/local_worker_provider.define @@ -15,6 +15,8 @@ org.skywalking.apm.collector.agentstream.worker.serviceref.ServiceReferencePersi org.skywalking.apm.collector.agentstream.worker.segment.origin.SegmentPersistenceWorker$Factory org.skywalking.apm.collector.agentstream.worker.segment.cost.SegmentCostPersistenceWorker$Factory +org.skywalking.apm.collector.agentstream.worker.segment.standardization.SegmentStandardizationWorker$Factory + org.skywalking.apm.collector.agentstream.worker.global.GlobalTracePersistenceWorker$Factory org.skywalking.apm.collector.agentstream.worker.instance.performance.InstPerformancePersistenceWorker$Factory \ No newline at end of file diff --git a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/grpc/handler/TraceSegmentServiceHandlerTestCase.java b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/grpc/handler/TraceSegmentServiceHandlerTestCase.java index 30bb96150..e23634e30 100644 --- a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/grpc/handler/TraceSegmentServiceHandlerTestCase.java +++ b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/grpc/handler/TraceSegmentServiceHandlerTestCase.java @@ -21,6 +21,7 @@ package org.skywalking.apm.collector.agentstream.grpc.handler; import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; import io.grpc.stub.StreamObserver; +import org.junit.Test; import org.skywalking.apm.network.proto.Downstream; import org.skywalking.apm.network.proto.KeyWithStringValue; import org.skywalking.apm.network.proto.LogMessage; @@ -45,6 +46,7 @@ public class TraceSegmentServiceHandlerTestCase { private TraceSegmentServiceGrpc.TraceSegmentServiceStub stub; + @Test public void testCollect() { ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 11800).usePlaintext(true).build(); stub = TraceSegmentServiceGrpc.newStub(channel); @@ -70,7 +72,7 @@ public class TraceSegmentServiceHandlerTestCase { streamObserver.onCompleted(); try { - Thread.sleep(30000); + Thread.sleep(10000); } catch (InterruptedException e) { } } diff --git a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java index 3c6b63dc6..37217f203 100644 --- a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java +++ b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java @@ -60,6 +60,8 @@ public class SegmentPost { applicationEsDAO.save(consumerApplication); ApplicationDataDefine.Application providerApplication = new ApplicationDataDefine.Application("3", "dubbox-provider", 3); applicationEsDAO.save(providerApplication); +// ApplicationDataDefine.Application peer = new ApplicationDataDefine.Application("4", "172.25.0.4:20880", 4); +// applicationEsDAO.save(peer); ServiceNameEsDAO serviceNameEsDAO = new ServiceNameEsDAO(); serviceNameEsDAO.setClient(client); @@ -84,6 +86,7 @@ public class SegmentPost { DIFF = 0; Thread.sleep(1000); + break; } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/util/ExchangeMarkUtils.java b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManagerTestCase.java similarity index 76% rename from apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/util/ExchangeMarkUtils.java rename to apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManagerTestCase.java index e67314a79..36cb156ac 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/util/ExchangeMarkUtils.java +++ b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManagerTestCase.java @@ -16,17 +16,16 @@ * Project repository: https://github.com/OpenSkywalking/skywalking */ -package org.skywalking.apm.collector.agentstream.worker.util; +package org.skywalking.apm.collector.agentstream.worker.segment.buffer; + +import org.junit.Test; /** * @author pengys5 */ -public enum ExchangeMarkUtils { - INSTANCE; +public class OffsetManagerTestCase { - private static final String MARK_TAG = "M"; - - public String buildMarkedID(int id) { - return MARK_TAG + id; + @Test + public void test() { } } diff --git a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferWriteWorkerTestCase.java b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferWriteWorkerTestCase.java new file mode 100644 index 000000000..bb7331059 --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferWriteWorkerTestCase.java @@ -0,0 +1,95 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.agentstream.worker.segment.buffer; + +import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SegmentStandardizationWorker; +import org.skywalking.apm.collector.stream.worker.ProviderNotFoundException; +import org.skywalking.apm.collector.stream.worker.WorkerException; +import org.skywalking.apm.network.proto.SpanLayer; +import org.skywalking.apm.network.proto.SpanObject; +import org.skywalking.apm.network.proto.SpanType; +import org.skywalking.apm.network.proto.TraceSegmentObject; +import org.skywalking.apm.network.proto.UniqueId; +import org.skywalking.apm.network.proto.UpstreamSegment; +import org.skywalking.apm.network.trace.component.ComponentsDefine; + +/** + * @author pengys5 + */ +public class SegmentBufferWriteWorkerTestCase { + + public static void main(String[] args) throws WorkerException, ProviderNotFoundException { + SegmentBufferConfig.BUFFER_PATH = "/Users/pengys5/code/sky-walking/sky-walking/apm-collector/buffer/"; + + SegmentStandardizationWorker worker = new SegmentStandardizationWorker(null, null); + worker.preStart(); + worker.allocateJob(buildSegment()); + worker.allocateJob(buildSegment()); + worker.allocateJob(buildSegment()); + worker.allocateJob(buildSegment()); + worker.allocateJob(buildSegment()); + } + + private static UpstreamSegment buildSegment() { + long now = System.currentTimeMillis(); + + int id = 1; + UniqueId.Builder builder = UniqueId.newBuilder(); + builder.addIdParts(id); + builder.addIdParts(id); + builder.addIdParts(id); + UniqueId segmentId = builder.build(); + + UpstreamSegment.Builder upstream = UpstreamSegment.newBuilder(); + upstream.addGlobalTraceIds(segmentId); + + TraceSegmentObject.Builder segmentBuilder = TraceSegmentObject.newBuilder(); + segmentBuilder.setApplicationId(1); + segmentBuilder.setApplicationInstanceId(1); + segmentBuilder.setTraceSegmentId(segmentId); + + SpanObject.Builder entrySpan = SpanObject.newBuilder(); + entrySpan.setSpanId(0); + entrySpan.setSpanType(SpanType.Entry); + entrySpan.setSpanLayer(SpanLayer.Http); + entrySpan.setParentSpanId(-1); + entrySpan.setStartTime(now); + entrySpan.setEndTime(now + 3000); + entrySpan.setComponentId(ComponentsDefine.TOMCAT.getId()); + entrySpan.setOperationNameId(1); + entrySpan.setIsError(false); + segmentBuilder.addSpans(entrySpan); + + SpanObject.Builder exitSpan = SpanObject.newBuilder(); + exitSpan.setSpanId(1); + exitSpan.setSpanType(SpanType.Exit); + exitSpan.setSpanLayer(SpanLayer.Database); + exitSpan.setParentSpanId(0); + exitSpan.setStartTime(now); + exitSpan.setEndTime(now + 3000); + exitSpan.setComponentId(ComponentsDefine.MONGODB.getId()); + exitSpan.setOperationNameId(2); + exitSpan.setIsError(false); + exitSpan.setPeer("localhost:8888"); + segmentBuilder.addSpans(exitSpan); + + upstream.setSegment(segmentBuilder.build().toByteString()); + return upstream.build(); + } +} diff --git a/apm-collector/apm-collector-agentstream/src/test/resources/log4j2.xml b/apm-collector/apm-collector-agentstream/src/test/resources/log4j2.xml new file mode 100644 index 000000000..d36a4408f --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/test/resources/log4j2.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + diff --git a/apm-collector/apm-collector-boot/src/main/java/org/skywalking/apm/collector/boot/CollectorBootStartUp.java b/apm-collector/apm-collector-boot/src/main/java/org/skywalking/apm/collector/boot/CollectorBootStartUp.java index d003e210f..c7cf02009 100644 --- a/apm-collector/apm-collector-boot/src/main/java/org/skywalking/apm/collector/boot/CollectorBootStartUp.java +++ b/apm-collector/apm-collector-boot/src/main/java/org/skywalking/apm/collector/boot/CollectorBootStartUp.java @@ -19,6 +19,7 @@ package org.skywalking.apm.collector.boot; import org.skywalking.apm.collector.core.CollectorException; +import org.skywalking.apm.collector.core.config.SystemConfigParser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -31,6 +32,7 @@ public class CollectorBootStartUp { public static void main(String[] args) throws CollectorException { logger.info("collector starting..."); + SystemConfigParser.INSTANCE.parse(); CollectorStarter starter = new CollectorStarter(); starter.start(); logger.info("collector start successful."); diff --git a/apm-collector/apm-collector-boot/src/main/java/org/skywalking/apm/collector/boot/CollectorStarter.java b/apm-collector/apm-collector-boot/src/main/java/org/skywalking/apm/collector/boot/CollectorStarter.java index afc1f0cd3..6af1db391 100644 --- a/apm-collector/apm-collector-boot/src/main/java/org/skywalking/apm/collector/boot/CollectorStarter.java +++ b/apm-collector/apm-collector-boot/src/main/java/org/skywalking/apm/collector/boot/CollectorStarter.java @@ -53,6 +53,9 @@ public class CollectorStarter implements Starter { ServerHolder serverHolder = new ServerHolder(); for (ModuleGroupDefine moduleGroupDefine : moduleGroupDefineMap.values()) { + if (moduleGroupDefine.groupConfigParser() != null) { + moduleGroupDefine.groupConfigParser().parse(configuration.get(moduleGroupDefine.name())); + } moduleGroupDefine.moduleInstaller().injectConfiguration(configuration.get(moduleGroupDefine.name()), moduleDefineMap.get(moduleGroupDefine.name())); moduleGroupDefine.moduleInstaller().injectServerHolder(serverHolder); moduleGroupDefine.moduleInstaller().preInstall(); diff --git a/apm-collector/apm-collector-boot/src/main/resources/application.yml b/apm-collector/apm-collector-boot/src/main/resources/application.yml index c9e94f239..18014b05d 100644 --- a/apm-collector/apm-collector-boot/src/main/resources/application.yml +++ b/apm-collector/apm-collector-boot/src/main/resources/application.yml @@ -15,6 +15,9 @@ agent_stream: host: localhost port: 12800 context_path: / + config: + buffer_offset_max_file_size: 1k + buffer_segment_max_file_size: 10k ui: jetty: host: localhost diff --git a/apm-collector/apm-collector-boot/src/main/resources/log4j2.xml b/apm-collector/apm-collector-boot/src/main/resources/log4j2.xml index 16e66109e..a79b45677 100644 --- a/apm-collector/apm-collector-boot/src/main/resources/log4j2.xml +++ b/apm-collector/apm-collector-boot/src/main/resources/log4j2.xml @@ -17,7 +17,7 @@ ~ Project repository: https://github.com/OpenSkywalking/skywalking --> - + @@ -27,7 +27,8 @@ - + + diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ApplicationCache.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ApplicationCache.java index 0dade5deb..8bf3476ad 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ApplicationCache.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ApplicationCache.java @@ -22,28 +22,31 @@ import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import org.skywalking.apm.collector.cache.dao.IApplicationDAO; import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.dao.DAOContainer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author pengys5 */ public class ApplicationCache { + private static final Logger logger = LoggerFactory.getLogger(ApplicationCache.class); + private static Cache CODE_CACHE = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(1000).build(); public static int get(String applicationCode) { + IApplicationDAO dao = (IApplicationDAO)DAOContainer.INSTANCE.get(IApplicationDAO.class.getName()); + int applicationId = 0; try { - applicationId = CODE_CACHE.get(applicationCode, () -> { - IApplicationDAO dao = (IApplicationDAO)DAOContainer.INSTANCE.get(IApplicationDAO.class.getName()); - return dao.getApplicationId(applicationCode); - }); + applicationId = CODE_CACHE.get(applicationCode, () -> dao.getApplicationId(applicationCode)); } catch (Throwable e) { - return applicationId; + logger.error(e.getMessage(), e); } if (applicationId == 0) { - IApplicationDAO dao = (IApplicationDAO)DAOContainer.INSTANCE.get(IApplicationDAO.class.getName()); applicationId = dao.getApplicationId(applicationCode); if (applicationId != 0) { CODE_CACHE.put(applicationCode, applicationId); @@ -55,22 +58,20 @@ public class ApplicationCache { private static Cache ID_CACHE = CacheBuilder.newBuilder().maximumSize(1000).build(); public static String get(int applicationId) { - try { - return ID_CACHE.get(applicationId, () -> { - IApplicationDAO dao = (IApplicationDAO)DAOContainer.INSTANCE.get(IApplicationDAO.class.getName()); - return dao.getApplicationCode(applicationId); - }); - } catch (Throwable e) { - return Const.EXCEPTION; - } - } + IApplicationDAO dao = (IApplicationDAO)DAOContainer.INSTANCE.get(IApplicationDAO.class.getName()); - public static String getForUI(int applicationId) { - String applicationCode = get(applicationId); - if (applicationCode.equals("Unknown")) { - IApplicationDAO dao = (IApplicationDAO)DAOContainer.INSTANCE.get(IApplicationDAO.class.getName()); + String applicationCode = Const.EMPTY_STRING; + try { + applicationCode = ID_CACHE.get(applicationId, () -> dao.getApplicationCode(applicationId)); + } catch (Throwable e) { + logger.error(e.getMessage(), e); + } + + if (StringUtils.isEmpty(applicationCode)) { applicationCode = dao.getApplicationCode(applicationId); - ID_CACHE.put(applicationId, applicationCode); + if (StringUtils.isNotEmpty(applicationCode)) { + CODE_CACHE.put(applicationCode, applicationId); + } } return applicationCode; } diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/InstanceCache.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/InstanceCache.java index b1010ca94..92511a268 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/InstanceCache.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/InstanceCache.java @@ -22,22 +22,34 @@ import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import org.skywalking.apm.collector.cache.dao.IInstanceDAO; import org.skywalking.apm.collector.storage.dao.DAOContainer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author pengys5 */ public class InstanceCache { - private static Cache CACHE = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(5000).build(); + private static final Logger logger = LoggerFactory.getLogger(InstanceCache.class); + + private static Cache INSTANCE_CACHE = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(5000).build(); public static int get(int applicationInstanceId) { + IInstanceDAO dao = (IInstanceDAO)DAOContainer.INSTANCE.get(IInstanceDAO.class.getName()); + + int applicationId = 0; try { - return CACHE.get(applicationInstanceId, () -> { - IInstanceDAO dao = (IInstanceDAO)DAOContainer.INSTANCE.get(IInstanceDAO.class.getName()); - return dao.getApplicationId(applicationInstanceId); - }); + applicationId = INSTANCE_CACHE.get(applicationInstanceId, () -> dao.getApplicationId(applicationInstanceId)); } catch (Throwable e) { - return 0; + logger.error(e.getMessage(), e); } + + if (applicationId == 0) { + applicationId = dao.getApplicationId(applicationInstanceId); + if (applicationId != 0) { + INSTANCE_CACHE.put(applicationInstanceId, applicationId); + } + } + return applicationId; } } diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceIdCache.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceIdCache.java index b7ebd4e7c..1688f5166 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceIdCache.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceIdCache.java @@ -23,32 +23,34 @@ import com.google.common.cache.CacheBuilder; import org.skywalking.apm.collector.cache.dao.IServiceNameDAO; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.storage.dao.DAOContainer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author pengys5 */ public class ServiceIdCache { + private static final Logger logger = LoggerFactory.getLogger(ServiceIdCache.class); + //TODO size configuration - private static Cache CACHE = CacheBuilder.newBuilder().maximumSize(1000).build(); + private static Cache SERVICE_CACHE = CacheBuilder.newBuilder().maximumSize(1000).build(); public static int get(int applicationId, String serviceName) { - try { - return CACHE.get(applicationId + Const.ID_SPLIT + serviceName, () -> { - IServiceNameDAO dao = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); - return dao.getServiceId(applicationId, serviceName); - }); - } catch (Throwable e) { - return 0; - } - } + IServiceNameDAO dao = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); + + int serviceId = 0; + try { + serviceId = SERVICE_CACHE.get(applicationId + Const.ID_SPLIT + serviceName, () -> dao.getServiceId(applicationId, serviceName)); + } catch (Throwable e) { + logger.error(e.getMessage(), e); + } - public static int getForUI(int applicationId, String serviceName) { - int serviceId = get(applicationId, serviceName); if (serviceId == 0) { - IServiceNameDAO dao = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); serviceId = dao.getServiceId(applicationId, serviceName); - CACHE.put(applicationId + Const.ID_SPLIT + serviceName, serviceId); + if (serviceId != 0) { + SERVICE_CACHE.put(applicationId + Const.ID_SPLIT + serviceName, serviceId); + } } return serviceId; } diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java index 0d4b7c572..1ba962f6e 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java @@ -22,34 +22,38 @@ import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import org.skywalking.apm.collector.cache.dao.IServiceNameDAO; import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.dao.DAOContainer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author pengys5 */ public class ServiceNameCache { + private static final Logger logger = LoggerFactory.getLogger(ServiceNameCache.class); + //TODO size configuration private static Cache CACHE = CacheBuilder.newBuilder().maximumSize(10000).build(); public static String get(int serviceId) { - try { - return CACHE.get(serviceId, () -> { - IServiceNameDAO dao = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); - return dao.getServiceName(serviceId); - }); - } catch (Throwable e) { - return Const.EXCEPTION; - } - } + IServiceNameDAO dao = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); - public static String getForUI(int serviceId) { - String serviceName = get(serviceId); - if (serviceName.equals("Unknown")) { - IServiceNameDAO dao = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); - serviceName = dao.getServiceName(serviceId); - CACHE.put(serviceId, serviceName); + String serviceName = Const.EMPTY_STRING; + try { + serviceName = CACHE.get(serviceId, () -> dao.getServiceName(serviceId)); + } catch (Throwable e) { + logger.error(e.getMessage(), e); } + + if (StringUtils.isEmpty(serviceName)) { + serviceName = dao.getServiceName(serviceId); + if (StringUtils.isNotEmpty(serviceName)) { + CACHE.put(serviceId, serviceName); + } + } + return serviceName; } } diff --git a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/ClusterModuleGroupDefine.java b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/ClusterModuleGroupDefine.java index 78627ed9e..0873d9677 100644 --- a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/ClusterModuleGroupDefine.java +++ b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/ClusterModuleGroupDefine.java @@ -19,6 +19,7 @@ package org.skywalking.apm.collector.cluster; import org.skywalking.apm.collector.core.cluster.ClusterModuleContext; +import org.skywalking.apm.collector.core.config.GroupConfigParser; import org.skywalking.apm.collector.core.framework.Context; import org.skywalking.apm.collector.core.module.ModuleGroupDefine; import org.skywalking.apm.collector.core.module.ModuleInstaller; @@ -46,4 +47,8 @@ public class ClusterModuleGroupDefine implements ModuleGroupDefine { @Override public ModuleInstaller moduleInstaller() { return installer; } + + @Override public GroupConfigParser groupConfigParser() { + return null; + } } diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/config/GroupConfigParser.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/config/GroupConfigParser.java new file mode 100644 index 000000000..a308c663b --- /dev/null +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/config/GroupConfigParser.java @@ -0,0 +1,30 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.core.config; + +import java.util.Map; + +/** + * @author pengys5 + */ +public interface GroupConfigParser { + String NODE_NAME = "config"; + + void parse(Map config); +} diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/config/SystemConfig.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/config/SystemConfig.java new file mode 100644 index 000000000..742b856f2 --- /dev/null +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/config/SystemConfig.java @@ -0,0 +1,26 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.core.config; + +/** + * @author pengys5 + */ +public class SystemConfig { + public static String DATA_PATH = "../data"; +} diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/config/SystemConfigParser.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/config/SystemConfigParser.java new file mode 100644 index 000000000..82aa62989 --- /dev/null +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/config/SystemConfigParser.java @@ -0,0 +1,36 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.core.config; + +import org.skywalking.apm.collector.core.util.StringUtils; + +/** + * @author pengys5 + */ +public enum SystemConfigParser { + INSTANCE; + + private static final String DATA_PATH = "data.path"; + + public void parse() { + if (!StringUtils.isEmpty(System.getProperty(DATA_PATH))) { + SystemConfig.DATA_PATH = System.getProperty(DATA_PATH); + } + } +} diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/CommonModuleInstaller.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/CommonModuleInstaller.java index e918347c0..223bd427d 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/CommonModuleInstaller.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/CommonModuleInstaller.java @@ -36,11 +36,11 @@ public abstract class CommonModuleInstaller implements ModuleInstaller { this.moduleDefineMap = moduleDefineMap; } - protected final Map getModuleConfig() { + final Map getModuleConfig() { return moduleConfig; } - protected final Map getModuleDefineMap() { + final Map getModuleDefineMap() { return moduleDefineMap; } diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleGroupDefine.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleGroupDefine.java index 739418ac2..48ed3bae3 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleGroupDefine.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleGroupDefine.java @@ -18,6 +18,7 @@ package org.skywalking.apm.collector.core.module; +import org.skywalking.apm.collector.core.config.GroupConfigParser; import org.skywalking.apm.collector.core.framework.Context; /** @@ -29,4 +30,6 @@ public interface ModuleGroupDefine { Context groupContext(); ModuleInstaller moduleInstaller(); + + GroupConfigParser groupConfigParser(); } diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/MultipleCommonModuleInstaller.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/MultipleModuleInstaller.java similarity index 95% rename from apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/MultipleCommonModuleInstaller.java rename to apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/MultipleModuleInstaller.java index ab4f3a310..89899f6ef 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/MultipleCommonModuleInstaller.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/MultipleModuleInstaller.java @@ -37,11 +37,11 @@ import org.slf4j.LoggerFactory; /** * @author pengys5 */ -public abstract class MultipleCommonModuleInstaller extends CommonModuleInstaller { +public abstract class MultipleModuleInstaller extends CommonModuleInstaller { - private final Logger logger = LoggerFactory.getLogger(MultipleCommonModuleInstaller.class); + private final Logger logger = LoggerFactory.getLogger(MultipleModuleInstaller.class); - public MultipleCommonModuleInstaller() { + public MultipleModuleInstaller() { moduleDefines = new LinkedList<>(); } diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/Const.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/Const.java index 95788cd3f..21f31856b 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/Const.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/Const.java @@ -31,4 +31,5 @@ public class Const { public static final String UNKNOWN = "Unknown"; public static final String EXCEPTION = "Exception"; public static final String EMPTY_STRING = ""; + public static final String FILE_SUFFIX = "sw"; } diff --git a/apm-collector/apm-collector-queue/src/main/java/org/skywalking/apm/collector/queue/QueueModuleGroupDefine.java b/apm-collector/apm-collector-queue/src/main/java/org/skywalking/apm/collector/queue/QueueModuleGroupDefine.java index 69b663b1b..d207e7753 100644 --- a/apm-collector/apm-collector-queue/src/main/java/org/skywalking/apm/collector/queue/QueueModuleGroupDefine.java +++ b/apm-collector/apm-collector-queue/src/main/java/org/skywalking/apm/collector/queue/QueueModuleGroupDefine.java @@ -18,6 +18,7 @@ package org.skywalking.apm.collector.queue; +import org.skywalking.apm.collector.core.config.GroupConfigParser; import org.skywalking.apm.collector.core.framework.Context; import org.skywalking.apm.collector.core.module.ModuleGroupDefine; import org.skywalking.apm.collector.core.module.ModuleInstaller; @@ -45,4 +46,8 @@ public class QueueModuleGroupDefine implements ModuleGroupDefine { @Override public ModuleInstaller moduleInstaller() { return installer; } + + @Override public GroupConfigParser groupConfigParser() { + return null; + } } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/StorageModuleGroupDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/StorageModuleGroupDefine.java index e04244f67..84731ae82 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/StorageModuleGroupDefine.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/StorageModuleGroupDefine.java @@ -18,6 +18,7 @@ package org.skywalking.apm.collector.storage; +import org.skywalking.apm.collector.core.config.GroupConfigParser; import org.skywalking.apm.collector.core.framework.Context; import org.skywalking.apm.collector.core.module.ModuleGroupDefine; import org.skywalking.apm.collector.core.module.ModuleInstaller; @@ -45,4 +46,8 @@ public class StorageModuleGroupDefine implements ModuleGroupDefine { @Override public ModuleInstaller moduleInstaller() { return installer; } + + @Override public GroupConfigParser groupConfigParser() { + return null; + } } diff --git a/apm-collector/apm-collector-stream/src/main/java/org/skywalking/apm/collector/stream/StreamModuleGroupDefine.java b/apm-collector/apm-collector-stream/src/main/java/org/skywalking/apm/collector/stream/StreamModuleGroupDefine.java index d08084dbd..dd590dd69 100644 --- a/apm-collector/apm-collector-stream/src/main/java/org/skywalking/apm/collector/stream/StreamModuleGroupDefine.java +++ b/apm-collector/apm-collector-stream/src/main/java/org/skywalking/apm/collector/stream/StreamModuleGroupDefine.java @@ -18,6 +18,7 @@ package org.skywalking.apm.collector.stream; +import org.skywalking.apm.collector.core.config.GroupConfigParser; import org.skywalking.apm.collector.core.framework.Context; import org.skywalking.apm.collector.core.module.ModuleGroupDefine; import org.skywalking.apm.collector.core.module.ModuleInstaller; @@ -45,4 +46,8 @@ public class StreamModuleGroupDefine implements ModuleGroupDefine { @Override public ModuleInstaller moduleInstaller() { return installer; } + + @Override public GroupConfigParser groupConfigParser() { + return null; + } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleGroupDefine.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleGroupDefine.java index 4bdaf092e..9ac9de5ad 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleGroupDefine.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleGroupDefine.java @@ -18,6 +18,7 @@ package org.skywalking.apm.collector.ui; +import org.skywalking.apm.collector.core.config.GroupConfigParser; import org.skywalking.apm.collector.core.framework.Context; import org.skywalking.apm.collector.core.module.ModuleGroupDefine; import org.skywalking.apm.collector.core.module.ModuleInstaller; @@ -28,10 +29,10 @@ import org.skywalking.apm.collector.core.module.ModuleInstaller; public class UIModuleGroupDefine implements ModuleGroupDefine { public static final String GROUP_NAME = "ui"; - private final UICommonModuleInstaller installer; + private final UIModuleInstaller installer; public UIModuleGroupDefine() { - installer = new UICommonModuleInstaller(); + installer = new UIModuleInstaller(); } @Override public String name() { @@ -45,4 +46,8 @@ public class UIModuleGroupDefine implements ModuleGroupDefine { @Override public ModuleInstaller moduleInstaller() { return installer; } + + @Override public GroupConfigParser groupConfigParser() { + return null; + } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UICommonModuleInstaller.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleInstaller.java similarity index 87% rename from apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UICommonModuleInstaller.java rename to apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleInstaller.java index 090a30245..19e516d6a 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UICommonModuleInstaller.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleInstaller.java @@ -20,12 +20,12 @@ package org.skywalking.apm.collector.ui; import java.util.List; import org.skywalking.apm.collector.core.framework.Context; -import org.skywalking.apm.collector.core.module.MultipleCommonModuleInstaller; +import org.skywalking.apm.collector.core.module.MultipleModuleInstaller; /** * @author pengys5 */ -public class UICommonModuleInstaller extends MultipleCommonModuleInstaller { +public class UIModuleInstaller extends MultipleModuleInstaller { @Override public String groupName() { return UIModuleGroupDefine.GROUP_NAME; diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java index 04d0c190d..4401ce9cd 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java @@ -112,7 +112,7 @@ public class InstanceEsDAO extends EsDAO implements IInstanceDAO { JsonObject application = new JsonObject(); application.addProperty("applicationId", applicationId); - application.addProperty("applicationCode", ApplicationCache.getForUI(applicationId)); + application.addProperty("applicationCode", ApplicationCache.get(applicationId)); application.addProperty("instanceCount", instanceCount.getValue()); applications.add(application); } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeComponentEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeComponentEsDAO.java index c0866c8a9..1b57d9440 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeComponentEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeComponentEsDAO.java @@ -106,7 +106,7 @@ public class NodeComponentEsDAO extends EsDAO implements INodeComponentDAO { int peerId = peerIdBucket.getKeyAsNumber().intValue(); if (peerId != 0) { - String peer = ApplicationCache.getForUI(peerId); + String peer = ApplicationCache.get(peerId); JsonObject nodeComponentObj = new JsonObject(); nodeComponentObj.addProperty("componentName", componentName); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeMappingEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeMappingEsDAO.java index 8e3c4eea3..70ee47a59 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeMappingEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeMappingEsDAO.java @@ -58,11 +58,11 @@ public class NodeMappingEsDAO extends EsDAO implements INodeMappingDAO { JsonArray nodeMappingArray = new JsonArray(); for (Terms.Bucket applicationIdBucket : applicationIdTerms.getBuckets()) { int applicationId = applicationIdBucket.getKeyAsNumber().intValue(); - String applicationCode = ApplicationCache.getForUI(applicationId); + String applicationCode = ApplicationCache.get(applicationId); Terms addressIdTerms = applicationIdBucket.getAggregations().get(NodeMappingTable.COLUMN_ADDRESS_ID); for (Terms.Bucket addressIdBucket : addressIdTerms.getBuckets()) { int addressId = addressIdBucket.getKeyAsNumber().intValue(); - String address = ApplicationCache.getForUI(addressId); + String address = ApplicationCache.get(addressId); if (addressId != 0) { JsonObject nodeMappingObj = new JsonObject(); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeReferenceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeReferenceEsDAO.java index 4599a6979..2a7f7c0d4 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeReferenceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeReferenceEsDAO.java @@ -72,13 +72,13 @@ public class NodeReferenceEsDAO extends EsDAO implements INodeReferenceDAO { Terms frontApplicationIdTerms = searchResponse.getAggregations().get(NodeReferenceTable.COLUMN_FRONT_APPLICATION_ID); for (Terms.Bucket frontApplicationIdBucket : frontApplicationIdTerms.getBuckets()) { int applicationId = frontApplicationIdBucket.getKeyAsNumber().intValue(); - String applicationCode = ApplicationCache.getForUI(applicationId); + String applicationCode = ApplicationCache.get(applicationId); Terms behindApplicationIdTerms = frontApplicationIdBucket.getAggregations().get(NodeReferenceTable.COLUMN_BEHIND_APPLICATION_ID); for (Terms.Bucket behindApplicationIdBucket : behindApplicationIdTerms.getBuckets()) { int behindApplicationId = behindApplicationIdBucket.getKeyAsNumber().intValue(); if (behindApplicationId != 0) { - String behindApplicationCode = ApplicationCache.getForUI(behindApplicationId); + String behindApplicationCode = ApplicationCache.get(behindApplicationId); Sum s1LTE = behindApplicationIdBucket.getAggregations().get(NodeReferenceTable.COLUMN_S1_LTE); Sum s3LTE = behindApplicationIdBucket.getAggregations().get(NodeReferenceTable.COLUMN_S3_LTE); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryEsDAO.java index d2ca4b451..64a20fef8 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryEsDAO.java @@ -75,7 +75,7 @@ public class ServiceEntryEsDAO extends EsDAO implements IServiceEntryDAO { for (SearchHit searchHit : searchHits.getHits()) { int applicationId = ((Number)searchHit.getSource().get(ServiceEntryTable.COLUMN_APPLICATION_ID)).intValue(); int entryServiceId = ((Number)searchHit.getSource().get(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID)).intValue(); - String applicationCode = ApplicationCache.getForUI(applicationId); + String applicationCode = ApplicationCache.get(applicationId); String entryServiceName = (String)searchHit.getSource().get(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME); JsonObject row = new JsonObject(); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java index 51c7ab034..75a4b3755 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java @@ -146,7 +146,7 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO String frontServiceName = frontServiceBucket.getKeyAsString(); if (StringUtils.isNotEmpty(frontServiceName)) { String[] serviceNames = frontServiceName.split(Const.ID_SPLIT); - int frontServiceId = ServiceIdCache.getForUI(Integer.parseInt(serviceNames[0]), serviceNames[1]); + int frontServiceId = ServiceIdCache.get(Integer.parseInt(serviceNames[0]), serviceNames[1]); parseSubAggregate(serviceReferenceMap, frontServiceBucket, frontServiceId); } } @@ -179,11 +179,11 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO Sum summary = behindServiceIdBucket.getAggregations().get(ServiceReferenceTable.COLUMN_SUMMARY); Sum costSum = behindServiceIdBucket.getAggregations().get(ServiceReferenceTable.COLUMN_COST_SUMMARY); - String frontServiceName = ServiceNameCache.getForUI(frontServiceId); + String frontServiceName = ServiceNameCache.get(frontServiceId); if (StringUtils.isNotEmpty(frontServiceName)) { frontServiceName = frontServiceName.split(Const.ID_SPLIT)[1]; } - String behindServiceName = ServiceNameCache.getForUI(behindServiceId); + String behindServiceName = ServiceNameCache.get(behindServiceId); if (StringUtils.isNotEmpty(frontServiceName)) { behindServiceName = behindServiceName.split(Const.ID_SPLIT)[1]; } @@ -216,9 +216,9 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO Sum summary = behindServiceNameBucket.getAggregations().get(ServiceReferenceTable.COLUMN_SUMMARY); Sum costSum = behindServiceNameBucket.getAggregations().get(ServiceReferenceTable.COLUMN_COST_SUMMARY); - String frontServiceName = ServiceNameCache.getForUI(frontServiceId); + String frontServiceName = ServiceNameCache.get(frontServiceId); String[] serviceNames = behindServiceName.split(Const.ID_SPLIT); - int behindServiceId = ServiceIdCache.getForUI(Integer.parseInt(serviceNames[0]), serviceNames[1]); + int behindServiceId = ServiceIdCache.get(Integer.parseInt(serviceNames[0]), serviceNames[1]); behindServiceName = serviceNames[1]; JsonObject serviceReference = new JsonObject(); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceHealthService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceHealthService.java index 3739c5b41..ef7d82c95 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceHealthService.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceHealthService.java @@ -50,7 +50,7 @@ public class InstanceHealthService { response.add("instances", instances); instanceList.forEach(instance -> { - response.addProperty("applicationCode", ApplicationCache.getForUI(applicationId)); + response.addProperty("applicationCode", ApplicationCache.get(applicationId)); response.addProperty("applicationId", applicationId); IInstPerformanceDAO instPerformanceDAO = (IInstPerformanceDAO)DAOContainer.INSTANCE.get(IInstPerformanceDAO.class.getName()); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SpanService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SpanService.java index 22decd310..4be2bad26 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SpanService.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SpanService.java @@ -96,7 +96,7 @@ public class SpanService { if (spanObject.getPeerId() == 0) { peerJson.addProperty("value", spanObject.getPeer()); } else { - peerJson.addProperty("value", ApplicationCache.getForUI(spanObject.getPeerId())); + peerJson.addProperty("value", ApplicationCache.get(spanObject.getPeerId())); } tagsArray.add(peerJson); From cdd9e88a8d89b76601852cb16ddf92746d348261 Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Thu, 19 Oct 2017 22:41:38 +0800 Subject: [PATCH 3/7] Change the method which called by H2 Dao implements. --- .../src/main/resources/application.yml | 18 +- .../apm/collector/client/h2/H2Client.java | 18 +- .../core/module/SingleModuleInstaller.java | 4 +- .../storage/StorageModuleDefine.java | 4 - .../StorageElasticSearchModuleDefine.java | 4 + .../collector/storage/h2/StorageH2Config.java | 28 --- .../storage/h2/StorageH2ConfigParser.java | 45 ---- .../storage/h2/StorageH2ModuleDefine.java | 8 +- .../ui/dao/IServiceReferenceDAO.java | 7 +- .../apm/collector/ui/dao/InstanceH2DAO.java | 24 +- .../collector/ui/dao/NodeComponentH2DAO.java | 18 +- .../collector/ui/dao/NodeMappingH2DAO.java | 19 +- .../collector/ui/dao/NodeReferenceH2DAO.java | 6 +- .../collector/ui/dao/ServiceEntryH2DAO.java | 11 +- .../ui/dao/ServiceReferenceEsDAO.java | 141 +---------- .../ui/dao/ServiceReferenceH2DAO.java | 227 ++++-------------- .../ui/service/ServiceTreeService.java | 75 +++++- 17 files changed, 196 insertions(+), 461 deletions(-) delete mode 100644 apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2Config.java delete mode 100644 apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2ConfigParser.java diff --git a/apm-collector/apm-collector-boot/src/main/resources/application.yml b/apm-collector/apm-collector-boot/src/main/resources/application.yml index 02d49d094..85021ee37 100644 --- a/apm-collector/apm-collector-boot/src/main/resources/application.yml +++ b/apm-collector/apm-collector-boot/src/main/resources/application.yml @@ -27,16 +27,10 @@ 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 \ No newline at end of file +# elasticsearch: +# cluster_name: CollectorDBCluster +# cluster_transport_sniffer: true +# cluster_nodes: localhost:9300 +# index_shards_number: 2 +# index_replicas_number: 0 \ No newline at end of file diff --git a/apm-collector/apm-collector-client/src/main/java/org/skywalking/apm/collector/client/h2/H2Client.java b/apm-collector/apm-collector-client/src/main/java/org/skywalking/apm/collector/client/h2/H2Client.java index 8ab7c47d8..0a28d0880 100644 --- a/apm-collector/apm-collector-client/src/main/java/org/skywalking/apm/collector/client/h2/H2Client.java +++ b/apm-collector/apm-collector-client/src/main/java/org/skywalking/apm/collector/client/h2/H2Client.java @@ -18,11 +18,15 @@ package org.skywalking.apm.collector.client.h2; -import java.sql.*; - +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; import org.h2.jdbcx.JdbcConnectionPool; import org.h2.util.IOUtils; import org.skywalking.apm.collector.core.client.Client; +import org.skywalking.apm.collector.core.config.SystemConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,21 +44,15 @@ public class H2Client implements Client { private String password; public H2Client() { - this.url = "jdbc:h2:mem:collector"; + this.url = "jdbc:h2:" + SystemConfig.DATA_PATH + "/h2"; this.userName = ""; this.password = ""; } - public H2Client(String url, String userName, String password) { - this.url = url; - this.userName = userName; - this.password = password; - } - @Override public void initialize() throws H2ClientException { try { cp = JdbcConnectionPool. - create(this.url, this.userName, this.password); + create(this.url, this.userName, this.password); conn = cp.getConnection(); } catch (Exception e) { throw new H2ClientException(e.getMessage(), e); diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/SingleModuleInstaller.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/SingleModuleInstaller.java index 4cc1e39f1..691f40e92 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/SingleModuleInstaller.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/SingleModuleInstaller.java @@ -76,7 +76,9 @@ public abstract class SingleModuleInstaller extends CommonModuleInstaller { throw new ClusterModuleException("single module, but configure multiple default module"); } this.moduleDefine = moduleDefineEntry.getValue(); - this.moduleDefine.configParser().parse(null); + if (this.moduleDefine.configParser() != null) { + this.moduleDefine.configParser().parse(null); + } hasDefaultModule = true; } } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/StorageModuleDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/StorageModuleDefine.java index 1fa83a89d..6f22a30ae 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/StorageModuleDefine.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/StorageModuleDefine.java @@ -68,10 +68,6 @@ public abstract class StorageModuleDefine extends ModuleDefine implements Cluste return null; } - @Override public final boolean defaultModule() { - return true; - } - public abstract StorageInstaller storageInstaller(); public abstract void injectClientIntoDAO(Client client) throws DefineException; diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/elasticsearch/StorageElasticSearchModuleDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/elasticsearch/StorageElasticSearchModuleDefine.java index 06f8b2c81..c2e5e87f9 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/elasticsearch/StorageElasticSearchModuleDefine.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/elasticsearch/StorageElasticSearchModuleDefine.java @@ -46,6 +46,10 @@ public class StorageElasticSearchModuleDefine extends StorageModuleDefine { return MODULE_NAME; } + @Override public final boolean defaultModule() { + return false; + } + @Override protected ModuleConfigParser configParser() { return new StorageElasticSearchConfigParser(); } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2Config.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2Config.java deleted file mode 100644 index a467b9cf4..000000000 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2Config.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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 - */ - -package org.skywalking.apm.collector.storage.h2; - -/** - * @author clevertension - */ -public class StorageH2Config { - public static String URL; - public static String USER_NAME; - public static String PASSWORD; -} diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2ConfigParser.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2ConfigParser.java deleted file mode 100644 index 85a08c426..000000000 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2ConfigParser.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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 - */ - -package org.skywalking.apm.collector.storage.h2; - -import java.util.Map; -import org.skywalking.apm.collector.core.config.ConfigParseException; -import org.skywalking.apm.collector.core.module.ModuleConfigParser; -import org.skywalking.apm.collector.core.util.ObjectUtils; -import org.skywalking.apm.collector.core.util.StringUtils; - -/** - * @author pengys5 - */ -public class StorageH2ConfigParser implements ModuleConfigParser { - private static final String URL = "url"; - public static final String USER_NAME = "user_name"; - public static final String PASSWORD = "password"; - @Override public void parse(Map config) throws ConfigParseException { - if (ObjectUtils.isNotEmpty(config) && StringUtils.isNotEmpty(config.get(URL))) { - StorageH2Config.URL = (String)config.get(URL); - } - if (ObjectUtils.isNotEmpty(config) && StringUtils.isNotEmpty(config.get(USER_NAME))) { - StorageH2Config.USER_NAME = (String)config.get(USER_NAME); - } - if (ObjectUtils.isNotEmpty(config) && StringUtils.isNotEmpty(config.get(PASSWORD))) { - StorageH2Config.PASSWORD = (String)config.get(PASSWORD); - } - } -} diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2ModuleDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2ModuleDefine.java index 9faae085f..2de18e33a 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2ModuleDefine.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2ModuleDefine.java @@ -46,12 +46,16 @@ public class StorageH2ModuleDefine extends StorageModuleDefine { return MODULE_NAME; } + @Override public final boolean defaultModule() { + return true; + } + @Override protected ModuleConfigParser configParser() { - return new StorageH2ConfigParser(); + return null; } @Override protected Client createClient() { - return new H2Client(StorageH2Config.URL, StorageH2Config.USER_NAME, StorageH2Config.PASSWORD); + return new H2Client(); } @Override public StorageInstaller storageInstaller() { diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceReferenceDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceReferenceDAO.java index f2bee52da..cc67f7ac4 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceReferenceDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceReferenceDAO.java @@ -18,13 +18,14 @@ package org.skywalking.apm.collector.ui.dao; -import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import java.util.Map; /** * @author pengys5 */ public interface IServiceReferenceDAO { - JsonArray load(int entryServiceId, long startTime, long endTime); + Map load(int entryServiceId, long startTime, long endTime); - JsonArray load(String entryServiceName, int entryApplicationId, long startTime, long endTime); + Map load(String entryServiceName, int entryApplicationId, long startTime, long endTime); } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceH2DAO.java index 6b3c72fc0..f94c1f1ef 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceH2DAO.java @@ -18,11 +18,13 @@ 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.util.LinkedList; import java.util.List; - +import org.skywalking.apm.collector.cache.ApplicationCache; import org.skywalking.apm.collector.client.h2.H2Client; import org.skywalking.apm.collector.client.h2.H2ClientException; import org.skywalking.apm.collector.core.util.TimeBucketUtils; @@ -30,13 +32,9 @@ import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine; import org.skywalking.apm.collector.storage.define.register.InstanceTable; import org.skywalking.apm.collector.storage.h2.SqlBuilder; import org.skywalking.apm.collector.storage.h2.dao.H2DAO; -import org.skywalking.apm.collector.ui.cache.ApplicationCache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; - /** * @author pengys5, clevertension */ @@ -54,7 +52,7 @@ public class InstanceH2DAO extends H2DAO implements IInstanceDAO { long fiveMinuteBefore = System.currentTimeMillis() - 5 * 60 * 1000; fiveMinuteBefore = TimeBucketUtils.INSTANCE.getSecondTimeBucket(fiveMinuteBefore); String sql = SqlBuilder.buildSql(GET_LAST_HEARTBEAT_TIME_SQL, InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.TABLE, InstanceTable.COLUMN_HEARTBEAT_TIME); - Object[] params = new Object[]{fiveMinuteBefore}; + Object[] params = new Object[] {fiveMinuteBefore}; try (ResultSet rs = client.executeQuery(sql, params)) { if (rs.next()) { return rs.getLong(1); @@ -71,8 +69,8 @@ public class InstanceH2DAO extends H2DAO implements IInstanceDAO { long fiveMinuteBefore = System.currentTimeMillis() - 5 * 60 * 1000; fiveMinuteBefore = TimeBucketUtils.INSTANCE.getSecondTimeBucket(fiveMinuteBefore); String sql = SqlBuilder.buildSql(GET_INST_LAST_HEARTBEAT_TIME_SQL, InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.TABLE, - InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.COLUMN_INSTANCE_ID); - Object[] params = new Object[]{fiveMinuteBefore, applicationInstanceId}; + InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.COLUMN_INSTANCE_ID); + Object[] params = new Object[] {fiveMinuteBefore, applicationInstanceId}; try (ResultSet rs = client.executeQuery(sql, params)) { if (rs.next()) { return rs.getLong(1); @@ -88,15 +86,15 @@ public class InstanceH2DAO extends H2DAO implements IInstanceDAO { H2Client client = getClient(); JsonArray applications = new JsonArray(); String sql = SqlBuilder.buildSql(GET_APPLICATIONS_SQL, InstanceTable.COLUMN_INSTANCE_ID, - InstanceTable.TABLE, InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.COLUMN_APPLICATION_ID); - Object[] params = new Object[]{startTime, endTime}; + InstanceTable.TABLE, InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.COLUMN_APPLICATION_ID); + Object[] params = new Object[] {startTime, endTime}; try (ResultSet rs = client.executeQuery(sql, params)) { while (rs.next()) { Integer applicationId = rs.getInt(InstanceTable.COLUMN_APPLICATION_ID); logger.debug("applicationId: {}", applicationId); JsonObject application = new JsonObject(); application.addProperty("applicationId", applicationId); - application.addProperty("applicationCode", ApplicationCache.getForUI(applicationId)); + application.addProperty("applicationCode", ApplicationCache.get(applicationId)); application.addProperty("instanceCount", rs.getInt("cnt")); applications.add(application); } @@ -110,7 +108,7 @@ public class InstanceH2DAO extends H2DAO implements IInstanceDAO { public InstanceDataDefine.Instance getInstance(int instanceId) { H2Client client = getClient(); String sql = SqlBuilder.buildSql(GET_INSTANCE_SQL, InstanceTable.TABLE, InstanceTable.COLUMN_INSTANCE_ID); - Object[] params = new Object[]{instanceId}; + Object[] params = new Object[] {instanceId}; try (ResultSet rs = client.executeQuery(sql, params)) { if (rs.next()) { InstanceDataDefine.Instance instance = new InstanceDataDefine.Instance(); @@ -134,7 +132,7 @@ public class InstanceH2DAO extends H2DAO implements IInstanceDAO { List instanceList = new LinkedList<>(); H2Client client = getClient(); String sql = SqlBuilder.buildSql(GET_INSTANCES_SQL, InstanceTable.TABLE, InstanceTable.COLUMN_APPLICATION_ID, InstanceTable.COLUMN_HEARTBEAT_TIME); - Object[] params = new Object[]{applicationId, timeBucket}; + Object[] params = new Object[] {applicationId, timeBucket}; try (ResultSet rs = client.executeQuery(sql, params)) { while (rs.next()) { InstanceDataDefine.Instance instance = new InstanceDataDefine.Instance(); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeComponentH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeComponentH2DAO.java index 5fd855025..54a86ca49 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeComponentH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeComponentH2DAO.java @@ -18,49 +18,49 @@ 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 org.skywalking.apm.collector.cache.ApplicationCache; import org.skywalking.apm.collector.client.h2.H2Client; import org.skywalking.apm.collector.client.h2.H2ClientException; import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.define.node.NodeComponentTable; import org.skywalking.apm.collector.storage.h2.SqlBuilder; import org.skywalking.apm.collector.storage.h2.dao.H2DAO; -import org.skywalking.apm.collector.ui.cache.ApplicationCache; import org.skywalking.apm.network.trace.component.ComponentsDefine; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; - /** * @author pengys5, clevertension */ public class NodeComponentH2DAO extends H2DAO implements INodeComponentDAO { private final Logger logger = LoggerFactory.getLogger(NodeComponentH2DAO.class); private static final String AGGREGATE_COMPONENT_SQL = "select {0}, {1}, {2} from {3} where {4} >= ? and {4} <= ? group by {0}, {1}, {2} limit 100"; + @Override public JsonArray load(long startTime, long endTime) { JsonArray nodeComponentArray = new JsonArray(); nodeComponentArray.addAll(aggregationComponent(startTime, endTime)); return nodeComponentArray; } + private JsonArray aggregationComponent(long startTime, long endTime) { H2Client client = getClient(); JsonArray nodeComponentArray = new JsonArray(); String sql = SqlBuilder.buildSql(AGGREGATE_COMPONENT_SQL, NodeComponentTable.COLUMN_COMPONENT_ID, - NodeComponentTable.COLUMN_PEER, NodeComponentTable.COLUMN_PEER_ID, - NodeComponentTable.TABLE, NodeComponentTable.COLUMN_TIME_BUCKET); - Object[] params = new Object[]{startTime, endTime}; + NodeComponentTable.COLUMN_PEER, NodeComponentTable.COLUMN_PEER_ID, + NodeComponentTable.TABLE, NodeComponentTable.COLUMN_TIME_BUCKET); + Object[] params = new Object[] {startTime, endTime}; try (ResultSet rs = client.executeQuery(sql, params)) { while (rs.next()) { int peerId = rs.getInt(NodeComponentTable.COLUMN_PEER_ID); int componentId = rs.getInt(NodeComponentTable.COLUMN_COMPONENT_ID); String componentName = ComponentsDefine.getInstance().getComponentName(componentId); if (peerId != 0) { - String peer = ApplicationCache.getForUI(peerId); + String peer = ApplicationCache.get(peerId); nodeComponentArray.add(buildNodeComponent(peer, componentName)); } String peer = rs.getString(NodeComponentTable.COLUMN_PEER); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeMappingH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeMappingH2DAO.java index 7febe8065..78ae8cf1c 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeMappingH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeMappingH2DAO.java @@ -18,43 +18,42 @@ 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 org.skywalking.apm.collector.cache.ApplicationCache; import org.skywalking.apm.collector.client.h2.H2Client; import org.skywalking.apm.collector.client.h2.H2ClientException; import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.define.node.NodeMappingTable; import org.skywalking.apm.collector.storage.h2.SqlBuilder; import org.skywalking.apm.collector.storage.h2.dao.H2DAO; -import org.skywalking.apm.collector.ui.cache.ApplicationCache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; - /** * @author pengys5, clevertension */ public class NodeMappingH2DAO extends H2DAO implements INodeMappingDAO { private final Logger logger = LoggerFactory.getLogger(NodeMappingH2DAO.class); private static final String NODE_MAPPING_SQL = "select {0}, {1}, {2} from {3} where {4} >= ? and {4} <= ? group by {0}, {1}, {2} limit 100"; + @Override public JsonArray load(long startTime, long endTime) { H2Client client = getClient(); JsonArray nodeMappingArray = new JsonArray(); String sql = SqlBuilder.buildSql(NODE_MAPPING_SQL, NodeMappingTable.COLUMN_APPLICATION_ID, - NodeMappingTable.COLUMN_ADDRESS_ID, NodeMappingTable.COLUMN_ADDRESS, - NodeMappingTable.TABLE, NodeMappingTable.COLUMN_TIME_BUCKET); + NodeMappingTable.COLUMN_ADDRESS_ID, NodeMappingTable.COLUMN_ADDRESS, + NodeMappingTable.TABLE, NodeMappingTable.COLUMN_TIME_BUCKET); - Object[] params = new Object[]{startTime, endTime}; + Object[] params = new Object[] {startTime, endTime}; try (ResultSet rs = client.executeQuery(sql, params)) { while (rs.next()) { int applicationId = rs.getInt(NodeMappingTable.COLUMN_APPLICATION_ID); - String applicationCode = ApplicationCache.getForUI(applicationId); + String applicationCode = ApplicationCache.get(applicationId); int addressId = rs.getInt(NodeMappingTable.COLUMN_ADDRESS_ID); if (addressId != 0) { - String address = ApplicationCache.getForUI(addressId); + String address = ApplicationCache.get(addressId); JsonObject nodeMappingObj = new JsonObject(); nodeMappingObj.addProperty("applicationCode", applicationCode); nodeMappingObj.addProperty("address", address); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeReferenceH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeReferenceH2DAO.java index 52cdf9a41..007882c44 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeReferenceH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeReferenceH2DAO.java @@ -21,13 +21,13 @@ package org.skywalking.apm.collector.ui.dao; import java.sql.ResultSet; import java.sql.SQLException; +import org.skywalking.apm.collector.cache.ApplicationCache; import org.skywalking.apm.collector.client.h2.H2Client; import org.skywalking.apm.collector.client.h2.H2ClientException; import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.define.noderef.NodeReferenceTable; import org.skywalking.apm.collector.storage.h2.SqlBuilder; import org.skywalking.apm.collector.storage.h2.dao.H2DAO; -import org.skywalking.apm.collector.ui.cache.ApplicationCache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,10 +54,10 @@ public class NodeReferenceH2DAO extends H2DAO implements INodeReferenceDAO { try (ResultSet rs = client.executeQuery(sql, params)) { while (rs.next()) { int applicationId = rs.getInt(NodeReferenceTable.COLUMN_FRONT_APPLICATION_ID); - String applicationCode = ApplicationCache.getForUI(applicationId); + String applicationCode = ApplicationCache.get(applicationId); int behindApplicationId = rs.getInt(NodeReferenceTable.COLUMN_BEHIND_APPLICATION_ID); if (behindApplicationId != 0) { - String behindApplicationCode = ApplicationCache.getForUI(behindApplicationId); + String behindApplicationCode = ApplicationCache.get(behindApplicationId); JsonObject nodeRefResSumObj = new JsonObject(); nodeRefResSumObj.addProperty("front", applicationCode); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryH2DAO.java index dcf71a00a..664b9ca88 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryH2DAO.java @@ -18,11 +18,13 @@ 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.util.ArrayList; import java.util.List; - +import org.skywalking.apm.collector.cache.ApplicationCache; import org.skywalking.apm.collector.client.h2.H2Client; import org.skywalking.apm.collector.client.h2.H2ClientException; import org.skywalking.apm.collector.core.util.ColumnNameUtils; @@ -30,19 +32,16 @@ import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.define.service.ServiceEntryTable; import org.skywalking.apm.collector.storage.h2.SqlBuilder; import org.skywalking.apm.collector.storage.h2.dao.H2DAO; -import org.skywalking.apm.collector.ui.cache.ApplicationCache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; - /** * @author pengys5 */ public class ServiceEntryH2DAO extends H2DAO implements IServiceEntryDAO { private final Logger logger = LoggerFactory.getLogger(SegmentH2DAO.class); private static final String GET_SERVICE_ENTRY_SQL = "select * from {0} where {1} >= ? and {2} <= ?"; + @Override public JsonObject load(int applicationId, String entryServiceName, long startTime, long endTime, int from, int size) { H2Client client = getClient(); @@ -77,7 +76,7 @@ public class ServiceEntryH2DAO extends H2DAO implements IServiceEntryDAO { while (rs.next()) { int appId = rs.getInt(ServiceEntryTable.COLUMN_APPLICATION_ID); int entryServiceId = rs.getInt(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID); - String applicationCode = ApplicationCache.getForUI(applicationId); + String applicationCode = ApplicationCache.get(applicationId); String entryServiceName1 = rs.getString(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME); JsonObject row = new JsonObject(); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java index 75a4b3755..4a76bc848 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java @@ -18,9 +18,7 @@ package org.skywalking.apm.collector.ui.dao; -import com.google.gson.JsonArray; import com.google.gson.JsonObject; -import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import org.elasticsearch.action.search.SearchRequestBuilder; @@ -35,7 +33,6 @@ import org.skywalking.apm.collector.cache.ServiceIdCache; import org.skywalking.apm.collector.cache.ServiceNameCache; 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.elasticsearch.dao.EsDAO; @@ -49,7 +46,8 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO private final Logger logger = LoggerFactory.getLogger(ServiceReferenceEsDAO.class); - @Override public JsonArray load(String entryServiceName, int entryApplicationId, long startTime, long endTime) { + @Override + public Map load(String entryServiceName, int entryApplicationId, long startTime, long endTime) { SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ServiceReferenceTable.TABLE); searchRequestBuilder.setTypes(ServiceReferenceTable.TABLE_TYPE); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); @@ -72,7 +70,7 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO return load(searchRequestBuilder); } - @Override public JsonArray load(int entryServiceId, long startTime, long endTime) { + @Override public Map load(int entryServiceId, long startTime, long endTime) { SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ServiceReferenceTable.TABLE); searchRequestBuilder.setTypes(ServiceReferenceTable.TABLE_TYPE); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); @@ -93,35 +91,9 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO return load(searchRequestBuilder); } - private JsonArray load(SearchRequestBuilder searchRequestBuilder) { + private Map load(SearchRequestBuilder searchRequestBuilder) { searchRequestBuilder.addAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID).field(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID).size(100) .subAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID).field(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID).size(100) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S1_LTE).field(ServiceReferenceTable.COLUMN_S1_LTE)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S3_LTE).field(ServiceReferenceTable.COLUMN_S3_LTE)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S5_LTE).field(ServiceReferenceTable.COLUMN_S5_LTE)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S5_GT).field(ServiceReferenceTable.COLUMN_S5_GT)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_ERROR).field(ServiceReferenceTable.COLUMN_ERROR)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_SUMMARY).field(ServiceReferenceTable.COLUMN_SUMMARY)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_COST_SUMMARY).field(ServiceReferenceTable.COLUMN_COST_SUMMARY))) - .subAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME).field(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME).size(100) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S1_LTE).field(ServiceReferenceTable.COLUMN_S1_LTE)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S3_LTE).field(ServiceReferenceTable.COLUMN_S3_LTE)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S5_LTE).field(ServiceReferenceTable.COLUMN_S5_LTE)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S5_GT).field(ServiceReferenceTable.COLUMN_S5_GT)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_ERROR).field(ServiceReferenceTable.COLUMN_ERROR)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_SUMMARY).field(ServiceReferenceTable.COLUMN_SUMMARY)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_COST_SUMMARY).field(ServiceReferenceTable.COLUMN_COST_SUMMARY)))); - - searchRequestBuilder.addAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME).field(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME).size(100) - .subAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID).field(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID).size(100) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S1_LTE).field(ServiceReferenceTable.COLUMN_S1_LTE)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S3_LTE).field(ServiceReferenceTable.COLUMN_S3_LTE)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S5_LTE).field(ServiceReferenceTable.COLUMN_S5_LTE)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S5_GT).field(ServiceReferenceTable.COLUMN_S5_GT)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_ERROR).field(ServiceReferenceTable.COLUMN_ERROR)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_SUMMARY).field(ServiceReferenceTable.COLUMN_SUMMARY)) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_COST_SUMMARY).field(ServiceReferenceTable.COLUMN_COST_SUMMARY))) - .subAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME).field(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME).size(100) .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S1_LTE).field(ServiceReferenceTable.COLUMN_S1_LTE)) .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S3_LTE).field(ServiceReferenceTable.COLUMN_S3_LTE)) .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S5_LTE).field(ServiceReferenceTable.COLUMN_S5_LTE)) @@ -141,27 +113,7 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO } } - Terms frontServiceNameTerms = searchResponse.getAggregations().get(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME); - for (Terms.Bucket frontServiceBucket : frontServiceNameTerms.getBuckets()) { - String frontServiceName = frontServiceBucket.getKeyAsString(); - if (StringUtils.isNotEmpty(frontServiceName)) { - String[] serviceNames = frontServiceName.split(Const.ID_SPLIT); - int frontServiceId = ServiceIdCache.get(Integer.parseInt(serviceNames[0]), serviceNames[1]); - parseSubAggregate(serviceReferenceMap, frontServiceBucket, frontServiceId); - } - } - - 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; + return serviceReferenceMap; } private void parseSubAggregate(Map serviceReferenceMap, @@ -200,88 +152,9 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_ERROR), (long)error.getValue()); serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_SUMMARY), (long)summary.getValue()); serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_COST_SUMMARY), (long)costSum.getValue()); - merge(serviceReferenceMap, serviceReference); - } - } - Terms behindServiceNameTerms = frontServiceBucket.getAggregations().get(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME); - for (Terms.Bucket behindServiceNameBucket : behindServiceNameTerms.getBuckets()) { - String behindServiceName = behindServiceNameBucket.getKeyAsString(); - if (StringUtils.isNotEmpty(behindServiceName)) { - Sum s1LteSum = behindServiceNameBucket.getAggregations().get(ServiceReferenceTable.COLUMN_S1_LTE); - Sum s3LteSum = behindServiceNameBucket.getAggregations().get(ServiceReferenceTable.COLUMN_S3_LTE); - Sum s5LteSum = behindServiceNameBucket.getAggregations().get(ServiceReferenceTable.COLUMN_S5_LTE); - Sum s5GtSum = behindServiceNameBucket.getAggregations().get(ServiceReferenceTable.COLUMN_S5_GT); - Sum error = behindServiceNameBucket.getAggregations().get(ServiceReferenceTable.COLUMN_ERROR); - Sum summary = behindServiceNameBucket.getAggregations().get(ServiceReferenceTable.COLUMN_SUMMARY); - Sum costSum = behindServiceNameBucket.getAggregations().get(ServiceReferenceTable.COLUMN_COST_SUMMARY); - - String frontServiceName = ServiceNameCache.get(frontServiceId); - String[] serviceNames = behindServiceName.split(Const.ID_SPLIT); - int behindServiceId = ServiceIdCache.get(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), (long)s1LteSum.getValue()); - serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S3_LTE), (long)s3LteSum.getValue()); - serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_LTE), (long)s5LteSum.getValue()); - serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_GT), (long)s5GtSum.getValue()); - serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_ERROR), (long)error.getValue()); - serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_SUMMARY), (long)summary.getValue()); - serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_COST_SUMMARY), (long)costSum.getValue()); - merge(serviceReferenceMap, serviceReference); - } - } - } - - private void merge(Map 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 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 serviceReferenceMap) { - Iterator 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); + 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); } } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceH2DAO.java index 37a818e0a..24b224594 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceH2DAO.java @@ -18,29 +18,24 @@ package org.skywalking.apm.collector.ui.dao; +import com.google.gson.JsonObject; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; - +import org.skywalking.apm.collector.cache.ServiceIdCache; +import org.skywalking.apm.collector.cache.ServiceNameCache; 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.SqlBuilder; 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, clevertension */ @@ -48,115 +43,69 @@ 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}"; + ",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}"; + ",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) { + @Override + public Map load(String entryServiceName, int entryApplicationId, long startTime, long endTime) { H2Client client = getClient(); - String sql = SqlBuilder.buildSql(GET_SRV_REF_LOAD1, ServiceReferenceTable.TABLE, + String sql = SqlBuilder.buildSql(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); + + Object[] params = new Object[] {startTime, endTime, entryServiceName}; + entryServiceName = entryApplicationId + Const.ID_SPLIT + entryServiceName; + int entryServiceId = ServiceIdCache.get(entryApplicationId, entryServiceName); + if (entryServiceId != 0) { + sql = SqlBuilder.buildSql(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 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); + params = new Object[] {startTime, endTime, entryServiceId, entryServiceName}; } - return null; + + return load(client, params, sql); } - @Override public JsonArray load(String entryServiceName, int entryApplicationId, long startTime, long endTime) { + @Override public Map load(int entryServiceId, long startTime, long endTime) { H2Client client = getClient(); - String sql = SqlBuilder.buildSql(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 = SqlBuilder.buildSql(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}; - } + String sql = SqlBuilder.buildSql(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}; + + return load(client, params, sql); + } + + private Map load(H2Client client, Object[] params, String sql) { + Map serviceReferenceMap = new LinkedHashMap<>(); try (ResultSet rs = client.executeQuery(sql, params)) { if (rs.next()) { - Map 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; + parseSubAggregate(serviceReferenceMap, rs, frontServiceId); } } catch (SQLException | H2ClientException e) { logger.error(e.getMessage(), e); } - return null; + return serviceReferenceMap; } - private void parseSubAggregate(Map serviceReferenceMap, - ResultSet rs, - int frontServiceId) { + private void parseSubAggregate(Map serviceReferenceMap, ResultSet rs, + int frontServiceId) { try { int behindServiceId = rs.getInt(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID); if (behindServiceId != 0) { @@ -168,11 +117,11 @@ public class ServiceReferenceH2DAO extends H2DAO implements IServiceReferenceDAO long summary = rs.getLong("cnt3"); long costSum = rs.getLong("cnt3"); - String frontServiceName = ServiceNameCache.getForUI(frontServiceId); + String frontServiceName = ServiceNameCache.get(frontServiceId); if (StringUtils.isNotEmpty(frontServiceName)) { frontServiceName = frontServiceName.split(Const.ID_SPLIT)[1]; } - String behindServiceName = ServiceNameCache.getForUI(behindServiceId); + String behindServiceName = ServiceNameCache.get(behindServiceId); if (StringUtils.isNotEmpty(frontServiceName)) { behindServiceName = behindServiceName.split(Const.ID_SPLIT)[1]; } @@ -189,92 +138,12 @@ public class ServiceReferenceH2DAO extends H2DAO implements IServiceReferenceDAO 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); + + 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); } } 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 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 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 serviceReferenceMap) { - Iterator 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); - } - } } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/ServiceTreeService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/ServiceTreeService.java index 53c09692a..5ca0938d4 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/ServiceTreeService.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/ServiceTreeService.java @@ -20,7 +20,13 @@ package org.skywalking.apm.collector.ui.service; import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import java.util.Iterator; +import java.util.Map; +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.storage.dao.DAOContainer; +import org.skywalking.apm.collector.storage.define.serviceref.ServiceReferenceTable; import org.skywalking.apm.collector.ui.dao.IServiceEntryDAO; import org.skywalking.apm.collector.ui.dao.IServiceReferenceDAO; @@ -37,11 +43,76 @@ public class ServiceTreeService { public JsonArray loadServiceTree(int entryServiceId, long startTime, long endTime) { IServiceReferenceDAO serviceReferenceDAO = (IServiceReferenceDAO)DAOContainer.INSTANCE.get(IServiceReferenceDAO.class.getName()); - return serviceReferenceDAO.load(entryServiceId, startTime, endTime); + Map serviceReferenceMap = serviceReferenceDAO.load(entryServiceId, startTime, endTime); + return buildTreeData(serviceReferenceMap); } public JsonArray loadServiceTree(String entryServiceName, int entryApplicationId, long startTime, long endTime) { IServiceReferenceDAO serviceReferenceDAO = (IServiceReferenceDAO)DAOContainer.INSTANCE.get(IServiceReferenceDAO.class.getName()); - return serviceReferenceDAO.load(entryServiceName, entryApplicationId, startTime, endTime); + Map serviceReferenceMap = serviceReferenceDAO.load(entryServiceName, entryApplicationId, startTime, endTime); + return buildTreeData(serviceReferenceMap); + } + + private JsonArray buildTreeData(Map serviceReferenceMap) { + 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; + } + + private JsonObject findRoot(Map 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 serviceReferenceMap) { + Iterator 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); + } + } + } + + private void merge(Map 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); } } \ No newline at end of file From dd595806769b9ca7f64c313ceedfe23fe4d1c0b7 Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sat, 21 Oct 2017 00:14:32 +0800 Subject: [PATCH 4/7] Fixed the bugs from the change of cache module created and segment standardizing. --- .../segment/cost/SegmentCostSpanListener.java | 2 +- .../segment/origin/dao/SegmentH2DAO.java | 7 +- .../entry/ServiceEntrySpanListener.java | 4 + .../service/entry/dao/ServiceEntryH2DAO.java | 8 +- .../agentstream/mock/SegmentPost.java | 61 ++++++++------ .../src/main/resources/application.yml | 4 +- .../apm/collector/cache/ServiceNameCache.java | 13 +++ .../collector/cache/dao/ApplicationEsDAO.java | 5 +- .../collector/cache/dao/ApplicationH2DAO.java | 2 +- .../collector/cache/dao/ServiceNameEsDAO.java | 5 +- .../collector/cache/dao/ServiceNameH2DAO.java | 15 ++-- .../apm/collector/client/h2/H2Client.java | 21 ++--- .../service/ServiceEntryDataDefine.java | 4 +- .../collector/storage/h2/StorageH2Config.java | 28 +++++++ .../storage/h2/StorageH2ConfigParser.java | 51 ++++++++++++ .../storage/h2/StorageH2ModuleDefine.java | 4 +- .../collector/ui/dao/GlobalTraceH2DAO.java | 2 +- .../ui/dao/IServiceReferenceDAO.java | 2 - .../apm/collector/ui/dao/SegmentH2DAO.java | 24 +++--- .../collector/ui/dao/ServiceEntryH2DAO.java | 2 +- .../ui/dao/ServiceReferenceEsDAO.java | 38 +-------- .../ui/dao/ServiceReferenceH2DAO.java | 66 +++------------ .../ui/jetty/UIJettyModuleDefine.java | 2 - .../ServiceTreeGetByNameHandler.java | 80 ------------------- .../ui/service/ServiceTreeService.java | 6 -- 25 files changed, 202 insertions(+), 254 deletions(-) create mode 100644 apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2Config.java create mode 100644 apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2ConfigParser.java delete mode 100644 apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/ServiceTreeGetByNameHandler.java diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/SegmentCostSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/SegmentCostSpanListener.java index 6b2209a73..90be7b639 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/SegmentCostSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/SegmentCostSpanListener.java @@ -62,7 +62,7 @@ public class SegmentCostSpanListener implements EntrySpanListener, ExitSpanListe if (spanDecorator.getOperationNameId() == 0) { segmentCost.setServiceName(spanDecorator.getOperationName()); } else { - segmentCost.setServiceName(ServiceNameCache.get(spanDecorator.getOperationNameId())); + segmentCost.setServiceName(ServiceNameCache.getSplitServiceName(ServiceNameCache.get(spanDecorator.getOperationNameId()))); } segmentCosts.add(segmentCost); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/origin/dao/SegmentH2DAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/origin/dao/SegmentH2DAO.java index 8a1ead97b..60e04854e 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/origin/dao/SegmentH2DAO.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/origin/dao/SegmentH2DAO.java @@ -18,10 +18,8 @@ package org.skywalking.apm.collector.agentstream.worker.segment.origin.dao; -import java.util.Base64; import java.util.HashMap; import java.util.Map; - import org.skywalking.apm.collector.agentstream.worker.segment.cost.dao.SegmentCostH2DAO; import org.skywalking.apm.collector.core.stream.Data; import org.skywalking.apm.collector.storage.define.DataDefine; @@ -38,14 +36,16 @@ import org.slf4j.LoggerFactory; */ public class SegmentH2DAO extends H2DAO implements ISegmentDAO, IPersistenceDAO { private final Logger logger = LoggerFactory.getLogger(SegmentCostH2DAO.class); + @Override public Data get(String id, DataDefine dataDefine) { return null; } + @Override public H2SqlEntity prepareBatchInsert(Data data) { Map source = new HashMap<>(); H2SqlEntity entity = new H2SqlEntity(); source.put("id", data.getDataString(0)); - source.put(SegmentTable.COLUMN_DATA_BINARY, Base64.getEncoder().encode(data.getDataBytes(0))); + source.put(SegmentTable.COLUMN_DATA_BINARY, data.getDataBytes(0)); logger.debug("segment source: {}", source.toString()); String sql = SqlBuilder.buildBatchInsertSql(SegmentTable.TABLE, source.keySet()); @@ -53,6 +53,7 @@ public class SegmentH2DAO extends H2DAO implements ISegmentDAO, IPersistenceDAO< entity.setParams(source.values().toArray(new Object[0])); return entity; } + @Override public H2SqlEntity prepareBatchUpdate(Data data) { return null; } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java index b33b2ffc0..c93edd9fb 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java @@ -23,6 +23,7 @@ import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener import org.skywalking.apm.collector.agentstream.worker.segment.RefsListener; import org.skywalking.apm.collector.agentstream.worker.segment.standardization.ReferenceDecorator; import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator; +import org.skywalking.apm.collector.cache.ServiceNameCache; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.TimeBucketUtils; @@ -45,6 +46,7 @@ public class ServiceEntrySpanListener implements RefsListener, FirstSpanListener private boolean hasReference = false; private int applicationId; private int entryServiceId; + private String entryServiceName; private boolean hasEntry = false; @Override @@ -52,6 +54,7 @@ public class ServiceEntrySpanListener implements RefsListener, FirstSpanListener String segmentId) { this.applicationId = applicationId; this.entryServiceId = spanDecorator.getOperationNameId(); + this.entryServiceName = ServiceNameCache.getSplitServiceName(ServiceNameCache.get(entryServiceId)); this.hasEntry = true; } @@ -74,6 +77,7 @@ public class ServiceEntrySpanListener implements RefsListener, FirstSpanListener serviceEntry.setId(applicationId + Const.ID_SPLIT + entryServiceId); serviceEntry.setApplicationId(applicationId); serviceEntry.setEntryServiceId(entryServiceId); + serviceEntry.setEntryServiceName(entryServiceName); serviceEntry.setRegisterTime(timeBucket); serviceEntry.setNewestTime(timeBucket); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/dao/ServiceEntryH2DAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/dao/ServiceEntryH2DAO.java index 6f91ba64c..27140ae12 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/dao/ServiceEntryH2DAO.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/dao/ServiceEntryH2DAO.java @@ -24,7 +24,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; 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.stream.Data; @@ -42,10 +41,11 @@ import org.slf4j.LoggerFactory; */ public class ServiceEntryH2DAO extends H2DAO implements IServiceEntryDAO, IPersistenceDAO { private final Logger logger = LoggerFactory.getLogger(ServiceEntryH2DAO.class); - private static final String GET_SERIVCE_ENTRY_SQL = "select * from {0} where {1} = ?"; + private static final String GET_SERVICE_ENTRY_SQL = "select * from {0} where {1} = ?"; + @Override public Data get(String id, DataDefine dataDefine) { H2Client client = getClient(); - String sql = SqlBuilder.buildSql(ServiceEntryTable.TABLE, "id"); + String sql = SqlBuilder.buildSql(GET_SERVICE_ENTRY_SQL, ServiceEntryTable.TABLE, "id"); Object[] params = new Object[] {id}; try (ResultSet rs = client.executeQuery(sql, params)) { if (rs.next()) { @@ -62,6 +62,7 @@ public class ServiceEntryH2DAO extends H2DAO implements IServiceEntryDAO, IPersi } return null; } + @Override public H2SqlEntity prepareBatchInsert(Data data) { H2SqlEntity entity = new H2SqlEntity(); Map source = new HashMap<>(); @@ -76,6 +77,7 @@ public class ServiceEntryH2DAO extends H2DAO implements IServiceEntryDAO, IPersi entity.setParams(source.values().toArray(new Object[0])); return entity; } + @Override public H2SqlEntity prepareBatchUpdate(Data data) { H2SqlEntity entity = new H2SqlEntity(); Map source = new HashMap<>(); diff --git a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java index 37217f203..3675883b1 100644 --- a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java +++ b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java @@ -22,16 +22,21 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.io.IOException; -import org.skywalking.apm.collector.agentregister.worker.application.dao.ApplicationEsDAO; -import org.skywalking.apm.collector.agentregister.worker.instance.dao.InstanceEsDAO; -import org.skywalking.apm.collector.agentregister.worker.servicename.dao.ServiceNameEsDAO; +import org.skywalking.apm.collector.agentregister.worker.application.dao.IApplicationDAO; +import org.skywalking.apm.collector.agentregister.worker.instance.dao.IInstanceDAO; +import org.skywalking.apm.collector.agentregister.worker.servicename.dao.IServiceNameDAO; import org.skywalking.apm.collector.agentstream.HttpClientTools; import org.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient; +import org.skywalking.apm.collector.client.h2.H2Client; import org.skywalking.apm.collector.core.CollectorException; +import org.skywalking.apm.collector.core.config.SystemConfig; import org.skywalking.apm.collector.core.util.TimeBucketUtils; +import org.skywalking.apm.collector.storage.dao.DAOContainer; import org.skywalking.apm.collector.storage.define.register.ApplicationDataDefine; import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine; import org.skywalking.apm.collector.storage.define.register.ServiceNameDataDefine; +import org.skywalking.apm.collector.storage.elasticsearch.StorageElasticSearchModuleDefine; +import org.skywalking.apm.collector.storage.h2.StorageH2ModuleDefine; /** * @author pengys5 @@ -39,41 +44,47 @@ import org.skywalking.apm.collector.storage.define.register.ServiceNameDataDefin public class SegmentPost { public static void main(String[] args) throws IOException, InterruptedException, CollectorException { - ElasticSearchClient client = new ElasticSearchClient("CollectorDBCluster", true, "127.0.0.1:9300"); - client.initialize(); + SystemConfig.DATA_PATH = "/Users/pengys5/code/sky-walking/sky-walking/apm-collector/data"; + + ElasticSearchClient elasticSearchClient = new ElasticSearchClient("CollectorDBCluster", true, "127.0.0.1:9300"); + elasticSearchClient.initialize(); + StorageElasticSearchModuleDefine storageElasticSearchModuleDefine = new StorageElasticSearchModuleDefine(); + storageElasticSearchModuleDefine.injectClientIntoDAO(elasticSearchClient); + + H2Client h2Client = new H2Client("jdbc:h2:tcp://localhost/~/test", "sa", ""); + h2Client.initialize(); + StorageH2ModuleDefine storageH2ModuleDefine = new StorageH2ModuleDefine(); + storageH2ModuleDefine.injectClientIntoDAO(h2Client); + long now = TimeBucketUtils.INSTANCE.getSecondTimeBucket(System.currentTimeMillis()); - InstanceEsDAO instanceEsDAO = new InstanceEsDAO(); - instanceEsDAO.setClient(client); - + IInstanceDAO instanceDAO = (IInstanceDAO)DAOContainer.INSTANCE.get(IInstanceDAO.class.getName()); InstanceDataDefine.Instance consumerInstance = new InstanceDataDefine.Instance("2", 2, "dubbox-consumer", now, 2, now, osInfo("consumer").toString()); - instanceEsDAO.save(consumerInstance); + instanceDAO.save(consumerInstance); InstanceDataDefine.Instance providerInstance = new InstanceDataDefine.Instance("3", 3, "dubbox-provider", now, 3, now, osInfo("provider").toString()); - instanceEsDAO.save(providerInstance); + instanceDAO.save(providerInstance); - ApplicationEsDAO applicationEsDAO = new ApplicationEsDAO(); - applicationEsDAO.setClient(client); + IApplicationDAO applicationDAO = (IApplicationDAO)DAOContainer.INSTANCE.get(IApplicationDAO.class.getName()); ApplicationDataDefine.Application userApplication = new ApplicationDataDefine.Application("1", "User", 1); - applicationEsDAO.save(userApplication); + applicationDAO.save(userApplication); ApplicationDataDefine.Application consumerApplication = new ApplicationDataDefine.Application("2", "dubbox-consumer", 2); - applicationEsDAO.save(consumerApplication); + applicationDAO.save(consumerApplication); ApplicationDataDefine.Application providerApplication = new ApplicationDataDefine.Application("3", "dubbox-provider", 3); - applicationEsDAO.save(providerApplication); -// ApplicationDataDefine.Application peer = new ApplicationDataDefine.Application("4", "172.25.0.4:20880", 4); -// applicationEsDAO.save(peer); + applicationDAO.save(providerApplication); + ApplicationDataDefine.Application peer = new ApplicationDataDefine.Application("4", "172.25.0.4:20880", 4); + applicationDAO.save(peer); - ServiceNameEsDAO serviceNameEsDAO = new ServiceNameEsDAO(); - serviceNameEsDAO.setClient(client); + IServiceNameDAO serviceNameDAO = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); ServiceNameDataDefine.ServiceName serviceName1 = new ServiceNameDataDefine.ServiceName("1", "", 0, 1); - serviceNameEsDAO.save(serviceName1); + serviceNameDAO.save(serviceName1); ServiceNameDataDefine.ServiceName serviceName2 = new ServiceNameDataDefine.ServiceName("2", "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()", 2, 2); - serviceNameEsDAO.save(serviceName2); + serviceNameDAO.save(serviceName2); ServiceNameDataDefine.ServiceName serviceName3 = new ServiceNameDataDefine.ServiceName("3", "/dubbox-case/case/dubbox-rest", 2, 3); - serviceNameEsDAO.save(serviceName3); + serviceNameDAO.save(serviceName3); ServiceNameDataDefine.ServiceName serviceName4 = new ServiceNameDataDefine.ServiceName("4", "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()", 3, 4); - serviceNameEsDAO.save(serviceName4); + serviceNameDAO.save(serviceName4); while (true) { JsonElement consumer = JsonFileReader.INSTANCE.read("json/segment/normal/dubbox-consumer.json"); @@ -124,4 +135,8 @@ public class SegmentPost { return osInfoJson; } + + private void newDao() { + + } } diff --git a/apm-collector/apm-collector-boot/src/main/resources/application.yml b/apm-collector/apm-collector-boot/src/main/resources/application.yml index 85021ee37..e6d654a9d 100644 --- a/apm-collector/apm-collector-boot/src/main/resources/application.yml +++ b/apm-collector/apm-collector-boot/src/main/resources/application.yml @@ -16,8 +16,8 @@ agent_stream: port: 12800 context_path: / config: - buffer_offset_max_file_size: 1k - buffer_segment_max_file_size: 10k + buffer_offset_max_file_size: 10M + buffer_segment_max_file_size: 500M ui: jetty: host: localhost diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java index 1ba962f6e..cf5ed591d 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java @@ -56,4 +56,17 @@ public class ServiceNameCache { return serviceName; } + + public static String getSplitServiceName(String serviceName) { + if (StringUtils.isNotEmpty(serviceName)) { + String[] serviceNames = serviceName.split(Const.ID_SPLIT); + if (serviceNames.length == 2) { + return serviceNames[1]; + } else { + return Const.EMPTY_STRING; + } + } else { + return Const.EMPTY_STRING; + } + } } diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationEsDAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationEsDAO.java index cab8fe255..c019fccaa 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationEsDAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationEsDAO.java @@ -51,8 +51,7 @@ public class ApplicationEsDAO extends EsDAO implements IApplicationDAO { SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); if (searchResponse.getHits().totalHits > 0) { SearchHit searchHit = searchResponse.getHits().iterator().next(); - int applicationId = (int)searchHit.getSource().get(ApplicationTable.COLUMN_APPLICATION_ID); - return applicationId; + return (int)searchHit.getSource().get(ApplicationTable.COLUMN_APPLICATION_ID); } return 0; } @@ -66,6 +65,6 @@ public class ApplicationEsDAO extends EsDAO implements IApplicationDAO { if (getResponse.isExists()) { return (String)getResponse.getSource().get(ApplicationTable.COLUMN_APPLICATION_CODE); } - return Const.UNKNOWN; + return Const.EMPTY_STRING; } } diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationH2DAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationH2DAO.java index ab9c13406..dbf9d70c9 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationH2DAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationH2DAO.java @@ -57,6 +57,6 @@ public class ApplicationH2DAO extends H2DAO implements IApplicationDAO { } catch (SQLException | H2ClientException e) { logger.error(e.getMessage(), e); } - return Const.UNKNOWN; + return Const.EMPTY_STRING; } } diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameEsDAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameEsDAO.java index 41663de48..83a922b7a 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameEsDAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameEsDAO.java @@ -44,7 +44,7 @@ public class ServiceNameEsDAO extends EsDAO implements IServiceNameDAO { int applicationId = ((Number)getResponse.getSource().get(ServiceNameTable.COLUMN_APPLICATION_ID)).intValue(); return applicationId + Const.ID_SPLIT + serviceName; } - return Const.UNKNOWN; + return Const.EMPTY_STRING; } @Override public int getServiceId(int applicationId, String serviceName) { @@ -61,8 +61,7 @@ public class ServiceNameEsDAO extends EsDAO implements IServiceNameDAO { SearchResponse searchResponse = searchRequestBuilder.get(); if (searchResponse.getHits().totalHits > 0) { SearchHit searchHit = searchResponse.getHits().iterator().next(); - int serviceId = (int)searchHit.getSource().get(ServiceNameTable.COLUMN_SERVICE_ID); - return serviceId; + return (int)searchHit.getSource().get(ServiceNameTable.COLUMN_SERVICE_ID); } return 0; } diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameH2DAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameH2DAO.java index 8de1635c2..9584be027 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameH2DAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameH2DAO.java @@ -33,23 +33,27 @@ import org.slf4j.LoggerFactory; * @author pengys5, clevertension */ public class ServiceNameH2DAO extends H2DAO implements IServiceNameDAO { + private final Logger logger = LoggerFactory.getLogger(ServiceNameH2DAO.class); - private static final String GET_SERVICE_NAME_SQL = "select {0} from {1} where {2} = ?"; + + private static final String GET_SERVICE_NAME_SQL = "select {0},{1} from {2} where {3} = ?"; private static final String GET_SERVICE_ID_SQL = "select {0} from {1} where {2} = ? and {3} = ? limit 1"; @Override public String getServiceName(int serviceId) { H2Client client = getClient(); - String sql = SqlBuilder.buildSql(GET_SERVICE_NAME_SQL, ServiceNameTable.COLUMN_SERVICE_NAME, + String sql = SqlBuilder.buildSql(GET_SERVICE_NAME_SQL, ServiceNameTable.COLUMN_APPLICATION_ID, ServiceNameTable.COLUMN_SERVICE_NAME, ServiceNameTable.TABLE, ServiceNameTable.COLUMN_SERVICE_ID); Object[] params = new Object[] {serviceId}; try (ResultSet rs = client.executeQuery(sql, params)) { if (rs.next()) { - return rs.getString(ServiceNameTable.COLUMN_SERVICE_NAME); + String serviceName = rs.getString(ServiceNameTable.COLUMN_SERVICE_NAME); + int applicationId = rs.getInt(ServiceNameTable.COLUMN_APPLICATION_ID); + return applicationId + Const.ID_SPLIT + serviceName; } } catch (SQLException | H2ClientException e) { logger.error(e.getMessage(), e); } - return Const.UNKNOWN; + return Const.EMPTY_STRING; } @Override public int getServiceId(int applicationId, String serviceName) { @@ -59,8 +63,7 @@ public class ServiceNameH2DAO extends H2DAO implements IServiceNameDAO { Object[] params = new Object[] {applicationId, serviceName}; try (ResultSet rs = client.executeQuery(sql, params)) { if (rs.next()) { - int serviceId = rs.getInt(ServiceNameTable.COLUMN_SERVICE_ID); - return serviceId; + return rs.getInt(ServiceNameTable.COLUMN_SERVICE_ID); } } catch (SQLException | H2ClientException e) { logger.error(e.getMessage(), e); diff --git a/apm-collector/apm-collector-client/src/main/java/org/skywalking/apm/collector/client/h2/H2Client.java b/apm-collector/apm-collector-client/src/main/java/org/skywalking/apm/collector/client/h2/H2Client.java index 0a28d0880..8b0b9f22e 100644 --- a/apm-collector/apm-collector-client/src/main/java/org/skywalking/apm/collector/client/h2/H2Client.java +++ b/apm-collector/apm-collector-client/src/main/java/org/skywalking/apm/collector/client/h2/H2Client.java @@ -19,14 +19,13 @@ package org.skywalking.apm.collector.client.h2; import java.sql.Connection; +import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; -import org.h2.jdbcx.JdbcConnectionPool; import org.h2.util.IOUtils; import org.skywalking.apm.collector.core.client.Client; -import org.skywalking.apm.collector.core.config.SystemConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,32 +36,34 @@ public class H2Client implements Client { private final Logger logger = LoggerFactory.getLogger(H2Client.class); - private JdbcConnectionPool cp; private Connection conn; private String url; private String userName; private String password; public H2Client() { - this.url = "jdbc:h2:" + SystemConfig.DATA_PATH + "/h2"; + this.url = "jdbc:h2:mem:collector"; this.userName = ""; this.password = ""; } + public H2Client(String url, String userName, String password) { + this.url = url; + this.userName = userName; + this.password = password; + } + @Override public void initialize() throws H2ClientException { try { - cp = JdbcConnectionPool. - create(this.url, this.userName, this.password); - conn = cp.getConnection(); + Class.forName("org.h2.Driver"); + conn = DriverManager. + getConnection(this.url, this.userName, this.password); } catch (Exception e) { throw new H2ClientException(e.getMessage(), e); } } @Override public void shutdown() { - if (cp != null) { - cp.dispose(); - } IOUtils.closeSilently(conn); } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/service/ServiceEntryDataDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/service/ServiceEntryDataDefine.java index 2773286af..f16d4025b 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/service/ServiceEntryDataDefine.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/service/ServiceEntryDataDefine.java @@ -38,9 +38,9 @@ public class ServiceEntryDataDefine extends DataDefine { @Override protected void attributeDefine() { addAttribute(0, new Attribute(ServiceEntryTable.COLUMN_ID, AttributeType.STRING, new NonOperation())); - addAttribute(1, new Attribute(ServiceEntryTable.COLUMN_APPLICATION_ID, AttributeType.INTEGER, new NonOperation())); + addAttribute(1, new Attribute(ServiceEntryTable.COLUMN_APPLICATION_ID, AttributeType.INTEGER, new CoverOperation())); addAttribute(2, new Attribute(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID, AttributeType.INTEGER, new CoverOperation())); - addAttribute(3, new Attribute(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME, AttributeType.STRING, new NonOperation())); + addAttribute(3, new Attribute(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME, AttributeType.STRING, new CoverOperation())); addAttribute(4, new Attribute(ServiceEntryTable.COLUMN_REGISTER_TIME, AttributeType.LONG, new NonOperation())); addAttribute(5, new Attribute(ServiceEntryTable.COLUMN_NEWEST_TIME, AttributeType.LONG, new CoverOperation())); } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2Config.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2Config.java new file mode 100644 index 000000000..a467b9cf4 --- /dev/null +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2Config.java @@ -0,0 +1,28 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.storage.h2; + +/** + * @author clevertension + */ +public class StorageH2Config { + public static String URL; + public static String USER_NAME; + public static String PASSWORD; +} diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2ConfigParser.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2ConfigParser.java new file mode 100644 index 000000000..074c531fe --- /dev/null +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2ConfigParser.java @@ -0,0 +1,51 @@ +/* + * 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 + */ + +package org.skywalking.apm.collector.storage.h2; + +import java.util.Map; +import org.skywalking.apm.collector.core.config.ConfigParseException; +import org.skywalking.apm.collector.core.config.SystemConfig; +import org.skywalking.apm.collector.core.module.ModuleConfigParser; +import org.skywalking.apm.collector.core.util.ObjectUtils; +import org.skywalking.apm.collector.core.util.StringUtils; + +/** + * @author pengys5 + */ +public class StorageH2ConfigParser implements ModuleConfigParser { + private static final String URL = "url"; + public static final String USER_NAME = "user_name"; + public static final String PASSWORD = "password"; + + @Override public void parse(Map config) throws ConfigParseException { + if (ObjectUtils.isNotEmpty(config) && StringUtils.isNotEmpty(config.get(URL))) { + StorageH2Config.URL = (String)config.get(URL); + } else { + StorageH2Config.URL = "jdbc:h2:" + SystemConfig.DATA_PATH + "/h2"; + } + if (ObjectUtils.isNotEmpty(config) && StringUtils.isNotEmpty(config.get(USER_NAME))) { + StorageH2Config.USER_NAME = (String)config.get(USER_NAME); + } else { + StorageH2Config.USER_NAME = "sa"; + } + if (ObjectUtils.isNotEmpty(config) && StringUtils.isNotEmpty(config.get(PASSWORD))) { + StorageH2Config.PASSWORD = (String)config.get(PASSWORD); + } + } +} \ No newline at end of file diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2ModuleDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2ModuleDefine.java index 2de18e33a..e4ea3a81c 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2ModuleDefine.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/StorageH2ModuleDefine.java @@ -51,11 +51,11 @@ public class StorageH2ModuleDefine extends StorageModuleDefine { } @Override protected ModuleConfigParser configParser() { - return null; + return new StorageH2ConfigParser(); } @Override protected Client createClient() { - return new H2Client(); + return new H2Client(StorageH2Config.URL, StorageH2Config.USER_NAME, StorageH2Config.PASSWORD); } @Override public StorageInstaller storageInstaller() { diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GlobalTraceH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GlobalTraceH2DAO.java index 6920d915a..7b00d09ea 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GlobalTraceH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GlobalTraceH2DAO.java @@ -66,7 +66,7 @@ public class GlobalTraceH2DAO extends H2DAO implements IGlobalTraceDAO { while (rs.next()) { String segmentId = rs.getString(GlobalTraceTable.COLUMN_SEGMENT_ID); logger.debug("segmentId: {}, global trace id: {}", segmentId, globalTraceId); - segmentIds.add(globalTraceId); + segmentIds.add(segmentId); } } catch (SQLException | H2ClientException e) { logger.error(e.getMessage(), e); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceReferenceDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceReferenceDAO.java index cc67f7ac4..3f267af65 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceReferenceDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceReferenceDAO.java @@ -26,6 +26,4 @@ import java.util.Map; */ public interface IServiceReferenceDAO { Map load(int entryServiceId, long startTime, long endTime); - - Map load(String entryServiceName, int entryApplicationId, long startTime, long endTime); } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentH2DAO.java index 079e2dc12..4421167b1 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentH2DAO.java @@ -18,13 +18,11 @@ package org.skywalking.apm.collector.ui.dao; +import com.google.protobuf.InvalidProtocolBufferException; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Base64; - import org.skywalking.apm.collector.client.h2.H2Client; import org.skywalking.apm.collector.client.h2.H2ClientException; -import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.define.segment.SegmentTable; import org.skywalking.apm.collector.storage.h2.SqlBuilder; import org.skywalking.apm.collector.storage.h2.dao.H2DAO; @@ -32,29 +30,25 @@ import org.skywalking.apm.network.proto.TraceSegmentObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.protobuf.InvalidProtocolBufferException; - /** * @author pengys5, clevertension */ public class SegmentH2DAO extends H2DAO implements ISegmentDAO { private final Logger logger = LoggerFactory.getLogger(SegmentH2DAO.class); private static final String GET_SEGMENT_SQL = "select {0} from {1} where {2} = ?"; + @Override public TraceSegmentObject load(String segmentId) { H2Client client = getClient(); String sql = SqlBuilder.buildSql(GET_SEGMENT_SQL, SegmentTable.COLUMN_DATA_BINARY, - SegmentTable.TABLE, "id"); - Object[] params = new Object[]{segmentId}; + SegmentTable.TABLE, "id"); + Object[] params = new Object[] {segmentId}; try (ResultSet rs = client.executeQuery(sql, params)) { if (rs.next()) { - String dataBinaryBase64 = rs.getString(SegmentTable.COLUMN_DATA_BINARY); - if (StringUtils.isNotEmpty(dataBinaryBase64)) { - byte[] dataBinary = Base64.getDecoder().decode(dataBinaryBase64); - try { - return TraceSegmentObject.parseFrom(dataBinary); - } catch (InvalidProtocolBufferException e) { - logger.error(e.getMessage(), e); - } + byte[] dataBinary = rs.getBytes(SegmentTable.COLUMN_DATA_BINARY); + try { + return TraceSegmentObject.parseFrom(dataBinary); + } catch (InvalidProtocolBufferException e) { + logger.error(e.getMessage(), e); } } } catch (SQLException | H2ClientException e) { diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryH2DAO.java index 664b9ca88..4017b306a 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryH2DAO.java @@ -76,7 +76,7 @@ public class ServiceEntryH2DAO extends H2DAO implements IServiceEntryDAO { while (rs.next()) { int appId = rs.getInt(ServiceEntryTable.COLUMN_APPLICATION_ID); int entryServiceId = rs.getInt(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID); - String applicationCode = ApplicationCache.get(applicationId); + String applicationCode = ApplicationCache.get(appId); String entryServiceName1 = rs.getString(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME); JsonObject row = new JsonObject(); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java index 4a76bc848..00e24144c 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java @@ -29,11 +29,9 @@ import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.metrics.sum.Sum; -import org.skywalking.apm.collector.cache.ServiceIdCache; import org.skywalking.apm.collector.cache.ServiceNameCache; import org.skywalking.apm.collector.core.util.ColumnNameUtils; import org.skywalking.apm.collector.core.util.Const; -import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.define.serviceref.ServiceReferenceTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; import org.slf4j.Logger; @@ -46,30 +44,6 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO private final Logger logger = LoggerFactory.getLogger(ServiceReferenceEsDAO.class); - @Override - public Map load(String entryServiceName, int entryApplicationId, long startTime, long endTime) { - SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ServiceReferenceTable.TABLE); - searchRequestBuilder.setTypes(ServiceReferenceTable.TABLE_TYPE); - searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); - - BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); - boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); - boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); - - int entryServiceId = ServiceIdCache.get(entryApplicationId, entryServiceName); - BoolQueryBuilder entryBoolQuery = QueryBuilders.boolQuery(); - if (entryServiceId != 0) { - entryBoolQuery.should().add(QueryBuilders.matchQuery(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, entryServiceId)); - } - entryBoolQuery.should().add(QueryBuilders.matchQuery(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME, entryApplicationId + Const.ID_SPLIT + entryServiceName)); - boolQuery.must(entryBoolQuery); - - searchRequestBuilder.setQuery(boolQuery); - searchRequestBuilder.setSize(0); - - return load(searchRequestBuilder); - } - @Override public Map load(int entryServiceId, long startTime, long endTime) { SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ServiceReferenceTable.TABLE); searchRequestBuilder.setTypes(ServiceReferenceTable.TABLE_TYPE); @@ -79,7 +53,7 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); - String entryServiceName = ServiceNameCache.get(entryServiceId); + String entryServiceName = ServiceNameCache.getSplitServiceName(ServiceNameCache.get(entryServiceId)); BoolQueryBuilder entryBoolQuery = QueryBuilders.boolQuery(); entryBoolQuery.should().add(QueryBuilders.matchQuery(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, entryServiceId)); entryBoolQuery.should().add(QueryBuilders.matchQuery(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME, entryServiceName)); @@ -131,14 +105,8 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO Sum summary = behindServiceIdBucket.getAggregations().get(ServiceReferenceTable.COLUMN_SUMMARY); Sum costSum = behindServiceIdBucket.getAggregations().get(ServiceReferenceTable.COLUMN_COST_SUMMARY); - String frontServiceName = ServiceNameCache.get(frontServiceId); - if (StringUtils.isNotEmpty(frontServiceName)) { - frontServiceName = frontServiceName.split(Const.ID_SPLIT)[1]; - } - String behindServiceName = ServiceNameCache.get(behindServiceId); - if (StringUtils.isNotEmpty(frontServiceName)) { - behindServiceName = behindServiceName.split(Const.ID_SPLIT)[1]; - } + String frontServiceName = ServiceNameCache.getSplitServiceName(ServiceNameCache.get(frontServiceId)); + String behindServiceName = ServiceNameCache.getSplitServiceName(ServiceNameCache.get(behindServiceId)); JsonObject serviceReference = new JsonObject(); serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID), frontServiceId); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceH2DAO.java index 24b224594..4a4a693eb 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceH2DAO.java @@ -23,13 +23,11 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.LinkedHashMap; import java.util.Map; -import org.skywalking.apm.collector.cache.ServiceIdCache; import org.skywalking.apm.collector.cache.ServiceNameCache; 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.StringUtils; import org.skywalking.apm.collector.storage.define.serviceref.ServiceReferenceTable; import org.skywalking.apm.collector.storage.h2.SqlBuilder; import org.skywalking.apm.collector.storage.h2.dao.H2DAO; @@ -42,50 +40,18 @@ import org.slf4j.LoggerFactory; 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 Map load(String entryServiceName, int entryApplicationId, long startTime, long endTime) { - H2Client client = getClient(); - String sql = SqlBuilder.buildSql(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); - - Object[] params = new Object[] {startTime, endTime, entryServiceName}; - entryServiceName = entryApplicationId + Const.ID_SPLIT + entryServiceName; - int entryServiceId = ServiceIdCache.get(entryApplicationId, entryServiceName); - if (entryServiceId != 0) { - sql = SqlBuilder.buildSql(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}; - } - - return load(client, params, sql); - } + 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}"; @Override public Map load(int entryServiceId, long startTime, long endTime) { H2Client client = getClient(); String sql = SqlBuilder.buildSql(GET_SRV_REF_LOAD1, ServiceReferenceTable.TABLE, - ServiceReferenceTable.COLUMN_TIME_BUCKET, ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME, + ServiceReferenceTable.COLUMN_TIME_BUCKET, ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, 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}; + Object[] params = new Object[] {startTime, endTime, entryServiceId}; return load(client, params, sql); } @@ -109,22 +75,16 @@ public class ServiceReferenceH2DAO extends H2DAO implements IServiceReferenceDAO 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"); + 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); - String frontServiceName = ServiceNameCache.get(frontServiceId); - if (StringUtils.isNotEmpty(frontServiceName)) { - frontServiceName = frontServiceName.split(Const.ID_SPLIT)[1]; - } - String behindServiceName = ServiceNameCache.get(behindServiceId); - if (StringUtils.isNotEmpty(frontServiceName)) { - behindServiceName = behindServiceName.split(Const.ID_SPLIT)[1]; - } + String frontServiceName = ServiceNameCache.getSplitServiceName(ServiceNameCache.get(frontServiceId)); + String behindServiceName = ServiceNameCache.getSplitServiceName(ServiceNameCache.get(behindServiceId)); JsonObject serviceReference = new JsonObject(); serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID), frontServiceId); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyModuleDefine.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyModuleDefine.java index a0ab797a8..1103e391e 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyModuleDefine.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyModuleDefine.java @@ -39,7 +39,6 @@ import org.skywalking.apm.collector.ui.jetty.handler.instancemetric.InstanceMetr import org.skywalking.apm.collector.ui.jetty.handler.instancemetric.InstanceOsInfoGetHandler; import org.skywalking.apm.collector.ui.jetty.handler.servicetree.EntryServiceGetHandler; import org.skywalking.apm.collector.ui.jetty.handler.servicetree.ServiceTreeGetByIdHandler; -import org.skywalking.apm.collector.ui.jetty.handler.servicetree.ServiceTreeGetByNameHandler; import org.skywalking.apm.collector.ui.jetty.handler.time.AllInstanceLastTimeGetHandler; import org.skywalking.apm.collector.ui.jetty.handler.time.OneInstanceLastTimeGetHandler; @@ -89,7 +88,6 @@ public class UIJettyModuleDefine extends UIModuleDefine { handlers.add(new InstanceMetricGetRangeTimeBucketHandler()); handlers.add(new EntryServiceGetHandler()); handlers.add(new ServiceTreeGetByIdHandler()); - handlers.add(new ServiceTreeGetByNameHandler()); return handlers; } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/ServiceTreeGetByNameHandler.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/ServiceTreeGetByNameHandler.java deleted file mode 100644 index 41b36dee4..000000000 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/ServiceTreeGetByNameHandler.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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 - */ - -package org.skywalking.apm.collector.ui.jetty.handler.servicetree; - -import com.google.gson.JsonElement; -import javax.servlet.http.HttpServletRequest; -import org.skywalking.apm.collector.server.jetty.ArgumentsParseException; -import org.skywalking.apm.collector.server.jetty.JettyHandler; -import org.skywalking.apm.collector.ui.service.ServiceTreeService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author pengys5 - */ -public class ServiceTreeGetByNameHandler extends JettyHandler { - - private final Logger logger = LoggerFactory.getLogger(ServiceTreeGetByNameHandler.class); - - @Override public String pathSpec() { - return "/service/tree/entryServiceName"; - } - - private ServiceTreeService service = new ServiceTreeService(); - - @Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException { - if (!req.getParameterMap().containsKey("entryServiceName") || !req.getParameterMap().containsKey("entryApplicationId") || !req.getParameterMap().containsKey("startTime") || !req.getParameterMap().containsKey("endTime")) { - throw new ArgumentsParseException("must contains parameters: entryServiceName, entryApplicationId, startTime, endTime"); - } - - String entryServiceName = req.getParameter("entryServiceName"); - String entryApplicationIdStr = req.getParameter("entryApplicationId"); - String startTimeStr = req.getParameter("startTime"); - String endTimeStr = req.getParameter("endTime"); - logger.debug("service entry get entryServiceName: {}, startTime: {}, endTime: {}", entryServiceName, startTimeStr, endTimeStr); - - int entryApplicationId; - try { - entryApplicationId = Integer.parseInt(entryApplicationIdStr); - } catch (NumberFormatException e) { - throw new ArgumentsParseException("entry application id must be integer"); - } - - long startTime; - try { - startTime = Long.parseLong(startTimeStr); - } catch (NumberFormatException e) { - throw new ArgumentsParseException("start time must be long"); - } - - long endTime; - try { - endTime = Long.parseLong(endTimeStr); - } catch (NumberFormatException e) { - throw new ArgumentsParseException("end time must be long"); - } - - return service.loadServiceTree(entryServiceName, entryApplicationId, startTime, endTime); - } - - @Override protected JsonElement doPost(HttpServletRequest req) throws ArgumentsParseException { - throw new UnsupportedOperationException(); - } -} diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/ServiceTreeService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/ServiceTreeService.java index 5ca0938d4..ef966e3d1 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/ServiceTreeService.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/ServiceTreeService.java @@ -47,12 +47,6 @@ public class ServiceTreeService { return buildTreeData(serviceReferenceMap); } - public JsonArray loadServiceTree(String entryServiceName, int entryApplicationId, long startTime, long endTime) { - IServiceReferenceDAO serviceReferenceDAO = (IServiceReferenceDAO)DAOContainer.INSTANCE.get(IServiceReferenceDAO.class.getName()); - Map serviceReferenceMap = serviceReferenceDAO.load(entryServiceName, entryApplicationId, startTime, endTime); - return buildTreeData(serviceReferenceMap); - } - private JsonArray buildTreeData(Map serviceReferenceMap) { JsonArray serviceReferenceArray = new JsonArray(); JsonObject rootServiceReference = findRoot(serviceReferenceMap); From 5ae51d2fc37ae53aa56e450fe85104451eadf919 Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sat, 21 Oct 2017 09:03:22 +0800 Subject: [PATCH 5/7] Fixed check style error. --- .../agentstream/worker/segment/buffer/OffsetManager.java | 6 +----- .../worker/segment/buffer/SegmentBufferReader.java | 6 +----- .../segment/standardization/ReferenceIdExchanger.java | 8 ++++---- .../worker/segment/standardization/SpanIdExchanger.java | 8 ++++---- 4 files changed, 10 insertions(+), 18 deletions(-) diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManager.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManager.java index e895b52c0..c2e64b34d 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManager.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManager.java @@ -142,11 +142,7 @@ public enum OffsetManager { class PrefixFileNameFilter implements FilenameFilter { @Override public boolean accept(File dir, String name) { - if (name.startsWith(OFFSET_FILE_PREFIX)) { - return true; - } else { - return false; - } + return name.startsWith(OFFSET_FILE_PREFIX); } } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferReader.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferReader.java index 775c6c9d6..3fd3f7db6 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferReader.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/SegmentBufferReader.java @@ -141,11 +141,7 @@ public enum SegmentBufferReader { class PrefixFileNameFilter implements FilenameFilter { @Override public boolean accept(File dir, String name) { - if (name.startsWith(SegmentBufferManager.DATA_FILE_PREFIX)) { - return true; - } else { - return false; - } + return name.startsWith(SegmentBufferManager.DATA_FILE_PREFIX); } } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/ReferenceIdExchanger.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/ReferenceIdExchanger.java index 683ba5ff3..10b43955c 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/ReferenceIdExchanger.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/ReferenceIdExchanger.java @@ -33,13 +33,13 @@ public class ReferenceIdExchanger implements IdExchanger { private final Logger logger = LoggerFactory.getLogger(ReferenceIdExchanger.class); - private static ReferenceIdExchanger exchanger; + private static ReferenceIdExchanger EXCHANGER; public static ReferenceIdExchanger getInstance() { - if (exchanger == null) { - exchanger = new ReferenceIdExchanger(); + if (EXCHANGER == null) { + EXCHANGER = new ReferenceIdExchanger(); } - return exchanger; + return EXCHANGER; } @Override public boolean exchange(ReferenceDecorator standardBuilder, int applicationId) { diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SpanIdExchanger.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SpanIdExchanger.java index 2ab1c056f..b06a1c540 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SpanIdExchanger.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/standardization/SpanIdExchanger.java @@ -28,13 +28,13 @@ import org.skywalking.apm.collector.core.util.StringUtils; */ public class SpanIdExchanger implements IdExchanger { - private static SpanIdExchanger exchanger; + private static SpanIdExchanger EXCHANGER; public static SpanIdExchanger getInstance() { - if (exchanger == null) { - exchanger = new SpanIdExchanger(); + if (EXCHANGER == null) { + EXCHANGER = new SpanIdExchanger(); } - return exchanger; + return EXCHANGER; } @Override public boolean exchange(SpanDecorator standardBuilder, int applicationId) { From 60f94213df5d8dd542251b150130488cba31b393 Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sat, 21 Oct 2017 09:40:43 +0800 Subject: [PATCH 6/7] Fixed the suggest of review. --- .../servicename/ServiceNameService.java | 4 +-- .../ApplicationRegisterSerialWorker.java | 3 +- .../ServiceNameRegisterSerialWorker.java | 3 +- .../agentstream/mock/SegmentPost.java | 4 --- .../segment/buffer/OffsetManagerTestCase.java | 31 ------------------- .../apm/collector/cache/ApplicationCache.java | 6 ++-- .../apm/collector/cache/InstanceCache.java | 4 +-- .../apm/collector/cache/ServiceIdCache.java | 4 +-- .../apm/collector/cache/ServiceNameCache.java | 4 +-- ...nEsDAO.java => ApplicationEsCacheDAO.java} | 4 +-- ...nH2DAO.java => ApplicationH2CacheDAO.java} | 23 +++++++++----- ...tionDAO.java => IApplicationCacheDAO.java} | 2 +- ...nstanceDAO.java => IInstanceCacheDAO.java} | 2 +- ...NameDAO.java => IServiceNameCacheDAO.java} | 2 +- ...anceEsDAO.java => InstanceEsCacheDAO.java} | 4 +-- ...anceH2DAO.java => InstanceH2CacheDAO.java} | 4 +-- ...eEsDAO.java => ServiceNameEsCacheDAO.java} | 2 +- ...eH2DAO.java => ServiceNameH2CacheDAO.java} | 4 +-- .../apm/collector/storage/h2/dao/H2DAO.java | 9 +++--- 19 files changed, 47 insertions(+), 72 deletions(-) delete mode 100644 apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManagerTestCase.java rename apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/{ApplicationEsDAO.java => ApplicationEsCacheDAO.java} (96%) rename apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/{ApplicationH2DAO.java => ApplicationH2CacheDAO.java} (68%) rename apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/{IApplicationDAO.java => IApplicationCacheDAO.java} (95%) rename apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/{IInstanceDAO.java => IInstanceCacheDAO.java} (95%) rename apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/{IServiceNameDAO.java => IServiceNameCacheDAO.java} (95%) rename apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/{InstanceEsDAO.java => InstanceEsCacheDAO.java} (93%) rename apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/{InstanceH2DAO.java => InstanceH2CacheDAO.java} (95%) rename apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/{ServiceNameEsDAO.java => ServiceNameEsCacheDAO.java} (97%) rename apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/{ServiceNameH2DAO.java => ServiceNameH2CacheDAO.java} (96%) diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/servicename/ServiceNameService.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/servicename/ServiceNameService.java index 2afb23346..fa0a0de23 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/servicename/ServiceNameService.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/servicename/ServiceNameService.java @@ -19,7 +19,7 @@ package org.skywalking.apm.collector.agentregister.servicename; import org.skywalking.apm.collector.agentregister.worker.servicename.ServiceNameRegisterRemoteWorker; -import org.skywalking.apm.collector.cache.dao.IServiceNameDAO; +import org.skywalking.apm.collector.cache.dao.IServiceNameCacheDAO; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.storage.dao.DAOContainer; import org.skywalking.apm.collector.storage.define.register.ServiceNameDataDefine; @@ -38,7 +38,7 @@ public class ServiceNameService { private final Logger logger = LoggerFactory.getLogger(ServiceNameService.class); public int getOrCreate(int applicationId, String serviceName) { - IServiceNameDAO dao = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); + IServiceNameCacheDAO dao = (IServiceNameCacheDAO)DAOContainer.INSTANCE.get(IServiceNameCacheDAO.class.getName()); int serviceId = dao.getServiceId(applicationId, serviceName); if (serviceId == 0) { diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/ApplicationRegisterSerialWorker.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/ApplicationRegisterSerialWorker.java index 79829571d..fcfd356e2 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/ApplicationRegisterSerialWorker.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/ApplicationRegisterSerialWorker.java @@ -20,6 +20,7 @@ package org.skywalking.apm.collector.agentregister.worker.application; import org.skywalking.apm.collector.agentregister.worker.IdAutoIncrement; import org.skywalking.apm.collector.agentregister.worker.application.dao.IApplicationDAO; +import org.skywalking.apm.collector.cache.dao.IApplicationCacheDAO; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.storage.dao.DAOContainer; import org.skywalking.apm.collector.storage.define.DataDefine; @@ -55,7 +56,7 @@ public class ApplicationRegisterSerialWorker extends AbstractLocalAsyncWorker { ApplicationDataDefine.Application application = (ApplicationDataDefine.Application)message; logger.debug("register application, application code: {}", application.getApplicationCode()); - org.skywalking.apm.collector.cache.dao.IApplicationDAO cacheDao = (org.skywalking.apm.collector.cache.dao.IApplicationDAO)DAOContainer.INSTANCE.get(org.skywalking.apm.collector.cache.dao.IApplicationDAO.class.getName()); + IApplicationCacheDAO cacheDao = (IApplicationCacheDAO)DAOContainer.INSTANCE.get(IApplicationCacheDAO.class.getName()); int applicationId = cacheDao.getApplicationId(application.getApplicationCode()); IApplicationDAO dao = (IApplicationDAO)DAOContainer.INSTANCE.get(IApplicationDAO.class.getName()); diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/ServiceNameRegisterSerialWorker.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/ServiceNameRegisterSerialWorker.java index 59bcd0280..396542d39 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/ServiceNameRegisterSerialWorker.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/ServiceNameRegisterSerialWorker.java @@ -20,6 +20,7 @@ package org.skywalking.apm.collector.agentregister.worker.servicename; import org.skywalking.apm.collector.agentregister.worker.IdAutoIncrement; import org.skywalking.apm.collector.agentregister.worker.servicename.dao.IServiceNameDAO; +import org.skywalking.apm.collector.cache.dao.IServiceNameCacheDAO; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.storage.dao.DAOContainer; import org.skywalking.apm.collector.storage.define.DataDefine; @@ -55,7 +56,7 @@ public class ServiceNameRegisterSerialWorker extends AbstractLocalAsyncWorker { ServiceNameDataDefine.ServiceName serviceName = (ServiceNameDataDefine.ServiceName)message; logger.debug("register service name: {}, application id: {}", serviceName.getServiceName(), serviceName.getApplicationId()); - org.skywalking.apm.collector.cache.dao.IServiceNameDAO cacheDao = (org.skywalking.apm.collector.cache.dao.IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); + IServiceNameCacheDAO cacheDao = (IServiceNameCacheDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); int serviceId = cacheDao.getServiceId(serviceName.getApplicationId(), serviceName.getServiceName()); IServiceNameDAO dao = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); diff --git a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java index 3675883b1..f93be5463 100644 --- a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java +++ b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java @@ -135,8 +135,4 @@ public class SegmentPost { return osInfoJson; } - - private void newDao() { - - } } diff --git a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManagerTestCase.java b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManagerTestCase.java deleted file mode 100644 index 36cb156ac..000000000 --- a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManagerTestCase.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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 - */ - -package org.skywalking.apm.collector.agentstream.worker.segment.buffer; - -import org.junit.Test; - -/** - * @author pengys5 - */ -public class OffsetManagerTestCase { - - @Test - public void test() { - } -} diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ApplicationCache.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ApplicationCache.java index 8bf3476ad..fda776f3b 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ApplicationCache.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ApplicationCache.java @@ -20,7 +20,7 @@ package org.skywalking.apm.collector.cache; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import org.skywalking.apm.collector.cache.dao.IApplicationDAO; +import org.skywalking.apm.collector.cache.dao.IApplicationCacheDAO; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.dao.DAOContainer; @@ -37,7 +37,7 @@ public class ApplicationCache { private static Cache CODE_CACHE = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(1000).build(); public static int get(String applicationCode) { - IApplicationDAO dao = (IApplicationDAO)DAOContainer.INSTANCE.get(IApplicationDAO.class.getName()); + IApplicationCacheDAO dao = (IApplicationCacheDAO)DAOContainer.INSTANCE.get(IApplicationCacheDAO.class.getName()); int applicationId = 0; try { @@ -58,7 +58,7 @@ public class ApplicationCache { private static Cache ID_CACHE = CacheBuilder.newBuilder().maximumSize(1000).build(); public static String get(int applicationId) { - IApplicationDAO dao = (IApplicationDAO)DAOContainer.INSTANCE.get(IApplicationDAO.class.getName()); + IApplicationCacheDAO dao = (IApplicationCacheDAO)DAOContainer.INSTANCE.get(IApplicationCacheDAO.class.getName()); String applicationCode = Const.EMPTY_STRING; try { diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/InstanceCache.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/InstanceCache.java index 92511a268..8095c609b 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/InstanceCache.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/InstanceCache.java @@ -20,7 +20,7 @@ package org.skywalking.apm.collector.cache; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import org.skywalking.apm.collector.cache.dao.IInstanceDAO; +import org.skywalking.apm.collector.cache.dao.IInstanceCacheDAO; import org.skywalking.apm.collector.storage.dao.DAOContainer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,7 +35,7 @@ public class InstanceCache { private static Cache INSTANCE_CACHE = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(5000).build(); public static int get(int applicationInstanceId) { - IInstanceDAO dao = (IInstanceDAO)DAOContainer.INSTANCE.get(IInstanceDAO.class.getName()); + IInstanceCacheDAO dao = (IInstanceCacheDAO)DAOContainer.INSTANCE.get(IInstanceCacheDAO.class.getName()); int applicationId = 0; try { diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceIdCache.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceIdCache.java index 1688f5166..4cb266093 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceIdCache.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceIdCache.java @@ -20,7 +20,7 @@ package org.skywalking.apm.collector.cache; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import org.skywalking.apm.collector.cache.dao.IServiceNameDAO; +import org.skywalking.apm.collector.cache.dao.IServiceNameCacheDAO; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.storage.dao.DAOContainer; import org.slf4j.Logger; @@ -37,7 +37,7 @@ public class ServiceIdCache { private static Cache SERVICE_CACHE = CacheBuilder.newBuilder().maximumSize(1000).build(); public static int get(int applicationId, String serviceName) { - IServiceNameDAO dao = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); + IServiceNameCacheDAO dao = (IServiceNameCacheDAO)DAOContainer.INSTANCE.get(IServiceNameCacheDAO.class.getName()); int serviceId = 0; try { diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java index cf5ed591d..16d1766b3 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java @@ -20,7 +20,7 @@ package org.skywalking.apm.collector.cache; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import org.skywalking.apm.collector.cache.dao.IServiceNameDAO; +import org.skywalking.apm.collector.cache.dao.IServiceNameCacheDAO; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.dao.DAOContainer; @@ -38,7 +38,7 @@ public class ServiceNameCache { private static Cache CACHE = CacheBuilder.newBuilder().maximumSize(10000).build(); public static String get(int serviceId) { - IServiceNameDAO dao = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); + IServiceNameCacheDAO dao = (IServiceNameCacheDAO)DAOContainer.INSTANCE.get(IServiceNameCacheDAO.class.getName()); String serviceName = Const.EMPTY_STRING; try { diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationEsDAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationEsCacheDAO.java similarity index 96% rename from apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationEsDAO.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationEsCacheDAO.java index c019fccaa..cfd14a85b 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationEsDAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationEsCacheDAO.java @@ -35,9 +35,9 @@ import org.slf4j.LoggerFactory; /** * @author pengys5 */ -public class ApplicationEsDAO extends EsDAO implements IApplicationDAO { +public class ApplicationEsCacheDAO extends EsDAO implements IApplicationCacheDAO { - private final Logger logger = LoggerFactory.getLogger(ApplicationEsDAO.class); + private final Logger logger = LoggerFactory.getLogger(ApplicationEsCacheDAO.class); @Override public int getApplicationId(String applicationCode) { ElasticSearchClient client = getClient(); diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationH2DAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationH2CacheDAO.java similarity index 68% rename from apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationH2DAO.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationH2CacheDAO.java index dbf9d70c9..a22acbc13 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationH2DAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ApplicationH2CacheDAO.java @@ -32,23 +32,32 @@ import org.slf4j.LoggerFactory; /** * @author pengys5, clevertension */ -public class ApplicationH2DAO extends H2DAO implements IApplicationDAO { +public class ApplicationH2CacheDAO extends H2DAO implements IApplicationCacheDAO { - private final Logger logger = LoggerFactory.getLogger(ApplicationH2DAO.class); - private static final String GET_APPLICATION_CODE_SQL = "select {0} from {1} where {2} = ?"; + private final Logger logger = LoggerFactory.getLogger(ApplicationH2CacheDAO.class); + private static final String GET_APPLICATION_ID_OR_CODE_SQL = "select {0} from {1} where {2} = ?"; @Override public int getApplicationId(String applicationCode) { logger.info("get the application id with application code = {}", applicationCode); - String sql = "select " + ApplicationTable.COLUMN_APPLICATION_ID + " from " + - ApplicationTable.TABLE + " where " + ApplicationTable.COLUMN_APPLICATION_CODE + "='" + applicationCode + "'"; - return getIntValueBySQL(sql); + H2Client client = getClient(); + String sql = SqlBuilder.buildSql(GET_APPLICATION_ID_OR_CODE_SQL, ApplicationTable.COLUMN_APPLICATION_ID, ApplicationTable.TABLE, ApplicationTable.COLUMN_APPLICATION_CODE); + + Object[] params = new Object[] {applicationCode}; + try (ResultSet rs = client.executeQuery(sql, params)) { + if (rs.next()) { + return rs.getInt(1); + } + } catch (SQLException | H2ClientException e) { + logger.error(e.getMessage(), e); + } + return 0; } @Override public String getApplicationCode(int applicationId) { logger.debug("get application code, applicationId: {}", applicationId); H2Client client = getClient(); - String sql = SqlBuilder.buildSql(GET_APPLICATION_CODE_SQL, ApplicationTable.COLUMN_APPLICATION_CODE, ApplicationTable.TABLE, ApplicationTable.COLUMN_APPLICATION_ID); + String sql = SqlBuilder.buildSql(GET_APPLICATION_ID_OR_CODE_SQL, ApplicationTable.COLUMN_APPLICATION_CODE, ApplicationTable.TABLE, ApplicationTable.COLUMN_APPLICATION_ID); Object[] params = new Object[] {applicationId}; try (ResultSet rs = client.executeQuery(sql, params)) { if (rs.next()) { diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IApplicationDAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IApplicationCacheDAO.java similarity index 95% rename from apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IApplicationDAO.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IApplicationCacheDAO.java index 4b0bb4525..54d1576ad 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IApplicationDAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IApplicationCacheDAO.java @@ -21,7 +21,7 @@ package org.skywalking.apm.collector.cache.dao; /** * @author pengys5 */ -public interface IApplicationDAO { +public interface IApplicationCacheDAO { int getApplicationId(String applicationCode); String getApplicationCode(int applicationId); diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IInstanceDAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IInstanceCacheDAO.java similarity index 95% rename from apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IInstanceDAO.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IInstanceCacheDAO.java index 281f947f1..fcd34b8f5 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IInstanceDAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IInstanceCacheDAO.java @@ -21,6 +21,6 @@ package org.skywalking.apm.collector.cache.dao; /** * @author pengys5 */ -public interface IInstanceDAO { +public interface IInstanceCacheDAO { int getApplicationId(int applicationInstanceId); } diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IServiceNameDAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IServiceNameCacheDAO.java similarity index 95% rename from apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IServiceNameDAO.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IServiceNameCacheDAO.java index eede2558c..bbf81981b 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IServiceNameDAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/IServiceNameCacheDAO.java @@ -21,7 +21,7 @@ package org.skywalking.apm.collector.cache.dao; /** * @author pengys5 */ -public interface IServiceNameDAO { +public interface IServiceNameCacheDAO { String getServiceName(int serviceId); int getServiceId(int applicationId, String serviceName); diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceEsDAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceEsCacheDAO.java similarity index 93% rename from apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceEsDAO.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceEsCacheDAO.java index abc9b4133..a878901f9 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceEsDAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceEsCacheDAO.java @@ -27,9 +27,9 @@ import org.slf4j.LoggerFactory; /** * @author pengys5 */ -public class InstanceEsDAO extends EsDAO implements IInstanceDAO { +public class InstanceEsCacheDAO extends EsDAO implements IInstanceCacheDAO { - private final Logger logger = LoggerFactory.getLogger(InstanceEsDAO.class); + private final Logger logger = LoggerFactory.getLogger(InstanceEsCacheDAO.class); @Override public int getApplicationId(int applicationInstanceId) { GetResponse response = getClient().prepareGet(InstanceTable.TABLE, String.valueOf(applicationInstanceId)).get(); diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceH2DAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceH2CacheDAO.java similarity index 95% rename from apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceH2DAO.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceH2CacheDAO.java index 2b4ce8256..d1a884236 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceH2DAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/InstanceH2CacheDAO.java @@ -31,9 +31,9 @@ import org.slf4j.LoggerFactory; /** * @author pengys5 */ -public class InstanceH2DAO extends H2DAO implements IInstanceDAO { +public class InstanceH2CacheDAO extends H2DAO implements IInstanceCacheDAO { - private final Logger logger = LoggerFactory.getLogger(InstanceH2DAO.class); + private final Logger logger = LoggerFactory.getLogger(InstanceH2CacheDAO.class); private static final String GET_APPLICATION_ID_SQL = "select {0} from {1} where {2} = ?"; diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameEsDAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameEsCacheDAO.java similarity index 97% rename from apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameEsDAO.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameEsCacheDAO.java index 83a922b7a..820b12020 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameEsDAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameEsCacheDAO.java @@ -33,7 +33,7 @@ import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; /** * @author pengys5 */ -public class ServiceNameEsDAO extends EsDAO implements IServiceNameDAO { +public class ServiceNameEsCacheDAO extends EsDAO implements IServiceNameCacheDAO { @Override public String getServiceName(int serviceId) { GetRequestBuilder getRequestBuilder = getClient().prepareGet(ServiceNameTable.TABLE, String.valueOf(serviceId)); diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameH2DAO.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameH2CacheDAO.java similarity index 96% rename from apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameH2DAO.java rename to apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameH2CacheDAO.java index 9584be027..b3befc259 100644 --- a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameH2DAO.java +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/dao/ServiceNameH2CacheDAO.java @@ -32,9 +32,9 @@ import org.slf4j.LoggerFactory; /** * @author pengys5, clevertension */ -public class ServiceNameH2DAO extends H2DAO implements IServiceNameDAO { +public class ServiceNameH2CacheDAO extends H2DAO implements IServiceNameCacheDAO { - private final Logger logger = LoggerFactory.getLogger(ServiceNameH2DAO.class); + private final Logger logger = LoggerFactory.getLogger(ServiceNameH2CacheDAO.class); private static final String GET_SERVICE_NAME_SQL = "select {0},{1} from {2} where {3} = ?"; private static final String GET_SERVICE_ID_SQL = "select {0} from {1} where {2} = ? and {3} = ? limit 1"; diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/dao/H2DAO.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/dao/H2DAO.java index 39dbc78e0..fd66357bf 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/dao/H2DAO.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/dao/H2DAO.java @@ -20,7 +20,6 @@ package org.skywalking.apm.collector.storage.h2.dao; import java.sql.ResultSet; import java.sql.SQLException; - import org.skywalking.apm.collector.client.h2.H2Client; import org.skywalking.apm.collector.client.h2.H2ClientException; import org.skywalking.apm.collector.storage.dao.DAO; @@ -32,17 +31,18 @@ import org.slf4j.LoggerFactory; */ public abstract class H2DAO extends DAO { private final Logger logger = LoggerFactory.getLogger(H2DAO.class); - public final int getMaxId(String tableName, String columnName) { + + protected final int getMaxId(String tableName, String columnName) { String sql = "select max(" + columnName + ") from " + tableName; return getIntValueBySQL(sql); } - public final int getMinId(String tableName, String columnName) { + protected final int getMinId(String tableName, String columnName) { String sql = "select min(" + columnName + ") from " + tableName; return getIntValueBySQL(sql); } - public final int getIntValueBySQL(String sql) { + private int getIntValueBySQL(String sql) { H2Client client = getClient(); try (ResultSet rs = client.executeQuery(sql, null)) { if (rs.next()) { @@ -58,5 +58,4 @@ public abstract class H2DAO extends DAO { } return 0; } - } From 6208b9cb44a0fc5c5c66d6ce5b6aef7870d85511 Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sat, 21 Oct 2017 10:22:57 +0800 Subject: [PATCH 7/7] Change the file name. --- .../agentstream/worker/segment/buffer/OffsetManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManager.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManager.java index c2e64b34d..58afe2505 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManager.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/buffer/OffsetManager.java @@ -90,14 +90,14 @@ public enum OffsetManager { String offsetRecord = offset.serialize(); if (!lastOffsetRecord.equals(offsetRecord)) { if (offsetFile.length() >= BufferFileConfig.BUFFER_OFFSET_MAX_FILE_SIZE) { - exchangeFile(); + nextFile(); } FileUtils.INSTANCE.writeAppendToLast(offsetFile, randomAccessFile, offsetRecord); lastOffsetRecord = offsetRecord; } } - private void exchangeFile() { + private void nextFile() { String timeBucket = String.valueOf(TimeBucketUtils.INSTANCE.getSecondTimeBucket(System.currentTimeMillis())); String offsetFileName = OFFSET_FILE_PREFIX + "_" + timeBucket + "." + Const.FILE_SUFFIX; File newOffsetFile = new File(SegmentBufferConfig.BUFFER_PATH + offsetFileName);