restfully 0.6.3 → 0.7.0.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. data/README.md +166 -0
  2. data/Rakefile +35 -35
  3. data/bin/restfully +68 -10
  4. data/lib/restfully.rb +8 -14
  5. data/lib/restfully/collection.rb +70 -90
  6. data/lib/restfully/error.rb +2 -0
  7. data/lib/restfully/http.rb +3 -3
  8. data/lib/restfully/http/error.rb +1 -20
  9. data/lib/restfully/http/helper.rb +49 -0
  10. data/lib/restfully/http/request.rb +60 -24
  11. data/lib/restfully/http/response.rb +55 -24
  12. data/lib/restfully/link.rb +32 -24
  13. data/lib/restfully/media_type.rb +70 -0
  14. data/lib/restfully/media_type/abstract_media_type.rb +162 -0
  15. data/lib/restfully/media_type/application_json.rb +21 -0
  16. data/lib/restfully/media_type/application_vnd_bonfire_xml.rb +177 -0
  17. data/lib/restfully/media_type/application_x_www_form_urlencoded.rb +33 -0
  18. data/lib/restfully/media_type/grid5000.rb +67 -0
  19. data/lib/restfully/media_type/wildcard.rb +27 -0
  20. data/lib/restfully/rack.rb +1 -0
  21. data/lib/restfully/rack/basic_auth.rb +26 -0
  22. data/lib/restfully/resource.rb +134 -197
  23. data/lib/restfully/session.rb +127 -70
  24. data/lib/restfully/version.rb +3 -0
  25. data/spec/fixtures/bonfire-collection-with-fragments.xml +6 -0
  26. data/spec/fixtures/bonfire-compute-existing.xml +43 -0
  27. data/spec/fixtures/bonfire-empty-collection.xml +4 -0
  28. data/spec/fixtures/bonfire-experiment-collection.xml +51 -0
  29. data/spec/fixtures/bonfire-network-collection.xml +35 -0
  30. data/spec/fixtures/bonfire-network-existing.xml +6 -0
  31. data/spec/fixtures/bonfire-root.xml +5 -0
  32. data/spec/fixtures/grid5000-rennes-jobs.json +988 -146
  33. data/spec/fixtures/grid5000-rennes.json +63 -0
  34. data/spec/restfully/collection_spec.rb +87 -0
  35. data/spec/restfully/http/helper_spec.rb +18 -0
  36. data/spec/restfully/http/request_spec.rb +97 -0
  37. data/spec/restfully/http/response_spec.rb +53 -0
  38. data/spec/restfully/link_spec.rb +80 -0
  39. data/spec/restfully/media_type/application_vnd_bonfire_xml_spec.rb +153 -0
  40. data/spec/restfully/media_type_spec.rb +117 -0
  41. data/spec/restfully/resource_spec.rb +109 -0
  42. data/spec/restfully/session_spec.rb +229 -0
  43. data/spec/spec_helper.rb +10 -9
  44. metadata +162 -83
  45. data/.document +0 -5
  46. data/CHANGELOG +0 -62
  47. data/README.rdoc +0 -146
  48. data/TODO.rdoc +0 -3
  49. data/VERSION +0 -1
  50. data/examples/grid5000.rb +0 -33
  51. data/examples/scratch.rb +0 -37
  52. data/lib/restfully/extensions.rb +0 -34
  53. data/lib/restfully/http/adapters/abstract_adapter.rb +0 -29
  54. data/lib/restfully/http/adapters/patron_adapter.rb +0 -16
  55. data/lib/restfully/http/adapters/rest_client_adapter.rb +0 -75
  56. data/lib/restfully/http/headers.rb +0 -20
  57. data/lib/restfully/parsing.rb +0 -66
  58. data/lib/restfully/special_array.rb +0 -5
  59. data/lib/restfully/special_hash.rb +0 -5
  60. data/restfully.gemspec +0 -114
  61. data/spec/collection_spec.rb +0 -120
  62. data/spec/fixtures/configuration_file.yml +0 -4
  63. data/spec/fixtures/grid5000-sites.json +0 -540
  64. data/spec/http/error_spec.rb +0 -18
  65. data/spec/http/headers_spec.rb +0 -17
  66. data/spec/http/request_spec.rb +0 -49
  67. data/spec/http/response_spec.rb +0 -19
  68. data/spec/http/rest_client_adapter_spec.rb +0 -35
  69. data/spec/link_spec.rb +0 -61
  70. data/spec/parsing_spec.rb +0 -40
  71. data/spec/resource_spec.rb +0 -320
  72. data/spec/restfully_spec.rb +0 -16
  73. data/spec/session_spec.rb +0 -171
@@ -1,96 +1,153 @@
1
- require 'uri'
2
1
  require 'logger'
3
- require 'restfully/parsing'
2
+ require 'uri'
3
+ require 'restclient'
4
+ require 'restclient/components'
5
+ require 'rack/cache'
6
+ require 'addressable/uri'
4
7
 
5
8
  module Restfully
6
- class NullLogger
7
- def method_missing(method, *args)
8
- nil
9
- end
10
- end
11
9
  class Session
12
- include Parsing, HTTP::Headers
13
- attr_reader :base_uri, :logger, :connection, :default_headers
14
-
10
+
11
+
12
+ attr_accessor :logger, :uri
13
+ attr_reader :config
14
+ attr_writer :default_headers
15
+
15
16
  def initialize(options = {})
16
- options = options.symbolize_keys
17
- if (config_filename = options.delete(:configuration_file)) && File.exists?(File.expand_path(config_filename))
18
- config = YAML.load_file(File.expand_path(config_filename)).symbolize_keys
19
- options.merge!(config)
17
+ @config = options.symbolize_keys
18
+ @logger = @config.delete(:logger) || Logger.new(STDERR)
19
+
20
+ @uri = @config.delete(:uri)
21
+ if @uri.nil? || @uri.empty?
22
+ raise ArgumentError, "You must pass a :uri option."
23
+ else
24
+ @uri = Addressable::URI.parse(@uri)
20
25
  end
21
- @base_uri = URI.parse(options.delete(:base_uri) || "http://localhost:8888") rescue nil
22
- raise ArgumentError.new("#{@base_uri} is not a valid URI") if @base_uri.nil? || @base_uri.scheme !~ /^http/i
23
- @logger = options.delete(:logger) || NullLogger.new
24
- @logger.level = options.delete(:verbose) ? Logger::DEBUG : @logger.level
25
- user_default_headers = sanitize_http_headers(options.delete(:default_headers) || {})
26
- @default_headers = {'User-Agent' => "Restfully/#{Restfully::VERSION}", 'Accept' => 'application/json'}.merge(user_default_headers)
27
- @connection = Restfully.adapter.new(base_uri.to_s, options.merge(:logger => logger))
28
- @root = Resource.new(@base_uri, self)
29
- yield @root.load, self if block_given?
30
- end
31
-
32
- # returns the root resource
26
+
27
+ default_headers.merge!(@config.delete(:default_headers) || {})
28
+
29
+ disable RestClient::Rack::Compatibility
30
+ authenticate(@config)
31
+ setup_cache
32
+
33
+ yield root, self if block_given?
34
+ end
35
+
36
+ def enable(rack, *args)
37
+ logger.info "Enabling #{rack.inspect}."
38
+ RestClient.enable rack, *args
39
+ end
40
+
41
+ def disable(rack, *args)
42
+ logger.info "Disabling #{rack.inspect}."
43
+ RestClient.disable rack, *args
44
+ end
45
+
46
+ def middleware
47
+ RestClient.components.map{|(rack, args)| rack}
48
+ end
49
+
50
+ def authenticate(options = {})
51
+ if options[:username]
52
+ enable(
53
+ Restfully::Rack::BasicAuth,
54
+ options[:username],
55
+ options[:password]
56
+ )
57
+ end
58
+ end
59
+
60
+ # Builds the complete URI, based on the given path and the session's uri
61
+ def uri_to(path)
62
+ Addressable::URI.join(uri.to_s, path.to_s)
63
+ end
64
+
65
+ def default_headers
66
+ @default_headers ||= {
67
+ 'Accept' => '*/*',
68
+ 'Accept-Encoding' => 'gzip, deflate'
69
+ }
70
+ end
71
+
33
72
  def root
34
- @root.load
73
+ get(uri.path).load
35
74
  end
36
-
37
- # returns an HTTP::Response object or raise a Restfully::HTTP::Error
75
+
76
+ # Returns an HTTP::Response object or raise a Restfully::HTTP::Error
38
77
  def head(path, options = {})
39
- options = options.symbolize_keys
40
- transmit :head, HTTP::Request.new(uri_for(path), :headers => options.delete(:headers), :query => options.delete(:query))
78
+ transmit :head, path, options
41
79
  end
42
-
43
- # returns an HTTP::Response object or raise a Restfully::HTTP::Error
80
+
81
+ # Returns an HTTP::Response object or raise a Restfully::HTTP::Error
44
82
  def get(path, options = {})
45
- options = options.symbolize_keys
46
- transmit :get, HTTP::Request.new(uri_for(path), :headers => options.delete(:headers), :query => options.delete(:query))
83
+ transmit :get, path, options
47
84
  end
48
-
49
- # returns an HTTP::Response object or raise a Restfully::HTTP::Error
85
+
86
+ # Returns an HTTP::Response object or raise a Restfully::HTTP::Error
50
87
  def post(path, body, options = {})
51
- options = options.symbolize_keys
52
- uri = uri_for(path)
53
- transmit :post, HTTP::Request.new(uri_for(path), :body => body, :headers => options.delete(:headers), :query => options.delete(:query))
88
+ options[:body] = body
89
+ transmit :post, path, options
54
90
  end
55
-
56
- # returns an HTTP::Response object or raise a Restfully::HTTP::Error
91
+
92
+ # Returns an HTTP::Response object or raise a Restfully::HTTP::Error
57
93
  def put(path, body, options = {})
58
- options = options.symbolize_keys
59
- uri = uri_for(path)
60
- transmit :put, HTTP::Request.new(uri_for(path), :body => body, :headers => options.delete(:headers), :query => options.delete(:query))
94
+ options[:body] = body
95
+ transmit :put, path, options
61
96
  end
62
-
63
- # returns an HTTP::Response object or raise a Restfully::HTTP::Error
97
+
98
+ # Returns an HTTP::Response object or raise a Restfully::HTTP::Error
64
99
  def delete(path, options = {})
65
- options = options.symbolize_keys
66
- transmit :delete, HTTP::Request.new(uri_for(path), :headers => options.delete(:headers), :query => options.delete(:query))
100
+ transmit :delete, path, options
67
101
  end
68
-
69
- # builds the complete URI, based on the given path and the session's base_uri
70
- def uri_for(path)
71
- URI.join(base_uri.to_s, path.to_s)
102
+
103
+ # Build and send the corresponding HTTP request, then process the response
104
+ def transmit(method, path, options)
105
+ request = HTTP::Request.new(self, method, path, options)
106
+
107
+ response = execute(request)
108
+
109
+ process(response, request)
72
110
  end
73
-
74
- protected
75
- def transmit(method, request)
76
- default_headers.each do |header, value|
77
- request.headers[header] ||= value
78
- end
79
- response = connection.send(method.to_sym, request)
80
- response = deal_with_eventual_errors(response, request)
111
+
112
+ def execute(request)
113
+ resource = RestClient::Resource.new(
114
+ request.uri.to_s,
115
+ :headers => request.head
116
+ )
117
+
118
+ code, head, body = resource.send(request.method, request.body || {})
119
+
120
+ response = Restfully::HTTP::Response.new(self, code, head, body)
81
121
  end
82
-
83
- def deal_with_eventual_errors(response, request)
84
- case response.status
122
+
123
+ # Process a Restfully::HTTP::Response.
124
+ def process(response, request)
125
+ case code=response.code
126
+ when 200
127
+ Resource.new(self, response, request).build
128
+ when 201,202
129
+ get response.head['Location'], :head => request.head
130
+ when 204
131
+ true
85
132
  when 400..499
86
- # should retry on 406 with another Accept header
87
- raise Restfully::HTTP::ClientError, response
88
- when 500..599
89
- raise Restfully::HTTP::ServerError, response
133
+ msg = "Encountered error #{code} on #{request.method.upcase} #{request.uri}"
134
+ msg += " --- #{response.body[0..200]}" unless response.body.empty?
135
+ raise HTTP::ClientError, msg
136
+ when 500..599
137
+ # when 503, sleep 5, request.retry
138
+ msg = "Encountered error #{code} on #{request.method.upcase} #{request.uri}"
139
+ msg += " --- #{response.body[0..200]}" unless response.body.empty?
140
+ raise HTTP::ServerError, msg
90
141
  else
91
- response
142
+ raise Error, "Restfully does not handle code #{code.inspect}."
92
143
  end
93
144
  end
94
145
 
146
+ protected
147
+ def setup_cache
148
+ enable ::Rack::Cache, :verbose => (logger.level < Logger::INFO)
149
+ end
150
+
95
151
  end
96
- end
152
+
153
+ end
@@ -0,0 +1,3 @@
1
+ module Restfully
2
+ VERSION = "0.7.0.pre"
3
+ end
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <collection xmlns="http://api.bonfire-project.eu/doc/schemas/occi">
3
+ <items>
4
+ <network href="/locations/de-hlrs/networks/29" name="Private LAN"/>
5
+ </items>
6
+ </collection>
@@ -0,0 +1,43 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <compute xmlns="http://api.bonfire-project.eu/doc/schemas/occi" href="/locations/uk-epcc/computes/1">
3
+ <name>Compute name</name>
4
+ <description>Compute description</description>
5
+ <instance_type>small</instance_type>
6
+ <state>ACTIVE</state>
7
+
8
+ <disk>
9
+ <storage href="/locations/fr-inria/storages/1" />
10
+ <type>OS</type>
11
+ <target>sda</target>
12
+ </disk>
13
+ <disk>
14
+ <storage href="/locations/fr-inria/storages/2" />
15
+ <type>CDROM</type>
16
+ <target>sdc</target>
17
+ </disk>
18
+
19
+ <nic>
20
+ <network href="/locations/fr-inria/networks/1" />
21
+ <device>eth0</device>
22
+ <ip>123.123.123.123</ip>
23
+ <mac>AA:AA:AA:AA</mac>
24
+ </nic>
25
+ <nic>
26
+ <network href="/locations/fr-inria/networks/2" />
27
+ <device>eth1</device>
28
+ <ip>123.123.124.2</ip>
29
+ <mac>BB:BB:BB:BB</mac>
30
+ </nic>
31
+
32
+ <context>
33
+ <monitoring_ip>123.123.123.2</monitoring_ip>
34
+ <bonfire_credentials>crohr:p4ssw0rd</bonfire_credentials>
35
+ </context>
36
+
37
+ <!-- VWall specific: maybe this could be included in <context> element? -->
38
+ <startup href="file:///path/to/startup-script/sh" />
39
+
40
+ <link rel="location"
41
+ href="/locations/fr-inria"
42
+ type="application/vnd.bonfire+xml" />
43
+ </compute>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <collection xmlns="http://api.bonfire-project.eu/doc/schemas/occi">
3
+ <items/>
4
+ </collection>
@@ -0,0 +1,51 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <collection xmlns="http://api.bonfire-project.eu/doc/schemas/occi" href="/experiments">
3
+ <items offset="0" total="3">
4
+ <experiment href="/experiments/1">
5
+ <id>1</id>
6
+ <description>Experiment description</description>
7
+ <name>My Experiment</name>
8
+ <walltime>2011-04-26T16:15:21Z</walltime>
9
+ <user_id>crohr</user_id>
10
+ <status>canceled</status>
11
+ <networks>
12
+ </networks>
13
+ <computes>
14
+ </computes>
15
+ <storages>
16
+ </storages>
17
+ <link rel="parent" href="/"/>
18
+ </experiment>
19
+ <experiment href="/experiments/2">
20
+ <id>2</id>
21
+ <description>Experiment description</description>
22
+ <name>My Experiment</name>
23
+ <walltime>2011-04-26T16:16:01Z</walltime>
24
+ <user_id>crohr</user_id>
25
+ <status>canceled</status>
26
+ <networks>
27
+ </networks>
28
+ <computes>
29
+ </computes>
30
+ <storages>
31
+ </storages>
32
+ <link rel="parent" href="/"/>
33
+ </experiment>
34
+ <experiment href="/experiments/3">
35
+ <id>3</id>
36
+ <description>Experiment description</description>
37
+ <name>My Experiment</name>
38
+ <walltime>2011-04-26T19:10:16Z</walltime>
39
+ <user_id>crohr</user_id>
40
+ <status>canceled</status>
41
+ <networks>
42
+ </networks>
43
+ <computes>
44
+ </computes>
45
+ <storages>
46
+ </storages>
47
+ <link rel="parent" href="/"/>
48
+ </experiment>
49
+ </items>
50
+ <link href="/" rel="parent" type="application/vnd.bonfire+xml"/>
51
+ </collection>
@@ -0,0 +1,35 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <collection xmlns="http://api.bonfire-project.eu/doc/schemas/occi" href="/locations/fr-inria/networks">
3
+ <items offset="0" total="2">
4
+ <network href="/locations/fr-inria/networks/1">
5
+ <address>10.0.0.1</address>
6
+ <size>C</size>
7
+
8
+ <!-- <cidr>10.0.0.1/24</cidr> -->
9
+
10
+ <visibility>public</visibility>
11
+ <name>Network1</name>
12
+ <description>Network1 description</description>
13
+
14
+ <link rel="location"
15
+ href="/locations/fr-inria" />
16
+ </network>
17
+ <network href="/locations/fr-inria/networks/2">
18
+ <address>10.0.0.1</address>
19
+ <size>C</size>
20
+ <!-- <cidr>10.0.0.2/24</cidr> -->
21
+ <visibility>private</visibility>
22
+ <name>Network2</name>
23
+ <description>Network2 description</description>
24
+
25
+ <link rel="location"
26
+ href="/locations/fr-inria" />
27
+ </network>
28
+ </items>
29
+ <link rel="top"
30
+ href="/locations/fr-inria/networks?limit=20"
31
+ type="application/vnd.bonfire+xml" />
32
+ <link rel="parent"
33
+ href="/locations/fr-inria"
34
+ type="application/vnd.bonfire+xml" />
35
+ </collection>
@@ -0,0 +1,6 @@
1
+ <network xmlns="http://api.bonfire-project.eu/doc/schemas/occi" href="/locations/de-hlrs/networks/29">
2
+ <id>29</id>
3
+ <name>Private LAN</name>
4
+ <address />
5
+ <public>YES</public>
6
+ </network>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <root xmlns="http://api.bonfire-project.eu/doc/schemas/occi" href="/">
3
+ <link rel="experiments" href="/experiments" type="application/vnd.bonfire+xml"/>
4
+ <link rel="locations" href="/locations" type="application/vnd.bonfire+xml"/>
5
+ </root>
@@ -1,166 +1,1008 @@
1
1
  {
2
- "items": [
2
+ "total": 366486,
3
+ "offset": 0,
4
+ "items": [{
5
+ "uid": 376505,
6
+ "user": "sbadia",
7
+ "start_time": 1297866066,
8
+ "predicted_start_time": "1297866066",
9
+ "walltime": 3600,
10
+ "queue": "default",
11
+ "state": "running",
12
+ "project": "default",
13
+ "links": [{
14
+ "rel": "self",
15
+ "href": "/grid5000/sites/rennes/jobs/376505",
16
+ "type": "application/vnd.grid5000+json"
17
+ },
18
+ {
19
+ "rel": "parent",
20
+ "href": "/grid5000/sites/rennes",
21
+ "type": "application/vnd.grid5000+json"
22
+ }]
23
+ },
24
+ {
25
+ "uid": 376504,
26
+ "user": "sbadia",
27
+ "start_time": 1297866010,
28
+ "walltime": 3600,
29
+ "queue": "default",
30
+ "state": "terminated",
31
+ "project": "default",
32
+ "links": [{
33
+ "rel": "self",
34
+ "href": "/grid5000/sites/rennes/jobs/376504",
35
+ "type": "application/vnd.grid5000+json"
36
+ },
37
+ {
38
+ "rel": "parent",
39
+ "href": "/grid5000/sites/rennes",
40
+ "type": "application/vnd.grid5000+json"
41
+ }]
42
+ },
43
+ {
44
+ "uid": 376503,
45
+ "user": "tvluong",
46
+ "start_time": 1297865716,
47
+ "walltime": 39600,
48
+ "queue": "default",
49
+ "state": "error",
50
+ "project": "default",
51
+ "links": [{
52
+ "rel": "self",
53
+ "href": "/grid5000/sites/rennes/jobs/376503",
54
+ "type": "application/vnd.grid5000+json"
55
+ },
56
+ {
57
+ "rel": "parent",
58
+ "href": "/grid5000/sites/rennes",
59
+ "type": "application/vnd.grid5000+json"
60
+ }]
61
+ },
62
+ {
63
+ "uid": 376502,
64
+ "user": "jsilvabernardes",
65
+ "start_time": 0,
66
+ "predicted_start_time": "1297922461",
67
+ "walltime": 14400,
68
+ "queue": "default",
69
+ "state": "waiting",
70
+ "project": "default",
71
+ "name": "result1",
72
+ "links": [{
73
+ "rel": "self",
74
+ "href": "/grid5000/sites/rennes/jobs/376502",
75
+ "type": "application/vnd.grid5000+json"
76
+ },
77
+ {
78
+ "rel": "parent",
79
+ "href": "/grid5000/sites/rennes",
80
+ "type": "application/vnd.grid5000+json"
81
+ }]
82
+ },
3
83
  {
4
- "name": "test",
5
- "submitted_at": 1265359473,
6
- "uid": 319482,
7
- "user_uid": "crohr",
8
- "links": [
84
+ "uid": 376501,
85
+ "user": "oiegorov",
86
+ "start_time": 1297864644,
87
+ "predicted_start_time": "1297864644",
88
+ "walltime": 1794,
89
+ "queue": "default",
90
+ "state": "running",
91
+ "project": "default",
92
+ "links": [{
93
+ "rel": "self",
94
+ "href": "/grid5000/sites/rennes/jobs/376501",
95
+ "type": "application/vnd.grid5000+json"
96
+ },
9
97
  {
10
- "href": "/sid/grid5000/sites/rennes/jobs/319482",
11
- "rel": "self",
12
- "type": "application/vnd.fr.grid5000.api.Job+json;level=1"
98
+ "rel": "parent",
99
+ "href": "/grid5000/sites/rennes",
100
+ "type": "application/vnd.grid5000+json"
101
+ }]
102
+ },
103
+ {
104
+ "uid": 376500,
105
+ "user": "tvluong",
106
+ "start_time": 1297864279,
107
+ "walltime": 39600,
108
+ "queue": "default",
109
+ "state": "error",
110
+ "project": "default",
111
+ "links": [{
112
+ "rel": "self",
113
+ "href": "/grid5000/sites/rennes/jobs/376500",
114
+ "type": "application/vnd.grid5000+json"
13
115
  },
14
116
  {
15
- "href": "/sid/grid5000/sites/rennes",
16
- "rel": "parent",
17
- "type": "application/vnd.fr.grid5000.api.Site+json;level=1"
18
- }
19
- ],
20
- "queue": "default",
21
- "state": "running"
117
+ "rel": "parent",
118
+ "href": "/grid5000/sites/rennes",
119
+ "type": "application/vnd.grid5000+json"
120
+ }]
22
121
  },
23
122
  {
24
- "submitted_at": 1265359155,
25
- "uid": 319481,
26
- "user_uid": "rnou",
27
- "links": [
123
+ "uid": 376499,
124
+ "user": "hchihoub",
125
+ "start_time": 1297863914,
126
+ "predicted_start_time": "1297863914",
127
+ "walltime": 14396,
128
+ "queue": "default",
129
+ "state": "running",
130
+ "project": "default",
131
+ "links": [{
132
+ "rel": "self",
133
+ "href": "/grid5000/sites/rennes/jobs/376499",
134
+ "type": "application/vnd.grid5000+json"
135
+ },
28
136
  {
29
- "href": "/sid/grid5000/sites/rennes/jobs/319481",
30
- "rel": "self",
31
- "type": "application/vnd.fr.grid5000.api.Job+json;level=1"
137
+ "rel": "parent",
138
+ "href": "/grid5000/sites/rennes",
139
+ "type": "application/vnd.grid5000+json"
140
+ }]
141
+ },
142
+ {
143
+ "uid": 376498,
144
+ "user": "sbadia",
145
+ "start_time": 1297863672,
146
+ "walltime": 3600,
147
+ "queue": "default",
148
+ "state": "terminated",
149
+ "project": "default",
150
+ "links": [{
151
+ "rel": "self",
152
+ "href": "/grid5000/sites/rennes/jobs/376498",
153
+ "type": "application/vnd.grid5000+json"
32
154
  },
33
155
  {
34
- "href": "/sid/grid5000/sites/rennes",
35
- "rel": "parent",
36
- "type": "application/vnd.fr.grid5000.api.Site+json;level=1"
37
- }
38
- ],
39
- "queue": "default",
40
- "state": "running"
156
+ "rel": "parent",
157
+ "href": "/grid5000/sites/rennes",
158
+ "type": "application/vnd.grid5000+json"
159
+ }]
41
160
  },
42
161
  {
43
- "submitted_at": 1265359003,
44
- "uid": 319480,
45
- "user_uid": "ethome",
46
- "links": [
162
+ "uid": 376497,
163
+ "user": "tvluong",
164
+ "start_time": 1297863647,
165
+ "walltime": 39600,
166
+ "queue": "default",
167
+ "state": "error",
168
+ "project": "default",
169
+ "links": [{
170
+ "rel": "self",
171
+ "href": "/grid5000/sites/rennes/jobs/376497",
172
+ "type": "application/vnd.grid5000+json"
173
+ },
47
174
  {
48
- "href": "/sid/grid5000/sites/rennes/jobs/319480",
49
- "rel": "self",
50
- "type": "application/vnd.fr.grid5000.api.Job+json;level=1"
175
+ "rel": "parent",
176
+ "href": "/grid5000/sites/rennes",
177
+ "type": "application/vnd.grid5000+json"
178
+ }]
179
+ },
180
+ {
181
+ "uid": 376496,
182
+ "user": "priteau",
183
+ "start_time": 1297861555,
184
+ "predicted_start_time": "1297861555",
185
+ "walltime": 10800,
186
+ "queue": "default",
187
+ "state": "running",
188
+ "project": "default",
189
+ "name": "Nimbus",
190
+ "links": [{
191
+ "rel": "self",
192
+ "href": "/grid5000/sites/rennes/jobs/376496",
193
+ "type": "application/vnd.grid5000+json"
51
194
  },
52
195
  {
53
- "href": "/sid/grid5000/sites/rennes",
54
- "rel": "parent",
55
- "type": "application/vnd.fr.grid5000.api.Site+json;level=1"
56
- }
57
- ],
58
- "queue": "default",
59
- "state": "running"
196
+ "rel": "parent",
197
+ "href": "/grid5000/sites/rennes",
198
+ "type": "application/vnd.grid5000+json"
199
+ }]
60
200
  },
61
201
  {
62
- "submitted_at": 1265354868,
63
- "uid": 319479,
64
- "user_uid": "jarnaud",
65
- "links": [
66
- {
67
- "href": "/sid/grid5000/sites/rennes/jobs/319479",
68
- "rel": "self",
69
- "type": "application/vnd.fr.grid5000.api.Job+json;level=1"
70
- },
71
- {
72
- "href": "/sid/grid5000/sites/rennes",
73
- "rel": "parent",
74
- "type": "application/vnd.fr.grid5000.api.Site+json;level=1"
75
- }
76
- ],
77
- "queue": "default",
78
- "state": "running"
79
- },
80
- {
81
- "submitted_at": 1265312207,
82
- "uid": 319462,
83
- "user_uid": "acarpena",
84
- "links": [
85
- {
86
- "href": "/sid/grid5000/sites/rennes/jobs/319462",
87
- "rel": "self",
88
- "type": "application/vnd.fr.grid5000.api.Job+json;level=1"
89
- },
90
- {
91
- "href": "/sid/grid5000/sites/rennes",
92
- "rel": "parent",
93
- "type": "application/vnd.fr.grid5000.api.Site+json;level=1"
94
- }
95
- ],
96
- "queue": "default",
97
- "state": "waiting"
98
- },
99
- {
100
- "submitted_at": 1265292999,
101
- "uid": 319432,
102
- "user_uid": "acarpena",
103
- "links": [
104
- {
105
- "href": "/sid/grid5000/sites/rennes/jobs/319432",
106
- "rel": "self",
107
- "type": "application/vnd.fr.grid5000.api.Job+json;level=1"
202
+ "uid": 376495,
203
+ "user": "jsilvabernardes",
204
+ "start_time": 1297860565,
205
+ "walltime": 14400,
206
+ "queue": "default",
207
+ "state": "terminated",
208
+ "project": "default",
209
+ "name": "result1",
210
+ "links": [{
211
+ "rel": "self",
212
+ "href": "/grid5000/sites/rennes/jobs/376495",
213
+ "type": "application/vnd.grid5000+json"
108
214
  },
109
215
  {
110
- "href": "/sid/grid5000/sites/rennes",
111
- "rel": "parent",
112
- "type": "application/vnd.fr.grid5000.api.Site+json;level=1"
113
- }
114
- ],
115
- "queue": "default",
116
- "state": "waiting"
117
- },
118
- {
119
- "submitted_at": 1265218740,
120
- "uid": 319355,
121
- "user_uid": "bfnicola",
122
- "links": [
123
- {
124
- "href": "/sid/grid5000/sites/rennes/jobs/319355",
125
- "rel": "self",
126
- "type": "application/vnd.fr.grid5000.api.Job+json;level=1"
127
- },
216
+ "rel": "parent",
217
+ "href": "/grid5000/sites/rennes",
218
+ "type": "application/vnd.grid5000+json"
219
+ }]
220
+ },
221
+ {
222
+ "uid": 376494,
223
+ "user": "jsilvabernardes",
224
+ "start_time": 1297859317,
225
+ "walltime": 14400,
226
+ "queue": "default",
227
+ "state": "terminated",
228
+ "project": "default",
229
+ "name": "result1",
230
+ "links": [{
231
+ "rel": "self",
232
+ "href": "/grid5000/sites/rennes/jobs/376494",
233
+ "type": "application/vnd.grid5000+json"
234
+ },
235
+ {
236
+ "rel": "parent",
237
+ "href": "/grid5000/sites/rennes",
238
+ "type": "application/vnd.grid5000+json"
239
+ }]
240
+ },
241
+ {
242
+ "uid": 376493,
243
+ "user": "jsilvabernardes",
244
+ "start_time": 1297859255,
245
+ "walltime": 14400,
246
+ "queue": "default",
247
+ "state": "terminated",
248
+ "project": "default",
249
+ "name": "result1",
250
+ "links": [{
251
+ "rel": "self",
252
+ "href": "/grid5000/sites/rennes/jobs/376493",
253
+ "type": "application/vnd.grid5000+json"
254
+ },
255
+ {
256
+ "rel": "parent",
257
+ "href": "/grid5000/sites/rennes",
258
+ "type": "application/vnd.grid5000+json"
259
+ }]
260
+ },
261
+ {
262
+ "uid": 376492,
263
+ "user": "mdorier",
264
+ "start_time": 1297858038,
265
+ "walltime": 18000,
266
+ "queue": "default",
267
+ "state": "terminated",
268
+ "project": "default",
269
+ "links": [{
270
+ "rel": "self",
271
+ "href": "/grid5000/sites/rennes/jobs/376492",
272
+ "type": "application/vnd.grid5000+json"
273
+ },
274
+ {
275
+ "rel": "parent",
276
+ "href": "/grid5000/sites/rennes",
277
+ "type": "application/vnd.grid5000+json"
278
+ }]
279
+ },
280
+ {
281
+ "uid": 376491,
282
+ "user": "priteau",
283
+ "start_time": 1297857976,
284
+ "walltime": 3600,
285
+ "queue": "default",
286
+ "state": "terminated",
287
+ "project": "default",
288
+ "name": "Chef",
289
+ "links": [{
290
+ "rel": "self",
291
+ "href": "/grid5000/sites/rennes/jobs/376491",
292
+ "type": "application/vnd.grid5000+json"
293
+ },
294
+ {
295
+ "rel": "parent",
296
+ "href": "/grid5000/sites/rennes",
297
+ "type": "application/vnd.grid5000+json"
298
+ }]
299
+ },
300
+ {
301
+ "uid": 376489,
302
+ "user": "hdoghmen",
303
+ "start_time": 0,
304
+ "predicted_start_time": "1297922461",
305
+ "walltime": 54000,
306
+ "queue": "besteffort",
307
+ "state": "waiting",
308
+ "project": "default",
309
+ "name": "7big10b",
310
+ "links": [{
311
+ "rel": "self",
312
+ "href": "/grid5000/sites/rennes/jobs/376489",
313
+ "type": "application/vnd.grid5000+json"
314
+ },
315
+ {
316
+ "rel": "parent",
317
+ "href": "/grid5000/sites/rennes",
318
+ "type": "application/vnd.grid5000+json"
319
+ }]
320
+ },
321
+ {
322
+ "uid": 376490,
323
+ "user": "hdoghmen",
324
+ "start_time": 1297856515,
325
+ "walltime": 54000,
326
+ "queue": "besteffort",
327
+ "state": "error",
328
+ "project": "default",
329
+ "name": "big10",
330
+ "links": [{
331
+ "rel": "self",
332
+ "href": "/grid5000/sites/rennes/jobs/376490",
333
+ "type": "application/vnd.grid5000+json"
334
+ },
128
335
  {
129
- "href": "/sid/grid5000/sites/rennes",
130
- "rel": "parent",
131
- "type": "application/vnd.fr.grid5000.api.Site+json;level=1"
132
- }
133
- ],
134
- "queue": "default",
135
- "state": "waiting"
136
- },
137
- {
138
- "submitted_at": 1265148155,
139
- "uid": 319332,
140
- "user_uid": "akguyantoine",
141
- "links": [
142
- {
143
- "href": "/sid/grid5000/sites/rennes/jobs/319332",
144
- "rel": "self",
145
- "type": "application/vnd.fr.grid5000.api.Job+json;level=1"
146
- },
147
- {
148
- "href": "/sid/grid5000/sites/rennes",
149
- "rel": "parent",
150
- "type": "application/vnd.fr.grid5000.api.Site+json;level=1"
151
- }
152
- ],
153
- "queue": "default",
154
- "state": "waiting"
155
- }
156
- ],
157
- "total": 8,
158
- "links": [
159
- {
160
- "href": "/sid/grid5000/sites/rennes/jobs",
161
- "rel": "self",
162
- "type": "application/vnd.fr.grid5000.api.Collection+json;level=1"
163
- }
164
- ],
165
- "offset": 0
166
- }
336
+ "rel": "parent",
337
+ "href": "/grid5000/sites/rennes",
338
+ "type": "application/vnd.grid5000+json"
339
+ }]
340
+ },
341
+ {
342
+ "uid": 376488,
343
+ "user": "hchihoub",
344
+ "start_time": 1297853436,
345
+ "walltime": 3597,
346
+ "queue": "default",
347
+ "state": "error",
348
+ "project": "default",
349
+ "links": [{
350
+ "rel": "self",
351
+ "href": "/grid5000/sites/rennes/jobs/376488",
352
+ "type": "application/vnd.grid5000+json"
353
+ },
354
+ {
355
+ "rel": "parent",
356
+ "href": "/grid5000/sites/rennes",
357
+ "type": "application/vnd.grid5000+json"
358
+ }]
359
+ },
360
+ {
361
+ "uid": 376487,
362
+ "user": "priteau",
363
+ "start_time": 1297853337,
364
+ "walltime": 3600,
365
+ "queue": "default",
366
+ "state": "terminated",
367
+ "project": "default",
368
+ "name": "Grid5000::Campaign::Engine",
369
+ "links": [{
370
+ "rel": "self",
371
+ "href": "/grid5000/sites/rennes/jobs/376487",
372
+ "type": "application/vnd.grid5000+json"
373
+ },
374
+ {
375
+ "rel": "parent",
376
+ "href": "/grid5000/sites/rennes",
377
+ "type": "application/vnd.grid5000+json"
378
+ }]
379
+ },
380
+ {
381
+ "uid": 376486,
382
+ "user": "priteau",
383
+ "start_time": 1297852418,
384
+ "walltime": 3600,
385
+ "queue": "default",
386
+ "state": "error",
387
+ "project": "default",
388
+ "name": "Chef",
389
+ "links": [{
390
+ "rel": "self",
391
+ "href": "/grid5000/sites/rennes/jobs/376486",
392
+ "type": "application/vnd.grid5000+json"
393
+ },
394
+ {
395
+ "rel": "parent",
396
+ "href": "/grid5000/sites/rennes",
397
+ "type": "application/vnd.grid5000+json"
398
+ }]
399
+ },
400
+ {
401
+ "uid": 376485,
402
+ "user": "hchihoub",
403
+ "start_time": 1297852261,
404
+ "walltime": 2397,
405
+ "queue": "default",
406
+ "state": "error",
407
+ "project": "default",
408
+ "links": [{
409
+ "rel": "self",
410
+ "href": "/grid5000/sites/rennes/jobs/376485",
411
+ "type": "application/vnd.grid5000+json"
412
+ },
413
+ {
414
+ "rel": "parent",
415
+ "href": "/grid5000/sites/rennes",
416
+ "type": "application/vnd.grid5000+json"
417
+ }]
418
+ },
419
+ {
420
+ "uid": 376484,
421
+ "user": "priteau",
422
+ "start_time": 1297851824,
423
+ "walltime": 3600,
424
+ "queue": "default",
425
+ "state": "error",
426
+ "project": "default",
427
+ "name": "Grid5000::Campaign::Engine",
428
+ "links": [{
429
+ "rel": "self",
430
+ "href": "/grid5000/sites/rennes/jobs/376484",
431
+ "type": "application/vnd.grid5000+json"
432
+ },
433
+ {
434
+ "rel": "parent",
435
+ "href": "/grid5000/sites/rennes",
436
+ "type": "application/vnd.grid5000+json"
437
+ }]
438
+ },
439
+ {
440
+ "uid": 376483,
441
+ "user": "hchihoub",
442
+ "start_time": 1297851723,
443
+ "walltime": 2396,
444
+ "queue": "default",
445
+ "state": "error",
446
+ "project": "default",
447
+ "links": [{
448
+ "rel": "self",
449
+ "href": "/grid5000/sites/rennes/jobs/376483",
450
+ "type": "application/vnd.grid5000+json"
451
+ },
452
+ {
453
+ "rel": "parent",
454
+ "href": "/grid5000/sites/rennes",
455
+ "type": "application/vnd.grid5000+json"
456
+ }]
457
+ },
458
+ {
459
+ "uid": 376482,
460
+ "user": "priteau",
461
+ "start_time": 1297851712,
462
+ "walltime": 3600,
463
+ "queue": "default",
464
+ "state": "error",
465
+ "project": "default",
466
+ "name": "g5k-campaign test",
467
+ "links": [{
468
+ "rel": "self",
469
+ "href": "/grid5000/sites/rennes/jobs/376482",
470
+ "type": "application/vnd.grid5000+json"
471
+ },
472
+ {
473
+ "rel": "parent",
474
+ "href": "/grid5000/sites/rennes",
475
+ "type": "application/vnd.grid5000+json"
476
+ }]
477
+ },
478
+ {
479
+ "uid": 376481,
480
+ "user": "tviettrung",
481
+ "start_time": 1297863083,
482
+ "predicted_start_time": "1297863083",
483
+ "walltime": 7157,
484
+ "queue": "default",
485
+ "state": "running",
486
+ "project": "default",
487
+ "links": [{
488
+ "rel": "self",
489
+ "href": "/grid5000/sites/rennes/jobs/376481",
490
+ "type": "application/vnd.grid5000+json"
491
+ },
492
+ {
493
+ "rel": "parent",
494
+ "href": "/grid5000/sites/rennes",
495
+ "type": "application/vnd.grid5000+json"
496
+ }]
497
+ },
498
+ {
499
+ "uid": 376480,
500
+ "user": "priteau",
501
+ "start_time": 1297850726,
502
+ "walltime": 7200,
503
+ "queue": "default",
504
+ "state": "error",
505
+ "project": "default",
506
+ "links": [{
507
+ "rel": "self",
508
+ "href": "/grid5000/sites/rennes/jobs/376480",
509
+ "type": "application/vnd.grid5000+json"
510
+ },
511
+ {
512
+ "rel": "parent",
513
+ "href": "/grid5000/sites/rennes",
514
+ "type": "application/vnd.grid5000+json"
515
+ }]
516
+ },
517
+ {
518
+ "uid": 376479,
519
+ "user": "mimbert",
520
+ "start_time": 1297850005,
521
+ "walltime": 3515,
522
+ "queue": "default",
523
+ "state": "error",
524
+ "project": "default",
525
+ "links": [{
526
+ "rel": "self",
527
+ "href": "/grid5000/sites/rennes/jobs/376479",
528
+ "type": "application/vnd.grid5000+json"
529
+ },
530
+ {
531
+ "rel": "parent",
532
+ "href": "/grid5000/sites/rennes",
533
+ "type": "application/vnd.grid5000+json"
534
+ }]
535
+ },
536
+ {
537
+ "uid": 376478,
538
+ "user": "gbrand",
539
+ "start_time": 1297848877,
540
+ "predicted_start_time": "1297848877",
541
+ "walltime": 28800,
542
+ "queue": "testing",
543
+ "state": "running",
544
+ "project": "default",
545
+ "links": [{
546
+ "rel": "self",
547
+ "href": "/grid5000/sites/rennes/jobs/376478",
548
+ "type": "application/vnd.grid5000+json"
549
+ },
550
+ {
551
+ "rel": "parent",
552
+ "href": "/grid5000/sites/rennes",
553
+ "type": "application/vnd.grid5000+json"
554
+ }]
555
+ },
556
+ {
557
+ "uid": 376477,
558
+ "user": "gbrand",
559
+ "start_time": 1297848877,
560
+ "predicted_start_time": "1297848877",
561
+ "walltime": 28800,
562
+ "queue": "testing",
563
+ "state": "running",
564
+ "project": "default",
565
+ "links": [{
566
+ "rel": "self",
567
+ "href": "/grid5000/sites/rennes/jobs/376477",
568
+ "type": "application/vnd.grid5000+json"
569
+ },
570
+ {
571
+ "rel": "parent",
572
+ "href": "/grid5000/sites/rennes",
573
+ "type": "application/vnd.grid5000+json"
574
+ }]
575
+ },
576
+ {
577
+ "uid": 376476,
578
+ "user": "tvluong",
579
+ "start_time": 1297846887,
580
+ "walltime": 39600,
581
+ "queue": "default",
582
+ "state": "error",
583
+ "project": "default",
584
+ "links": [{
585
+ "rel": "self",
586
+ "href": "/grid5000/sites/rennes/jobs/376476",
587
+ "type": "application/vnd.grid5000+json"
588
+ },
589
+ {
590
+ "rel": "parent",
591
+ "href": "/grid5000/sites/rennes",
592
+ "type": "application/vnd.grid5000+json"
593
+ }]
594
+ },
595
+ {
596
+ "uid": 376475,
597
+ "user": "mdorier",
598
+ "start_time": 1297844954,
599
+ "walltime": 32400,
600
+ "queue": "default",
601
+ "state": "terminated",
602
+ "project": "default",
603
+ "links": [{
604
+ "rel": "self",
605
+ "href": "/grid5000/sites/rennes/jobs/376475",
606
+ "type": "application/vnd.grid5000+json"
607
+ },
608
+ {
609
+ "rel": "parent",
610
+ "href": "/grid5000/sites/rennes",
611
+ "type": "application/vnd.grid5000+json"
612
+ }]
613
+ },
614
+ {
615
+ "uid": 376473,
616
+ "user": "hdoghmen",
617
+ "start_time": 1297844750,
618
+ "predicted_start_time": "1297844750",
619
+ "walltime": 54000,
620
+ "queue": "besteffort",
621
+ "state": "running",
622
+ "project": "default",
623
+ "name": "7big10b",
624
+ "links": [{
625
+ "rel": "self",
626
+ "href": "/grid5000/sites/rennes/jobs/376473",
627
+ "type": "application/vnd.grid5000+json"
628
+ },
629
+ {
630
+ "rel": "parent",
631
+ "href": "/grid5000/sites/rennes",
632
+ "type": "application/vnd.grid5000+json"
633
+ }]
634
+ },
635
+ {
636
+ "uid": 376474,
637
+ "user": "hdoghmen",
638
+ "start_time": 1297844750,
639
+ "walltime": 54000,
640
+ "queue": "besteffort",
641
+ "state": "error",
642
+ "project": "default",
643
+ "name": "big10",
644
+ "links": [{
645
+ "rel": "self",
646
+ "href": "/grid5000/sites/rennes/jobs/376474",
647
+ "type": "application/vnd.grid5000+json"
648
+ },
649
+ {
650
+ "rel": "parent",
651
+ "href": "/grid5000/sites/rennes",
652
+ "type": "application/vnd.grid5000+json"
653
+ }]
654
+ },
655
+ {
656
+ "uid": 376472,
657
+ "user": "cfortina",
658
+ "start_time": 1297844732,
659
+ "walltime": 10800,
660
+ "queue": "default",
661
+ "state": "terminated",
662
+ "project": "default",
663
+ "links": [{
664
+ "rel": "self",
665
+ "href": "/grid5000/sites/rennes/jobs/376472",
666
+ "type": "application/vnd.grid5000+json"
667
+ },
668
+ {
669
+ "rel": "parent",
670
+ "href": "/grid5000/sites/rennes",
671
+ "type": "application/vnd.grid5000+json"
672
+ }]
673
+ },
674
+ {
675
+ "uid": 376471,
676
+ "user": "yparent",
677
+ "start_time": 1297844480,
678
+ "walltime": 10800,
679
+ "queue": "default",
680
+ "state": "terminated",
681
+ "project": "default",
682
+ "links": [{
683
+ "rel": "self",
684
+ "href": "/grid5000/sites/rennes/jobs/376471",
685
+ "type": "application/vnd.grid5000+json"
686
+ },
687
+ {
688
+ "rel": "parent",
689
+ "href": "/grid5000/sites/rennes",
690
+ "type": "application/vnd.grid5000+json"
691
+ }]
692
+ },
693
+ {
694
+ "uid": 376470,
695
+ "user": "fmarceteau",
696
+ "start_time": 1297843785,
697
+ "walltime": 10797,
698
+ "queue": "default",
699
+ "state": "error",
700
+ "project": "default",
701
+ "links": [{
702
+ "rel": "self",
703
+ "href": "/grid5000/sites/rennes/jobs/376470",
704
+ "type": "application/vnd.grid5000+json"
705
+ },
706
+ {
707
+ "rel": "parent",
708
+ "href": "/grid5000/sites/rennes",
709
+ "type": "application/vnd.grid5000+json"
710
+ }]
711
+ },
712
+ {
713
+ "uid": 376469,
714
+ "user": "fchuffart",
715
+ "start_time": 1297862106,
716
+ "walltime": 1794,
717
+ "queue": "default",
718
+ "state": "error",
719
+ "project": "default",
720
+ "links": [{
721
+ "rel": "self",
722
+ "href": "/grid5000/sites/rennes/jobs/376469",
723
+ "type": "application/vnd.grid5000+json"
724
+ },
725
+ {
726
+ "rel": "parent",
727
+ "href": "/grid5000/sites/rennes",
728
+ "type": "application/vnd.grid5000+json"
729
+ }]
730
+ },
731
+ {
732
+ "uid": 376468,
733
+ "user": "fchuffart",
734
+ "start_time": 1297926901,
735
+ "predicted_start_time": "1297926901",
736
+ "walltime": 1800,
737
+ "queue": "default",
738
+ "state": "waiting",
739
+ "project": "default",
740
+ "links": [{
741
+ "rel": "self",
742
+ "href": "/grid5000/sites/rennes/jobs/376468",
743
+ "type": "application/vnd.grid5000+json"
744
+ },
745
+ {
746
+ "rel": "parent",
747
+ "href": "/grid5000/sites/rennes",
748
+ "type": "application/vnd.grid5000+json"
749
+ }]
750
+ },
751
+ {
752
+ "uid": 376467,
753
+ "user": "yhoarau",
754
+ "start_time": 0,
755
+ "predicted_start_time": "1297922461",
756
+ "walltime": 86400,
757
+ "queue": "default",
758
+ "state": "waiting",
759
+ "project": "default",
760
+ "links": [{
761
+ "rel": "self",
762
+ "href": "/grid5000/sites/rennes/jobs/376467",
763
+ "type": "application/vnd.grid5000+json"
764
+ },
765
+ {
766
+ "rel": "parent",
767
+ "href": "/grid5000/sites/rennes",
768
+ "type": "application/vnd.grid5000+json"
769
+ }]
770
+ },
771
+ {
772
+ "uid": 376466,
773
+ "user": "tvluong",
774
+ "start_time": 1297812720,
775
+ "walltime": 39595,
776
+ "queue": "default",
777
+ "state": "error",
778
+ "project": "default",
779
+ "links": [{
780
+ "rel": "self",
781
+ "href": "/grid5000/sites/rennes/jobs/376466",
782
+ "type": "application/vnd.grid5000+json"
783
+ },
784
+ {
785
+ "rel": "parent",
786
+ "href": "/grid5000/sites/rennes",
787
+ "type": "application/vnd.grid5000+json"
788
+ }]
789
+ },
790
+ {
791
+ "uid": 376465,
792
+ "user": "tvluong",
793
+ "start_time": 1297809221,
794
+ "walltime": 39595,
795
+ "queue": "default",
796
+ "state": "error",
797
+ "project": "default",
798
+ "links": [{
799
+ "rel": "self",
800
+ "href": "/grid5000/sites/rennes/jobs/376465",
801
+ "type": "application/vnd.grid5000+json"
802
+ },
803
+ {
804
+ "rel": "parent",
805
+ "href": "/grid5000/sites/rennes",
806
+ "type": "application/vnd.grid5000+json"
807
+ }]
808
+ },
809
+ {
810
+ "uid": 376464,
811
+ "user": "sdelamare",
812
+ "start_time": 1297803365,
813
+ "walltime": 3600,
814
+ "queue": "default",
815
+ "state": "error",
816
+ "project": "default",
817
+ "name": "Test",
818
+ "links": [{
819
+ "rel": "self",
820
+ "href": "/grid5000/sites/rennes/jobs/376464",
821
+ "type": "application/vnd.grid5000+json"
822
+ },
823
+ {
824
+ "rel": "parent",
825
+ "href": "/grid5000/sites/rennes",
826
+ "type": "application/vnd.grid5000+json"
827
+ }]
828
+ },
829
+ {
830
+ "uid": 376463,
831
+ "user": "tvluong",
832
+ "start_time": 1297803159,
833
+ "walltime": 39594,
834
+ "queue": "default",
835
+ "state": "error",
836
+ "project": "default",
837
+ "links": [{
838
+ "rel": "self",
839
+ "href": "/grid5000/sites/rennes/jobs/376463",
840
+ "type": "application/vnd.grid5000+json"
841
+ },
842
+ {
843
+ "rel": "parent",
844
+ "href": "/grid5000/sites/rennes",
845
+ "type": "application/vnd.grid5000+json"
846
+ }]
847
+ },
848
+ {
849
+ "uid": 376462,
850
+ "user": "sdelamare",
851
+ "start_time": 1297802645,
852
+ "walltime": 3600,
853
+ "queue": "default",
854
+ "state": "error",
855
+ "project": "default",
856
+ "name": "Test",
857
+ "links": [{
858
+ "rel": "self",
859
+ "href": "/grid5000/sites/rennes/jobs/376462",
860
+ "type": "application/vnd.grid5000+json"
861
+ },
862
+ {
863
+ "rel": "parent",
864
+ "href": "/grid5000/sites/rennes",
865
+ "type": "application/vnd.grid5000+json"
866
+ }]
867
+ },
868
+ {
869
+ "uid": 376461,
870
+ "user": "sdelamare",
871
+ "start_time": 1297802165,
872
+ "walltime": 3600,
873
+ "queue": "default",
874
+ "state": "error",
875
+ "project": "default",
876
+ "name": "Test",
877
+ "links": [{
878
+ "rel": "self",
879
+ "href": "/grid5000/sites/rennes/jobs/376461",
880
+ "type": "application/vnd.grid5000+json"
881
+ },
882
+ {
883
+ "rel": "parent",
884
+ "href": "/grid5000/sites/rennes",
885
+ "type": "application/vnd.grid5000+json"
886
+ }]
887
+ },
888
+ {
889
+ "uid": 376460,
890
+ "user": "sdelamare",
891
+ "start_time": 1297801684,
892
+ "walltime": 3600,
893
+ "queue": "default",
894
+ "state": "error",
895
+ "project": "default",
896
+ "name": "Test",
897
+ "links": [{
898
+ "rel": "self",
899
+ "href": "/grid5000/sites/rennes/jobs/376460",
900
+ "type": "application/vnd.grid5000+json"
901
+ },
902
+ {
903
+ "rel": "parent",
904
+ "href": "/grid5000/sites/rennes",
905
+ "type": "application/vnd.grid5000+json"
906
+ }]
907
+ },
908
+ {
909
+ "uid": 376459,
910
+ "user": "sdelamare",
911
+ "start_time": 1297801205,
912
+ "walltime": 3600,
913
+ "queue": "default",
914
+ "state": "error",
915
+ "project": "default",
916
+ "name": "Test",
917
+ "links": [{
918
+ "rel": "self",
919
+ "href": "/grid5000/sites/rennes/jobs/376459",
920
+ "type": "application/vnd.grid5000+json"
921
+ },
922
+ {
923
+ "rel": "parent",
924
+ "href": "/grid5000/sites/rennes",
925
+ "type": "application/vnd.grid5000+json"
926
+ }]
927
+ },
928
+ {
929
+ "uid": 376458,
930
+ "user": "sdelamare",
931
+ "start_time": 1297800725,
932
+ "walltime": 3600,
933
+ "queue": "default",
934
+ "state": "error",
935
+ "project": "default",
936
+ "name": "Test",
937
+ "links": [{
938
+ "rel": "self",
939
+ "href": "/grid5000/sites/rennes/jobs/376458",
940
+ "type": "application/vnd.grid5000+json"
941
+ },
942
+ {
943
+ "rel": "parent",
944
+ "href": "/grid5000/sites/rennes",
945
+ "type": "application/vnd.grid5000+json"
946
+ }]
947
+ },
948
+ {
949
+ "uid": 376457,
950
+ "user": "sdelamare",
951
+ "start_time": 1297800006,
952
+ "walltime": 3600,
953
+ "queue": "default",
954
+ "state": "error",
955
+ "project": "default",
956
+ "name": "Test",
957
+ "links": [{
958
+ "rel": "self",
959
+ "href": "/grid5000/sites/rennes/jobs/376457",
960
+ "type": "application/vnd.grid5000+json"
961
+ },
962
+ {
963
+ "rel": "parent",
964
+ "href": "/grid5000/sites/rennes",
965
+ "type": "application/vnd.grid5000+json"
966
+ }]
967
+ },
968
+ {
969
+ "uid": 376456,
970
+ "user": "sdelamare",
971
+ "start_time": 1297799525,
972
+ "walltime": 3600,
973
+ "queue": "default",
974
+ "state": "terminated",
975
+ "project": "default",
976
+ "name": "Test",
977
+ "links": [{
978
+ "rel": "self",
979
+ "href": "/grid5000/sites/rennes/jobs/376456",
980
+ "type": "application/vnd.grid5000+json"
981
+ },
982
+ {
983
+ "rel": "parent",
984
+ "href": "/grid5000/sites/rennes",
985
+ "type": "application/vnd.grid5000+json"
986
+ }]
987
+ }],
988
+ "links": [{
989
+ "rel": "self",
990
+ "href": "/grid5000/sites/rennes/jobs",
991
+ "type": "application/vnd.grid5000+json"
992
+ },
993
+ {
994
+ "rel": "parent",
995
+ "href": "/grid5000/sites/rennes",
996
+ "type": "application/vnd.grid5000+json"
997
+ },
998
+ {
999
+ "rel": "next",
1000
+ "href": "/grid5000/sites/rennes/jobs?offset=100",
1001
+ "type": "application/vnd.grid5000+json"
1002
+ },
1003
+ {
1004
+ "rel": "index",
1005
+ "href": "/grid5000/sites/rennes/jobs?offset=0",
1006
+ "type": "application/vnd.grid5000+json"
1007
+ }]
1008
+ }