ICS sample producer and consumer
[nonrtric.git] / sample-services / ics-producer-consumer / start.sh
1 #  ========================LICENSE_START=================================
2 #  O-RAN-SC
3 #
4 #  Copyright (C) 2024: OpenInfra Foundation Europe
5 #  ========================================================================
6 #  Licensed under the Apache License, Version 2.0 (the "License");
7 #  you may not use this file except in compliance with the License.
8 #  You may obtain a copy of the License at
9 #
10 #       http://www.apache.org/licenses/LICENSE-2.0
11 #
12 #  Unless required by applicable law or agreed to in writing, software
13 #  distributed under the License is distributed on an "AS IS" BASIS,
14 #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 #  See the License for the specific language governing permissions and
16 #  limitations under the License.
17 #  ============LICENSE_END=================================================
18 #!/bin/bash
19 source utils.sh
20
21 PREFIX="nexus3.o-ran-sc.org:10004"
22 VERSION="0.0.1"
23
24 # Create a network for Kafka Containers
25 docker network create kafka-net
26
27 # Start Kafka
28 docker run -d \
29   --network kafka-net \
30   --name kafka-zkless \
31   -p 9092:9092 \
32   -e LOG_DIR="/tmp/logs" \
33   -e KAFKA_LISTENER_SECURITY_PROTOCOL_MAP="CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT" \
34   -e KAFKA_LISTENERS="PLAINTEXT://:29092,PLAINTEXT_HOST://:9092,CONTROLLER://:9093" \
35   -e KAFKA_ADVERTISED_LISTENERS="PLAINTEXT://kafka-zkless:29092,PLAINTEXT_HOST://kafka-zkless:9092" \
36   quay.io/strimzi/kafka:latest-kafka-2.8.1-amd64 \
37   /bin/sh -c 'export CLUSTER_ID=$(bin/kafka-storage.sh random-uuid) && \
38   bin/kafka-storage.sh format -t $CLUSTER_ID -c config/kraft/server.properties && \
39   bin/kafka-server-start.sh config/kraft/server.properties --override advertised.listeners=$KAFKA_ADVERTISED_LISTENERS --override listener.security.protocol.map=$KAFKA_LISTENER_SECURITY_PROTOCOL_MAP --override listeners=$KAFKA_LISTENERS'
40
41 # Start ICS
42 docker run -d \
43   --network kafka-net \
44   --name informationcoordinatorservice \
45   -p 8083:8083 \
46   -v ./application.yaml:/opt/app/information-coordinator-service/config/application.yaml \
47   nexus3.o-ran-sc.org:10001/o-ran-sc/nonrtric-plt-informationcoordinatorservice:1.6.0
48
49 # Start Producer
50 docker run -d \
51   --network kafka-net \
52   --name kafka-producer \
53   -p 8080:8080 \
54   -e KAFKA_SERVERS=kafka-zkless:9092 \
55   $PREFIX/o-ran-sc/nonrtric-sample-icsproducer:$VERSION
56
57 #Start Consumer
58 docker run -d \
59   --network kafka-net \
60   --name kafka-consumer \
61   -p 8081:8081 \
62   -e KAFKA_SERVERS=kafka-zkless:9092 \
63   $PREFIX/o-ran-sc/nonrtric-sample-icsconsumer:$VERSION
64
65 # Wait for the Kafka container to be running
66 wait_for_container "kafka-zkless" "Kafka Server started"
67 wait_for_container "kafka-producer" "Started Application"
68 wait_for_container "kafka-consumer" "Started Application"
69
70 # Once Kafka container is running, start the producers and consumers
71 echo "Kafka container is up and running. Starting producer and consumer..."
72 space
73
74 echo "Start 1 Producer on mytopic"
75 curl -X GET http://localhost:8080/startProducer/mytopic
76 space
77
78 echo "Start 1 Consumer on mytopic"
79 curl -X GET http://localhost:8081/startConsumer/mytopic
80 space
81
82 sleep 10
83
84 echo "Sending type1 to ICS"
85 curl -X 'PUT' \
86   'http://localhost:8083/data-producer/v1/info-types/type1' \
87   -H 'accept: application/json' \
88   -H 'Content-Type: application/json' \
89   -d '{
90   "info_job_data_schema": {
91     "$schema":"http://json-schema.org/draft-07/schema#",
92     "title":"STD_Type1_1.0.0",
93     "description":"Type 1",
94     "type":"object"
95   }
96 }'
97
98 echo "Getting types from ICS"
99 curl -X 'GET' 'http://localhost:8083/data-producer/v1/info-types/type1'
100 space
101
102 echo "Sending Producer infos to ICS"
103 curl -X 'PUT' \
104   'http://localhost:8083/data-producer/v1/info-producers/1' \
105   -H 'accept: application/json' \
106   -H 'Content-Type: application/json' \
107   -d '{
108   "info_producer_supervision_callback_url": "http://kafka-producer:8080/producer/supervision",
109   "supported_info_types": [
110     "type1"
111   ],
112   "info_job_callback_url": "http://kafka-producer:8080/producer/job"
113 }'
114
115 echo "Getting Producers Infos from ICS"
116 curl -H 'Content-Type: application/json' 'http://localhost:8083/data-producer/v1/info-producers/1'
117 space
118
119 echo "Sending Consumer Job infos to ICS"
120 curl -X 'PUT' \
121   'http://localhost:8083/data-consumer/v1/info-jobs/1' \
122   -H 'accept: application/json' \
123   -H 'Content-Type: application/json' \
124   -d '{
125   "info_type_id": "type1",
126   "job_owner": "demo",
127   "job_definition": {
128     "deliveryInfo": {
129       "topic": "mytopic",
130       "bootStrapServers": "http://kafka-zkless:9092",
131       "numberOfMessages": 0
132     }
133   },
134   "job_result_uri": "http://kafka-producer:8080/producer/job",
135   "status_notification_uri": "http://kafka-producer:8080/producer/supervision"
136 }'
137
138 echo "Getting Consumer Job Infos from ICS"
139 curl -H 'Content-Type: application/json' 'http://localhost:8083/data-consumer/v1/info-jobs/1'
140 space
141
142 echo "Sending Consumer Subscription Job infos to ICS"
143 curl -X 'PUT' \
144   'http://localhost:8083/data-consumer/v1/info-type-subscription/1' \
145   -H 'accept: application/json' \
146   -H 'Content-Type: application/json' \
147   -d '{
148   "status_result_uri": "http://kafka-consumer:8081/info-type-status",
149   "owner": "owner"
150 }'
151 echo "Getting Consumer Subscription Job infos from ICS"
152 curl -X 'GET' 'http://localhost:8083/data-consumer/v1/info-type-subscription/1' -H 'accept: application/json'
153 space
154
155 sleep 5
156 echo "ICS Producer Docker logs "
157 docker logs informationcoordinatorservice | grep -E 'o.o.i.c.r1producer.ProducerCallbacks|o.o.i.repository.InfoTypeSubscriptions'
158 space
159 echo "Demo Producer Docker logs "
160 docker logs kafka-producer | grep c.d.p.p.SimpleProducer
161 space
162 echo "Demo Consumer Docker logs "
163 docker logs kafka-consumer | grep c.d.c.c.SimpleConsumer
164 space
165
166 echo "Done."
167
168 containers=("kafka-producer" "kafka-consumer")
169
170 for container in "${containers[@]}"; do
171   if docker logs "$container" | grep -q ERROR; then
172     echo "Errors found in logs of $container"
173     echo "FAIL"
174     exit 1
175   else
176     echo "No errors found in logs of $container"
177   fi
178 done
179 echo "SUCCESS"
180 exit 0