Skip to content
This repository was archived by the owner on Aug 12, 2024. It is now read-only.

Commit b282faf

Browse files
committed
add functions
- dashboard_all_versions() - dashboard_version() - restore_dashboard() - compare_dashboard_version()
1 parent b50e7f3 commit b282faf

File tree

2 files changed

+146
-6
lines changed

2 files changed

+146
-6
lines changed

lib/grafana/dashboard_versions.rb

Lines changed: 63 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,13 @@ def dashboard_all_versions( params )
1919
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
2020
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
2121

22-
v, mv = version.values
23-
return { 'status' => 404, 'message' => format( 'only Grafana 5 has folder support. you use version %s', v) } if(mv != 5)
22+
# v, mv = version.values
23+
# return { 'status' => 404, 'message' => format( 'only Grafana 5 has dashboard version support. you use version %s', v) } if(mv != 5)
2424

2525
dashboard_id = validate( params, required: true , var: 'dashboard_id', type: Integer )
2626
start = validate( params, required: false, var: 'start' , type: Integer )
2727
limit = validate( params, required: false, var: 'limit' , type: Integer )
2828

29-
3029
api = []
3130
api << format( 'start=%s', start ) unless( start.nil? )
3231
api << format( 'limit=%s', limit ) unless( limit.nil? )
@@ -41,24 +40,85 @@ def dashboard_all_versions( params )
4140
# GET /api/dashboards/id/:dashboardId/versions/:id
4241
def dashboard_version( params )
4342

43+
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
44+
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
4445

46+
v, mv = version.values
47+
return { 'status' => 404, 'message' => format( 'only Grafana 5 has folder support. you use version %s', v) } if(mv != 5)
48+
49+
dashboard_id = validate( params, required: true, var: 'dashboard_id', type: Integer )
50+
version = validate( params, required: true, var: 'version' , type: Integer )
51+
52+
endpoint = format('/api/dashboards/id/%s/versions/%s', dashboard_id, version)
53+
54+
r = get(endpoint)
55+
56+
r['message'] = format('no dashboard version \'%s\' for dashboard \'%s\' found', version, dashboard_id) if(r.dig('status') == 404)
57+
r['message'] = format('no dashboard version \'%s\' for dashboard \'%s\' found', version, dashboard_id) if(r.dig('status') == 500)
58+
r
4559
end
4660

4761
# Restore dashboard
4862
# http://docs.grafana.org/http_api/dashboard_versions/#restore-dashboard
4963
# POST /api/dashboards/id/:dashboardId/restore
5064
def restore_dashboard( params )
5165

66+
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
67+
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
5268

69+
# v, mv = version.values
70+
# return { 'status' => 404, 'message' => format( 'only Grafana 5 has folder support. you use version %s', v) } if(mv != 5)
71+
72+
dashboard_id = validate( params, required: true, var: 'dashboard_id', type: Integer )
73+
version = validate( params, required: true, var: 'version' , type: Integer )
74+
75+
endpoint = format('/api/dashboards/id/%s/restore', dashboard_id)
76+
77+
payload = {
78+
version: version
79+
}
80+
81+
post(endpoint, payload.to_json)
5382
end
5483

5584
# Compare dashboard versions
5685
# http://docs.grafana.org/http_api/dashboard_versions/#compare-dashboard-versions
5786
# POST /api/dashboards/calculate-diff
5887
def compare_dashboard_version( params )
5988

89+
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
90+
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
91+
92+
base = validate( params, required: true , var: 'base' , type: Hash )
93+
new = validate( params, required: true , var: 'new' , type: Hash )
94+
diff_type = validate( params, required: false, var: 'diff_type', type: String ) || 'json'
95+
96+
base_dashboard_id = validate( base, required: true , var: 'dashboard_id', type: Integer )
97+
base_dashboard_version = validate( base, required: true , var: 'version' , type: Integer )
98+
new_dashboard_id = validate( new , required: true , var: 'dashboard_id', type: Integer )
99+
new_dashboard_version = validate( new , required: true , var: 'version' , type: Integer )
100+
101+
valid_diff_type = %w[json basic]
102+
103+
r = validate_hash(diff_type, valid_diff_type)
104+
105+
return r unless(r == true)
106+
107+
payload = {
108+
base: {
109+
dashboardId: base_dashboard_id,
110+
version: base_dashboard_version
111+
},
112+
new: {
113+
dashboardId: new_dashboard_id,
114+
version: new_dashboard_version
115+
},
116+
diffType: diff_type
117+
}
60118

119+
endpoint = '/api/dashboards/calculate-diff'
61120

121+
post(endpoint, payload.to_json)
62122
end
63123

64124
end

spec/grafana_spec.rb

Lines changed: 83 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1421,7 +1421,46 @@
14211421
end
14221422

14231423

1424-
it 'Gets all existing permissions for a existing dashboard' do
1424+
it 'get all dashboard versions' do
1425+
search = { query: 'QA Graphite Carbon Metrics' }
1426+
r = @g.search_dashboards( search )
1427+
expect(r).to be_a(Hash)
1428+
status = r.dig('status')
1429+
expect(status).to be == 200
1430+
message = r.dig('message')
1431+
expect(message).to be_a(Array)
1432+
id = message.first.dig('id')
1433+
1434+
r = @g.dashboard_all_versions(dashboard_id: id)
1435+
expect(r).to be_a(Hash)
1436+
status = r.dig('status')
1437+
expect(status).to be == 200
1438+
end
1439+
1440+
it 'get all dashboard versions of dashboard \'999\' (must be fail)' do
1441+
r = @g.dashboard_all_versions(dashboard_id: 999)
1442+
expect(r).to be_a(Hash)
1443+
status = r.dig('status')
1444+
expect(status).to be == 404
1445+
end
1446+
1447+
it 'get version 1 of dashboard' do
1448+
search = { query: 'QA Graphite Carbon Metrics' }
1449+
r = @g.search_dashboards( search )
1450+
expect(r).to be_a(Hash)
1451+
status = r.dig('status')
1452+
expect(status).to be == 200
1453+
message = r.dig('message')
1454+
expect(message).to be_a(Array)
1455+
id = message.first.dig('id')
1456+
1457+
r = @g.dashboard_version(dashboard_id: id, version: 1)
1458+
expect(r).to be_a(Hash)
1459+
status = r.dig('status')
1460+
expect(status).to be == 200
1461+
end
1462+
1463+
it 'get version 15 of dashboard (must be fail)' do
14251464
search = { query: 'QA Graphite Carbon Metrics' }
14261465
r = @g.search_dashboards( search )
14271466
expect(r).to be_a(Hash)
@@ -1431,15 +1470,56 @@
14311470
expect(message).to be_a(Array)
14321471
id = message.first.dig('id')
14331472

1434-
r = @g.dashboard_all_versions(id)
1435-
puts r
1473+
r = @g.dashboard_version(dashboard_id: id, version: 15)
1474+
expect(r).to be_a(Hash)
1475+
status = r.dig('status')
1476+
expect(status).to be == 500
1477+
end
1478+
1479+
1480+
it 'restore dashboard version 2' do
1481+
search = { query: 'QA Graphite Carbon Metrics' }
1482+
r = @g.search_dashboards( search )
14361483
expect(r).to be_a(Hash)
14371484
status = r.dig('status')
14381485
expect(status).to be == 200
1486+
message = r.dig('message')
1487+
expect(message).to be_a(Array)
1488+
id = message.first.dig('id')
1489+
1490+
r = @g.restore_dashboard(dashboard_id: id, version: 2)
1491+
expect(r).to be_a(Hash)
1492+
status = r.dig('status')
1493+
expect(status).to be_a(Integer)
14391494
end
14401495

14411496

1497+
it 'compare dashboard versions' do
1498+
search = { query: 'QA Graphite Carbon Metrics' }
1499+
r = @g.search_dashboards( search )
1500+
expect(r).to be_a(Hash)
1501+
status = r.dig('status')
1502+
expect(status).to be == 200
1503+
message = r.dig('message')
1504+
expect(message).to be_a(Array)
1505+
id = message.first.dig('id')
14421506

1507+
params = {
1508+
'base': {
1509+
'dashboard_id' => id,
1510+
'version' => 1
1511+
},
1512+
'new': {
1513+
'dashboard_id' => id,
1514+
'version' => 2
1515+
}
1516+
}
1517+
1518+
r = @g.compare_dashboard_version(params)
1519+
expect(r).to be_a(Hash)
1520+
status = r.dig('status')
1521+
expect(status).to be_a(Integer)
1522+
end
14431523

14441524

14451525

0 commit comments

Comments
 (0)