Add cache service
This commit is contained in:
parent
4ae9e5737d
commit
4a77986b91
|
|
@ -12,4 +12,16 @@
|
|||
<artifactId>apm-collector-cache</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.skywalking</groupId>
|
||||
<artifactId>apm-collector-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skywalking</groupId>
|
||||
<artifactId>collector-storage-define</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
@ -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<String, Integer> 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<Integer, String> 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Integer, Integer> 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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<String, Integer> 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Integer, String> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue