Skip to content

Commit 70be770

Browse files
committed
feat(webapp): the Queues page becomes Concurrency
The page moves from /queues to /concurrency with the same layout, charts and columns; the old URL (list and detail, query intact) redirects permanently, and old deeplinks and favorites resolve to the new page. Path helpers, side menu, deeplink and favorites registries and agent page labels follow the rename.
1 parent ccf919e commit 70be770

18 files changed

Lines changed: 56 additions & 35 deletions

File tree

‎apps/webapp/app/components/billing/OrgBanner.tsx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
import { useOptionalProject, useProject } from "~/hooks/useProject";
1515
import { useShowSelfServe } from "~/hooks/useShowSelfServe";
1616
import { useCurrentPlan } from "~/routes/_app.orgs.$organizationSlug/route";
17-
import { v3BillingLimitsPath, v3BillingPath, v3QueuesPath } from "~/utils/pathBuilder";
17+
import { v3BillingLimitsPath, v3BillingPath, concurrencyPath } from "~/utils/pathBuilder";
1818
import { ENVIRONMENT_PAUSE_SOURCE_BILLING_LIMIT } from "~/utils/environmentPauseSource";
1919

2020
function getUpgradeResetDate(): Date {
@@ -209,7 +209,7 @@ function PausedEnvironmentBanner({ hideButton }: { hideButton: boolean }) {
209209
hideButton ? undefined : (
210210
<LinkButton
211211
variant="tertiary/small"
212-
to={v3QueuesPath(organization, project, environment)}
212+
to={concurrencyPath(organization, project, environment)}
213213
>
214214
Manage
215215
</LinkButton>

‎apps/webapp/app/components/dashboard-agent/page-label.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ const SECTION_LABELS: Record<string, string> = {
4949
batches: "Batches",
5050
"bulk-actions": "Bulk actions",
5151
branches: "Branches",
52+
concurrency: "Concurrency",
5253
"concurrency-limits": "Concurrency limits",
5354
dashboards: "Dashboards",
5455
deployments: "Deployments",

‎apps/webapp/app/components/navigation/favoritePages.tsx‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,8 @@ const ENV_PAGE_META: Record<string, PageMeta> = {
223223
logs: { icon: "logs", name: "Logs" },
224224
errors: { icon: "errors", name: "Errors", singular: "Error" },
225225
query: { icon: "query", name: "Query" },
226-
queues: { icon: "queues", name: "Queues", singular: "Queue" },
226+
queues: { icon: "queues", name: "Concurrency" },
227+
concurrency: { icon: "queues", name: "Concurrency" },
227228
dashboards: { icon: "dashboards", name: "Dashboards", singular: "Dashboard" },
228229
deployments: { icon: "deployments", name: "Deploys", singular: "Deploy" },
229230
"environment-variables": { icon: "environment-variables", name: "Environment variables" },

‎apps/webapp/app/components/navigation/sideMenuSections.tsx‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import {
3939
v3ProjectAlertsPath,
4040
v3ProjectSettingsIntegrationsPath,
4141
v3PromptsPath,
42-
v3QueuesPath,
42+
concurrencyPath,
4343
v3WaitpointTokensPath,
4444
} from "~/utils/pathBuilder";
4545
import { AlphaBadge, NewBadge } from "../FeatureBadges";
@@ -160,10 +160,10 @@ export function buildSideMenuSections({
160160
} satisfies SideMenuItemConfig,
161161
{
162162
id: "queues",
163-
name: "Queues",
163+
name: "Concurrency",
164164
icon: QueuesIcon,
165165
activeIconColor: "text-queues",
166-
to: v3QueuesPath(organization, project, environment),
166+
to: concurrencyPath(organization, project, environment),
167167
dataAction: "queues",
168168
} satisfies SideMenuItemConfig,
169169
{

apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.queues/route.tsx renamed to apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.concurrency/route.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ import {
8787
docsPath,
8888
EnvironmentParamSchema,
8989
v3BillingPath,
90-
v3QueuePath,
90+
concurrencyQueuePath,
9191
v3RunsPath,
9292
} from "~/utils/pathBuilder";
9393
import type { Handle } from "~/utils/handle";
@@ -485,7 +485,7 @@ function QueuesWithMetricsView() {
485485
return (
486486
<PageContainer>
487487
<NavBar>
488-
<PageTitle title="Queues" />
488+
<PageTitle title="Concurrency" />
489489
<PageAccessories>
490490
<AdminDebugTooltip />
491491
<WhenAgentUnavailable>
@@ -778,7 +778,7 @@ function QueuesWithMetricsView() {
778778
queue.queued >= environment.queueSizeLimit;
779779
const queueFilterableName = queueMetricsKey(queue);
780780
const queueMetric = metricsByQueue[queueFilterableName];
781-
const queueDetailPath = v3QueuePath(organization, project, env, {
781+
const queueDetailPath = concurrencyQueuePath(organization, project, env, {
782782
friendlyId: queue.id,
783783
});
784784
const isLimit = queue.kind === "limit";
@@ -1748,7 +1748,7 @@ function ClassicQueuesView() {
17481748
return (
17491749
<PageContainer>
17501750
<NavBar>
1751-
<PageTitle title="Queues" />
1751+
<PageTitle title="Concurrency" />
17521752
<PageAccessories>
17531753
<AdminDebugTooltip />
17541754
<WhenAgentUnavailable>

apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.queues_.$queueParam/route.tsx renamed to apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.concurrency_.$queueParam/route.tsx

File renamed without changes.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { redirect, type LoaderFunctionArgs } from "@remix-run/server-runtime";
2+
3+
/** The queues page became the Concurrency page; old URLs (bookmarks, agent deep
4+
* links, the queue detail path) redirect with their sub-path and query intact. */
5+
export const loader = async ({ params, request }: LoaderFunctionArgs) => {
6+
const url = new URL(request.url);
7+
const subPath = params["*"] ? `/${params["*"]}` : "";
8+
const base = url.pathname.replace(/\/queues(\/.*)?$/, "/concurrency");
9+
return redirect(`${base}${subPath}${url.search}`, 301);
10+
};
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { redirect, type LoaderFunctionArgs } from "@remix-run/server-runtime";
2+
3+
/** The queues page became the Concurrency page; the bare old URL redirects with
4+
* its query intact. */
5+
export const loader = async ({ request }: LoaderFunctionArgs) => {
6+
const url = new URL(request.url);
7+
return redirect(`${url.pathname.replace(/\/queues$/, "/concurrency")}${url.search}`, 301);
8+
};

‎apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.tasks.scheduled.$taskParam/route.tsx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ import {
9797
v3EditSchedulePath,
9898
v3EnvironmentPath,
9999
v3NewSchedulePath,
100-
v3QueuePath,
100+
concurrencyQueuePath,
101101
v3RunsPath,
102102
v3SchedulePath,
103103
v3SchedulesAddOnPath,
@@ -258,7 +258,7 @@ export default function Page() {
258258
taskIdentifier: task.slug,
259259
});
260260
const queuePath = task.queue
261-
? v3QueuePath(organization, project, environment, { friendlyId: task.queue.friendlyId })
261+
? concurrencyQueuePath(organization, project, environment, { friendlyId: task.queue.friendlyId })
262262
: undefined;
263263

264264
const filters: TaskRunListSearchFilters = useMemo(() => ({ tasks: [task.slug] }), [task.slug]);

‎apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.tasks.standard.$taskParam/route.tsx‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ import { requireUser } from "~/services/session.server";
6363
import {
6464
EnvironmentParamSchema,
6565
v3EnvironmentPath,
66-
v3QueuePath,
67-
v3QueuesPath,
66+
concurrencyQueuePath,
67+
concurrencyPath,
6868
v3TestTaskPath,
6969
} from "~/utils/pathBuilder";
7070
import { parseFiniteInt } from "~/utils/searchParams";
@@ -198,9 +198,9 @@ export default function Page() {
198198
const testPath = v3TestTaskPath(organization, project, environment, {
199199
taskIdentifier: task.slug,
200200
});
201-
const queuesPath = v3QueuesPath(organization, project, environment);
201+
const queuesPath = concurrencyPath(organization, project, environment);
202202
const queuePath = task.queue
203-
? v3QueuePath(organization, project, environment, { friendlyId: task.queue.friendlyId })
203+
? concurrencyQueuePath(organization, project, environment, { friendlyId: task.queue.friendlyId })
204204
: undefined;
205205

206206
const { value } = useSearchParams();

0 commit comments

Comments
 (0)