001 /**
002 * Copyright 2010-2012 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.slf4j.Logger;
026 import org.slf4j.LoggerFactory;
027
028 /**
029 * Listen for events about the transfer and record timing and byte count information
030 *
031 * @author Jeff Caddel
032 * @since May 27, 2010 5:08:12 PM
033 */
034 public class S3Listener implements TransferListener, SessionListener {
035 final Logger log = LoggerFactory.getLogger(S3Listener.class);
036 SimpleFormatter formatter = new SimpleFormatter();
037 SessionTracker sessionTracker = new SessionTracker();
038
039 public void transferCompleted(final TransferEvent transferEvent) {
040 TransferTracker tt = sessionTracker.getCurrentTransfer();
041 tt.setCompleted(System.currentTimeMillis());
042 // System.out.println();
043 // log(tt.toString());
044 }
045
046 public void transferError(final TransferEvent transferEvent) {
047 log.error("Transfer error: " + transferEvent.getException(), transferEvent.getException());
048 }
049
050 public void transferInitiated(final TransferEvent transferEvent) {
051 sessionTracker.addTransfer(new TransferTracker());
052 TransferTracker tt = sessionTracker.getCurrentTransfer();
053 tt.setInitiated(System.currentTimeMillis());
054 }
055
056 public void transferProgress(final TransferEvent transferEvent, final byte[] buffer, final int length) {
057 // No bytes were actually read
058 if (length == -1) {
059 return;
060 }
061 TransferTracker tt = sessionTracker.getCurrentTransfer();
062 int byteCount = tt.getByteCount() + length;
063 tt.setByteCount(byteCount);
064 }
065
066 public void transferStarted(final TransferEvent transferEvent) {
067 TransferTracker tt = sessionTracker.getCurrentTransfer();
068 tt.setStarted(System.currentTimeMillis());
069 if (transferEvent.getRequestType() == TransferEvent.REQUEST_GET) {
070 log.info("Downloading: " + getURI(transferEvent));
071 } else {
072 log.info("Uploading: " + getURI(transferEvent));
073 }
074 // System.out.print("[INFO] ");
075 }
076
077 protected String getURI(final TransferEvent event) {
078 return getNormalizedURI(event.getWagon().getRepository().getUrl() + "/" + event.getResource().getName());
079 }
080
081 protected String getNormalizedURI(final String uri) {
082 try {
083 URI rawUri = new URI(uri);
084 return rawUri.normalize().toString();
085 } catch (URISyntaxException e) {
086 return uri;
087 }
088 }
089
090 /**
091 * @see SessionListener#sessionOpening(SessionEvent)
092 */
093 public void sessionOpening(final SessionEvent sessionEvent) {
094 sessionTracker.addSessionEvent(sessionEvent);
095 }
096
097 /**
098 * @see SessionListener#sessionOpened(SessionEvent)
099 */
100 public void sessionOpened(final SessionEvent sessionEvent) {
101 sessionTracker.addSessionEvent(sessionEvent);
102 sessionTracker.setOpened(System.currentTimeMillis());
103 // log(sessionEvent.getWagon().getRepository().getUrl() + " - Session: Opened ");
104 }
105
106 /**
107 * @see SessionListener#sessionDisconnecting(SessionEvent)
108 */
109 public void sessionDisconnecting(final SessionEvent sessionEvent) {
110 sessionTracker.addSessionEvent(sessionEvent);
111 sessionTracker.setDisconnecting(System.currentTimeMillis());
112 // log(sessionEvent.getWagon().getRepository().getUrl() + " - Session: Disconnecting ");
113 }
114
115 /**
116 * @see SessionListener#sessionDisconnected(SessionEvent)
117 */
118 public void sessionDisconnected(final SessionEvent sessionEvent) {
119 sessionTracker.addSessionEvent(sessionEvent);
120 // log(sessionEvent.getWagon().getRepository().getUrl() + " - Disconnected");
121 sessionTracker.setDisconnected(System.currentTimeMillis());
122 int transferCount = sessionTracker.getTransfers().size();
123 long byteCount = 0;
124 // long transferElapsed = 0;
125 for (TransferTracker tt : sessionTracker.getTransfers()) {
126 byteCount += tt.getByteCount();
127 // transferElapsed += tt.getCompleted() - tt.getStarted();
128 }
129 long elapsed = sessionTracker.getDisconnected() - sessionTracker.getOpened();
130 StringBuilder sb = new StringBuilder();
131 sb.append("Transfers: " + transferCount);
132 sb.append(" Time: " + formatter.getTime(elapsed));
133 sb.append(" Amount: " + formatter.getSize(byteCount));
134 // sb.append(" Rate: " + formatter.getRate(transferElapsed, byteCount));
135 sb.append(" Throughput: " + formatter.getRate(elapsed, byteCount));
136 if (transferCount > 0) {
137 log.info(sb.toString());
138 }
139 }
140
141 /**
142 * @see SessionListener#sessionConnectionRefused(SessionEvent)
143 */
144 public void sessionConnectionRefused(final SessionEvent sessionEvent) {
145 sessionTracker.addSessionEvent(sessionEvent);
146 log.warn(sessionEvent.getWagon().getRepository().getUrl() + " - Connection refused");
147 }
148
149 /**
150 * @see SessionListener#sessionLoggedIn(SessionEvent)
151 */
152 public void sessionLoggedIn(final SessionEvent sessionEvent) {
153 sessionTracker.addSessionEvent(sessionEvent);
154 sessionTracker.setLoggedIn(System.currentTimeMillis());
155 log.info("Logged in - " + sessionEvent.getWagon().getRepository().getHost());
156 }
157
158 /**
159 * @see SessionListener#sessionLoggedOff(SessionEvent)
160 */
161 public void sessionLoggedOff(final SessionEvent sessionEvent) {
162 sessionTracker.addSessionEvent(sessionEvent);
163 sessionTracker.setLoggedOff(System.currentTimeMillis());
164 log.info("Logged off - " + sessionEvent.getWagon().getRepository().getHost());
165 }
166
167 public void sessionError(final SessionEvent sessionEvent) {
168 sessionTracker.addSessionEvent(sessionEvent);
169 log.error("Session error: " + sessionEvent.getException(), sessionEvent.getException());
170 }
171
172 public void debug(final String message) {
173 log.debug(message);
174 }
175
176 }