diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d4ee020dce..a61e0d66c65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ * **Graph**: Fixed issue with unneeded scrollbar in legend for Firefox, fixes [#4760](https://github.com/grafana/grafana/issues/4760) * **Table panel**: Fixed issue table panel formating string array properties, fixes [#4791](https://github.com/grafana/grafana/issues/4791) * **grafana-cli**: Improve error message when failing to install plugins due to corrupt response, fixes [#4651](https://github.com/grafana/grafana/issues/4651) +* **Singlestat**: Fixes prefix an postfix for gauges, fixes [#4812](https://github.com/grafana/grafana/issues/4812) +* **Singlestat**: Fixes auto-refresh on change for some options, fixes [#4809](https://github.com/grafana/grafana/issues/4809) # 3.0.0-beta5 (2016-04-15) diff --git a/Makefile b/Makefile new file mode 100644 index 00000000000..6cccaa7f64b --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +all: deps build + +deps: + go run build.go setup + godep restore + npm install + +build: + go run build.go build + npm run build + +test: + godep go test -v ./pkg/... + npm test + +run: + ./bin/grafana-server diff --git a/README.md b/README.md index 931055349cf..d538ba78e1e 100644 --- a/README.md +++ b/README.md @@ -103,8 +103,7 @@ npm (v2.5.0) and grunt (v0.4.5). Run the following: ```bash npm install -npm install -g grunt-cli -grunt +npm run build ``` ### Recompile backend on source change @@ -145,4 +144,3 @@ please [sign the CLA](http://docs.grafana.org/project/cla/) Grafana is distributed under Apache 2.0 License. Work in progress Grafana 2.0 (with included Grafana backend) - diff --git a/build.go b/build.go index 93b9e6db087..0965a405e70 100644 --- a/build.go +++ b/build.go @@ -306,7 +306,7 @@ func ChangeWorkingDir(dir string) { } func grunt(params ...string) { - runPrint("./node_modules/grunt-cli/bin/grunt", params...) + runPrint("./node_modules/.bin/grunt", params...) } func setup() { diff --git a/circle.yml b/circle.yml index 22dab8ab893..02f9f91e103 100644 --- a/circle.yml +++ b/circle.yml @@ -25,12 +25,12 @@ test: # Go test - godep go test -v ./pkg/... # js tests - - ./node_modules/grunt-cli/bin/grunt test + - npm test - npm run coveralls deployment: master: branch: master owner: grafana - commands: + commands: - ./trigger_grafana_packer.sh ${TRIGGER_GRAFANA_PACKER_CIRCLECI_TOKEN} diff --git a/package.json b/package.json index e71a9049dde..e314476f999 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "npm": "2.14.x" }, "scripts": { + "build": "grunt", "test": "grunt test", "coveralls": "grunt karma:coveralls && rm -rf ./coverage" }, diff --git a/pkg/api/dtos/plugins.go b/pkg/api/dtos/plugins.go index fbdf8d4e0ea..7d46cc9d348 100644 --- a/pkg/api/dtos/plugins.go +++ b/pkg/api/dtos/plugins.go @@ -48,6 +48,6 @@ func (slice PluginList) Swap(i, j int) { type ImportDashboardCommand struct { PluginId string `json:"pluginId"` Path string `json:"path"` - Reinstall bool `json:"reinstall"` + Overwrite bool `json:"overwrite"` Inputs []plugins.ImportDashboardInput `json:"inputs"` } diff --git a/pkg/api/plugins.go b/pkg/api/plugins.go index 6446f7fee33..ad81d438978 100644 --- a/pkg/api/plugins.go +++ b/pkg/api/plugins.go @@ -156,11 +156,12 @@ func GetPluginReadme(c *middleware.Context) Response { func ImportDashboard(c *middleware.Context, apiCmd dtos.ImportDashboardCommand) Response { cmd := plugins.ImportDashboardCommand{ - OrgId: c.OrgId, - UserId: c.UserId, - PluginId: apiCmd.PluginId, - Path: apiCmd.Path, - Inputs: apiCmd.Inputs, + OrgId: c.OrgId, + UserId: c.UserId, + PluginId: apiCmd.PluginId, + Path: apiCmd.Path, + Inputs: apiCmd.Inputs, + Overwrite: apiCmd.Overwrite, } if err := bus.Dispatch(&cmd); err != nil { diff --git a/pkg/plugins/dashboard_importer.go b/pkg/plugins/dashboard_importer.go index 834bfabd048..4d2757b9a0e 100644 --- a/pkg/plugins/dashboard_importer.go +++ b/pkg/plugins/dashboard_importer.go @@ -11,12 +11,13 @@ import ( ) type ImportDashboardCommand struct { - Path string `json:"string"` - Inputs []ImportDashboardInput `json:"inputs"` + Path string + Inputs []ImportDashboardInput + Overwrite bool - OrgId int64 `json:"-"` - UserId int64 `json:"-"` - PluginId string `json:"-"` + OrgId int64 + UserId int64 + PluginId string Result *PluginDashboardInfoDTO } @@ -67,6 +68,7 @@ func ImportDashboard(cmd *ImportDashboardCommand) error { Dashboard: generatedDash, OrgId: cmd.OrgId, UserId: cmd.UserId, + Overwrite: cmd.Overwrite, } if err := bus.Dispatch(&saveCmd); err != nil { diff --git a/public/app/core/directives/plugin_component.ts b/public/app/core/directives/plugin_component.ts index 6708c0315f3..6f693a13d68 100644 --- a/public/app/core/directives/plugin_component.ts +++ b/public/app/core/directives/plugin_component.ts @@ -211,6 +211,9 @@ function pluginDirectiveLoader($compile, datasourceSrv, $rootScope, $q, $http, $ // let a binding digest cycle complete before adding to dom setTimeout(function() { elem.append(child); + scope.$apply(function() { + scope.$broadcast('refresh'); + }); }); } diff --git a/public/app/core/utils/emitter.ts b/public/app/core/utils/emitter.ts index 5f3f61cca2e..4cdc19e7b20 100644 --- a/public/app/core/utils/emitter.ts +++ b/public/app/core/utils/emitter.ts @@ -23,7 +23,7 @@ export class Emitter { this.emitter.on(name, handler); if (scope) { - scope.$on('$destroy', function() { + scope.$on('$destroy', () => { this.emitter.off(name, handler); }); } diff --git a/public/app/features/panel/panel_ctrl.ts b/public/app/features/panel/panel_ctrl.ts index 48746e56ff4..76d348d9b1f 100644 --- a/public/app/features/panel/panel_ctrl.ts +++ b/public/app/features/panel/panel_ctrl.ts @@ -44,18 +44,15 @@ export class PanelCtrl { this.pluginName = plugin.name; } - $scope.$on("refresh", () => this.refresh()); - $scope.$on("render", () => this.render()); + $scope.$on("refresh", this.refresh.bind(this)); + $scope.$on("render", this.render.bind(this)); $scope.$on("$destroy", () => this.events.emit('panel-teardown')); } init() { this.calculatePanelHeight(); - this.publishAppEvent('panel-initialized', {scope: this.$scope}); this.events.emit('panel-initialized'); - - this.refresh(); } renderingCompleted() { diff --git a/public/app/features/plugins/ds_edit_ctrl.ts b/public/app/features/plugins/ds_edit_ctrl.ts index e7e8014ed10..a3e78c33a15 100644 --- a/public/app/features/plugins/ds_edit_ctrl.ts +++ b/public/app/features/plugins/ds_edit_ctrl.ts @@ -98,9 +98,7 @@ export class DataSourceEditCtrl { this.datasourceSrv.get(this.current.name).then(datasource => { if (!datasource.testDatasource) { - this.testing.message = 'Data source does not support test connection feature.'; - this.testing.status = 'warning'; - this.testing.title = 'Unknown'; + delete this.testing; return; } @@ -118,7 +116,9 @@ export class DataSourceEditCtrl { } }); }).finally(() => { - this.testing.done = true; + if (this.testing) { + this.testing.done = true; + } }); } diff --git a/public/app/features/plugins/import_list/import_list.html b/public/app/features/plugins/import_list/import_list.html index acb6654d520..86534f1adc7 100644 --- a/public/app/features/plugins/import_list/import_list.html +++ b/public/app/features/plugins/import_list/import_list.html @@ -15,16 +15,16 @@ v{{dash.revision}} - - - Imported v{{dash.installedRevision}} + +  (Imported v{{dash.installedRevision}}) +