about summary refs log tree commit homepage
path: root/lib/mogilefs/paths_size.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mogilefs/paths_size.rb')
-rw-r--r--lib/mogilefs/paths_size.rb24
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/mogilefs/paths_size.rb b/lib/mogilefs/paths_size.rb
new file mode 100644
index 0000000..ba61f9e
--- /dev/null
+++ b/lib/mogilefs/paths_size.rb
@@ -0,0 +1,24 @@
+# -*- encoding: binary -*-
+# This is only a hack for old MogileFS installs that didn't have file_info
+require "net/http"
+require "uri"
+module MogileFS::PathsSize
+  def self.call(paths)
+    errors = {}
+    paths.each do |path|
+      uri = URI.parse(path)
+      begin
+        case r = Net::HTTP.start(uri.host, uri.port) { |x| x.head(uri.path) }
+        when Net::HTTPOK
+          return r["Content-Length"].to_i
+        else
+          errors[path] = r
+        end
+      rescue => err
+        errors[path] = err
+      end
+    end
+    errors = errors.map { |path,err| "#{path} - #{err.message} (#{err.class})" }
+    raise MogileFS::Error, "all paths failed with HEAD: #{errors.join(', ')}"
+  end
+end