in dashboards-reports/server/routes/reportDefinition.ts [26:291]
export default function (router: IRouter, config: ReportingConfig) {
const protocol = config.get('osd_server', 'protocol');
const hostname = config.get('osd_server', 'hostname');
const port = config.get('osd_server', 'port');
const basePath = config.osdConfig.get('server', 'basePath');
// Create report Definition
router.post(
{
path: `${API_PREFIX}/reportDefinition`,
validate: {
body: schema.any(),
},
},
async (
context,
request,
response
): Promise<IOpenSearchDashboardsResponse<any | ResponseError>> => {
addToMetric('report_definition', 'create', 'count');
let reportDefinition = request.body;
//@ts-ignore
const logger = context.reporting_plugin.logger;
// input validation
try {
reportDefinition.report_params.core_params.origin = `${protocol}://${hostname}:${port}${basePath}`;
reportDefinition = await validateReportDefinition(
context.core.opensearch.legacy.client,
reportDefinition,
basePath
);
} catch (error) {
logger.error(
`Failed input validation for create report definition ${error}`
);
addToMetric('report_definition', 'create', 'user_error');
return response.badRequest({ body: error });
}
// save metadata
try {
const res = await createReportDefinition(
request,
context,
reportDefinition
);
return response.ok({
body: {
state: 'Report definition created',
scheduler_response: res,
},
});
} catch (error) {
logger.error(`Failed to create report definition: ${error}`);
addToMetric('report_definition', 'create', checkErrorType(error));
return errorResponse(response, error);
}
}
);
// Update report definition by id
router.put(
{
path: `${API_PREFIX}/reportDefinitions/{reportDefinitionId}`,
validate: {
body: schema.any(),
params: schema.object({
reportDefinitionId: schema.string(),
}),
},
},
async (
context,
request,
response
): Promise<IOpenSearchDashboardsResponse<any | ResponseError>> => {
addToMetric('report_definition', 'update', 'count');
let reportDefinition = request.body;
//@ts-ignore
const logger = context.reporting_plugin.logger;
// input validation
try {
reportDefinition.report_params.core_params.origin =
request.headers.origin;
reportDefinition = await validateReportDefinition(
context.core.opensearch.legacy.client,
reportDefinition,
basePath
);
} catch (error) {
logger.error(
`Failed input validation for update report definition ${error}`
);
addToMetric('report_definition', 'update', 'user_error');
return response.badRequest({ body: error });
}
// Update report definition metadata
try {
const opensearchResp = await updateReportDefinition(
request,
context,
reportDefinition
);
return response.ok({
body: {
state: 'Report definition updated',
scheduler_response: opensearchResp,
},
});
} catch (error) {
logger.error(`Failed to update report definition: ${error}`);
addToMetric('report_definition', 'update', checkErrorType(error));
return errorResponse(response, error);
}
}
);
// get all report definitions details
router.get(
{
path: `${API_PREFIX}/reportDefinitions`,
validate: {
query: schema.object({
fromIndex: schema.maybe(schema.number()),
maxItems: schema.maybe(schema.number()),
}),
},
},
async (
context,
request,
response
): Promise<IOpenSearchDashboardsResponse<any | ResponseError>> => {
addToMetric('report_definition', 'list', 'count');
const { fromIndex, maxItems } = request.query as {
fromIndex: number;
maxItems: number;
};
try {
// @ts-ignore
const opensearchReportsClient: ILegacyScopedClusterClient = context.reporting_plugin.opensearchReportsClient.asScoped(
request
);
const opensearchResp = await opensearchReportsClient.callAsCurrentUser(
'opensearch_reports.getReportDefinitions',
{
fromIndex: fromIndex,
maxItems: maxItems || DEFAULT_MAX_SIZE,
}
);
const reportDefinitionsList = backendToUiReportDefinitionsList(
opensearchResp.reportDefinitionDetailsList,
basePath
);
return response.ok({
body: {
data: reportDefinitionsList,
},
});
} catch (error) {
//@ts-ignore
context.reporting_plugin.logger.error(
`Failed to get report definition details: ${error}`
);
addToMetric('report_definition', 'list', checkErrorType(error));
return errorResponse(response, error);
}
}
);
// get report definition detail by id
router.get(
{
path: `${API_PREFIX}/reportDefinitions/{reportDefinitionId}`,
validate: {
params: schema.object({
reportDefinitionId: schema.string(),
}),
},
},
async (
context,
request,
response
): Promise<IOpenSearchDashboardsResponse<any | ResponseError>> => {
addToMetric('report_definition', 'info', 'count');
try {
// @ts-ignore
const opensearchReportsClient: ILegacyScopedClusterClient = context.reporting_plugin.opensearchReportsClient.asScoped(
request
);
const opensearchResp = await opensearchReportsClient.callAsCurrentUser(
'opensearch_reports.getReportDefinitionById',
{
reportDefinitionId: request.params.reportDefinitionId,
}
);
const reportDefinition = backendToUiReportDefinition(
opensearchResp.reportDefinitionDetails,
basePath
);
return response.ok({
body: { report_definition: reportDefinition },
});
} catch (error) {
//@ts-ignore
context.reporting_plugin.logger.error(
`Failed to get single report details: ${error}`
);
addToMetric('report_definition', 'info', checkErrorType(error));
return errorResponse(response, error);
}
}
);
// Delete report definition by id
router.delete(
{
path: `${API_PREFIX}/reportDefinitions/{reportDefinitionId}`,
validate: {
params: schema.object({
reportDefinitionId: schema.string(),
}),
},
},
async (
context,
request,
response
): Promise<IOpenSearchDashboardsResponse<any | ResponseError>> => {
addToMetric('report_definition', 'delete', 'count');
try {
// @ts-ignore
const opensearchReportsClient: ILegacyScopedClusterClient = context.reporting_plugin.opensearchReportsClient.asScoped(
request
);
const opensearchResp = await opensearchReportsClient.callAsCurrentUser(
'opensearch_reports.deleteReportDefinitionById',
{
reportDefinitionId: request.params.reportDefinitionId,
}
);
return response.ok({
body: {
state: 'Report definition deleted',
opensearch_response: opensearchResp,
},
});
} catch (error) {
//@ts-ignore
context.reporting_plugin.logger.error(
`Failed to delete report definition: ${error}`
);
addToMetric('report_definition', 'delete', checkErrorType(error));
return errorResponse(response, error);
}
}
);
}