Merge branch 'master' into develop
This commit is contained in:
commit
03d9b48dc4
12
README.md
12
README.md
|
|
@ -6,13 +6,13 @@ Sky Walking | [中文](README_ZH.md)
|
|||
**SkyWalking 3**: APM for Distributed Systems, also known Distributed Tracing System.
|
||||
|
||||
[](https://travis-ci.org/OpenSkywalking/skywalking)
|
||||
[](https://coveralls.io/github/OpenSkywalking/skywalking?branch=master)
|
||||
[](https://coveralls.io/github/OpenSkywalking/skywalking?branch=master)
|
||||
[](https://gitter.im/openskywalking/Lobby)
|
||||
[](http://opentracing.io)
|
||||
|
||||
* Provide Java agent, **no need to CHANGE any application source code**.
|
||||
* High performance agent. Only increase extra **10%** cpu cost in 5000+ tps application, even **When collect all traces**, [check test reports](#test-reports).
|
||||
* [Supported middlewares, frameworks and libraries](https://github.com/OpenSkywalking/sky-walking/wiki/3.2-supported-list).
|
||||
* High performance agent. Only increase extra **10%** cpu cost in 5000+ tps application, even **when collect all traces**.
|
||||
* [Supported middlewares, frameworks and libraries](docs/Supported-list.md).
|
||||
* Manual instrumentation
|
||||
* As an [OpenTracing supported tracer](http://opentracing.io/documentation/pages/supported-tracers)
|
||||
* Use **@Trace** annotation for any methods you want to trace.
|
||||
|
|
@ -21,11 +21,11 @@ Sky Walking | [中文](README_ZH.md)
|
|||
* The UI released on [skywalking-ui](https://github.com/OpenSkywalking/sky-walking-ui)
|
||||
|
||||
# Architecture
|
||||
* Architecture graph for 3.2+
|
||||
<img src="https://skywalkingtest.github.io/page-resources/3.x-architecture.jpg"/>
|
||||
* Architecture graph for 3.2.5+
|
||||
<img src="https://skywalkingtest.github.io/page-resources/3.2.5%2b_architecture.jpg"/>
|
||||
|
||||
# Document
|
||||
* [WIKI](https://github.com/OpenSkywalking/skywalking/wiki)
|
||||
[](docs/README.md) [](docs/README_ZH.md)
|
||||
|
||||
This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to wu.sheng@foxmail.com.
|
||||
|
||||
|
|
|
|||
14
README_ZH.md
14
README_ZH.md
|
|
@ -6,17 +6,17 @@ Sky Walking | [English](README.md)
|
|||
**SkyWalking 3**: 针对分布式系统的APM系统,也被称为分布式追踪系统
|
||||
|
||||
[](https://travis-ci.org/OpenSkywalking/skywalking)
|
||||
[](https://coveralls.io/github/OpenSkywalking/skywalking?branch=master)
|
||||
[](https://coveralls.io/github/OpenSkywalking/skywalking?branch=master)
|
||||
[](https://gitter.im/openskywalking/Lobby)
|
||||
[](http://opentracing.io)
|
||||
|
||||
|
||||
* Java自动探针,**不需要修改应用程序源代码**
|
||||
* 高性能探针,针对单实例5000tps的应用,在**全量采集的情况下**,只增加**10%**的CPU开销。
|
||||
* [中间件,框架与类库支持列表](https://github.com/wu-sheng/sky-walking/wiki/3.2-supported-list).
|
||||
* [中间件,框架与类库支持列表](docs/Supported-list.md).
|
||||
* 手动探针
|
||||
* [使用OpenTracing手动探针API](http://opentracing.io/documentation/pages/supported-tracers)
|
||||
* 使用 [**@Trace**](https://github.com/wu-sheng/OpenSkywalking/wiki/sky-walking-application-toolkit-trace-chn) 标注追踪业务方法
|
||||
* 使用 [**@Trace**](docs/cn/Application-toolkit-trace-CN.md) 标注追踪业务方法
|
||||
* 将 traceId 集成到 log4j, log4j2 或 logback这些日志组件中
|
||||
* 纯Java后端Collector实现,提供RESTful和gRPC接口。兼容接受其他语言探针发送数据
|
||||
* [如何将探针的Metric和Trace数据上传到Collector?]()
|
||||
|
|
@ -24,11 +24,11 @@ Sky Walking | [English](README.md)
|
|||
* 中文QQ群:392443393
|
||||
|
||||
# Architecture
|
||||
* 3.2+版本架构图
|
||||
<img src="https://skywalkingtest.github.io/page-resources/3.x-architecture.jpg"/>
|
||||
* 3.2.5+版本架构图
|
||||
<img src="https://skywalkingtest.github.io/page-resources/3.2.5%2b_architecture.jpg"/>
|
||||
|
||||
# Document
|
||||
* [WIKI](https://github.com/OpenSkywalking/skywalking/wiki)
|
||||
[](docs/README.md) [](docs/README_ZH.md)
|
||||
|
||||
This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to wu.sheng@foxmail.com.
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDU
|
|||
|
||||
# Contact Us
|
||||
* 直接提交Issue
|
||||
* [Gitter](https://gitter.im/sky-walking/Lobby)
|
||||
* [Gitter](https://gitter.im/openskywalking/Lobby)
|
||||
* [Google Mailing List](https://groups.google.com/forum/#!forum/skywalking-distributed-tracing-and-apm)
|
||||
* QQ群: 392443393
|
||||
|
||||
|
|
|
|||
|
|
@ -17,18 +17,17 @@
|
|||
~ Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
-->
|
||||
|
||||
<configuration>
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<layout class="ch.qos.logback.classic.PatternLayout">
|
||||
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
|
||||
</layout>
|
||||
</appender>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>apm-collector-agent</artifactId>
|
||||
<groupId>org.skywalking</groupId>
|
||||
<version>3.2.4-2017</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<logger name="org.skywalking.apm.collector.agentstream.worker.storage.PersistenceTimer" level="INFO"/>
|
||||
<logger name="org.eclipse.jetty" level="INFO"/>
|
||||
<logger name="org.apache.zookeeper" level="INFO"/>
|
||||
<artifactId>collector-agent-define</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="STDOUT"/>
|
||||
</root>
|
||||
</configuration>
|
||||
</project>
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* 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.agent;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.Module;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class AgentModule extends Module {
|
||||
|
||||
public static final String NAME = "agent";
|
||||
|
||||
@Override public String name() {
|
||||
return NAME;
|
||||
}
|
||||
|
||||
@Override public Class[] services() {
|
||||
return new Class[0];
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
org.skywalking.apm.collector.agent.AgentModule
|
||||
|
|
@ -21,34 +21,29 @@
|
|||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>apm-collector</artifactId>
|
||||
<artifactId>apm-collector-agent</artifactId>
|
||||
<groupId>org.skywalking</groupId>
|
||||
<version>3.2.4-2017</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>apm-collector-agentjvm</artifactId>
|
||||
<artifactId>collector-agent-grpc-provider</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.skywalking</groupId>
|
||||
<artifactId>apm-collector-stream</artifactId>
|
||||
<artifactId>collector-agent-define</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skywalking</groupId>
|
||||
<artifactId>apm-collector-cluster</artifactId>
|
||||
<artifactId>collector-agent-stream</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skywalking</groupId>
|
||||
<artifactId>apm-collector-server</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skywalking</groupId>
|
||||
<artifactId>apm-collector-storage</artifactId>
|
||||
<artifactId>collector-grpc-manager-define</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
* 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.agent.grpc;
|
||||
|
||||
import java.util.Properties;
|
||||
import org.skywalking.apm.collector.agent.AgentModule;
|
||||
import org.skywalking.apm.collector.agent.grpc.handler.ApplicationRegisterServiceHandler;
|
||||
import org.skywalking.apm.collector.agent.grpc.handler.InstanceDiscoveryServiceHandler;
|
||||
import org.skywalking.apm.collector.agent.grpc.handler.JVMMetricsServiceHandler;
|
||||
import org.skywalking.apm.collector.agent.grpc.handler.ServiceNameDiscoveryServiceHandler;
|
||||
import org.skywalking.apm.collector.agent.grpc.handler.TraceSegmentServiceHandler;
|
||||
import org.skywalking.apm.collector.agent.grpc.handler.naming.AgentGRPCNamingHandler;
|
||||
import org.skywalking.apm.collector.agent.grpc.handler.naming.AgentGRPCNamingListener;
|
||||
import org.skywalking.apm.collector.agent.stream.AgentStreamSingleton;
|
||||
import org.skywalking.apm.collector.cache.CacheModule;
|
||||
import org.skywalking.apm.collector.cluster.ClusterModule;
|
||||
import org.skywalking.apm.collector.cluster.service.ModuleListenerService;
|
||||
import org.skywalking.apm.collector.cluster.service.ModuleRegisterService;
|
||||
import org.skywalking.apm.collector.core.module.Module;
|
||||
import org.skywalking.apm.collector.core.module.ModuleProvider;
|
||||
import org.skywalking.apm.collector.core.module.ServiceNotProvidedException;
|
||||
import org.skywalking.apm.collector.grpc.manager.GRPCManagerModule;
|
||||
import org.skywalking.apm.collector.grpc.manager.service.GRPCManagerService;
|
||||
import org.skywalking.apm.collector.naming.NamingModule;
|
||||
import org.skywalking.apm.collector.naming.service.NamingHandlerRegisterService;
|
||||
import org.skywalking.apm.collector.remote.RemoteModule;
|
||||
import org.skywalking.apm.collector.server.Server;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.stream.StreamModule;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class AgentModuleGRPCProvider extends ModuleProvider {
|
||||
|
||||
public static final String NAME = "gRPC";
|
||||
private static final String HOST = "host";
|
||||
private static final String PORT = "port";
|
||||
|
||||
@Override public String name() {
|
||||
return NAME;
|
||||
}
|
||||
|
||||
@Override public Class<? extends Module> module() {
|
||||
return AgentModule.class;
|
||||
}
|
||||
|
||||
@Override public void prepare(Properties config) throws ServiceNotProvidedException {
|
||||
|
||||
}
|
||||
|
||||
@Override public void start(Properties config) throws ServiceNotProvidedException {
|
||||
String host = config.getProperty(HOST);
|
||||
Integer port = (Integer)config.get(PORT);
|
||||
|
||||
ModuleRegisterService moduleRegisterService = getManager().find(ClusterModule.NAME).getService(ModuleRegisterService.class);
|
||||
moduleRegisterService.register(AgentModule.NAME, this.name(), new AgentModuleGRPCRegistration(host, port));
|
||||
|
||||
AgentGRPCNamingListener namingListener = new AgentGRPCNamingListener();
|
||||
ModuleListenerService moduleListenerService = getManager().find(ClusterModule.NAME).getService(ModuleListenerService.class);
|
||||
moduleListenerService.addListener(namingListener);
|
||||
|
||||
NamingHandlerRegisterService namingHandlerRegisterService = getManager().find(NamingModule.NAME).getService(NamingHandlerRegisterService.class);
|
||||
namingHandlerRegisterService.register(new AgentGRPCNamingHandler(namingListener));
|
||||
|
||||
GRPCManagerService managerService = getManager().find(GRPCManagerModule.NAME).getService(GRPCManagerService.class);
|
||||
Server gRPCServer = managerService.createIfAbsent(host, port);
|
||||
|
||||
AgentStreamSingleton.createInstanceIfAbsent(getManager());
|
||||
addHandlers(gRPCServer);
|
||||
}
|
||||
|
||||
@Override public void notifyAfterCompleted() throws ServiceNotProvidedException {
|
||||
|
||||
}
|
||||
|
||||
@Override public String[] requiredModules() {
|
||||
return new String[] {ClusterModule.NAME, NamingModule.NAME, StorageModule.NAME, GRPCManagerModule.NAME, CacheModule.NAME, RemoteModule.NAME, StreamModule.NAME};
|
||||
}
|
||||
|
||||
private void addHandlers(Server gRPCServer) {
|
||||
gRPCServer.addHandler(new ApplicationRegisterServiceHandler(getManager()));
|
||||
gRPCServer.addHandler(new InstanceDiscoveryServiceHandler(getManager()));
|
||||
gRPCServer.addHandler(new ServiceNameDiscoveryServiceHandler(getManager()));
|
||||
gRPCServer.addHandler(new JVMMetricsServiceHandler());
|
||||
gRPCServer.addHandler(new TraceSegmentServiceHandler(getManager()));
|
||||
}
|
||||
}
|
||||
|
|
@ -16,16 +16,25 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.jetty;
|
||||
package org.skywalking.apm.collector.agent.grpc;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleRegistration;
|
||||
import org.skywalking.apm.collector.cluster.ModuleRegistration;
|
||||
import org.skywalking.apm.collector.core.util.Const;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class AgentStreamJettyModuleRegistration extends ModuleRegistration {
|
||||
public class AgentModuleGRPCRegistration extends ModuleRegistration {
|
||||
|
||||
private final String host;
|
||||
private final int port;
|
||||
|
||||
public AgentModuleGRPCRegistration(String host, int port) {
|
||||
this.host = host;
|
||||
this.port = port;
|
||||
}
|
||||
|
||||
@Override public Value buildValue() {
|
||||
return new Value(AgentStreamJettyConfig.HOST, AgentStreamJettyConfig.PORT, AgentStreamJettyConfig.CONTEXT_PATH);
|
||||
return new Value(host, port, Const.EMPTY_STRING);
|
||||
}
|
||||
}
|
||||
|
|
@ -16,11 +16,14 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentregister.grpc.handler;
|
||||
package org.skywalking.apm.collector.agent.grpc.handler;
|
||||
|
||||
import com.google.protobuf.ProtocolStringList;
|
||||
import io.grpc.stub.StreamObserver;
|
||||
import org.skywalking.apm.collector.agentregister.application.ApplicationIDService;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.register.ApplicationIDService;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.core.module.ModuleNotFoundException;
|
||||
import org.skywalking.apm.collector.core.module.ServiceNotProvidedException;
|
||||
import org.skywalking.apm.collector.server.grpc.GRPCHandler;
|
||||
import org.skywalking.apm.network.proto.Application;
|
||||
import org.skywalking.apm.network.proto.ApplicationMapping;
|
||||
|
|
@ -36,7 +39,11 @@ public class ApplicationRegisterServiceHandler extends ApplicationRegisterServic
|
|||
|
||||
private final Logger logger = LoggerFactory.getLogger(ApplicationRegisterServiceHandler.class);
|
||||
|
||||
private ApplicationIDService applicationIDService = new ApplicationIDService();
|
||||
private final ApplicationIDService applicationIDService;
|
||||
|
||||
public ApplicationRegisterServiceHandler(ModuleManager moduleManager) {
|
||||
applicationIDService = new ApplicationIDService(moduleManager);
|
||||
}
|
||||
|
||||
@Override public void register(Application request, StreamObserver<ApplicationMapping> responseObserver) {
|
||||
logger.debug("register application");
|
||||
|
|
@ -45,7 +52,12 @@ public class ApplicationRegisterServiceHandler extends ApplicationRegisterServic
|
|||
ApplicationMapping.Builder builder = ApplicationMapping.newBuilder();
|
||||
for (int i = 0; i < applicationCodes.size(); i++) {
|
||||
String applicationCode = applicationCodes.get(i);
|
||||
int applicationId = applicationIDService.getOrCreate(applicationCode);
|
||||
int applicationId = 0;
|
||||
try {
|
||||
applicationId = applicationIDService.getOrCreate(applicationCode);
|
||||
} catch (ModuleNotFoundException | ServiceNotProvidedException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
|
||||
if (applicationId != 0) {
|
||||
KeyWithIntegerValue value = KeyWithIntegerValue.newBuilder().setKey(applicationCode).setValue(applicationId).build();
|
||||
|
|
@ -16,12 +16,15 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentregister.grpc.handler;
|
||||
package org.skywalking.apm.collector.agent.grpc.handler;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import io.grpc.stub.StreamObserver;
|
||||
import org.skywalking.apm.collector.agentregister.instance.InstanceIDService;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.register.InstanceIDService;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.core.module.ModuleNotFoundException;
|
||||
import org.skywalking.apm.collector.core.module.ServiceNotProvidedException;
|
||||
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
|
||||
import org.skywalking.apm.collector.server.grpc.GRPCHandler;
|
||||
import org.skywalking.apm.network.proto.ApplicationInstance;
|
||||
|
|
@ -40,12 +43,21 @@ public class InstanceDiscoveryServiceHandler extends InstanceDiscoveryServiceGrp
|
|||
|
||||
private final Logger logger = LoggerFactory.getLogger(InstanceDiscoveryServiceHandler.class);
|
||||
|
||||
private InstanceIDService instanceIDService = new InstanceIDService();
|
||||
private final InstanceIDService instanceIDService;
|
||||
|
||||
public InstanceDiscoveryServiceHandler(ModuleManager moduleManager) {
|
||||
this.instanceIDService = new InstanceIDService(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(ApplicationInstance request, StreamObserver<ApplicationInstanceMapping> responseObserver) {
|
||||
long timeBucket = TimeBucketUtils.INSTANCE.getSecondTimeBucket(request.getRegisterTime());
|
||||
int instanceId = instanceIDService.getOrCreate(request.getApplicationId(), request.getAgentUUID(), timeBucket, buildOsInfo(request.getOsinfo()));
|
||||
int instanceId = 0;
|
||||
try {
|
||||
instanceId = instanceIDService.getOrCreate(request.getApplicationId(), request.getAgentUUID(), timeBucket, buildOsInfo(request.getOsinfo()));
|
||||
} catch (ModuleNotFoundException | ServiceNotProvidedException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
ApplicationInstanceMapping.Builder builder = ApplicationInstanceMapping.newBuilder();
|
||||
builder.setApplicationId(request.getApplicationId());
|
||||
builder.setApplicationInstanceId(instanceId);
|
||||
|
|
@ -56,7 +68,11 @@ public class InstanceDiscoveryServiceHandler extends InstanceDiscoveryServiceGrp
|
|||
@Override
|
||||
public void registerRecover(ApplicationInstanceRecover request, StreamObserver<Downstream> responseObserver) {
|
||||
long timeBucket = TimeBucketUtils.INSTANCE.getSecondTimeBucket(request.getRegisterTime());
|
||||
instanceIDService.recover(request.getApplicationInstanceId(), request.getApplicationId(), timeBucket, buildOsInfo(request.getOsinfo()));
|
||||
try {
|
||||
instanceIDService.recover(request.getApplicationInstanceId(), request.getApplicationId(), timeBucket, buildOsInfo(request.getOsinfo()));
|
||||
} catch (ModuleNotFoundException | ServiceNotProvidedException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
responseObserver.onNext(Downstream.newBuilder().build());
|
||||
responseObserver.onCompleted();
|
||||
}
|
||||
|
|
@ -68,9 +84,9 @@ public class InstanceDiscoveryServiceHandler extends InstanceDiscoveryServiceGrp
|
|||
osInfoJson.addProperty("processId", osinfo.getProcessNo());
|
||||
|
||||
JsonArray ipv4Array = new JsonArray();
|
||||
osinfo.getIpv4SList().forEach(ipv4 -> {
|
||||
for (String ipv4 : osinfo.getIpv4SList()) {
|
||||
ipv4Array.add(ipv4);
|
||||
});
|
||||
}
|
||||
osInfoJson.add("ipv4s", ipv4Array);
|
||||
return osInfoJson.toString();
|
||||
}
|
||||
|
|
@ -0,0 +1,148 @@
|
|||
/*
|
||||
* 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.agent.grpc.handler;
|
||||
|
||||
import io.grpc.stub.StreamObserver;
|
||||
import java.util.List;
|
||||
import org.skywalking.apm.collector.agent.stream.graph.JvmMetricStreamGraph;
|
||||
import org.skywalking.apm.collector.core.graph.Graph;
|
||||
import org.skywalking.apm.collector.core.graph.GraphManager;
|
||||
import org.skywalking.apm.collector.core.util.Const;
|
||||
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
|
||||
import org.skywalking.apm.collector.server.grpc.GRPCHandler;
|
||||
import org.skywalking.apm.collector.storage.table.jvm.CpuMetric;
|
||||
import org.skywalking.apm.collector.storage.table.jvm.GCMetric;
|
||||
import org.skywalking.apm.collector.storage.table.jvm.MemoryMetric;
|
||||
import org.skywalking.apm.collector.storage.table.jvm.MemoryPoolMetric;
|
||||
import org.skywalking.apm.collector.storage.table.register.Instance;
|
||||
import org.skywalking.apm.network.proto.CPU;
|
||||
import org.skywalking.apm.network.proto.Downstream;
|
||||
import org.skywalking.apm.network.proto.GC;
|
||||
import org.skywalking.apm.network.proto.JVMMetrics;
|
||||
import org.skywalking.apm.network.proto.JVMMetricsServiceGrpc;
|
||||
import org.skywalking.apm.network.proto.Memory;
|
||||
import org.skywalking.apm.network.proto.MemoryPool;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class JVMMetricsServiceHandler extends JVMMetricsServiceGrpc.JVMMetricsServiceImplBase implements GRPCHandler {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(JVMMetricsServiceHandler.class);
|
||||
|
||||
private final Graph<MemoryMetric> memoryMetricGraph;
|
||||
private final Graph<MemoryPoolMetric> memoryPoolMetricGraph;
|
||||
private final Graph<GCMetric> gcMetricGraph;
|
||||
private final Graph<CpuMetric> cpuMetricGraph;
|
||||
private final Graph<Instance> heartBeatGraph;
|
||||
|
||||
public JVMMetricsServiceHandler() {
|
||||
memoryMetricGraph = GraphManager.INSTANCE.createIfAbsent(JvmMetricStreamGraph.MEMORY_METRIC_GRAPH_ID, MemoryMetric.class);
|
||||
memoryPoolMetricGraph = GraphManager.INSTANCE.createIfAbsent(JvmMetricStreamGraph.MEMORY_POOL_METRIC_GRAPH_ID, MemoryPoolMetric.class);
|
||||
gcMetricGraph = GraphManager.INSTANCE.createIfAbsent(JvmMetricStreamGraph.GC_METRIC_GRAPH_ID, GCMetric.class);
|
||||
cpuMetricGraph = GraphManager.INSTANCE.createIfAbsent(JvmMetricStreamGraph.CPU_METRIC_GRAPH_ID, CpuMetric.class);
|
||||
heartBeatGraph = GraphManager.INSTANCE.createIfAbsent(JvmMetricStreamGraph.INST_HEART_BEAT_GRAPH_ID, Instance.class);
|
||||
}
|
||||
|
||||
@Override public void collect(JVMMetrics request, StreamObserver<Downstream> responseObserver) {
|
||||
int instanceId = request.getApplicationInstanceId();
|
||||
logger.debug("receive the jvm metric from application instance, id: {}", instanceId);
|
||||
|
||||
request.getMetricsList().forEach(metric -> {
|
||||
long time = TimeBucketUtils.INSTANCE.getSecondTimeBucket(metric.getTime());
|
||||
sendToInstanceHeartBeatPersistenceWorker(instanceId, metric.getTime());
|
||||
sendToCpuMetricPersistenceWorker(instanceId, time, metric.getCpu());
|
||||
sendToMemoryMetricPersistenceWorker(instanceId, time, metric.getMemoryList());
|
||||
sendToMemoryPoolMetricPersistenceWorker(instanceId, time, metric.getMemoryPoolList());
|
||||
sendToGCMetricPersistenceWorker(instanceId, time, metric.getGcList());
|
||||
});
|
||||
|
||||
responseObserver.onNext(Downstream.newBuilder().build());
|
||||
responseObserver.onCompleted();
|
||||
}
|
||||
|
||||
private void sendToInstanceHeartBeatPersistenceWorker(int instanceId, long heartBeatTime) {
|
||||
Instance instance = new Instance(String.valueOf(instanceId));
|
||||
instance.setHeartBeatTime(TimeBucketUtils.INSTANCE.getSecondTimeBucket(heartBeatTime));
|
||||
instance.setInstanceId(instanceId);
|
||||
|
||||
logger.debug("send to instance heart beat persistence worker, id: {}", instance.getId());
|
||||
heartBeatGraph.start(instance);
|
||||
}
|
||||
|
||||
private void sendToCpuMetricPersistenceWorker(int instanceId, long timeBucket, CPU cpu) {
|
||||
CpuMetric cpuMetric = new CpuMetric(timeBucket + Const.ID_SPLIT + instanceId);
|
||||
cpuMetric.setInstanceId(instanceId);
|
||||
cpuMetric.setUsagePercent(cpu.getUsagePercent());
|
||||
cpuMetric.setTimeBucket(timeBucket);
|
||||
|
||||
logger.debug("send to cpu metric graph, id: {}", cpuMetric.getId());
|
||||
cpuMetricGraph.start(cpuMetric);
|
||||
}
|
||||
|
||||
private void sendToMemoryMetricPersistenceWorker(int instanceId, long timeBucket, List<Memory> memories) {
|
||||
memories.forEach(memory -> {
|
||||
MemoryMetric memoryMetric = new MemoryMetric(timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + String.valueOf(memory.getIsHeap()));
|
||||
memoryMetric.setInstanceId(instanceId);
|
||||
memoryMetric.setIsHeap(memory.getIsHeap());
|
||||
memoryMetric.setInit(memory.getInit());
|
||||
memoryMetric.setMax(memory.getMax());
|
||||
memoryMetric.setUsed(memory.getUsed());
|
||||
memoryMetric.setCommitted(memory.getCommitted());
|
||||
memoryMetric.setTimeBucket(timeBucket);
|
||||
|
||||
logger.debug("send to memory metric graph, id: {}", memoryMetric.getId());
|
||||
memoryMetricGraph.start(memoryMetric);
|
||||
});
|
||||
}
|
||||
|
||||
private void sendToMemoryPoolMetricPersistenceWorker(int instanceId, long timeBucket,
|
||||
List<MemoryPool> memoryPools) {
|
||||
|
||||
memoryPools.forEach(memoryPool -> {
|
||||
MemoryPoolMetric memoryPoolMetric = new MemoryPoolMetric(timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + String.valueOf(memoryPool.getType().getNumber()));
|
||||
memoryPoolMetric.setInstanceId(instanceId);
|
||||
memoryPoolMetric.setPoolType(memoryPool.getType().getNumber());
|
||||
memoryPoolMetric.setInit(memoryPool.getInit());
|
||||
memoryPoolMetric.setMax(memoryPool.getMax());
|
||||
memoryPoolMetric.setUsed(memoryPool.getUsed());
|
||||
memoryPoolMetric.setCommitted(memoryPool.getCommited());
|
||||
memoryPoolMetric.setTimeBucket(timeBucket);
|
||||
|
||||
logger.debug("send to memory pool metric graph, id: {}", memoryPoolMetric.getId());
|
||||
memoryPoolMetricGraph.start(memoryPoolMetric);
|
||||
});
|
||||
}
|
||||
|
||||
private void sendToGCMetricPersistenceWorker(int instanceId, long timeBucket, List<GC> gcs) {
|
||||
gcs.forEach(gc -> {
|
||||
GCMetric gcMetric = new GCMetric(timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + String.valueOf(gc.getPhraseValue()));
|
||||
gcMetric.setInstanceId(instanceId);
|
||||
gcMetric.setPhrase(gc.getPhraseValue());
|
||||
gcMetric.setCount(gc.getCount());
|
||||
gcMetric.setTime(gc.getTime());
|
||||
gcMetric.setTimeBucket(timeBucket);
|
||||
|
||||
logger.debug("send to gc metric graph, id: {}", gcMetric.getId());
|
||||
gcMetricGraph.start(gcMetric);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -16,11 +16,12 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentregister.grpc.handler;
|
||||
package org.skywalking.apm.collector.agent.grpc.handler;
|
||||
|
||||
import io.grpc.stub.StreamObserver;
|
||||
import java.util.List;
|
||||
import org.skywalking.apm.collector.agentregister.servicename.ServiceNameService;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.register.ServiceNameService;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.server.grpc.GRPCHandler;
|
||||
import org.skywalking.apm.network.proto.ServiceNameCollection;
|
||||
import org.skywalking.apm.network.proto.ServiceNameDiscoveryServiceGrpc;
|
||||
|
|
@ -37,7 +38,11 @@ public class ServiceNameDiscoveryServiceHandler extends ServiceNameDiscoveryServ
|
|||
|
||||
private final Logger logger = LoggerFactory.getLogger(ServiceNameDiscoveryServiceHandler.class);
|
||||
|
||||
private ServiceNameService serviceNameService = new ServiceNameService();
|
||||
private final ServiceNameService serviceNameService;
|
||||
|
||||
public ServiceNameDiscoveryServiceHandler(ModuleManager moduleManager) {
|
||||
this.serviceNameService = new ServiceNameService(moduleManager);
|
||||
}
|
||||
|
||||
@Override public void discovery(ServiceNameCollection request,
|
||||
StreamObserver<ServiceNameMappingCollection> responseObserver) {
|
||||
|
|
@ -16,10 +16,11 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.grpc.handler;
|
||||
package org.skywalking.apm.collector.agent.grpc.handler;
|
||||
|
||||
import io.grpc.stub.StreamObserver;
|
||||
import org.skywalking.apm.collector.agentstream.worker.segment.SegmentParse;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.SegmentParse;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.server.grpc.GRPCHandler;
|
||||
import org.skywalking.apm.network.proto.Downstream;
|
||||
import org.skywalking.apm.network.proto.TraceSegmentServiceGrpc;
|
||||
|
|
@ -34,11 +35,17 @@ public class TraceSegmentServiceHandler extends TraceSegmentServiceGrpc.TraceSeg
|
|||
|
||||
private final Logger logger = LoggerFactory.getLogger(TraceSegmentServiceHandler.class);
|
||||
|
||||
private final ModuleManager moduleManager;
|
||||
|
||||
public TraceSegmentServiceHandler(ModuleManager moduleManager) {
|
||||
this.moduleManager = moduleManager;
|
||||
}
|
||||
|
||||
@Override public StreamObserver<UpstreamSegment> collect(StreamObserver<Downstream> responseObserver) {
|
||||
return new StreamObserver<UpstreamSegment>() {
|
||||
@Override public void onNext(UpstreamSegment segment) {
|
||||
logger.debug("receive segment");
|
||||
SegmentParse segmentParse = new SegmentParse();
|
||||
SegmentParse segmentParse = new SegmentParse(moduleManager);
|
||||
segmentParse.parse(segment, SegmentParse.Source.Agent);
|
||||
}
|
||||
|
||||
|
|
@ -16,30 +16,33 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentserver.jetty.handler;
|
||||
package org.skywalking.apm.collector.agent.grpc.handler.naming;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import java.util.Set;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import org.skywalking.apm.collector.agentstream.grpc.AgentStreamGRPCDataListener;
|
||||
import org.skywalking.apm.collector.core.cluster.ClusterModuleRegistrationReader;
|
||||
import org.skywalking.apm.collector.core.framework.CollectorContextHelper;
|
||||
import org.skywalking.apm.collector.server.jetty.ArgumentsParseException;
|
||||
import org.skywalking.apm.collector.server.jetty.JettyHandler;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class AgentStreamGRPCServerHandler extends JettyHandler {
|
||||
public class AgentGRPCNamingHandler extends JettyHandler {
|
||||
|
||||
private final AgentGRPCNamingListener namingListener;
|
||||
|
||||
public AgentGRPCNamingHandler(AgentGRPCNamingListener namingListener) {
|
||||
this.namingListener = namingListener;
|
||||
}
|
||||
|
||||
@Override public String pathSpec() {
|
||||
// return "/agent/gRPC";
|
||||
return "/agentstream/grpc";
|
||||
}
|
||||
|
||||
@Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException {
|
||||
ClusterModuleRegistrationReader reader = CollectorContextHelper.INSTANCE.getClusterModuleContext().getReader();
|
||||
Set<String> servers = reader.read(AgentStreamGRPCDataListener.PATH);
|
||||
Set<String> servers = namingListener.getAddresses();
|
||||
JsonArray serverArray = new JsonArray();
|
||||
servers.forEach(serverArray::add);
|
||||
return serverArray;
|
||||
|
|
@ -16,18 +16,18 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.ui.jetty;
|
||||
package org.skywalking.apm.collector.agent.grpc.handler.naming;
|
||||
|
||||
import org.skywalking.apm.collector.cluster.ClusterModuleDefine;
|
||||
import org.skywalking.apm.collector.core.cluster.ClusterDataListener;
|
||||
import org.skywalking.apm.collector.ui.UIModuleGroupDefine;
|
||||
import org.skywalking.apm.collector.agent.AgentModule;
|
||||
import org.skywalking.apm.collector.agent.grpc.AgentModuleGRPCProvider;
|
||||
import org.skywalking.apm.collector.cluster.ClusterModuleListener;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class UIJettyDataListener extends ClusterDataListener {
|
||||
public class AgentGRPCNamingListener extends ClusterModuleListener {
|
||||
|
||||
public static final String PATH = ClusterModuleDefine.BASE_CATALOG + "." + UIModuleGroupDefine.GROUP_NAME + "." + UIJettyModuleDefine.MODULE_NAME;
|
||||
public static final String PATH = "/" + AgentModule.NAME + "/" + AgentModuleGRPCProvider.NAME;
|
||||
|
||||
@Override public String path() {
|
||||
return PATH;
|
||||
|
|
@ -38,5 +38,6 @@ public class UIJettyDataListener extends ClusterDataListener {
|
|||
}
|
||||
|
||||
@Override public void serverQuitNotify(String serverAddress) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
org.skywalking.apm.collector.agent.grpc.AgentModuleGRPCProvider
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentregister.grpc.handler;
|
||||
package org.skywalking.apm.collector.agent.grpc.handler;
|
||||
|
||||
import io.grpc.ManagedChannel;
|
||||
import io.grpc.ManagedChannelBuilder;
|
||||
|
|
@ -21,39 +21,29 @@
|
|||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>apm-collector</artifactId>
|
||||
<artifactId>apm-collector-agent</artifactId>
|
||||
<groupId>org.skywalking</groupId>
|
||||
<version>3.2.4-2017</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>apm-collector-agentregister</artifactId>
|
||||
<artifactId>collector-agent-jetty-provider</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.skywalking</groupId>
|
||||
<artifactId>apm-collector-stream</artifactId>
|
||||
<artifactId>collector-agent-define</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skywalking</groupId>
|
||||
<artifactId>apm-collector-cluster</artifactId>
|
||||
<artifactId>collector-agent-stream</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skywalking</groupId>
|
||||
<artifactId>apm-collector-server</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skywalking</groupId>
|
||||
<artifactId>apm-network</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skywalking</groupId>
|
||||
<artifactId>apm-collector-cache</artifactId>
|
||||
<artifactId>collector-jetty-manager-define</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* 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.agent.jetty;
|
||||
|
||||
import java.util.Properties;
|
||||
import org.skywalking.apm.collector.agent.AgentModule;
|
||||
import org.skywalking.apm.collector.agent.jetty.handler.TraceSegmentServletHandler;
|
||||
import org.skywalking.apm.collector.agent.jetty.handler.naming.AgentJettyNamingHandler;
|
||||
import org.skywalking.apm.collector.agent.jetty.handler.naming.AgentJettyNamingListener;
|
||||
import org.skywalking.apm.collector.cache.CacheModule;
|
||||
import org.skywalking.apm.collector.cluster.ClusterModule;
|
||||
import org.skywalking.apm.collector.cluster.service.ModuleListenerService;
|
||||
import org.skywalking.apm.collector.cluster.service.ModuleRegisterService;
|
||||
import org.skywalking.apm.collector.core.module.Module;
|
||||
import org.skywalking.apm.collector.core.module.ModuleProvider;
|
||||
import org.skywalking.apm.collector.core.module.ServiceNotProvidedException;
|
||||
import org.skywalking.apm.collector.jetty.manager.JettyManagerModule;
|
||||
import org.skywalking.apm.collector.jetty.manager.service.JettyManagerService;
|
||||
import org.skywalking.apm.collector.naming.NamingModule;
|
||||
import org.skywalking.apm.collector.naming.service.NamingHandlerRegisterService;
|
||||
import org.skywalking.apm.collector.server.Server;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.stream.StreamModule;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class AgentModuleJettyProvider extends ModuleProvider {
|
||||
|
||||
public static final String NAME = "jetty";
|
||||
private static final String HOST = "host";
|
||||
private static final String PORT = "port";
|
||||
private static final String CONTEXT_PATH = "context_path";
|
||||
|
||||
@Override public String name() {
|
||||
return NAME;
|
||||
}
|
||||
|
||||
@Override public Class<? extends Module> module() {
|
||||
return AgentModule.class;
|
||||
}
|
||||
|
||||
@Override public void prepare(Properties config) throws ServiceNotProvidedException {
|
||||
|
||||
}
|
||||
|
||||
@Override public void start(Properties config) throws ServiceNotProvidedException {
|
||||
String host = config.getProperty(HOST);
|
||||
Integer port = (Integer)config.get(PORT);
|
||||
String contextPath = config.getProperty(CONTEXT_PATH);
|
||||
|
||||
ModuleRegisterService moduleRegisterService = getManager().find(ClusterModule.NAME).getService(ModuleRegisterService.class);
|
||||
moduleRegisterService.register(AgentModule.NAME, this.name(), new AgentModuleJettyRegistration(host, port, contextPath));
|
||||
|
||||
AgentJettyNamingListener namingListener = new AgentJettyNamingListener();
|
||||
ModuleListenerService moduleListenerService = getManager().find(ClusterModule.NAME).getService(ModuleListenerService.class);
|
||||
moduleListenerService.addListener(namingListener);
|
||||
|
||||
NamingHandlerRegisterService namingHandlerRegisterService = getManager().find(NamingModule.NAME).getService(NamingHandlerRegisterService.class);
|
||||
namingHandlerRegisterService.register(new AgentJettyNamingHandler(namingListener));
|
||||
|
||||
JettyManagerService managerService = getManager().find(JettyManagerModule.NAME).getService(JettyManagerService.class);
|
||||
Server jettyServer = managerService.createIfAbsent(host, port, contextPath);
|
||||
addHandlers(jettyServer);
|
||||
}
|
||||
|
||||
@Override public void notifyAfterCompleted() throws ServiceNotProvidedException {
|
||||
|
||||
}
|
||||
|
||||
@Override public String[] requiredModules() {
|
||||
return new String[] {ClusterModule.NAME, NamingModule.NAME, StorageModule.NAME, JettyManagerModule.NAME, CacheModule.NAME, StreamModule.NAME};
|
||||
}
|
||||
|
||||
private void addHandlers(Server jettyServer) {
|
||||
jettyServer.addHandler(new TraceSegmentServletHandler());
|
||||
}
|
||||
}
|
||||
|
|
@ -16,16 +16,26 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentserver.jetty;
|
||||
package org.skywalking.apm.collector.agent.jetty;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleRegistration;
|
||||
import org.skywalking.apm.collector.cluster.ModuleRegistration;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class AgentServerJettyModuleRegistration extends ModuleRegistration {
|
||||
public class AgentModuleJettyRegistration extends ModuleRegistration {
|
||||
|
||||
private final String host;
|
||||
private final int port;
|
||||
private final String contextPath;
|
||||
|
||||
public AgentModuleJettyRegistration(String host, int port, String contextPath) {
|
||||
this.host = host;
|
||||
this.port = port;
|
||||
this.contextPath = contextPath;
|
||||
}
|
||||
|
||||
@Override public Value buildValue() {
|
||||
return new Value(AgentServerJettyConfig.HOST, AgentServerJettyConfig.PORT, AgentServerJettyConfig.CONTEXT_PATH);
|
||||
return new Value(host, port, contextPath);
|
||||
}
|
||||
}
|
||||
|
|
@ -16,16 +16,16 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.jetty.handler;
|
||||
package org.skywalking.apm.collector.agent.jetty.handler;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.stream.JsonReader;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import org.skywalking.apm.collector.agentstream.jetty.handler.reader.TraceSegment;
|
||||
import org.skywalking.apm.collector.agentstream.jetty.handler.reader.TraceSegmentJsonReader;
|
||||
import org.skywalking.apm.collector.agentstream.worker.segment.SegmentParse;
|
||||
import org.skywalking.apm.collector.agent.jetty.handler.reader.TraceSegment;
|
||||
import org.skywalking.apm.collector.agent.jetty.handler.reader.TraceSegmentJsonReader;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.SegmentParse;
|
||||
import org.skywalking.apm.collector.server.jetty.ArgumentsParseException;
|
||||
import org.skywalking.apm.collector.server.jetty.JettyHandler;
|
||||
import org.slf4j.Logger;
|
||||
|
|
@ -64,7 +64,7 @@ public class TraceSegmentServletHandler extends JettyHandler {
|
|||
|
||||
reader.beginArray();
|
||||
while (reader.hasNext()) {
|
||||
SegmentParse segmentParse = new SegmentParse();
|
||||
SegmentParse segmentParse = new SegmentParse(null);
|
||||
TraceSegment traceSegment = jsonReader.read(reader);
|
||||
segmentParse.parse(traceSegment.getUpstreamSegment(), SegmentParse.Source.Agent);
|
||||
}
|
||||
|
|
@ -16,30 +16,32 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentserver.jetty.handler;
|
||||
package org.skywalking.apm.collector.agent.jetty.handler.naming;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import java.util.Set;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import org.skywalking.apm.collector.agentstream.jetty.AgentStreamJettyDataListener;
|
||||
import org.skywalking.apm.collector.core.cluster.ClusterModuleRegistrationReader;
|
||||
import org.skywalking.apm.collector.core.framework.CollectorContextHelper;
|
||||
import org.skywalking.apm.collector.server.jetty.ArgumentsParseException;
|
||||
import org.skywalking.apm.collector.server.jetty.JettyHandler;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class AgentStreamJettyServerHandler extends JettyHandler {
|
||||
public class AgentJettyNamingHandler extends JettyHandler {
|
||||
|
||||
private final AgentJettyNamingListener namingListener;
|
||||
|
||||
public AgentJettyNamingHandler(AgentJettyNamingListener namingListener) {
|
||||
this.namingListener = namingListener;
|
||||
}
|
||||
|
||||
@Override public String pathSpec() {
|
||||
return "/agentstream/jetty";
|
||||
return "/agent/jetty";
|
||||
}
|
||||
|
||||
@Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException {
|
||||
ClusterModuleRegistrationReader reader = CollectorContextHelper.INSTANCE.getClusterModuleContext().getReader();
|
||||
Set<String> servers = reader.read(AgentStreamJettyDataListener.PATH);
|
||||
Set<String> servers = namingListener.getAddresses();
|
||||
JsonArray serverArray = new JsonArray();
|
||||
servers.forEach(serverArray::add);
|
||||
return serverArray;
|
||||
|
|
@ -16,19 +16,21 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentserver.jetty;
|
||||
package org.skywalking.apm.collector.agent.jetty.handler.naming;
|
||||
|
||||
import org.skywalking.apm.collector.agentserver.AgentServerModuleGroupDefine;
|
||||
import org.skywalking.apm.collector.cluster.ClusterModuleDefine;
|
||||
import org.skywalking.apm.collector.core.cluster.ClusterDataListener;
|
||||
import org.skywalking.apm.collector.agent.AgentModule;
|
||||
import org.skywalking.apm.collector.agent.jetty.AgentModuleJettyProvider;
|
||||
import org.skywalking.apm.collector.cluster.ClusterModuleListener;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class AgentServerJettyDataListener extends ClusterDataListener {
|
||||
public class AgentJettyNamingListener extends ClusterModuleListener {
|
||||
|
||||
public static final String PATH = "/" + AgentModule.NAME + "/" + AgentModuleJettyProvider.NAME;
|
||||
|
||||
@Override public String path() {
|
||||
return ClusterModuleDefine.BASE_CATALOG + "." + AgentServerModuleGroupDefine.GROUP_NAME + "." + AgentServerJettyModuleDefine.MODULE_NAME;
|
||||
return PATH;
|
||||
}
|
||||
|
||||
@Override public void serverJoinNotify(String serverAddress) {
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.jetty.handler.reader;
|
||||
package org.skywalking.apm.collector.agent.jetty.handler.reader;
|
||||
|
||||
import com.google.gson.stream.JsonReader;
|
||||
import java.io.IOException;
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.jetty.handler.reader;
|
||||
package org.skywalking.apm.collector.agent.jetty.handler.reader;
|
||||
|
||||
import com.google.gson.stream.JsonReader;
|
||||
import java.io.IOException;
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.jetty.handler.reader;
|
||||
package org.skywalking.apm.collector.agent.jetty.handler.reader;
|
||||
|
||||
import com.google.gson.stream.JsonReader;
|
||||
import java.io.IOException;
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.jetty.handler.reader;
|
||||
package org.skywalking.apm.collector.agent.jetty.handler.reader;
|
||||
|
||||
import com.google.gson.stream.JsonReader;
|
||||
import java.io.IOException;
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.jetty.handler.reader;
|
||||
package org.skywalking.apm.collector.agent.jetty.handler.reader;
|
||||
|
||||
import com.google.gson.stream.JsonReader;
|
||||
import java.io.IOException;
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.jetty.handler.reader;
|
||||
package org.skywalking.apm.collector.agent.jetty.handler.reader;
|
||||
|
||||
import com.google.gson.stream.JsonReader;
|
||||
import java.io.IOException;
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.jetty.handler.reader;
|
||||
package org.skywalking.apm.collector.agent.jetty.handler.reader;
|
||||
|
||||
import org.skywalking.apm.network.proto.TraceSegmentObject;
|
||||
import org.skywalking.apm.network.proto.UniqueId;
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.jetty.handler.reader;
|
||||
package org.skywalking.apm.collector.agent.jetty.handler.reader;
|
||||
|
||||
import com.google.gson.stream.JsonReader;
|
||||
import java.io.IOException;
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.jetty.handler.reader;
|
||||
package org.skywalking.apm.collector.agent.jetty.handler.reader;
|
||||
|
||||
import com.google.gson.stream.JsonReader;
|
||||
import java.io.IOException;
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
org.skywalking.apm.collector.agent.jetty.AgentModuleJettyProvider
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ 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
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>apm-collector-agent</artifactId>
|
||||
<groupId>org.skywalking</groupId>
|
||||
<version>3.2.4-2017</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>collector-agent-stream</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.skywalking</groupId>
|
||||
<artifactId>collector-stream-provider</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skywalking</groupId>
|
||||
<artifactId>collector-cache-define</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
/*
|
||||
* 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.agent.stream;
|
||||
|
||||
import org.skywalking.apm.collector.agent.stream.graph.JvmMetricStreamGraph;
|
||||
import org.skywalking.apm.collector.agent.stream.graph.RegisterStreamGraph;
|
||||
import org.skywalking.apm.collector.agent.stream.graph.TraceStreamGraph;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.core.util.ObjectUtils;
|
||||
import org.skywalking.apm.collector.stream.timer.PersistenceTimer;
|
||||
import org.skywalking.apm.collector.stream.worker.base.WorkerCreateListener;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class AgentStreamSingleton {
|
||||
|
||||
private static AgentStreamSingleton INSTANCE;
|
||||
|
||||
private final ModuleManager moduleManager;
|
||||
private final WorkerCreateListener workerCreateListener;
|
||||
|
||||
private AgentStreamSingleton(ModuleManager moduleManager) {
|
||||
this.moduleManager = moduleManager;
|
||||
this.workerCreateListener = new WorkerCreateListener();
|
||||
this.create();
|
||||
}
|
||||
|
||||
public static synchronized AgentStreamSingleton createInstanceIfAbsent(ModuleManager moduleManager) {
|
||||
if (ObjectUtils.isEmpty(INSTANCE)) {
|
||||
INSTANCE = new AgentStreamSingleton(moduleManager);
|
||||
}
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
private void create() {
|
||||
createJVMGraph();
|
||||
createRegisterGraph();
|
||||
createTraceGraph();
|
||||
|
||||
PersistenceTimer timer = new PersistenceTimer();
|
||||
timer.start(moduleManager, workerCreateListener.getPersistenceWorkers());
|
||||
|
||||
}
|
||||
|
||||
private void createJVMGraph() {
|
||||
JvmMetricStreamGraph jvmMetricStreamGraph = new JvmMetricStreamGraph(moduleManager, workerCreateListener);
|
||||
jvmMetricStreamGraph.createCpuMetricGraph();
|
||||
jvmMetricStreamGraph.createGcMetricGraph();
|
||||
jvmMetricStreamGraph.createMemoryMetricGraph();
|
||||
jvmMetricStreamGraph.createMemoryPoolMetricGraph();
|
||||
jvmMetricStreamGraph.createHeartBeatGraph();
|
||||
}
|
||||
|
||||
private void createRegisterGraph() {
|
||||
RegisterStreamGraph registerStreamGraph = new RegisterStreamGraph(moduleManager, workerCreateListener);
|
||||
registerStreamGraph.createApplicationRegisterGraph();
|
||||
registerStreamGraph.createInstanceRegisterGraph();
|
||||
registerStreamGraph.createServiceNameRegisterGraph();
|
||||
}
|
||||
|
||||
private void createTraceGraph() {
|
||||
TraceStreamGraph traceStreamGraph = new TraceStreamGraph(moduleManager, workerCreateListener);
|
||||
traceStreamGraph.createSegmentStandardizationGraph();
|
||||
traceStreamGraph.createGlobalTraceGraph();
|
||||
traceStreamGraph.createInstPerformanceGraph();
|
||||
traceStreamGraph.createNodeComponentGraph();
|
||||
traceStreamGraph.createNodeMappingGraph();
|
||||
traceStreamGraph.createNodeReferenceGraph();
|
||||
traceStreamGraph.createServiceEntryGraph();
|
||||
traceStreamGraph.createServiceReferenceGraph();
|
||||
traceStreamGraph.createSegmentGraph();
|
||||
traceStreamGraph.createSegmentCostGraph();
|
||||
}
|
||||
}
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentregister.worker;
|
||||
package org.skywalking.apm.collector.agent.stream;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.config;
|
||||
package org.skywalking.apm.collector.agent.stream.buffer;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment.buffer;
|
||||
package org.skywalking.apm.collector.agent.stream.buffer;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment.buffer;
|
||||
package org.skywalking.apm.collector.agent.stream.buffer;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
|
|
@ -24,8 +24,7 @@ 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.agent.stream.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;
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment.buffer;
|
||||
package org.skywalking.apm.collector.agent.stream.buffer;
|
||||
|
||||
import org.skywalking.apm.collector.core.config.SystemConfig;
|
||||
|
||||
|
|
@ -16,12 +16,11 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment.buffer;
|
||||
package org.skywalking.apm.collector.agent.stream.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;
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment.buffer;
|
||||
package org.skywalking.apm.collector.agent.stream.buffer;
|
||||
|
||||
import com.google.protobuf.CodedOutputStream;
|
||||
import java.io.File;
|
||||
|
|
@ -26,7 +26,7 @@ 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.agent.stream.parser.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;
|
||||
|
|
@ -117,7 +117,7 @@ public enum SegmentBufferReader {
|
|||
|
||||
while (readFile.length() > readFileOffset && readFileOffset < endPoint) {
|
||||
UpstreamSegment upstreamSegment = UpstreamSegment.parser().parseDelimitedFrom(inputStream);
|
||||
SegmentParse parse = new SegmentParse();
|
||||
SegmentParse parse = new SegmentParse(null);
|
||||
if (!parse.parse(upstreamSegment, SegmentParse.Source.Buffer)) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
/*
|
||||
* 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.agent.stream.graph;
|
||||
|
||||
import org.skywalking.apm.collector.agent.stream.worker.jvm.CpuMetricPersistenceWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.jvm.GCMetricPersistenceWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.jvm.InstHeartBeatPersistenceWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.jvm.MemoryMetricPersistenceWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.jvm.MemoryPoolMetricPersistenceWorker;
|
||||
import org.skywalking.apm.collector.core.graph.Graph;
|
||||
import org.skywalking.apm.collector.core.graph.GraphManager;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.QueueModule;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.table.jvm.CpuMetric;
|
||||
import org.skywalking.apm.collector.storage.table.jvm.GCMetric;
|
||||
import org.skywalking.apm.collector.storage.table.jvm.MemoryMetric;
|
||||
import org.skywalking.apm.collector.storage.table.jvm.MemoryPoolMetric;
|
||||
import org.skywalking.apm.collector.storage.table.register.Instance;
|
||||
import org.skywalking.apm.collector.stream.worker.base.WorkerCreateListener;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class JvmMetricStreamGraph {
|
||||
|
||||
public static final int GC_METRIC_GRAPH_ID = 100;
|
||||
public static final int MEMORY_METRIC_GRAPH_ID = 101;
|
||||
public static final int MEMORY_POOL_METRIC_GRAPH_ID = 102;
|
||||
public static final int CPU_METRIC_GRAPH_ID = 103;
|
||||
public static final int INST_HEART_BEAT_GRAPH_ID = 104;
|
||||
|
||||
private final ModuleManager moduleManager;
|
||||
private final WorkerCreateListener workerCreateListener;
|
||||
|
||||
public JvmMetricStreamGraph(ModuleManager moduleManager, WorkerCreateListener workerCreateListener) {
|
||||
this.moduleManager = moduleManager;
|
||||
this.workerCreateListener = workerCreateListener;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createGcMetricGraph() {
|
||||
QueueCreatorService<GCMetric> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
|
||||
Graph<GCMetric> graph = GraphManager.INSTANCE.createIfAbsent(GC_METRIC_GRAPH_ID, GCMetric.class);
|
||||
graph.addNode(new GCMetricPersistenceWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createCpuMetricGraph() {
|
||||
QueueCreatorService<CpuMetric> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
|
||||
Graph<CpuMetric> graph = GraphManager.INSTANCE.createIfAbsent(CPU_METRIC_GRAPH_ID, CpuMetric.class);
|
||||
graph.addNode(new CpuMetricPersistenceWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createMemoryMetricGraph() {
|
||||
QueueCreatorService<MemoryMetric> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
|
||||
Graph<MemoryMetric> graph = GraphManager.INSTANCE.createIfAbsent(MEMORY_METRIC_GRAPH_ID, MemoryMetric.class);
|
||||
graph.addNode(new MemoryMetricPersistenceWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createMemoryPoolMetricGraph() {
|
||||
QueueCreatorService<MemoryPoolMetric> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
|
||||
Graph<MemoryPoolMetric> graph = GraphManager.INSTANCE.createIfAbsent(MEMORY_POOL_METRIC_GRAPH_ID, MemoryPoolMetric.class);
|
||||
graph.addNode(new MemoryPoolMetricPersistenceWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createHeartBeatGraph() {
|
||||
QueueCreatorService<Instance> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
|
||||
Graph<Instance> graph = GraphManager.INSTANCE.createIfAbsent(INST_HEART_BEAT_GRAPH_ID, Instance.class);
|
||||
graph.addNode(new InstHeartBeatPersistenceWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,88 @@
|
|||
/*
|
||||
* 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.agent.stream.graph;
|
||||
|
||||
import org.skywalking.apm.collector.agent.stream.worker.register.ApplicationRegisterRemoteWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.register.ApplicationRegisterSerialWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.register.InstanceRegisterRemoteWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.register.InstanceRegisterSerialWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.register.ServiceNameRegisterRemoteWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.register.ServiceNameRegisterSerialWorker;
|
||||
import org.skywalking.apm.collector.core.graph.Graph;
|
||||
import org.skywalking.apm.collector.core.graph.GraphManager;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.QueueModule;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.remote.RemoteModule;
|
||||
import org.skywalking.apm.collector.remote.service.RemoteSenderService;
|
||||
import org.skywalking.apm.collector.storage.table.register.Application;
|
||||
import org.skywalking.apm.collector.storage.table.register.Instance;
|
||||
import org.skywalking.apm.collector.storage.table.register.ServiceName;
|
||||
import org.skywalking.apm.collector.stream.worker.base.WorkerCreateListener;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class RegisterStreamGraph {
|
||||
|
||||
public static final int APPLICATION_REGISTER_GRAPH_ID = 200;
|
||||
public static final int INSTANCE_REGISTER_GRAPH_ID = 201;
|
||||
public static final int SERVICE_NAME_REGISTER_GRAPH_ID = 202;
|
||||
|
||||
private final ModuleManager moduleManager;
|
||||
private final WorkerCreateListener workerCreateListener;
|
||||
|
||||
public RegisterStreamGraph(ModuleManager moduleManager, WorkerCreateListener workerCreateListener) {
|
||||
this.moduleManager = moduleManager;
|
||||
this.workerCreateListener = workerCreateListener;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createApplicationRegisterGraph() {
|
||||
RemoteSenderService remoteSenderService = moduleManager.find(RemoteModule.NAME).getService(RemoteSenderService.class);
|
||||
|
||||
QueueCreatorService<Application> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
|
||||
Graph<Application> graph = GraphManager.INSTANCE.createIfAbsent(APPLICATION_REGISTER_GRAPH_ID, Application.class);
|
||||
graph.addNode(new ApplicationRegisterRemoteWorker.Factory(moduleManager, remoteSenderService, APPLICATION_REGISTER_GRAPH_ID).create(workerCreateListener))
|
||||
.addNext(new ApplicationRegisterSerialWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createInstanceRegisterGraph() {
|
||||
RemoteSenderService remoteSenderService = moduleManager.find(RemoteModule.NAME).getService(RemoteSenderService.class);
|
||||
|
||||
QueueCreatorService<Instance> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
|
||||
Graph<Instance> graph = GraphManager.INSTANCE.createIfAbsent(INSTANCE_REGISTER_GRAPH_ID, Instance.class);
|
||||
graph.addNode(new InstanceRegisterRemoteWorker.Factory(moduleManager, remoteSenderService, INSTANCE_REGISTER_GRAPH_ID).create(workerCreateListener))
|
||||
.addNext(new InstanceRegisterSerialWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createServiceNameRegisterGraph() {
|
||||
RemoteSenderService remoteSenderService = moduleManager.find(RemoteModule.NAME).getService(RemoteSenderService.class);
|
||||
|
||||
QueueCreatorService<ServiceName> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
|
||||
Graph<ServiceName> graph = GraphManager.INSTANCE.createIfAbsent(SERVICE_NAME_REGISTER_GRAPH_ID, ServiceName.class);
|
||||
graph.addNode(new ServiceNameRegisterRemoteWorker.Factory(moduleManager, remoteSenderService, SERVICE_NAME_REGISTER_GRAPH_ID).create(workerCreateListener))
|
||||
.addNext(new ServiceNameRegisterSerialWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,178 @@
|
|||
/*
|
||||
* 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.agent.stream.graph;
|
||||
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.SegmentStandardization;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.SegmentStandardizationWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.global.GlobalTracePersistenceWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.instance.InstPerformancePersistenceWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.node.NodeComponentAggregationWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.node.NodeComponentPersistenceWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.node.NodeComponentRemoteWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.node.NodeMappingAggregationWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.node.NodeMappingPersistenceWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.node.NodeMappingRemoteWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.noderef.NodeReferenceAggregationWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.noderef.NodeReferencePersistenceWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.noderef.NodeReferenceRemoteWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.segment.SegmentCostPersistenceWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.segment.SegmentPersistenceWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.service.ServiceEntryAggregationWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.service.ServiceEntryPersistenceWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.service.ServiceEntryRemoteWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.serviceref.ServiceReferenceAggregationWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.serviceref.ServiceReferencePersistenceWorker;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.serviceref.ServiceReferenceRemoteWorker;
|
||||
import org.skywalking.apm.collector.core.graph.Graph;
|
||||
import org.skywalking.apm.collector.core.graph.GraphManager;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.QueueModule;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.remote.RemoteModule;
|
||||
import org.skywalking.apm.collector.remote.service.RemoteSenderService;
|
||||
import org.skywalking.apm.collector.storage.table.global.GlobalTrace;
|
||||
import org.skywalking.apm.collector.storage.table.instance.InstPerformance;
|
||||
import org.skywalking.apm.collector.storage.table.node.NodeComponent;
|
||||
import org.skywalking.apm.collector.storage.table.node.NodeMapping;
|
||||
import org.skywalking.apm.collector.storage.table.noderef.NodeReference;
|
||||
import org.skywalking.apm.collector.storage.table.segment.Segment;
|
||||
import org.skywalking.apm.collector.storage.table.segment.SegmentCost;
|
||||
import org.skywalking.apm.collector.storage.table.service.ServiceEntry;
|
||||
import org.skywalking.apm.collector.storage.table.serviceref.ServiceReference;
|
||||
import org.skywalking.apm.collector.stream.worker.base.WorkerCreateListener;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class TraceStreamGraph {
|
||||
|
||||
public static final int GLOBAL_TRACE_GRAPH_ID = 300;
|
||||
public static final int INST_PERFORMANCE_GRAPH_ID = 301;
|
||||
public static final int NODE_COMPONENT_GRAPH_ID = 302;
|
||||
public static final int NODE_MAPPING_GRAPH_ID = 303;
|
||||
public static final int NODE_REFERENCE_GRAPH_ID = 304;
|
||||
public static final int SERVICE_ENTRY_GRAPH_ID = 305;
|
||||
public static final int SERVICE_REFERENCE_GRAPH_ID = 306;
|
||||
public static final int SEGMENT_GRAPH_ID = 307;
|
||||
public static final int SEGMENT_COST_GRAPH_ID = 308;
|
||||
public static final int SEGMENT_STANDARDIZATION_GRAPH_ID = 309;
|
||||
|
||||
private final ModuleManager moduleManager;
|
||||
private final WorkerCreateListener workerCreateListener;
|
||||
|
||||
public TraceStreamGraph(ModuleManager moduleManager, WorkerCreateListener workerCreateListener) {
|
||||
this.moduleManager = moduleManager;
|
||||
this.workerCreateListener = workerCreateListener;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createSegmentStandardizationGraph() {
|
||||
QueueCreatorService<SegmentStandardization> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
|
||||
Graph<SegmentStandardization> graph = GraphManager.INSTANCE.createIfAbsent(SEGMENT_STANDARDIZATION_GRAPH_ID, SegmentStandardization.class);
|
||||
graph.addNode(new SegmentStandardizationWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createGlobalTraceGraph() {
|
||||
QueueCreatorService<GlobalTrace> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
|
||||
Graph<GlobalTrace> graph = GraphManager.INSTANCE.createIfAbsent(GLOBAL_TRACE_GRAPH_ID, GlobalTrace.class);
|
||||
graph.addNode(new GlobalTracePersistenceWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createInstPerformanceGraph() {
|
||||
QueueCreatorService<InstPerformance> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
|
||||
Graph<InstPerformance> graph = GraphManager.INSTANCE.createIfAbsent(INST_PERFORMANCE_GRAPH_ID, InstPerformance.class);
|
||||
graph.addNode(new InstPerformancePersistenceWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createNodeComponentGraph() {
|
||||
QueueCreatorService<NodeComponent> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
RemoteSenderService remoteSenderService = moduleManager.find(RemoteModule.NAME).getService(RemoteSenderService.class);
|
||||
|
||||
Graph<NodeComponent> graph = GraphManager.INSTANCE.createIfAbsent(NODE_COMPONENT_GRAPH_ID, NodeComponent.class);
|
||||
graph.addNode(new NodeComponentAggregationWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener))
|
||||
.addNext(new NodeComponentRemoteWorker.Factory(moduleManager, remoteSenderService, NODE_COMPONENT_GRAPH_ID).create(workerCreateListener))
|
||||
.addNext(new NodeComponentPersistenceWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createNodeMappingGraph() {
|
||||
QueueCreatorService<NodeMapping> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
RemoteSenderService remoteSenderService = moduleManager.find(RemoteModule.NAME).getService(RemoteSenderService.class);
|
||||
|
||||
Graph<NodeMapping> graph = GraphManager.INSTANCE.createIfAbsent(NODE_MAPPING_GRAPH_ID, NodeMapping.class);
|
||||
graph.addNode(new NodeMappingAggregationWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener))
|
||||
.addNext(new NodeMappingRemoteWorker.Factory(moduleManager, remoteSenderService, NODE_MAPPING_GRAPH_ID).create(workerCreateListener))
|
||||
.addNext(new NodeMappingPersistenceWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createNodeReferenceGraph() {
|
||||
QueueCreatorService<NodeReference> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
RemoteSenderService remoteSenderService = moduleManager.find(RemoteModule.NAME).getService(RemoteSenderService.class);
|
||||
|
||||
Graph<NodeReference> graph = GraphManager.INSTANCE.createIfAbsent(NODE_REFERENCE_GRAPH_ID, NodeReference.class);
|
||||
graph.addNode(new NodeReferenceAggregationWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener))
|
||||
.addNext(new NodeReferenceRemoteWorker.Factory(moduleManager, remoteSenderService, NODE_REFERENCE_GRAPH_ID).create(workerCreateListener))
|
||||
.addNext(new NodeReferencePersistenceWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createServiceEntryGraph() {
|
||||
QueueCreatorService<ServiceEntry> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
RemoteSenderService remoteSenderService = moduleManager.find(RemoteModule.NAME).getService(RemoteSenderService.class);
|
||||
|
||||
Graph<ServiceEntry> graph = GraphManager.INSTANCE.createIfAbsent(SERVICE_ENTRY_GRAPH_ID, ServiceEntry.class);
|
||||
graph.addNode(new ServiceEntryAggregationWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener))
|
||||
.addNext(new ServiceEntryRemoteWorker.Factory(moduleManager, remoteSenderService, SERVICE_ENTRY_GRAPH_ID).create(workerCreateListener))
|
||||
.addNext(new ServiceEntryPersistenceWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createServiceReferenceGraph() {
|
||||
QueueCreatorService<ServiceReference> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
RemoteSenderService remoteSenderService = moduleManager.find(RemoteModule.NAME).getService(RemoteSenderService.class);
|
||||
|
||||
Graph<ServiceReference> graph = GraphManager.INSTANCE.createIfAbsent(SERVICE_REFERENCE_GRAPH_ID, ServiceReference.class);
|
||||
graph.addNode(new ServiceReferenceAggregationWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener))
|
||||
.addNext(new ServiceReferenceRemoteWorker.Factory(moduleManager, remoteSenderService, SERVICE_REFERENCE_GRAPH_ID).create(workerCreateListener))
|
||||
.addNext(new ServiceReferencePersistenceWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createSegmentGraph() {
|
||||
QueueCreatorService<Segment> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
|
||||
Graph<Segment> graph = GraphManager.INSTANCE.createIfAbsent(SEGMENT_GRAPH_ID, Segment.class);
|
||||
graph.addNode(new SegmentPersistenceWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createSegmentCostGraph() {
|
||||
QueueCreatorService<SegmentCost> queueCreatorService = moduleManager.find(QueueModule.NAME).getService(QueueCreatorService.class);
|
||||
|
||||
Graph<SegmentCost> graph = GraphManager.INSTANCE.createIfAbsent(SEGMENT_COST_GRAPH_ID, SegmentCost.class);
|
||||
graph.addNode(new SegmentCostPersistenceWorker.Factory(moduleManager, queueCreatorService).create(workerCreateListener));
|
||||
}
|
||||
}
|
||||
|
|
@ -16,13 +16,13 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment;
|
||||
package org.skywalking.apm.collector.agent.stream.parser;
|
||||
|
||||
import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.SpanDecorator;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public interface EntrySpanListener extends SpanListener {
|
||||
void parseEntry(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId);
|
||||
void parseEntry(SpanDecorator spanDecorator, int applicationId, int instanceId, String segmentId);
|
||||
}
|
||||
|
|
@ -16,13 +16,13 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment;
|
||||
package org.skywalking.apm.collector.agent.stream.parser;
|
||||
|
||||
import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.SpanDecorator;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public interface ExitSpanListener extends SpanListener {
|
||||
void parseExit(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId);
|
||||
void parseExit(SpanDecorator spanDecorator, int applicationId, int instanceId, String segmentId);
|
||||
}
|
||||
|
|
@ -16,13 +16,13 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment;
|
||||
package org.skywalking.apm.collector.agent.stream.parser;
|
||||
|
||||
import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.SpanDecorator;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public interface FirstSpanListener extends SpanListener {
|
||||
void parseFirst(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId);
|
||||
void parseFirst(SpanDecorator spanDecorator, int applicationId, int instanceId, String segmentId);
|
||||
}
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment;
|
||||
package org.skywalking.apm.collector.agent.stream.parser;
|
||||
|
||||
import org.skywalking.apm.network.proto.UniqueId;
|
||||
|
||||
|
|
@ -16,13 +16,13 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment;
|
||||
package org.skywalking.apm.collector.agent.stream.parser;
|
||||
|
||||
import org.skywalking.apm.collector.agentstream.worker.segment.standardization.SpanDecorator;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.SpanDecorator;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public interface LocalSpanListener extends SpanListener {
|
||||
void parseLocal(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId);
|
||||
void parseLocal(SpanDecorator spanDecorator, int applicationId, int instanceId, String segmentId);
|
||||
}
|
||||
|
|
@ -16,13 +16,13 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment;
|
||||
package org.skywalking.apm.collector.agent.stream.parser;
|
||||
|
||||
import org.skywalking.apm.collector.agentstream.worker.segment.standardization.ReferenceDecorator;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.ReferenceDecorator;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public interface RefsListener extends SpanListener {
|
||||
void parseRef(ReferenceDecorator referenceDecorator, int applicationId, int applicationInstanceId, String segmentId);
|
||||
void parseRef(ReferenceDecorator referenceDecorator, int applicationId, int instanceId, String segmentId);
|
||||
}
|
||||
|
|
@ -16,32 +16,31 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment;
|
||||
package org.skywalking.apm.collector.agent.stream.parser;
|
||||
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.skywalking.apm.collector.agentstream.worker.global.GlobalTraceSpanListener;
|
||||
import org.skywalking.apm.collector.agentstream.worker.instance.performance.InstPerformanceSpanListener;
|
||||
import org.skywalking.apm.collector.agentstream.worker.node.component.NodeComponentSpanListener;
|
||||
import org.skywalking.apm.collector.agentstream.worker.node.mapping.NodeMappingSpanListener;
|
||||
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.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.collector.agent.stream.graph.TraceStreamGraph;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.ReferenceDecorator;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.ReferenceIdExchanger;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.SegmentDecorator;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.SegmentStandardization;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.SpanDecorator;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.SpanIdExchanger;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.global.GlobalTraceSpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.instance.InstPerformanceSpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.node.NodeComponentSpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.node.NodeMappingSpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.noderef.NodeReferenceSpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.segment.SegmentCostSpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.service.ServiceEntrySpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.trace.serviceref.ServiceReferenceSpanListener;
|
||||
import org.skywalking.apm.collector.core.graph.Graph;
|
||||
import org.skywalking.apm.collector.core.graph.GraphManager;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
|
||||
import org.skywalking.apm.collector.storage.table.segment.Segment;
|
||||
import org.skywalking.apm.network.proto.SpanType;
|
||||
import org.skywalking.apm.network.proto.TraceSegmentObject;
|
||||
import org.skywalking.apm.network.proto.UniqueId;
|
||||
|
|
@ -56,19 +55,22 @@ public class SegmentParse {
|
|||
|
||||
private final Logger logger = LoggerFactory.getLogger(SegmentParse.class);
|
||||
|
||||
private List<SpanListener> spanListeners;
|
||||
private final List<SpanListener> spanListeners;
|
||||
private final ModuleManager moduleManager;
|
||||
private String segmentId;
|
||||
private long timeBucket = 0;
|
||||
|
||||
public SegmentParse() {
|
||||
spanListeners = new ArrayList<>();
|
||||
spanListeners.add(new NodeComponentSpanListener());
|
||||
spanListeners.add(new NodeMappingSpanListener());
|
||||
spanListeners.add(new NodeReferenceSpanListener());
|
||||
spanListeners.add(new SegmentCostSpanListener());
|
||||
spanListeners.add(new GlobalTraceSpanListener());
|
||||
spanListeners.add(new ServiceEntrySpanListener());
|
||||
spanListeners.add(new ServiceReferenceSpanListener());
|
||||
spanListeners.add(new InstPerformanceSpanListener());
|
||||
public SegmentParse(ModuleManager moduleManager) {
|
||||
this.moduleManager = moduleManager;
|
||||
this.spanListeners = new ArrayList<>();
|
||||
this.spanListeners.add(new NodeComponentSpanListener());
|
||||
this.spanListeners.add(new NodeMappingSpanListener());
|
||||
this.spanListeners.add(new NodeReferenceSpanListener(moduleManager));
|
||||
this.spanListeners.add(new SegmentCostSpanListener(moduleManager));
|
||||
this.spanListeners.add(new GlobalTraceSpanListener());
|
||||
this.spanListeners.add(new ServiceEntrySpanListener(moduleManager));
|
||||
this.spanListeners.add(new ServiceReferenceSpanListener());
|
||||
this.spanListeners.add(new InstPerformanceSpanListener());
|
||||
}
|
||||
|
||||
public boolean parse(UpstreamSegment segment, Source source) {
|
||||
|
|
@ -77,6 +79,7 @@ public class SegmentParse {
|
|||
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);
|
||||
|
||||
|
|
@ -118,7 +121,7 @@ public class SegmentParse {
|
|||
|
||||
for (int i = 0; i < segmentDecorator.getRefsCount(); i++) {
|
||||
ReferenceDecorator referenceDecorator = segmentDecorator.getRefs(i);
|
||||
if (!ReferenceIdExchanger.getInstance().exchange(referenceDecorator, applicationId)) {
|
||||
if (!ReferenceIdExchanger.getInstance(moduleManager).exchange(referenceDecorator, applicationId)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -128,12 +131,13 @@ public class SegmentParse {
|
|||
for (int i = 0; i < segmentDecorator.getSpansCount(); i++) {
|
||||
SpanDecorator spanDecorator = segmentDecorator.getSpans(i);
|
||||
|
||||
if (!SpanIdExchanger.getInstance().exchange(spanDecorator, applicationId)) {
|
||||
if (!SpanIdExchanger.getInstance(moduleManager).exchange(spanDecorator, applicationId)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (spanDecorator.getSpanId() == 0) {
|
||||
notifyFirstListener(spanDecorator, applicationId, applicationInstanceId, segmentId);
|
||||
timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime());
|
||||
}
|
||||
|
||||
if (SpanType.Exit.equals(spanDecorator.getSpanType())) {
|
||||
|
|
@ -151,28 +155,19 @@ public class SegmentParse {
|
|||
}
|
||||
|
||||
private void buildSegment(String id, byte[] dataBinary) {
|
||||
StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME);
|
||||
SegmentDataDefine.Segment segment = new SegmentDataDefine.Segment();
|
||||
segment.setId(id);
|
||||
Segment segment = new Segment(id);
|
||||
segment.setDataBinary(dataBinary);
|
||||
|
||||
try {
|
||||
logger.debug("send to segment persistence worker, id: {}, dataBinary length: {}", segment.getId(), dataBinary.length);
|
||||
context.getClusterWorkerContext().lookup(SegmentPersistenceWorker.WorkerRole.INSTANCE).tell(segment.toData());
|
||||
} catch (WorkerInvokeException | WorkerNotFoundException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
segment.setTimeBucket(timeBucket);
|
||||
Graph<Segment> graph = GraphManager.INSTANCE.createIfAbsent(TraceStreamGraph.SEGMENT_GRAPH_ID, Segment.class);
|
||||
graph.start(segment);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
logger.debug("send to segment buffer write worker, id: {}", id);
|
||||
SegmentStandardization standardization = new SegmentStandardization(id);
|
||||
standardization.setUpstreamSegment(upstreamSegment);
|
||||
Graph<SegmentStandardization> graph = GraphManager.INSTANCE.createIfAbsent(TraceStreamGraph.SEGMENT_STANDARDIZATION_GRAPH_ID, SegmentStandardization.class);
|
||||
graph.start(standardization);
|
||||
}
|
||||
|
||||
private void notifyListenerToBuild() {
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment;
|
||||
package org.skywalking.apm.collector.agent.stream.parser;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment.standardization;
|
||||
package org.skywalking.apm.collector.agent.stream.parser.standardization;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment.standardization;
|
||||
package org.skywalking.apm.collector.agent.stream.parser.standardization;
|
||||
|
||||
import org.skywalking.apm.network.proto.RefType;
|
||||
import org.skywalking.apm.network.proto.TraceSegmentReference;
|
||||
|
|
@ -16,11 +16,13 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment.standardization;
|
||||
package org.skywalking.apm.collector.agent.stream.parser.standardization;
|
||||
|
||||
import org.skywalking.apm.collector.agentregister.servicename.ServiceNameService;
|
||||
import org.skywalking.apm.collector.cache.ApplicationCache;
|
||||
import org.skywalking.apm.collector.cache.InstanceCache;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.register.ServiceNameService;
|
||||
import org.skywalking.apm.collector.cache.CacheModule;
|
||||
import org.skywalking.apm.collector.cache.service.ApplicationCacheService;
|
||||
import org.skywalking.apm.collector.cache.service.InstanceCacheService;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.core.util.Const;
|
||||
import org.skywalking.apm.collector.core.util.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
|
|
@ -35,21 +37,26 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
|
|||
|
||||
private static ReferenceIdExchanger EXCHANGER;
|
||||
private ServiceNameService serviceNameService;
|
||||
private final InstanceCacheService instanceCacheService;
|
||||
private final ApplicationCacheService applicationCacheService;
|
||||
|
||||
public static ReferenceIdExchanger getInstance() {
|
||||
public static ReferenceIdExchanger getInstance(ModuleManager moduleManager) {
|
||||
if (EXCHANGER == null) {
|
||||
EXCHANGER = new ReferenceIdExchanger();
|
||||
EXCHANGER = new ReferenceIdExchanger(moduleManager);
|
||||
}
|
||||
return EXCHANGER;
|
||||
}
|
||||
|
||||
public ReferenceIdExchanger() {
|
||||
serviceNameService = new ServiceNameService();
|
||||
private ReferenceIdExchanger(ModuleManager moduleManager) {
|
||||
serviceNameService = new ServiceNameService(moduleManager);
|
||||
instanceCacheService = moduleManager.find(CacheModule.NAME).getService(InstanceCacheService.class);
|
||||
applicationCacheService = moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class);
|
||||
}
|
||||
|
||||
@Override public boolean exchange(ReferenceDecorator standardBuilder, int applicationId) {
|
||||
if (standardBuilder.getEntryServiceId() == 0 && StringUtils.isNotEmpty(standardBuilder.getEntryServiceName())) {
|
||||
int entryServiceId = serviceNameService.getOrCreate(InstanceCache.get(standardBuilder.getEntryApplicationInstanceId()), standardBuilder.getEntryServiceName());
|
||||
int entryServiceId = serviceNameService.getOrCreate(instanceCacheService.get(standardBuilder.getEntryApplicationInstanceId()), standardBuilder.getEntryServiceName());
|
||||
|
||||
if (entryServiceId == 0) {
|
||||
return false;
|
||||
} else {
|
||||
|
|
@ -60,7 +67,8 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
|
|||
}
|
||||
|
||||
if (standardBuilder.getParentServiceId() == 0 && StringUtils.isNotEmpty(standardBuilder.getParentServiceName())) {
|
||||
int parentServiceId = serviceNameService.getOrCreate(InstanceCache.get(standardBuilder.getParentApplicationInstanceId()), standardBuilder.getParentServiceName());
|
||||
int parentServiceId = serviceNameService.getOrCreate(instanceCacheService.get(standardBuilder.getParentApplicationInstanceId()), standardBuilder.getParentServiceName());
|
||||
|
||||
if (parentServiceId == 0) {
|
||||
return false;
|
||||
} else {
|
||||
|
|
@ -71,7 +79,7 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
|
|||
}
|
||||
|
||||
if (standardBuilder.getNetworkAddressId() == 0 && StringUtils.isNotEmpty(standardBuilder.getNetworkAddress())) {
|
||||
int networkAddressId = ApplicationCache.get(standardBuilder.getNetworkAddress());
|
||||
int networkAddressId = applicationCacheService.get(standardBuilder.getNetworkAddress());
|
||||
if (networkAddressId == 0) {
|
||||
return false;
|
||||
} else {
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment.standardization;
|
||||
package org.skywalking.apm.collector.agent.stream.parser.standardization;
|
||||
|
||||
import org.skywalking.apm.network.proto.TraceSegmentObject;
|
||||
import org.skywalking.apm.network.proto.UniqueId;
|
||||
|
|
@ -16,26 +16,27 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.ui;
|
||||
package org.skywalking.apm.collector.agent.stream.parser.standardization;
|
||||
|
||||
import java.util.List;
|
||||
import org.skywalking.apm.collector.core.framework.Context;
|
||||
import org.skywalking.apm.collector.core.module.MultipleModuleInstaller;
|
||||
import org.skywalking.apm.collector.core.data.EndOfBatchQueueMessage;
|
||||
import org.skywalking.apm.network.proto.UpstreamSegment;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class UIModuleInstaller extends MultipleModuleInstaller {
|
||||
public class SegmentStandardization extends EndOfBatchQueueMessage {
|
||||
|
||||
@Override public String groupName() {
|
||||
return UIModuleGroupDefine.GROUP_NAME;
|
||||
public SegmentStandardization(String key) {
|
||||
super(key);
|
||||
}
|
||||
|
||||
@Override public Context moduleContext() {
|
||||
return new UIModuleContext(groupName());
|
||||
private UpstreamSegment upstreamSegment;
|
||||
|
||||
public UpstreamSegment getUpstreamSegment() {
|
||||
return upstreamSegment;
|
||||
}
|
||||
|
||||
@Override public List<String> dependenceModules() {
|
||||
return null;
|
||||
public void setUpstreamSegment(UpstreamSegment upstreamSegment) {
|
||||
this.upstreamSegment = upstreamSegment;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
* 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.agent.stream.parser.standardization;
|
||||
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import org.skywalking.apm.collector.agent.stream.buffer.SegmentBufferManager;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorker;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.base.WorkerException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class SegmentStandardizationWorker extends AbstractLocalAsyncWorker<SegmentStandardization, SegmentStandardization> {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(SegmentStandardizationWorker.class);
|
||||
|
||||
public SegmentStandardizationWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
SegmentBufferManager.INSTANCE.initialize();
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return SegmentStandardizationWorker.class.hashCode();
|
||||
}
|
||||
|
||||
@Override protected void onWork(SegmentStandardization segmentStandardization) throws WorkerException {
|
||||
SegmentBufferManager.INSTANCE.writeBuffer(segmentStandardization.getUpstreamSegment());
|
||||
}
|
||||
|
||||
public final void flushAndSwitch() {
|
||||
SegmentBufferManager.INSTANCE.flush();
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<SegmentStandardization, SegmentStandardization, SegmentStandardizationWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<SegmentStandardization> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public SegmentStandardizationWorker workerInstance(ModuleManager moduleManager) {
|
||||
SegmentStandardizationWorker standardizationWorker = new SegmentStandardizationWorker(moduleManager);
|
||||
startTimer(standardizationWorker);
|
||||
return standardizationWorker;
|
||||
}
|
||||
|
||||
@Override public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
|
||||
private void startTimer(SegmentStandardizationWorker standardizationWorker) {
|
||||
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(standardizationWorker::flushAndSwitch, 10, 3, TimeUnit.SECONDS);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment.standardization;
|
||||
package org.skywalking.apm.collector.agent.stream.parser.standardization;
|
||||
|
||||
import org.skywalking.apm.network.proto.SpanLayer;
|
||||
import org.skywalking.apm.network.proto.SpanObject;
|
||||
|
|
@ -16,35 +16,43 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment.standardization;
|
||||
package org.skywalking.apm.collector.agent.stream.parser.standardization;
|
||||
|
||||
import org.skywalking.apm.collector.agentregister.servicename.ServiceNameService;
|
||||
import org.skywalking.apm.collector.cache.ApplicationCache;
|
||||
import org.skywalking.apm.collector.agent.stream.worker.register.ServiceNameService;
|
||||
import org.skywalking.apm.collector.cache.CacheModule;
|
||||
import org.skywalking.apm.collector.cache.service.ApplicationCacheService;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
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 peng-yongsheng
|
||||
*/
|
||||
public class SpanIdExchanger implements IdExchanger<SpanDecorator> {
|
||||
|
||||
private static SpanIdExchanger EXCHANGER;
|
||||
private ServiceNameService serviceNameService;
|
||||
private final Logger logger = LoggerFactory.getLogger(SpanIdExchanger.class);
|
||||
|
||||
public static SpanIdExchanger getInstance() {
|
||||
private static SpanIdExchanger EXCHANGER;
|
||||
private final ServiceNameService serviceNameService;
|
||||
private final ApplicationCacheService applicationCacheService;
|
||||
|
||||
public static SpanIdExchanger getInstance(ModuleManager moduleManager) {
|
||||
if (EXCHANGER == null) {
|
||||
EXCHANGER = new SpanIdExchanger();
|
||||
EXCHANGER = new SpanIdExchanger(moduleManager);
|
||||
}
|
||||
return EXCHANGER;
|
||||
}
|
||||
|
||||
public SpanIdExchanger() {
|
||||
serviceNameService = new ServiceNameService();
|
||||
public SpanIdExchanger(ModuleManager moduleManager) {
|
||||
this.applicationCacheService = moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class);
|
||||
this.serviceNameService = new ServiceNameService(moduleManager);
|
||||
}
|
||||
|
||||
@Override public boolean exchange(SpanDecorator standardBuilder, int applicationId) {
|
||||
if (standardBuilder.getPeerId() == 0 && StringUtils.isNotEmpty(standardBuilder.getPeer())) {
|
||||
int peerId = ApplicationCache.get(standardBuilder.getPeer());
|
||||
int peerId = applicationCacheService.get(standardBuilder.getPeer());
|
||||
if (peerId == 0) {
|
||||
return false;
|
||||
} else {
|
||||
|
|
@ -56,6 +64,7 @@ public class SpanIdExchanger implements IdExchanger<SpanDecorator> {
|
|||
|
||||
if (standardBuilder.getOperationNameId() == 0 && StringUtils.isNotEmpty(standardBuilder.getOperationName())) {
|
||||
int operationNameId = serviceNameService.getOrCreate(applicationId, standardBuilder.getOperationName());
|
||||
|
||||
if (operationNameId == 0) {
|
||||
return false;
|
||||
} else {
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment.standardization;
|
||||
package org.skywalking.apm.collector.agent.stream.parser.standardization;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.util;
|
||||
package org.skywalking.apm.collector.agent.stream.util;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.jvm;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.storage.base.dao.IPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.dao.ICpuMetricPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.table.jvm.CpuMetric;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.impl.PersistenceWorker;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class CpuMetricPersistenceWorker extends PersistenceWorker<CpuMetric, CpuMetric> {
|
||||
|
||||
public CpuMetricPersistenceWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override protected boolean needMergeDBData() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override protected IPersistenceDAO persistenceDAO() {
|
||||
return getModuleManager().find(StorageModule.NAME).getService(ICpuMetricPersistenceDAO.class);
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<CpuMetric, CpuMetric, CpuMetricPersistenceWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<CpuMetric> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public CpuMetricPersistenceWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new CpuMetricPersistenceWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.jvm;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.storage.base.dao.IPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.dao.IGCMetricPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.table.jvm.GCMetric;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.impl.PersistenceWorker;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class GCMetricPersistenceWorker extends PersistenceWorker<GCMetric, GCMetric> {
|
||||
|
||||
public GCMetricPersistenceWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override protected boolean needMergeDBData() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override protected IPersistenceDAO persistenceDAO() {
|
||||
return getModuleManager().find(StorageModule.NAME).getService(IGCMetricPersistenceDAO.class);
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<GCMetric, GCMetric, GCMetricPersistenceWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<GCMetric> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public GCMetricPersistenceWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new GCMetricPersistenceWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.jvm;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.storage.base.dao.IPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.dao.IInstanceHeartBeatPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.table.register.Instance;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.impl.PersistenceWorker;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class InstHeartBeatPersistenceWorker extends PersistenceWorker<Instance, Instance> {
|
||||
|
||||
public InstHeartBeatPersistenceWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return InstHeartBeatPersistenceWorker.class.hashCode();
|
||||
}
|
||||
|
||||
@Override protected boolean needMergeDBData() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override protected IPersistenceDAO persistenceDAO() {
|
||||
return getModuleManager().find(StorageModule.NAME).getService(IInstanceHeartBeatPersistenceDAO.class);
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<Instance, Instance, InstHeartBeatPersistenceWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<Instance> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public InstHeartBeatPersistenceWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new InstHeartBeatPersistenceWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.jvm;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.storage.base.dao.IPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.dao.IMemoryMetricPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.table.jvm.MemoryMetric;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.impl.PersistenceWorker;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class MemoryMetricPersistenceWorker extends PersistenceWorker<MemoryMetric, MemoryMetric> {
|
||||
|
||||
public MemoryMetricPersistenceWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override protected boolean needMergeDBData() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override protected IPersistenceDAO persistenceDAO() {
|
||||
return getModuleManager().find(StorageModule.NAME).getService(IMemoryMetricPersistenceDAO.class);
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<MemoryMetric, MemoryMetric, MemoryMetricPersistenceWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<MemoryMetric> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public MemoryMetricPersistenceWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new MemoryMetricPersistenceWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.jvm;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.storage.base.dao.IPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.dao.IMemoryPoolMetricPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.table.jvm.MemoryPoolMetric;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.impl.PersistenceWorker;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class MemoryPoolMetricPersistenceWorker extends PersistenceWorker<MemoryPoolMetric, MemoryPoolMetric> {
|
||||
|
||||
@Override public int id() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public MemoryPoolMetricPersistenceWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override protected boolean needMergeDBData() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override protected IPersistenceDAO persistenceDAO() {
|
||||
return getModuleManager().find(StorageModule.NAME).getService(IMemoryPoolMetricPersistenceDAO.class);
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<MemoryPoolMetric, MemoryPoolMetric, MemoryPoolMetricPersistenceWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<MemoryPoolMetric> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public MemoryPoolMetricPersistenceWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new MemoryPoolMetricPersistenceWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.register;
|
||||
|
||||
import org.skywalking.apm.collector.agent.stream.graph.RegisterStreamGraph;
|
||||
import org.skywalking.apm.collector.cache.CacheModule;
|
||||
import org.skywalking.apm.collector.cache.service.ApplicationCacheService;
|
||||
import org.skywalking.apm.collector.core.graph.Graph;
|
||||
import org.skywalking.apm.collector.core.graph.GraphManager;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.core.module.ModuleNotFoundException;
|
||||
import org.skywalking.apm.collector.core.module.ServiceNotProvidedException;
|
||||
import org.skywalking.apm.collector.storage.table.register.Application;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class ApplicationIDService {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(ApplicationIDService.class);
|
||||
|
||||
private final ModuleManager moduleManager;
|
||||
private final Graph<Application> applicationRegisterGraph;
|
||||
|
||||
public ApplicationIDService(ModuleManager moduleManager) {
|
||||
this.moduleManager = moduleManager;
|
||||
this.applicationRegisterGraph = GraphManager.INSTANCE.createIfAbsent(RegisterStreamGraph.APPLICATION_REGISTER_GRAPH_ID, Application.class);
|
||||
}
|
||||
|
||||
public int getOrCreate(String applicationCode) throws ModuleNotFoundException, ServiceNotProvidedException {
|
||||
ApplicationCacheService service = moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class);
|
||||
int applicationId = service.get(applicationCode);
|
||||
|
||||
if (applicationId == 0) {
|
||||
Application application = new Application(applicationCode);
|
||||
application.setApplicationCode(applicationCode);
|
||||
application.setApplicationId(0);
|
||||
|
||||
applicationRegisterGraph.start(application);
|
||||
}
|
||||
return applicationId;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.register;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.remote.service.RemoteSenderService;
|
||||
import org.skywalking.apm.collector.remote.service.Selector;
|
||||
import org.skywalking.apm.collector.storage.table.register.Application;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractRemoteWorker;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractRemoteWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.base.WorkerException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class ApplicationRegisterRemoteWorker extends AbstractRemoteWorker<Application, Application> {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(ApplicationRegisterRemoteWorker.class);
|
||||
|
||||
public ApplicationRegisterRemoteWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return ApplicationRegisterRemoteWorker.class.hashCode();
|
||||
}
|
||||
|
||||
@Override protected void onWork(Application message) throws WorkerException {
|
||||
logger.debug("application code: {}", message.getApplicationCode());
|
||||
onNext(message);
|
||||
}
|
||||
|
||||
@Override public Selector selector() {
|
||||
return Selector.ForeverFirst;
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractRemoteWorkerProvider<Application, Application, ApplicationRegisterRemoteWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, RemoteSenderService remoteSenderService, int graphId) {
|
||||
super(moduleManager, remoteSenderService, graphId);
|
||||
}
|
||||
|
||||
@Override public ApplicationRegisterRemoteWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new ApplicationRegisterRemoteWorker(moduleManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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.agent.stream.worker.register;
|
||||
|
||||
import org.skywalking.apm.collector.agent.stream.IdAutoIncrement;
|
||||
import org.skywalking.apm.collector.cache.CacheModule;
|
||||
import org.skywalking.apm.collector.cache.service.ApplicationCacheService;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.core.util.Const;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.storage.dao.IApplicationRegisterDAO;
|
||||
import org.skywalking.apm.collector.storage.table.register.Application;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorker;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.base.WorkerException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class ApplicationRegisterSerialWorker extends AbstractLocalAsyncWorker<Application, Application> {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(ApplicationRegisterSerialWorker.class);
|
||||
|
||||
private final IApplicationRegisterDAO applicationRegisterDAO;
|
||||
private final ApplicationCacheService applicationCacheService;
|
||||
|
||||
public ApplicationRegisterSerialWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
this.applicationRegisterDAO = getModuleManager().find(StorageModule.NAME).getService(IApplicationRegisterDAO.class);
|
||||
this.applicationCacheService = getModuleManager().find(CacheModule.NAME).getService(ApplicationCacheService.class);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return ApplicationRegisterSerialWorker.class.hashCode();
|
||||
}
|
||||
|
||||
@Override protected void onWork(Application application) throws WorkerException {
|
||||
logger.debug("register application, application code: {}", application.getApplicationCode());
|
||||
int applicationId = applicationCacheService.get(application.getApplicationCode());
|
||||
|
||||
if (applicationId == 0) {
|
||||
Application newApplication;
|
||||
int min = applicationRegisterDAO.getMinApplicationId();
|
||||
if (min == 0) {
|
||||
Application userApplication = new Application(String.valueOf(Const.USER_ID));
|
||||
userApplication.setApplicationCode(Const.USER_CODE);
|
||||
userApplication.setApplicationId(Const.USER_ID);
|
||||
applicationRegisterDAO.save(userApplication);
|
||||
|
||||
newApplication = new Application("-1");
|
||||
newApplication.setApplicationId(-1);
|
||||
newApplication.setApplicationCode(application.getApplicationCode());
|
||||
} else {
|
||||
int max = applicationRegisterDAO.getMaxApplicationId();
|
||||
applicationId = IdAutoIncrement.INSTANCE.increment(min, max);
|
||||
|
||||
newApplication = new Application(String.valueOf(applicationId));
|
||||
newApplication.setApplicationId(applicationId);
|
||||
newApplication.setApplicationCode(application.getApplicationCode());
|
||||
}
|
||||
applicationRegisterDAO.save(newApplication);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<Application, Application, ApplicationRegisterSerialWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<Application> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public ApplicationRegisterSerialWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new ApplicationRegisterSerialWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int queueSize() {
|
||||
return 256;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.register;
|
||||
|
||||
import org.skywalking.apm.collector.agent.stream.graph.RegisterStreamGraph;
|
||||
import org.skywalking.apm.collector.cache.CacheModule;
|
||||
import org.skywalking.apm.collector.cache.service.InstanceCacheService;
|
||||
import org.skywalking.apm.collector.core.graph.Graph;
|
||||
import org.skywalking.apm.collector.core.graph.GraphManager;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.core.module.ModuleNotFoundException;
|
||||
import org.skywalking.apm.collector.core.module.ServiceNotProvidedException;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.storage.dao.IInstanceRegisterDAO;
|
||||
import org.skywalking.apm.collector.storage.table.register.Instance;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class InstanceIDService {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(InstanceIDService.class);
|
||||
|
||||
private final ModuleManager moduleManager;
|
||||
private final Graph<Instance> instanceRegisterGraph;
|
||||
private final IInstanceRegisterDAO instanceRegisterDAO;
|
||||
|
||||
public InstanceIDService(ModuleManager moduleManager) {
|
||||
this.moduleManager = moduleManager;
|
||||
this.instanceRegisterGraph = GraphManager.INSTANCE.createIfAbsent(RegisterStreamGraph.INSTANCE_REGISTER_GRAPH_ID, Instance.class);
|
||||
this.instanceRegisterDAO = moduleManager.find(StorageModule.NAME).getService(IInstanceRegisterDAO.class);
|
||||
}
|
||||
|
||||
public int getOrCreate(int applicationId, String agentUUID, long registerTime,
|
||||
String osInfo) throws ModuleNotFoundException, ServiceNotProvidedException {
|
||||
logger.debug("get or create instance id, application id: {}, agentUUID: {}, registerTime: {}, osInfo: {}", applicationId, agentUUID, registerTime, osInfo);
|
||||
InstanceCacheService service = moduleManager.find(CacheModule.NAME).getService(InstanceCacheService.class);
|
||||
int instanceId = service.getInstanceId(applicationId, agentUUID);
|
||||
|
||||
if (instanceId == 0) {
|
||||
Instance instance = new Instance("0");
|
||||
instance.setApplicationId(applicationId);
|
||||
instance.setAgentUUID(agentUUID);
|
||||
instance.setRegisterTime(registerTime);
|
||||
instance.setHeartBeatTime(registerTime);
|
||||
instance.setInstanceId(0);
|
||||
instance.setOsInfo(osInfo);
|
||||
|
||||
instanceRegisterGraph.start(instance);
|
||||
}
|
||||
return instanceId;
|
||||
}
|
||||
|
||||
public void recover(int instanceId, int applicationId, long registerTime,
|
||||
String osInfo) throws ModuleNotFoundException, ServiceNotProvidedException {
|
||||
logger.debug("instance recover, instance id: {}, application id: {}, register time: {}", instanceId, applicationId, registerTime);
|
||||
|
||||
Instance instance = new Instance(String.valueOf(instanceId));
|
||||
instance.setApplicationId(applicationId);
|
||||
instance.setAgentUUID("");
|
||||
instance.setRegisterTime(registerTime);
|
||||
instance.setHeartBeatTime(registerTime);
|
||||
instance.setInstanceId(instanceId);
|
||||
instance.setOsInfo(osInfo);
|
||||
instanceRegisterDAO.save(instance);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.register;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.remote.service.RemoteSenderService;
|
||||
import org.skywalking.apm.collector.remote.service.Selector;
|
||||
import org.skywalking.apm.collector.storage.table.register.Instance;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractRemoteWorker;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractRemoteWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.base.WorkerException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class InstanceRegisterRemoteWorker extends AbstractRemoteWorker<Instance, Instance> {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(InstanceRegisterRemoteWorker.class);
|
||||
|
||||
@Override public int id() {
|
||||
return InstanceRegisterRemoteWorker.class.hashCode();
|
||||
}
|
||||
|
||||
public InstanceRegisterRemoteWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override protected void onWork(Instance instance) throws WorkerException {
|
||||
logger.debug("application id: {}, agentUUID: {}, register time: {}", instance.getApplicationId(), instance.getAgentUUID(), instance.getRegisterTime());
|
||||
onNext(instance);
|
||||
}
|
||||
|
||||
@Override public Selector selector() {
|
||||
return Selector.ForeverFirst;
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractRemoteWorkerProvider<Instance, Instance, InstanceRegisterRemoteWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, RemoteSenderService remoteSenderService, int graphId) {
|
||||
super(moduleManager, remoteSenderService, graphId);
|
||||
}
|
||||
|
||||
@Override public InstanceRegisterRemoteWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new InstanceRegisterRemoteWorker(moduleManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.register;
|
||||
|
||||
import org.skywalking.apm.collector.cache.CacheModule;
|
||||
import org.skywalking.apm.collector.cache.service.InstanceCacheService;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.storage.dao.IInstanceRegisterDAO;
|
||||
import org.skywalking.apm.collector.storage.table.register.Instance;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorker;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.base.WorkerException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class InstanceRegisterSerialWorker extends AbstractLocalAsyncWorker<Instance, Instance> {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(InstanceRegisterSerialWorker.class);
|
||||
|
||||
private final InstanceCacheService instanceCacheService;
|
||||
private final IInstanceRegisterDAO instanceRegisterDAO;
|
||||
|
||||
public InstanceRegisterSerialWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
this.instanceCacheService = getModuleManager().find(CacheModule.NAME).getService(InstanceCacheService.class);
|
||||
this.instanceRegisterDAO = getModuleManager().find(StorageModule.NAME).getService(IInstanceRegisterDAO.class);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return InstanceRegisterSerialWorker.class.hashCode();
|
||||
}
|
||||
|
||||
@Override protected void onWork(Instance instance) throws WorkerException {
|
||||
logger.debug("register instance, application id: {}, agentUUID: {}", instance.getApplicationId(), instance.getAgentUUID());
|
||||
int instanceId = instanceCacheService.getInstanceId(instance.getApplicationId(), instance.getAgentUUID());
|
||||
if (instanceId == 0) {
|
||||
Instance newInstance;
|
||||
|
||||
int min = instanceRegisterDAO.getMinInstanceId();
|
||||
int max = instanceRegisterDAO.getMaxInstanceId();
|
||||
if (min == 0 && max == 0) {
|
||||
newInstance = new Instance("1");
|
||||
newInstance.setInstanceId(1);
|
||||
newInstance.setApplicationId(instance.getApplicationId());
|
||||
newInstance.setAgentUUID(instance.getAgentUUID());
|
||||
newInstance.setHeartBeatTime(instance.getHeartBeatTime());
|
||||
newInstance.setOsInfo(instance.getOsInfo());
|
||||
newInstance.setRegisterTime(instance.getRegisterTime());
|
||||
} else {
|
||||
newInstance = new Instance(String.valueOf(max + 1));
|
||||
newInstance.setInstanceId(max + 1);
|
||||
newInstance.setApplicationId(instance.getApplicationId());
|
||||
newInstance.setAgentUUID(instance.getAgentUUID());
|
||||
newInstance.setHeartBeatTime(instance.getHeartBeatTime());
|
||||
newInstance.setOsInfo(instance.getOsInfo());
|
||||
newInstance.setRegisterTime(instance.getRegisterTime());
|
||||
}
|
||||
instanceRegisterDAO.save(newInstance);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<Instance, Instance, InstanceRegisterSerialWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<Instance> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public InstanceRegisterSerialWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new InstanceRegisterSerialWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int queueSize() {
|
||||
return 256;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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.agent.stream.worker.register;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.remote.service.RemoteSenderService;
|
||||
import org.skywalking.apm.collector.remote.service.Selector;
|
||||
import org.skywalking.apm.collector.storage.table.register.ServiceName;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractRemoteWorker;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractRemoteWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.base.WorkerException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class ServiceNameRegisterRemoteWorker extends AbstractRemoteWorker<ServiceName, ServiceName> {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(ServiceNameRegisterRemoteWorker.class);
|
||||
|
||||
public ServiceNameRegisterRemoteWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return ServiceNameRegisterRemoteWorker.class.hashCode();
|
||||
}
|
||||
|
||||
@Override protected void onWork(ServiceName serviceName) throws WorkerException {
|
||||
onNext(serviceName);
|
||||
}
|
||||
|
||||
@Override public Selector selector() {
|
||||
return Selector.ForeverFirst;
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractRemoteWorkerProvider<ServiceName, ServiceName, ServiceNameRegisterRemoteWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, RemoteSenderService remoteSenderService, int graphId) {
|
||||
super(moduleManager, remoteSenderService, graphId);
|
||||
}
|
||||
|
||||
@Override public ServiceNameRegisterRemoteWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new ServiceNameRegisterRemoteWorker(moduleManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,101 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.register;
|
||||
|
||||
import org.skywalking.apm.collector.agent.stream.IdAutoIncrement;
|
||||
import org.skywalking.apm.collector.cache.CacheModule;
|
||||
import org.skywalking.apm.collector.cache.service.ServiceIdCacheService;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.core.util.Const;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.storage.dao.IServiceNameRegisterDAO;
|
||||
import org.skywalking.apm.collector.storage.table.register.ServiceName;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorker;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.base.WorkerException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class ServiceNameRegisterSerialWorker extends AbstractLocalAsyncWorker<ServiceName, ServiceName> {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(ServiceNameRegisterSerialWorker.class);
|
||||
|
||||
private final IServiceNameRegisterDAO serviceNameRegisterDAO;
|
||||
private final ServiceIdCacheService serviceIdCacheService;
|
||||
|
||||
public ServiceNameRegisterSerialWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
this.serviceNameRegisterDAO = getModuleManager().find(StorageModule.NAME).getService(IServiceNameRegisterDAO.class);
|
||||
this.serviceIdCacheService = getModuleManager().find(CacheModule.NAME).getService(ServiceIdCacheService.class);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return ServiceNameRegisterSerialWorker.class.hashCode();
|
||||
}
|
||||
|
||||
@Override protected void onWork(ServiceName serviceName) throws WorkerException {
|
||||
logger.debug("register service name: {}, application id: {}", serviceName.getServiceName(), serviceName.getApplicationId());
|
||||
int serviceId = serviceIdCacheService.get(serviceName.getApplicationId(), serviceName.getServiceName());
|
||||
if (serviceId == 0) {
|
||||
ServiceName newServiceName;
|
||||
|
||||
int min = serviceNameRegisterDAO.getMinServiceId();
|
||||
if (min == 0) {
|
||||
ServiceName noneServiceName = new ServiceName("1");
|
||||
noneServiceName.setApplicationId(0);
|
||||
noneServiceName.setServiceId(Const.NONE_SERVICE_ID);
|
||||
noneServiceName.setServiceName(Const.NONE_SERVICE_NAME);
|
||||
serviceNameRegisterDAO.save(noneServiceName);
|
||||
|
||||
newServiceName = new ServiceName("-1");
|
||||
newServiceName.setApplicationId(serviceName.getApplicationId());
|
||||
newServiceName.setServiceId(-1);
|
||||
newServiceName.setServiceName(serviceName.getServiceName());
|
||||
} else {
|
||||
int max = serviceNameRegisterDAO.getMaxServiceId();
|
||||
serviceId = IdAutoIncrement.INSTANCE.increment(min, max);
|
||||
|
||||
newServiceName = new ServiceName(String.valueOf(serviceId));
|
||||
newServiceName.setApplicationId(serviceName.getApplicationId());
|
||||
newServiceName.setServiceId(serviceId);
|
||||
newServiceName.setServiceName(serviceName.getServiceName());
|
||||
}
|
||||
serviceNameRegisterDAO.save(newServiceName);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<ServiceName, ServiceName, ServiceNameRegisterSerialWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<ServiceName> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public ServiceNameRegisterSerialWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new ServiceNameRegisterSerialWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int queueSize() {
|
||||
return 256;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.register;
|
||||
|
||||
import org.skywalking.apm.collector.agent.stream.graph.RegisterStreamGraph;
|
||||
import org.skywalking.apm.collector.cache.CacheModule;
|
||||
import org.skywalking.apm.collector.cache.service.ServiceIdCacheService;
|
||||
import org.skywalking.apm.collector.core.graph.Graph;
|
||||
import org.skywalking.apm.collector.core.graph.GraphManager;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.storage.table.register.ServiceName;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class ServiceNameService {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(ServiceNameService.class);
|
||||
|
||||
private final ModuleManager moduleManager;
|
||||
private final Graph<ServiceName> serviceNameRegisterGraph;
|
||||
|
||||
public ServiceNameService(ModuleManager moduleManager) {
|
||||
this.moduleManager = moduleManager;
|
||||
this.serviceNameRegisterGraph = GraphManager.INSTANCE.createIfAbsent(RegisterStreamGraph.SERVICE_NAME_REGISTER_GRAPH_ID, ServiceName.class);
|
||||
}
|
||||
|
||||
public int getOrCreate(int applicationId, String serviceName) {
|
||||
ServiceIdCacheService idCacheService = moduleManager.find(CacheModule.NAME).getService(ServiceIdCacheService.class);
|
||||
int serviceId = idCacheService.get(applicationId, serviceName);
|
||||
|
||||
if (serviceId == 0) {
|
||||
ServiceName service = new ServiceName("0");
|
||||
service.setApplicationId(applicationId);
|
||||
service.setServiceName(serviceName);
|
||||
service.setServiceId(0);
|
||||
|
||||
serviceNameRegisterGraph.start(service);
|
||||
}
|
||||
return serviceId;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.trace.global;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.storage.base.dao.IPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.dao.IGlobalTracePersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.table.global.GlobalTrace;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.impl.PersistenceWorker;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class GlobalTracePersistenceWorker extends PersistenceWorker<GlobalTrace, GlobalTrace> {
|
||||
|
||||
public GlobalTracePersistenceWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override protected boolean needMergeDBData() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override protected IPersistenceDAO persistenceDAO() {
|
||||
return getModuleManager().find(StorageModule.NAME).getService(IGlobalTracePersistenceDAO.class);
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<GlobalTrace, GlobalTrace, GlobalTracePersistenceWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<GlobalTrace> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public GlobalTracePersistenceWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new GlobalTracePersistenceWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,21 +16,19 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.global;
|
||||
package org.skywalking.apm.collector.agent.stream.worker.trace.global;
|
||||
|
||||
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.agent.stream.graph.TraceStreamGraph;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.FirstSpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.GlobalTraceIdsListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.SpanDecorator;
|
||||
import org.skywalking.apm.collector.core.graph.Graph;
|
||||
import org.skywalking.apm.collector.core.graph.GraphManager;
|
||||
import org.skywalking.apm.collector.core.util.Const;
|
||||
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
|
||||
import org.skywalking.apm.collector.storage.define.global.GlobalTraceDataDefine;
|
||||
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.collector.storage.table.global.GlobalTrace;
|
||||
import org.skywalking.apm.network.proto.UniqueId;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
|
@ -47,7 +45,7 @@ public class GlobalTraceSpanListener implements FirstSpanListener, GlobalTraceId
|
|||
private long timeBucket;
|
||||
|
||||
@Override
|
||||
public void parseFirst(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId,
|
||||
public void parseFirst(SpanDecorator spanDecorator, int applicationId, int instanceId,
|
||||
String segmentId) {
|
||||
this.timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime());
|
||||
this.segmentId = segmentId;
|
||||
|
|
@ -67,20 +65,14 @@ public class GlobalTraceSpanListener implements FirstSpanListener, GlobalTraceId
|
|||
|
||||
@Override public void build() {
|
||||
logger.debug("global trace listener build");
|
||||
StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME);
|
||||
|
||||
Graph<GlobalTrace> graph = GraphManager.INSTANCE.createIfAbsent(TraceStreamGraph.GLOBAL_TRACE_GRAPH_ID, GlobalTrace.class);
|
||||
for (String globalTraceId : globalTraceIds) {
|
||||
GlobalTraceDataDefine.GlobalTrace globalTrace = new GlobalTraceDataDefine.GlobalTrace();
|
||||
GlobalTrace globalTrace = new GlobalTrace(segmentId + Const.ID_SPLIT + globalTraceId);
|
||||
globalTrace.setGlobalTraceId(globalTraceId);
|
||||
globalTrace.setId(segmentId + Const.ID_SPLIT + globalTraceId);
|
||||
globalTrace.setSegmentId(segmentId);
|
||||
globalTrace.setTimeBucket(timeBucket);
|
||||
try {
|
||||
logger.debug("send to global trace persistence worker, id: {}", globalTrace.getId());
|
||||
context.getClusterWorkerContext().lookup(GlobalTracePersistenceWorker.WorkerRole.INSTANCE).tell(globalTrace.toData());
|
||||
} catch (WorkerInvokeException | WorkerNotFoundException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
graph.start(globalTrace);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.trace.instance;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.storage.base.dao.IPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.dao.IInstPerformancePersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.table.instance.InstPerformance;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.impl.PersistenceWorker;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class InstPerformancePersistenceWorker extends PersistenceWorker<InstPerformance, InstPerformance> {
|
||||
|
||||
public InstPerformancePersistenceWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return InstPerformancePersistenceWorker.class.hashCode();
|
||||
}
|
||||
|
||||
@Override protected boolean needMergeDBData() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override protected IPersistenceDAO persistenceDAO() {
|
||||
return getModuleManager().find(StorageModule.NAME).getService(IInstPerformancePersistenceDAO.class);
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<InstPerformance, InstPerformance, InstPerformancePersistenceWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<InstPerformance> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public InstPerformancePersistenceWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new InstPerformancePersistenceWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,19 +16,17 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.instance.performance;
|
||||
package org.skywalking.apm.collector.agent.stream.worker.trace.instance;
|
||||
|
||||
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.agent.stream.graph.TraceStreamGraph;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.EntrySpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.FirstSpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.SpanDecorator;
|
||||
import org.skywalking.apm.collector.core.graph.Graph;
|
||||
import org.skywalking.apm.collector.core.graph.GraphManager;
|
||||
import org.skywalking.apm.collector.core.util.Const;
|
||||
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
|
||||
import org.skywalking.apm.collector.storage.define.instance.InstPerformanceDataDefine;
|
||||
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.collector.storage.table.instance.InstPerformance;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
|
@ -45,35 +43,28 @@ public class InstPerformanceSpanListener implements EntrySpanListener, FirstSpan
|
|||
private long timeBucket;
|
||||
|
||||
@Override
|
||||
public void parseEntry(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId,
|
||||
public void parseEntry(SpanDecorator spanDecorator, int applicationId, int instanceId,
|
||||
String segmentId) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseFirst(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId,
|
||||
public void parseFirst(SpanDecorator spanDecorator, int applicationId, int instanceId,
|
||||
String segmentId) {
|
||||
this.applicationId = applicationId;
|
||||
this.instanceId = applicationInstanceId;
|
||||
this.instanceId = instanceId;
|
||||
this.cost = spanDecorator.getEndTime() - spanDecorator.getStartTime();
|
||||
timeBucket = TimeBucketUtils.INSTANCE.getSecondTimeBucket(spanDecorator.getStartTime());
|
||||
}
|
||||
|
||||
@Override public void build() {
|
||||
StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME);
|
||||
|
||||
InstPerformanceDataDefine.InstPerformance instPerformance = new InstPerformanceDataDefine.InstPerformance();
|
||||
instPerformance.setId(timeBucket + Const.ID_SPLIT + instanceId);
|
||||
InstPerformance instPerformance = new InstPerformance(timeBucket + Const.ID_SPLIT + instanceId);
|
||||
instPerformance.setApplicationId(applicationId);
|
||||
instPerformance.setInstanceId(instanceId);
|
||||
instPerformance.setCalls(1);
|
||||
instPerformance.setCostTotal(cost);
|
||||
instPerformance.setTimeBucket(timeBucket);
|
||||
|
||||
try {
|
||||
logger.debug("send to instance performance persistence worker, id: {}", instPerformance.getId());
|
||||
context.getClusterWorkerContext().lookup(InstPerformancePersistenceWorker.WorkerRole.INSTANCE).tell(instPerformance.toData());
|
||||
} catch (WorkerInvokeException | WorkerNotFoundException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
Graph<InstPerformance> graph = GraphManager.INSTANCE.createIfAbsent(TraceStreamGraph.INST_PERFORMANCE_GRAPH_ID, InstPerformance.class);
|
||||
graph.start(instPerformance);
|
||||
}
|
||||
}
|
||||
|
|
@ -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.agent.stream.worker.trace.node;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.table.node.NodeComponent;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.impl.AggregationWorker;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class NodeComponentAggregationWorker extends AggregationWorker<NodeComponent, NodeComponent> {
|
||||
|
||||
public NodeComponentAggregationWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return NodeComponentAggregationWorker.class.hashCode();
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<NodeComponent, NodeComponent, NodeComponentAggregationWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<NodeComponent> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public NodeComponentAggregationWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new NodeComponentAggregationWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.trace.node;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.storage.base.dao.IPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.dao.INodeComponentPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.table.node.NodeComponent;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.impl.PersistenceWorker;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class NodeComponentPersistenceWorker extends PersistenceWorker<NodeComponent, NodeComponent> {
|
||||
|
||||
public NodeComponentPersistenceWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return NodeComponentPersistenceWorker.class.hashCode();
|
||||
}
|
||||
|
||||
@Override protected boolean needMergeDBData() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override protected IPersistenceDAO persistenceDAO() {
|
||||
return getModuleManager().find(StorageModule.NAME).getService(INodeComponentPersistenceDAO.class);
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<NodeComponent, NodeComponent, NodeComponentPersistenceWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<NodeComponent> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public NodeComponentPersistenceWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new NodeComponentPersistenceWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.trace.node;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.remote.service.RemoteSenderService;
|
||||
import org.skywalking.apm.collector.remote.service.Selector;
|
||||
import org.skywalking.apm.collector.storage.table.node.NodeComponent;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractRemoteWorker;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractRemoteWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.base.WorkerException;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class NodeComponentRemoteWorker extends AbstractRemoteWorker<NodeComponent, NodeComponent> {
|
||||
|
||||
public NodeComponentRemoteWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return NodeComponentRemoteWorker.class.hashCode();
|
||||
}
|
||||
|
||||
@Override protected void onWork(NodeComponent nodeComponent) throws WorkerException {
|
||||
onNext(nodeComponent);
|
||||
}
|
||||
|
||||
@Override public Selector selector() {
|
||||
return Selector.HashCode;
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractRemoteWorkerProvider<NodeComponent, NodeComponent, NodeComponentRemoteWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, RemoteSenderService remoteSenderService, int graphId) {
|
||||
super(moduleManager, remoteSenderService, graphId);
|
||||
}
|
||||
|
||||
@Override public NodeComponentRemoteWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new NodeComponentRemoteWorker(moduleManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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.agent.stream.worker.trace.node;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.skywalking.apm.collector.agent.stream.graph.TraceStreamGraph;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.EntrySpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.ExitSpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.FirstSpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.SpanDecorator;
|
||||
import org.skywalking.apm.collector.core.graph.Graph;
|
||||
import org.skywalking.apm.collector.core.graph.GraphManager;
|
||||
import org.skywalking.apm.collector.core.util.Const;
|
||||
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
|
||||
import org.skywalking.apm.collector.storage.table.node.NodeComponent;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class NodeComponentSpanListener implements EntrySpanListener, ExitSpanListener, FirstSpanListener {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(NodeComponentSpanListener.class);
|
||||
|
||||
private List<NodeComponent> nodeComponents = new ArrayList<>();
|
||||
private long timeBucket;
|
||||
|
||||
@Override
|
||||
public void parseExit(SpanDecorator spanDecorator, int applicationId, int instanceId, String segmentId) {
|
||||
NodeComponent nodeComponent = new NodeComponent(Const.EMPTY_STRING);
|
||||
nodeComponent.setComponentId(spanDecorator.getComponentId());
|
||||
nodeComponent.setPeerId(spanDecorator.getPeerId());
|
||||
|
||||
String id = String.valueOf(nodeComponent.getComponentId()) + Const.ID_SPLIT + nodeComponent.getPeerId();
|
||||
|
||||
nodeComponent.setId(id);
|
||||
nodeComponents.add(nodeComponent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseEntry(SpanDecorator spanDecorator, int applicationId, int instanceId,
|
||||
String segmentId) {
|
||||
NodeComponent nodeComponent = new NodeComponent(Const.EMPTY_STRING);
|
||||
nodeComponent.setComponentId(spanDecorator.getComponentId());
|
||||
nodeComponent.setPeerId(applicationId);
|
||||
|
||||
String id = String.valueOf(nodeComponent.getComponentId()) + Const.ID_SPLIT + String.valueOf(applicationId);
|
||||
nodeComponent.setId(id);
|
||||
|
||||
nodeComponents.add(nodeComponent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseFirst(SpanDecorator spanDecorator, int applicationId, int instanceId,
|
||||
String segmentId) {
|
||||
timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime());
|
||||
}
|
||||
|
||||
@Override public void build() {
|
||||
Graph<NodeComponent> graph = GraphManager.INSTANCE.createIfAbsent(TraceStreamGraph.NODE_COMPONENT_GRAPH_ID, NodeComponent.class);
|
||||
|
||||
nodeComponents.forEach(nodeComponent -> {
|
||||
nodeComponent.setId(timeBucket + Const.ID_SPLIT + nodeComponent.getId());
|
||||
nodeComponent.setTimeBucket(timeBucket);
|
||||
graph.start(nodeComponent);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -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.agent.stream.worker.trace.node;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.table.node.NodeMapping;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.impl.AggregationWorker;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class NodeMappingAggregationWorker extends AggregationWorker<NodeMapping, NodeMapping> {
|
||||
|
||||
public NodeMappingAggregationWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return NodeMappingAggregationWorker.class.hashCode();
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<NodeMapping, NodeMapping, NodeMappingAggregationWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<NodeMapping> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public NodeMappingAggregationWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new NodeMappingAggregationWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.trace.node;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.storage.base.dao.IPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.dao.INodeMappingPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.table.node.NodeMapping;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.impl.PersistenceWorker;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class NodeMappingPersistenceWorker extends PersistenceWorker<NodeMapping, NodeMapping> {
|
||||
|
||||
public NodeMappingPersistenceWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return NodeMappingPersistenceWorker.class.hashCode();
|
||||
}
|
||||
|
||||
@Override protected boolean needMergeDBData() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override protected IPersistenceDAO persistenceDAO() {
|
||||
return getModuleManager().find(StorageModule.NAME).getService(INodeMappingPersistenceDAO.class);
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<NodeMapping, NodeMapping, NodeMappingPersistenceWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<NodeMapping> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public NodeMappingPersistenceWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new NodeMappingPersistenceWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.trace.node;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.remote.service.RemoteSenderService;
|
||||
import org.skywalking.apm.collector.remote.service.Selector;
|
||||
import org.skywalking.apm.collector.storage.table.node.NodeMapping;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractRemoteWorker;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractRemoteWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.base.WorkerException;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class NodeMappingRemoteWorker extends AbstractRemoteWorker<NodeMapping, NodeMapping> {
|
||||
|
||||
public NodeMappingRemoteWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return NodeMappingRemoteWorker.class.hashCode();
|
||||
}
|
||||
|
||||
@Override protected void onWork(NodeMapping nodeMapping) throws WorkerException {
|
||||
onNext(nodeMapping);
|
||||
}
|
||||
|
||||
@Override public Selector selector() {
|
||||
return Selector.HashCode;
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractRemoteWorkerProvider<NodeMapping, NodeMapping, NodeMappingRemoteWorker> {
|
||||
public Factory(ModuleManager moduleManager, RemoteSenderService remoteSenderService, int graphId) {
|
||||
super(moduleManager, remoteSenderService, graphId);
|
||||
}
|
||||
|
||||
@Override public NodeMappingRemoteWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new NodeMappingRemoteWorker(moduleManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,22 +16,20 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.node.mapping;
|
||||
package org.skywalking.apm.collector.agent.stream.worker.trace.node;
|
||||
|
||||
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.agent.stream.graph.TraceStreamGraph;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.FirstSpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.RefsListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.ReferenceDecorator;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.SpanDecorator;
|
||||
import org.skywalking.apm.collector.core.graph.Graph;
|
||||
import org.skywalking.apm.collector.core.graph.GraphManager;
|
||||
import org.skywalking.apm.collector.core.util.Const;
|
||||
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
|
||||
import org.skywalking.apm.collector.storage.define.node.NodeMappingDataDefine;
|
||||
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.collector.storage.table.node.NodeMapping;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
|
@ -42,40 +40,35 @@ public class NodeMappingSpanListener implements RefsListener, FirstSpanListener
|
|||
|
||||
private final Logger logger = LoggerFactory.getLogger(NodeMappingSpanListener.class);
|
||||
|
||||
private List<NodeMappingDataDefine.NodeMapping> nodeMappings = new ArrayList<>();
|
||||
private List<NodeMapping> nodeMappings = new ArrayList<>();
|
||||
private long timeBucket;
|
||||
|
||||
@Override public void parseRef(ReferenceDecorator referenceDecorator, int applicationId, int applicationInstanceId,
|
||||
@Override public void parseRef(ReferenceDecorator referenceDecorator, int applicationId, int instanceId,
|
||||
String segmentId) {
|
||||
logger.debug("node mapping listener parse reference");
|
||||
NodeMappingDataDefine.NodeMapping nodeMapping = new NodeMappingDataDefine.NodeMapping();
|
||||
NodeMapping nodeMapping = new NodeMapping(Const.EMPTY_STRING);
|
||||
nodeMapping.setApplicationId(applicationId);
|
||||
nodeMapping.setAddressId(referenceDecorator.getNetworkAddressId());
|
||||
nodeMapping.setAddress(Const.EMPTY_STRING);
|
||||
String id = String.valueOf(applicationId) + Const.ID_SPLIT + String.valueOf(nodeMapping.getAddressId());
|
||||
nodeMapping.setId(id);
|
||||
nodeMappings.add(nodeMapping);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseFirst(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId,
|
||||
public void parseFirst(SpanDecorator spanDecorator, int applicationId, int instanceId,
|
||||
String segmentId) {
|
||||
timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime());
|
||||
}
|
||||
|
||||
@Override public void build() {
|
||||
logger.debug("node mapping listener build");
|
||||
StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME);
|
||||
Graph<NodeMapping> graph = GraphManager.INSTANCE.createIfAbsent(TraceStreamGraph.NODE_MAPPING_GRAPH_ID, NodeMapping.class);
|
||||
|
||||
for (NodeMappingDataDefine.NodeMapping nodeMapping : nodeMappings) {
|
||||
try {
|
||||
nodeMapping.setId(timeBucket + Const.ID_SPLIT + nodeMapping.getId());
|
||||
nodeMapping.setTimeBucket(timeBucket);
|
||||
logger.debug("send to node mapping aggregation worker, id: {}", nodeMapping.getId());
|
||||
context.getClusterWorkerContext().lookup(NodeMappingAggregationWorker.WorkerRole.INSTANCE).tell(nodeMapping.toData());
|
||||
} catch (WorkerInvokeException | WorkerNotFoundException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
for (NodeMapping nodeMapping : nodeMappings) {
|
||||
nodeMapping.setId(timeBucket + Const.ID_SPLIT + nodeMapping.getId());
|
||||
nodeMapping.setTimeBucket(timeBucket);
|
||||
logger.debug("send to node mapping aggregation worker, id: {}", nodeMapping.getId());
|
||||
graph.start(nodeMapping);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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.agent.stream.worker.trace.noderef;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.table.noderef.NodeReference;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.impl.AggregationWorker;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class NodeReferenceAggregationWorker extends AggregationWorker<NodeReference, NodeReference> {
|
||||
|
||||
public NodeReferenceAggregationWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return NodeReferenceAggregationWorker.class.hashCode();
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<NodeReference, NodeReference, NodeReferenceAggregationWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<NodeReference> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public NodeReferenceAggregationWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new NodeReferenceAggregationWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.trace.noderef;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.storage.base.dao.IPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.dao.INodeReferencePersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.table.noderef.NodeReference;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.impl.PersistenceWorker;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class NodeReferencePersistenceWorker extends PersistenceWorker<NodeReference, NodeReference> {
|
||||
|
||||
public NodeReferencePersistenceWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override protected boolean needMergeDBData() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override protected IPersistenceDAO persistenceDAO() {
|
||||
return getModuleManager().find(StorageModule.NAME).getService(INodeReferencePersistenceDAO.class);
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<NodeReference, NodeReference, NodeReferencePersistenceWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<NodeReference> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public NodeReferencePersistenceWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new NodeReferencePersistenceWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.trace.noderef;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.remote.service.RemoteSenderService;
|
||||
import org.skywalking.apm.collector.remote.service.Selector;
|
||||
import org.skywalking.apm.collector.storage.table.noderef.NodeReference;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractRemoteWorker;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractRemoteWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.base.WorkerException;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class NodeReferenceRemoteWorker extends AbstractRemoteWorker<NodeReference, NodeReference> {
|
||||
|
||||
public NodeReferenceRemoteWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return NodeReferenceRemoteWorker.class.hashCode();
|
||||
}
|
||||
|
||||
@Override protected void onWork(NodeReference nodeReference) throws WorkerException {
|
||||
onNext(nodeReference);
|
||||
}
|
||||
|
||||
@Override public Selector selector() {
|
||||
return Selector.HashCode;
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractRemoteWorkerProvider<NodeReference, NodeReference, NodeReferenceRemoteWorker> {
|
||||
public Factory(ModuleManager moduleManager, RemoteSenderService remoteSenderService, int graphId) {
|
||||
super(moduleManager, remoteSenderService, graphId);
|
||||
}
|
||||
|
||||
@Override public NodeReferenceRemoteWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new NodeReferenceRemoteWorker(moduleManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,25 +16,25 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.noderef;
|
||||
package org.skywalking.apm.collector.agent.stream.worker.trace.noderef;
|
||||
|
||||
import java.util.LinkedList;
|
||||
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.agent.stream.graph.TraceStreamGraph;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.EntrySpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.ExitSpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.RefsListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.ReferenceDecorator;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.SpanDecorator;
|
||||
import org.skywalking.apm.collector.cache.CacheModule;
|
||||
import org.skywalking.apm.collector.cache.service.InstanceCacheService;
|
||||
import org.skywalking.apm.collector.core.graph.Graph;
|
||||
import org.skywalking.apm.collector.core.graph.GraphManager;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
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.skywalking.apm.collector.storage.define.noderef.NodeReferenceDataDefine;
|
||||
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.collector.storage.table.noderef.NodeReference;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
|
@ -45,15 +45,21 @@ public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanLis
|
|||
|
||||
private final Logger logger = LoggerFactory.getLogger(NodeReferenceSpanListener.class);
|
||||
|
||||
private List<NodeReferenceDataDefine.NodeReference> nodeReferences = new LinkedList<>();
|
||||
private List<NodeReferenceDataDefine.NodeReference> references = new LinkedList<>();
|
||||
private final InstanceCacheService instanceCacheService;
|
||||
private final List<NodeReference> nodeReferences;
|
||||
private final List<NodeReference> references;
|
||||
|
||||
public NodeReferenceSpanListener(ModuleManager moduleManager) {
|
||||
this.nodeReferences = new LinkedList<>();
|
||||
this.references = new LinkedList<>();
|
||||
this.instanceCacheService = moduleManager.find(CacheModule.NAME).getService(InstanceCacheService.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseExit(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId) {
|
||||
NodeReferenceDataDefine.NodeReference nodeReference = new NodeReferenceDataDefine.NodeReference();
|
||||
public void parseExit(SpanDecorator spanDecorator, int applicationId, int instanceId, String segmentId) {
|
||||
NodeReference nodeReference = new NodeReference(Const.EMPTY_STRING);
|
||||
nodeReference.setFrontApplicationId(applicationId);
|
||||
nodeReference.setBehindApplicationId(spanDecorator.getPeerId());
|
||||
nodeReference.setBehindPeer(Const.EMPTY_STRING);
|
||||
nodeReference.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime()));
|
||||
|
||||
StringBuilder idBuilder = new StringBuilder();
|
||||
|
|
@ -65,7 +71,7 @@ public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanLis
|
|||
}
|
||||
|
||||
@Override
|
||||
public void parseEntry(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId,
|
||||
public void parseEntry(SpanDecorator spanDecorator, int applicationId, int instanceId,
|
||||
String segmentId) {
|
||||
if (CollectionUtils.isNotEmpty(references)) {
|
||||
references.forEach(nodeReference -> {
|
||||
|
|
@ -77,10 +83,9 @@ public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanLis
|
|||
nodeReferences.add(buildNodeRefSum(nodeReference, spanDecorator.getStartTime(), spanDecorator.getEndTime(), spanDecorator.getIsError()));
|
||||
});
|
||||
} else {
|
||||
NodeReferenceDataDefine.NodeReference nodeReference = new NodeReferenceDataDefine.NodeReference();
|
||||
NodeReference nodeReference = new NodeReference(Const.EMPTY_STRING);
|
||||
nodeReference.setFrontApplicationId(Const.USER_ID);
|
||||
nodeReference.setBehindApplicationId(applicationId);
|
||||
nodeReference.setBehindPeer(Const.EMPTY_STRING);
|
||||
nodeReference.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime()));
|
||||
|
||||
String idBuilder = String.valueOf(nodeReference.getTimeBucket()) + Const.ID_SPLIT + nodeReference.getFrontApplicationId() +
|
||||
|
|
@ -91,42 +96,35 @@ public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanLis
|
|||
}
|
||||
}
|
||||
|
||||
@Override public void parseRef(ReferenceDecorator referenceDecorator, int applicationId, int applicationInstanceId,
|
||||
@Override public void parseRef(ReferenceDecorator referenceDecorator, int applicationId, int instanceId,
|
||||
String segmentId) {
|
||||
int parentApplicationId = InstanceCache.get(referenceDecorator.getParentApplicationInstanceId());
|
||||
int parentApplicationId = instanceCacheService.get(referenceDecorator.getParentApplicationInstanceId());
|
||||
|
||||
NodeReferenceDataDefine.NodeReference referenceSum = new NodeReferenceDataDefine.NodeReference();
|
||||
NodeReference referenceSum = new NodeReference(Const.EMPTY_STRING);
|
||||
referenceSum.setFrontApplicationId(parentApplicationId);
|
||||
referenceSum.setBehindApplicationId(applicationId);
|
||||
referenceSum.setBehindPeer(Const.EMPTY_STRING);
|
||||
references.add(referenceSum);
|
||||
}
|
||||
|
||||
@Override public void build() {
|
||||
logger.debug("node reference summary listener build");
|
||||
StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME);
|
||||
|
||||
for (NodeReferenceDataDefine.NodeReference nodeReference : nodeReferences) {
|
||||
try {
|
||||
logger.debug("send to node reference summary aggregation worker, id: {}", nodeReference.getId());
|
||||
context.getClusterWorkerContext().lookup(NodeReferenceAggregationWorker.WorkerRole.INSTANCE).tell(nodeReference.toData());
|
||||
} catch (WorkerInvokeException | WorkerNotFoundException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
Graph<NodeReference> graph = GraphManager.INSTANCE.createIfAbsent(TraceStreamGraph.NODE_REFERENCE_GRAPH_ID, NodeReference.class);
|
||||
for (NodeReference nodeReference : nodeReferences) {
|
||||
graph.start(nodeReference);
|
||||
}
|
||||
}
|
||||
|
||||
private NodeReferenceDataDefine.NodeReference buildNodeRefSum(NodeReferenceDataDefine.NodeReference reference,
|
||||
private NodeReference buildNodeRefSum(NodeReference reference,
|
||||
long startTime, long endTime, boolean isError) {
|
||||
long cost = endTime - startTime;
|
||||
if (cost <= 1000 && !isError) {
|
||||
reference.setS1LTE(1);
|
||||
reference.setS1Lte(1);
|
||||
} else if (1000 < cost && cost <= 3000 && !isError) {
|
||||
reference.setS3LTE(1);
|
||||
reference.setS3Lte(1);
|
||||
} else if (3000 < cost && cost <= 5000 && !isError) {
|
||||
reference.setS5LTE(1);
|
||||
reference.setS5Lte(1);
|
||||
} else if (5000 < cost && !isError) {
|
||||
reference.setS5GT(1);
|
||||
reference.setS5Gt(1);
|
||||
} else {
|
||||
reference.setError(1);
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.trace.segment;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.storage.base.dao.IPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.dao.ISegmentCostPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.table.segment.SegmentCost;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.impl.PersistenceWorker;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class SegmentCostPersistenceWorker extends PersistenceWorker<SegmentCost, SegmentCost> {
|
||||
|
||||
public SegmentCostPersistenceWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return SegmentCostPersistenceWorker.class.hashCode();
|
||||
}
|
||||
|
||||
@Override protected boolean needMergeDBData() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override protected IPersistenceDAO persistenceDAO() {
|
||||
return getModuleManager().find(StorageModule.NAME).getService(ISegmentCostPersistenceDAO.class);
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<SegmentCost, SegmentCost, SegmentCostPersistenceWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<SegmentCost> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public SegmentCostPersistenceWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new SegmentCostPersistenceWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,23 +16,24 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.segment.cost;
|
||||
package org.skywalking.apm.collector.agent.stream.worker.trace.segment;
|
||||
|
||||
import java.util.ArrayList;
|
||||
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.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.agent.stream.graph.TraceStreamGraph;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.EntrySpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.ExitSpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.FirstSpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.LocalSpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.SpanDecorator;
|
||||
import org.skywalking.apm.collector.cache.CacheModule;
|
||||
import org.skywalking.apm.collector.cache.service.ServiceNameCacheService;
|
||||
import org.skywalking.apm.collector.core.graph.Graph;
|
||||
import org.skywalking.apm.collector.core.graph.GraphManager;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.core.util.Const;
|
||||
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
|
||||
import org.skywalking.apm.collector.storage.define.segment.SegmentCostDataDefine;
|
||||
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.collector.storage.table.segment.SegmentCost;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
|
@ -43,16 +44,22 @@ public class SegmentCostSpanListener implements EntrySpanListener, ExitSpanListe
|
|||
|
||||
private final Logger logger = LoggerFactory.getLogger(SegmentCostSpanListener.class);
|
||||
|
||||
private List<SegmentCostDataDefine.SegmentCost> segmentCosts = new ArrayList<>();
|
||||
private final List<SegmentCost> segmentCosts;
|
||||
private final ServiceNameCacheService serviceNameCacheService;
|
||||
private boolean isError = false;
|
||||
private long timeBucket;
|
||||
|
||||
public SegmentCostSpanListener(ModuleManager moduleManager) {
|
||||
this.segmentCosts = new ArrayList<>();
|
||||
this.serviceNameCacheService = moduleManager.find(CacheModule.NAME).getService(ServiceNameCacheService.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseFirst(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId,
|
||||
public void parseFirst(SpanDecorator spanDecorator, int applicationId, int instanceId,
|
||||
String segmentId) {
|
||||
timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime());
|
||||
|
||||
SegmentCostDataDefine.SegmentCost segmentCost = new SegmentCostDataDefine.SegmentCost();
|
||||
SegmentCost segmentCost = new SegmentCost(Const.EMPTY_STRING);
|
||||
segmentCost.setSegmentId(segmentId);
|
||||
segmentCost.setApplicationId(applicationId);
|
||||
segmentCost.setCost(spanDecorator.getEndTime() - spanDecorator.getStartTime());
|
||||
|
|
@ -62,7 +69,7 @@ public class SegmentCostSpanListener implements EntrySpanListener, ExitSpanListe
|
|||
if (spanDecorator.getOperationNameId() == 0) {
|
||||
segmentCost.setServiceName(spanDecorator.getOperationName());
|
||||
} else {
|
||||
segmentCost.setServiceName(ServiceNameCache.getSplitServiceName(ServiceNameCache.get(spanDecorator.getOperationNameId())));
|
||||
segmentCost.setServiceName(serviceNameCacheService.getSplitServiceName(serviceNameCacheService.get(spanDecorator.getOperationNameId())));
|
||||
}
|
||||
|
||||
segmentCosts.add(segmentCost);
|
||||
|
|
@ -70,35 +77,29 @@ public class SegmentCostSpanListener implements EntrySpanListener, ExitSpanListe
|
|||
}
|
||||
|
||||
@Override
|
||||
public void parseEntry(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId,
|
||||
public void parseEntry(SpanDecorator spanDecorator, int applicationId, int instanceId,
|
||||
String segmentId) {
|
||||
isError = isError || spanDecorator.getIsError();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseExit(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId) {
|
||||
public void parseExit(SpanDecorator spanDecorator, int applicationId, int instanceId, String segmentId) {
|
||||
isError = isError || spanDecorator.getIsError();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseLocal(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId,
|
||||
public void parseLocal(SpanDecorator spanDecorator, int applicationId, int instanceId,
|
||||
String segmentId) {
|
||||
isError = isError || spanDecorator.getIsError();
|
||||
}
|
||||
|
||||
@Override public void build() {
|
||||
Graph<SegmentCost> graph = GraphManager.INSTANCE.createIfAbsent(TraceStreamGraph.SEGMENT_COST_GRAPH_ID, SegmentCost.class);
|
||||
logger.debug("segment cost listener build");
|
||||
StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME);
|
||||
|
||||
for (SegmentCostDataDefine.SegmentCost segmentCost : segmentCosts) {
|
||||
segmentCost.setError(isError);
|
||||
for (SegmentCost segmentCost : segmentCosts) {
|
||||
segmentCost.setIsError(isError);
|
||||
segmentCost.setTimeBucket(timeBucket);
|
||||
try {
|
||||
logger.debug("send to segment cost persistence worker, id: {}", segmentCost.getId());
|
||||
context.getClusterWorkerContext().lookup(SegmentCostPersistenceWorker.WorkerRole.INSTANCE).tell(segmentCost.toData());
|
||||
} catch (WorkerInvokeException | WorkerNotFoundException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
graph.start(segmentCost);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.trace.segment;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.storage.base.dao.IPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.dao.ISegmentPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.table.segment.Segment;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.impl.PersistenceWorker;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class SegmentPersistenceWorker extends PersistenceWorker<Segment, Segment> {
|
||||
|
||||
public SegmentPersistenceWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override protected boolean needMergeDBData() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override protected IPersistenceDAO persistenceDAO() {
|
||||
return getModuleManager().find(StorageModule.NAME).getService(ISegmentPersistenceDAO.class);
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<Segment, Segment, SegmentPersistenceWorker> {
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<Segment> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public SegmentPersistenceWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new SegmentPersistenceWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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.agent.stream.worker.trace.service;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.table.service.ServiceEntry;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.impl.AggregationWorker;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class ServiceEntryAggregationWorker extends AggregationWorker<ServiceEntry, ServiceEntry> {
|
||||
|
||||
public ServiceEntryAggregationWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return ServiceEntryAggregationWorker.class.hashCode();
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<ServiceEntry, ServiceEntry, ServiceEntryAggregationWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<ServiceEntry> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public ServiceEntryAggregationWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new ServiceEntryAggregationWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.trace.service;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.queue.service.QueueCreatorService;
|
||||
import org.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.skywalking.apm.collector.storage.base.dao.IPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.dao.IServiceEntryPersistenceDAO;
|
||||
import org.skywalking.apm.collector.storage.table.service.ServiceEntry;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractLocalAsyncWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.impl.PersistenceWorker;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class ServiceEntryPersistenceWorker extends PersistenceWorker<ServiceEntry, ServiceEntry> {
|
||||
|
||||
public ServiceEntryPersistenceWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override protected boolean needMergeDBData() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override protected IPersistenceDAO persistenceDAO() {
|
||||
return getModuleManager().find(StorageModule.NAME).getService(IServiceEntryPersistenceDAO.class);
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<ServiceEntry, ServiceEntry, ServiceEntryPersistenceWorker> {
|
||||
public Factory(ModuleManager moduleManager, QueueCreatorService<ServiceEntry> queueCreatorService) {
|
||||
super(moduleManager, queueCreatorService);
|
||||
}
|
||||
|
||||
@Override public ServiceEntryPersistenceWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new ServiceEntryPersistenceWorker(moduleManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return 1024;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* 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.agent.stream.worker.trace.service;
|
||||
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.remote.service.RemoteSenderService;
|
||||
import org.skywalking.apm.collector.remote.service.Selector;
|
||||
import org.skywalking.apm.collector.storage.table.service.ServiceEntry;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractRemoteWorker;
|
||||
import org.skywalking.apm.collector.stream.worker.base.AbstractRemoteWorkerProvider;
|
||||
import org.skywalking.apm.collector.stream.worker.base.WorkerException;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class ServiceEntryRemoteWorker extends AbstractRemoteWorker<ServiceEntry, ServiceEntry> {
|
||||
|
||||
public ServiceEntryRemoteWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
return ServiceEntryRemoteWorker.class.hashCode();
|
||||
}
|
||||
|
||||
@Override protected void onWork(ServiceEntry serviceEntry) throws WorkerException {
|
||||
onNext(serviceEntry);
|
||||
}
|
||||
|
||||
@Override public Selector selector() {
|
||||
return Selector.HashCode;
|
||||
}
|
||||
|
||||
public static class Factory extends AbstractRemoteWorkerProvider<ServiceEntry, ServiceEntry, ServiceEntryRemoteWorker> {
|
||||
|
||||
public Factory(ModuleManager moduleManager, RemoteSenderService remoteSenderService, int graphId) {
|
||||
super(moduleManager, remoteSenderService, graphId);
|
||||
}
|
||||
|
||||
@Override public ServiceEntryRemoteWorker workerInstance(ModuleManager moduleManager) {
|
||||
return new ServiceEntryRemoteWorker(moduleManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,22 +16,22 @@
|
|||
* Project repository: https://github.com/OpenSkywalking/skywalking
|
||||
*/
|
||||
|
||||
package org.skywalking.apm.collector.agentstream.worker.service.entry;
|
||||
package org.skywalking.apm.collector.agent.stream.worker.trace.service;
|
||||
|
||||
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.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.agent.stream.graph.TraceStreamGraph;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.EntrySpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.FirstSpanListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.RefsListener;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.ReferenceDecorator;
|
||||
import org.skywalking.apm.collector.agent.stream.parser.standardization.SpanDecorator;
|
||||
import org.skywalking.apm.collector.cache.CacheModule;
|
||||
import org.skywalking.apm.collector.cache.service.ServiceNameCacheService;
|
||||
import org.skywalking.apm.collector.core.graph.Graph;
|
||||
import org.skywalking.apm.collector.core.graph.GraphManager;
|
||||
import org.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.skywalking.apm.collector.core.util.Const;
|
||||
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
|
||||
import org.skywalking.apm.collector.storage.define.service.ServiceEntryDataDefine;
|
||||
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.collector.storage.table.service.ServiceEntry;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
|
@ -48,45 +48,45 @@ public class ServiceEntrySpanListener implements RefsListener, FirstSpanListener
|
|||
private int entryServiceId;
|
||||
private String entryServiceName;
|
||||
private boolean hasEntry = false;
|
||||
private final ServiceNameCacheService serviceNameCacheService;
|
||||
|
||||
public ServiceEntrySpanListener(ModuleManager moduleManager) {
|
||||
this.serviceNameCacheService = moduleManager.find(CacheModule.NAME).getService(ServiceNameCacheService.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseEntry(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId,
|
||||
public void parseEntry(SpanDecorator spanDecorator, int applicationId, int instanceId,
|
||||
String segmentId) {
|
||||
this.applicationId = applicationId;
|
||||
this.entryServiceId = spanDecorator.getOperationNameId();
|
||||
this.entryServiceName = ServiceNameCache.getSplitServiceName(ServiceNameCache.get(entryServiceId));
|
||||
this.entryServiceName = serviceNameCacheService.getSplitServiceName(serviceNameCacheService.get(entryServiceId));
|
||||
this.hasEntry = true;
|
||||
}
|
||||
|
||||
@Override public void parseRef(ReferenceDecorator referenceDecorator, int applicationId, int applicationInstanceId,
|
||||
@Override public void parseRef(ReferenceDecorator referenceDecorator, int applicationId, int instanceId,
|
||||
String segmentId) {
|
||||
hasReference = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseFirst(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId,
|
||||
public void parseFirst(SpanDecorator spanDecorator, int applicationId, int instanceId,
|
||||
String segmentId) {
|
||||
timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime());
|
||||
}
|
||||
|
||||
@Override public void build() {
|
||||
logger.debug("entry service listener build");
|
||||
StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME);
|
||||
if (!hasReference && hasEntry) {
|
||||
ServiceEntryDataDefine.ServiceEntry serviceEntry = new ServiceEntryDataDefine.ServiceEntry();
|
||||
serviceEntry.setId(applicationId + Const.ID_SPLIT + entryServiceId);
|
||||
ServiceEntry serviceEntry = new ServiceEntry(applicationId + Const.ID_SPLIT + entryServiceId);
|
||||
serviceEntry.setApplicationId(applicationId);
|
||||
serviceEntry.setEntryServiceId(entryServiceId);
|
||||
serviceEntry.setEntryServiceName(entryServiceName);
|
||||
serviceEntry.setRegisterTime(timeBucket);
|
||||
serviceEntry.setNewestTime(timeBucket);
|
||||
|
||||
try {
|
||||
logger.debug("send to service entry aggregation worker, id: {}", serviceEntry.getId());
|
||||
context.getClusterWorkerContext().lookup(ServiceEntryAggregationWorker.WorkerRole.INSTANCE).tell(serviceEntry.toData());
|
||||
} catch (WorkerInvokeException | WorkerNotFoundException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
logger.debug("send to service entry aggregation worker, id: {}", serviceEntry.getId());
|
||||
Graph<ServiceEntry> graph = GraphManager.INSTANCE.createIfAbsent(TraceStreamGraph.SERVICE_ENTRY_GRAPH_ID, ServiceEntry.class);
|
||||
graph.start(serviceEntry);
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue