From 4a77986b916ef810cd7555eeba892c0538fe25f9 Mon Sep 17 00:00:00 2001
From: peng-yongsheng <8082209@qq.com>
Date: Wed, 1 Nov 2017 20:37:02 +0800
Subject: [PATCH] Add cache service
---
apm-collector/apm-collector-cache/pom.xml | 12 +++
.../apm/collector/cache/ApplicationCache.java | 78 +++++++++++++++++++
.../apm/collector/cache/InstanceCache.java | 55 +++++++++++++
.../apm/collector/cache/ServiceIdCache.java | 57 ++++++++++++++
.../apm/collector/cache/ServiceNameCache.java | 72 +++++++++++++++++
5 files changed, 274 insertions(+)
create mode 100644 apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ApplicationCache.java
create mode 100644 apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/InstanceCache.java
create mode 100644 apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceIdCache.java
create mode 100644 apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java
diff --git a/apm-collector/apm-collector-cache/pom.xml b/apm-collector/apm-collector-cache/pom.xml
index 5bc4af1598..e901f5e278 100644
--- a/apm-collector/apm-collector-cache/pom.xml
+++ b/apm-collector/apm-collector-cache/pom.xml
@@ -12,4 +12,16 @@
apm-collector-cache
jar
+
+
+ org.skywalking
+ apm-collector-core
+ ${project.version}
+
+
+ org.skywalking
+ collector-storage-define
+ ${project.version}
+
+
\ No newline at end of file
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
new file mode 100644
index 0000000000..cbf2357692
--- /dev/null
+++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ApplicationCache.java
@@ -0,0 +1,78 @@
+/*
+ * 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;
+
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+import org.skywalking.apm.collector.core.util.Const;
+import org.skywalking.apm.collector.core.util.StringUtils;
+import org.skywalking.apm.collector.storage.base.dao.DAOContainer;
+import org.skywalking.apm.collector.storage.dao.IApplicationCacheDAO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author peng-yongsheng
+ */
+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) {
+ IApplicationCacheDAO dao = (IApplicationCacheDAO)DAOContainer.INSTANCE.get(IApplicationCacheDAO.class.getName());
+
+ int applicationId = 0;
+ try {
+ applicationId = CODE_CACHE.get(applicationCode, () -> dao.getApplicationId(applicationCode));
+ } catch (Throwable e) {
+ logger.error(e.getMessage(), e);
+ }
+
+ if (applicationId == 0) {
+ 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) {
+ IApplicationCacheDAO dao = (IApplicationCacheDAO)DAOContainer.INSTANCE.get(IApplicationCacheDAO.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);
+ 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
new file mode 100644
index 0000000000..07a818dbcc
--- /dev/null
+++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/InstanceCache.java
@@ -0,0 +1,55 @@
+/*
+ * 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;
+
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+import org.skywalking.apm.collector.storage.base.dao.DAOContainer;
+import org.skywalking.apm.collector.storage.dao.IInstanceCacheDAO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author peng-yongsheng
+ */
+public class InstanceCache {
+
+ 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) {
+ IInstanceCacheDAO dao = (IInstanceCacheDAO)DAOContainer.INSTANCE.get(IInstanceCacheDAO.class.getName());
+
+ int applicationId = 0;
+ try {
+ applicationId = INSTANCE_CACHE.get(applicationInstanceId, () -> dao.getApplicationId(applicationInstanceId));
+ } catch (Throwable e) {
+ 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
new file mode 100644
index 0000000000..14f1d5a46b
--- /dev/null
+++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceIdCache.java
@@ -0,0 +1,57 @@
+/*
+ * 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;
+
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+import org.skywalking.apm.collector.core.util.Const;
+import org.skywalking.apm.collector.storage.base.dao.DAOContainer;
+import org.skywalking.apm.collector.storage.dao.IServiceNameCacheDAO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author peng-yongsheng
+ */
+public class ServiceIdCache {
+
+ private static final Logger logger = LoggerFactory.getLogger(ServiceIdCache.class);
+
+ //TODO size configuration
+ private static Cache SERVICE_CACHE = CacheBuilder.newBuilder().maximumSize(1000).build();
+
+ public static int get(int applicationId, String serviceName) {
+ IServiceNameCacheDAO dao = (IServiceNameCacheDAO)DAOContainer.INSTANCE.get(IServiceNameCacheDAO.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);
+ }
+
+ if (serviceId == 0) {
+ serviceId = dao.getServiceId(applicationId, serviceName);
+ 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
new file mode 100644
index 0000000000..528f783c8d
--- /dev/null
+++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java
@@ -0,0 +1,72 @@
+/*
+ * 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;
+
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+import org.skywalking.apm.collector.core.util.Const;
+import org.skywalking.apm.collector.core.util.StringUtils;
+import org.skywalking.apm.collector.storage.base.dao.DAOContainer;
+import org.skywalking.apm.collector.storage.dao.IServiceNameCacheDAO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author peng-yongsheng
+ */
+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) {
+ IServiceNameCacheDAO dao = (IServiceNameCacheDAO)DAOContainer.INSTANCE.get(IServiceNameCacheDAO.class.getName());
+
+ 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;
+ }
+
+ 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;
+ }
+ }
+}
--
GitLab