vayacondios-server 0.2.11 → 0.3.0

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 (142) hide show
  1. data/.gitignore +3 -1
  2. data/.travis.yml +2 -0
  3. data/Gemfile +15 -9
  4. data/LICENSE.md +2 -6
  5. data/Procfile +1 -1
  6. data/README.md +656 -111
  7. data/Rakefile +89 -6
  8. data/bin/vcd +10 -0
  9. data/bin/vcd-server +8 -0
  10. data/config/database.yml +6 -0
  11. data/config/spec.example.yml +18 -0
  12. data/config/vayacondios.example.yml +15 -0
  13. data/config/vcd-server.rb +37 -0
  14. data/examples/configuration.rb +56 -0
  15. data/examples/event_stream.rb +19 -0
  16. data/examples/simple.rb +61 -0
  17. data/features/event.feature +319 -0
  18. data/features/events.feature +208 -0
  19. data/features/stash.feature +840 -0
  20. data/features/stashes.feature +492 -0
  21. data/features/step_definitions/stash_steps.rb +113 -0
  22. data/features/stream.feature +30 -0
  23. data/features/support/em.rb +14 -0
  24. data/features/support/env.rb +13 -0
  25. data/lib/vayacondios/configuration.rb +63 -0
  26. data/lib/vayacondios/server/api.rb +126 -0
  27. data/lib/vayacondios/server/api_options.rb +56 -0
  28. data/lib/vayacondios/server/configuration.rb +23 -0
  29. data/lib/vayacondios/server/driver.rb +71 -0
  30. data/lib/vayacondios/server/drivers/mongo.rb +126 -0
  31. data/lib/vayacondios/server/handlers/document_handler.rb +81 -0
  32. data/lib/vayacondios/server/handlers/event_handler.rb +31 -26
  33. data/lib/vayacondios/server/handlers/events_handler.rb +31 -0
  34. data/lib/vayacondios/server/handlers/stash_handler.rb +69 -0
  35. data/lib/vayacondios/server/handlers/stashes_handler.rb +49 -0
  36. data/lib/vayacondios/server/handlers/stream_handler.rb +39 -0
  37. data/lib/vayacondios/server/models/document.rb +87 -0
  38. data/lib/vayacondios/server/models/event.rb +198 -0
  39. data/lib/vayacondios/server/models/stash.rb +100 -0
  40. data/lib/vayacondios/server.rb +35 -0
  41. data/lib/vayacondios-server.rb +19 -13
  42. data/lib/vayacondios.rb +22 -0
  43. data/pom.xml +124 -4
  44. data/spec/configuration_spec.rb +41 -0
  45. data/spec/server/api_options_spec.rb +32 -0
  46. data/spec/server/api_spec.rb +279 -0
  47. data/spec/server/configuration_spec.rb +27 -0
  48. data/spec/server/drivers/mongo_spec.rb +107 -0
  49. data/spec/server/handlers/event_handler_spec.rb +62 -0
  50. data/spec/server/handlers/events_handler_spec.rb +51 -0
  51. data/spec/server/handlers/stash_handler_spec.rb +68 -0
  52. data/spec/server/handlers/stashes_handler_spec.rb +50 -0
  53. data/spec/server/handlers/stream_handler_spec.rb +5 -0
  54. data/spec/server/models/document_spec.rb +9 -0
  55. data/spec/server/models/event_spec.rb +185 -0
  56. data/spec/server/models/stash_spec.rb +95 -0
  57. data/spec/spec_helper.rb +23 -3
  58. data/spec/support/database_helper.rb +42 -0
  59. data/spec/support/log_helper.rb +19 -0
  60. data/spec/support/shared_context_for_events.rb +22 -0
  61. data/spec/support/shared_context_for_stashes.rb +24 -0
  62. data/spec/support/shared_examples_for_handlers.rb +32 -0
  63. data/src/main/java/com/infochimps/vayacondios/BaseClient.java +342 -0
  64. data/src/main/java/com/infochimps/vayacondios/HTTPClient.java +426 -0
  65. data/src/main/java/com/infochimps/vayacondios/VayacondiosClient.java +487 -65
  66. data/src/main/java/com/infochimps/vayacondios/test/IntegrationTest.java +3 -0
  67. data/src/test/java/com/infochimps/vayacondios/BaseClientTest.java +50 -0
  68. data/src/test/java/com/infochimps/vayacondios/HTTPClientIT.java +267 -0
  69. data/vayacondios-server.gemspec +9 -9
  70. metadata +127 -122
  71. checksums.yaml +0 -15
  72. data/.rspec +0 -2
  73. data/.yardopts +0 -10
  74. data/Guardfile +0 -41
  75. data/app/http_shim.rb +0 -71
  76. data/bin/vcd.sh +0 -27
  77. data/config/http_shim.rb +0 -43
  78. data/config/vayacondios.example.yaml +0 -7
  79. data/config/vayacondios.yaml +0 -7
  80. data/examples/java/ItemSetTest.java +0 -76
  81. data/lib/tasks/publish.rake +0 -23
  82. data/lib/tasks/spec.rake +0 -11
  83. data/lib/tasks/yard.rake +0 -2
  84. data/lib/vayacondios/client/config.rb +0 -7
  85. data/lib/vayacondios/client/configliere.rb +0 -38
  86. data/lib/vayacondios/client/cube_client.rb +0 -39
  87. data/lib/vayacondios/client/http_client.rb +0 -49
  88. data/lib/vayacondios/client/itemset.rb +0 -130
  89. data/lib/vayacondios/client/legacy_switch.rb +0 -43
  90. data/lib/vayacondios/client/notifier.rb +0 -123
  91. data/lib/vayacondios/client/zabbix_client.rb +0 -148
  92. data/lib/vayacondios/legacy_switch.rb +0 -43
  93. data/lib/vayacondios/server/errors/bad_request.rb +0 -6
  94. data/lib/vayacondios/server/errors/not_found.rb +0 -6
  95. data/lib/vayacondios/server/handlers/config_handler.rb +0 -32
  96. data/lib/vayacondios/server/handlers/itemset_handler.rb +0 -60
  97. data/lib/vayacondios/server/legacy_switch.rb +0 -43
  98. data/lib/vayacondios/server/model/config_document.rb +0 -89
  99. data/lib/vayacondios/server/model/document.rb +0 -25
  100. data/lib/vayacondios/server/model/event_document.rb +0 -94
  101. data/lib/vayacondios/server/model/itemset_document.rb +0 -126
  102. data/lib/vayacondios/server/rack/extract_methods.rb +0 -35
  103. data/lib/vayacondios/server/rack/jsonize.rb +0 -43
  104. data/lib/vayacondios/server/rack/params.rb +0 -50
  105. data/lib/vayacondios/server/rack/path.rb +0 -23
  106. data/lib/vayacondios/server/rack/path_validation.rb +0 -22
  107. data/lib/vayacondios/version.rb +0 -3
  108. data/lib/vayacondios-client.rb +0 -22
  109. data/scripts/hadoop_monitor/configurable.rb +0 -66
  110. data/scripts/hadoop_monitor/hadoop_attempt_scraper.rb +0 -45
  111. data/scripts/hadoop_monitor/hadoop_client.rb +0 -273
  112. data/scripts/hadoop_monitor/hadoop_monitor.rb +0 -101
  113. data/scripts/hadoop_monitor/hadoopable.rb +0 -65
  114. data/scripts/hadoop_monitor/machine_monitor.rb +0 -115
  115. data/scripts/s3_cataloger/buckets +0 -33
  116. data/scripts/s3_cataloger/foreach_bucket +0 -88
  117. data/scripts/s3_cataloger/parse_ls.py +0 -391
  118. data/spec/client/itemset_legacy_spec.rb +0 -55
  119. data/spec/client/itemset_spec.rb +0 -60
  120. data/spec/client/notifier_spec.rb +0 -120
  121. data/spec/server/config_spec.rb +0 -113
  122. data/spec/server/event_spec.rb +0 -103
  123. data/spec/server/itemset_legacy_spec.rb +0 -320
  124. data/spec/server/itemset_spec.rb +0 -317
  125. data/spec/server/rack/extract_methods_spec.rb +0 -60
  126. data/spec/server/rack/path_spec.rb +0 -36
  127. data/spec/server/rack/path_validation_spec.rb +0 -22
  128. data/spec/server/server_spec.rb +0 -20
  129. data/spec/support/mongo_cleaner.rb +0 -32
  130. data/src/main/java/ItemSetTest.java +0 -76
  131. data/src/main/java/com/infochimps/util/CurrentClass.java +0 -26
  132. data/src/main/java/com/infochimps/util/DebugUtil.java +0 -38
  133. data/src/main/java/com/infochimps/util/HttpHelper.java +0 -181
  134. data/src/main/java/com/infochimps/vayacondios/ItemSets.java +0 -373
  135. data/src/main/java/com/infochimps/vayacondios/LinkToVCD.java +0 -18
  136. data/src/main/java/com/infochimps/vayacondios/MemoryVCDShim.java +0 -84
  137. data/src/main/java/com/infochimps/vayacondios/Organization.java +0 -62
  138. data/src/main/java/com/infochimps/vayacondios/PathBuilder.java +0 -13
  139. data/src/main/java/com/infochimps/vayacondios/StandardVCDLink.java +0 -218
  140. data/src/main/java/com/infochimps/vayacondios/VCDIntegrationTest.java +0 -108
  141. data/src/test/java/com/infochimps/vayacondios/TestVayacondiosInMemory.java +0 -78
  142. data/vayacondios-client.gemspec +0 -25
@@ -1,36 +0,0 @@
1
- require 'spec_helper'
2
- require 'vayacondios/server/rack/path'
3
-
4
- describe Vayacondios::Rack::Path do
5
- let(:env) { { 'CONTENT_TYPE' => 'application/x-www-form-urlencoded; charset=utf-8' } }
6
- let(:app) { mock('app').as_null_object }
7
- subject { described_class.new(app) }
8
-
9
- it 'adds a key in env for :vayacondios_path' do
10
- app.should_receive(:call).with do |app_env|
11
- app_env.keys.should include(:vayacondios_path)
12
- end
13
- subject.call(env)
14
- end
15
-
16
- context 'parse_path' do
17
- it 'returns nil if the path is unparseable' do
18
- subject.parse_path('/what/the:f/happened&here?').should be nil
19
- end
20
- it 'parses organizations and types correctly' do
21
- subject.parse_path('/v1/infochimps/event').should include(organization: 'infochimps', type: 'event')
22
- end
23
-
24
- it 'parses topics correctly' do
25
- subject.parse_path('/v1/infochimps/config/foo').should include(topic: 'foo')
26
- end
27
-
28
- it 'parses ids correctly' do
29
- subject.parse_path('/v1/infochimps/itemset/bar/1').should include(id: '1')
30
- end
31
-
32
- it 'parses formats correctly' do
33
- subject.parse_path('/v1/infochimps/event/baz/1.json').should include(format: 'json')
34
- end
35
- end
36
- end
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
- require 'vayacondios/server/rack/path_validation'
3
-
4
- describe Vayacondios::Rack::PathValidation do
5
- let(:env){ { 'CONTENT_TYPE' => 'application/x-www-form-urlencoded; charset=utf-8' } }
6
- let(:app){ mock('app').as_null_object }
7
- subject { described_class.new(app) }
8
-
9
- it 'sets @opts when created' do
10
- subject.instance_variable_get('@opts').should == {}
11
- end
12
-
13
- it 'returns a bad request when :vayacondios_path does not exist' do
14
- subject.call(env).should == [400, {}, '{"error":"Bad Request. Format path is <host>/v1/<org>/event/<topic>"}']
15
- end
16
-
17
- context 'valid_paths?' do
18
- it 'validates the :vayacondios_path' do
19
- subject.valid_paths?({}).should be_true
20
- end
21
- end
22
- end
@@ -1,20 +0,0 @@
1
- require 'spec_helper'
2
-
3
- require 'multi_json'
4
-
5
- require File.join(File.dirname(__FILE__), '../../', 'app/http_shim')
6
-
7
- describe HttpShim do
8
- include Goliath::TestHelper
9
-
10
- let(:err) { Proc.new{ |c| fail "HTTP Request Failed #{c.response}" } }
11
-
12
- it "responds to requests" do
13
- with_api(HttpShim) do |api|
14
- get_request({}, err) do |c|
15
- c.response_header.status.should == 400
16
- MultiJson.load(c.response).should eql({"error" => "Bad Request. Format path is <host>/v1/<org>/event/<topic>"})
17
- end
18
- end
19
- end
20
- end
@@ -1,32 +0,0 @@
1
- require 'mongo'
2
- require 'configliere'
3
-
4
- Settings.define :app_name, :default => 'vayacondios', :description => 'Name to key on for tracer stats, statsd metrics, etc.'
5
- Settings.define 'mongo.host', :default => 'localhost', :description => 'Mongo hostname'
6
- Settings.define 'mongo.port', :default => '27017', :description => 'Mongo port'
7
-
8
- Settings.read(File.join File.dirname(__FILE__), '..', '..', 'config', 'vayacondios.yaml')
9
- Settings.resolve!
10
-
11
- def get_mongo_db &block
12
- fail unless block
13
- conn = Mongo::Connection.new(Settings[:mongo][:host],Settings[:mongo][:port])
14
- yield conn.db(Settings[:mongo][:database])
15
- conn.close
16
- end
17
-
18
- def clean_mongo
19
- get_mongo_db do |db|
20
- db.collections.select {|c| c.name !~ /system/ }.each { |c| c.drop }
21
- end
22
- end
23
-
24
- RSpec.configure do |config|
25
- config.before :each do
26
- clean_mongo
27
- end
28
-
29
- config.after :all do
30
- clean_mongo
31
- end
32
- end
@@ -1,76 +0,0 @@
1
- import com.infochimps.vayacondios.Organization;
2
- import com.infochimps.vayacondios.VayacondiosClient;
3
- import com.infochimps.vayacondios.ItemSets;
4
- import static com.infochimps.vayacondios.ItemSets.Item;
5
- import static com.infochimps.vayacondios.ItemSets.ItemSet;
6
-
7
- import java.io.*;
8
- import java.util.*;
9
-
10
- public class ItemSetTest {
11
- private static final int VCD_PORT = 8000;
12
-
13
- public static void main(String argv[]) throws IOException {
14
- // Instantiate a new Vayacondios client.
15
- VayacondiosClient client = new VayacondiosClient("localhost", VCD_PORT);
16
-
17
- // Organizations can allow for testing and multiple environments
18
- // (staging, development).
19
- Organization org = client.organization("test");
20
-
21
- // At the moment, only the itemsets protocol is supported via a
22
- // Java API.
23
- ItemSets isets = org.itemsets();
24
-
25
- List<Item> foobar = Arrays.asList(new Item("foo"), new Item("bar"));
26
-
27
- // All of the following are equivalent ways to clobber the itemset
28
- // at topic my_topic and id my_id, replacing it with the items
29
- // "foo" and "bar." The first and second exist to avoid
30
- // instantiating new objects repeatedly when a code path must
31
- // access many different topics and ids.
32
- isets .create("my_topic", "my_id", foobar);
33
- isets.topic("my_topic") .create( "my_id", foobar);
34
- isets.topic("my_topic").itemSet("my_id").create( foobar);
35
-
36
- List<Item> fetched;
37
-
38
- // Similarly, these are all equivalent ways to fetch items.
39
- fetched = isets .fetch("my_topic", "my_id");
40
- fetched = isets.topic("my_topic") .fetch( "my_id");
41
- fetched = isets.topic("my_topic").itemSet("my_id").fetch( );
42
-
43
- ItemSet iset = isets.topic("my_topic").itemSet("my_id");
44
-
45
- // foo and bar will be printed, along with their types: STRING
46
- System.out.println("fetched items: " + fetched);
47
-
48
- List<Item> bazqux = Arrays.asList(new Item("baz"), new Item("qux"));
49
-
50
- // Updating an itemset with a list of items ensures the presence
51
- // in the itemset of all of the items in the specified list.
52
- isets .update("my_topic", "my_id", bazqux);
53
- isets.topic("my_topic") .update( "my_id", bazqux);
54
- isets.topic("my_topic").itemSet("my_id").update( bazqux);
55
-
56
- // foo, bar, baz, and qux will all be printed.
57
- System.out.println("after update: " + iset.fetch());
58
-
59
- List<Item> barbaz = Arrays.asList(new Item("bar"), new Item("baz"));
60
-
61
- // Updating an itemset with a list of items ensures the presence
62
- // in the itemset of all of the items in the specified list.
63
- isets .remove("my_topic", "my_id", barbaz);
64
- isets.topic("my_topic") .remove( "my_id", barbaz);
65
- isets.topic("my_topic").itemSet("my_id").remove( barbaz);
66
-
67
- // foo and qux will now be printed
68
- System.out.println("after removing: " + iset.fetch());
69
-
70
- // Create an empty itemset to effectively delete it.
71
- iset.create(Collections.EMPTY_LIST);
72
-
73
- // foo and qux will now be printed
74
- System.out.println("after deletion: " + iset.fetch());
75
- }
76
- }
@@ -1,26 +0,0 @@
1
- package com.infochimps.util;
2
-
3
- import org.slf4j.Logger;
4
- import org.slf4j.LoggerFactory;
5
-
6
- public class CurrentClass extends SecurityManager {
7
- private static CurrentClass SINGLETON = new CurrentClass();
8
-
9
- // must call this directly. behavior is dependent on call stack
10
- public static Class get() {
11
- return SINGLETON.getCurrentClass();
12
- }
13
-
14
- // must call this directly. behavior is dependent on call stack
15
- public static Logger getLogger() {
16
- return LoggerFactory.getLogger(SINGLETON.getCurrentClass(2));
17
- }
18
-
19
- private Class getCurrentClass(int i) {
20
- return getClassContext()[i];
21
- }
22
-
23
- private Class getCurrentClass() {
24
- return getCurrentClass(3);
25
- }
26
- }
@@ -1,38 +0,0 @@
1
- package com.infochimps.util;
2
-
3
- import java.net.InetSocketAddress;
4
-
5
- import javax.net.ssl.HostnameVerifier;
6
- import javax.net.ssl.HttpsURLConnection;
7
- import javax.net.ssl.SSLContext;
8
- import javax.net.ssl.SSLSession;
9
- import javax.net.ssl.TrustManager;
10
- import javax.net.ssl.X509TrustManager;
11
-
12
- import java.security.cert.X509Certificate;
13
- import java.security.SecureRandom;
14
- import java.security.GeneralSecurityException;
15
-
16
- import java.net.Proxy;
17
-
18
- public class DebugUtil {
19
- public static Proxy useCharles() {
20
- trustAllCerts();
21
- return new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8888));
22
- }
23
-
24
- public static void trustAllCerts() {
25
- try {
26
- SSLContext sc = SSLContext.getInstance("SSL");
27
- sc.init(null,
28
- new TrustManager[] {
29
- new X509TrustManager() {
30
- public X509Certificate[] getAcceptedIssuers() { return null;}
31
- public void checkClientTrusted(X509Certificate[] certs, String authType) {}
32
- public void checkServerTrusted(X509Certificate[] certs, String authType) {}
33
- }
34
- }, new SecureRandom());
35
- HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
36
- } catch (GeneralSecurityException e) {}
37
- }
38
- }
@@ -1,181 +0,0 @@
1
- package com.infochimps.util;
2
-
3
- import java.io.BufferedReader;
4
- import java.io.InputStream;
5
- import java.io.InputStreamReader;
6
- import java.io.IOException;
7
- import java.net.HttpURLConnection;
8
- import java.net.MalformedURLException;
9
- import java.net.URL;
10
- import java.net.URLDecoder;
11
- import java.nio.charset.Charset;
12
- import java.util.HashMap;
13
- import java.util.zip.GZIPInputStream;
14
-
15
- import org.apache.commons.codec.binary.Base64;
16
-
17
- import org.slf4j.Logger;
18
- import org.slf4j.LoggerFactory;
19
-
20
- import static java.util.Map.Entry;
21
-
22
- public class HttpHelper {
23
- private static final Base64 BASE64 = new Base64();
24
- private static final boolean USE_CHARLES = false;
25
-
26
- // opens or returns a null reader
27
- public static BufferedReader openOrNull(Logger log,
28
- String urlString,
29
- Charset inputCharset) {
30
- return openOrNull(log, urlString, inputCharset, 0);
31
- }
32
-
33
- // opens or returns a null reader
34
- public static BufferedReader openOrNull(Logger log,
35
- String urlString,
36
- Charset inputCharset,
37
- int timeout) {
38
- try { return open(log, urlString, inputCharset, timeout); }
39
- catch (IOException e) {
40
- log.warn("Got an exception trying to open {}: {}", urlString, e);
41
- return null;
42
- }
43
- }
44
-
45
- //----------------------------------------------------------------------------
46
-
47
- public static BufferedReader open(Logger log,
48
- String urlString,
49
- Charset inputCharset) throws IOException {
50
- return open(log, urlString, inputCharset, 0);
51
- }
52
-
53
- public static BufferedReader open(Logger log,
54
- String urlString,
55
- HashMap<String,String> extraHeaders,
56
- Charset inputCharset) throws IOException {
57
- return open(log, urlString, extraHeaders, inputCharset, 0);
58
- }
59
-
60
- public static BufferedReader open(Logger log,
61
- String urlString,
62
- Charset inputCharset,
63
- int timeout) throws IOException {
64
- HttpURLConnection con = getConnection(urlString, log, timeout);
65
- return getReader(con, log, inputCharset);
66
- }
67
-
68
- public static BufferedReader open(Logger log,
69
- String urlString,
70
- HashMap<String,String> extraHeaders,
71
- Charset inputCharset,
72
- int timeout) throws IOException {
73
-
74
- HttpURLConnection con = getConnection(urlString, log, timeout);
75
- for (Entry<String,String> header : extraHeaders.entrySet())
76
- con.setRequestProperty(header.getKey(), header.getValue());
77
- return getReader(con, log, inputCharset);
78
- }
79
-
80
- //----------------------------------------------------------------------------
81
-
82
- public static InputStream openStream(Logger log,
83
- String urlString) throws IOException {
84
- return openStream(log, urlString, 0);
85
- }
86
-
87
- public static InputStream openStream(Logger log,
88
- String urlString,
89
- HashMap<String,String> extraHeaders)
90
- throws IOException {
91
- return openStream(log, urlString, extraHeaders, 0);
92
- }
93
-
94
- public static InputStream openStream(Logger log,
95
- String urlString,
96
- int timeout) throws IOException {
97
- HttpURLConnection con = getConnection(urlString, log, timeout);
98
- return getStream(con, log);
99
- }
100
-
101
- public static InputStream openStream(Logger log,
102
- String urlString,
103
- HashMap<String,String> extraHeaders,
104
- int timeout) throws IOException {
105
-
106
- HttpURLConnection con = getConnection(urlString, log, timeout);
107
- for (Entry<String,String> header : extraHeaders.entrySet())
108
- con.setRequestProperty(header.getKey(), header.getValue());
109
- return getStream(con, log);
110
- }
111
-
112
- //----------------------------------------------------------------------------
113
-
114
- private static HttpURLConnection getConnection(String urlString,
115
- Logger log,
116
- int timeout)
117
- throws IOException {
118
- URL url = null;
119
- try { url = new URL(urlString); }
120
- catch (MalformedURLException e) {
121
- log.warn("malformed URL: {}", url);
122
- throw new IOException(e);
123
- }
124
-
125
- HttpURLConnection con = (HttpURLConnection)(USE_CHARLES ?
126
- url.openConnection(DebugUtil.useCharles()) :
127
- url.openConnection());
128
-
129
- String userInfo = url.getUserInfo();
130
- if (userInfo != null) {
131
- userInfo = URLDecoder.decode(userInfo, "US-ASCII");
132
- con.setRequestProperty("Authorization", "Basic " + new String(BASE64.encodeBase64(userInfo.getBytes())));
133
- }
134
- con.setRequestProperty("Accept-Encoding", "gzip,deflate");
135
- if (timeout != 0) con.setReadTimeout(timeout);
136
- return con;
137
- }
138
-
139
- private static BufferedReader getReader(HttpURLConnection con,
140
- Logger log,
141
- Charset inputCharset) throws IOException {
142
- BufferedReader reader =
143
- new BufferedReader(
144
- new InputStreamReader(getStream(con, log), inputCharset));
145
-
146
- log.debug("successfully opened connection to {} with character encoding {}",
147
- con.getURL().toString(),
148
- inputCharset);
149
-
150
- return reader;
151
- }
152
-
153
- private static InputStream getStream(HttpURLConnection con,
154
- Logger log) throws IOException {
155
- InputStream in;
156
- try { in = con.getInputStream(); }
157
- catch (IOException e) {
158
- // Some HTTP responses will raise an exception, but the
159
- // useful information is in the error stream.
160
-
161
- log.warn("Exception opening {}", con.getURL().toString());
162
-
163
- InputStream errorStream = con.getErrorStream();
164
- if (errorStream != null) {
165
- BufferedReader r = new BufferedReader(new InputStreamReader(errorStream));
166
- try { for (String line; (line = r.readLine()) != null; log.error(line)); }
167
- catch (IOException nested_exc) {
168
- log.error("Got an exception in the exception handler: {}", nested_exc);
169
- throw e;
170
- }
171
- }
172
- throw e;
173
- }
174
-
175
- String encoding = con.getContentEncoding();
176
- log.debug("Got HTTP stream with content encoding type '" + encoding + "'");
177
-
178
- return (encoding != null && encoding.equals("gzip")) ?
179
- new GZIPInputStream(in) : in;
180
- }
181
- }