diff --git a/public/app/features/plugins/built_in_plugins.ts b/public/app/features/plugins/built_in_plugins.ts
index a0cedb3ebfd..c4621fda289 100644
--- a/public/app/features/plugins/built_in_plugins.ts
+++ b/public/app/features/plugins/built_in_plugins.ts
@@ -4,7 +4,7 @@ import * as elasticsearchPlugin from 'app/plugins/datasource/elasticsearch/modul
import * as opentsdbPlugin from 'app/plugins/datasource/opentsdb/module';
import * as grafanaPlugin from 'app/plugins/datasource/grafana/module';
import * as influxdbPlugin from 'app/plugins/datasource/influxdb/module';
-import * as loggingPlugin from 'app/plugins/datasource/logging/module';
+import * as lokiPlugin from 'app/plugins/datasource/loki/module';
import * as mixedPlugin from 'app/plugins/datasource/mixed/module';
import * as mysqlPlugin from 'app/plugins/datasource/mysql/module';
import * as postgresPlugin from 'app/plugins/datasource/postgres/module';
@@ -33,7 +33,7 @@ const builtInPlugins = {
'app/plugins/datasource/opentsdb/module': opentsdbPlugin,
'app/plugins/datasource/grafana/module': grafanaPlugin,
'app/plugins/datasource/influxdb/module': influxdbPlugin,
- 'app/plugins/datasource/logging/module': loggingPlugin,
+ 'app/plugins/datasource/loki/module': lokiPlugin,
'app/plugins/datasource/mixed/module': mixedPlugin,
'app/plugins/datasource/mysql/module': mysqlPlugin,
'app/plugins/datasource/postgres/module': postgresPlugin,
diff --git a/public/app/plugins/datasource/logging/README.md b/public/app/plugins/datasource/logging/README.md
deleted file mode 100644
index 33372605973..00000000000
--- a/public/app/plugins/datasource/logging/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Grafana Logging Datasource - Native Plugin
-
-This is a **built in** datasource that allows you to connect to Grafana's logging service.
\ No newline at end of file
diff --git a/public/app/plugins/datasource/logging/module.ts b/public/app/plugins/datasource/logging/module.ts
deleted file mode 100644
index da00edbf40f..00000000000
--- a/public/app/plugins/datasource/logging/module.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import Datasource from './datasource';
-
-import LoggingStartPage from './components/LoggingStartPage';
-import LoggingQueryField from './components/LoggingQueryField';
-
-export class LoggingConfigCtrl {
- static templateUrl = 'partials/config.html';
-}
-
-export {
- Datasource,
- LoggingConfigCtrl as ConfigCtrl,
- LoggingQueryField as ExploreQueryField,
- LoggingStartPage as ExploreStartPage,
-};
diff --git a/public/app/plugins/datasource/loki/README.md b/public/app/plugins/datasource/loki/README.md
new file mode 100644
index 00000000000..222b7e432eb
--- /dev/null
+++ b/public/app/plugins/datasource/loki/README.md
@@ -0,0 +1,3 @@
+# Loki Datasource - Native Plugin
+
+This is a **built in** datasource that allows you to connect to the Loki logging service.
diff --git a/public/app/plugins/datasource/logging/components/LoggingCheatSheet.tsx b/public/app/plugins/datasource/loki/components/LokiCheatSheet.tsx
similarity index 96%
rename from public/app/plugins/datasource/logging/components/LoggingCheatSheet.tsx
rename to public/app/plugins/datasource/loki/components/LokiCheatSheet.tsx
index 4dbf8d1ab89..01c6519916d 100644
--- a/public/app/plugins/datasource/logging/components/LoggingCheatSheet.tsx
+++ b/public/app/plugins/datasource/loki/components/LokiCheatSheet.tsx
@@ -15,7 +15,7 @@ const CHEAT_SHEET_ITEMS = [
export default (props: any) => (
-
Logging Cheat Sheet
+
Loki Cheat Sheet
{CHEAT_SHEET_ITEMS.map(item => (
{item.title}
diff --git a/public/app/plugins/datasource/logging/components/LoggingQueryField.tsx b/public/app/plugins/datasource/loki/components/LokiQueryField.tsx
similarity index 94%
rename from public/app/plugins/datasource/logging/components/LoggingQueryField.tsx
rename to public/app/plugins/datasource/loki/components/LokiQueryField.tsx
index 5667bd9a20d..005706bb8d1 100644
--- a/public/app/plugins/datasource/logging/components/LoggingQueryField.tsx
+++ b/public/app/plugins/datasource/loki/components/LokiQueryField.tsx
@@ -49,7 +49,7 @@ interface CascaderOption {
disabled?: boolean;
}
-interface LoggingQueryFieldProps {
+interface LokiQueryFieldProps {
datasource: any;
error?: string | JSX.Element;
hint?: any;
@@ -60,16 +60,16 @@ interface LoggingQueryFieldProps {
onQueryChange?: (value: DataQuery, override?: boolean) => void;
}
-interface LoggingQueryFieldState {
+interface LokiQueryFieldState {
logLabelOptions: any[];
syntaxLoaded: boolean;
}
-class LoggingQueryField extends React.PureComponent
{
+class LokiQueryField extends React.PureComponent {
plugins: any[];
languageProvider: any;
- constructor(props: LoggingQueryFieldProps, context) {
+ constructor(props: LokiQueryFieldProps, context) {
super(props, context);
if (props.datasource.languageProvider) {
@@ -208,8 +208,8 @@ class LoggingQueryField extends React.PureComponent
{error ? {error}
: null}
@@ -229,4 +229,4 @@ class LoggingQueryField extends React.PureComponent void;
}
-export default class LoggingStartPage extends PureComponent {
+export default class LokiStartPage extends PureComponent {
render() {
return (
-
+
);
}
diff --git a/public/app/plugins/datasource/loki/datasource.test.ts b/public/app/plugins/datasource/loki/datasource.test.ts
new file mode 100644
index 00000000000..ddb4d6ed549
--- /dev/null
+++ b/public/app/plugins/datasource/loki/datasource.test.ts
@@ -0,0 +1,98 @@
+import LokiDatasource from './datasource';
+
+describe('LokiDatasource', () => {
+ const instanceSettings = {
+ url: 'myloggingurl',
+ };
+
+ describe('when performing testDataSource', () => {
+ let ds;
+ let result;
+
+ describe('and call succeeds', () => {
+ beforeEach(async () => {
+ const backendSrv = {
+ async datasourceRequest() {
+ return Promise.resolve({
+ status: 200,
+ data: {
+ values: ['avalue'],
+ },
+ });
+ },
+ };
+ ds = new LokiDatasource(instanceSettings, backendSrv, {});
+ result = await ds.testDatasource();
+ });
+
+ it('should return successfully', () => {
+ expect(result.status).toBe('success');
+ });
+ });
+
+ describe('and call fails with 401 error', () => {
+ beforeEach(async () => {
+ const backendSrv = {
+ async datasourceRequest() {
+ return Promise.reject({
+ statusText: 'Unauthorized',
+ status: 401,
+ data: {
+ message: 'Unauthorized',
+ },
+ });
+ },
+ };
+ ds = new LokiDatasource(instanceSettings, backendSrv, {});
+ result = await ds.testDatasource();
+ });
+
+ it('should return error status and a detailed error message', () => {
+ expect(result.status).toEqual('error');
+ expect(result.message).toBe('Loki: Unauthorized. 401. Unauthorized');
+ });
+ });
+
+ describe('and call fails with 404 error', () => {
+ beforeEach(async () => {
+ const backendSrv = {
+ async datasourceRequest() {
+ return Promise.reject({
+ statusText: 'Not found',
+ status: 404,
+ data: '404 page not found',
+ });
+ },
+ };
+ ds = new LokiDatasource(instanceSettings, backendSrv, {});
+ result = await ds.testDatasource();
+ });
+
+ it('should return error status and a detailed error message', () => {
+ expect(result.status).toEqual('error');
+ expect(result.message).toBe('Loki: Not found. 404. 404 page not found');
+ });
+ });
+
+ describe('and call fails with 502 error', () => {
+ beforeEach(async () => {
+ const backendSrv = {
+ async datasourceRequest() {
+ return Promise.reject({
+ statusText: 'Bad Gateway',
+ status: 502,
+ data: '',
+ });
+ },
+ };
+ ds = new LokiDatasource(instanceSettings, backendSrv, {});
+ result = await ds.testDatasource();
+ });
+
+ it('should return error status and a detailed error message', () => {
+ expect(result.status).toEqual('error');
+ expect(result.message).toBe('Loki: Bad Gateway. 502');
+ });
+ });
+ });
+});
diff --git a/public/app/plugins/datasource/logging/datasource.ts b/public/app/plugins/datasource/loki/datasource.ts
similarity index 88%
rename from public/app/plugins/datasource/logging/datasource.ts
rename to public/app/plugins/datasource/loki/datasource.ts
index fca49a2f253..ebe1e226a75 100644
--- a/public/app/plugins/datasource/logging/datasource.ts
+++ b/public/app/plugins/datasource/loki/datasource.ts
@@ -27,7 +27,7 @@ function serializeParams(data: any) {
.join('&');
}
-export default class LoggingDatasource {
+export default class LokiDatasource {
languageProvider: LanguageProvider;
/** @ngInject */
@@ -94,7 +94,7 @@ export default class LoggingDatasource {
}
metadataRequest(url) {
- // HACK to get label values for {job=|}, will be replaced when implementing LoggingQueryField
+ // HACK to get label values for {job=|}, will be replaced when implementing LokiQueryField
const apiUrl = url.replace('v1', 'prom');
return this._request(apiUrl, { silent: true }).then(res => {
const data = { data: { data: res.data.values || [] } };
@@ -136,11 +136,27 @@ export default class LoggingDatasource {
}
return {
status: 'error',
- message: 'Data source connected, but no labels received. Verify that logging is configured properly.',
+ message: 'Data source connected, but no labels received. Verify that Loki is configured properly.',
};
})
.catch(err => {
- return { status: 'error', message: err.message };
+ let message = 'Loki: ';
+ if (err.statusText) {
+ message += err.statusText;
+ } else {
+ message += 'Cannot connect to Loki';
+ }
+
+ if (err.status) {
+ message += `. ${err.status}`;
+ }
+
+ if (err.data && err.data.message) {
+ message += `. ${err.data.message}`;
+ } else if (err.data) {
+ message += `. ${err.data}`;
+ }
+ return { status: 'error', message: message };
});
}
}
diff --git a/public/app/plugins/datasource/logging/img/grafana_icon.svg b/public/app/plugins/datasource/loki/img/grafana_icon.svg
similarity index 100%
rename from public/app/plugins/datasource/logging/img/grafana_icon.svg
rename to public/app/plugins/datasource/loki/img/grafana_icon.svg
diff --git a/public/app/plugins/datasource/loki/img/loki_icon.svg b/public/app/plugins/datasource/loki/img/loki_icon.svg
new file mode 100644
index 00000000000..50199611c06
--- /dev/null
+++ b/public/app/plugins/datasource/loki/img/loki_icon.svg
@@ -0,0 +1,216 @@
+
+
+
+
diff --git a/public/app/plugins/datasource/logging/language_provider.test.ts b/public/app/plugins/datasource/loki/language_provider.test.ts
similarity index 100%
rename from public/app/plugins/datasource/logging/language_provider.test.ts
rename to public/app/plugins/datasource/loki/language_provider.test.ts
diff --git a/public/app/plugins/datasource/logging/language_provider.ts b/public/app/plugins/datasource/loki/language_provider.ts
similarity index 99%
rename from public/app/plugins/datasource/logging/language_provider.ts
rename to public/app/plugins/datasource/loki/language_provider.ts
index a992084159a..dd3b4885ea5 100644
--- a/public/app/plugins/datasource/logging/language_provider.ts
+++ b/public/app/plugins/datasource/loki/language_provider.ts
@@ -36,7 +36,7 @@ export function addHistoryMetadata(item: CompletionItem, history: HistoryItem[])
};
}
-export default class LoggingLanguageProvider extends LanguageProvider {
+export default class LokiLanguageProvider extends LanguageProvider {
labelKeys?: { [index: string]: string[] }; // metric -> [labelKey,...]
labelValues?: { [index: string]: { [index: string]: string[] } }; // metric -> labelKey -> [labelValue,...]
logLabelOptions: any[];
diff --git a/public/app/plugins/datasource/loki/module.ts b/public/app/plugins/datasource/loki/module.ts
new file mode 100644
index 00000000000..41847855c2f
--- /dev/null
+++ b/public/app/plugins/datasource/loki/module.ts
@@ -0,0 +1,15 @@
+import Datasource from './datasource';
+
+import LokiStartPage from './components/LokiStartPage';
+import LokiQueryField from './components/LokiQueryField';
+
+export class LokiConfigCtrl {
+ static templateUrl = 'partials/config.html';
+}
+
+export {
+ Datasource,
+ LokiConfigCtrl as ConfigCtrl,
+ LokiQueryField as ExploreQueryField,
+ LokiStartPage as ExploreStartPage,
+};
diff --git a/public/app/plugins/datasource/logging/partials/config.html b/public/app/plugins/datasource/loki/partials/config.html
similarity index 100%
rename from public/app/plugins/datasource/logging/partials/config.html
rename to public/app/plugins/datasource/loki/partials/config.html
diff --git a/public/app/plugins/datasource/logging/plugin.json b/public/app/plugins/datasource/loki/plugin.json
similarity index 54%
rename from public/app/plugins/datasource/logging/plugin.json
rename to public/app/plugins/datasource/loki/plugin.json
index 9aa844f21cb..86b26a6a589 100644
--- a/public/app/plugins/datasource/logging/plugin.json
+++ b/public/app/plugins/datasource/loki/plugin.json
@@ -1,28 +1,28 @@
{
"type": "datasource",
- "name": "Grafana Logging",
- "id": "logging",
+ "name": "Loki",
+ "id": "loki",
"metrics": false,
"alerting": false,
"annotations": false,
"logs": true,
"explore": true,
"info": {
- "description": "Grafana Logging Data Source for Grafana",
+ "description": "Loki Logging Data Source for Grafana",
"author": {
"name": "Grafana Project",
"url": "https://grafana.com"
},
"logos": {
- "small": "img/grafana_icon.svg",
- "large": "img/grafana_icon.svg"
+ "small": "img/loki_icon.svg",
+ "large": "img/loki_icon.svg"
},
"links": [
{
- "name": "Grafana Logging",
- "url": "https://grafana.com/"
+ "name": "Loki",
+ "url": "https://github.com/grafana/loki"
}
],
"version": "5.3.0"
}
-}
\ No newline at end of file
+}
diff --git a/public/app/plugins/datasource/logging/query_utils.test.ts b/public/app/plugins/datasource/loki/query_utils.test.ts
similarity index 100%
rename from public/app/plugins/datasource/logging/query_utils.test.ts
rename to public/app/plugins/datasource/loki/query_utils.test.ts
diff --git a/public/app/plugins/datasource/logging/query_utils.ts b/public/app/plugins/datasource/loki/query_utils.ts
similarity index 100%
rename from public/app/plugins/datasource/logging/query_utils.ts
rename to public/app/plugins/datasource/loki/query_utils.ts
diff --git a/public/app/plugins/datasource/logging/result_transformer.test.ts b/public/app/plugins/datasource/loki/result_transformer.test.ts
similarity index 100%
rename from public/app/plugins/datasource/logging/result_transformer.test.ts
rename to public/app/plugins/datasource/loki/result_transformer.test.ts
diff --git a/public/app/plugins/datasource/logging/result_transformer.ts b/public/app/plugins/datasource/loki/result_transformer.ts
similarity index 100%
rename from public/app/plugins/datasource/logging/result_transformer.ts
rename to public/app/plugins/datasource/loki/result_transformer.ts
diff --git a/public/app/plugins/datasource/logging/syntax.ts b/public/app/plugins/datasource/loki/syntax.ts
similarity index 100%
rename from public/app/plugins/datasource/logging/syntax.ts
rename to public/app/plugins/datasource/loki/syntax.ts