From 4c79bdad8b97bab20abc735f1c56a72d2dd241ab Mon Sep 17 00:00:00 2001 From: Hamid Asaadi Date: Fri, 26 Oct 2018 13:23:00 -0400 Subject: [PATCH] debugger support for cart and email service --- src/cartservice/Dockerfile | 37 +++++++------ src/cartservice/cartservice.csproj | 1 + src/cartservice/source-context.json | 6 +++ src/emailservice/Dockerfile | 54 +++++++++---------- src/emailservice/email_server.py | 23 ++++---- src/emailservice/requirements.txt | 1 + src/emailservice/source-context.json | 6 +++ src/recommendationservice/source-context.json | 6 +++ 8 files changed, 82 insertions(+), 52 deletions(-) create mode 100644 src/cartservice/source-context.json create mode 100644 src/emailservice/source-context.json create mode 100644 src/recommendationservice/source-context.json diff --git a/src/cartservice/Dockerfile b/src/cartservice/Dockerfile index ad2b1c3..361fd9d 100644 --- a/src/cartservice/Dockerfile +++ b/src/cartservice/Dockerfile @@ -1,28 +1,35 @@ -FROM microsoft/dotnet:2.1-sdk-alpine as builder +FROM gcr.io/dotnet-debugger/aspnetcore:2.1 as builder +ENV d = 1 WORKDIR /app COPY . . RUN dotnet restore && \ dotnet build && \ - dotnet publish -c release -r linux-musl-x64 -o /cartservice + dotnet publish -c debug -o /cartservice # cartservice -FROM alpine:3.8 +FROM gcr.io/dotnet-debugger/aspnetcore:2.1 + +# Dependencies for runtime +# busybox-extras => telnet +RUN apt-get install -q -y --no-install-recommends \ + busybox \ + libc6 \ + libunwind-dev \ + libuuid1 \ + libgcc1 \ + icu-devtools \ + musl-dev \ + wget RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \ chmod +x /bin/grpc_health_probe -# Dependencies for runtime -# busybox-extras => telnet -RUN apk add --no-cache \ - busybox-extras \ - libc6-compat \ - libunwind \ - libuuid \ - libgcc \ - libstdc++ \ - libintl \ - icu WORKDIR /app COPY --from=builder /cartservice . -ENTRYPOINT ["./cartservice", "start"] +COPY ./source-context.json /usr/share/dotnet-debugger/agent + +ENV STACKDRIVER_DEBUGGER_MODULE=cartservice +ENV STACKDRIVER_DEBUGGER_VERSION=1.0.0 + +ENTRYPOINT ["/usr/share/dotnet-debugger/start-debugger.sh", "dotnet", "cartservice.dll", "start"] diff --git a/src/cartservice/cartservice.csproj b/src/cartservice/cartservice.csproj index 3fea4a1..1a0ad06 100644 --- a/src/cartservice/cartservice.csproj +++ b/src/cartservice/cartservice.csproj @@ -3,6 +3,7 @@ Exe netcoreapp2.1 + portable diff --git a/src/cartservice/source-context.json b/src/cartservice/source-context.json new file mode 100644 index 0000000..4b8216b --- /dev/null +++ b/src/cartservice/source-context.json @@ -0,0 +1,6 @@ +{ + "git": { + "revisionId": "1fe7f8dcec94e4c90a2ce8c3c9652eb38152bb46", + "url": "git@github.com:hrasadi/microservices-demo.git" + } +} \ No newline at end of file diff --git a/src/emailservice/Dockerfile b/src/emailservice/Dockerfile index 7aa7ec1..40427d3 100644 --- a/src/emailservice/Dockerfile +++ b/src/emailservice/Dockerfile @@ -1,45 +1,45 @@ -FROM python:3-alpine as base - -FROM base as builder +FROM debian:stretch as base +ENV d = 1 # gRPC and app deps -RUN apk add --update --no-cache \ - gcc \ - linux-headers \ - make \ - musl-dev \ - python-dev \ - g++ \ - # App Deps - cairo-dev \ - cairo \ - openssl-dev \ - gobject-introspection-dev +RUN apt-get update + +RUN apt-get install -q -y --no-install-recommends \ + git cmake curl \ + python-dev python-setuptools python-pip \ + build-essential zlib1g-dev libbz2-dev \ + libreadline-dev libsqlite3-dev wget curl \ + llvm libncurses5-dev libncursesw5-dev \ + xz-utils tk-dev libffi-dev \ + libssl-dev musl-dev libgirepository1.0-dev libcairo-dev + +# Python +ENV PYENV_SHA256 df9449f69918c716e688d4216eb4398d2cd6d2dcd0f7e6f56d55d19d74cc57cc +RUN curl -L https://github.com/pyenv/pyenv/archive/v1.2.6.tar.gz -o pyenv.tar.gz +RUN echo $PYENV_SHA256 pyenv.tar.gz | sha256sum -c +RUN tar zxvf pyenv.tar.gz +RUN mv pyenv-* pyenv +RUN pyenv/plugins/python-build/install.sh +RUN python-build 3.7.0 /usr/local/ +RUN rm /usr/local/bin/python # get packages +RUN pip install --upgrade pip COPY requirements.txt . RUN pip install -r requirements.txt -FROM base as final - -# Enable unbuffered logging -ENV PYTHONUNBUFFERED=1 - # Download the grpc health probe RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \ chmod +x /bin/grpc_health_probe +# Enable unbuffered logging +ENV PYTHONUNBUFFERED=1 + WORKDIR /email_server -# Grab packages from builder -COPY --from=builder /usr/local/lib/python3.7/ /usr/local/lib/python3.7/ - -# Need libstdc++ for grpc -RUN apk add --no-cache libstdc++ - # Add the application COPY . . EXPOSE 8080 -ENTRYPOINT [ "python", "email_server.py" ] \ No newline at end of file +ENTRYPOINT [ "python3", "email_server.py" ] diff --git a/src/emailservice/email_server.py b/src/emailservice/email_server.py index 676b70e..50d0da9 100644 --- a/src/emailservice/email_server.py +++ b/src/emailservice/email_server.py @@ -23,6 +23,9 @@ import grpc from jinja2 import Environment, FileSystemLoader, select_autoescape, TemplateError from google.api_core.exceptions import GoogleAPICallError +import googleclouddebugger +import traceback + import demo_pb2 import demo_pb2_grpc from grpc_health.v1 import health_pb2 @@ -33,8 +36,6 @@ from grpc_health.v1 import health_pb2_grpc # from opencensus.trace.exporters import stackdriver_exporter # from opencensus.trace.exporters import print_exporter -# import googleclouddebugger - # try: # sampler = always_on.AlwaysOnSampler() # exporter = stackdriver_exporter.StackdriverExporter() @@ -42,14 +43,6 @@ from grpc_health.v1 import health_pb2_grpc # except: # tracer_interceptor = server_interceptor.OpenCensusServerInterceptor() -# try: -# googleclouddebugger.enable( -# module='emailserver', -# version='1.0.0' -# ) -# except: -# pass - from logger import getJSONLogger logger = getJSONLogger('emailservice-server') @@ -145,5 +138,15 @@ def start(dummy_mode): if __name__ == '__main__': + try: + googleclouddebugger.enable( + module='emailserver', + version='1.0.0' + ) + except: + logger.error("could not enable debugger") + logger.error(traceback.print_exc()) + pass + logger.info('starting the email service in dummy mode.') start(dummy_mode = True) diff --git a/src/emailservice/requirements.txt b/src/emailservice/requirements.txt index 17f0799..e0bd1a9 100644 --- a/src/emailservice/requirements.txt +++ b/src/emailservice/requirements.txt @@ -12,6 +12,7 @@ google-api-core==1.4.0 google-auth==1.5.1 google-cloud-core==0.28.1 google-cloud-trace==0.19.0 +google-python-cloud-debugger==2.9 googleapis-common-protos==1.5.3 grpc-google-iam-v1==0.11.4 grpcio==1.12.1 diff --git a/src/emailservice/source-context.json b/src/emailservice/source-context.json new file mode 100644 index 0000000..4b8216b --- /dev/null +++ b/src/emailservice/source-context.json @@ -0,0 +1,6 @@ +{ + "git": { + "revisionId": "1fe7f8dcec94e4c90a2ce8c3c9652eb38152bb46", + "url": "git@github.com:hrasadi/microservices-demo.git" + } +} \ No newline at end of file diff --git a/src/recommendationservice/source-context.json b/src/recommendationservice/source-context.json new file mode 100644 index 0000000..4b8216b --- /dev/null +++ b/src/recommendationservice/source-context.json @@ -0,0 +1,6 @@ +{ + "git": { + "revisionId": "1fe7f8dcec94e4c90a2ce8c3c9652eb38152bb46", + "url": "git@github.com:hrasadi/microservices-demo.git" + } +} \ No newline at end of file