From 596f674fab9acfc5d338129c30484bb6d809bd38 Mon Sep 17 00:00:00 2001 From: Steve Liu Date: Sat, 12 Jul 2025 15:33:15 -0700 Subject: [PATCH 1/5] update sample app --- .../workflows/python-sample-app-s3-deploy.yml | 55 +++++++++++++------ sample-apps/python/genai_service/server.py | 11 +++- 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/.github/workflows/python-sample-app-s3-deploy.yml b/.github/workflows/python-sample-app-s3-deploy.yml index ef7124271..6c0ba0e5b 100644 --- a/.github/workflows/python-sample-app-s3-deploy.yml +++ b/.github/workflows/python-sample-app-s3-deploy.yml @@ -4,6 +4,9 @@ name: Sample App Deployment - Python S3 on: workflow_dispatch: # be able to run the workflow on demand + push: + branches: + - python-genesis-app-metrics-fix permissions: id-token: write @@ -46,24 +49,40 @@ jobs: role-to-assume: arn:aws:iam::${{ env.ACCOUNT_ID }}:role/${{ secrets.E2E_TEST_ROLE_ARN }} aws-region: ${{ matrix.aws-region }} - - name: Build Sample App Zip - working-directory: sample-apps/python - run: zip -r python-sample-app.zip . + # - name: Build Sample App Zip + # working-directory: sample-apps/python + # run: zip -r python-sample-app.zip . - - name: Upload to S3 - working-directory: sample-apps/python - run: aws s3api put-object --bucket ${{ secrets.APP_SIGNALS_E2E_EC2_JAR }}-prod-${{ matrix.aws-region }} --body ./python-sample-app.zip --key python-sample-app.zip + # - name: Upload to S3 + # working-directory: sample-apps/python + # run: aws s3api put-object --bucket ${{ secrets.APP_SIGNALS_E2E_EC2_JAR }}-prod-${{ matrix.aws-region }} --body ./python-sample-app.zip --key python-sample-app.zip - - name: Build Lambda Sample App - uses: actions/checkout@v4 - with: - repository: 'aws-observability/aws-otel-python-instrumentation' - - name: Build sample lambda function - shell: bash - run: ./package-lambda-function.sh - working-directory: lambda-layer/sample-apps - - - name: Upload to Lambda Sample App to S3 - working-directory: lambda-layer/sample-apps - run: aws s3api put-object --bucket ${{ secrets.APP_SIGNALS_E2E_EC2_JAR }}-prod-${{ matrix.aws-region }} --body ./build/function.zip --key pyfunction.zip + # - name: Build Lambda Sample App + # uses: actions/checkout@v4 + # with: + # repository: 'aws-observability/aws-otel-python-instrumentation' + # - name: Build sample lambda function + # shell: bash + # run: ./package-lambda-function.sh + # working-directory: lambda-layer/sample-apps + + # - name: Upload to Lambda Sample App to S3 + # working-directory: lambda-layer/sample-apps + # run: aws s3api put-object --bucket ${{ secrets.APP_SIGNALS_E2E_EC2_JAR }}-prod-${{ matrix.aws-region }} --body ./build/function.zip --key pyfunction.zip + + # - name: Build Sample App Zip + # working-directory: sample-apps/python + # run: zip -r python-sample-app.zip . + + # - name: Upload to S3 + # working-directory: sample-apps/python + # run: aws s3api put-object --bucket ${{ secrets.APP_SIGNALS_E2E_EC2_JAR }}-prod-${{ matrix.aws-region }} --body ./python-sample-app.zip --key python-sample-app.zip + + - name: Build Gen AI Sample App Zip + working-directory: sample-apps/python-gen-ai + run: zip -r python-gen-ai-sample-app.zip . + + - name: Upload Gen AI Sample App to S3 + working-directory: sample-apps/python-gen-ai + run: aws s3api put-object --bucket ${{ secrets.APP_SIGNALS_E2E_EC2_JAR }}-prod-${{ matrix.aws-region }} --body ./python-gen-ai-sample-app.zip --key python-gen-ai-sample-app.zip diff --git a/sample-apps/python/genai_service/server.py b/sample-apps/python/genai_service/server.py index 28572c7b7..1ef073e9e 100644 --- a/sample-apps/python/genai_service/server.py +++ b/sample-apps/python/genai_service/server.py @@ -6,11 +6,12 @@ from langchain_aws import ChatBedrock from langchain.prompts import ChatPromptTemplate from langchain.chains import LLMChain -from opentelemetry import trace +from opentelemetry import trace, metrics from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter from openinference.instrumentation.langchain import LangChainInstrumentor +import random # Load environment variables load_dotenv() @@ -92,7 +93,15 @@ async def chat(request: ChatRequest): """ Chat endpoint that processes a single user message through AWS Bedrock """ + try: + # Emit OTel Metrics + meter = metrics.get_meter("genesis-meter", "1.0.0") + request_duration = meter.create_histogram( + name="Genesis_TestMetrics", description="Genesis request duration", unit="s" + ) + request_duration.record(0.1 + (0.5 * random.random()), {"method": "GET", "status": "200"}) + # Process the input through the chain result = await chain.ainvoke({"input": request.message}) return ChatResponse(response=result["text"]) From ac1e1a850be883d62c37672e8a25d619d7277c2f Mon Sep 17 00:00:00 2001 From: Steve Liu Date: Sat, 12 Jul 2025 15:34:04 -0700 Subject: [PATCH 2/5] update path --- .github/workflows/python-sample-app-s3-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-sample-app-s3-deploy.yml b/.github/workflows/python-sample-app-s3-deploy.yml index 6c0ba0e5b..81c54a49c 100644 --- a/.github/workflows/python-sample-app-s3-deploy.yml +++ b/.github/workflows/python-sample-app-s3-deploy.yml @@ -79,7 +79,7 @@ jobs: # run: aws s3api put-object --bucket ${{ secrets.APP_SIGNALS_E2E_EC2_JAR }}-prod-${{ matrix.aws-region }} --body ./python-sample-app.zip --key python-sample-app.zip - name: Build Gen AI Sample App Zip - working-directory: sample-apps/python-gen-ai + working-directory: sample-apps/python/genai_service run: zip -r python-gen-ai-sample-app.zip . - name: Upload Gen AI Sample App to S3 From 54a2c32cd4c062ca5f25644325be7765e8cfb9e0 Mon Sep 17 00:00:00 2001 From: Steve Liu Date: Sat, 12 Jul 2025 15:36:24 -0700 Subject: [PATCH 3/5] update path --- .github/workflows/python-sample-app-s3-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-sample-app-s3-deploy.yml b/.github/workflows/python-sample-app-s3-deploy.yml index 81c54a49c..286842434 100644 --- a/.github/workflows/python-sample-app-s3-deploy.yml +++ b/.github/workflows/python-sample-app-s3-deploy.yml @@ -83,6 +83,6 @@ jobs: run: zip -r python-gen-ai-sample-app.zip . - name: Upload Gen AI Sample App to S3 - working-directory: sample-apps/python-gen-ai + working-directory: sample-apps/python run: aws s3api put-object --bucket ${{ secrets.APP_SIGNALS_E2E_EC2_JAR }}-prod-${{ matrix.aws-region }} --body ./python-gen-ai-sample-app.zip --key python-gen-ai-sample-app.zip From d7fc8bc4b8993550c5856159bb9010dd407c2fd7 Mon Sep 17 00:00:00 2001 From: Steve Liu Date: Sat, 12 Jul 2025 15:38:03 -0700 Subject: [PATCH 4/5] update path --- .github/workflows/python-sample-app-s3-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-sample-app-s3-deploy.yml b/.github/workflows/python-sample-app-s3-deploy.yml index 286842434..1006e6a11 100644 --- a/.github/workflows/python-sample-app-s3-deploy.yml +++ b/.github/workflows/python-sample-app-s3-deploy.yml @@ -83,6 +83,6 @@ jobs: run: zip -r python-gen-ai-sample-app.zip . - name: Upload Gen AI Sample App to S3 - working-directory: sample-apps/python + working-directory: sample-apps/python/genai_service run: aws s3api put-object --bucket ${{ secrets.APP_SIGNALS_E2E_EC2_JAR }}-prod-${{ matrix.aws-region }} --body ./python-gen-ai-sample-app.zip --key python-gen-ai-sample-app.zip From c034182f1a6d8edf01f52ca9f9f8735a22b344e0 Mon Sep 17 00:00:00 2001 From: Steve Liu Date: Sat, 12 Jul 2025 15:41:47 -0700 Subject: [PATCH 5/5] update gen ai sample app --- .../workflows/python-sample-app-s3-deploy.yml | 47 +++++++------------ 1 file changed, 18 insertions(+), 29 deletions(-) diff --git a/.github/workflows/python-sample-app-s3-deploy.yml b/.github/workflows/python-sample-app-s3-deploy.yml index 1006e6a11..b1a2d297f 100644 --- a/.github/workflows/python-sample-app-s3-deploy.yml +++ b/.github/workflows/python-sample-app-s3-deploy.yml @@ -4,9 +4,6 @@ name: Sample App Deployment - Python S3 on: workflow_dispatch: # be able to run the workflow on demand - push: - branches: - - python-genesis-app-metrics-fix permissions: id-token: write @@ -49,34 +46,26 @@ jobs: role-to-assume: arn:aws:iam::${{ env.ACCOUNT_ID }}:role/${{ secrets.E2E_TEST_ROLE_ARN }} aws-region: ${{ matrix.aws-region }} - # - name: Build Sample App Zip - # working-directory: sample-apps/python - # run: zip -r python-sample-app.zip . + - name: Build Sample App Zip + working-directory: sample-apps/python + run: zip -r python-sample-app.zip . - # - name: Upload to S3 - # working-directory: sample-apps/python - # run: aws s3api put-object --bucket ${{ secrets.APP_SIGNALS_E2E_EC2_JAR }}-prod-${{ matrix.aws-region }} --body ./python-sample-app.zip --key python-sample-app.zip + - name: Upload to S3 + working-directory: sample-apps/python + run: aws s3api put-object --bucket ${{ secrets.APP_SIGNALS_E2E_EC2_JAR }}-prod-${{ matrix.aws-region }} --body ./python-sample-app.zip --key python-sample-app.zip - # - name: Build Lambda Sample App - # uses: actions/checkout@v4 - # with: - # repository: 'aws-observability/aws-otel-python-instrumentation' - # - name: Build sample lambda function - # shell: bash - # run: ./package-lambda-function.sh - # working-directory: lambda-layer/sample-apps - - # - name: Upload to Lambda Sample App to S3 - # working-directory: lambda-layer/sample-apps - # run: aws s3api put-object --bucket ${{ secrets.APP_SIGNALS_E2E_EC2_JAR }}-prod-${{ matrix.aws-region }} --body ./build/function.zip --key pyfunction.zip - - # - name: Build Sample App Zip - # working-directory: sample-apps/python - # run: zip -r python-sample-app.zip . - - # - name: Upload to S3 - # working-directory: sample-apps/python - # run: aws s3api put-object --bucket ${{ secrets.APP_SIGNALS_E2E_EC2_JAR }}-prod-${{ matrix.aws-region }} --body ./python-sample-app.zip --key python-sample-app.zip + - name: Build Lambda Sample App + uses: actions/checkout@v4 + with: + repository: 'aws-observability/aws-otel-python-instrumentation' + - name: Build sample lambda function + shell: bash + run: ./package-lambda-function.sh + working-directory: lambda-layer/sample-apps + + - name: Upload to Lambda Sample App to S3 + working-directory: lambda-layer/sample-apps + run: aws s3api put-object --bucket ${{ secrets.APP_SIGNALS_E2E_EC2_JAR }}-prod-${{ matrix.aws-region }} --body ./build/function.zip --key pyfunction.zip - name: Build Gen AI Sample App Zip working-directory: sample-apps/python/genai_service