API: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
No edit summary |
||
Line 2: | Line 2: | ||
{{Maintainer|Cyril Rohr}} | {{Maintainer|Cyril Rohr}} | ||
== | == Current State == | ||
An early prototype of the upcoming API is available at: http://wsdev3.irisa.fr. Not stable, only a subset of sites are included (grenoble, bordeaux, rennes, sophia). | |||
Enhancements are planned on a regular basis. Backwards-compatibility is not assured. Servers might be down at any time. Please refer to this page to get the main entry-point of the API as it may change. | |||
The API is totally distributed. That is, the data is pulled from local datasets (OAR2) without the need for a centralized database. | |||
== Available Resources == | |||
; GET /sites [html | json] | |||
list of sites (cached for 1 hour) | |||
; GET /nodes [html | json] | |||
list of all nodes (cached for 90 seconds) | |||
; GET /sites/{site_uid} [html | json] | |||
site's details | |||
; GET /sites/{site_uid}/nodes [html | json] | |||
list of site's nodes (cached for 90 seconds) | |||
; GET /sites/{site_uid}/clusters [html | json] | |||
list of site's clusters (cached for 1 hour) | |||
== | == Getting Started == | ||
=== Ruby client === | |||
Put this code in a g5k-client.rb file: | |||
require 'rubygems' | |||
require 'rest_client' # sudo gem install rest-client | |||
require 'json' # sudo gem install json | |||
api = RestClient::Resource.new('http://wsdev3.irisa.fr') | |||
begin | |||
# get the list of sites | |||
response = api['/sites'].get(:accept => 'application/json') # or api['/sites.json'].get | |||
sites = JSON.parse response | |||
sites.each do |site| | |||
puts "------------------ #{site['uid']} ------------------" | |||
puts "Clusters = [#{site['clusters'].map{|cluster| cluster['uid']}.join(", ")}]" | |||
# get the site's nodes. we use the URI contained in the response to locate and get new information. | |||
nodes = JSON.parse api["#{site['uri']}/nodes"].get(:accept => 'application/json') | |||
puts "Dead nodes = [#{nodes.select{|node| node['state'] == 'dead'}.collect{|node| node['uid']}.join(", ")}]" | |||
end | |||
rescue RestClient::ResourceNotFound | |||
puts 'Resource not found.' | |||
rescue RestClient::RequestTimeout | |||
puts 'Timeout.' | |||
rescue RestClient::Unauthorized | |||
puts 'Unauthorized.' | |||
rescue RestClient::RequestFailed | |||
puts 'Request failed.' | |||
rescue RestClient::ServerBrokeConnection | |||
puts 'Connection broken.' | |||
rescue Exception => e | |||
puts e.message | |||
end | |||
Run with: | |||
ruby g5k-client.rb | |||
== Planned == | |||
* choice: do we settle on using a REST architectural style ? | |||
* XML format | |||
* experiment submission |
Revision as of 13:49, 19 November 2008
Current State
An early prototype of the upcoming API is available at: http://wsdev3.irisa.fr. Not stable, only a subset of sites are included (grenoble, bordeaux, rennes, sophia).
Enhancements are planned on a regular basis. Backwards-compatibility is not assured. Servers might be down at any time. Please refer to this page to get the main entry-point of the API as it may change.
The API is totally distributed. That is, the data is pulled from local datasets (OAR2) without the need for a centralized database.
Available Resources
- GET /sites [html | json]
list of sites (cached for 1 hour)
- GET /nodes [html | json]
list of all nodes (cached for 90 seconds)
- GET /sites/{site_uid} [html | json]
site's details
- GET /sites/{site_uid}/nodes [html | json]
list of site's nodes (cached for 90 seconds)
- GET /sites/{site_uid}/clusters [html | json]
list of site's clusters (cached for 1 hour)
Getting Started
Ruby client
Put this code in a g5k-client.rb file:
require 'rubygems' require 'rest_client' # sudo gem install rest-client require 'json' # sudo gem install json
api = RestClient::Resource.new('http://wsdev3.irisa.fr') begin # get the list of sites response = api['/sites'].get(:accept => 'application/json') # or api['/sites.json'].get sites = JSON.parse response sites.each do |site| puts "------------------ #{site['uid']} ------------------" puts "Clusters = [#{site['clusters'].map{|cluster| cluster['uid']}.join(", ")}]" # get the site's nodes. we use the URI contained in the response to locate and get new information. nodes = JSON.parse api["#{site['uri']}/nodes"].get(:accept => 'application/json') puts "Dead nodes = [#{nodes.select{|node| node['state'] == 'dead'}.collect{|node| node['uid']}.join(", ")}]" end rescue RestClient::ResourceNotFound puts 'Resource not found.' rescue RestClient::RequestTimeout puts 'Timeout.' rescue RestClient::Unauthorized puts 'Unauthorized.' rescue RestClient::RequestFailed puts 'Request failed.' rescue RestClient::ServerBrokeConnection puts 'Connection broken.' rescue Exception => e puts e.message end
Run with:
ruby g5k-client.rb
Planned
- choice: do we settle on using a REST architectural style ?
- XML format
- experiment submission