Add logging.
[sonitus.git] / src / main / java / net / pterodactylus / sonitus / data / Pipeline.java
index d9efcae..4e6a457 100644 (file)
@@ -35,6 +35,7 @@ import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableMultimap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Multimap;
+import com.google.common.util.concurrent.MoreExecutors;
 
 /**
  * A pipeline is responsible for streaming audio data from a {@link Source} to
@@ -234,7 +235,7 @@ public class Pipeline {
                        this.source = source;
                        this.sinks = sinks;
                        if (sinks.size() == 1) {
-                               executorService = Executors.newSingleThreadExecutor();
+                               executorService = MoreExecutors.sameThreadExecutor();
                        } else {
                                executorService = Executors.newCachedThreadPool();
                        }
@@ -260,7 +261,14 @@ public class Pipeline {
                                try {
                                        final Metadata lastMetadata = firstMetadata;
                                        final Metadata metadata = firstMetadata = source.metadata();
-                                       final byte[] buffer = source.get(4096);
+                                       final byte[] buffer;
+                                       try {
+                                               logger.finest(String.format("Getting %d bytes from %s...", 4096, source));
+                                               buffer = source.get(4096);
+                                               logger.finest(String.format("Got %d bytes from %s.", buffer.length, source));
+                                       } catch (IOException ioe1) {
+                                               throw new IOException(String.format("I/O error while reading from %s.", source), ioe1);
+                                       }
                                        List<Future<Void>> futures = executorService.invokeAll(FluentIterable.from(sinks).transform(new Function<Sink, Callable<Void>>() {
 
                                                @Override
@@ -272,7 +280,13 @@ public class Pipeline {
                                                                        if (!metadata.equals(lastMetadata)) {
                                                                                sink.metadataUpdated(metadata);
                                                                        }
-                                                                       sink.process(buffer);
+                                                                       try {
+                                                                               logger.finest(String.format("Sending %d bytes to %s.", buffer.length, sink));
+                                                                               sink.process(buffer);
+                                                                               logger.finest(String.format("Sent %d bytes to %s.", buffer.length, sink));
+                                                                       } catch (IOException ioe1) {
+                                                                               throw new IOException(String.format("I/O error while writing to %s", sink), ioe1);
+                                                                       }
                                                                        return null;
                                                                }
                                                        };