Compare commits
31 Commits
v3.0-beta3
...
v3.0-beta4
| Author | SHA1 | Date | |
|---|---|---|---|
| f6d53df282 | |||
| e4374b1d56 | |||
| 7302ddaba5 | |||
| 7456514816 | |||
| d9ad4cf2fc | |||
| 8b4efbed06 | |||
| 10131aa8a0 | |||
| 23dc85c1de | |||
| 338c6b5a5c | |||
| c13ebce2f6 | |||
| b6ccd7ffbe | |||
| ad0794cc59 | |||
| 6961cb7440 | |||
| 9868edb138 | |||
| e822fad505 | |||
| 3ab5427019 | |||
| 7afb6fa3e3 | |||
| 29dff7ba1a | |||
| 329ee8d9f1 | |||
| f70e0003f8 | |||
| bb0eb29c82 | |||
| 47bba71d7f | |||
| 6b8921c8c5 | |||
| 7d09579e3f | |||
| e5c9a24c33 | |||
| e7626befc5 | |||
| 905d31442c | |||
| 963001ba1a | |||
| 92f5f8dced | |||
| 6a55ec6955 | |||
| e470786fb9 |
+8
-1
@@ -1,7 +1,14 @@
|
||||
# 3.0.0-beta3 (unreleased)
|
||||
# 3.0.0-beta4 (unreleased)
|
||||
|
||||
### Bug fixes
|
||||
* **Home dashboard**: Fixed issue with permission denied error on home dashboard, fixes [#4686](https://github.com/grafana/grafana/issues/4686)
|
||||
* **Templating**: Fixed issue templating variables that use regex extraction, fixes [#4672](https://github.com/grafana/grafana/issues/4672)
|
||||
|
||||
# 3.0.0-beta3 (2016-04-12)
|
||||
|
||||
### Enhancements
|
||||
* **InfluxDB**: Changed multi query encoding to work with InfluxDB 0.11 & 0.12, closes [#4533](https://github.com/grafana/grafana/issues/4533)
|
||||
* **Timepicker**: Add arrows and shortcuts for moving back and forth in current dashboard, closes [#119](https://github.com/grafana/grafana/issues/119)
|
||||
|
||||
### Bug fixes
|
||||
* **Postgres**: Fixed page render crash when using postgres, fixes [#4558](https://github.com/grafana/grafana/issues/4558)
|
||||
|
||||
@@ -73,7 +73,7 @@ func main() {
|
||||
grunt("test")
|
||||
|
||||
case "package":
|
||||
grunt("release", fmt.Sprintf("--pkgVer=%v-%v", linuxPackageVersion, linuxPackageIteration))
|
||||
// grunt("release", fmt.Sprintf("--pkgVer=%v-%v", linuxPackageVersion, linuxPackageIteration))
|
||||
createLinuxPackages()
|
||||
|
||||
case "pkg-rpm":
|
||||
|
||||
@@ -207,35 +207,6 @@ page_keywords: grafana, admin, http, api, documentation, datasource
|
||||
|
||||
{"message":"Data source deleted"}
|
||||
|
||||
## Available data source types
|
||||
|
||||
`GET /api/datasources/plugins`
|
||||
|
||||
**Example Request**:
|
||||
|
||||
GET /api/datasources/plugins HTTP/1.1
|
||||
Accept: application/json
|
||||
Content-Type: application/json
|
||||
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
|
||||
|
||||
**Example Response**:
|
||||
|
||||
HTTP/1.1 200
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"grafana":{
|
||||
"metrics":true,"module":"plugins/datasource/grafana/datasource",
|
||||
"name":"Grafana (for testing)",
|
||||
"partials":{
|
||||
"query":"app/plugins/datasource/grafana/partials/query.editor.html"
|
||||
},
|
||||
"pluginType":"datasource",
|
||||
"serviceName":"GrafanaDatasource",
|
||||
"type":"grafana"
|
||||
}
|
||||
}
|
||||
|
||||
## Data source proxy calls
|
||||
|
||||
`GET /api/datasources/proxy/:datasourceId/*`
|
||||
|
||||
@@ -11,7 +11,7 @@ page_keywords: grafana, installation, debian, ubuntu, guide
|
||||
Description | Download
|
||||
------------ | -------------
|
||||
Stable .deb for Debian-based Linux | [grafana_2.6.0_amd64.deb](https://grafanarel.s3.amazonaws.com/builds/grafana_2.6.0_amd64.deb)
|
||||
Beta .deb for Debian-based Linux | [grafana_3.0.0-beta31460467884_amd64.deb](https://grafanarel.s3.amazonaws.com/builds/grafana_3.0.0-beta31460467884_amd64.deb)
|
||||
Beta .deb for Debian-based Linux | [grafana_3.0.0-beta41460581169_amd64.deb](https://grafanarel.s3.amazonaws.com/builds/grafana_3.0.0-beta41460581169_amd64.deb)
|
||||
|
||||
## Install Stable
|
||||
|
||||
@@ -21,9 +21,9 @@ Beta .deb for Debian-based Linux | [grafana_3.0.0-beta31460467884_amd64.deb](h
|
||||
|
||||
## Install 3.0 Beta
|
||||
|
||||
$ wget https://grafanarel.s3.amazonaws.com/builds/grafana_3.0.0-beta31460467884_amd64.deb
|
||||
$ wget https://grafanarel.s3.amazonaws.com/builds/grafana_3.0.0-beta41460581169_amd64.deb
|
||||
$ sudo apt-get install -y adduser libfontconfig
|
||||
$ sudo dpkg -i grafana_3.0.0-beta31460467884_amd64.deb
|
||||
$ sudo dpkg -i grafana_3.0.0-beta41460581169_amd64.deb
|
||||
|
||||
## APT Repository
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ page_keywords: grafana, installation, centos, fedora, opensuse, redhat, guide
|
||||
Description | Download
|
||||
------------ | -------------
|
||||
Stable .RPM for CentOS / Fedora / OpenSuse / Redhat Linux | [grafana-2.6.0-1.x86_64.rpm](https://grafanarel.s3.amazonaws.com/builds/grafana-2.6.0-1.x86_64.rpm)
|
||||
Beta .RPM for CentOS / Fedor / OpenSuse / Redhat Linux | [grafana-3.0.0-beta31460467884.x86_64.rpm](https://grafanarel.s3.amazonaws.com/builds/grafana-3.0.0-beta31460467884§.x86_64.rpm)
|
||||
Beta .RPM for CentOS / Fedor / OpenSuse / Redhat Linux | [grafana-3.0.0-beta41460581169.x86_64.rpm](https://grafanarel.s3.amazonaws.com/builds/grafana-3.0.0-beta41460581169§.x86_64.rpm)
|
||||
|
||||
## Install Stable Release from package file
|
||||
|
||||
@@ -34,18 +34,18 @@ Or install manually using `rpm`.
|
||||
|
||||
You can install Grafana using Yum directly.
|
||||
|
||||
$ sudo yum install https://grafanarel.s3.amazonaws.com/builds/grafana-3.0.0-beta31460467884.x86_64.rpm
|
||||
$ sudo yum install https://grafanarel.s3.amazonaws.com/builds/grafana-3.0.0-beta41460581169.x86_64.rpm
|
||||
|
||||
Or install manually using `rpm`.
|
||||
|
||||
#### On CentOS / Fedora / Redhat:
|
||||
|
||||
$ sudo yum install initscripts fontconfig
|
||||
$ sudo rpm -Uvh grafana-3.0.0-beta31460467884.x86_64.rpm
|
||||
$ sudo rpm -Uvh grafana-3.0.0-beta41460581169.x86_64.rpm
|
||||
|
||||
#### On OpenSuse:
|
||||
|
||||
$ sudo rpm -i --nodeps grafana-3.0.0-beta31460467884.x86_64.rpm
|
||||
$ sudo rpm -i --nodeps grafana-3.0.0-beta41460581169.x86_64.rpm
|
||||
|
||||
|
||||
## Install via YUM Repository
|
||||
|
||||
+3
-2
@@ -24,9 +24,10 @@ module.exports = function(config) {
|
||||
logLevel: config.LOG_INFO,
|
||||
autoWatch: true,
|
||||
browsers: ['PhantomJS'],
|
||||
captureTimeout: 2000,
|
||||
captureTimeout: 20000,
|
||||
singleRun: true,
|
||||
autoWatchBatchDelay: 1000,
|
||||
autoWatchBatchDelay: 10000,
|
||||
browserNoActivityTimeout: 60000,
|
||||
|
||||
});
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"stable": "2.6.0",
|
||||
"testing": "3.0.0-beta2"
|
||||
"testing": "3.0.0-beta3"
|
||||
}
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
"company": "Coding Instinct AB"
|
||||
},
|
||||
"name": "grafana",
|
||||
"version": "3.0.0-beta3",
|
||||
"version": "3.0.0-beta4",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "http://github.com/grafana/grafana.git"
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
deb_ver=3.0.0-beta31460381868
|
||||
rpm_ver=3.0.0-beta31460381868
|
||||
deb_ver=3.0.0-beta41460581169
|
||||
rpm_ver=3.0.0-beta41460581169
|
||||
|
||||
#rpm_ver=3.0.0-1
|
||||
|
||||
#wget https://grafanarel.s3.amazonaws.com/builds/grafana_${deb_ver}_amd64.deb
|
||||
wget https://grafanarel.s3.amazonaws.com/builds/grafana_${deb_ver}_amd64.deb
|
||||
|
||||
#package_cloud push grafana/stable/debian/jessie grafana_${deb_ver}_amd64.deb
|
||||
#package_cloud push grafana/stable/debian/wheezy grafana_${deb_ver}_amd64.deb
|
||||
|
||||
#package_cloud push grafana/testing/debian/jessie grafana_${deb_ver}_amd64.deb
|
||||
#package_cloud push grafana/testing/debian/wheezy grafana_${deb_ver}_amd64.deb
|
||||
package_cloud push grafana/testing/debian/jessie grafana_${deb_ver}_amd64.deb
|
||||
package_cloud push grafana/testing/debian/wheezy grafana_${deb_ver}_amd64.deb
|
||||
|
||||
#wget https://grafanarel.s3.amazonaws.com/builds/grafana-${rpm_ver}.x86_64.rpm
|
||||
wget https://grafanarel.s3.amazonaws.com/builds/grafana-${rpm_ver}.x86_64.rpm
|
||||
|
||||
#package_cloud push grafana/testing/el/6 grafana-${rpm_ver}.x86_64.rpm
|
||||
#package_cloud push grafana/testing/el/7 grafana-${rpm_ver}.x86_64.rpm
|
||||
package_cloud push grafana/testing/el/6 grafana-${rpm_ver}.x86_64.rpm
|
||||
ackage_cloud push grafana/testing/el/7 grafana-${rpm_ver}.x86_64.rpm
|
||||
|
||||
# package_cloud push grafana/stable/el/7 grafana-${version}-1.x86_64.rpm
|
||||
# package_cloud push grafana/stable/el/6 grafana-${version}-1.x86_64.rpm
|
||||
|
||||
+3
-3
@@ -191,12 +191,12 @@ func Register(r *macaron.Macaron) {
|
||||
|
||||
r.Get("/datasources/id/:name", wrap(GetDataSourceIdByName), reqSignedIn)
|
||||
|
||||
r.Group("/plugins", func() {
|
||||
r.Get("/", wrap(GetPluginList))
|
||||
r.Get("/plugins", wrap(GetPluginList))
|
||||
r.Get("/plugins/:pluginId/settings", wrap(GetPluginSettingById))
|
||||
|
||||
r.Group("/plugins", func() {
|
||||
r.Get("/:pluginId/readme", wrap(GetPluginReadme))
|
||||
r.Get("/:pluginId/dashboards/", wrap(GetPluginDashboards))
|
||||
r.Get("/:pluginId/settings", wrap(GetPluginSettingById))
|
||||
r.Post("/:pluginId/settings", bind(m.UpdatePluginSettingCmd{}), wrap(UpdatePluginSetting))
|
||||
}, reqOrgAdmin)
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ import (
|
||||
"github.com/grafana/grafana/pkg/social"
|
||||
)
|
||||
|
||||
var version = "3.0.0-beta2"
|
||||
var version = "3.0.0-beta4"
|
||||
var commit = "NA"
|
||||
var buildstamp string
|
||||
var build_date string
|
||||
|
||||
@@ -111,7 +111,7 @@ func checkForUpdates() {
|
||||
|
||||
if strings.Contains(setting.BuildVersion, "-") {
|
||||
GrafanaLatestVersion = githubLatest.Testing
|
||||
GrafanaHasUpdate = strings.HasPrefix(setting.BuildVersion, githubLatest.Testing)
|
||||
GrafanaHasUpdate = !strings.HasPrefix(setting.BuildVersion, githubLatest.Testing)
|
||||
} else {
|
||||
GrafanaLatestVersion = githubLatest.Stable
|
||||
GrafanaHasUpdate = githubLatest.Stable != setting.BuildVersion
|
||||
|
||||
@@ -7,10 +7,6 @@ import coreModule from 'app/core/core_module';
|
||||
|
||||
var template = `
|
||||
<div class="graph-legend-popover">
|
||||
<a class="drop-popopver-close" ng-click="ctrl.close();" href="" ng-hide="ctrl.autoClose">
|
||||
<i class="fa fa-times-circle"></i>
|
||||
</a>
|
||||
|
||||
<div ng-show="ctrl.series" class="p-b-1">
|
||||
<label>Y Axis:</label>
|
||||
<button ng-click="ctrl.toggleAxis(yaxis);" class="btn btn-small"
|
||||
@@ -31,7 +27,6 @@ var template = `
|
||||
ng-style="{color:color}"
|
||||
ng-click="ctrl.colorSelected(color);"> </i>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
`;
|
||||
|
||||
@@ -51,21 +46,17 @@ export class ColorPickerCtrl {
|
||||
toggleAxis(yaxis) {
|
||||
this.$scope.toggleAxis();
|
||||
|
||||
if (!this.$scope.autoClose) {
|
||||
if (this.$scope.autoClose) {
|
||||
this.$scope.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
colorSelected(color) {
|
||||
this.$scope.colorSelected(color);
|
||||
if (!this.$scope.autoClose) {
|
||||
if (this.$scope.autoClose) {
|
||||
this.$scope.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
close() {
|
||||
this.$scope.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
export function colorPicker() {
|
||||
|
||||
@@ -42,6 +42,7 @@ export default class TimeSeries {
|
||||
fillBelowTo: any;
|
||||
transform: any;
|
||||
flotpairs: any;
|
||||
unit: any;
|
||||
|
||||
constructor(opts) {
|
||||
this.datapoints = opts.datapoints;
|
||||
@@ -52,6 +53,7 @@ export default class TimeSeries {
|
||||
this.valueFormater = kbn.valueFormats.none;
|
||||
this.stats = {};
|
||||
this.legend = true;
|
||||
this.unit = opts.unit;
|
||||
}
|
||||
|
||||
applySeriesOverrides(overrides) {
|
||||
|
||||
@@ -45,6 +45,7 @@ function (angular, _, $) {
|
||||
|
||||
$scope.reset = function() {
|
||||
$scope.currentAnnotation = angular.copy(annotationDefaults);
|
||||
$scope.currentAnnotation.datasource = $scope.datasources[0].name;
|
||||
$scope.currentIsNew = true;
|
||||
$scope.datasourceChanged();
|
||||
};
|
||||
|
||||
@@ -60,6 +60,14 @@ function(angular, $) {
|
||||
scope.appEvent('zoom-out', evt);
|
||||
}, { inputDisabled: true });
|
||||
|
||||
keyboardManager.bind('left', function(evt) {
|
||||
scope.appEvent('shift-time-backward', evt);
|
||||
}, { inputDisabled: true });
|
||||
|
||||
keyboardManager.bind('right', function(evt) {
|
||||
scope.appEvent('shift-time-forward', evt);
|
||||
}, { inputDisabled: true });
|
||||
|
||||
keyboardManager.bind('ctrl+e', function(evt) {
|
||||
scope.appEvent('export-dashboard', evt);
|
||||
}, { inputDisabled: true });
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
<ul class="nav gf-timepicker-nav">
|
||||
|
||||
<li class="dashnav-zoom-out" style="padding-top: 2px">
|
||||
<a class='small' ng-click='ctrl.zoom(2)'>
|
||||
Zoom Out
|
||||
</a>
|
||||
<li class="dashnav-move-timeframe gf-timepicker-time-control" bs-tooltip="'Shift time backward <br> (left arrow key)'" data-placement="bottom">
|
||||
<a ng-click='ctrl.move(-1)'><i class="fa fa-chevron-left"></i></a>
|
||||
</li>
|
||||
<li class="dashnav-zoom-out gf-timepicker-time-control" bs-tooltip="'Time range zoom in <br> CTRL+Z'" data-placement="bottom">
|
||||
<a ng-click='ctrl.zoom(2)'>Zoom Out</a></li>
|
||||
</li>
|
||||
<li class="dashnav-move-timeframe gf-timepicker-time-control" bs-tooltip="'Shift time forward <br> (right arrow key)'" data-placement="bottom">
|
||||
<a ng-click='ctrl.move(1)'><i class="fa fa-chevron-right"></i></a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
|
||||
@@ -30,6 +30,8 @@ export class TimePickerCtrl {
|
||||
$scope.ctrl = this;
|
||||
|
||||
$rootScope.onAppEvent('zoom-out', () => this.zoom(2), $scope);
|
||||
$rootScope.onAppEvent('shift-time-forward', () => this.move(1), $scope);
|
||||
$rootScope.onAppEvent('shift-time-backward', () => this.move(-1), $scope);
|
||||
$rootScope.onAppEvent('refresh', () => this.init(), $scope);
|
||||
$rootScope.onAppEvent('dash-editor-hidden', () => this.isOpen = false, $scope);
|
||||
|
||||
@@ -87,6 +89,30 @@ export class TimePickerCtrl {
|
||||
this.timeSrv.setTime({from: moment.utc(from), to: moment.utc(to) });
|
||||
}
|
||||
|
||||
move(direction) {
|
||||
var range = this.timeSrv.timeRange();
|
||||
|
||||
var timespan = (range.to.valueOf() - range.from.valueOf());
|
||||
var to, from;
|
||||
if (direction === -1) {
|
||||
to = range.to.valueOf() - timespan;
|
||||
from = range.from.valueOf() - timespan;
|
||||
} else if (direction === 1) {
|
||||
to = range.to.valueOf() + timespan;
|
||||
from = range.from.valueOf() + timespan;
|
||||
if (to > Date.now() && range.to < Date.now()) {
|
||||
to = Date.now();
|
||||
from = range.from.valueOf();
|
||||
}
|
||||
} else {
|
||||
to = range.to.valueOf();
|
||||
from = range.from.valueOf();
|
||||
}
|
||||
|
||||
this.timeSrv.setTime({from: moment.utc(from), to: moment.utc(to) });
|
||||
|
||||
}
|
||||
|
||||
openDropdown() {
|
||||
this.init();
|
||||
this.isOpen = true;
|
||||
|
||||
@@ -102,7 +102,6 @@ function(angular, _) {
|
||||
value.current = null;
|
||||
value.options = null;
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
p.hasChanges = function() {
|
||||
|
||||
@@ -16,6 +16,8 @@ var defaults = {
|
||||
jsonData: {}
|
||||
};
|
||||
|
||||
var datasourceCreated = false;
|
||||
|
||||
export class DataSourceEditCtrl {
|
||||
isNew: boolean;
|
||||
datasources: any[];
|
||||
@@ -66,6 +68,11 @@ export class DataSourceEditCtrl {
|
||||
this.backendSrv.get('/api/datasources/' + id).then(ds => {
|
||||
this.isNew = false;
|
||||
this.current = ds;
|
||||
|
||||
if (datasourceCreated) {
|
||||
datasourceCreated = false;
|
||||
this.testDatasource();
|
||||
}
|
||||
return this.typeChanged();
|
||||
});
|
||||
}
|
||||
@@ -123,14 +130,14 @@ export class DataSourceEditCtrl {
|
||||
if (this.current.id) {
|
||||
return this.backendSrv.put('/api/datasources/' + this.current.id, this.current).then(() => {
|
||||
this.updateFrontendSettings().then(() => {
|
||||
if (test) {
|
||||
this.testDatasource();
|
||||
}
|
||||
this.testDatasource();
|
||||
});
|
||||
});
|
||||
} else {
|
||||
return this.backendSrv.post('/api/datasources', this.current).then(result => {
|
||||
this.updateFrontendSettings();
|
||||
|
||||
datasourceCreated = true;
|
||||
this.$location.path('datasources/edit/' + result.id);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
<div ng-if="ctrl.tabIndex === 0" class="tab-content">
|
||||
|
||||
<form name="ctrl.editForm">
|
||||
<form name="ctrl.editForm" ng-if="ctrl.current">
|
||||
<div class="gf-form-group">
|
||||
<div class="gf-form-inline">
|
||||
<div class="gf-form">
|
||||
@@ -34,7 +34,7 @@
|
||||
</div>
|
||||
<info-popover offset="0px -130px">
|
||||
The name is used when you select the data source in panels.
|
||||
The <code>Default</code> data source is preselected in new
|
||||
The <em>Default</em> data source is preselected in new
|
||||
panels.
|
||||
</info-popover>
|
||||
<gf-form-switch class="gf-form" label="Default" checked="ctrl.current.isDefault" switch-class="max-width-6"></gf-form-switch>
|
||||
@@ -55,7 +55,6 @@
|
||||
|
||||
<div ng-if="ctrl.testing" style="margin-top: 25px">
|
||||
<h5 ng-show="!ctrl.testing.done">Testing.... <i class="fa fa-spiner fa-spin"></i></h5>
|
||||
<h5 ng-show="ctrl.testing.done">Test results</h5>
|
||||
<div class="alert-{{ctrl.testing.status}} alert">
|
||||
<div class="alert-title">{{ctrl.testing.title}}</div>
|
||||
<div ng-bind='ctrl.testing.message'></div>
|
||||
@@ -64,10 +63,7 @@
|
||||
|
||||
<div class="gf-form-button-row">
|
||||
<button type="submit" class="btn btn-success" ng-show="ctrl.isNew" ng-click="ctrl.saveChanges()">Add</button>
|
||||
<button type="submit" class="btn btn-success" ng-show="!ctrl.isNew" ng-click="ctrl.saveChanges()">Save</button>
|
||||
<button type="submit" class="btn btn-secondary" ng-show="!ctrl.isNew" ng-click="ctrl.saveChanges(true)">
|
||||
Test Connection
|
||||
</button>
|
||||
<button type="submit" class="btn btn-success" ng-show="!ctrl.isNew" ng-click="ctrl.saveChanges()">Save & Test</button>
|
||||
<button type="submit" class="btn btn-danger" ng-show="!ctrl.isNew" ng-click="ctrl.delete()">
|
||||
Delete
|
||||
</button>
|
||||
|
||||
@@ -281,6 +281,7 @@ function (angular, _, kbn) {
|
||||
if (!matches) { continue; }
|
||||
if (matches.length > 1) {
|
||||
value = matches[1];
|
||||
text = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -28,14 +28,22 @@
|
||||
<td><span class="label label-info">R</span></td>
|
||||
<td>Refresh (Fetches new data and rerenders panels)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="label label-info">left arrow key</span></td>
|
||||
<td>Shift time backward</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="label label-info">right arrow key</span></td>
|
||||
<td>Shift time forward</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="label label-info">CTRL+S</span></td>
|
||||
<td>Save dashboard</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="label label-info">CTRL+E</span></td>
|
||||
<td>Export dashboard</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="label label-info">CTRL+E</span></td>
|
||||
<td>Export dashboard</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="label label-info">CTRL+H</span></td>
|
||||
<td>Hide row controls</td>
|
||||
@@ -44,10 +52,10 @@
|
||||
<td><span class="label label-info">CTRL+Z</span></td>
|
||||
<td>Zoom out</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="label label-info">CTRL+I</span></td>
|
||||
<td>Quick snapshot</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="label label-info">CTRL+I</span></td>
|
||||
<td>Quick snapshot</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><span class="label label-info">CTRL+O</span></td>
|
||||
<td>Enable/Disable shared graph crosshair</td>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<cloudwatch-query-parameter target="ctrl.annotation" datasource="ctrl.datasource"></cloudwatch-query-parameter>
|
||||
<div class="editor-row">
|
||||
|
||||
<div class="editor-row" style="padding: 2rem 0">
|
||||
<div class="section">
|
||||
<h5>Prefix matching</h5>
|
||||
<div class="editor-option">
|
||||
|
||||
@@ -157,7 +157,7 @@ export function PrometheusDatasource(instanceSettings, $q, backendSrv, templateS
|
||||
|
||||
var interpolated;
|
||||
try {
|
||||
interpolated = templateSrv.replace(expr);
|
||||
interpolated = templateSrv.replace(expr, {}, interpolateQueryExpr);
|
||||
} catch (err) {
|
||||
return $q.reject(err);
|
||||
}
|
||||
|
||||
@@ -49,7 +49,6 @@ function (angular, _, $) {
|
||||
position: 'bottom center',
|
||||
template: '<gf-color-picker></gf-color-picker>',
|
||||
model: {
|
||||
autoClose: true,
|
||||
series: series,
|
||||
toggleAxis: function() {
|
||||
ctrl.toggleAxis(series);
|
||||
|
||||
@@ -202,6 +202,7 @@ class GraphCtrl extends MetricsPanelCtrl {
|
||||
datapoints: datapoints,
|
||||
alias: alias,
|
||||
color: color,
|
||||
unit: seriesData.unit,
|
||||
});
|
||||
|
||||
if (datapoints && datapoints.length > 0) {
|
||||
@@ -212,13 +213,9 @@ class GraphCtrl extends MetricsPanelCtrl {
|
||||
}
|
||||
|
||||
this.datapointsCount += datapoints.length;
|
||||
|
||||
this.panel.tooltip.msResolution = this.panel.tooltip.msResolution || series.isMsResolutionNeeded();
|
||||
}
|
||||
|
||||
if (seriesData.unit) {
|
||||
this.panel.yaxes[series.yaxis-1].format = seriesData.unit;
|
||||
}
|
||||
|
||||
return series;
|
||||
}
|
||||
@@ -228,6 +225,10 @@ class GraphCtrl extends MetricsPanelCtrl {
|
||||
|
||||
for (let series of this.seriesList) {
|
||||
series.applySeriesOverrides(this.panel.seriesOverrides);
|
||||
|
||||
if (series.unit) {
|
||||
this.panel.yaxes[series.yaxis-1].format = series.unit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -59,6 +59,7 @@ define([
|
||||
openOn: 'click',
|
||||
template: '<gf-color-picker></gf-color-picker>',
|
||||
model: {
|
||||
autoClose: true,
|
||||
colorSelected: $scope.colorSelected,
|
||||
},
|
||||
onClose: function() {
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<span class="pluginlist-title">{{plugin.name}}</span>
|
||||
<span class="pluginlist-version">v{{plugin.info.version}}</span>
|
||||
</a>
|
||||
<a class="pluginlist-message pluginlist-message--update" ng-show="plugin.hasUpdate" ng-click="ctrl.updateAvailable(plugin, $event)" bs-tooltip="plugin.latestVersion">
|
||||
<a class="pluginlist-message pluginlist-message--update" ng-show="plugin.hasUpdate" ng-click="ctrl.updateAvailable(plugin, $event)" bs-tooltip="'New version: ' + plugin.latestVersion">
|
||||
Update available!
|
||||
</a>
|
||||
<span class="pluginlist-message pluginlist-message--enable" ng-show="!plugin.enabled && !plugin.hasUpdate">
|
||||
@@ -22,7 +22,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="pluginlist-item" ng-show="category.list.length === 0">
|
||||
<a class="pluginlist-link pluginlist-link-{{plugin.state}}" href="http://grafana/net/plugins/">
|
||||
<a class="pluginlist-link pluginlist-link-{{plugin.state}}" href="http://grafana.net/plugins/">
|
||||
<span class="pluginlist-none-installed">No additional panels installed. <span class="pluginlist-emphasis">Browse Grafana.net</span></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
max-width: 120px;
|
||||
}
|
||||
.dashnav-zoom-out,
|
||||
.dashnav-move-timeframe,
|
||||
.dashnav-action-icons {
|
||||
display: none;
|
||||
}
|
||||
@@ -40,6 +41,11 @@
|
||||
.gf-timepicker-nav-btn {
|
||||
max-width: 120px;
|
||||
}
|
||||
|
||||
.dashnav-move-timeframe {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.panel-in-fullscreen {
|
||||
.dashnav-action-icons {
|
||||
display: none;
|
||||
@@ -60,6 +66,9 @@
|
||||
.dashnav-zoom-out {
|
||||
display: block;
|
||||
}
|
||||
.dashnav-move-timeframe {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(xl) {
|
||||
|
||||
@@ -27,7 +27,7 @@ $white: #fff;
|
||||
// -------------------------
|
||||
$blue: #33B5E5;
|
||||
$blue-dark: #005f81;
|
||||
$green: #669900;
|
||||
$green: #609000;
|
||||
$red: #CC3900;
|
||||
$yellow: #ECBB13;
|
||||
$pink: #FF4444;
|
||||
@@ -252,12 +252,12 @@ $popover-help-color: $text-color;
|
||||
|
||||
// Tooltips and popovers
|
||||
// -------------------------
|
||||
$tooltipColor: $text-color;
|
||||
$tooltipBackground: $dark-5;
|
||||
$tooltipColor: $popover-help-color;
|
||||
$tooltipBackground: $popover-help-bg;
|
||||
$tooltipArrowWidth: 5px;
|
||||
$tooltipArrowColor: $tooltipBackground;
|
||||
$tooltipLinkColor: $link-color;
|
||||
$graph-tooltip-bg: $dark-5;
|
||||
$graph-tooltip-bg: $dark-4;
|
||||
|
||||
// images
|
||||
$checkboxImageUrl: '../img/checkbox.png';
|
||||
|
||||
@@ -277,8 +277,8 @@ $popover-help-color: $gray-6;
|
||||
|
||||
// Tooltips and popovers
|
||||
// -------------------------
|
||||
$tooltipColor: $text-color;
|
||||
$tooltipBackground: $gray-5;
|
||||
$tooltipColor: $popover-help-color;
|
||||
$tooltipBackground: $popover-help-bg;
|
||||
$tooltipArrowWidth: 5px;
|
||||
$tooltipArrowColor: $tooltipBackground;
|
||||
$tooltipLinkColor: $link-color;
|
||||
|
||||
@@ -7,6 +7,7 @@ $attachmentOffset: 0%;
|
||||
$easing: cubic-bezier(0, 0, 0.265, 1.00);
|
||||
|
||||
.drop-element {
|
||||
z-index: 10000;
|
||||
position: absolute;
|
||||
display: none;
|
||||
opacity: 0;
|
||||
|
||||
@@ -115,3 +115,15 @@
|
||||
@extend .fa;
|
||||
@extend .fa-chevron-left;
|
||||
}
|
||||
|
||||
.gf-timepicker-time-control {
|
||||
font-size: $font-size-sm;
|
||||
a {
|
||||
padding: 18px 7px 13px !important;
|
||||
}
|
||||
}
|
||||
|
||||
.dashnav-move-timeframe {
|
||||
position: relative;
|
||||
top: 1px;
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
background-color: $tooltipBackground;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
// Arrows
|
||||
|
||||
@@ -96,7 +96,8 @@
|
||||
.add-row-panel-hint,
|
||||
.dashnav-refresh-action,
|
||||
.dashnav-zoom-out,
|
||||
.dashnav-action-icons {
|
||||
.dashnav-action-icons,
|
||||
.dashnav-move-timeframe {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
border-bottom: 1px solid $gray-1;
|
||||
|
||||
.login-divider-text {
|
||||
background-color: $dark-3;
|
||||
background-color: $panel-bg;
|
||||
color: $gray-2;
|
||||
padding: 0 10px;
|
||||
}
|
||||
@@ -192,4 +192,3 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user