This is an automated email from the ASF dual-hosted git repository.

yihaochen pushed a commit to branch ai-endpoint-grouping
in repository https://gitbox.apache.org/repos/asf/skywalking-showcase.git


The following commit(s) were added to refs/heads/ai-endpoint-grouping by this 
push:
     new 5b58c04  draft
5b58c04 is described below

commit 5b58c046359cadab9756d68160bb1f651b24cd8d
Author: Superskyyy <supersk...@outlook.com>
AuthorDate: Tue Jun 27 23:47:37 2023 -0400

    draft
---
 deploy/platform/docker/docker-compose.agent.yaml   | 16 ++++++
 .../docker/docker-compose.ai-pipeline.yaml         | 64 ++++++++++++----------
 services/app/server/src/index.js                   |  6 ++
 .../.dockerignore}                                 | 14 +----
 .../Dockerfile                                     |  2 +-
 .../Dockerfile.agentless                           |  2 +-
 .../Dockerfile => artists-service/Makefile}        | 18 +++---
 services/artists-service/requirements.txt          |  2 +
 services/artists-service/src/app.py                | 17 ++++++
 .../src/main/resources/application.yaml            |  4 ++
 services/load-gen/loadgen.py                       |  4 +-
 services/recommendation-service/Dockerfile         |  4 +-
 .../recommendation-service/Dockerfile.agentless    |  2 +-
 13 files changed, 100 insertions(+), 55 deletions(-)

diff --git a/deploy/platform/docker/docker-compose.agent.yaml 
b/deploy/platform/docker/docker-compose.agent.yaml
index 43d2122..54702eb 100644
--- a/deploy/platform/docker/docker-compose.agent.yaml
+++ b/deploy/platform/docker/docker-compose.agent.yaml
@@ -72,6 +72,22 @@ services:
       oap:
         condition: service_healthy
 
+  # Python agent
+  rcmd:
+    image: ${HUB}/artists-service:${TAG}
+    networks: [ sw ]
+    environment:
+      SW_AGENT_NAME: artists
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: ${BACKEND_SERVICE}:11800
+    healthcheck:
+      test: [ "CMD-SHELL", "curl http://localhost/health"; ]
+      interval: 30s
+      timeout: 10s
+      retries: 3
+    depends_on:
+      oap:
+        condition: service_healthy
+
   # NodeJS backend agent
   app:
     image: ${HUB}/app:${TAG}
diff --git a/services/recommendation-service/Dockerfile 
b/deploy/platform/docker/docker-compose.ai-pipeline.yaml
similarity index 67%
copy from services/recommendation-service/Dockerfile
copy to deploy/platform/docker/docker-compose.ai-pipeline.yaml
index 40f36fa..8726859 100644
--- a/services/recommendation-service/Dockerfile
+++ b/deploy/platform/docker/docker-compose.ai-pipeline.yaml
@@ -1,30 +1,34 @@
-# 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.
-#
-
-# @feature: python-agent;
-FROM apache/skywalking-python:0.7.0-grpc-py3.9
-
-WORKDIR /workspace
-
-COPY requirements.txt .
-
-RUN pip install -r requirements.txt
-
-COPY src .
-
-CMD python app.py
+# 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.
+#
+version: '2.1'
+
+services:
+  r3:
+    image: ${SW_R3_IMAGE}:${SW_R3_IMAGE_TAG}
+    container_name: r3
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > 
/dev/tcp/127.0.0.1/17128" ]
+    networks:
+      - manual
+    ports:
+        - "17128:17128"
+    depends_on:
+      oap:
+        condition: service_healthy
+networks:
+  sw:
diff --git a/services/app/server/src/index.js b/services/app/server/src/index.js
index da920ea..7dce82f 100644
--- a/services/app/server/src/index.js
+++ b/services/app/server/src/index.js
@@ -37,6 +37,12 @@ const app = express();
 app.get('/homepage', async (req, res) => {
     const top = await axios.get(`http://${GATEWAY}/songs/top`);
     const rcmd = await axios.get(`http://${GATEWAY}/rcmd`);
+    // Retrival of a comment from some artist's timeline, it is intentionally 
made complex to showcase the R3 endpoint grouping algorithm
+    const artist = Math.random().toString(36).substring(7);
+    const postid = Math.floor(Math.random() * 1000);
+    const commentid = Math.floor(Math.random() * 1000);
+    const apiVersion = Math.floor(Math.random() * 2) + 1;
+    const post = await 
axios.get(`http://${GATEWAY}/api/v${apiVersion}/artists/${artist}/moments/${postid}/comments/${commentid}`);
 
     res.json({
         top: top.data,
diff --git a/services/recommendation-service/Dockerfile.agentless 
b/services/artists-service/.dockerignore
similarity index 86%
copy from services/recommendation-service/Dockerfile.agentless
copy to services/artists-service/.dockerignore
index 0ed70ef..83abcf1 100644
--- a/services/recommendation-service/Dockerfile.agentless
+++ b/services/artists-service/.dockerignore
@@ -15,15 +15,5 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-
-FROM python:3
-
-WORKDIR /workspace
-
-COPY requirements.txt .
-
-RUN pip install -r requirements.txt
-
-COPY src .
-
-CMD python app.py
+venv
+.venv
diff --git a/services/recommendation-service/Dockerfile 
b/services/artists-service/Dockerfile
similarity index 95%
copy from services/recommendation-service/Dockerfile
copy to services/artists-service/Dockerfile
index 40f36fa..cdcdb1a 100644
--- a/services/recommendation-service/Dockerfile
+++ b/services/artists-service/Dockerfile
@@ -17,7 +17,7 @@
 #
 
 # @feature: python-agent;
-FROM apache/skywalking-python:0.7.0-grpc-py3.9
+FROM skywalking-python:1.0.1-grpc-py3.10-slim
 
 WORKDIR /workspace
 
diff --git a/services/recommendation-service/Dockerfile.agentless 
b/services/artists-service/Dockerfile.agentless
similarity index 97%
copy from services/recommendation-service/Dockerfile.agentless
copy to services/artists-service/Dockerfile.agentless
index 0ed70ef..1e585b5 100644
--- a/services/recommendation-service/Dockerfile.agentless
+++ b/services/artists-service/Dockerfile.agentless
@@ -16,7 +16,7 @@
 # under the License.
 #
 
-FROM python:3
+FROM python:3.10-slim
 
 WORKDIR /workspace
 
diff --git a/services/recommendation-service/Dockerfile 
b/services/artists-service/Makefile
similarity index 67%
copy from services/recommendation-service/Dockerfile
copy to services/artists-service/Makefile
index 40f36fa..503a316 100644
--- a/services/recommendation-service/Dockerfile
+++ b/services/artists-service/Makefile
@@ -16,15 +16,19 @@
 # under the License.
 #
 
-# @feature: python-agent;
-FROM apache/skywalking-python:0.7.0-grpc-py3.9
+include ../../Makefile.in
 
-WORKDIR /workspace
+.PHONY: build
+build:
 
-COPY requirements.txt .
+.PHONY: docker docker.build docker.push
 
-RUN pip install -r requirements.txt
+docker: docker.build
 
-COPY src .
+docker.build:
+       docker build . -t $(HUB)/artists-service:$(TAG)
+       docker build . -t $(HUB)/artists-service:$(TAG)-agentless -f 
Dockerfile.agentless
 
-CMD python app.py
+docker.push: docker.build
+       docker push $(HUB)/artists-service:$(TAG)
+       docker push $(HUB)/artists-service:$(TAG)-agentless
diff --git a/services/artists-service/requirements.txt 
b/services/artists-service/requirements.txt
new file mode 100644
index 0000000..c01e1d1
--- /dev/null
+++ b/services/artists-service/requirements.txt
@@ -0,0 +1,2 @@
+fastapi==0.98.0
+faker==18.11.2
\ No newline at end of file
diff --git a/services/artists-service/src/app.py 
b/services/artists-service/src/app.py
new file mode 100644
index 0000000..38c6220
--- /dev/null
+++ b/services/artists-service/src/app.py
@@ -0,0 +1,17 @@
+from fastapi import FastAPI
+from faker import Faker
+
+app = FastAPI()
+fake = Faker()
+
+@app.get("/api/v{apiVersion}/artists/{artist}/moments/{postid}/comments/{commentid}")
+async def handle_request(apiVersion: int, artist: str, postid: int, commentid: 
int):
+
+    comment_details = {
+        "commentId": commentid,
+        "commentBody": fake.sentence(),
+        "likes": fake.random_int(min=0, max=99999),
+        "userId": fake.random_number(digits=6)
+    }
+    
+    return comment_details
diff --git a/services/gateway-service/src/main/resources/application.yaml 
b/services/gateway-service/src/main/resources/application.yaml
index 2b728d8..fd677b2 100644
--- a/services/gateway-service/src/main/resources/application.yaml
+++ b/services/gateway-service/src/main/resources/application.yaml
@@ -31,3 +31,7 @@ spring:
           uri: http://rcmd
           predicates:
             - Path=/rcmd/**
+        - id: artists-service
+          uri: http://artists
+          predicates:
+            - Path=/api/v*/artists/**
diff --git a/services/load-gen/loadgen.py b/services/load-gen/loadgen.py
index 23bfee8..0753d99 100644
--- a/services/load-gen/loadgen.py
+++ b/services/load-gen/loadgen.py
@@ -18,6 +18,7 @@
 import os
 import time
 import traceback
+import random
 
 from selenium import webdriver
 from selenium.webdriver.firefox.options import Options as FirefoxOptions
@@ -36,4 +37,5 @@ while True:
     except Exception:
         traceback.print_exc()
     finally:
-        time.sleep(10)
+        # Introduces a bit randomness to the demo
+        time.sleep(random.randint(5, 15))
diff --git a/services/recommendation-service/Dockerfile 
b/services/recommendation-service/Dockerfile
index 40f36fa..1ee9bcd 100644
--- a/services/recommendation-service/Dockerfile
+++ b/services/recommendation-service/Dockerfile
@@ -17,7 +17,7 @@
 #
 
 # @feature: python-agent;
-FROM apache/skywalking-python:0.7.0-grpc-py3.9
+FROM skywalking-python:1.0.1-grpc-py3.10-slim
 
 WORKDIR /workspace
 
@@ -27,4 +27,4 @@ RUN pip install -r requirements.txt
 
 COPY src .
 
-CMD python app.py
+CMD python app.py
\ No newline at end of file
diff --git a/services/recommendation-service/Dockerfile.agentless 
b/services/recommendation-service/Dockerfile.agentless
index 0ed70ef..1e585b5 100644
--- a/services/recommendation-service/Dockerfile.agentless
+++ b/services/recommendation-service/Dockerfile.agentless
@@ -16,7 +16,7 @@
 # under the License.
 #
 
-FROM python:3
+FROM python:3.10-slim
 
 WORKDIR /workspace
 

Reply via email to