/*
* RequestLogEntry.java
*
* Copyright (C) 2009-12 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.core.client.jsonrpc;
import org.rstudio.core.client.CsvWriter;
import org.rstudio.core.client.regex.Match;
import org.rstudio.core.client.regex.Pattern;
public class RequestLogEntry
{
public static class ResponseType
{
public static final int None = 0;
public static final int Normal = 1;
public static final int Error = 2;
public static final int Cancelled = 3;
public static final int Unknown = 4;
}
public RequestLogEntry(long requestTime,
String requestId,
String requestData)
{
requestTime_ = requestTime;
requestId_ = requestId;
requestData_ = requestData;
}
public long getRequestTime()
{
return requestTime_;
}
public String getRequestId()
{
return requestId_;
}
public String getRequestData()
{
return requestData_;
}
public Long getResponseTime()
{
return responseTime_;
}
public String getResponseData()
{
return responseData_;
}
public void logResponse(int responseType, String data)
{
responseType_ = responseType;
responseTime_ = System.currentTimeMillis();
responseData_ = data;
}
public int getResponseType()
{
return responseType_;
}
public boolean isAlive()
{
return responseType_ == ResponseType.None;
}
public String getRequestMethodName()
{
if (requestData_.equals("[REDACTED]"))
return requestData_;
Pattern p = Pattern.create("\\\"method\\\":\\s*\\\"([^\"]+)\\\"");
Match match = p.match(requestData_, 0);
if (match == null)
return null;
return match.getGroup(1);
}
public RequestLogEntry clone()
{
RequestLogEntry clone = new RequestLogEntry(requestTime_,
requestId_,
requestData_);
clone.responseType_ = responseType_;
clone.responseData_ = responseData_;
clone.responseTime_ = responseTime_;
return clone;
}
public void toCsv(CsvWriter writer)
{
writer.writeValue(requestTime_ + "");
writer.writeValue(requestId_);
writer.writeValue(requestData_);
writer.writeValue(responseType_ + "");
if (responseType_ != ResponseType.None)
{
writer.writeValue(responseTime_.toString());
writer.writeValue(responseData_);
}
writer.endLine();
}
public static RequestLogEntry fromValues(String[] line)
{
if (line.length == 0 || (line.length == 1 && line[0].length() == 0))
return null;
long reqTime = Long.parseLong(line[0]);
String reqId = line[1];
String reqData = line[2];
int respType = Integer.parseInt(line[3]);
Long respTime = null;
String respData = null;
if (respType != ResponseType.None)
{
respTime = Long.parseLong(line[4]);
respData = line[5];
}
RequestLogEntry entry = new RequestLogEntry(reqTime, reqId, reqData);
entry.responseType_ = respType;
entry.responseTime_ = respTime;
entry.responseData_ = respData;
return entry;
}
private final long requestTime_;
private final String requestId_;
private final String requestData_;
private Long responseTime_;
private String responseData_;
private int responseType_ = ResponseType.None;
}