From 39c236a92e50a55c504bd163c821257b4de83b91 Mon Sep 17 00:00:00 2001 From: Brandon Riden Date: Mon, 5 Mar 2018 12:16:54 -0500 Subject: [PATCH] Bug fixes and adding organization option to dashboards --- .../provider/grafana_dashboard/grafana.rb | 32 ++++++++------- .../provider/grafana_datasource/grafana.rb | 39 ++++++++++--------- .../provider/grafana_organization/grafana.rb | 2 +- lib/puppet/type/grafana_dashboard.rb | 4 +- lib/puppet/type/grafana_datasource.rb | 4 +- 5 files changed, 42 insertions(+), 39 deletions(-) diff --git a/lib/puppet/provider/grafana_dashboard/grafana.rb b/lib/puppet/provider/grafana_dashboard/grafana.rb index 0d788acd1..e5b879bc3 100644 --- a/lib/puppet/provider/grafana_dashboard/grafana.rb +++ b/lib/puppet/provider/grafana_dashboard/grafana.rb @@ -16,6 +16,10 @@ def organization resource[:organization] end + def grafana_api_path + resource[:grafana_api_path] + end + def fetch_organizations response = send_request('GET', format('%s/orgs', resource[:grafana_api_path])) if response.code != '200' @@ -26,7 +30,7 @@ def fetch_organizations fetch_organizations = JSON.parse(response.body) fetch_organizations.map { |x| x['id'] }.map do |id| - response = send_request('GET', format('%s/orgs/%s', resource[:grafana_api_path], id)) + response = send_request 'GET', format('%s/orgs/%s', resource[:grafana_api_path], id) if response.code != '200' raise format('Failed to retrieve organization %d (HTTP response: %s/%s)', id, response.code, response.body) end @@ -45,9 +49,14 @@ def fetch_organizations def fetch_organization unless @fetch_organization - @fetch_organization = fetch_organizations.find { |x| x[:name] == resource[:organization] } + @fetch_organization = + if resource[:organization].is_a?(Numeric) || resource[:organization].match(%r{^[0-9]*$}) + fetch_organizations.find { |x| x[:id] == resource[:organization] } + else + fetch_organizations.find { |x| x[:name] == resource[:organization] } + end end - @organization + @fetch_organization end # Return the list of dashboards @@ -82,17 +91,10 @@ def find_dashboard end def save_dashboard(dashboard) - if fetch_organization.nil? - response = send_request('POST', format('%s/user/using/1', resource[:grafana_api_path])) - if response.code != '200' - raise format('Failed to switch to org 1 (HTTP response: %s/%s)', response.code, response.body) - end - else - organization_id = fetch_organization[:id] - response = send_request 'POST', format('%s/user/using/%s', resource[:grafana_api_path], organization_id) - if response.code != '200' - raise format('Failed to switch to org %s (HTTP response: %s/%s)', organization_id, response.code, response.body) - end + # change organizations + response = send_request 'POST', format('%s/user/using/%s', resource[:grafana_api_path], fetch_organization[:id]) + unless response.code == '200' + raise format('Failed to switch to org %s (HTTP response: %s/%s)', fetch_organization[:id], response.code, response.body) end data = { @@ -103,7 +105,7 @@ def save_dashboard(dashboard) } response = send_request('POST', format('%s/dashboards/db', resource[:grafana_api_path]), data) - return unless response.code != '200' + return unless (response.code != '200') && (response.code != '412') raise format('Fail to save dashboard %s (HTTP response: %s/%s', resource[:name], response.code, response.body) end diff --git a/lib/puppet/provider/grafana_datasource/grafana.rb b/lib/puppet/provider/grafana_datasource/grafana.rb index 748136579..90375c087 100644 --- a/lib/puppet/provider/grafana_datasource/grafana.rb +++ b/lib/puppet/provider/grafana_datasource/grafana.rb @@ -1,6 +1,8 @@ # Copyright 2015 Mirantis, Inc. # require 'json' +require 'pry' +require 'pry-byebug' require File.expand_path(File.join(File.dirname(__FILE__), '..', 'grafana')) @@ -13,6 +15,10 @@ def organization resource[:organization] end + def grafana_api_path + resource[:grafana_api_path] + end + def fetch_organizations response = send_request('GET', format('%s/orgs', resource[:grafana_api_path])) if response.code != '200' @@ -21,9 +27,8 @@ def fetch_organizations begin fetch_organizations = JSON.parse(response.body) - fetch_organizations.map { |x| x['id'] }.map do |id| - response = send_request('GET', format('%s/orgs/%s', resource[:grafana_api_path], id)) + response = send_request 'GET', format('%s/orgs/%s', resource[:grafana_api_path], id) if response.code != '200' raise format('Failed to retrieve organization %d (HTTP response: %s/%s)', id, response.code, response.body) end @@ -42,9 +47,13 @@ def fetch_organizations def fetch_organization unless @fetch_organization - @fetch_organization = fetch_organizations.find { |x| x[:name] == resource[:organization] } + @fetch_organization = if resource[:organization].is_a?(Numeric) || resource[:organization].match(%r{^[0-9]*$}) + fetch_organizations.find { |x| x[:id] == resource[:organization] } + else + fetch_organizations.find { |x| x[:name] == resource[:organization] } + end end - @organization + @fetch_organization end def datasources @@ -57,7 +66,7 @@ def datasources datasources = JSON.parse(response.body) datasources.map { |x| x['id'] }.map do |id| - response = send_request('GET', format('%s/datasources/%s', resource[:grafana_api_path], id)) + response = send_request 'GET', format('%s/datasources/%s', resource[:grafana_api_path], id) if response.code != '200' raise format('Failed to retrieve datasource %d (HTTP response: %s/%s)', id, response.code, response.body) end @@ -206,17 +215,10 @@ def json_data=(value) end def save_datasource - if fetch_organization.nil? - response = send_request('POST', format('%s/user/using/1', resource[:grafana_api_path])) - if response.code != '200' - raise format('Failed to switch to org 1 (HTTP response: %s/%s)', response.code, response.body) - end - else - organization_id = fetch_organization[:id] - response = send_request 'POST', format('%s/user/using/%s', resource[:grafana_api_path], organization_id) - if response.code != '200' - raise format('Failed to switch to org %s (HTTP response: %s/%s)', organization_id, response.code, response.body) - end + # change organizations + response = send_request 'POST', format('%s/user/using/%s', resource[:grafana_api_path], fetch_organization[:id]) + unless response.code == '200' + raise format('Failed to switch to org %s (HTTP response: %s/%s)', fetch_organization[:id], response.code, response.body) end data = { @@ -239,9 +241,8 @@ def save_datasource response = send_request('POST', format('%s/datasources', resource[:grafana_api_path]), data) else data[:id] = datasource[:id] - response = send_request('PUT', format('%s/datasources/%s', resource[:grafana_api_path], datasource[:id]), data) + response = send_request 'PUT', format('%s/datasources/%s', resource[:grafana_api_path], datasource[:id]), data end - if response.code != '200' raise format('Failed to create save %s (HTTP response: %s/%s)', resource[:name], response.code, response.body) end @@ -249,7 +250,7 @@ def save_datasource end def delete_datasource - response = send_request('DELETE', format('%s/datasources/%s', resource[:grafana_api_path], datasource[:id])) + response = send_request 'DELETE', format('%s/datasources/%s', resource[:grafana_api_path], datasource[:id]) if response.code != '200' raise format('Failed to delete datasource %s (HTTP response: %s/%s', resource[:name], response.code, response.body) diff --git a/lib/puppet/provider/grafana_organization/grafana.rb b/lib/puppet/provider/grafana_organization/grafana.rb index 7d9fc11d6..c0fe8e926 100644 --- a/lib/puppet/provider/grafana_organization/grafana.rb +++ b/lib/puppet/provider/grafana_organization/grafana.rb @@ -80,7 +80,7 @@ def save_organization end def delete_organization - response = send_request('DELETE', format('%s/orgs/%s', resource[:grafana_api_path], organization[:id])) + response = send_request 'DELETE', format('%s/orgs/%s', resource[:grafana_api_path], organization[:id]) if response.code != '200' raise format('Failed to delete organization %s (HTTP response: %s/%s)', resource[:name], response.code, response.body) diff --git a/lib/puppet/type/grafana_dashboard.rb b/lib/puppet/type/grafana_dashboard.rb index bdaabd225..a0a6cb3bc 100644 --- a/lib/puppet/type/grafana_dashboard.rb +++ b/lib/puppet/type/grafana_dashboard.rb @@ -66,9 +66,9 @@ def should_to_s(value) end end - newproperty(:organization) do + newparam(:organization) do desc 'The organization name to create the datasource on' - defaultto '1' + defaultto 1 end # rubocop:disable Style/SignalException diff --git a/lib/puppet/type/grafana_datasource.rb b/lib/puppet/type/grafana_datasource.rb index 8e7acf79b..a360f803b 100644 --- a/lib/puppet/type/grafana_datasource.rb +++ b/lib/puppet/type/grafana_datasource.rb @@ -54,9 +54,9 @@ newvalues(:influxdb, :elasticsearch, :graphite, :kairosdb, :opentsdb, :prometheus) end - newproperty(:organization) do + newparam(:organization) do desc 'The organization name to create the datasource on' - defaultto '1' + defaultto 1 end newproperty(:user) do