Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SDK error when working with slack_bolt application #833

Open
martmichals opened this issue Jul 4, 2023 · 0 comments
Open

SDK error when working with slack_bolt application #833

martmichals opened this issue Jul 4, 2023 · 0 comments

Comments

@martmichals
Copy link

Hello, I've run into the following error when developing an application w/slack_bolt:

{
  "message": "Cannot set tag: Tag http.status_code is already set",
  "name": "DuplicateTraceSpanName",
  "stacktrace": "Traceback (most recent call last):\n  File \"/var/runtime/urllib3/connectionpool.py\", line 440, in _make_request\n    httplib_response = conn.getresponse(buffering=True)\n  File \"/opt/python/sls_sdk/lib/instrumentation/http.py\", line 306, in _func\n    response = self._original_getresponse(_self, *args, **kwargs)\nTypeError: getresponse() got an unexpected keyword argument 'buffering'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/opt/python/sls_sdk/lib/tags.py\", line 60, in set\n    self._set(key, value)\n  File \"/opt/python/sls_sdk/lib/tags.py\", line 56, in _set\n    raise DuplicateTraceSpanName(f\"Cannot set tag: Tag {name} is already set\")\nsls_sdk.exceptions.DuplicateTraceSpanName: Cannot set tag: Tag http.status_code is already set\n",
  "type": "ERROR_TYPE_CAUGHT_SDK_INTERNAL"
}

Here is the stacktrace value in a more readable form:

Traceback (most recent call last):
File "/var/runtime/urllib3/connectionpool.py", line 440, in _make_request
httplib_response = conn.getresponse(buffering=True)
File "/opt/python/sls_sdk/lib/instrumentation/http.py", line 306, in _func
response = self._original_getresponse(_self, *args, **kwargs)
TypeError: getresponse() got an unexpected keyword argument 'buffering'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/python/sls_sdk/lib/tags.py", line 60, in set
self._set(key, value)
File "/opt/python/sls_sdk/lib/tags.py", line 56, in _set
raise DuplicateTraceSpanName(f"Cannot set tag: Tag {name} is already set")
sls_sdk.exceptions.DuplicateTraceSpanName: Cannot set tag: Tag http.status_code is already set

Here is code for the lambda application defining a simple slack bot that accepts one slash command:

import os
import logging

# Slack bolt
import sys
sys.path.insert(0, 'deps')
from slack_bolt import App
from slack_bolt.adapter.aws_lambda import SlackRequestHandler

# Set up the bolt application
app = App(
    process_before_response = True,
    token = os.environ['SLACK_BOT_TOKEN'],
    signing_secret = os.environ['SLACK_SIGNING_SECRET']
)

# Log incoming requests
@app.middleware
def log_req(logger, body, next):
    logger.debug(body)
    return next()

# Acknowledge incoming slack command
def acknowledge_command(body, ack):
    # Acknowledge command
    if (body_text := body.get('text')) is None or body_text.strip() == '':
        ack(f':x: `{body.get("command")}` needs more context')

    # Got command, no response
    ack()

# Actual processing of the command
def process_command(respond, body):
    respond(f'Completed! (task: {body.get("command")})')

# Register command with application
app.command('/test')(
    ack = acknowledge_command,
    lazy = [process_command]
)

# Set up logging format and level
SlackRequestHandler.clear_all_log_handlers()
logging.basicConfig(
    format = '%(asctime)s %(message)s', 
    level = logging.WARN
)

# Set up lambda function
def handler(event, context):
    return SlackRequestHandler(app=app).handle(event, context)

Please let me know if any additional information is required.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant