mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Loki: Improve error message for unescaped \ and add LogQL link to docs (#26136)
* Add custom escaping error message * Include regex escape error message * Update docs, add logql link * Refactor
This commit is contained in:
parent
45cfb3451b
commit
d3dcb19a5b
@ -59,7 +59,7 @@ The new field with the link shown in log details:
|
|||||||
|
|
||||||
## Querying Logs
|
## Querying Logs
|
||||||
|
|
||||||
Querying and displaying log data from Loki is available via [Explore]({{< relref "../explore" >}}), and with the [logs panel]({{< relref "../../panels/visualizations/logs-panel.md" >}}) in dashboards. Select the Loki data source, and then enter a log query to display your logs.
|
Querying and displaying log data from Loki is available via [Explore]({{< relref "../explore" >}}), and with the [logs panel]({{< relref "../../panels/visualizations/logs-panel.md" >}}) in dashboards. Select the Loki data source, and then enter a [LogQL](https://github.com/grafana/loki/blob/master/docs/logql.md) query to display your logs.
|
||||||
|
|
||||||
### Log Queries
|
### Log Queries
|
||||||
|
|
||||||
|
@ -189,6 +189,33 @@ describe('LokiDatasource', () => {
|
|||||||
expect(dataFrame.meta?.limit).toBe(20);
|
expect(dataFrame.meta?.limit).toBe(20);
|
||||||
expect(dataFrame.meta?.searchWords).toEqual(['foo']);
|
expect(dataFrame.meta?.searchWords).toEqual(['foo']);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should return custom error message when Loki returns escaping error', async () => {
|
||||||
|
const customData = { ...(instanceSettings.jsonData || {}), maxLines: 20 };
|
||||||
|
const customSettings = { ...instanceSettings, jsonData: customData };
|
||||||
|
const ds = new LokiDatasource(customSettings, templateSrvMock);
|
||||||
|
|
||||||
|
datasourceRequestMock.mockImplementation(
|
||||||
|
jest.fn().mockReturnValueOnce(
|
||||||
|
Promise.reject({
|
||||||
|
data: 'parse error at line 1, col 6: invalid char escape',
|
||||||
|
status: 400,
|
||||||
|
statusText: 'Bad Request',
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
const options = getQueryOptions<LokiQuery>({
|
||||||
|
targets: [{ expr: '{job="gra\\fana"}', refId: 'B' }],
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
await ds.query(options).toPromise();
|
||||||
|
} catch (err) {
|
||||||
|
expect(err.message).toBe(
|
||||||
|
'Error: parse error at line 1, col 6: invalid char escape. Make sure that all special characters are escaped with \\. For more information on escaping of special characters visit LogQL documentation at https://github.com/grafana/loki/blob/master/docs/logql.md.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('When interpolating variables', () => {
|
describe('When interpolating variables', () => {
|
||||||
|
@ -537,7 +537,11 @@ export class LokiDatasource extends DataSourceApi<LokiQuery, LokiOptions> {
|
|||||||
|
|
||||||
if (err.data) {
|
if (err.data) {
|
||||||
if (typeof err.data === 'string') {
|
if (typeof err.data === 'string') {
|
||||||
error.message = err.data;
|
if (err.data.includes('escape') && target.expr.includes('\\')) {
|
||||||
|
error.message = `Error: ${err.data}. Make sure that all special characters are escaped with \\. For more information on escaping of special characters visit LogQL documentation at https://github.com/grafana/loki/blob/master/docs/logql.md.`;
|
||||||
|
} else {
|
||||||
|
error.message = err.data;
|
||||||
|
}
|
||||||
} else if (err.data.error) {
|
} else if (err.data.error) {
|
||||||
error.message = safeStringifyValue(err.data.error);
|
error.message = safeStringifyValue(err.data.error);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user