autodesk_backburner_client 0.1.0 → 0.2.2
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.
- data/lib/backburner.rb +2 -2
- data/lib/backburner/client.rb +49 -17
- data/lib/backburner/connection.rb +66 -31
- data/lib/backburner/data_object.rb +48 -9
- data/lib/backburner/job.rb +4 -0
- data/lib/backburner/remote_command.rb +32 -0
- data/lib/backburner/version.rb +1 -1
- metadata +2 -1
data/lib/backburner.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'active_support/core_ext/hash'
|
2
1
|
require "backburner/version"
|
3
2
|
require "backburner/connection"
|
4
3
|
require "backburner/job"
|
@@ -6,4 +5,5 @@ require "backburner/server"
|
|
6
5
|
require "backburner/client"
|
7
6
|
require "backburner/string/string_operations"
|
8
7
|
require "backburner/data_object"
|
9
|
-
require "backburner/backburner_object"
|
8
|
+
require "backburner/backburner_object"
|
9
|
+
require "backburner/remote_command"
|
data/lib/backburner/client.rb
CHANGED
@@ -2,10 +2,13 @@ module Backburner
|
|
2
2
|
|
3
3
|
class Client
|
4
4
|
|
5
|
+
attr_reader :data
|
6
|
+
|
5
7
|
def initialize host, port=3234
|
6
8
|
@host = host
|
7
9
|
@port = port
|
8
10
|
@connection = Connection.new @host, @port
|
11
|
+
send_client_info
|
9
12
|
self
|
10
13
|
end
|
11
14
|
|
@@ -53,25 +56,54 @@ module Backburner
|
|
53
56
|
|
54
57
|
private
|
55
58
|
|
59
|
+
def generate_client_info
|
60
|
+
@data = DataObject.new
|
61
|
+
@data.client_info = {
|
62
|
+
version: 300,
|
63
|
+
udp_port: 0,
|
64
|
+
controler: 0,
|
65
|
+
system_info: {
|
66
|
+
total_memory: total_memory,
|
67
|
+
total_memory_f: total_memory_f,
|
68
|
+
num_cpus: num_cpus,
|
69
|
+
platform: platform,
|
70
|
+
user: user,
|
71
|
+
computer_name: computer_name,
|
72
|
+
mac: '00E052B9A2F20000',
|
73
|
+
work_disk_space: 0,
|
74
|
+
i_p_address: '172.50.0.170'
|
75
|
+
}
|
76
|
+
}
|
77
|
+
end
|
78
|
+
|
56
79
|
def send_client_info
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
80
|
+
generate_client_info unless @data
|
81
|
+
xml = @data.to_xml
|
82
|
+
@connection.set_clientinfo xml.bytesize
|
83
|
+
end
|
84
|
+
|
85
|
+
def total_memory
|
86
|
+
`free -b`.match(/\d+/).to_s.to_i
|
87
|
+
end
|
88
|
+
|
89
|
+
def total_memory_f
|
90
|
+
total_memory.to_f
|
91
|
+
end
|
92
|
+
|
93
|
+
def num_cpus
|
94
|
+
`cat /proc/cpuinfo`.split("\n\n" ).count
|
95
|
+
end
|
96
|
+
|
97
|
+
def platform
|
98
|
+
`uname`.gsub(/\n/, '')
|
99
|
+
end
|
100
|
+
|
101
|
+
def user
|
102
|
+
`whoami`.gsub(/\n/, '')
|
103
|
+
end
|
74
104
|
|
105
|
+
def computer_name
|
106
|
+
`hostname`.gsub(/\n/, '')
|
75
107
|
end
|
76
108
|
|
77
109
|
end
|
@@ -1,25 +1,23 @@
|
|
1
1
|
require 'net/telnet'
|
2
|
+
require 'nori'
|
2
3
|
|
3
4
|
module Backburner
|
4
5
|
|
5
6
|
class Connection
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
8
|
+
STATUS_REGEXP = /(\d+) ([0-9A-z ]+)$/
|
9
|
+
PROMPT_REGEXP = /\nbackburner(\(controller\))?>/i
|
10
|
+
XML_COMMENT_REGEXP = /<!--.+-->/
|
11
11
|
|
12
|
-
|
13
|
-
if name =~ /^get_/
|
14
|
-
object = name.to_s.gsub /^get_/, ''
|
15
|
-
return get(object, args)
|
16
|
-
end
|
17
|
-
super
|
18
|
-
end
|
12
|
+
attr_reader :last_message, :last_size, :last_status, :last_body, :last_response
|
19
13
|
|
20
|
-
def
|
21
|
-
|
14
|
+
def initialize host='127.0.0.1', port=3234
|
15
|
+
@session = Net::Telnet.new('Host' => host, 'Port' => port, 'Prompt' => PROMPT_REGEXP)
|
16
|
+
@session.waitfor 'Match' => PROMPT_REGEXP
|
17
|
+
end
|
22
18
|
|
19
|
+
def method_missing method_name
|
20
|
+
RemoteCommand.new method_name, self
|
23
21
|
end
|
24
22
|
|
25
23
|
def close
|
@@ -32,31 +30,68 @@ module Backburner
|
|
32
30
|
raise
|
33
31
|
end
|
34
32
|
|
33
|
+
def exec arg_hash
|
34
|
+
xml_string = ''
|
35
|
+
first = true
|
36
|
+
@session.cmd arg_hash do |response|
|
37
|
+
if first
|
38
|
+
response =~ /(\d+) (\d*)(.*)/
|
39
|
+
@last_status = $1.to_i
|
40
|
+
@last_size = $2.to_i
|
41
|
+
@last_message = $3
|
42
|
+
first = false
|
43
|
+
next
|
44
|
+
end
|
45
|
+
xml_string += response
|
46
|
+
end
|
47
|
+
|
48
|
+
xml_string = xml_string.sub(/backburner>$/, '')
|
49
|
+
DataObject.new xml_string
|
50
|
+
end
|
51
|
+
|
52
|
+
def send_data data
|
53
|
+
@session.cmd 'String' => data
|
54
|
+
end
|
55
|
+
|
56
|
+
def send_text data
|
57
|
+
@last_response = @session.cmd data
|
58
|
+
parse_response
|
59
|
+
end
|
60
|
+
|
61
|
+
def proceed?
|
62
|
+
@last_status < 200 || @last_status > 299
|
63
|
+
end
|
64
|
+
|
65
|
+
def ready?
|
66
|
+
@last_status == 250
|
67
|
+
end
|
68
|
+
|
35
69
|
private
|
36
70
|
|
37
|
-
def
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
response =~ /(\d+) (\d*)(.*)/
|
43
|
-
@last_status = $1.to_i
|
44
|
-
@last_size = $2.to_i
|
45
|
-
@last_message = $3
|
46
|
-
first = false
|
47
|
-
next
|
48
|
-
end
|
49
|
-
xml_string += response
|
50
|
-
end
|
71
|
+
def parse_response
|
72
|
+
parse_status
|
73
|
+
parse_body
|
74
|
+
parse_object
|
75
|
+
end
|
51
76
|
|
52
|
-
|
53
|
-
|
77
|
+
def parse_status
|
78
|
+
@last_response.scan STATUS_REGEXP
|
79
|
+
@last_status = $1.to_i
|
80
|
+
@last_size = $2.to_i
|
81
|
+
@last_message = $2
|
54
82
|
end
|
55
83
|
|
56
|
-
def
|
84
|
+
def parse_body
|
85
|
+
@last_body = @last_response.gsub PROMPT_REGEXP, ''
|
86
|
+
@last_body.gsub! STATUS_REGEXP, ''
|
87
|
+
@last_body.gsub! XML_COMMENT_REGEXP, ''
|
88
|
+
end
|
57
89
|
|
90
|
+
def parse_object
|
91
|
+
parser = Nori.new :convert_tags_to => lambda { |tag| tag.snakecase.to_sym }
|
92
|
+
DataObject.new parser.parse @last_body
|
58
93
|
end
|
59
94
|
|
60
95
|
end
|
61
96
|
|
62
|
-
end
|
97
|
+
end
|
@@ -1,18 +1,55 @@
|
|
1
|
-
require 'nori'
|
2
1
|
require 'recursive_open_struct'
|
3
|
-
require '
|
2
|
+
require 'nokogiri'
|
4
3
|
|
5
4
|
module Backburner
|
6
5
|
|
7
6
|
class DataObject < RecursiveOpenStruct
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
8
|
+
TIME_REGEXP = /(^\d{4}\/\d{2}\/\d{2}-\d{2}:\d{2}:\d{2}:\d{4})(-\d{2})$/
|
9
|
+
|
10
|
+
def initialize h, args={recurse_over_arrays: true}
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
def new_ostruct_member(name)
|
15
|
+
name = name.to_sym
|
16
|
+
unless self.respond_to?(name)
|
17
|
+
class << self; self; end.class_eval do
|
18
|
+
define_method(name) do
|
19
|
+
v = @table[name]
|
20
|
+
if v.is_a?(Hash)
|
21
|
+
@sub_elements[name] ||= self.class.new(v, :recurse_over_arrays => @recurse_over_arrays)
|
22
|
+
elsif v.is_a?(Array) and @recurse_over_arrays
|
23
|
+
@sub_elements[name] ||= recurse_over_array v
|
24
|
+
elsif v.is_a?(String)
|
25
|
+
case v
|
26
|
+
when /^\d+$/ then v.to_i
|
27
|
+
when /^\d+\.\d+$/ then v.to_f
|
28
|
+
when TIME_REGEXP then parse_time(v)
|
29
|
+
when /^Yes$/i then true
|
30
|
+
when /^No$/i then false
|
31
|
+
else v
|
32
|
+
end
|
33
|
+
else
|
34
|
+
v
|
35
|
+
end
|
36
|
+
end
|
37
|
+
define_method("#{name}=") { |x| modifiable[name] = x }
|
38
|
+
define_method("#{name}_as_a_hash") { @table[name] }
|
39
|
+
end
|
15
40
|
end
|
41
|
+
name
|
42
|
+
end
|
43
|
+
|
44
|
+
def parse_time(time_string)
|
45
|
+
res = time_string.scan TIME_REGEXP
|
46
|
+
time = Time.parse res[0][0]
|
47
|
+
time += res[0][1].to_i*60*60
|
48
|
+
time
|
49
|
+
end
|
50
|
+
|
51
|
+
def empty?
|
52
|
+
@table.empty?
|
16
53
|
end
|
17
54
|
|
18
55
|
def search name
|
@@ -32,7 +69,7 @@ module Backburner
|
|
32
69
|
end
|
33
70
|
|
34
71
|
def to_xml
|
35
|
-
builder = Nokogiri::XML::Builder.new do |xml|
|
72
|
+
builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
36
73
|
xml.send @table.keys.first.to_s.camelize
|
37
74
|
end
|
38
75
|
document = builder.doc
|
@@ -68,6 +105,8 @@ module Backburner
|
|
68
105
|
end
|
69
106
|
elsif data.kind_of?(String)
|
70
107
|
children << data
|
108
|
+
elsif data.kind_of?(Numeric)
|
109
|
+
children << data.to_s
|
71
110
|
end
|
72
111
|
|
73
112
|
children.each do |child|
|
data/lib/backburner/job.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
module Backburner
|
2
|
+
class RemoteCommand
|
3
|
+
attr_accessor :command_stack
|
4
|
+
|
5
|
+
def initialize command_name, connection, command_stack=nil
|
6
|
+
@command_stack = command_stack || []
|
7
|
+
@command_stack.unshift command_name
|
8
|
+
@connection = connection
|
9
|
+
end
|
10
|
+
|
11
|
+
def method_missing method_name, *args
|
12
|
+
self.class.new method_name, @command_stack
|
13
|
+
end
|
14
|
+
|
15
|
+
def flatten
|
16
|
+
@command_stack.join ' '
|
17
|
+
end
|
18
|
+
|
19
|
+
%w{get set new del kill exit}.each do |method_name|
|
20
|
+
|
21
|
+
define_method method_name do |*args|
|
22
|
+
request_array = []
|
23
|
+
request_array << method_name
|
24
|
+
request_array << flatten
|
25
|
+
request_array += args||[]
|
26
|
+
@connection.send_text request_array.join(' ')
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
data/lib/backburner/version.rb
CHANGED
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.
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- lib/backburner/data_object.rb
|
97
97
|
- lib/backburner/job.rb
|
98
98
|
- lib/backburner/open_struct_data.rb
|
99
|
+
- lib/backburner/remote_command.rb
|
99
100
|
- lib/backburner/server.rb
|
100
101
|
- lib/backburner/string/string_operations.rb
|
101
102
|
- lib/backburner/version.rb
|