blob: f487504e1538b334e454101bc77ff7ebb144f401 [file] [log] [blame]
Jian Li6803ccd2018-06-08 09:26:09 +09001/*
2 * Copyright 2018-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.openstacktelemetry.impl;
17
Jian Li69600e02018-12-24 13:21:18 +090018import com.google.common.collect.Sets;
Jian Li6803ccd2018-06-08 09:26:09 +090019import io.grpc.ManagedChannel;
Jian Liae3fcff2018-07-30 11:55:44 +090020import io.grpc.ManagedChannelBuilder;
Jian Li6803ccd2018-06-08 09:26:09 +090021import org.onosproject.openstacktelemetry.api.GrpcTelemetryAdminService;
Jian Lid1ce10a2018-06-12 13:47:23 +090022import org.onosproject.openstacktelemetry.api.OpenstackTelemetryService;
Jian Li69600e02018-12-24 13:21:18 +090023import org.onosproject.openstacktelemetry.api.TelemetryConfigService;
Jian Liae3fcff2018-07-30 11:55:44 +090024import org.onosproject.openstacktelemetry.api.config.GrpcTelemetryConfig;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070025import org.osgi.service.component.annotations.Activate;
26import org.osgi.service.component.annotations.Component;
27import org.osgi.service.component.annotations.Deactivate;
28import org.osgi.service.component.annotations.Reference;
29import org.osgi.service.component.annotations.ReferenceCardinality;
Jian Li6803ccd2018-06-08 09:26:09 +090030import org.slf4j.Logger;
31import org.slf4j.LoggerFactory;
32
Jian Li69600e02018-12-24 13:21:18 +090033import java.util.Set;
34
35import static org.onosproject.openstacktelemetry.api.Constants.GRPC_SCHEME;
36import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.GRPC;
37import static org.onosproject.openstacktelemetry.config.DefaultGrpcTelemetryConfig.fromTelemetryConfig;
38
Jian Li6803ccd2018-06-08 09:26:09 +090039/**
40 * gRPC telemetry manager.
41 */
Ray Milkeyd84f89b2018-08-17 14:54:17 -070042@Component(immediate = true, service = GrpcTelemetryAdminService.class)
Jian Li6803ccd2018-06-08 09:26:09 +090043public class GrpcTelemetryManager implements GrpcTelemetryAdminService {
44
45 private final Logger log = LoggerFactory.getLogger(getClass());
46
Ray Milkeyd84f89b2018-08-17 14:54:17 -070047 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Jian Lid1ce10a2018-06-12 13:47:23 +090048 protected OpenstackTelemetryService openstackTelemetryService;
49
Jian Li69600e02018-12-24 13:21:18 +090050 @Reference(cardinality = ReferenceCardinality.MANDATORY)
51 protected TelemetryConfigService telemetryConfigService;
52
53 private Set<ManagedChannel> channels = Sets.newConcurrentHashSet();
Jian Li6803ccd2018-06-08 09:26:09 +090054
55 @Activate
56 protected void activate() {
Jian Lid1ce10a2018-06-12 13:47:23 +090057
58 openstackTelemetryService.addTelemetryService(this);
59
Jian Li6803ccd2018-06-08 09:26:09 +090060 log.info("Started");
61 }
62
63 @Deactivate
64 protected void deactivate() {
65 stop();
Jian Lid1ce10a2018-06-12 13:47:23 +090066
67 openstackTelemetryService.removeTelemetryService(this);
68
Jian Li6803ccd2018-06-08 09:26:09 +090069 log.info("Stopped");
70 }
71
72 @Override
Jian Li69600e02018-12-24 13:21:18 +090073 public void start() {
74 telemetryConfigService.getConfigsByType(GRPC).forEach(c -> {
75 GrpcTelemetryConfig grpcConfig = fromTelemetryConfig(c);
Jian Li6803ccd2018-06-08 09:26:09 +090076
Jian Li69600e02018-12-24 13:21:18 +090077 if (grpcConfig != null && !c.name().equals(GRPC_SCHEME) && c.enabled()) {
78 ManagedChannel channel = ManagedChannelBuilder
79 .forAddress(grpcConfig.address(), grpcConfig.port())
80 .maxInboundMessageSize(grpcConfig.maxInboundMsgSize())
81 .usePlaintext(grpcConfig.usePlaintext())
82 .build();
83
84 channels.add(channel);
85 }
86 });
Jian Li6803ccd2018-06-08 09:26:09 +090087
88 log.info("gRPC producer has Started");
89 }
90
91 @Override
92 public void stop() {
Jian Li69600e02018-12-24 13:21:18 +090093 channels.forEach(ManagedChannel::shutdown);
Jian Li6803ccd2018-06-08 09:26:09 +090094 log.info("gRPC producer has Stopped");
95 }
96
97 @Override
Jian Li69600e02018-12-24 13:21:18 +090098 public void restart() {
Jian Li6803ccd2018-06-08 09:26:09 +090099 stop();
Jian Li69600e02018-12-24 13:21:18 +0900100 start();
Jian Li6803ccd2018-06-08 09:26:09 +0900101 }
102
103 @Override
104 public Object publish(Object record) {
105 // TODO: need to find a way to invoke gRPC endpoint using channel
Jian Lid1ce10a2018-06-12 13:47:23 +0900106
Jian Li69600e02018-12-24 13:21:18 +0900107 if (channels.isEmpty()) {
Jian Li6c92b3c2018-08-03 11:26:55 +0900108 log.debug("gRPC telemetry service has not been enabled!");
Jian Lid1ce10a2018-06-12 13:47:23 +0900109 }
110
Jian Li6803ccd2018-06-08 09:26:09 +0900111 return null;
112 }
Jian Lid1ce10a2018-06-12 13:47:23 +0900113
114 @Override
115 public boolean isRunning() {
Jian Li69600e02018-12-24 13:21:18 +0900116 return !channels.isEmpty();
Jian Lid1ce10a2018-06-12 13:47:23 +0900117 }
Jian Li6803ccd2018-06-08 09:26:09 +0900118}