blob: 33df6f89e9084537c9d4c1f4a33a0395b9caad28 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
package org.apache.skywalking.plugin.test.mockcollector.service;
import io.grpc.stub.StreamObserver;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.skywalking.apm.network.common.KeyIntValuePair;
import org.apache.skywalking.apm.network.register.v2.Endpoint;
import org.apache.skywalking.apm.network.register.v2.EndpointMapping;
import org.apache.skywalking.apm.network.register.v2.Enpoints;
import org.apache.skywalking.apm.network.register.v2.NetAddressMapping;
import org.apache.skywalking.apm.network.register.v2.NetAddresses;
import org.apache.skywalking.apm.network.register.v2.RegisterGrpc;
import org.apache.skywalking.apm.network.register.v2.Service;
import org.apache.skywalking.apm.network.register.v2.ServiceInstance;
import org.apache.skywalking.apm.network.register.v2.ServiceInstanceRegisterMapping;
import org.apache.skywalking.apm.network.register.v2.ServiceInstances;
import org.apache.skywalking.apm.network.register.v2.ServiceRegisterMapping;
import org.apache.skywalking.apm.network.register.v2.Services;
import org.apache.skywalking.plugin.test.mockcollector.entity.RegistryItem;
import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
public class MockRegisterService extends RegisterGrpc.RegisterImplBase {
private Logger logger = LogManager.getLogger(MockTraceSegmentService.class);
@Override
public void doEndpointRegister(Enpoints request, StreamObserver<EndpointMapping> responseObserver) {
for (Endpoint endpoint : request.getEndpointsList()) {
ValidateData.INSTANCE.getRegistryItem()
.registryOperationName(new RegistryItem.OperationName(endpoint.getServiceId(), endpoint
.getEndpointName()));
}
responseObserver.onNext(EndpointMapping.getDefaultInstance());
responseObserver.onCompleted();
}
@Override
public void doNetworkAddressRegister(NetAddresses request, StreamObserver<NetAddressMapping> responseObserver) {
responseObserver.onNext(NetAddressMapping.getDefaultInstance());
responseObserver.onCompleted();
}
@Override
public void doServiceInstanceRegister(ServiceInstances request,
StreamObserver<ServiceInstanceRegisterMapping> responseObserver) {
if (request.getInstancesCount() <= 0) {
responseObserver.onNext(ServiceInstanceRegisterMapping.getDefaultInstance());
responseObserver.onCompleted();
return;
}
for (ServiceInstance serviceInstance : request.getInstancesList()) {
int instanceId = Sequences.INSTANCE_SEQUENCE.incrementAndGet();
ValidateData.INSTANCE.getRegistryItem()
.registryInstance(new RegistryItem.Instance(serviceInstance.getServiceId(), instanceId));
responseObserver.onNext(ServiceInstanceRegisterMapping.newBuilder()
.addServiceInstances(KeyIntValuePair.newBuilder()
.setKey(serviceInstance
.getInstanceUUID())
.setValue(instanceId)
.build())
.build());
responseObserver.onCompleted();
}
}
@Override
public void doServiceRegister(Services request, StreamObserver<ServiceRegisterMapping> responseObserver) {
logger.debug("receive application register.");
if (request.getServicesCount() <= 0) {
logger.warn("The service count is empty. return the default service register mapping");
responseObserver.onNext(ServiceRegisterMapping.getDefaultInstance());
responseObserver.onCompleted();
return;
}
for (Service service : request.getServicesList()) {
String applicationCode = service.getServiceName();
ServiceRegisterMapping.Builder builder = ServiceRegisterMapping.newBuilder();
if (applicationCode.startsWith("localhost") || applicationCode.startsWith("127.0.0.1") || applicationCode.contains(":") || applicationCode
.contains("/")) {
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
return;
}
Integer applicationId = Sequences.SERVICE_MAPPING.get(applicationCode);
if (applicationId == null) {
applicationId = Sequences.ENDPOINT_SEQUENCE.incrementAndGet();
Sequences.SERVICE_MAPPING.put(applicationCode, applicationId);
ValidateData.INSTANCE.getRegistryItem()
.registryApplication(new RegistryItem.Application(applicationCode, applicationId));
}
builder.addServices(KeyIntValuePair.newBuilder().setKey(applicationCode).setValue(applicationId).build());
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
}
}
}