Skip to content

Commit 1ab8be1

Browse files
authored
[Uptime] Migrate Uptime server routing to new platform (#51125) (#52351)
* Move a REST endpoint and the GQL endpoint to NP routing. * Delete obsolete REST endpoint. * Update remaining REST routes to work with NP router. * Remove obsolete code, update some unit tests. * Simplify route creation. * Remove tests of API decommissioned API endpoint. * Rename domain check. * Make return shape of index pattern endpoint correspond to required NP resp body. * Move validate to appropriate level of route definition object for monitor details endpoint. * Update snapshot count route. * Fix broken lint rule. * Remove usages of Boom. * Fix license router creation.
1 parent 159a3a1 commit 1ab8be1

File tree

29 files changed

+278
-436
lines changed

29 files changed

+278
-436
lines changed

x-pack/legacy/plugins/uptime/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export const uptime = (kibana: any) =>
4141

4242
plugin(initializerContext).setup(
4343
{
44-
route: (arg: any) => server.route(arg),
44+
route: server.newPlatform.setup.core.http.createRouter(),
4545
},
4646
{
4747
elasticsearch,

x-pack/legacy/plugins/uptime/server/lib/adapters/auth/__tests__/xpack_auth_adapter.test.ts

Lines changed: 0 additions & 56 deletions
This file was deleted.

x-pack/legacy/plugins/uptime/server/lib/adapters/auth/adapter_types.ts

Lines changed: 0 additions & 32 deletions
This file was deleted.

x-pack/legacy/plugins/uptime/server/lib/adapters/auth/index.ts

Lines changed: 0 additions & 8 deletions
This file was deleted.

x-pack/legacy/plugins/uptime/server/lib/adapters/auth/xpack_auth_adapter.ts

Lines changed: 0 additions & 40 deletions
This file was deleted.

x-pack/legacy/plugins/uptime/server/lib/adapters/framework/adapter_types.ts

Lines changed: 10 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,26 @@
44
* you may not use this file except in compliance with the Elastic License.
55
*/
66

7-
import { GraphQLOptions } from 'apollo-server-core';
87
import { GraphQLSchema } from 'graphql';
9-
import { Lifecycle, ResponseToolkit } from 'hapi';
10-
import { RouteOptions } from 'hapi';
11-
import { SavedObjectsLegacyService } from 'src/core/server';
8+
import { SavedObjectsLegacyService, RequestHandler, IRouter } from 'src/core/server';
129
import { UsageCollectionSetup } from 'src/plugins/usage_collection/server';
13-
14-
export interface UMFrameworkRequest {
15-
user: string;
16-
headers: Record<string, any>;
17-
payload: Record<string, any>;
18-
params: Record<string, any>;
19-
query: Record<string, any>;
20-
}
21-
22-
export type UMFrameworkResponse = Lifecycle.ReturnValue;
10+
import { ObjectType } from '@kbn/config-schema';
11+
import { UMRouteDefinition } from '../../../rest_api';
2312

2413
export interface UMFrameworkRouteOptions<
25-
RouteRequest extends UMFrameworkRequest,
26-
RouteResponse extends UMFrameworkResponse
14+
P extends ObjectType,
15+
Q extends ObjectType,
16+
B extends ObjectType
2717
> {
2818
path: string;
2919
method: string;
30-
handler: (req: Request, h: ResponseToolkit) => any;
20+
handler: RequestHandler<P, Q, B>;
3121
config?: any;
22+
validate: any;
3223
}
3324

3425
export interface UptimeCoreSetup {
35-
route: any;
26+
route: IRouter;
3627
}
3728

3829
export interface UptimeCorePlugins {
@@ -42,24 +33,8 @@ export interface UptimeCorePlugins {
4233
xpack: any;
4334
}
4435

45-
export type UMFrameworkRouteHandler<RouteRequest extends UMFrameworkRequest> = (
46-
request: UMFrameworkRequest,
47-
h: ResponseToolkit
48-
) => void;
49-
50-
export type HapiOptionsFunction = (req: Request) => GraphQLOptions | Promise<GraphQLOptions>;
51-
52-
export interface UMHapiGraphQLPluginOptions {
53-
path: string;
54-
vhost?: string;
55-
route?: RouteOptions;
56-
graphQLOptions: GraphQLOptions | HapiOptionsFunction;
57-
}
58-
5936
export interface UMBackendFrameworkAdapter {
60-
registerRoute<RouteRequest extends UMFrameworkRequest, RouteResponse extends UMFrameworkResponse>(
61-
route: UMFrameworkRouteOptions<RouteRequest, RouteResponse>
62-
): void;
37+
registerRoute(route: UMRouteDefinition): void;
6338
registerGraphQLEndpoint(routePath: string, schema: GraphQLSchema): void;
6439
getSavedObjectsClient(): any;
6540
}

x-pack/legacy/plugins/uptime/server/lib/adapters/framework/kibana_framework_adapter.ts

Lines changed: 49 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,11 @@
55
*/
66

77
import { GraphQLSchema } from 'graphql';
8-
import { Request, ResponseToolkit } from 'hapi';
8+
import { schema as kbnSchema } from '@kbn/config-schema';
99
import { runHttpQuery } from 'apollo-server-core';
1010
import { UptimeCorePlugins, UptimeCoreSetup } from './adapter_types';
11-
import {
12-
UMBackendFrameworkAdapter,
13-
UMFrameworkRequest,
14-
UMFrameworkResponse,
15-
UMFrameworkRouteOptions,
16-
} from './adapter_types';
17-
import { DEFAULT_GRAPHQL_PATH } from '../../../graphql';
11+
import { UMBackendFrameworkAdapter } from './adapter_types';
12+
import { UMRouteDefinition } from '../../../rest_api';
1813

1914
export class UMKibanaBackendFrameworkAdapter implements UMBackendFrameworkAdapter {
2015
constructor(
@@ -25,11 +20,22 @@ export class UMKibanaBackendFrameworkAdapter implements UMBackendFrameworkAdapte
2520
this.plugins = plugins;
2621
}
2722

28-
public registerRoute<
29-
RouteRequest extends UMFrameworkRequest,
30-
RouteResponse extends UMFrameworkResponse
31-
>(route: UMFrameworkRouteOptions<RouteRequest, RouteResponse>) {
32-
this.server.route(route);
23+
public registerRoute({ handler, method, options, path, validate }: UMRouteDefinition) {
24+
const routeDefinition = {
25+
path,
26+
validate,
27+
options,
28+
};
29+
switch (method) {
30+
case 'GET':
31+
this.server.route.get(routeDefinition, handler);
32+
break;
33+
case 'POST':
34+
this.server.route.post(routeDefinition, handler);
35+
break;
36+
default:
37+
throw new Error(`Handler for method ${method} is not defined`);
38+
}
3339
}
3440

3541
public registerGraphQLEndpoint(routePath: string, schema: GraphQLSchema): void {
@@ -43,37 +49,47 @@ export class UMKibanaBackendFrameworkAdapter implements UMBackendFrameworkAdapte
4349
tags: ['access:uptime'],
4450
},
4551
};
46-
this.server.route({
47-
options: options.route,
48-
handler: async (request: Request, h: ResponseToolkit) => {
52+
this.server.route.post(
53+
{
54+
path: routePath,
55+
validate: {
56+
body: kbnSchema.object({
57+
operationName: kbnSchema.nullable(kbnSchema.string()),
58+
query: kbnSchema.string(),
59+
variables: kbnSchema.recordOf(kbnSchema.string(), kbnSchema.any()),
60+
}),
61+
},
62+
options: {
63+
tags: ['access:uptime'],
64+
},
65+
},
66+
async (context, request, resp): Promise<any> => {
4967
try {
50-
const { method } = request;
51-
const query =
52-
method === 'post'
53-
? (request.payload as Record<string, any>)
54-
: (request.query as Record<string, any>);
68+
const query = request.body as Record<string, any>;
5569

5670
const graphQLResponse = await runHttpQuery([request], {
57-
method: method.toUpperCase(),
71+
method: 'POST',
5872
options: options.graphQLOptions,
5973
query,
6074
});
6175

62-
return h.response(graphQLResponse).type('application/json');
76+
return resp.ok({
77+
body: graphQLResponse,
78+
headers: {
79+
'content-type': 'application/json',
80+
},
81+
});
6382
} catch (error) {
6483
if (error.isGraphQLError === true) {
65-
return h
66-
.response(error.message)
67-
.code(error.statusCode)
68-
.type('application/json');
84+
return resp.internalError({
85+
body: { message: error.message },
86+
headers: { 'content-type': 'application/json' },
87+
});
6988
}
70-
return h.response(error).type('application/json');
89+
return resp.internalError();
7190
}
72-
},
73-
method: ['get', 'post'],
74-
path: options.path || DEFAULT_GRAPHQL_PATH,
75-
vhost: undefined,
76-
});
91+
}
92+
);
7793
}
7894

7995
public getSavedObjectsClient() {

x-pack/legacy/plugins/uptime/server/lib/adapters/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
* you may not use this file except in compliance with the Elastic License.
55
*/
66

7-
export * from './auth';
87
export * from './database';
98
export * from './framework';
109
export * from './monitor_states';

x-pack/legacy/plugins/uptime/server/lib/compose/kibana.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,23 @@
44
* you may not use this file except in compliance with the Elastic License.
55
*/
66

7-
import { UMXPackAuthAdapter } from '../adapters/auth';
87
import { UMKibanaDatabaseAdapter } from '../adapters/database/kibana_database_adapter';
98
import { UMKibanaBackendFrameworkAdapter } from '../adapters/framework';
109
import { ElasticsearchMonitorsAdapter } from '../adapters/monitors';
1110
import { ElasticsearchPingsAdapter } from '../adapters/pings';
12-
import { UMAuthDomain } from '../domains';
11+
import { licenseCheck } from '../domains';
1312
import { UMDomainLibs, UMServerLibs } from '../lib';
1413
import { ElasticsearchMonitorStatesAdapter } from '../adapters/monitor_states';
1514
import { UMKibanaSavedObjectsAdapter } from '../adapters/saved_objects/kibana_saved_objects_adapter';
1615
import { UptimeCorePlugins, UptimeCoreSetup } from '../adapters/framework';
1716

1817
export function compose(server: UptimeCoreSetup, plugins: UptimeCorePlugins): UMServerLibs {
19-
const { elasticsearch, savedObjects, xpack } = plugins;
18+
const { elasticsearch, savedObjects } = plugins;
2019
const framework = new UMKibanaBackendFrameworkAdapter(server, plugins);
2120
const database = new UMKibanaDatabaseAdapter(elasticsearch);
2221

23-
const authDomain = new UMAuthDomain(new UMXPackAuthAdapter(xpack), {});
24-
2522
const domainLibs: UMDomainLibs = {
26-
auth: authDomain,
23+
license: licenseCheck,
2724
monitors: new ElasticsearchMonitorsAdapter(database),
2825
monitorStates: new ElasticsearchMonitorStatesAdapter(database),
2926
pings: new ElasticsearchPingsAdapter(database),

x-pack/legacy/plugins/uptime/server/lib/domains/__tests__/__snapshots__/auth.test.ts.snap

Lines changed: 0 additions & 9 deletions
This file was deleted.

0 commit comments

Comments
 (0)