autodesk_backburner_client 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/backburner.rb CHANGED
@@ -1,9 +1,11 @@
1
1
  require "backburner/version"
2
2
  require "backburner/connection"
3
+ require "backburner/backburner_object"
3
4
  require "backburner/job"
5
+ require "backburner/job_server"
4
6
  require "backburner/server"
5
7
  require "backburner/client"
6
8
  require "backburner/string/string_operations"
7
9
  require "backburner/data_object"
8
- require "backburner/backburner_object"
9
- require "backburner/remote_command"
10
+ require "backburner/remote_command"
11
+ require "backburner/errors/connection_error"
@@ -2,20 +2,20 @@ module Backburner
2
2
 
3
3
  class BackburnerObject
4
4
 
5
- attr_reader :data, :client, :handler
5
+ attr_reader :handler
6
6
 
7
- def method_missing name, *args
8
- @data.search name
7
+ def method_missing name
8
+ @raw_data.try :search, name
9
9
  end
10
10
 
11
- def initialize handler, client
11
+ def initialize handler, connection
12
12
  @handler = handler
13
- @client = client
13
+ @connection = connection
14
14
  reload
15
15
  end
16
16
 
17
17
  def reload
18
- @data = reloader
18
+ @raw_data = load_raw_data if respond_to?(:load_raw_data)
19
19
  end
20
20
 
21
21
  end
@@ -1,8 +1,8 @@
1
1
  module Backburner
2
2
 
3
- class Client
3
+ class Client < BackburnerObject
4
4
 
5
- attr_reader :data
5
+ attr_reader :raw_data
6
6
 
7
7
  def initialize host, port=3234
8
8
  @host = host
@@ -21,44 +21,20 @@ module Backburner
21
21
  end
22
22
 
23
23
  def jobs
24
- job_handlers = @connection.get_jobhlist.jobh_list.job
24
+ response = @connection.jobhlist.get
25
+ return [] if @connection.empty?
26
+ job_handlers = response.jobh_list.job
25
27
  job_handlers = [job_handlers] unless job_handlers.kind_of?(Array)
26
28
  job_handlers.map do |job_data|
27
- Job.new job_data.handle, self
29
+ Job.new job_data.handle, @connection
28
30
  end
29
31
  end
30
32
 
31
- def job handler
32
- job_data = job! handler
33
- Job.new job_data, self
34
- end
35
-
36
- def job! handler
37
- @connection.get_job handler
38
- end
39
-
40
- def servers
41
- server_handlers = @connection.get_srvlist.server_list.server
42
- server_handlers = [server_handlers] unless server_handlers.kind_of?(Array)
43
- server_handlers.map do |server_data|
44
- Server.new server_data.handle, self
45
- end
46
- end
47
-
48
- def server handler
49
- server_data = server! handler
50
- Server.new server_data, self
51
- end
52
-
53
- def server! handler
54
- @connection.get_server handler
55
- end
56
-
57
33
  private
58
34
 
59
35
  def generate_client_info
60
- @data = DataObject.new
61
- @data.client_info = {
36
+ @raw_data = DataObject.new
37
+ @raw_data.client_info = {
62
38
  version: 300,
63
39
  udp_port: 0,
64
40
  controler: 0,
@@ -69,7 +45,7 @@ module Backburner
69
45
  platform: platform,
70
46
  user: user,
71
47
  computer_name: computer_name,
72
- mac: '00E052B9A2F20000',
48
+ mac: '00E052B9A2F20000', # TODO: change to dynamic
73
49
  work_disk_space: 0,
74
50
  i_p_address: '172.50.0.170'
75
51
  }
@@ -77,9 +53,9 @@ module Backburner
77
53
  end
78
54
 
79
55
  def send_client_info
80
- generate_client_info unless @data
81
- xml = @data.to_xml
82
- @connection.set_clientinfo xml.bytesize
56
+ generate_client_info
57
+ xml = @raw_data.to_xml
58
+ @connection.clientinfo.set xml
83
59
  end
84
60
 
85
61
  def total_memory
@@ -6,7 +6,7 @@ module Backburner
6
6
  class Connection
7
7
 
8
8
  STATUS_REGEXP = /(\d+) ([0-9A-z ]+)$/
9
- PROMPT_REGEXP = /\nbackburner(\(controller\))?>/i
9
+ PROMPT_REGEXP = /\n?backburner(\(controller\))?>/i
10
10
  XML_COMMENT_REGEXP = /<!--.+-->/
11
11
 
12
12
  attr_reader :last_message, :last_size, :last_status, :last_body, :last_response
@@ -49,15 +49,34 @@ module Backburner
49
49
  DataObject.new xml_string
50
50
  end
51
51
 
52
- def send_data data
53
- @session.cmd 'String' => data
52
+ def send_data
54
53
  end
55
54
 
56
- def send_text data
55
+ def cmd data
57
56
  @last_response = @session.cmd data
58
57
  parse_response
59
58
  end
60
59
 
60
+ def send_text command_data, data=nil
61
+ request = "#{command_data}"
62
+ request_hash = {}
63
+ if data
64
+ request_hash['Match'] = STATUS_REGEXP
65
+ request += " #{data.bytesize+14}"
66
+ end
67
+ request_hash['String'] = request
68
+ @last_response = @session.cmd request_hash
69
+ parse_status
70
+ @last_response = @session.puts data
71
+ @last_response = @session.waitfor('Match' => STATUS_REGEXP)
72
+ @session.waitfor 'Match' => PROMPT_REGEXP
73
+ parse_status
74
+ end
75
+
76
+ def ready?
77
+ (@last_status||0) == 251
78
+ end
79
+
61
80
  def proceed?
62
81
  @last_status < 200 || @last_status > 299
63
82
  end
@@ -66,6 +85,14 @@ module Backburner
66
85
  @last_status == 250
67
86
  end
68
87
 
88
+ def error?
89
+ (@last_status||0) > 399
90
+ end
91
+
92
+ def empty?
93
+ @last_size == 0
94
+ end
95
+
69
96
  private
70
97
 
71
98
  def parse_response
@@ -75,10 +102,12 @@ module Backburner
75
102
  end
76
103
 
77
104
  def parse_status
105
+ #TODO: add exception from wrong status codes
78
106
  @last_response.scan STATUS_REGEXP
79
107
  @last_status = $1.to_i
80
108
  @last_size = $2.to_i
81
109
  @last_message = $2
110
+ raise(ConnectionError.new, @last_message) if error?
82
111
  end
83
112
 
84
113
  def parse_body
@@ -7,7 +7,7 @@ module Backburner
7
7
 
8
8
  TIME_REGEXP = /(^\d{4}\/\d{2}\/\d{2}-\d{2}:\d{2}:\d{2}:\d{4})(-\d{2})$/
9
9
 
10
- def initialize h, args={recurse_over_arrays: true}
10
+ def initialize h={}, args={recurse_over_arrays: true}
11
11
  super
12
12
  end
13
13
 
@@ -75,7 +75,7 @@ module Backburner
75
75
  document = builder.doc
76
76
  root_element = document.children[0]
77
77
  xml = xml_dig root_element, @table.values.first, document
78
- document.to_xml
78
+ document.to_xml + "\n"
79
79
  end
80
80
 
81
81
  private
@@ -0,0 +1,4 @@
1
+ module Backburner
2
+ class ConnectionError < StandardError
3
+ end
4
+ end
@@ -1,15 +1,27 @@
1
- require 'backburner/backburner_object'
2
-
3
1
  module Backburner
4
2
 
5
3
  class Job < BackburnerObject
6
4
 
7
- def reloader
8
- @client.job!(@handler)
5
+ def load_raw_data
6
+ @connection.job.get(handler)
7
+ end
8
+
9
+ def servers
10
+ return [] if !@raw_data || !@raw_data.job.servers || !@raw_data.job.servers.server
11
+ servers = @raw_data.job.servers.server.is_a?(Array) ? @raw_data.job.servers.server : [@raw_data.job.servers.server]
12
+ servers.map do |server|
13
+ JobServer.new server, @connection
14
+ end
9
15
  end
10
16
 
11
- def create name, file_path, *parameters
17
+ def server_time
18
+ servers.inject(0.0) do |sum, server|
19
+ sum += server.time
20
+ end
21
+ end
12
22
 
23
+ def name
24
+ @raw_data.job.job_info.name
13
25
  end
14
26
 
15
27
  end
@@ -0,0 +1,14 @@
1
+ module Backburner
2
+ class JobServer < BackburnerObject
3
+
4
+ def initialize raw_data, connection
5
+ @raw_data = raw_data
6
+ @connection = connection
7
+ end
8
+
9
+ def time
10
+ @raw_data.srv_task_time
11
+ end
12
+
13
+ end
14
+ end
@@ -22,8 +22,16 @@ module Backburner
22
22
  request_array = []
23
23
  request_array << method_name
24
24
  request_array << flatten
25
- request_array += args||[]
26
- @connection.send_text request_array.join(' ')
25
+ case method_name
26
+ when 'get' then
27
+ request_array += args||[]
28
+ @connection.cmd request_array.join(' ')
29
+ when 'set' then
30
+ @connection.send_text request_array.join(' '), args[0]
31
+ when 'new' then
32
+ request_array += args||[]
33
+ @connection.cmd request_array.join(' ')
34
+ end
27
35
  end
28
36
 
29
37
  end
@@ -1,3 +1,3 @@
1
1
  module Backburner
2
- VERSION = "0.2.2"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: autodesk_backburner_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -94,7 +94,9 @@ files:
94
94
  - lib/backburner/client.rb
95
95
  - lib/backburner/connection.rb
96
96
  - lib/backburner/data_object.rb
97
+ - lib/backburner/errors/connection_error.rb
97
98
  - lib/backburner/job.rb
99
+ - lib/backburner/job_server.rb
98
100
  - lib/backburner/open_struct_data.rb
99
101
  - lib/backburner/remote_command.rb
100
102
  - lib/backburner/server.rb