mirror of
https://github.com/danswer-ai/danswer.git
synced 2025-06-27 08:21:00 +02:00
Bugfix/slack bot channel config (#4585)
* friendlier handling of slack channel retrieval * retry on downgrade_postgres deadlock * fix comment * text --------- Co-authored-by: Richard Kuo (Onyx) <rkuo@onyx.app>
This commit is contained in:
parent
07f04e35ec
commit
c9a609b7d8
@ -36,6 +36,8 @@ from onyx.utils.logger import setup_logger
|
||||
from onyx.utils.telemetry import create_milestone_and_report
|
||||
from shared_configs.contextvars import get_current_tenant_id
|
||||
|
||||
SLACK_API_CHANNELS_PER_PAGE = 100
|
||||
SLACK_MAX_RETURNED_CHANNELS = 500
|
||||
|
||||
logger = setup_logger()
|
||||
|
||||
@ -355,10 +357,6 @@ def list_bot_configs(
|
||||
]
|
||||
|
||||
|
||||
MAX_SLACK_PAGES = 5
|
||||
SLACK_API_CHANNELS_PER_PAGE = 100
|
||||
|
||||
|
||||
@router.get(
|
||||
"/admin/slack-app/bots/{bot_id}/channels",
|
||||
)
|
||||
@ -368,6 +366,9 @@ def get_all_channels_from_slack_api(
|
||||
_: User | None = Depends(current_admin_user),
|
||||
) -> list[SlackChannel]:
|
||||
"""
|
||||
Returns a list of available slack channels for the slack bot, limited to
|
||||
SLACK_MAX_RETURNED_CHANNELS.
|
||||
|
||||
Fetches all channels in the Slack workspace using the conversations_list API.
|
||||
This includes both public and private channels that are visible to the app,
|
||||
not just the ones the bot is a member of.
|
||||
@ -380,15 +381,12 @@ def get_all_channels_from_slack_api(
|
||||
)
|
||||
|
||||
client = WebClient(token=tokens["bot_token"], timeout=1)
|
||||
all_channels = []
|
||||
all_channels: list[dict] = []
|
||||
next_cursor = None
|
||||
current_page = 0
|
||||
|
||||
try:
|
||||
# Use conversations_list to get all channels in the workspace (including ones the bot is not a member of)
|
||||
while current_page < MAX_SLACK_PAGES:
|
||||
current_page += 1
|
||||
|
||||
while len(all_channels) < SLACK_MAX_RETURNED_CHANNELS:
|
||||
# Make API call with cursor if we have one
|
||||
if next_cursor:
|
||||
response = client.conversations_list(
|
||||
@ -415,16 +413,13 @@ def get_all_channels_from_slack_api(
|
||||
):
|
||||
next_cursor = response["response_metadata"]["next_cursor"]
|
||||
if next_cursor:
|
||||
if current_page == MAX_SLACK_PAGES:
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
detail="Workspace has too many channels to paginate over in this call.",
|
||||
)
|
||||
continue
|
||||
|
||||
# If we get here, no more pages
|
||||
break
|
||||
|
||||
del all_channels[SLACK_MAX_RETURNED_CHANNELS:] # truncate the list
|
||||
|
||||
channels = [
|
||||
SlackChannel(id=channel["id"], name=channel["name"])
|
||||
for channel in all_channels
|
||||
|
@ -273,6 +273,10 @@ def reset_postgres(
|
||||
logger.warning(
|
||||
f"Postgres downgrade timed out, retrying... ({_ + 1}/{NUM_TRIES})"
|
||||
)
|
||||
except RuntimeError:
|
||||
logger.warning(
|
||||
f"Postgres downgrade exceptioned, retrying... ({_ + 1}/{NUM_TRIES})"
|
||||
)
|
||||
|
||||
if not success:
|
||||
raise RuntimeError("Postgres downgrade failed after 10 timeouts.")
|
||||
|
@ -190,6 +190,25 @@ export function SlackChannelConfigFormFields({
|
||||
}
|
||||
);
|
||||
|
||||
// Define the helper text based on the state
|
||||
const channelHelperText = useMemo(() => {
|
||||
if (isLoading || error) {
|
||||
// No helper text needed during loading or if there's an error
|
||||
// (error message is shown separately)
|
||||
return null;
|
||||
}
|
||||
if (!channelOptions || channelOptions.length === 0) {
|
||||
return "No channels found. You can type any channel name in directly.";
|
||||
}
|
||||
|
||||
let helpText = `Select a channel from the dropdown list or type any channel name in directly.`;
|
||||
if (channelOptions.length >= 500) {
|
||||
return `${helpText} (Retrieved the first ${channelOptions.length} channels.)`;
|
||||
}
|
||||
|
||||
return helpText;
|
||||
}, [isLoading, error, channelOptions]);
|
||||
|
||||
if (isLoading) {
|
||||
return <ThreeDotsLoader />;
|
||||
}
|
||||
@ -257,11 +276,11 @@ export function SlackChannelConfigFormFields({
|
||||
/>
|
||||
)}
|
||||
</Field>
|
||||
<p className="mt-2 text-sm dark:text-neutral-400 text-neutral-600">
|
||||
Note: This list shows existing public and private channels (up
|
||||
to 500). You can either select from the list or type any
|
||||
channel name directly.
|
||||
</p>
|
||||
{channelHelperText && (
|
||||
<p className="mt-2 text-sm dark:text-neutral-400 text-neutral-600">
|
||||
{channelHelperText}
|
||||
</p>
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
|
Loading…
x
Reference in New Issue
Block a user