vagrant-node 1.1.1 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,8 +10,10 @@ module DB
10
10
  class DBManager
11
11
 
12
12
  DOWNLOAD_ERROR=-1
13
- DOWNLOAD_PROCESS=0
14
- DOWNLOAD_SUCCESS=0
13
+ DOWNLOAD_STOP=0
14
+ DOWNLOAD_START=1
15
+ DOWNLOAD_SUCCESS=2
16
+ DOWNLOAD_UNCOMPRESS = 3
15
17
 
16
18
  def initialize(data_dir)
17
19
  @db=check_database(data_dir)
@@ -91,48 +93,79 @@ module DB
91
93
  @db.query(sql)
92
94
  end
93
95
 
96
+ def quote_string(s)
97
+ s.gsub(/\\/, '\&\&').gsub(/'/, "''") # ' (for ruby-mode)
98
+ end
99
+
100
+
101
+ UNESCAPES = {
102
+ 'a' => "\x07", 'b' => "\x08", 't' => "\x09",
103
+ 'n' => "\x0a", 'v' => "\x0b", 'f' => "\x0c",
104
+ 'r' => "\x0d", 'e' => "\x1b", "\\\\" => "\x5c",
105
+ "\"" => "\x22", "'" => "\x27"
106
+ }
107
+
108
+ def unescape(str)
109
+ # Escape all the things
110
+ str.gsub(/\\(?:([#{UNESCAPES.keys.join}])|u([\da-fA-F]{4}))|\\0?x([\da-fA-F]{2})/) {
111
+ if $1
112
+ if $1 == '\\' then '\\' else UNESCAPES[$1] end
113
+ elsif $2 # escape \u0000 unicode
114
+ ["#$2".hex].pack('U*')
115
+ elsif $3 # escape \0xff or \xff
116
+ [$3].pack('H2')
117
+ end
118
+ }
119
+ end
120
+
121
+
94
122
  def set_queued_process_error(id,exception)
95
123
 
96
124
  errlog = []
97
-
98
- errcode=PROCESS_ERROR
99
125
 
100
- # decoded=exception.message.to_s.tr("\n"," ")
101
- # puts exception.message.to_s
102
- # pp exception.message.to_s
103
- # pp decoded
104
126
 
127
+ errcode=PROCESS_ERROR
105
128
 
106
-
129
+ #Code to avoid some annoying things related to special chars
130
+ error_msg=exception.message
131
+ error_msg=quote_string(error_msg).to_json
132
+ error_msg=error_msg[1,error_msg.size-2]
133
+
134
+
135
+
107
136
  if (exception.class==VMActionException)
108
- errlog << {"vmname" => exception.vmname,"provider"=>exception.provider,"status" => exception.message.to_s.tr("\'","\"")}
137
+ #errlog << {"vmname" => exception.vmname,"provider"=>exception.provider,"status" => @db.escape(error_msg)}
138
+ errlog << {"vmname" => exception.vmname,"provider"=>exception.provider,"status" => error_msg}
109
139
  elsif (exception.class==RestException)
110
140
  errcode=exception.code
111
- errlog << {"status" => exception.message.to_s.tr("\'","\"")}
141
+ errlog << {"status" => error_msg}
112
142
  else
113
- errlog << {"status" => exception.message.to_s.tr("\'","\"")}
143
+ # errlog << {"status" => exception.message.to_s.tr("\'","\"")}
144
+ errlog << {"status" => error_msg}
114
145
  end
146
+
147
+ #sql="UPDATE #{OPERATION_QUEUE_TABLE_NAME} SET #{OPERATION_STATUS_COLUMN} = #{errcode},#{OPERATION_RESULT_COLUMN} = '#{errlog.to_json}' WHERE #{OPERATION_ID_COLUMN}= #{id}"
115
148
 
116
149
 
150
+ sql="UPDATE #{OPERATION_QUEUE_TABLE_NAME} SET #{OPERATION_STATUS_COLUMN} = #{errcode},#{OPERATION_RESULT_COLUMN} = '#{errlog.to_json}' WHERE #{OPERATION_ID_COLUMN}= #{id}"
117
151
 
118
- sql="UPDATE #{OPERATION_QUEUE_TABLE_NAME} SET #{OPERATION_STATUS_COLUMN} = #{errcode},#{OPERATION_RESULT_COLUMN} = '#{errlog.to_json}' WHERE #{OPERATION_ID_COLUMN}= #{id}"
119
-
120
-
121
- #errlog << {"vmname" => "TODO","status" => exception.message.to_s}
152
+
122
153
 
154
+
123
155
  #@db.execute(sql,errcode,errlog.to_json,id)
124
156
  @db.query(sql)
125
157
  end
126
158
 
127
159
  def get_queued_process_result(id)
128
160
  check_operation_timeout
129
- sql="SELECT #{OPERATION_STATUS_COLUMN},#{OPERATION_RESULT_COLUMN} FROM #{OPERATION_QUEUE_TABLE_NAME} WHERE #{OPERATION_ID_COLUMN}= #{id};"
161
+ #sql="SELECT #{OPERATION_STATUS_COLUMN},QUOTE(#{OPERATION_RESULT_COLUMN}) as operation_result FROM #{OPERATION_QUEUE_TABLE_NAME} WHERE #{OPERATION_ID_COLUMN}= #{id};"
162
+ sql="SELECT #{OPERATION_STATUS_COLUMN},#{OPERATION_RESULT_COLUMN} FROM #{OPERATION_QUEUE_TABLE_NAME} WHERE #{OPERATION_ID_COLUMN}= #{id};"
130
163
  @db.query(sql)
131
164
  end
132
165
 
133
166
  def get_queued_last
134
167
  check_operation_timeout
135
- sql="SELECT #{OPERATION_STATUS_COLUMN},#{OPERATION_RESULT_COLUMN} FROM #{OPERATION_QUEUE_TABLE_NAME};"
168
+ sql="SELECT #{OPERATION_STATUS_COLUMN},#{OPERATION_RESULT_COLUMN} FROM #{OPERATION_QUEUE_TABLE_NAME};"
136
169
  @db.query(sql)
137
170
  end
138
171
 
@@ -141,14 +174,57 @@ module DB
141
174
  sql="DELETE FROM #{OPERATION_QUEUE_TABLE_NAME}"
142
175
  @db.query(sql)
143
176
  end
177
+
178
+ def are_boxes_queued
179
+ result=@db.query("SELECT * FROM #{DOWNLOAD_BOX_TABLE} WHERE #{DOWNLOAD_STATUS_COLUMN} = #{DOWNLOAD_STOP}")
180
+
181
+ result.size!=0
182
+
183
+ end
144
184
 
145
- def add_box_download_info(box_name,box_url)
146
- sql="INSERT INTO #{DOWNLOAD_BOX_TABLE}(#{DOWNLOAD_BOX_COLUMN},#{DOWNLOAD_URL_COLUMN},#{DOWNLOAD_PROGRESS_COLUMN},#{DOWNLOAD_REMAINING_COLUMN},#{DOWNLOAD_STATUS_COLUMN}) VALUES ('#{box_name}','#{box_url}','0%','--:--:--',#{DOWNLOAD_PROCESS})"
185
+ def start_box_download
186
+
187
+ result=@db.query("SELECT * FROM #{DOWNLOAD_BOX_TABLE} WHERE #{DOWNLOAD_STATUS_COLUMN} = #{DOWNLOAD_STOP}")
188
+
189
+
190
+ id_next=result.first["id"]
191
+
192
+
193
+ sql="UPDATE #{DOWNLOAD_BOX_TABLE} SET
194
+ #{DOWNLOAD_PROGRESS_COLUMN}='0%',
195
+ #{DOWNLOAD_REMAINING_COLUMN}='--:--:--',
196
+ #{DOWNLOAD_STATUS_COLUMN}=#{DOWNLOAD_START}
197
+ WHERE #{DOWNLOAD_ID_COLUMN}=#{id_next}"
198
+
147
199
  @db.query(sql)
200
+
201
+ id_next
202
+ end
203
+
204
+ def add_box_download_info(box_name,box_url)
205
+ sql="INSERT INTO #{DOWNLOAD_BOX_TABLE}(#{DOWNLOAD_BOX_COLUMN},#{DOWNLOAD_URL_COLUMN},#{DOWNLOAD_PROGRESS_COLUMN},#{DOWNLOAD_REMAINING_COLUMN},#{DOWNLOAD_STATUS_COLUMN}) VALUES ('#{box_name}','#{box_url}','WAITING','WAITING',#{DOWNLOAD_STOP})"
206
+ @db.query(sql)
207
+
148
208
  last_id=@db.query("SELECT LAST_INSERT_ID() as last")
149
209
  last_id.first["last"]
150
210
  end
151
211
 
212
+ def is_box_downloading
213
+ result=@db.query("SELECT * FROM #{DOWNLOAD_BOX_TABLE} WHERE #{DOWNLOAD_STATUS_COLUMN} = #{DOWNLOAD_START}")
214
+ return false if result.size==0
215
+ return true
216
+ end
217
+
218
+ def get_box_to_download
219
+ result=@db.query("SELECT * FROM #{DOWNLOAD_BOX_TABLE} WHERE #{DOWNLOAD_STATUS_COLUMN} = #{DOWNLOAD_STOP}")
220
+
221
+ ((result.size==0)?nil:result.first)
222
+
223
+
224
+ #id_next=result.first["id"]
225
+ #id_next
226
+ end
227
+
152
228
  def get_box_download
153
229
  sql="SELECT * FROM #{DOWNLOAD_BOX_TABLE}"
154
230
  @db.query(sql)
@@ -165,7 +241,7 @@ module DB
165
241
  end
166
242
 
167
243
  def set_box_download_error(id)
168
- sql="UPDATE #{DOWNLOAD_BOX_TABLE} SET #{DOWNLOAD_STATUS_COLUMN} = #{DOWNLOAD_ERROR}, #{DOWNLOAD_PROGRESS_COLUMN} = 'ERROR' WHERE #{DOWNLOAD_ID_COLUMN}=#{id}"
244
+ sql="UPDATE #{DOWNLOAD_BOX_TABLE} SET #{DOWNLOAD_STATUS_COLUMN} = #{DOWNLOAD_ERROR}, #{DOWNLOAD_PROGRESS_COLUMN} = 'ERROR',#{DOWNLOAD_REMAINING_COLUMN}='ERROR' WHERE #{DOWNLOAD_ID_COLUMN}=#{id}"
169
245
  @db.query(sql)
170
246
  end
171
247
 
@@ -175,13 +251,15 @@ module DB
175
251
  @db.query(sql)
176
252
  end
177
253
 
178
- def add_box_uncompression(box_name,box_url)
179
- sql="INSERT INTO #{DOWNLOAD_BOX_TABLE}(#{DOWNLOAD_BOX_COLUMN},#{DOWNLOAD_URL_COLUMN},#{DOWNLOAD_PROGRESS_COLUMN},#{DOWNLOAD_REMAINING_COLUMN},#{DOWNLOAD_STATUS_COLUMN}) VALUES ('#{box_name}','#{box_url}','Uncompressing','Uncompressing',#{DOWNLOAD_PROCESS})"
254
+ def add_box_uncompression(id)
255
+
256
+ sql="UPDATE #{DOWNLOAD_BOX_TABLE} SET #{DOWNLOAD_PROGRESS_COLUMN}='Uncompressing',#{DOWNLOAD_REMAINING_COLUMN}='Uncompressing',#{DOWNLOAD_STATUS_COLUMN}=#{DOWNLOAD_UNCOMPRESS} WHERE #{DOWNLOAD_ID_COLUMN}=#{id}"
257
+ #sql="INSERT INTO #{DOWNLOAD_BOX_TABLE}(#{DOWNLOAD_BOX_COLUMN},#{DOWNLOAD_URL_COLUMN},#{DOWNLOAD_PROGRESS_COLUMN},#{DOWNLOAD_REMAINING_COLUMN},#{DOWNLOAD_STATUS_COLUMN}) VALUES ('#{box_name}','#{box_url}','Uncompressing','Uncompressing',#{DOWNLOAD_STOP})"
180
258
  #@db.execute(sql,box_name,box_url,DOWNLOAD_PROCESS)
181
259
  @db.query(sql)
182
260
 
183
- last_id=@db.query("SELECT LAST_INSERT_ID() as last")
184
- last_id.first["last"]
261
+ # last_id=@db.query("SELECT LAST_INSERT_ID() as last")
262
+ # last_id.first["last"]
185
263
  end
186
264
 
187
265
  def set_box_uncompression_error(id)
@@ -191,7 +269,7 @@ module DB
191
269
  end
192
270
 
193
271
  def clear_box_uncompression(id)
194
- sql="DELETE FROM #{DOWNLOAD_BOX_TABLE} WHERE #{DOWNLOAD_STATUS_COLUMN}!=#{id}"
272
+ sql="DELETE FROM #{DOWNLOAD_BOX_TABLE} WHERE #{DOWNLOAD_ID_COLUMN}=#{id}"
195
273
  @db.query(sql)
196
274
  end
197
275
 
@@ -262,7 +340,7 @@ module DB
262
340
  DOWNLOAD_ID_COLUMN = 'id'
263
341
  DOWNLOAD_BOX_COLUMN = 'box_name'
264
342
  DOWNLOAD_URL_COLUMN = 'box_url'
265
- DOWNLOAD_STATUS_COLUMN = 'download_status'
343
+ DOWNLOAD_STATUS_COLUMN = 'download_status'
266
344
  DOWNLOAD_PROGRESS_COLUMN = 'download_progress'
267
345
  DOWNLOAD_REMAINING_COLUMN = 'download_remaining'
268
346
  CONFIG_DBUSER = 'dbuser'
@@ -317,7 +395,7 @@ module DB
317
395
  `#{DOWNLOAD_URL_COLUMN}` text NOT NULL,
318
396
  `#{DOWNLOAD_PROGRESS_COLUMN}` VARCHAR(10),
319
397
  `#{DOWNLOAD_STATUS_COLUMN}` int(11) NOT NULL,
320
- `#{DOWNLOAD_REMAINING_COLUMN}` VARCHAR(10),
398
+ `#{DOWNLOAD_REMAINING_COLUMN}` VARCHAR(10),
321
399
  PRIMARY KEY (`#{DOWNLOAD_ID_COLUMN}`)
322
400
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;")
323
401
 
@@ -32,8 +32,7 @@ module Vagrant
32
32
  class ExceptionMutator < RestException
33
33
  include Vagrant::Errors
34
34
  def initialize(exception)
35
- if (exception.is_a?(Vagrant::Errors::VagrantError))
36
- puts exception.class
35
+ if (exception.is_a?(Vagrant::Errors::VagrantError))
37
36
  case exception
38
37
  when BaseVMNotFound,
39
38
  BoxNotFound,
@@ -9,29 +9,26 @@ module Vagrant
9
9
  START_COMMAND = "start"
10
10
  STOP_COMMAND = "stop"
11
11
  def initialize(argv, env)
12
- super
12
+ super
13
13
 
14
- @main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
15
- @subcommands = Vagrant::Registry.new
16
-
17
- @subcommands.register(:start) do
18
- require File.expand_path("../nodeserverstart", __FILE__)
19
- NodeServerStart
20
- end
21
-
22
- @subcommands.register(:stop) do
23
- require File.expand_path("../nodeserverstop", __FILE__)
24
- NodeServerStop
25
- end
26
-
27
- @subcommands.register(:passwd) do
28
- require File.expand_path("../nodeserverpasswd", __FILE__)
29
- NodeServerPasswd
30
- end
14
+ @main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
15
+ @subcommands = Vagrant::Registry.new
16
+
17
+ @subcommands.register(:start) do
18
+ require File.expand_path("../nodeserverstart", __FILE__)
19
+ NodeServerStart
20
+ end
21
+
22
+ @subcommands.register(:stop) do
23
+ require File.expand_path("../nodeserverstop", __FILE__)
24
+ NodeServerStop
25
+ end
26
+
27
+ @subcommands.register(:passwd) do
28
+ require File.expand_path("../nodeserverpasswd", __FILE__)
29
+ NodeServerPasswd
30
+ end
31
31
 
32
- # puts "MAIN ARGS #{@main_args}"
33
- # puts "SUB COMMAND #{@sub_command}"
34
- # puts "SUB ARGS #{@sub_args}"
35
32
  end
36
33
 
37
34
  def execute
@@ -47,17 +44,7 @@ module Vagrant
47
44
 
48
45
  command_class.new(@sub_args, @env).execute
49
46
 
50
- # case @sub_command
51
- # when START_COMMAND then
52
- # @env.lock_path contiene la ruta al fichero de lock
53
- #incluyendo el nombre de este, por lo tanto se pasa
54
- #únicamente la ruta
55
- # ServerAPI::ServerManager.run(File.dirname(@env.lock_path))
56
- # when STOP_COMMAND then
57
- # ServerAPI::ServerManager.stop(File.dirname(@env.lock_path))
58
- # else
59
- # return help
60
- # end
47
+
61
48
  0
62
49
  end
63
50
 
@@ -77,24 +77,7 @@ module Vagrant
77
77
  print "Can't connect to mysql with current configuration, please review provided credentials. Please execute again this command to reconfigure"
78
78
  DB::DBManager.delete_config_file(@env.data_dir)
79
79
  end
80
-
81
- # #if (exception.class==Mysql2::Error)
82
- # if (i<1)
83
- # puts "Configuring database connection "
84
- # puts "Do you let us create "
85
- # puts "Insert privilege database user:"
86
- # user=STDIN.noecho(&:gets).chomp
87
- # print "\n"
88
- # print "Insert privilege database password:"
89
- # password=STDIN.noecho(&:gets).chomp
90
- # print "\n"
91
- # print "Insert database name:"
92
- # database=STDIN.noecho(&:gets).chomp
93
- # print "\n"
94
- # DB::DBManager.create_config_file(@env.data_dir,'localhost',database,user,password)
95
- # i=i+1
96
- # retry
97
- # end
80
+
98
81
  end
99
82
 
100
83
  if (!db.nil?)
@@ -136,9 +119,7 @@ module Vagrant
136
119
 
137
120
 
138
121
 
139
- # else
140
- # puts "INTRODUCIDA EN TERMINAL"
141
- # end
122
+
142
123
 
143
124
 
144
125
 
@@ -15,7 +15,9 @@ module Vagrant
15
15
  # options[:password] = b
16
16
  # end
17
17
  end
18
-
18
+
19
+ raise Errors::NoEnvironmentError if !@env.root_path
20
+
19
21
  argv = parse_options(opts)
20
22
  return if !argv
21
23
  raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length > 1
@@ -42,6 +42,8 @@ module Vagrant
42
42
  :AccessLog => access_log
43
43
  }
44
44
 
45
+
46
+
45
47
 
46
48
  #begin
47
49
  server = WEBrick::HTTPServer.new(options)
@@ -52,6 +54,8 @@ module Vagrant
52
54
 
53
55
  trap("USR1") {
54
56
 
57
+ puts "SERVER.RB RESTARTING SERVER"
58
+
55
59
  #Stopping server
56
60
  server.shutdown
57
61
 
@@ -64,7 +64,9 @@ module Vagrant
64
64
 
65
65
  # Setup the proc that'll receive the real-time data from
66
66
  # the downloader.
67
- last_id=@db.add_box_download_info(@box_name,@source)
67
+ last_id = @db.start_box_download
68
+
69
+ #last_id=@db.add_box_download_info(@box_name,@source)
68
70
 
69
71
  comienzo = Time.now();
70
72
 
@@ -139,12 +141,18 @@ module Vagrant
139
141
  end
140
142
 
141
143
 
142
- if ((!interrupted) && (result.exit_code==0))
143
- # @db.update_box_download_info(last_id,"100%","--:--:--")
144
- @db.delete_box_download(last_id)
145
- else
144
+ # if ((!interrupted) && (result.exit_code==0))
145
+ # # @db.update_box_download_info(last_id,"100%","--:--:--")
146
+ # @db.delete_box_download(last_id)
147
+ # else
148
+ # @db.set_box_download_error(last_id)
149
+ # end
150
+
151
+ if (interrupted || (result.exit_code!=0))
146
152
  @db.set_box_download_error(last_id)
147
153
  end
154
+
155
+
148
156
 
149
157
 
150
158
  # If the download was interrupted, then raise a specific error
@@ -0,0 +1,73 @@
1
+
2
+ require 'pp'
3
+
4
+ module Vagrant
5
+ module Node
6
+ module Util
7
+
8
+ class HwFunctions
9
+ MAJOR_SATA = 8
10
+ MAJOR_IDE = 3
11
+ MAJOR_FIELD = 0
12
+ MINOR_FIELD = 1
13
+ NAME_FIELD = 2
14
+ def self.get_mem_values
15
+
16
+ mem = []
17
+
18
+ mem_file = "/proc/meminfo"
19
+ mem_values = IO.readlines(mem_file)
20
+
21
+
22
+ mem[0] = (mem_values[0].split[1].to_i / 1024.0).round(2) #Converting to MB
23
+ mem[1] = (mem_values[1].split[1].to_i / 1024.0).round(2) #Converting to MB
24
+
25
+ mem
26
+
27
+ end
28
+
29
+ def self.get_disk_values
30
+
31
+ disk = []
32
+
33
+ stat_file = "/proc/diskstats"
34
+
35
+
36
+ IO.readlines(stat_file).each do |line|
37
+ major_number = line.split[MAJOR_FIELD].to_i
38
+ minor_number = line.split[MINOR_FIELD].to_i
39
+
40
+ if (((major_number==MAJOR_SATA) || (major_number==MAJOR_IDE)) && minor_number!=0)
41
+ #In this point you have all single disk partitions
42
+ #But we only want mounted ones
43
+ resout= `df -h`
44
+ resout.split("\n").each do |line1|
45
+ if (line1.split[0]=="/dev/"+line.split[NAME_FIELD])
46
+ entry =[]
47
+ entry[0] = line.split[NAME_FIELD]
48
+ entry[1] = line1.split[1]
49
+ entry[2] = line1.split[3]
50
+ entry[3] = line1.split[4]
51
+ disk << {:partition=>"/dev/"+line.split[NAME_FIELD],
52
+ :total=>line1.split[1],
53
+ :free=>line1.split[3],
54
+ :freepercent=>line1.split[4]}
55
+ # disk.push entry
56
+ end
57
+ end
58
+
59
+
60
+ end
61
+ end
62
+
63
+
64
+
65
+ disk
66
+
67
+ end
68
+
69
+ end
70
+
71
+ end
72
+ end
73
+ end