001 /**
002 * Copyright 2010-2013 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.maven.wagon;
017
018 import java.net.URI;
019 import java.net.URISyntaxException;
020
021 import org.apache.maven.wagon.events.SessionEvent;
022 import org.apache.maven.wagon.events.SessionListener;
023 import org.apache.maven.wagon.events.TransferEvent;
024 import org.apache.maven.wagon.events.TransferListener;
025 import org.kuali.common.aws.s3.SimpleFormatter;
026 import org.slf4j.Logger;
027 import org.slf4j.LoggerFactory;
028
029 /**
030 * Listen for events about the transfer and record timing and byte count information
031 *
032 * @author Jeff Caddel
033 * @since May 27, 2010 5:08:12 PM
034 */
035 public class S3Listener implements TransferListener, SessionListener {
036 final Logger log = LoggerFactory.getLogger(S3Listener.class);
037 SimpleFormatter formatter = new SimpleFormatter();
038 SessionTracker sessionTracker = new SessionTracker();
039
040 public void transferCompleted(final TransferEvent transferEvent) {
041 TransferTracker tt = sessionTracker.getCurrentTransfer();
042 tt.setCompleted(System.currentTimeMillis());
043 // System.out.println();
044 // log(tt.toString());
045 }
046
047 public void transferError(final TransferEvent transferEvent) {
048 log.error("Transfer error: " + transferEvent.getException(), transferEvent.getException());
049 }
050
051 public void transferInitiated(final TransferEvent transferEvent) {
052 sessionTracker.addTransfer(new TransferTracker());
053 TransferTracker tt = sessionTracker.getCurrentTransfer();
054 tt.setInitiated(System.currentTimeMillis());
055 }
056
057 public void transferProgress(final TransferEvent transferEvent, final byte[] buffer, final int length) {
058 // No bytes were actually read
059 if (length == -1) {
060 return;
061 }
062 TransferTracker tt = sessionTracker.getCurrentTransfer();
063 int byteCount = tt.getByteCount() + length;
064 tt.setByteCount(byteCount);
065 }
066
067 public void transferStarted(final TransferEvent transferEvent) {
068 TransferTracker tt = sessionTracker.getCurrentTransfer();
069 tt.setStarted(System.currentTimeMillis());
070 if (transferEvent.getRequestType() == TransferEvent.REQUEST_GET) {
071 log.info("Downloading: " + getURI(transferEvent));
072 } else {
073 log.info("Uploading: " + getURI(transferEvent));
074 }
075 // System.out.print("[INFO] ");
076 }
077
078 protected String getURI(final TransferEvent event) {
079 return getNormalizedURI(event.getWagon().getRepository().getUrl() + "/" + event.getResource().getName());
080 }
081
082 protected String getNormalizedURI(final String uri) {
083 try {
084 URI rawUri = new URI(uri);
085 return rawUri.normalize().toString();
086 } catch (URISyntaxException e) {
087 return uri;
088 }
089 }
090
091 /**
092 * @see SessionListener#sessionOpening(SessionEvent)
093 */
094 public void sessionOpening(final SessionEvent sessionEvent) {
095 sessionTracker.addSessionEvent(sessionEvent);
096 }
097
098 /**
099 * @see SessionListener#sessionOpened(SessionEvent)
100 */
101 public void sessionOpened(final SessionEvent sessionEvent) {
102 sessionTracker.addSessionEvent(sessionEvent);
103 sessionTracker.setOpened(System.currentTimeMillis());
104 // log(sessionEvent.getWagon().getRepository().getUrl() + " - Session: Opened ");
105 }
106
107 /**
108 * @see SessionListener#sessionDisconnecting(SessionEvent)
109 */
110 public void sessionDisconnecting(final SessionEvent sessionEvent) {
111 sessionTracker.addSessionEvent(sessionEvent);
112 sessionTracker.setDisconnecting(System.currentTimeMillis());
113 // log(sessionEvent.getWagon().getRepository().getUrl() + " - Session: Disconnecting ");
114 }
115
116 /**
117 * @see SessionListener#sessionDisconnected(SessionEvent)
118 */
119 public void sessionDisconnected(final SessionEvent sessionEvent) {
120 sessionTracker.addSessionEvent(sessionEvent);
121 // log(sessionEvent.getWagon().getRepository().getUrl() + " - Disconnected");
122 sessionTracker.setDisconnected(System.currentTimeMillis());
123 int transferCount = sessionTracker.getTransfers().size();
124 long byteCount = 0;
125 // long transferElapsed = 0;
126 for (TransferTracker tt : sessionTracker.getTransfers()) {
127 byteCount += tt.getByteCount();
128 // transferElapsed += tt.getCompleted() - tt.getStarted();
129 }
130 long elapsed = sessionTracker.getDisconnected() - sessionTracker.getOpened();
131 StringBuilder sb = new StringBuilder();
132 sb.append("Transfers: " + transferCount);
133 sb.append(" Time: " + formatter.getTime(elapsed));
134 sb.append(" Amount: " + formatter.getSize(byteCount));
135 // sb.append(" Rate: " + formatter.getRate(transferElapsed, byteCount));
136 sb.append(" Throughput: " + formatter.getRate(elapsed, byteCount));
137 if (transferCount > 0) {
138 log.info(sb.toString());
139 }
140 }
141
142 /**
143 * @see SessionListener#sessionConnectionRefused(SessionEvent)
144 */
145 public void sessionConnectionRefused(final SessionEvent sessionEvent) {
146 sessionTracker.addSessionEvent(sessionEvent);
147 log.warn(sessionEvent.getWagon().getRepository().getUrl() + " - Connection refused");
148 }
149
150 /**
151 * @see SessionListener#sessionLoggedIn(SessionEvent)
152 */
153 public void sessionLoggedIn(final SessionEvent sessionEvent) {
154 sessionTracker.addSessionEvent(sessionEvent);
155 sessionTracker.setLoggedIn(System.currentTimeMillis());
156 log.info("Logged in - " + sessionEvent.getWagon().getRepository().getHost());
157 }
158
159 /**
160 * @see SessionListener#sessionLoggedOff(SessionEvent)
161 */
162 public void sessionLoggedOff(final SessionEvent sessionEvent) {
163 sessionTracker.addSessionEvent(sessionEvent);
164 sessionTracker.setLoggedOff(System.currentTimeMillis());
165 log.info("Logged off - " + sessionEvent.getWagon().getRepository().getHost());
166 }
167
168 public void sessionError(final SessionEvent sessionEvent) {
169 sessionTracker.addSessionEvent(sessionEvent);
170 log.error("Session error: " + sessionEvent.getException(), sessionEvent.getException());
171 }
172
173 public void debug(final String message) {
174 log.debug(message);
175 }
176
177 }