refactor: rename group/groupName to application/applicationName
Some checks failed
CI / build (push) Failing after 40s
CI / cleanup-branch (push) Has been skipped
CI / docker (push) Has been skipped
CI / deploy (push) Has been skipped
CI / deploy-feature (push) Has been skipped

The execution-related "group" concept actually represents the
application name. Rename all Java fields, API parameters, and frontend
types from groupName→applicationName and group→application for clarity.

- Java records: ExecutionSummary, ExecutionDetail, ExecutionDocument,
  ExecutionRecord, ProcessorRecord
- API params: SearchRequest.group→application, SearchController
  @RequestParam group→application
- Services: IngestionService, DetailService, SearchIndexer, StatsStore
- Frontend: schema.d.ts, Dashboard, ExchangeDetail, RouteDetail,
  executions query hooks

Database column names (group_name) and OpenSearch field names are
unchanged — only the API-facing Java/TS field names are renamed.

RBAC group references (groups table, GroupRepository, GroupsTab) are
a separate domain concept and are NOT affected by this change.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-03-23 21:21:38 +01:00
parent 3c226de62f
commit 8ad0016a8e
54 changed files with 21442 additions and 73 deletions

View File

@@ -6,10 +6,10 @@ export function useExecutionStats(
timeFrom: string | undefined,
timeTo: string | undefined,
routeId?: string,
group?: string,
application?: string,
) {
return useQuery({
queryKey: ['executions', 'stats', timeFrom, timeTo, routeId, group],
queryKey: ['executions', 'stats', timeFrom, timeTo, routeId, application],
queryFn: async () => {
const { data, error } = await api.GET('/search/stats', {
params: {
@@ -17,7 +17,7 @@ export function useExecutionStats(
from: timeFrom!,
to: timeTo || undefined,
routeId: routeId || undefined,
group: group || undefined,
application: application || undefined,
},
},
});
@@ -49,10 +49,10 @@ export function useStatsTimeseries(
timeFrom: string | undefined,
timeTo: string | undefined,
routeId?: string,
group?: string,
application?: string,
) {
return useQuery({
queryKey: ['executions', 'timeseries', timeFrom, timeTo, routeId, group],
queryKey: ['executions', 'timeseries', timeFrom, timeTo, routeId, application],
queryFn: async () => {
const { data, error } = await api.GET('/search/stats/timeseries', {
params: {
@@ -61,7 +61,7 @@ export function useStatsTimeseries(
to: timeTo || undefined,
buckets: 24,
routeId: routeId || undefined,
group: group || undefined,
application: application || undefined,
},
},
});

View File

@@ -1079,7 +1079,7 @@ export interface components {
routeId?: string;
agentId?: string;
processorType?: string;
group?: string;
application?: string;
agentIds?: string[];
/** Format: int32 */
offset?: number;
@@ -1092,7 +1092,7 @@ export interface components {
executionId: string;
routeId: string;
agentId: string;
groupName: string;
applicationName: string;
status: string;
/** Format: date-time */
startTime: string;
@@ -1327,7 +1327,7 @@ export interface components {
errorStackTrace: string;
diagramContentHash: string;
processors: components["schemas"]["ProcessorNode"][];
groupName?: string;
applicationName?: string;
children?: components["schemas"]["ProcessorNode"][];
};
ProcessorNode: {
@@ -2977,7 +2977,7 @@ export interface operations {
from: string;
to?: string;
routeId?: string;
group?: string;
application?: string;
};
header?: never;
path?: never;
@@ -3003,7 +3003,7 @@ export interface operations {
to?: string;
buckets?: number;
routeId?: string;
group?: string;
application?: string;
};
header?: never;
path?: never;

View File

@@ -36,7 +36,7 @@ export default function Dashboard() {
const { data: searchResult } = useSearchExecutions({
timeFrom, timeTo,
routeId: routeId || undefined,
group: appId || undefined,
application: appId || undefined,
offset: 0, limit: 50,
}, true);
const { data: detail } = useExecutionDetail(selectedId);
@@ -94,7 +94,7 @@ export default function Dashboard() {
),
},
{ key: 'routeId', header: 'Route', sortable: true, render: (v) => <span>{String(v)}</span> },
{ key: 'groupName', header: 'Application', sortable: true, render: (v) => <span>{String(v ?? '')}</span> },
{ key: 'applicationName', header: 'Application', sortable: true, render: (v) => <span>{String(v ?? '')}</span> },
{ key: 'executionId', header: 'Exchange ID', sortable: true, render: (v) => <MonoText size="xs">{String(v)}</MonoText> },
{ key: 'startTime', header: 'Started', sortable: true, render: (v) => <MonoText size="xs">{new Date(v as string).toISOString().replace('T', ' ').slice(0, 19)}</MonoText> },
{

View File

@@ -94,7 +94,7 @@ export default function ExchangeDetail() {
<div>
<Breadcrumb items={[
{ label: 'Dashboard', href: '/apps' },
{ label: detail.groupName || 'App', href: `/apps/${detail.groupName}` },
{ label: detail.applicationName || 'App', href: `/apps/${detail.applicationName}` },
{ label: id?.slice(0, 12) || '' },
]} />
@@ -109,11 +109,11 @@ export default function ExchangeDetail() {
<Badge label={detail.status} color={detail.status === 'COMPLETED' ? 'success' : 'error'} variant="filled" />
</div>
<div className={styles.exchangeRoute}>
Route: <span className={styles.routeLink} onClick={() => navigate(`/apps/${detail.groupName}/${detail.routeId}`)}>{detail.routeId}</span>
{detail.groupName && (
Route: <span className={styles.routeLink} onClick={() => navigate(`/apps/${detail.applicationName}/${detail.routeId}`)}>{detail.routeId}</span>
{detail.applicationName && (
<>
<span className={styles.headerDivider}>&middot;</span>
App: <MonoText size="xs">{detail.groupName}</MonoText>
App: <MonoText size="xs">{detail.applicationName}</MonoText>
</>
)}
</div>

View File

@@ -51,7 +51,7 @@ export default function RouteDetail() {
timeFrom,
timeTo,
routeId: routeId || undefined,
group: appId || undefined,
application: appId || undefined,
offset: 0,
limit: 50,
});
@@ -59,7 +59,7 @@ export default function RouteDetail() {
timeFrom,
timeTo,
routeId: routeId || undefined,
group: appId || undefined,
application: appId || undefined,
status: 'FAILED',
offset: 0,
limit: 200,