Example usage for org.apache.cassandra.streaming SessionInfo getTotalFilesToSend

List of usage examples for org.apache.cassandra.streaming SessionInfo getTotalFilesToSend

Introduction

In this page you can find the example usage for org.apache.cassandra.streaming SessionInfo getTotalFilesToSend.

Prototype

public long getTotalFilesToSend() 

Source Link

Usage

From source file:com.spotify.hdfs2cass.cassandra.thrift.ProgressIndicator.java

License:Open Source License

@Override
public void handleStreamEvent(StreamEvent event) {

    LOG.debug("Handling stream event");

    if (event.eventType == StreamEvent.Type.STREAM_PREPARED) {

        SessionInfo session = ((StreamEvent.SessionPreparedEvent) event).session;
        sessionsByHost.put(session.peer, session);
        LOG.info(String.format("Session to %s created", session.connecting.getHostAddress()));

    } else if (event.eventType == StreamEvent.Type.STREAM_COMPLETE) {

        StreamEvent.SessionCompleteEvent completionEvent = ((StreamEvent.SessionCompleteEvent) event);
        if (completionEvent.success) {
            LOG.info(String.format("Stream to %s successful.", completionEvent.peer.getHostAddress()));
        } else {//from   ww w.jav a2s.com
            LOG.info(String.format("Stream to %s failed.", completionEvent.peer.getHostAddress()));
        }
    } else if (event.eventType == StreamEvent.Type.FILE_PROGRESS) {

        ProgressInfo progressInfo = ((StreamEvent.ProgressEvent) event).progress;

        // update progress
        Set<ProgressInfo> progresses = progressByHost.get(progressInfo.peer);
        if (progresses == null) {
            progresses = Sets.newSetFromMap(Maps.<ProgressInfo, Boolean>newConcurrentMap());
            progressByHost.put(progressInfo.peer, progresses);
        }
        if (progresses.contains(progressInfo)) {
            progresses.remove(progressInfo);
        }
        progresses.add(progressInfo);

        // craft status update string
        StringBuilder sb = new StringBuilder();
        sb.append("progress: ");

        long totalProgress = 0;
        long totalSize = 0;
        for (Map.Entry<InetAddress, Set<ProgressInfo>> entry : progressByHost.entrySet()) {
            SessionInfo session = sessionsByHost.get(entry.getKey());

            long size = session.getTotalSizeToSend();
            long current = 0;
            int completed = 0;
            for (ProgressInfo progress : entry.getValue()) {
                if (progress.currentBytes == progress.totalBytes) {
                    completed++;
                }
                current += progress.currentBytes;
            }
            totalProgress += current;
            totalSize += size;
            sb.append("[").append(entry.getKey());
            sb.append(" ").append(completed).append("/").append(session.getTotalFilesToSend());
            sb.append(" (").append(size == 0 ? 100L : current * 100L / size).append("%)] ");
        }
        long time = System.nanoTime();
        long deltaTime = TimeUnit.NANOSECONDS.toMillis(time - lastTime);
        lastTime = time;
        long deltaProgress = totalProgress - lastProgress;
        lastProgress = totalProgress;

        sb.append("[total: ").append(totalSize == 0 ? 100L : totalProgress * 100L / totalSize).append("% - ");
        sb.append(mbPerSec(deltaProgress, deltaTime)).append("MB/s");
        sb.append(" (avg: ").append(mbPerSec(totalProgress, TimeUnit.NANOSECONDS.toMillis(time - start)))
                .append("MB/s)]");

        LOG.info(sb.toString());
    }
}