in dashboards-observability/server/routes/custom_panels/visualizations_router.ts [16:225]
export function VisualizationsRouter(router: IRouter) {
// Fetch all the savedVisualzations
const customPanelBackend = new CustomPanelsAdaptor();
router.get(
{
path: `${API_PREFIX}/visualizations`,
validate: {},
},
async (
context,
request,
response
): Promise<IOpenSearchDashboardsResponse<any | ResponseError>> => {
const opensearchNotebooksClient: ILegacyScopedClusterClient = context.observability_plugin.observabilityClient.asScoped(
request
);
try {
const visualizationList = await customPanelBackend.getAllSavedVisualizations(
opensearchNotebooksClient
);
return response.ok({
body: {
visualizations: visualizationList,
},
});
} catch (error) {
console.error('Issue in fetching saved visualizations:', error);
return response.custom({
statusCode: error.statusCode || 500,
body: error.message,
});
}
}
);
// get all saved visualizations by Id
router.get(
{
path: `${API_PREFIX}/visualizations/{savedVisualizationId}`,
validate: {
params: schema.object({
savedVisualizationId: schema.string(),
}),
},
},
async (
context,
request,
response
): Promise<IOpenSearchDashboardsResponse<any | ResponseError>> => {
const opensearchNotebooksClient: ILegacyScopedClusterClient = context.observability_plugin.observabilityClient.asScoped(
request
);
try {
const savedVisualization = await customPanelBackend.getSavedVisualizationById(
opensearchNotebooksClient,
request.params.savedVisualizationId
);
return response.ok({
body: {
visualization: savedVisualization,
},
});
} catch (error) {
console.error('Issue in fetching saved visualizations by ids:', error);
return response.custom({
statusCode: error.statusCode || 500,
body: error.message,
});
}
}
);
// Add a new visualization to the panel
router.post(
{
path: `${API_PREFIX}/visualizations`,
validate: {
body: schema.object({
panelId: schema.string(),
savedVisualizationId: schema.string(),
}),
},
},
async (
context,
request,
response
): Promise<IOpenSearchDashboardsResponse<any | ResponseError>> => {
const opensearchNotebooksClient: ILegacyScopedClusterClient = context.observability_plugin.observabilityClient.asScoped(
request
);
try {
const newVisualizations = await customPanelBackend.addVisualization(
opensearchNotebooksClient,
request.body.panelId,
request.body.savedVisualizationId
);
return response.ok({
body: {
message: 'Visualization Added',
visualizations: newVisualizations,
},
});
} catch (error) {
console.error('Issue in adding visualization:', error);
return response.custom({
statusCode: error.statusCode || 500,
body: error.message,
});
}
}
);
// Replace an existing visualization
router.post(
{
path: `${API_PREFIX}/visualizations/replace`,
validate: {
body: schema.object({
panelId: schema.string(),
savedVisualizationId: schema.string(),
oldVisualizationId: schema.string(),
}),
},
},
async (
context,
request,
response
): Promise<IOpenSearchDashboardsResponse<any | ResponseError>> => {
const opensearchNotebooksClient: ILegacyScopedClusterClient = context.observability_plugin.observabilityClient.asScoped(
request
);
try {
const newVisualizations = await customPanelBackend.addVisualization(
opensearchNotebooksClient,
request.body.panelId,
request.body.savedVisualizationId,
request.body.oldVisualizationId
);
return response.ok({
body: {
message: 'Visualization Replaced',
visualizations: newVisualizations,
},
});
} catch (error) {
console.error('Issue in replacing visualization:', error);
return response.custom({
statusCode: error.statusCode || 500,
body: error.message,
});
}
}
);
// changes the position of the mentioned visualizations
// Also removes the visualiations not mentioned
router.put(
{
path: `${API_PREFIX}/visualizations/edit`,
validate: {
body: schema.object({
panelId: schema.string(),
visualizationParams: schema.arrayOf(
schema.object({
i: schema.string(),
x: schema.number(),
y: schema.number(),
w: schema.number(),
h: schema.number(),
})
),
}),
},
},
async (
context,
request,
response
): Promise<IOpenSearchDashboardsResponse<any | ResponseError>> => {
const opensearchNotebooksClient: ILegacyScopedClusterClient = context.observability_plugin.observabilityClient.asScoped(
request
);
try {
const newVisualizations = await customPanelBackend.editVisualization(
opensearchNotebooksClient,
request.body.panelId,
request.body.visualizationParams
);
return response.ok({
body: {
message: 'Visualizations Edited',
visualizations: newVisualizations,
},
});
} catch (error) {
console.error('Issue in Editing visualizations:', error);
return response.custom({
statusCode: error.statusCode || 500,
body: error.message,
});
}
}
);
}